NixOS에서 바이너리를 실행할 수 없음-해당 파일 또는 디렉토리가 없음


11

NixOS를 실행하는 VM에 현재 Oracle jre를 설치하려고했습니다.

이제 다음이 발생합니다.

[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? 명명 된 파일이 분명히 있습니다. 무슨 일이야?

더 분석하려고 :

[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

실제로 누락 된 파일의 출력은 다르게 보입니다.

[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

후자는 문제없이 실행되는 작은 자체 컴파일 이진입니다. 둘 다 매우 비슷해 보인다. 따라서 바이너리 자체의 형식은 괜찮은 것 같습니다.

[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

필요한 공유 라이브러리에 문제가있는 것 같습니다.

무슨 일이 있고 어떻게 해결할 수 있습니까?


답변:


10

일반적으로 NixOS에서 바이너리 파일을 실행할 수 없으며 환경 변수 세트가 필요하거나 patchElf로 패치해야합니다. nix 패키지 관리자를 사용하여 Java를 설치하고 실행할 수 있다고 가정합니다. myEnvFun을 사용하여 실행하기에 적합한 환경을 만들 수도 있습니다.


2
아마도 nix 환경에서 바이너리를 실행하는 데 사용 하는 예patchelf 는 솔루션을 찾는 사람들에게 유용 할 수 있습니다. 그러나 CentOS 하의 단일 사용자 nix 설치에서 사용자의 "활성"nix 환경 인 경우, 요구 사항이 다를 수 있습니다 (IIC 일수록 더 활발한 접근 방식은 "활성"symlinked 환경이 아니라 특정 환경에 대한 것입니다. nix 저장소에서 버전을 지정하고 해시했습니다).
imz-Ivan Zakharyaschev

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.