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: