Binärdatei kann in NixOS nicht ausgeführt werden - Keine solche Datei oder kein solches Verzeichnis


11

Ich habe versucht, das aktuelle Oracle JRE auf einer VM unter 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 genannte Datei ist offensichtlich da. Was ist los?

Versuch weiter zu analysieren:

[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 selbstkompilierte Binärdatei, die ohne Probleme ausgeführt wird. Beide sehen sich sehr ähnlich. 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 das beheben?


Antworten:


10

Normalerweise können Sie unter NixOS keine Binärdateien 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 erstellen, um sie mit myEnvFun auszuführen.


2
Vielleicht kann ein Beispiel für die Verwendung patchelfzum Ausführen einer Binärdatei in einer Nix-Umgebung für diejenigen von Nutzen sein, die nach einer Lösung suchen. In diesem Fall handelt es sich jedoch um die "aktive" Nix-Umgebung des Benutzers in einer Einzelbenutzer-Nix-Installation unter CentOS. Ihre Anforderungen können unterschiedlich sein versioniert, gehasht im nix store).
imz - Ivan Zakharyaschev

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.