{"id":8491,"date":"2022-03-04T18:07:03","date_gmt":"2022-03-04T16:07:03","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=8491"},"modified":"2022-12-12T16:51:10","modified_gmt":"2022-12-12T14:51:10","slug":"aktuelles-java-17-11-und-weitere-ueber-die-paketverwaltung-mit-liberica-jdk-auf-dem-raspberry-pi-und-x86-linux-systemen-installieren","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/aktuelles-java-17-11-und-weitere-ueber-die-paketverwaltung-mit-liberica-jdk-auf-dem-raspberry-pi-und-x86-linux-systemen-installieren\/","title":{"rendered":"Aktuelles Java (17, 11 und weitere) \u00fcber die Paketverwaltung mit Liberica JDK auf dem Raspberry Pi und x86 Linux-Systemen installieren"},"content":{"rendered":"<p>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\u00fcgbar, beim Vorg\u00e4nger Buster nur das \u00e4ltere Java 11. <a href=\"https:\/\/u-labs.de\/portal\/java-auf-dem-raspberry-pi-installieren-aktuelle-jre-laufzeitumgebung-jdk-z-b-java-17-kostenfrei-legal-2021\/\" title=\"In einem vorherigen Beitrag hatte ich gezeigt, wie man das OpenJDK h\u00e4ndisch installieren kann\">In einem vorherigen Beitrag hatte ich gezeigt, wie man das OpenJDK h\u00e4ndisch installieren kann<\/a>. Dies funktioniert nach wie vor, hat aber einen entschiedenen Nachteil: Man muss Aktualisierungen h\u00e4ndisch einspielen.<\/p>\n<p>Vermeiden l\u00e4sst sich das nur mit einer Drittanbieter-Paketquelle. Dies zeige ich euch heute mit Bellsoft: Sie stellen mit Liberica alle JDK Java-Versionen f\u00fcr nahezu alle g\u00e4ngigen Betriebssysteme und Architekturen bereit. <a href=\"https:\/\/bell-sw.com\/announcements\/2022\/02\/10\/what-is-openjdk-and-why-you-should-use-it\/\" title=\"Das Liberica JDK basiert auf OpenJDK mit kleineren Erg\u00e4nzungen\" target=\"_blank\" rel=\"nofollow\">Das <strong>Liberica JDK<\/strong> basiert auf <strong>OpenJDK<\/strong> mit kleineren Erg\u00e4nzungen<\/a>. Im Wesentlichen habt ihr dadurch eine eben so standardkonforme Java-Umgebung &#8211; aber mit einfacheren Aktualisierungen per APT-Paketverwaltung.<\/p>\n<h2 class=\"wp-block-heading\" id=\"vorbereitung-ist-bereits-eine-java-version-installiert\">Vorbereitung: Ist bereits eine Java-Version installiert?<\/h2>\n<p>Wie immer m\u00fcsst ihr sicherstellen, dass die Software (hier Java) nicht bereits \u00fcber 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\u00e4hnt. Vereinzelt wurde es nicht gemacht, wodurch es zu Probleme kam.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">$ java -version\n-bash: java: command not found<\/code><\/pre>\n<p>Wenn ihr diesen Fehler erhaltet, ist noch kein Java installiert und euer System ist bereit. Wird stattdessen eine Version angezeigt, m\u00fcsst ihr dies zu erst entfernen. Entweder \u00fcber die entsprechenden APT-Pakete oder durch manuelles Deinstallieren, je nachdem, wie es installiert wurde.<\/p>\n<h2 class=\"wp-block-heading\" id=\"hinzufugen-der-paketquelle-von-liberica\">Hinzuf\u00fcgen der Paketquelle von Liberica<\/h2>\n<p>Wir brauchen einen Ordner f\u00fcr die Schl\u00fcsselringe, um die Integrit\u00e4t der Pakete zu verifizieren &#8211; etwa <strong>\/usr\/local\/share\/keyrings<\/strong>, wobei der Pfad frei w\u00e4hlbar ist.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">sudo mkdir \/usr\/local\/share\/keyrings<\/code><\/pre>\n<p>Nun laden wir uns den <a href=\"https:\/\/bell-sw.com\/pages\/liberica_install_guide-17.0.2\/#linux\" title=\"PGP Schl\u00fcssel\" target=\"_blank\" rel=\"nofollow\">PGP Schl\u00fcssel<\/a> herunter und legen ihn in einem einheitlichen Format dort ab. <\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">$ wget -q -O key.gpg https:\/\/download.bell-sw.com\/pki\/GPG-KEY-bellsoft\n$ gpg --no-default-keyring --keyring .\/tmp.gpg --import key.gpg\n$ gpg --no-default-keyring --keyring .\/tmp.gpg --export --output bellsoft-liberica.gpg\n$ sudo mv bellsoft-liberica.gpg \/usr\/local\/share\/keyrings\n$ rm key.gpg tmp.gpg tmp.gpg~<\/code><\/pre>\n<p>Damit ist alles bereit f\u00fcr den Paketquellen-Eintrag, wozu man am besten eine eigene Liste in <strong>\/etc\/apt\/sources.list.d<\/strong> anlegt. Welche Architektur ihr gleich bei <strong>arch=<\/strong> setzt, l\u00e4sst sich mit <strong>uname <\/strong>ermitteln:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">$ uname -m\narmv7l<\/code><\/pre>\n<p>Liefert die Ausgabe <strong>aarch64<\/strong>, setzt ihr <strong>arm64.<\/strong> F\u00fcr alle anderen ARM-Architekturen (wie hier im Beispiel <strong>armv7l<\/strong>) ist es <strong>armhf<\/strong>. Falls ihr keinen Pi sondern ein x86 System verwendet, ist es meist <strong>amd64<\/strong> f\u00fcr die 64-Bit Version der 86 Architektur &#8211; ansonsten <strong>i386<\/strong> f\u00fcr 32-Bit.<\/p>\n<p>Der Befehl zum anlegen eines neuen Paketlisten-Eintrags sieht damit in diesem Beispiel f\u00fcr ein 32 Bit Raspberry Pi OS (armv7l) wie folgt aus:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">echo &quot;deb [arch=armhf signed-by=\/usr\/local\/share\/keyrings\/bellsoft-liberica.gpg] https:\/\/apt.bell-sw.com\/ stable main&quot; | sudo tee \/etc\/apt\/sources.list.d\/bellsoft-liberica.list<\/code><\/pre>\n<p>Die Datei <strong>\/usr\/local\/share\/keyrings\/bellsoft-liberica.gpg<\/strong> wurde zuvor erstellt und verschoben, sie enth\u00e4lt den PGP-Schl\u00fcssel.<\/p>\n<h2 class=\"wp-block-heading\" id=\"hinzufugen-der-paketquelle-von-liberica\">Installation des Liberica Java-Paketes<\/h2>\n<p>Wie bei jeder \u00c4nderung an den Paketquellen m\u00fcssen wir diese zun\u00e4chst neu laden. Hier sollte das Bellsoft-Repository auftauchen (Zeile 4) und der Vorgang ohne Fehler abgeschlossen werden:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">$ sudo apt update\nGet:1 http:\/\/raspbian.raspberrypi.org\/raspbian bullseye InRelease [15.0 kB]\nGet:2 http:\/\/archive.raspberrypi.org\/debian bullseye InRelease [23.5 kB]\nGet:3 https:\/\/apt.bell-sw.com stable InRelease [4,166 B]\nGet:4 http:\/\/raspbian.raspberrypi.org\/raspbian bullseye\/main armhf Packages [13.2 MB]\nGet:5 https:\/\/apt.bell-sw.com stable\/main armhf Packages [15.8 kB]\nFetched 13.3 MB in 6s (2,113 kB\/s)\nReading package lists... Done\nBuilding dependency tree... Done\nReading state information... Done\nAll packages are up to date.<\/code><\/pre>\n<p>Man kann nun aus mehreren Java-Paketen und Versionen w\u00e4hlen. Alle Pakete beginnen mit <strong>bellsoft-java<\/strong>, um sie von anderen Java-Implementierungen wie OpenJDK abzugrenzen. Schauen wir uns die verschiedenen Varianten anhand der LTS-Version 17 beispielhaft an:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>bellsoft-java17<\/strong>: Das Komplettpaket mit JDK, JRE, JavaFX und mehreren JVMs. Interessant f\u00fcr Entwickler und wenn ihr Code bauen m\u00fcsst, wie z.B. bei Minecraft aufgrund der propriet\u00e4ren Lizenzen der Fall.<\/li>\n<li><strong>bellsoft-java17-lite<\/strong> ist ebenfalls f\u00fcr Entwickler, komprimiert die Module und Server-VM, verzichtet auf zus\u00e4tzliche Pakete.<\/li>\n<li><strong>bellsoft-java17-runtime <\/strong>enth\u00e4lt die Laufzeitumgebung (JRE) sowie JavaFX.<\/li>\n<\/ul>\n<p>Im Beispiel installiere ich das komplette Paket. Danach sind sowohl der Befehl <strong>java <\/strong>von der Laufzeitumgebung <strong>JRE <\/strong>als auch der <strong>javac <\/strong>Compiler vom <strong>JDK <\/strong>verf\u00fcgbar:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">$ java -version\nopenjdk version &quot;17.0.2&quot; 2022-01-18 LTS\nOpenJDK Runtime Environment (build 17.0.2+9-LTS)\nOpenJDK 32-Bit Server VM (build 17.0.2+9-LTS, mixed mode)\n$ javac -version\njavac 17.0.2\n<\/code><\/pre>\n<p>Dies funktioniert auch mit anderen Versionen. Liberica JDK bietet alle unterst\u00fctzten Versionen von 8 bis 17 an und wird mit OpenJDK gleichziehen, d.H. zuk\u00fcnftig sind neue Versionen verf\u00fcgbar. Eine Liste l\u00e4sst sich wie folgt ausgeben:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">apt-cache search bellsoft-java<\/code><\/pre>\n<p>Das Hinzuf\u00fcgen von Drittanbieter-Repositorys geht grunds\u00e4tzlich mit einem gewissen Risiko einher. Ihr solltet der Paketquelle daher vertrauen. Der Vorteil gegen\u00fcber der h\u00e4ndischen Installation: Aktualisierungen m\u00fcssen nicht von Hand eingespielt werden &#8211; sondern lassen sich zentral \u00fcber die Paketverwaltung installieren. Liberica verspricht, mit den Upstream-Releasezyklen gleich zu ziehen, sodass Updates und vor allem Sicherheitsupdates schnell bei euch ankommen sollten.<\/p>\n<h2 class=\"wp-block-heading\" id=\"weiterfuhrende-informationen\">Weiterf\u00fchrende Informationen<\/h2>\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/bell-sw.com\/pages\/supported-configurations\/\" title=\"Unterst\u00fctzte Konfigurationen von Liberica\" target=\"_blank\" rel=\"nofollow\">Unterst\u00fctzte Konfigurationen von Liberica<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>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\u00fcgbar, beim Vorg\u00e4nger Buster nur das \u00e4ltere Java 11. In einem vorherigen Beitrag hatte ich gezeigt, wie man das OpenJDK h\u00e4ndisch installieren kann. Dies funktioniert nach &#8230;<\/p>\n","protected":false},"author":5,"featured_media":8632,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[671],"tags":[87],"class_list":["post-8491","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-raspberry-pi","tag-java"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/8491","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=8491"}],"version-history":[{"count":8,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/8491\/revisions"}],"predecessor-version":[{"id":9772,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/8491\/revisions\/9772"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/8632"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=8491"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=8491"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=8491"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}