
Ich habe versucht, das aktuelle Oracle JRE auf einer VM mit NixOS zu installieren.
Nun passiert folgendes:
[michas@cc:~]$ tar xvzf jre-7u40-linux-x64.tar.gz |grep bin/java
jre1.7.0_40/bin/javaws
jre1.7.0_40/bin/java_vm
jre1.7.0_40/bin/java
[michas@cc:~]$ ls -l ./jre1.7.0_40/bin/java
-rwxr-xr-x 1 michas nogroup 7750 Aug 27 09:17 ./jre1.7.0_40/bin/java
[michas@cc:~]$ ./jre1.7.0_40/bin/java
bash: ./jre1.7.0_40/bin/java: No such file or directory
WTF? Die benannte Datei ist offensichtlich da. Was ist los?
Versuch einer weiteren Analyse:
[michas@cc:~]$ strace ./jre1.7.0_40/bin/java
execve("./jre1.7.0_40/bin/java", ["./jre1.7.0_40/bin/java"], [/* 53 vars */]) = -1 ENOENT (No such file or directory)
write(2, "strace: exec: No such file or di"..., 40strace: exec: No such file or directory
) = 40
exit_group(1) = ?
+++ exited with 1 +++
[michas@cc:~]$ strace ./jre1.7.0_40/bin/jav
strace: Can't stat './jre1.7.0_40/bin/jav': No such file or directory
Ok, die Ausgabe einer wirklich fehlenden Datei sieht anders aus.
[michas@cc:~]$ file ./jre1.7.0_40/bin/java
./jre1.7.0_40/bin/java: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, BuildID[sha1]=a558f547fe0b95fdc6a109cb7d9692d6d7969794, not stripped
[michas@cc:~]$ file ~/t
/home/michas/t: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, not stripped
Letzteres ist eine winzige, selbst kompilierte Binärdatei, die problemlos läuft. Beide sehen sehr ähnlich aus. Daher scheint das Format der Binärdatei selbst in Ordnung zu sein.
[michas@cc:~]$ ldd ./jre1.7.0_40/bin/java
/run/current-system/sw/bin/ldd: line 116: ./jre1.7.0_40/bin/java: No such file or directory
Es scheint ein Problem mit den benötigten gemeinsam genutzten Bibliotheken zu geben.
Was ist los und wie kann ich es beheben?
Antwort1
Normalerweise können Sie Binärdateien in NixOS nicht ausführen. Sie müssen entweder einige Umgebungsvariablen festlegen oder mit patchElf gepatcht werden. Ich gehe davon aus, dass Sie Java mit dem Nix-Paketmanager installieren und ausführen können. Sie können wahrscheinlich auch eine geeignete Umgebung zum Ausführen mit myEnvFun erstellen.
Antwort2
Es sieht so aus, als hätte Nixos ein Paket fürOrakel jre7.
Wenn Sie einen benutzerdefinierten Nix-Ausdruck erstellen möchten, um JRE oder JDK zu installieren, ist es möglicherweise eine gute Idee, sich die vorhandenen anzusehenNix-Ausdruck für jdk7/jre7.