Aktuelles Java (17, 11 und weitere) über die Paketverwaltung mit Liberica JDK auf dem Raspberry Pi und x86 Linux-Systemen installieren

Als Video ansehen
Bereitgestellt über YouTube

Aktuelles Java (17, 11 und weitere) über die Paketverwaltung mit Liberica JDK auf dem Raspberry Pi und x86 Linux-Systemen installieren

Das Raspberry Pi OS stellt mit dem OpenJDK zwar eine freie Java-Laufzeitumgebung bereit. Allerdings nicht immer die aktuellste LTS-Version. Seit Raspberry Pi OS 11 Bullseye ist Java 17 LTS verfügbar, beim Vorgänger Buster nur das ältere Java 11. In einem vorherigen Beitrag hatte ich gezeigt, wie man das OpenJDK händisch installieren kann. Dies funktioniert nach wie vor, hat aber einen entschiedenen Nachteil: Man muss Aktualisierungen händisch einspielen.

Vermeiden lässt sich das nur mit einer Drittanbieter-Paketquelle. Dies zeige ich euch heute mit Bellsoft: Sie stellen mit Liberica alle JDK Java-Versionen für nahezu alle gängigen Betriebssysteme und Architekturen bereit. Das Liberica JDK basiert auf OpenJDK mit kleineren Ergänzungen. Im Wesentlichen habt ihr dadurch eine eben so standardkonforme Java-Umgebung – aber mit einfacheren Aktualisierungen per APT-Paketverwaltung.

Vorbereitung: Ist bereits eine Java-Version installiert?

Wie immer müsst ihr sicherstellen, dass die Software (hier Java) nicht bereits über ein anderes Paket installiert wurde. Ansonsten wird die alte Version genutzt oder es kommt zu anderen Konflikten/Problemen. Das hatte ich im letzten Beitrag bereits erwähnt. Vereinzelt wurde es nicht gemacht, wodurch es zu Probleme kam.

$ java -version
-bash: java: command not found

Wenn ihr diesen Fehler erhaltet, ist noch kein Java installiert und euer System ist bereit. Wird stattdessen eine Version angezeigt, müsst ihr dies zu erst entfernen. Entweder über die entsprechenden APT-Pakete oder durch manuelles Deinstallieren, je nachdem, wie es installiert wurde.

Hinzufügen der Paketquelle von Liberica

Wir brauchen einen Ordner für die Schlüsselringe, um die Integrität der Pakete zu verifizieren – etwa /usr/local/share/keyrings, wobei der Pfad frei wählbar ist.

sudo mkdir /usr/local/share/keyrings

Nun laden wir uns den PGP Schlüssel herunter und legen ihn in einem einheitlichen Format dort ab.

$ wget -q -O key.gpg https://download.bell-sw.com/pki/GPG-KEY-bellsoft
$ gpg --no-default-keyring --keyring ./tmp.gpg --import key.gpg
$ gpg --no-default-keyring --keyring ./tmp.gpg --export --output bellsoft-liberica.gpg
$ sudo mv bellsoft-liberica.gpg /usr/local/share/keyrings
$ rm key.gpg tmp.gpg tmp.gpg~

Damit ist alles bereit für den Paketquellen-Eintrag, wozu man am besten eine eigene Liste in /etc/apt/sources.list.d anlegt. Welche Architektur ihr gleich bei arch= setzt, lässt sich mit uname ermitteln:

$ uname -m
armv7l

Liefert die Ausgabe aarch64, setzt ihr arm64. Für alle anderen ARM-Architekturen (wie hier im Beispiel armv7l) ist es armhf. Falls ihr keinen Pi sondern ein x86 System verwendet, ist es meist amd64 für die 64-Bit Version der 86 Architektur – ansonsten i386 für 32-Bit.

Der Befehl zum anlegen eines neuen Paketlisten-Eintrags sieht damit in diesem Beispiel für ein 32 Bit Raspberry Pi OS (armv7l) wie folgt aus:

echo "deb [arch=armhf signed-by=/usr/local/share/keyrings/bellsoft-liberica.gpg] https://apt.bell-sw.com/ stable main" | sudo tee /etc/apt/sources.list.d/bellsoft-liberica.list

Die Datei /usr/local/share/keyrings/bellsoft-liberica.gpg wurde zuvor erstellt und verschoben, sie enthält den PGP-Schlüssel.

Installation des Liberica Java-Paketes

Wie bei jeder Änderung an den Paketquellen müssen wir diese zunächst neu laden. Hier sollte das Bellsoft-Repository auftauchen (Zeile 4) und der Vorgang ohne Fehler abgeschlossen werden:

$ sudo apt update
Get:1 http://raspbian.raspberrypi.org/raspbian bullseye InRelease [15.0 kB]
Get:2 http://archive.raspberrypi.org/debian bullseye InRelease [23.5 kB]
Get:3 https://apt.bell-sw.com stable InRelease [4,166 B]
Get:4 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf Packages [13.2 MB]
Get:5 https://apt.bell-sw.com stable/main armhf Packages [15.8 kB]
Fetched 13.3 MB in 6s (2,113 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.

Man kann nun aus mehreren Java-Paketen und Versionen wählen. Alle Pakete beginnen mit bellsoft-java, um sie von anderen Java-Implementierungen wie OpenJDK abzugrenzen. Schauen wir uns die verschiedenen Varianten anhand der LTS-Version 17 beispielhaft an:

  • bellsoft-java17: Das Komplettpaket mit JDK, JRE, JavaFX und mehreren JVMs. Interessant für Entwickler und wenn ihr Code bauen müsst, wie z.B. bei Minecraft aufgrund der proprietären Lizenzen der Fall.
  • bellsoft-java17-lite ist ebenfalls für Entwickler, komprimiert die Module und Server-VM, verzichtet auf zusätzliche Pakete.
  • bellsoft-java17-runtime enthält die Laufzeitumgebung (JRE) sowie JavaFX.

Im Beispiel installiere ich das komplette Paket. Danach sind sowohl der Befehl java von der Laufzeitumgebung JRE als auch der javac Compiler vom JDK verfügbar:

$ java -version
openjdk version "17.0.2" 2022-01-18 LTS
OpenJDK Runtime Environment (build 17.0.2+9-LTS)
OpenJDK 32-Bit Server VM (build 17.0.2+9-LTS, mixed mode)
$ javac -version
javac 17.0.2

Dies funktioniert auch mit anderen Versionen. Liberica JDK bietet alle unterstützten Versionen von 8 bis 17 an und wird mit OpenJDK gleichziehen, d.H. zukünftig sind neue Versionen verfügbar. Eine Liste lässt sich wie folgt ausgeben:

apt-cache search bellsoft-java

Das Hinzufügen von Drittanbieter-Repositorys geht grundsätzlich mit einem gewissen Risiko einher. Ihr solltet der Paketquelle daher vertrauen. Der Vorteil gegenüber der händischen Installation: Aktualisierungen müssen nicht von Hand eingespielt werden – sondern lassen sich zentral über die Paketverwaltung installieren. Liberica verspricht, mit den Upstream-Releasezyklen gleich zu ziehen, sodass Updates und vor allem Sicherheitsupdates schnell bei euch ankommen sollten.

Weiterführende Informationen

Leave a Reply