The Java Packaging Guide

The Java Mascot

Good things come to those who wait. I always wanted to improve our Java Packaging documentation a little. When I started to contribute to Debian Java in 2012,  I often struggled to find the right information and examples that would explain how I could package my own libraries or applications for Debian. After six years of trial and error and helpful advice on the debian-java mailing list, I figured it would be time to document this journey.

At DebConf 2018 in Hsinchu I began to work on updating the wiki documentation. The current status of this work will always be visible at:

My basic idea was to explain packaging by examples. I didn’t assume that everyone was already familiar with the Java basics and more often than not people end up packaging Java software because it is part of their job or an application supports more than one programming language. Otherwise it is a book of seven seals.

The first thing to know  is that Java compiles to bytecode, so that *.java source files become *.class files. Those files are usually packed together in a zip-based archive, et voila now we have *.jar files. To compile your source code into bytecode you need the Java Virtual Machine  provided by OpenJDK. Learn what the CLASSPATH and a MANIFEST file is and you are good to go. This is what the Java Packaging 101 is all about.

If you grok the basics you will easily understand the next section: NoBuildSystem

Despite the fact that some upstream projects come without a proper build system, they are often very simple to compile. Instead of one or two source files, you just have to compile dozens in one single directory. We have a Java helper tool called….Javahelper that does exactly that for you.  A good start is to read the docs at /usr/share/doc/javahelper/tutorial.txt.gz also replicated here.

Of course the Java world has invented the most powerful build systems in existence that are even able to bend light and can throw galaxies around.  Let’s welcome Ant, Maven and Gradle. Everything else is irrelevant but don’t trust me.

If you can choose we recommend to either use Ant or Maven. Gradle is packaged for Debian but is more difficult to tame because every upstream project looks different. On the contrary Maven follows conventions and every project looks very similar.

Last but not least there is also a Java Packaging FAQ.

Shouldn’t there be more examples and much more information? I’d love that. Please help us to improve the documentation. If you think there is currently something missing, please contact us at or just update the documentation. It’s a Wiki!

My Free Software Activities in July 2018

Welcome to Here is my monthly report that covers what I have been doing for Debian. If you’re interested in Java, Games and LTS topics, this might be interesting for you.

DebConf18 in Hsinchu/Taiwan

  • This year the annual Debian Conference took place in the city of Hsinchu/Taiwan. I was there from the 26th of July to the 6th of August. I enjoyed almost two weeks of hacking and talks and met more than a few nice people. I gave an updated talk about the current status of Debian Games and started a project to improve our Java packaging documentation (more about that in the next blog post).
  • DebConf18 wasn’t all about talking. I actually got some work done. I started with wbar (RC #897885) and lwjgl (RC #893302). I hope we still don’t need OpenJDK 8 in buster for building packages but I don’t think it would be the end of the world as long as we can avoid a runtime dependency. However it is clear that this only prolongs the inevitable. In libpdfbox2-java I could close (#899183) after I made sure that the last update corrected the problem.  In the same vein I triaged an RC bug in asc after it became clear that asc was not affected by the GCC-8 transition.
  • I had a go at libjide-oss-java (RC, #897491). So basically the package won’t compile with OpenJDK 10 and later anymore because it depends on classes that were removed from the JDK. Fortunately for us they were only Windows-specific, so I could just remove the non-building classes. I hope there will be a better upstream solution in the future.
  • I sponsored updates for cutemaze, connectagram and tanglet for Innocent de Marchi.
  • I packaged new upstream releases of several games and Java packages too and also released an update of debian-games, a Blend and collection of metapackages. New versions this month: libokhttp-java, okio, blockattack, peg-e, hexalate, robocode, freeorion, hyperrogue and freeciv.
  • I released a small bug fix release for marsshooter and hopefully made some KDE users happy.
  • Thanks to Reiner Herrmann love and mrrescue are up-to-date again and free of RC bugs!
  • I NMUed bomberclone and fixed/worked around a simple RC bug.
  • Some guys talked me into maintaining https-everywhere, ublock-origin and privacybadger. 😉
  • One of the best aspects of any conference is that you can just talk to someone who sits at the same table as you if you want to solve a problem. Together with Andreas Tille I could finally solve a packaging issue in pilon, which uses Scala. It would still be nice to have a working sbt build tool in Debian though.
  • What can you say about Taiwan? I was impressed by the friendly people at the airport and railway stations who guided you along the way to Hsinchu and helped you out in case you struggled for directions.  I have also learned on our day trip that you can just enter a police station to refill your water bottles. Those cold water producing machines are absolute  lifesavers. Although I could only visit a small part of Taiwan and see Hsinchu and Taipei, I hope there will be a next time. Aah, and the weather was warm and humid. A bit too humid for my taste perhaps but I got used to it. Looking forward how it feels in spring or autumn. A big thanks goes out to all the people who organized and sponsored this DebConf. It was more than a pleasure.

Debian Java

Debian Games

  • Most exciting things happened at DebConf18 but before that I sponsored a new simutrans version, prepared by Jörg Frings-Fürst. Enjoy.

Debian LTS

This was my twenty-ninth month as a paid contributor and I have been paid to work 30 hours on Debian LTS, a project started by Raphaël Hertzog. In that time I did the following:

  • From 09.07.2018 until 15.07.2018 I was in charge of our LTS frontdesk. I investigated and triaged CVE in mailman, ruby-sprockets, beep, audiofile, gpac, libarchive-zip-perl, libgit2, znc, ant, ceph, xapian-core, wine, radare2, policykit-1 and taglib.
  • DLA-1440-1. Issued a security update for libarchive-zip-perl fixing 1 CVE.
  • DLA-1441-1. Issued a security update for sympa fixing 1 CVE.
  • DLA-1442-1. Issued a security update for mailman fixing 2 CVE. (also DLA-1442-2)
  • DLA-1445-1. Issued a security update for busybox fixing 10 CVE. Two regressions were discovered later and addressed in DLA-1445-2 and DLA-1445-3.
  • DLA-1446-1. Issued a security update for intel-microcode fixing 2 CVE.
  • DLA-1449-1. Issued a security update for openssl fixing 2 CVE.
  • DLA-1452-1. Issued a security update for wordpress fixing 2 CVE.
  • DLA-1453-1. Issued a security update for tomcat7 fixing 1 CVE.
  • DLA-1465-1. Issued a security update for blender fixing 21 CVE.


Extended Long Term Support (ELTS) is a project led by Freexian to further extend the lifetime of Debian releases. It is not an official Debian project but all Debian users benefit from it without cost. The current ELTS release is Debian 7 „Wheezy“. This was my second month and I have been paid to work 11.75  hours on ELTS.

  • ELA-16-1. Issued a security update for tiff fixing 1 CVE.
  • ELA-17-1. Issued a security update for linux 3.16 fixing 13 CVE.
  • ELA-18-1. Issued a security update for intel-microcode fixing 3 CVE.
  • ELA-19-1. Issued a security update for tiff3 fixing 2 CVE.
  • ELA-20-1. Issued a security update for busybox fixing 10 CVE.
  • I investigated open issues in apache2 and found out that it was not affected by CVE-2018-1333 and CVE-2018-8011.
  • I was in charge of our ELTS frontdesk from 09.07.2018 until 15.07.2018 and triaged further CVE in audiofile, libsndfile, curl, couchdb, policykit-1, bouncycastle and cups.

Thanks for reading and see you next time.

My Free Software Activities in June 2018

Welcome to Here is my monthly report that covers what I have been doing for Debian. If you’re interested in Java, Games and LTS topics, this might be interesting for you.

Debian Games

  • I advocated Phil Morrell to become Debian Maintainer with whom I have previously worked together on corsix-th. This month I sponsored his updates for scorched3d and the new package, an installer for drm-free commercial games. is basically a collection of shell scripts that create a wrapper around games from or Steam and put them into a Debian package which is then seamlessly integrated into the user’s system.  Similar software are game-data-packager, playonlinux or lutris (not yet in Debian).
  • I packaged new upstream releases of blockattack, renpy, atomix and minetest, and also backported Minetest version to Stretch later on.
  • I uploaded RC bug fixes from Peter de Wachter for torus-trooper, tumiki-fighters and val-and-rick and moved the packages to Git.
  • I tackled an RC bug (#897548) in yabause, a Saturn emulator.
  • I sponsored connectagram, cutemaze and tanglet updates for Innocent de Marchi.
  • Last but not least I refreshed the packaging of trophy and sauerbraten which had not seen any updates for the last couple of years.

Debian Java

  • I packaged a new upstream release of activemq and could later address #901366 thanks to a bug report by Chris Donoghue.
  • I also packaged upstream releases of bouncycastle, libpdfbox-java, libpdfbox2-java because of reported security vulnerabilities.
  • I investigated and fixed RC bugs in openjpa (#901045), osgi-foundation-ee (#893382) and ditaa (#897494, Java 10 related).
  • A snakeyaml update introduced a regression in apktool (#902666) which was only visible at runtime. Once known I could fix it.
  •   I worked on Netbeans again. It can be built from source now but there is still a runtime error (#891957) that prevents users from starting the application. The current plan is to package the latest release candidate of Netbeans 9 and move forward.

Debian LTS

This was my twenty-eight month as a paid contributor and I have been paid to work 23,75 hours on Debian LTS, a project started by Raphaël Hertzog. In that time I did the following:

  • From 18.06.2018 until 24.06.2018 I was in charge of our LTS frontdesk. I investigated and triaged CVE in jasperreports, 389-ds-base, asterisk, lava-server, libidn, php-horde-image, tomcat8, thunderbird, glusterfs, ansible, mercurial, php5, jquery, redis, redmine, libspring-java, php-horde-crypt, mupdf, binutils, jetty9 and libpdfbox-java.
  • DSA-4221-1. Issued a security update for libvncserver fixing 1 CVE.
  • DLA-1398-1. Issued a security update for php-horde-crypt fixing 2 CVE.
  • DLA-1399-1. Issued a security update for ruby-passenger fixing 2 CVE.
  • DLA-1411-1. Issued a security update for tiff fixing 5 CVE.
  • DLA-1410-1. Issued a security update for python-pysaml fixing 2 CVE.
  • DLA-1418-1. Issued a security update for bouncycastle fixing 7 CVE.


Extended Long Term Support (ELTS) is a new project led by Freexian to further extend the lifetime of Debian releases. It is not an official Debian project but all Debian users benefit from it without cost. The current ELTS release is Debian 7 „Wheezy“. This was my first month and I have been paid to work 7 hours on ELTS.

  • ELA-1-1. Issued a security update for Git fixing 1 CVE.
  • ELA-8-1. Issued a security update for ruby-passenger fixing 1 CVE.
  • ELA-14-1. Backported the Linux 3.16 kernel from Jessie to Wheezy. This update also included backports of initramfs-tools and the linux-latest source package. The new kernel is available for amd64 and i386 architectures.


  • I prepared security updates for libvncserver (Stretch, DSA-4221-1) and Sid) and bouncycastle (Stretch, DSA-4233-1)

Thanks for reading and see you next time.

FreeBSD: Installation mit Bildern kurz erklärt

Seit mindestens drei Jahren benutze ich neben Debian nun auch FreeBSD, nachdem es schon eine ganze Weile auf meiner TODO-Liste mit Betriebssystemen abseits von Linux gestanden hatte. Hiermit starte ich eine kleine Serie von Artikeln zu FreeBSD. Den Anfang macht die Installation.

Wer gerade keinen Ersatzrechner parat hat, um ein neues Betriebssystem auszuprobieren, dem empfehle ich FreeBSD in einer virtuellen Maschine zu installieren. Hierzu eignet sich z.B. ausgezeichnet QEMU/KVM, was sich mit virt-manager bequem via graphischer Oberfläche administrieren lässt.


Man kann zwischen verschiedenen Installationsmedien wählen. Ich habe mich für FreeBSD 11 und  AMD64 als Architektur entschieden.  Das minimale Image heißt zur Zeit FreeBSD-11.1-RELEASE-amd64-bootonly.iso. Es beinhaltet alle notwendigen Dateien, setzt jedoch eine funktionierende Netzwerkverbindung voraus. In virt-manager muss man danach nur noch eine neue virtuelle Maschine erstellen und das lokale Installationsmedium (hier eine ISO-Datei) auswählen. Als Speicher genügen 1024 MB RAM vollkommen. Ich habe mich noch für zwei virtuelle CPUs und eine kleine 3 GB Festplatte entschieden, danach kann man auch schon loslegen.

Der gesamte Installationsvorgang ist ausführlich im offiziellen FreeBSD-Handbuch beschrieben mit einer Anleitung in Deutsch oder Englisch. An dieser Stelle möchte ich deswegen nur noch auf einige Besonderheiten von FreeBSD und aus meiner Sicht erwähnenswerte Einstellungen eingehen. Die Installation gestaltet sich ähnlich wie bei Debian, wobei man erwähnen sollte, dass es keine Übersetzungen gibt und man zumindest eine grobe Ahnung der englischen Sprache haben muss. Das deutsche FreeBSD-Handbuch hilft hier jedoch weiter.


Im Willkommenmenü bestätigt man Option 1 mit der Enter-Taste und mit einem weiteren Enter den Installationsbeginn. Interessant wird es direkt danach, wenn man die Tastaturbelegung auswählen muss. Die meisten Leser werden sich hier für German ISO-8859-15 entscheiden, man kann diese aber auch später noch in /etc/rc.conf ändern.

Bei der Auswahl um zusätzliche Systemkomponenten zu installieren, empfehle ich nur ports auszuwählen. Jede aufgeführte Option kann später auch noch nachträglich installiert werden, jedoch bietet sich ports direkt an, weil man damit unkompliziert weitere Software direkt aus den Quellen bauen kann. Dazu in einem weiteren Beitrag später mehr.

Als nächstes geht es daran das Netzwerk zu konfigurieren. Wer seine IP automatisch via DHCP bezieht, braucht hier lediglich wieder mit Enter bestätigen und danach einen deutschen Spiegelserver auswählen, von welchem das Basissystem heruntergeladen wird. Womit wir auch schon bei der Partitionierung wären. FreeBSD ist bekannt für sein ZFS-Dateisystem, an dieser Stelle empfehle ich jedoch erst einmal die geführte Partitionierung mit dem UFS-Dateisystem zu verwenden. Letzteres lässt sich wiederum mit dem EXT-Dateisystem unter Linux vergleichen, ist für Anfänger einfacher einzurichten, braucht weniger Ressourcen und fühlt sich deswegen in virtuellen Maschinen ohne weitere Konfiguration auch performanter an. Nichtsdestotrotz ist ZFS wegen seinen zahlreichen Verwendungsmöglichkeiten und Merkmalen später auf jeden Fall einen Blick wert. Die weiteren Schritte danach einfach wieder mit Enter bestätigen. Ein Interessanter Aspekt bei der Partitionierung ist, welche Namenskonventionen FreeBSD im Gegensatz zu Linux für Partitionen verwendet. Diese werden auch als Slices bezeichnet und das Ganze liest sich dann so:

ada0s1aDie erste Partition (a) in der ersten Slice (s1) der ersten SATA-Festplatte (ada0).

Anschließend wird das Basissystem, der Kernel und die Portssammlung installiert. Man gibt das Rootpasswort an und wählt noch die Zeitzone aus, in welcher sich der Rechner befindet und schon befindet man sich bei diesem Schritt:

Hier lassen sich noch optionale Dienste/Programme installieren. SSH ist immer eine gute Wahl und unerlässlich, wenn man sich von einem entfernten Rechner verbinden will. Der Rest kann auch später noch installiert werden. Weiter gehts mit der Konfiguration einiger Sicherheitseinstellungen.

Im Prinzip ist es hier sinnvoll alles zu selektieren, wobei die ersten beiden Optionen eher bei Mehrbenutzersystemen mit mehreren lokalen Benutzern Sinn machen, jedoch bei einem Einzelrechner wie  in diesem Fall auch verwirren können. Insbesondere das Ausschalten des entfernten Loggens und das Abschalten von Sendmail sind in den allermeisten Fällen zu empfehlen. Den Sendmail-Dienst kann man bei Bedarf entweder durch eine vollwertige Lösung wie Postfix oder das extrem simple ssmtp ersetzen.

Nun ist der letzte Schritt auch schon fast erreicht. Ein normaler, unprivilegierter Benutzer muss noch angelegt werden, ein einfaches Frage- und Antwortspiel. Aufpassen sollte man aber bei: Invite user into other groups? Hier solltet ihr wheel eintragen. Eine Eigenheit von FreeBSD ist, dass kein normaler Benutzer zu Root werden kann, der nicht Mitglied dieser Gruppe ist.

Das war es auch schon. Anschließend Exit und Neustart wählen und sich in sein neues FreeBSD einloggen. Mehr zu den wichtigsten Befehlen, Konfigurationsdateien und Unterschieden zu Debian, bald hier in einem neuen Beitrag.

Lowendspirit: VPS-Server ab 3 Euro pro Jahr

Vor sechs Jahren habe ich über den Fünf-Cent-pro-Tag-Server geschrieben, ein damals schon ungemein günstiger Einstieg in die Welt der virtuellen Server. Neulich fand ich dann zu, wo man sich seinen Server ab drei Euro pro …Jahr mieten kann. Die Frage ist nun: Taugt das was und wozu braucht man das? Hier ein kurzer Bericht.

Lowendspirit ist ein Projekt mehrerer Anbieter, die vom Vermieten von Webspace und Servern leben und Standorte auf der ganzen Welt haben. Der Grundgedanke ist dabei, wie viel darf ein virtueller Server gerade noch kosten und welche Merkmale muss er haben, damit er einerseits wirtschaftlich betrieben und zum anderen für den Käufer noch nützlich sein kann. Die Antwort liefern die drei Hoster auf dieser Seite.

Das Angebot reicht von 64 MB RAM und 1 GB Festplatte in Hong Kong, über 128 MB RAM und 3 GB Festplatte (teilweise SSD) bis zu 256 MB RAM bei Mr. VM. Bei den eher „exotischeren“ Standorten Hong Kong, Johannesburg oder Tokyo ist der Traffic eher eingeschränkt (zwischen 50 GB und 150 GB pro Monat), ansonsten pendelt dieser so zwischen 300-500 GB pro Monat in Europa und Nordamerika, was in der Regel ausreichend ist um kleinere Projekte zu realisieren.

MiniVPS128 – UK

Zum Testen habe ich mir das Angebot von Inception Hosting angeschaut. Ausgesucht habe ich mir den Standort Enfield in London mit 128 MB RAM, 3 GB SSD und 350 GB Traffic inklusive pro Monat.

Die Bestellung war unkompliziert. Lediglich der Name des Servers und das Rootpasswort musste man angeben, welche später auch wieder geändert werden können. Bezahlt werden kann mit Paypal oder Kreditkarte, manchmal auch mit Kryptowährungen. Als Administrationswerkzeug kommt SolusVM zum Einsatz. Man muss ausdrücklich bestätigen, dass man weiß, was man hier kauft. Der vServer kommt primär mit IPv6-Unterstützung, eine NAT IPv4-Adresse ist mehr als Bonus zu sehen. Im Klartext: Der Server hat nur eine private IPv4-Adresse und ist ohne weitere Konfiguration nicht direkt mit dem alten Protokoll zu erreichen. Für die meisten Kunden aus Deutschland sollte das aber kein Problem sein, da IPv6 mittlerweile praktisch überall verfügbar ist oder sogar bei DSL-Lite-Anschlüssen vorausgesetzt wird. Kleine Helfer wie 6tunnel oder OpenVPN helfen außerdem Probleme mit IPv4/IPv6-Adressen zu umgehen. Wichtigste Anlaufstelle für Fragen ist das englischsprachige Forum. Direkten Support gibt es nicht und kann man bei dem Preis auch nicht wirklich erwarten.

Top oder Flop?

Mit der Begrüßungsmail erhält man die Zugangsdaten und eine Anleitung wie man sich per IPv4 verbinden kann. Im SolusVM-Konfigurator lässt sich aber auch direkt die IPv6-Adresse ablesen. Anschließend kann man sich wie gewohnt mit SSH verbinden. Der vServer nutzt als Virtualisierungslösung OpenVZ und Debian Wheezy war bei mir das voreingestellte Betriebssystem. Da Wheezy nun nicht mehr offiziell von Debian unterstützt wird, kann man sich entweder die neue, erweiterte Langzeitunterstützung anschaun (ELTS) oder man führt ganz einfach ein Upgrade auf Jessie durch, was problemlos bei mir geklappt hat.

Die Performance fühlt sich gut an, was ich bisher nicht immer von allen OpenVZ-Angeboten behaupten konnte. Der Server läuft seit mehr als einem Monat ununterbrochen und die Dienste, die ich für einen solchen Server sinnvoll halte (dazu gleich mehr) funktionieren problemlos. Festplattendurchsatz und Zugriffszeiten sind natürlich wie zu erwarten nicht berauschend. Hier mal eine Momentaufnahme mit ioping.

Inception Hosting – MiniVPS128 – UK

75 requests completed in 1.32 min, 17 iops, 71.0 KiB/s
min/avg/max/mdev = 184 us / 56.3 ms / 536.5 ms / 123.9 ms

Bei leistungsstärkeren Angeboten liegen die Zugriffszeiten normalerweise durchschnittlich alle im Mikrosekunden- anstatt Millisekundenbereich.

Empfohlene Dienste / Ideen

128 MB RAM klingt wenig, aber es gibt einige Dienste, für die das vollkommen ausreichend ist. Ein Lowendspirit-Server eignet sich ideal als SOCKS-Proxy. Da OpenSSH sowie schon vorinstalliert ist, kann man sich z.B. von seinem Rechner aus mit

ssh -D 9999 -C -q -N Lowendserver-IP-Adresse

verbinden. Im Firefox dann unter Einstellungen->Fortgeschritten->Netzwerk->Verbindung die Werte wie auf dem folgenden Bild setzen und schon surft man mit einer englischen IP-Adresse.

Auch Debians OpenVPN-Paket lässt sich problemlos betreiben. Und dann wäre da ja noch die Möglichkeit einen Webserver mit Lighttpd oder Nginx aufzusetzen. Zu Lighty hatte ich schon vor ein paar Jahren was geschrieben und zu Nginx braucht man heutzutage nicht mehr viel sagen.

Besser bleiben lassen

Intensive Datenbankanwendungen und alles was gerne Unmengen an RAM verschlingt (Hallo Java!). Mit etwas Optimierung lassen sich Forensoftware oder WordPress-Blogs installieren, hierzu würde ich aber eher zu einem 256 RAM Server greifen. Unmöglich ist es aber auch mit 128 RAM nicht, vielleicht liegt darin auch der Spaß und die Herausforderung.

Fazit ist ein Projekt, das keinen Gewinn macht, aber dennoch ein vernünftiges Angebot ist. Für 3,50 Euro pro Jahr geht man kein finanzielles Risiko ein. Die Server sind nicht für Anfänger geeignet. Wenn man jedoch bereit ist Neues dazuzulernen, gibt es kaum einen günstigeren Einstieg in die Welt der virtuellen Server. Die Server kommen ohne Backups, aber mit Werkzeugen wie rsync oder der Dirvish-Backuplösung sollte auch dieses Problem lösbar sein. Für alle, die schon immer mal einen Server in verschiedenen Ländern der Erde haben wollten, auf jeden Fall interessant. Übrigens, es gibt manchmal Bundleangebote: Fünf Server für 10 Euro pro Jahr. Dem eigenen Cluster steht nun nichts mehr im Wege. 😉