Ich wollte kürzlich beim Franzosen auf iKVM (Java) zugreifen, nur leider bekomme ich die JNLP-Datei unter Debian 12 mit icedtea-netx nicht gestartet. Auch mit dem zweckentfremdeten Paket nvidia-openjdk-8-jre klappt es nicht, wenn man dieses bei itweb-settings hinterlegt. Zuhause habe ich ein ähnliches Board aus der X10-Serie (AST2400) von Supermicro und musste dann feststellen, dass ich iKVM über Java dort ebenfalls nicht mehr starten kann. Verdammt ![]()
Ich habe jetzt zwar einen Workaround gefunden (sehr hilfreich dafür war diese Seite), aber mich würde kurz interessieren, ob diese Probleme noch irgendwer mit älteren Supermicro (X10) Boards und OpenJDK hat bzw. eine bessere Lösung parat hat. In meinem Fall betrifft das den Java iKVM Viewer v1.69.37 bzw. v1.69.40.
Fehler bei Startversuchen
- Den ersten Fehler kann man einfach beheben: Unrecognized VM option 'PermSize=32M'
Einfach die JNLP-Datei bearbeiten und den Teil mit java-vm-args="…" entfernen. - Danach ist endgültig Endstation: Pack200 compression is no longer supported […]
Und hier stehe ich leider genauso an, ob man das irgendwie elegant beheben kann.
Bei Supermicro heißt es dazu nur lapidar:
IPMI KVM doesn’t work with open source Java (OpenJDK, IcedTea). Need Oracle Java.
Workaround
Zuerst muss man sich das unpack200 Binary besorgen, wofür es zwei Möglichkeiten gibt:
- Man installiert das Paket openjdk-11-jre-headless aus Debian 11. Dann ist es global im $PATH verfügbar: /usr/bin/unpack200
- Oder man installiert das Paket nvidia-openjdk-8-jre, der korrekte Pfad lautet dann: /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/unpack200
(Die Fleißaufgabe, das mit updates-alternatives selbst korrekt systemweit verfügbar zu machen, überlasse ich dem Leser dieser Zeilen.)
#!/bin/bash
cd /tmp || exit 1
jnlp=launch.jnlp
codebase=$(grep -Eo 'codebase="[^"]+"' "$jnlp" | cut -d '"' -f 2)
readarray -t files < <(grep -Eo 'href="[^"]+"' "$jnlp" | cut -d '"' -f 2 | sort | uniq)
for file in "${files[@]}"; do wget --no-check-certificate "${codebase}${file}.pack.gz"; done
gunzip -kv ./*.pack.gz
for file in ./*.pack; do unpack200 "$file" "$(sed -r 's/\.pack$//' <<< "$file")"; done
for file in lib*.jar; do unzip -n "$file"; done
readarray -t args < <(grep -F '<argument>' "$jnlp" | cut -d '>' -f 2 | cut -d '<' -f 1)
java -Djava.library.path=./ -cp iKVM*.jar tw.com.aten.ikvm.KVMMain "${args[@]}"
Alles anzeigen