파일의 존재 여부, 이것이 문제입니다
3755 단어 bashlinuxnixostodayilearned
No such file or directory
.기다리다! 이런 젠장?
echo $?
127
What does it mean ?
물론 파일이 존재하고 실행 가능하며 소유권은 정상입니다.
ls -la ./ignite-cntr
-rwxr-xr-x 1 mhmxs users 43785128 May 16 08:43 ./ignite-cntr
내 호스트와 동일한 ELF 바이너리입니다.
file ./ignite-cntr
./ignite-cntr: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, Go BuildID=2ysLdCmI_2jEgu-V5h1c/SP9Ydh3EJWttepF73BdP/89qBX7R3MEzeLn0NZARQ/PDW1WPguwGiACmtUAl2M, BuildID[sha1]=1954e0539099fce0e813bc5ce5017ab0e8128468, not stripped
동적 종속성은 어떻습니까?
ldd ./ignite-cntr
linux-vdso.so.1 (0x00007ffcbd5ca000)
libpthread.so.0 => /nix/store/qjgj2642srlbr59wwdihnn66sw97ming-glibc-2.33-123/lib/libpthread.so.0 (0x00007fc896577000)
libdl.so.2 => /nix/store/qjgj2642srlbr59wwdihnn66sw97ming-glibc-2.33-123/lib/libdl.so.2 (0x00007fc896572000)
libc.so.6 => /nix/store/qjgj2642srlbr59wwdihnn66sw97ming-glibc-2.33-123/lib/libc.so.6 (0x00007fc89639d000)
/lib64/ld-linux-x86-64.so.2 => /nix/store/qjgj2642srlbr59wwdihnn66sw97ming-glibc-2.33-123/lib64/ld-linux-x86-64.so.2 (0x00007fc896599000)
모든 것이 괜찮은 것 같습니다. 어떻게든 문제를 디버깅해 봅시다.
strace ./ignite-cntr
execve("./ignite-cntr", ["./ignite-cntr"], 0x7ffcb65d4f30 /* 133 vars */) = -1 ENOENT (No such file or directory)
strace: exec: No such file or directory
+++ exited with 1 +++
새로운 것은 없다 :)
ltrace ./ignite-cntr
Can't execute `./ignite-cntr': No such file or directory
failed to initialize process 3885: No such file or directory
couldn't open program './ignite-cntr': No such file or directory
???
gdb -q ./ignite-cntr
(gdb) run
Starting program: ./ignite-cntr
/nix/store/gqicc6kxah7f8j54hp80qxpk16898lj9-bash-interactive-5.1-p8/bin/bash: line 1: ./ignite-cntr: No such file or directory
알겠습니다. 잘 모르겠습니다. Google에서 검색해 보겠습니다.
https://github.com/NixOS/nixpkgs/issues/107375
내가 NixOS 사용자라는 것을 눈치채셨나요?
nix-shell -p patchelf --run "patchelf --print-interpreter ./ignite-cntr"
/lib64/ld-linux-x86-64.so.2
따라서 NixOS에는 자체 패키지 관리자가 있으며 시스템을 구축합니다. 이 패키지 관리자를 사용하면 바이너리를 git 해시에 의한 종속성과 바인딩하는 것이 상대적으로 쉽습니다. 이를 통해 동일한 시스템에서 각 바이너리에 대해 서로 다른 버전을 사용할 수 있습니다.
하지만 이 바이너리는 NixOS 외부에서 빌드되었으며 인터프리터는 내 컴퓨터에 존재하지 않는 인터프리터를 가리키고 있습니다. 심볼릭 링크를 사용하는 대신 다운로드한 ELF 바이너리를 동일한
patchelf
명령으로 간단히 패치했습니다.nix-shell -p glibc patchelf --run "patchelf --set-interpreter $(find /nix/store -name ld-linux-x86-64.so.2 | head -1) ./ignite-cntr"
마지막으로 다음과 같이 작동합니다.
./ignite-cntr
ignite-cntr is an ignite VM image creation and container application
running tool. The VM images are built to support running container applications.
알게되어 반갑습니다. NixOS에게 이것을 가르쳐 주셔서 감사합니다!
Reference
이 문제에 관하여(파일의 존재 여부, 이것이 문제입니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mhmxs/does-file-exists-or-not-this-is-the-question-540g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)