Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

...

Anchortoptop

6.2. Custom distributions

...

You could require to construct your own Karaf distribution matching your requirements.
This custom distribution could contain:

  • configuration files that you want to change by default (in the etc folder)
  • pre-packaged artifacts in the deploy folder
  • pre-populated system repository (containing your own bundle and features descriptor)
  • renamed or specific scripts in the bin folder
  • branding
  • your documentation files

Maven assembly

Basically a Karaf custom distribution is:
1. Uncompressing a standard Karaf distribution in a given directory.
2. Populating the system repo with your features.
3. Populating the lib directory with your branding or other system bundle jar files.
4. Overriding the configuration files in the etc folder.

...

For instance, the Maven POM could look like:

...

...

The Maven POM will download the Karaf standard distribution and prepares resources to be processed by the Maven assembly plugin.

...

  • my-features.xml where maven properties will be replaced
  • etc/org.apache.karaf.features.cfg file containing your my-features descriptor: Code Block # # Comma separated list of features repositories to register by default # featuresRepositories=mvn:org.apache.karaf/apache-karaf/${karaf.version}/xml/features,mvn:my.groupId/my-features/${project.version}/xml/features # # Comma separated list of features to install at startup # featuresBoot=config,ssh,management,my-feature

The src/main/distribution contain all your custom Karaf configuration files and script, as, for examples:

  • etc/org.ops4j.pax.logging.cfg Code Block # Root logger log4j.rootLogger=INFO, out, osgi:VmLogAppender log4j.throwableRenderer=org.apache.log4j.OsgiThrowableRenderer # CONSOLE appender not used by default log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} | %-5.5p | %-16.16t | %-32.32C %4L | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n # File appender log4j.appender.out=org.apache.log4j.RollingFileAppender log4j.appender.out.layout=org.apache.log4j.PatternLayout log4j.appender.out.layout.ConversionPattern=%d{ABSOLUTE} | %-5.5p | %-16.16t | %-32.32C %4L | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n log4j.appender.out.file=${karaf.home}/log/my-customer-distribution.log log4j.appender.out.append=true log4j.appender.out.maxFileSize=1MB log4j.appender.out.maxBackupIndex=10 # Sift appender log4j.appender.sift=org.apache.log4j.sift.MDCSiftingAppender log4j.appender.sift.key=bundle.name log4j.appender.sift.default=my-custom log4j.appender.sift.appender=org.apache.log4j.FileAppender log4j.appender.sift.appender.layout=org.apache.log4j.PatternLayout log4j.appender.sift.appender.layout.ConversionPattern=%d{ABSOLUTE} | %-5.5p | %-16.16t | %-32.32c{1} | %-32.32C %4L | %m%n log4j.appender.sift.appender.file=${karaf.data}/log/$\\{bundle.name\\}.log log4j.appender.sift.appender.append=true
  • etc/system.properties Code Block # # The properties defined in this file will be made available through system # properties at the very beginning of the FAS boot process. # # Log level when the pax-logging service is not available # This level will only be used while the pax-logging service bundle # is not fully available. # To change log levels, please refer to the org.ops4j.pax.logging.cfg file # instead. org.ops4j.pax.logging.DefaultServiceLog.level=ERROR # # Name of this custom instance. # karaf.name=my-custom # # Default repository where bundles will be loaded from before using # other maven repositories. For the full maven configuration, see the # org.ops4j.pax.url.mvn.cfg file. # karaf.default.repository=system # # Location of a shell script that will be run when starting a shell # session. This script can be used to create aliases and define # additional commands. # karaf.shell.init.script=${karaf.home}/etc/shell.init.script # # Set this empty property to avoid errors when validating xml documents. # xml.catalog.files= # # Suppress the bell in the console when hitting backspace to many times # for example # jline.nobell=true # # Default port for the OSGi HTTP Service # org.osgi.service.http.port=8181 # # Allow usage of ${custom.home} as an alias for ${karaf.home} # custom.home=${karaf.home}
  • etc/users.properties Code Block admin=admin,admin

Now, we can "assemble" our custom distribution using the Maven assembly plugin. The Maven assembly plugin uses an assembly descriptor in the src/main/descriptors/bin.xml:

...

To build you custom Karaf distribution, just do:

...

...

You will find your Karaf custom distribution tar.gz in the target directory.

...