Etics build system overview.

Etics is the build system used by EGEE. The main goal of ETICS is to handle every aspect of the software development workflow, i.e. build, release and testing, in such a way that every operation has to be completely independent from the platforms, the languages and the tools involved in the process. The content of an ETICS site is structured as a set of hierarchies of entities, with one hierarchy for each project registered into the service; an entity can be a subsystem of the project or a component of a given subsystem. Every entity groups different configurations; a configuration contains all the information and instructions required for building, packaging and testing the software on one or more platforms. In the following it is referred to the set of information and instructions of a configuration as metadata. All glite components and subsystems should be in the project glite Middleware project. Interaction with Etics can be done via the web interface or command line tools. For more in-depth details and tutorials on Etics please see the Etics documentation.

ETICS and user permissions.

Any user must register to ETICS in order to have the correct set of permissions granted to its role. The registration can be performed at the following page:

Since the authentication mechanism of ETICS is based upon X509 public key infrastructure (PKI) before sending the request for registration the user must be sure that his credentials, the private key and the related certificate, have been correctly installed into the web browser. ETICS grants access even to unregistered users, providing a special "guest" account in this case; the system allows those users to perform just read-only operations.

ETICS provides a fine-grained permission management; rights can be set up for the entire project or for each subsystem or component and also for a given configuration of subsystem or component. For further details about the permission management refer to: Understanding Security in ETICS

Installation, configuration and set up of the ETICS command line client

The steps required for the installation of the ETICS client are:
Download the Etics workspace setup script
wget  " -O etics-client-setup
Run the Etics workspace setup script
python etics-client-setup
Set the ETICS_HOME env variable
export ETICS_HOME=`pwd`/etics
Add the Etics commands to your PATH

All the configuration parameters for the ETICS client are defined into a configuration file whose default location is $HOME/.etics.conf. Most of the parameters listed into the configuration file can be also redefined in the command line. The basic properties for the account setting are:

the path of the user certificate
the path of the user private key
they are required in order to establish the secure connection and to authenticate against the ETICS server and are contained into the user section. The required parameter for the connection is server, which is the fully qualified domain name of the service to contact and is contained into the system section, the main service running is located at The ETICS client is usually able to detect the correct platform of the system where it is running on, whever this is not possible the user can force the platform definition with the platform property listed into the generic properties section. Every ETICS command can work only inside a well formatted workspace, i.e. a directory of the local filesystem which contains the project metadata files. The commands that must be invoked for setting up the workspace are:
for the initialization
for downloading the project metadata
etics-get-project org.glite

Creation of an ETICS entity

The creation of a subsystem is carried out by the project administrator; the creation of a component is carried out by the project administrator or by the module administrator of the subsystem that component belongs to. The suitable command for this operation is etics-module:
add a subsystem to the project
etics-module add --parent org.glite --subsystem subsystem
add a component to a subsystem
etics-module add --parent subsystem --component component
By default the system creates a configuration for both the subsystem and the component whose name is org.glite.subsystem.HEAD or org.glite.subsystem.component.HEAD respectively.

The naming convention for subsystem and components should follow the same rules defined for the CVS module name, discussed in section 2

the subsystem name should be
the component name should be
There's no relation between the name of the entity and the name of the CVS module whom the entity refers to.

Every operation on a subsystem or component configuration can be performed using the command etics-configuration:

add a configuration to a component
etics-configuration add -c component_config -i input_file component
modify metadata of a configuration
etics-configuration modify -c component_config -i input_file component
clone a configuration
etics-configuration clone -c target-configuration source-configuration component

list the existing configuration for a component.
etics-list-configuration component

Most of the commands described above requires that a set of metadata must be defined into a file. This file, called in the following "ini-file", is divided into sections and must contain

  • the main definition for a configuration:
moduleName = org.glite.mysubsystem.mycomponent
displayName = Brief description of mycomponent
description = Full description of mycomponent
projectName = org.glite
age = 0
tag = glite-mysubsystem-mycomponent_R_1_0_0_0
version = 1.0.0
path = ${projectName}/${moduleName}/${version}/noarch/

  • the section that defines the CVS commands for the default platform:
displayName = Brief description of the CVS commands of mycomponent
description = Full description of the CVS commands of mycomponent
tag = cvs -d ${vcsroot} tag -R ${tag} ${moduleName}
checkout = cvs -d ${vcsroot} co -r ${tag} -P ${moduleName}

  • the section that defines the build commands for the default platform:
postpublish = None
packaging = None
displayName = Brief description of the build commands of mycomponent
description = Full description of the build commands of mycomponent
doc = None
prepublish = None
publish = None
compile = None
init = None
install = None
clean = None
test = None
configure = None
for further details concerning the syntax of an ini-file refer to the ETICS user guide.

Dependencies for an ETICS entity and the lock operation

One powerful feature of ETICS is the capability of handling the software dependencies, such as libraries and tools, required by a given subsystem or component with a minimum amount of effort from integrators and developers. Any dependency or resource must be registered in the system; in this way any entity can be accessed by a project, any possible combination is allowed, a subsystem can be a dependency for a project or a subsystem contained into it, a component of a project can be a dependency for another component of a different project.

The most important example concerns the project externals which collects all the resources published by external projects. It is strongly recommended to use only the external resource contained into that project in order to exploit all the features of the system during the release step.

According to the way an ETICS entity uses a given dependency the system distinguishes two different criterions:

  • static or dynamic dependency: the former defines a fixed release version for the resource inside an entity configuration, the latter allows the entity to inherit the release version from the parent entities; they're mutually exclusive.
  • build-time or run-time dependency: the former specifies that the resource is required only during the build or testing step, the latter instructs the system in order to have a dependency when the artifact produced is used, typically putting such requirement into the package; the two definitions can be combined together.

When an entity defines a dynamic dependency it delegates the system to select the correct version of the resource, in general the version decided for the entire project. It is strongly recommended to make use of this feature, especially for the external dependencies, if no particular requirements must be considered.

Dynamic dependencies are not able to guarantee that a given configuration for an entity can be reproduced at any time. It is necessary to freeze, or lock, the configuration of that entity together with all the configurations of the sub-entities and dependencies. The lock operation is performed with the command etics-configuration lock.

Checking out and building a component

The steps required for downloading and building the code of a component are:
Check out a specific configuration
etics-checkout --config component_configuration_name --project-config project_configuration_name component_name
Locally build the code
etics-build component_name

Integrators and developers can schedule a remote build for the configuration of the managed component with the following command
etics-submit build --config component_configuration_name --platforms selected_platforms component_name
The system can publish the artifacts, such as tarballs or packages (rpm, deb), either into a temporary area, called "volatile" repository, or into the permanent repository. The volatile repository is suitable only for development purposes, the permanent repository must be used for publishing the official artifacts of a release and it can be populated only if the configuration is locked. The results and every reference to artifacts produced by the remote build are contained into the ETICS reports site.

All the operations above can be applied to an entire subsystem replacing the component name and the configuration with subsystem name and the corresponding configuration.

ETICS and the software release management

For each subsystem and component registered in ETICS it is possible to distinguish two different types of configuration:

  • the ETICS configuration for a branch
  • the ETICS configuration for a release
The former is suitable for development purposes, it contains references to CVS branches or to the HEAD main branch and cannot be locked as any definition can be changed according to the development requirements. The latter represents a frozen release thus it must be guaranteed it cannot be changed; it contains only references to CVS "sticky" tag and must be locked in order to freeze the entire dependency structure and the set of commands, properties and variables. The naming convention for a frozen release configuration should be the same as the CVS tag, thus it should follow the notation:
for a subsystem
for a component
If the configuration refers to an internal release, suitable for tests only purpose for example, any notation is allowed but it is strongly recommended to put in the tag the name of the component or the subsystem together with a string summarizing the goal of the release. The naming convention for a branch configuration states that the configuration name should contain the prefix
for a subsystem
for a component
followed by a string that identifies the branch. The only exception allowed is the HEAD main branch for which the ETICS provides the default configuration name org.glite.subsystem.HEAD or org.glite.subsystem.component.HEAD.

A release configuration can be obtained from a branch configuration with the ETICS clone operation of the web application or taking the ini-files of the branch configuration as templates for the etics-tag command of the command line client.

-- PaulAndreetto - 09 Oct 2008

Edit | Attach | Watch | Print version | History: r18 < r17 < r16 < r15 < r14 | Backlinks | Raw View | WYSIWYG | More topic actions
Topic revision: r18 - 2008-10-24 - ElisabettMolinari
    • Cern Search Icon Cern Search
    • TWiki Search Icon TWiki Search
    • Google Search Icon Google Search

    EGEE All webs login

This site is powered by the TWiki collaboration platform Powered by Perl This site is powered by the TWiki collaboration platformCopyright & by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Ask a support question or Send feedback