[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Summary: the state of the karaf debian package



My karaf debian package[1] is now in a state where it does what I need
for my own use.  I'm serving it from my own unofficial APT repository
(which I will discontinue if the RFP[2] results in an official karaf
package).

I don't plan to do any more work on this packaging, except what is
needed to make new stable karaf releases run (ie. I will roll a new
version of the package when karaf 4.1.5 is out).

I'm leaving some notes on the current state of the packaging here
(ie. in the mailing list archives) in case someone wants to use this
package as a starter for an official package.  I will send a message to
the RFP with the same information.

The current state of the karaf debian package, is:
 1. The package is created using native debian packaging tools

 2. The package is built from the source tarball of karaf releases

 3. The source is built with maven and openjdk-8

 4. lintian no longer gives any warnings on the package (I have only run
    lintian with "lintian karaf_xxx.deb", I haven't tried with any
    arguments)

 5. The package creates a system user named karaf, with group karaf, and
    home directory /var/lib/karaf

 6. A karaf service is added to systemd, running as user karaf and
    logging to /var/log/syslog and using the following directories:
     KARAF_ETC = /etc/karaf/
     KARAF_HOME = /usr/share/karaf/
     KARAF_DATA = /var/lib/karaf/data/
    all directories are owned by user karaf, group karaf

 7. The karaf package works with "apt-get dist-upgrade", config changes
    in KARAF_ETC gets the usual APT dialog on modified config change
    (ie. "user the package maintainer's version or the modified file
    from the old version?), the karaf cache is flushed during an
    upgrade, which means that all installed features are lost and must
    be reinstalled, contents in KARAF_ETC not installed by the karaf
    package is untouched

 8. Those karaf boot requirements that could be satisfied by current
    debian stable (debian 9, stretch) uses debian dependencies:
     - Java 8 RE
     - OSGi core 6
     - libjna-java (not strictly needed, but part of the boot directory)
     - libjansi-java
       - This one can be used as a pattern for how to setup
         startup.properties dependencies, the changes are[3]
         a. Add a debian dependency to the control file
         b. Replace the jansi version number with "debian" in
            $KARAF_ETC/startup.properties
         c. Remove jansi from the $KARAF_HOME/system maven repository
         d. Symlink the "debian" version from debian's maven repository
            into the $KARAF_HOME/system repository
         
 9. The jar files that make up karaf are structured as a maven
    repository under $KARAF_HOME/system

10. The initial boot is done from the jar files found in
    $KARAF_HOME/lib/boot/ (I have replaced non-karaf dependencies here
    with symlinks to the jar files of debian packages)

11. The jar files needed to boot to a state where karaf can start
    downloading dependencies from maven central (or other maven
    repositories), are listed in $KARAF_ETC/startup.properties

12. The $KARAF_HOME/system maven repository has been cleaned for files
    not built by source that aren't needed for karaf boot.  The
    non-karaf jar files currently in there are needed for boot, and
    cannot be satisfied by existing debian java packages


I believe the following steps are needed to make this an official
package:
 1. Replace the remaining non-karaf boot jars with debian packages,
    these packages are:
    a. apache felix framework 5.6.10
       - Already a debian package, but currently in version 4.6.12 in
         stretch, testing and unstable [4]
    b. apache felix metatype 1.1.6 [5]
    c. apache felix configadmin 1.8.16 [6]
    d. apache felix file install 3.6.4 [7]
    e. OPS4J PAX URL Aether 2.5.3 [8]
    f. OPS4J PAX Logging API 1.10.1 [9]
    g. OPS4J PAX Logging Log4J2 1.10.1 [10]
 2. Restructure karaf into two packages, karaf and libkaraf-java, with
    libkaraf-java containing the jar files structured like debian java
    packages (ie. in /usr/share/maven-repo both with their actual
    version and with the "debian" version).
    IMO I'm not sure if this is worth the effort, because the karaf jar
    files aren't really meaningful outside of karaf, or in a version
    independent manner


Thanks in advance to anyone who will create an official debian package,
whether it is based on my package or not! :-)


- Steinar


References:
 [1] <https://github.com/steinarb/karaf-debian>
 [2] <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=881297>
 [3] <https://github.com/steinarb/karaf-debian/commit/17eee1e83e7d391cf79760eca1990187eefa2838>
 [4] <https://packages.debian.org/stretch/libfelix-framework-java>
 [5] <http://felix.apache.org/documentation/subprojects/apache-felix-metatype-service.html>
 [6] <http://felix.apache.org/documentation/subprojects/apache-felix-config-admin.html>
 [7] <http://felix.apache.org/documentation/subprojects/apache-felix-file-install.html>
 [8] <https://github.com/ops4j/org.ops4j.pax.url>
 [9] <https://github.com/ops4j/org.ops4j.pax.logging/tree/master/pax-logging-api>
[10] <https://github.com/ops4j/org.ops4j.pax.logging/tree/master/pax-logging-log4j2>


Reply to: