Nie można uruchomić pliku binarnego w NixOS - Brak takiego pliku lub katalogu


11

Próbowałem zainstalować bieżący środowisko Oracle na maszynie wirtualnej z systemem NixOS.

Teraz dzieje się:

[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? Nazwany plik jest oczywiście tam. Co się dzieje?

Próbuję dalej analizować:

[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, wyjście naprawdę brakującego pliku wygląda inaczej.

[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

Ten ostatni to niewielki, samodzielnie skompilowany plik binarny działający bez problemów. Oba wyglądają bardzo podobnie. Stąd format samego pliku binarnego wydaje się być w porządku.

[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

Wygląda na to, że istnieje problem dotyczący potrzebnych bibliotek współdzielonych.

Co się dzieje i jak mogę to naprawić?


Odpowiedzi:


10

Zwykle nie można uruchamiać plików binarnych w NixOS, będą one albo potrzebowały zestawu zmiennych środowiskowych, albo łaty łatką łatki. Zakładam, że możesz zainstalować i uruchomić Javę za pomocą menedżera pakietów nix. Prawdopodobnie możesz także stworzyć odpowiednie środowisko do uruchomienia go za pomocą myEnvFun.


2
Być może przykład użycia patchelfdo uruchomienia pliku binarnego w środowisku nix może być przydatny dla osób szukających rozwiązania. Ale ten przypadek to „aktywne” środowisko nix użytkownika w instalacji nix dla pojedynczego użytkownika w CentOS, twoje potrzeby mogą być inne (IIC, bardziej nixy podejście polegałoby na tym, aby nie odnosić się do „aktywnego” dowiązania symbolicznego, ale raczej do konkretnego wersjonowany, zaszyfrowany jeden w sklepie nix).
imz - Ivan Zachharyaschev

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.