jviewer – AMI JViewer unter Linux zum Laufen bringen
Startet den alten AMI JViewer (Java-Web-Start-KVM-Client, z.B. für Intel
S2600WTTR mit AMI BMC) unter einem aktuellen Linux, obwohl weder ein
passendes Java 8 noch eine funktionierende javaws/IcedTea-Web-Konfiguration
vorinstalliert sind.
Für einen kompletten Neubau ohne Java/IcedTea-Web-Altlasten siehe das parallel
laufende Projekt jviewer2 (moderner Nachbau des KVM-Protokolls, in Arbeit).
Ausgangslage / Warum das nötig ist
- BMC liefert eine alte
jviewer.jnlpmit<all-permissions/>und<nativelib>-Einträgen, die von aktuellem Java-Web-Start/IcedTea-Web so nicht mehr akzeptiert werden - BMC-Zertifikat ist alt und abgelaufen (RSA 1024, SHA1, abgelaufen seit 2016); TLS1.2 funktioniert, TLS1.0 nicht
- Auf aktuellen Distributionen gibt es kein passendes OpenJDK-8-Paket mehr
JViewer.jarist unsigniert, das Manifest deklariert aberPermissions: all-permissions— moderne IcedTea-Web-Versionen erzwingen dafür einen restriktiven Sandbox-Modus, der weder Sockets zum KVM-Redirection-Port (7578) noch das Laden der nativen CD/Floppy-Wrapper- Bibliotheken erlaubt
Was das Script macht
start-jviewer.sh löst das automatisiert, ohne etwas am System zu verändern
(alles bleibt im Projektordner):
- Lädt bei Bedarf ein eigenes Temurin-Java-8-JDK herunter (nicht nur
JRE —
jarsigner/keytoolwerden für Schritt 4 gebraucht) nachjava8/, unabhängig von einer eventuell vorhandenen Systeminstallation - Nutzt das im System installierte
javaws(Paketicedtea-netx), erzwingt aber überJAVA_HOME/PATHdas eigene Java 8 - Baut eine komplett isolierte IcedTea-Web-Umgebung unter
runtime-home/(eigenesXDG_CONFIG_HOME/XDG_CACHE_HOME, eigenedeployment.properties) — die System-IcedTea-Web-Konfiguration bleibt unangetastet - Patcht die JNLP minimal (
patch_jviewer.py): nur<nativelib>wird zu<jar>umbenannt (inkompatibel mit angefordertenall-permissions, unabhängig von Signierung);<security>/<all-permissions>und<codebase>bleiben unverändert - Lässt
javawsin einem ersten, absichtlich fehlschlagenden Lauf die Original-Jars von der BMC in den eigenen Cache laden - Signiert die gecachten Jars selbst mit einem einmalig erzeugten,
selbstsignierten Zertifikat (
signing/jviewer.jks) und trägt das Zertifikat automatisch in IcedTea-Webs Trusted-Certs-Store ein — dadurch bekommt die Anwendung reguläreAllPermissionstatt Sandbox, ohne dass ein Zertifikats-Dialog manuell bestätigt werden muss - Startet
javawsein zweites Mal mit-Xoffline, damit die gepatchten/ signierten Cache-Dateien verwendet werden, statt erneut unsignierte Originale von der BMC zu laden
Voraussetzungen
- Linux mit
bash,wget,unzip - Paket
icedtea-netxinstalliert (liefertjavaws):sudo apt install icedtea-netx - Netzwerkzugriff zur BMC sowie zu
api.adoptium.net(für den einmaligen Java-8-Download)
Benutzung
./start-jviewer.sh -c jviewer.jnlp
Das Script ist pfadunabhängig — es kann aus einem beliebigen Ordner heraus
aufgerufen werden, solange patch_jviewer.py im selben Verzeichnis liegt.
Der Pfad zur .jnlp-Datei kann relativ (zum Skript-Ordner) oder absolut
angegeben werden.
Alle heruntergeladenen/erzeugten Daten landen im Skript-Ordner:
| Ordner/Datei | Inhalt |
|---|---|
java8/ |
heruntergeladenes Temurin-JDK-8 |
runtime-home/ |
isolierte IcedTea-Web-Config und -Cache |
signing/ |
selbstsigniertes Schlüsselpaar (jviewer.jks) für die Jar-Signierung |
fixed-<name>.jnlp |
gepatchte JNLP, die tatsächlich gestartet wird |
jviewer-debug.log |
vollständiges javaws-Log des letzten (zweiten) Laufs |
jviewer-debug-pass1.log |
Log des ersten (Cache-Befüll-)Laufs |
java8/ und signing/ bleiben zwischen Läufen erhalten (kein erneuter
Download/keine neue Signatur nötig). runtime-home/.cache wird bei jedem
Lauf frisch geleert, runtime-home/.config bleibt erhalten (falls doch
einmal ein Zertifikats-Dialog manuell bestätigt werden muss, bleibt diese
Entscheidung über Neustarts hinweg erhalten).
Troubleshooting
javaws wurde nicht gefunden:sudo apt install icedtea-netxFEHLER: JNLP wurde NICHT gepatcht (nativelib noch vorhanden): prüfen, obpatch_jviewer.pyim selben Ordner wiestart-jviewer.shliegt und ob die JNLP-Datei tatsächlich<nativelib>-Tags enthält (Struktur kann sich je nach BMC-Firmware leicht unterscheiden)FEHLER: Nach Lauf 1 wurden keine Jars im Cache gefunden: BMC nicht erreichbar, oder TLS-Handshake schlägt fehl —jviewer-debug-pass1.logprüfen- Immer noch
access denied/SocketPermission-Fehler im 2. Lauf: prüfen, ob im Logverified as SIGNED_OKundApp already has trusted publisher: truesteht. Falls nicht, kann es sein, dass die verwendete IcedTea-Web- Version einen anderen Pfad/Passwort für den Trusted-Certs-Store erwartet alsruntime-home/.config/icedtea-web/security/trusted.certs/changeit— in diesem Fall erscheint ein GUI-Dialog, in dem einmalig "diesem Zertifikat immer vertrauen" bestätigt werden muss; das bleibt dank Punkt oben danach dauerhaft erhalten
Bekannte Einschränkungen
- Virtuelle Medien (CD/Floppy-Redirection über
com.ami.iusb.CDROMRedir) wurden nicht gesondert getestet; der Kern-Anwendungsfall (Bildschirm/ Tastatur/Maus per KVM) funktioniert - Der zweite
javaws-Lauf öffnet ein GUI-Fenster (Swing) — für den Einsatz ist also eine grafische Sitzung (lokal oder X11-Forwarding) nötig