Hi All,
After some discussions with p2-dev guys on how to support multiple product
installations in a single distribution, the previous directory structure
had to be slightly modified to provide separate configuration directory per
installed Product.
(Here a P2-Profile represents a separate Product; eg: WSO2CarbonProfile
represents the carbon product, WSO2ASProfile represents the AppServer
product )
So the modified distribution structure now looks like below;
*repository/components/*
|--WSO2CarbonProfile
| /configuration
| |--config.ini
| |--org.eclipse.equinox.simpleconfigurator/bundles.info (bundle set
to load Carbon product)
|
|--WSO2ASProfile
| /configuration
| |--config.ini
| |--org.eclipse.equinox.simpleconfigurator/bundles.info (bundle set
to load AS product) *
repository/components/p2 *{shared p2 data directory for above created
profiles}
|--org.eclipse.equinox.p2.engine
| |--profileRegistry
| |---WSO2CarbonProfile.profile {profile state of Carbon}
| |---WSO2ASProfile.profile {profile state of AS}
To generate the above target distribution structure using carbon-p2-plugin
we should parse the correct arguments to the p2-director [1]. P2-director
is the tool we invoke underneath carbon-p2-plugin to perform provisioning
actions and build our product distributions.
We can parse below arguments to p2-director to create a shared installation
in our product build;
*-shared* ${carbon.components.dir}/p2
*-destination* ${carbon.components.dir}/{ProfileID}
-shared parameter indicates that the installed products share the same
p2-data area to store/retrieve the P2-Profile related information
-destination is the installation path given for each product. (For each
Product profile we can change this -destination argument like
{carbon.home}/repository/components/WSO2CarbonProfile,
{carbon.home}/repository/components/WSO2ASProfile)
example invocation of p2-director to install carbon.core.feature to
WSO2CarbonProfile in a shared installation:
-nosplash -application org.eclipse.equinox.p2.director -metadataRepository
file:/media/Carbon_Volume/Ubuntu_Resources/carbon/kernel/branches/4.0.0/distribution/kernel/4.0.6/target/p2-repo
-artifactRepository
file:/media/Carbon_Volume/Ubuntu_Resources/carbon/kernel/branches/4.0.0/distribution/kernel/4.0.6/target/p2-repo
-profileProperties org.eclipse.update.install.features=true -installIU
org.wso2.carbon.core.feature.group/4.0.6, -bundlepool
/media/Carbon_Volume/Ubuntu_Resources/carbon/kernel/branches/4.0.0/distribution/kernel/4.0.6/target/WSO2Carbon
* -shared
/media/Carbon_Volume/Ubuntu_Resources/carbon/kernel/branches/4.0.0/distribution/kernel/4.0.6/target/WSO2Carbon/p2
* *
-destination
/media/Carbon_Volume/Ubuntu_Resources/carbon/kernel/branches/4.0.0/distribution/kernel/4.0.6/target/WSO2Carbon/WSO2CarbonProfile
* *-profile WSO2CarbonProfile*
*
How to generate the target product structure *
To see how we can generate this structure for multiple-profiles we should
first look at how the product distributions are created currently via
carbon-p2-plugin using default WSO2CarbonProfile
1. In Kernel distribution [2] ;
We first constitute the carbon product using the carbon product
configuration file: *carbon.product* [3].
carbon.product file has the initial configurations of the osgi-bundles to
start and other required configurations necessary to generate the
config.ini (the main configuration file for an eclipse product)
It also defines the minimal equinox runtime-feature to be installed first
into the default WSO2Carbon profile.
So in the first 2 phases in carbon-p2-plugin (publish-product,
materialize-product) we invoke the p2-director to use above carbon.product
and materialize the default WSO2CarbonProfile with a minimal runtime.
Then in profile-gen phase we install carbon.feature to the
WSO2CarbonProfile.
2. In product distributions;
We extract the carbon-core distribution and install additional features to
the existing default WSO2CarbonProfile in profile-gen phase.
When supporting multiple-profiles, we have to first do the process of
materializing the a Profile, before installing features to it.This can be
achieved using a separate product configuration file and installing
features to the Profile afterwards. Which means for each new P2Profile we
are going to introduce we need to have a separate product configuration
file to do the initial materializing part. (eg: as.product, bam.product etc)
Since this is a repetitive task, I looked at alternative ways of achieving
the initial profile materializing part by cloning the defaultProfile and
using it as the base to generate new Profiles. Raised the question in
p2-dev list also. Found out that this functionality is not currently
supported by P2 as per [4].
So to support multiple profiles in our product builds can we proceed with
using a .product configuration file *per* Profile to perform the initial
materializing part?
For example in this way, if we are going to create a BAM product with
different profiles such as Receiver, Analyzer, Dashboard etc, per each
profile we need to materialize bam-receiver.product, bam-analyzer.product,
bam-dashboard.product and construct the Profiles separately.
Can someone suggest a better approach in achieving this?
Thanks,
Dileepa
[1]
http://help.eclipse.org/indigo/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/p2_director.html
[2]
https://svn.wso2.org/repos/wso2/carbon/kernel/trunk/distribution/kernel/pom.xml
[3]
https://svn.wso2.org/repos/wso2/carbon/kernel/trunk/distribution/kernel/carbon.product
[4] https://bugs.eclipse.org/bugs/show_bug.cgi?id=287619
On Thu, Jan 31, 2013 at 11:09 AM, Pradeep Fernando <[email protected]> wrote:
> Excellent progress!!
>
> --Pradeep
>
>
> On Thu, Jan 31, 2013 at 11:08 AM, Dileepa Jayakody <[email protected]>wrote:
>
>> Hi Pradeep and All,
>>
>> To give a brief introduction on this; the purpose of this implementation
>> is to be able to pre-provision several products in to one distribution and
>> select the product to load at startup.
>> Each product can be considered a separate Product profile and at startup
>> by passing an argument like -Dprofile={Product.Profile} we should be able
>> to load the required product.
>>
>> After doing some background research on Equinox configurations I did a
>> POC by manually constructing the product distribution structure to support
>> this (as shown below), and point the equinox.configuration directory to
>> relevant {Profile}configuration directory at startup. This will load the
>> set of bundles relevant to the given Product.Profile.
>>
>> *Things to do;*
>> Need to look at on how to support feature installations separately to the
>> loaded Profile. Currently after loading a particular profile and installing
>> features the newly added bundle entries are not persisted.
>> I'm currently working on changing the carbon-p2-plugin goals to construct
>> the modified product distribution structure.
>> Will update the thread on the progress.
>> *
>>
>> Modified Product structure to support multiple-profiles*
>> *repository/components/configuration *{equinox configuration directory}
>> |
>> |--WSO2CarbonProfile
>> | |--config.ini
>> | |--org.eclipse.equinox.simpleconfigurator/bundles.info {bundle set
>> to load Carbon product}
>> |--WSO2ASProfile
>> | |--config.ini
>> | |--org.eclipse.equinox.simpleconfigurator/bundles.info {bundle set
>> to load AS product}
>>
>> *repository/components/p2 *{p2 data directory}
>> |--org.eclipse.equinox.p2.engine
>> | |--profileRegistry
>> | |---WSO2CarbonProfile.profile {p2 state of Carbon}
>> | |---WSO2ASProfile.profile {p2 state of AS}
>>
>> Thanks,
>> Dileepa
>>
>>
>>
>> On Thu, Jan 31, 2013 at 8:38 AM, Pradeep Fernando <[email protected]>wrote:
>>
>>> Hi,
>>>
>>> Dileepa working on the $subject.
>>>
>>> @Dileepa : can you please provide a brief update :)
>>>
>>>
>>> thanks,
>>> --Pradeep
>>>
>>>
>>>
>>
>>
>> --
>> Dileepa Jayakody,
>> Software Engineer, WSO2 Inc.
>> Lean . Enterprise . Middleware
>>
>> Mobile : +94777-857616
>>
>
>
>
> --
> *Pradeep Fernando*
> Member, Management Committee - Platform & Cloud Technologies
> Senior Software Engineer;WSO2 Inc.; http://wso2.com
>
> blog: http://pradeepfernando.blogspot.com
> m: +94776603662
>
--
Dileepa Jayakody,
Software Engineer, WSO2 Inc.
Lean . Enterprise . Middleware
Mobile : +94777-857616
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev