This is a step by step instruction on how to create an update site using Buckminster. It assumes that you already have some features that you want to include on the site and that you have the Buckminster core and pde support installed in the IDE.

This is a step by step instruction on how to create an update site using Buckminster. It assumes that you already have some features that you want to include on the site and that you have the Buckminster core and pde support installed in the IDE.

−

Some names in this example are keywords that has to be entered verbatim. Such names are marked <font color=blue>in blue</font>.

+

=P2 repositories using the 3.5 release and beyond=

+

Buckminster recognizes a normal Eclipse Feature as a valid description of a P2 enabled site. Actions has been added to the feature so that a P2 site can be built automatically. The build can include steps to normalize, sign, and pack the site.

+

The process is very simple.

+

#Create a feature project

+

#Add all features that you want published to the site

+

#Add categorization to the build.properties

+

#Build the site

+

+

===The feature.xml file===

+

The content of the feature.xml file is used like this:

+

{| {{Greytable}}

+

|-

+

!feature.xml

+

!generated repository

+

|- valign="top"

+

|Label

+

|Name of the metadata repository

+

|- valign="top"

+

|Included features

+

|Root IU's

+

|- valign="top"

+

|Discovery sites

+

|Site references

+

|- valign="top"

+

|Mirrors Site

+

|Mirrors Site

+

|}

+

+

Please note that since this feature is a description of the site as a whole, it is not included in the generated site.

+

+

===The build.properties file===

+

Some additional information (such as categories) can be provided in the build.properties file. An editor pane

+

for this file is already readily available in the standard PDE feature editor.

|The type of signing to use. Can be either eclipse.remote (requires Eclipse committer credentials) or local (requires local certificate)

+

|eclipse.remote

+

|}

+

+

===The eclipse.remote signing===

+

This is a special type of signing added to support builds intended to be released at the eclipse.org download site. The signing requires that the one who runs the action can provide credentials for an eclipse committer that has signing privileges.

+

+

If enabled, the build will package all relevant jars in a zip file and send it over to Eclipse.org using scp. It will request them to be signed by adding them to the queue for the Eclipse signer and then await the result. Once the signing is complete, it will be picked up and the build will continue. Although sometimes a bit slow (more then 20 minutes is rare), the process is fully automatic and does not require any manual intervention.

+

+

===Using local signing===

+

Local signing can be used by anyone interested in signing the jars that are included in the generated site. To use this, you must create a personal certificate. This is done with the <tt>keytool</tt> executable. You will find it in the <tt>bin</tt> catalog of your JDK.

You will be asked for some information about name, location, and password. Enter some sane values. Finally you will be asked to confirm the information and you are then asked if you want the same password as for the keystore - simply hit return, you do not want an additional password.

The site can also be built from the command line using a headless setup. Simply issue the command:

+

<pre>

+

buckminster -d <your workspace> perform org.test.update#site.p2

+

</pre>

+

+

==Tips==

+

If you encounter problems to build your update site, please check file META-INF/MANIFEST.MF of all your plugins included in your features.

+

+

The MANIFEST.MF shall contains following line:

+

Bundle-ManifestVersion: 2

+

+

If not, add it to your file. Then apply all proposed quick fixes to have a full compliant manifest, at the end there should be no warnings (at least for MANIFEST.MF).

+

+

=Legacy Update sites=

==Creating the Update Site Project==

==Creating the Update Site Project==

−

{{CommentBox|What is the purpose of creating this project? Suggest something like:

+

To Buckminster, an update site is not different from any other type of component. We need to keep the definition of the update site in a project, and we need some additional meta data to enable convenient building of the site. The first step is to create the update site project:

−

"To Buckminster, an update site is not different from any other type of component. We need to keep the definition of the update site in a project, and we need some additional meta data to enable convenient building of the site. The first step is to create the update site project:"}}

#In the ''New Project'' wizard that pops up, open the ''Plug-in Development'' folder

#In the ''New Project'' wizard that pops up, open the ''Plug-in Development'' folder

Line 15:

Line 177:

The project appears in the workspace and it contains one single file, an empty '''site.xml'''. Buckminster will use this as the update site template. This means that you can add site categories to this file but you should ''not'' add any features. Buckminster will generate a new site.xml where the features are added.

The project appears in the workspace and it contains one single file, an empty '''site.xml'''. Buckminster will use this as the update site template. This means that you can add site categories to this file but you should ''not'' add any features. Buckminster will generate a new site.xml where the features are added.

−

==Creating an index.html file==

+

===Creating an index.html file===

−

{{CommentBox|Where should this file be created? Guessing the 'update site project', but is uncertain because of paragraph numbering.}}

+

Just create an empty file in the root folder of your new update site project for now and call it '''index.html'''. You can add content to this file that will be what the user will see if they happen to access your update site with a browser.

−

Just create an empty file for now and call it '''index.html'''. You can add content to this file that will be what the user will see if they happen to access your update site with a browser.

+

−

==Creating the Component Specification==

+

===Creating the Component Specification===

−

{{CommentBox|Here it is clear that it is for the update site project. Suggest changing headings so that all steps that are for "setting up the update site project" are under the same heading.}}

+

Buckminster describes all components in terms of CSPECs. The update site is no exception. Here are the steps to create such a CSPEC and enter the needed information:

Buckminster describes all components in terms of CSPECs. The update site is no exception. Here are the steps to create such a CSPEC and enter the needed information:

#Right click on the update site project and select ''New'' -> ''Other''

#Right click on the update site project and select ''New'' -> ''Other''

Line 29:

Line 189:

A file named '''buckminster.cspec''' is created in the project and the Buckminster CSPEC editor opens. Do not change the name of this file.

A file named '''buckminster.cspec''' is created in the project and the Buckminster CSPEC editor opens. Do not change the name of this file.

−

===Main information===

+

====Main information====

*The name of the component is normally the same as the name of the project. This makes it easier to find the component.

*The name of the component is normally the same as the name of the project. This makes it easier to find the component.

*The component type must in our case be set to '''buckminster'''.

*The component type must in our case be set to '''buckminster'''.

*The version can be any OSGi compliant version such as '''1.0.0'''

*The version can be any OSGi compliant version such as '''1.0.0'''

−

===Artifacts===

+

====Artifacts====

Artifacts denotes files and folders that are present inside of a component. The action that will create the update site needs to know about the '''site.xml''' template and other files to copy so we need to add that to our specification:

Artifacts denotes files and folders that are present inside of a component. The action that will create the update site needs to know about the '''site.xml''' template and other files to copy so we need to add that to our specification:

#Click on the Artifacts tab

#Click on the Artifacts tab

Line 48:

Line 208:

We now have two artifacts, each with one path. The separation is necessary in this particular case since the build action will reference the artifacs separately. An artifact may have several paths and you can add as many files and folders as you wish to the ''site.rootFiles'' artifact.

We now have two artifacts, each with one path. The separation is necessary in this particular case since the build action will reference the artifacs separately. An artifact may have several paths and you can add as many files and folders as you wish to the ''site.rootFiles'' artifact.

−

===Dependencies===

+

====Dependencies====

We need to define the features that will be included on the update site. Buckminster considers them to be ''dependencies'':

We need to define the features that will be included on the update site. Buckminster considers them to be ''dependencies'':

#Click on the ''Dependencies'' tab

#Click on the ''Dependencies'' tab

Line 57:

Line 217:

##Click ''OK''

##Click ''OK''

−

===Groups===

+

====Groups====

−

The build action will expect one prerequisite that lists all the feature jars and one that lists all plugin jars. Luckely for us, Buckminster has already generated CSPEC's for all features with attributes that will provide just that. A feature will always have the two public attributes:

+

The build action will expect one prerequisite that lists all the feature jars and one that lists all plugin jars. Luckily for us, Buckminster has already generated CSPEC's for all features with attributes that will provide just that. A feature will always have the two public attributes:

* '''feature.jars'''

* '''feature.jars'''

:This is the transitive closure of all features (including the feature itself) in jared format.

:This is the transitive closure of all features (including the feature itself) in jared format.

Line 75:

Line 235:

Repeat these steps for a group that is called '''bundle.jars''' that references the <font color=blue>'''bundle.jars'''</font> attribute of each feature.

Repeat these steps for a group that is called '''bundle.jars''' that references the <font color=blue>'''bundle.jars'''</font> attribute of each feature.

−

===Defining Site Categories===

+

=====Defining Site Categories=====

This step is optional unless you want to categorize the contents of the update site. In order to define a Site Category, you must first create the category in the '''site.xml''' file and then add it as a group in the CSPEC.

This step is optional unless you want to categorize the contents of the update site. In order to define a Site Category, you must first create the category in the '''site.xml''' file and then add it as a group in the CSPEC.

Line 132:

Line 292:

If you follow the example (simplification or not), you now have four groups, Basic, Optional, feature.jars, and bundle.jars.

If you follow the example (simplification or not), you now have four groups, Basic, Optional, feature.jars, and bundle.jars.

−

===The Action===

+

====The Action====

The last thing to add to the CSPEC is the Action that will trigger the actual build of the update site.

The last thing to add to the CSPEC is the Action that will trigger the actual build of the update site.

##Enter ''Key'' <font color=blue>'''targets'''</font> and the value <font color=blue>'''create.legacy.site'''</font> (in releases prior to 3.5 this target was called <font color=blue>'''create.site'''</font>)

##Click OK

##Click OK

#Finally, we must specify the product of this action and give it an alias that it passes on to Ant.

#Finally, we must specify the product of this action and give it an alias that it passes on to Ant.

Line 197:

Line 357:

buckminster -d <your workspace> perform org.test.update#build.site

buckminster -d <your workspace> perform org.test.update#build.site

</pre>

</pre>

+

+

+

[[Category:Buckminster]]

+

[[Category:Buckminster Tutorial]]

+

[[Category:Buckminster Usecases]]

+

[[Category:Buckminster Examples]]

Latest revision as of 03:59, 20 August 2009

This is a step by step instruction on how to create an update site using Buckminster. It assumes that you already have some features that you want to include on the site and that you have the Buckminster core and pde support installed in the IDE.

P2 repositories using the 3.5 release and beyond

Buckminster recognizes a normal Eclipse Feature as a valid description of a P2 enabled site. Actions has been added to the feature so that a P2 site can be built automatically. The build can include steps to normalize, sign, and pack the site.

The process is very simple.

Create a feature project

Add all features that you want published to the site

Add categorization to the build.properties

Build the site

The feature.xml file

The content of the feature.xml file is used like this:

feature.xml

generated repository

Label

Name of the metadata repository

Included features

Root IU's

Discovery sites

Site references

Mirrors Site

Mirrors Site

Please note that since this feature is a description of the site as a whole, it is not included in the generated site.

The build.properties file

Some additional information (such as categories) can be provided in the build.properties file. An editor pane
for this file is already readily available in the standard PDE feature editor.

The type of signing to use. Can be either eclipse.remote (requires Eclipse committer credentials) or local (requires local certificate)

eclipse.remote

The eclipse.remote signing

This is a special type of signing added to support builds intended to be released at the eclipse.org download site. The signing requires that the one who runs the action can provide credentials for an eclipse committer that has signing privileges.

If enabled, the build will package all relevant jars in a zip file and send it over to Eclipse.org using scp. It will request them to be signed by adding them to the queue for the Eclipse signer and then await the result. Once the signing is complete, it will be picked up and the build will continue. Although sometimes a bit slow (more then 20 minutes is rare), the process is fully automatic and does not require any manual intervention.

Using local signing

Local signing can be used by anyone interested in signing the jars that are included in the generated site. To use this, you must create a personal certificate. This is done with the keytool executable. You will find it in the bin catalog of your JDK.

You will be asked for some information about name, location, and password. Enter some sane values. Finally you will be asked to confirm the information and you are then asked if you want the same password as for the keystore - simply hit return, you do not want an additional password.

Building the site

Headless builds

The site can also be built from the command line using a headless setup. Simply issue the command:

buckminster -d <your workspace> perform org.test.update#site.p2

Tips

If you encounter problems to build your update site, please check file META-INF/MANIFEST.MF of all your plugins included in your features.

The MANIFEST.MF shall contains following line:

Bundle-ManifestVersion: 2

If not, add it to your file. Then apply all proposed quick fixes to have a full compliant manifest, at the end there should be no warnings (at least for MANIFEST.MF).

Legacy Update sites

Creating the Update Site Project

To Buckminster, an update site is not different from any other type of component. We need to keep the definition of the update site in a project, and we need some additional meta data to enable convenient building of the site. The first step is to create the update site project:

Right click in the Package Explorer and select New -> Project

In the New Project wizard that pops up, open the Plug-in Development folder

Click on Update Site Project

Give the project a name. In this example we use org.test.update

Click on Finish

The project appears in the workspace and it contains one single file, an empty site.xml. Buckminster will use this as the update site template. This means that you can add site categories to this file but you should not add any features. Buckminster will generate a new site.xml where the features are added.

Creating an index.html file

Just create an empty file in the root folder of your new update site project for now and call it index.html. You can add content to this file that will be what the user will see if they happen to access your update site with a browser.

Creating the Component Specification

Buckminster describes all components in terms of CSPECs. The update site is no exception. Here are the steps to create such a CSPEC and enter the needed information:

Right click on the update site project and select New -> Other

In the New wizard that pops up, open the Buckminster folder

Select Component Specification file and click on Next

Click on Finish to accept the default values for Container: and File name:

A file named buckminster.cspec is created in the project and the Buckminster CSPEC editor opens. Do not change the name of this file.

Main information

The name of the component is normally the same as the name of the project. This makes it easier to find the component.

The component type must in our case be set to buckminster.

The version can be any OSGi compliant version such as 1.0.0

Artifacts

Artifacts denotes files and folders that are present inside of a component. The action that will create the update site needs to know about the site.xml template and other files to copy so we need to add that to our specification:

Click on the Artifacts tab

Click on New below the Artifacts table

Enter a name such as site.template

Click on the New button next to the Path table

Enter the name site.xml in the dialog that pops up and click OK

Click on New below the Artifacts table

Enter the name site.rootFiles

Click on the New button next to the Path table

Enter the name index.html in the dialog that pops up and click OK

We now have two artifacts, each with one path. The separation is necessary in this particular case since the build action will reference the artifacs separately. An artifact may have several paths and you can add as many files and folders as you wish to the site.rootFiles artifact.

Dependencies

We need to define the features that will be included on the update site. Buckminster considers them to be dependencies:

Click on the Dependencies tab

For each feature that you want to add, repeat the following:

Click on New just next to the Dependencies table

Enter the name of a feature component

Set the Component Type to eclipse.feature

Click OK

Groups

The build action will expect one prerequisite that lists all the feature jars and one that lists all plugin jars. Luckily for us, Buckminster has already generated CSPEC's for all features with attributes that will provide just that. A feature will always have the two public attributes:

feature.jars

This is the transitive closure of all features (including the feature itself) in jared format.

bundle.jars

This is all the plugins that the transitive closure of all features is referencing in jared format.

Since we don't have a feature that describes the update site itself, we need to create two new groups. One that group all the feature.jars together, and one that group all the bundle.jars together.

Click on New just below the Groups table

Enter the name of the group. We call it feature.jars

For each feature that should be included in this group

Click on New just next to the prerequisites table

Select a feature from the drop down menu.

Enter the name feature.jars

Click OK

Repeat these steps for a group that is called bundle.jars that references the bundle.jars attribute of each feature.

Defining Site Categories

This step is optional unless you want to categorize the contents of the update site. In order to define a Site Category, you must first create the category in the site.xml file and then add it as a group in the CSPEC.

In order to create a category in the site.xml file, do the following:

Double click on the site.xml file. The Update Site Editor opens

On the Site Map tab, click New Category

Give the category a name. In this example we will use Basic

Add a label such as Basic features

Repeat these steps and create an additional categogy named Optional with label Optional features

Back to the CSPEC editor:

Click on the Groups tab

Click on New just below the Groups table

Enter the name of the group, i.e. Basic

For each feature that should be included in this group

Click on New just next to the prerequisites table

Select a feature from the drop down menu.

Enter the name feature.jars

Click OK

Repeat these steps for the Optional group.

Attributes, Groups, and Actions are all Attributes in Buckminster terms. A group contains attributes. Subsequently, a group can include other groups. This allows for a simplification of the feature.jars group that we created earlier. Instead of having that group include all features, it could instead include the two category groups, i.e. instead of having:

(the example assumes that a, b, c, and d are features and [xxx] denotes attribute xxx)

If you follow the example (simplification or not), you now have four groups, Basic, Optional, feature.jars, and bundle.jars.

The Action

The last thing to add to the CSPEC is the Action that will trigger the actual build of the update site.

Click on the Actions tab

Adding General action information

Click on New below the Actions table

Enter the name build.site

Put a check mark the Public checkbox

Enter the Actor Name:ant

Adding the site.template prerequisite

Click on the New button next to the Prerequisites table

Leave Component blank (this means current component)

Select site.template from the Attribute combobox

Enter the Alias name template

Click OK

Adding the rootFiles prerequisite

Click on the New button next to the Prerequisites table

Leave Component blank

Select site.rootFiles from the Attribute combobox

Enter the Alias name rootFiles

Click OK

Adding the features

Click on the New button next to the Prerequisites table

Leave Component blank

Select feature.jars from the Attribute combobox

Enter the Alias name features

Click OK

Adding the plugins

Click on the New button next to the Prerequisites table

Leave Component blank

Select bundle.jars from the Attribute combobox

Enter the Alias name plugins

Click OK

Adding general properties. These properties control the general behavior.

In the middle pane, click on Properties

Click on New next to the General Properties table

Enter Keysite.name and a value such as test.archivedsite

Click OK

If you want your site to have some extra suffix such as _incubation then:

Click on New next to the General Properties table

Enter Keysite.extra.suffix and a value such as _incubation

Click OK

Adding actor properties. These properties control behavior specific to an actor. We need two of them. One to specify the ant build script that will be used and another to specify what ant target to call in that file.

Click on New next to the Actor Properties table

Enter KeybuildFileId and the value buckminster.pdetasks

Click OK

Click on New again

Enter Keytargets and the value create.legacy.site (in releases prior to 3.5 this target was called create.site)

Click OK

Finally, we must specify the product of this action and give it an alias that it passes on to Ant.

Click on Products in the middle pane.

Enter the Product Aliasaction.output

Enter the Product Base Pathsite/

This concludes the CSPEC editing. Save it using CTRL-s or File -> Save

Building the site

The output will end up in ${user.temp}/buckminster by default. You can change this by setting the property buckminster.output.root in a property file that you reference when you execute the action. You can also specify properties using Windows -> Preferences -> Run/Debug -> String substitution.

Headless builds

The site can also be built from the command line using a headless setup. Simply issue the command: