Java JDK 종속성 목록, Debian에서 libjli.so 경로가 누락되었습니다.

Java JDK 종속성 목록, Debian에서 libjli.so 경로가 누락되었습니다.

나는 chroot Jail 생성을 위한 스크립트를 작성 중이며 자동화의 일부에는 다양한 실행 파일과 해당 종속성을 감옥에 복사하는 작업이 포함됩니다. 다음 bash 라인을 사용하여 종속성 목록(예: Java의 경우)에서 파일 경로를 구문 분석합니다.

$ ldd `which java` | grep -o '/[^()]*'
/lib/x86_64-linux-gnu/libz.so.1
/lib/x86_64-linux-gnu/libpthread.so.0
/lib/x86_64-linux-gnu/libdl.so.2
/lib/x86_64-linux-gnu/libc.so.6
/lib64/ld-linux-x86-64.so.2

이는 Node.js와 Python에서는 훌륭하게 작동하지만 감옥 내에서 실행하려고 하면 java오류가 발생합니다.

java: 공유 라이브러리 로드 오류: libjli.so: 공유 객체 파일을 열 수 없습니다: 해당 파일 또는 디렉터리가 없습니다.

그것은 밝혀졌다libjli.so종속성 목록에서 경로가 누락되었습니다. 최소한 ldd우리에게 표시된 경로는 다음과 같습니다(5행).

$ ldd `which java`
linux-vdso.so.1 =>  (0x00007ffff7f4d000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f7ac3928000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7ac370c000)
libjli.so => not found
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7ac3507000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7ac317c000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7ac3b48000)

이 파일을 찾았습니다..

$ find /usr/lib -name libjli.so
/usr/lib/jvm/java-6-openjdk-amd64/lib/amd64/jli/libjli.so
/usr/lib/jvm/java-6-openjdk-amd64/jre/lib/amd64/jli/libjli.so

...그런데 왜 목록에 없는지 궁금합니다 ldd. 분명히 이것은 알려진 종속성이지만 경로를 알 수 없습니까? 도움을 주시면 감사하겠습니다!

답변1

/etc/ld.so.conf* 또는 ldconfig를 망칠 ​​필요 없이 즉시 작동해야 하며 매우 쉽게 수행됩니다. chroot에 /proc를 마운트하기만 하면 됩니다. 실제 루트 fs의 /etc/fstab에서 다음 줄을 사용하여 이 작업을 수행합니다.

/proc /var/chroot/ia32/proc 바인딩 없음

따라서 실제 /proc에 바인딩합니다.

모든https://github.com/cedric-vincent/PRoot/issues/9, ld-linux.so(제 생각에는) /proc/self/exe를 조사하여 $ORIGIN이 objdump -p의 RPATH 항목으로 대체되었는지 확인합니다.

나는 몇 번이나 이것에 물려 그것을 재발견해야 했습니까? 오, 강하고 현명한 구글이시여, 다음에는 가능한 한 빨리 저를 이곳으로 데려가 주세요. 미래의 제가 과거의 무릎 위에서 다시 배울 수 있도록!

답변2

추가하셔야 할 것 같습니다

/usr/lib/jvm/java-6-openjdk-amd64/jre/lib/amd64/jli

/etc/ld.so.conf 또는 /etc/ld.so.conf.d의 새 파일일 가능성이 높습니다. 그런 다음 ldconfig업데이트 캐시를 실행하여 ldd라이브러리를 찾습니다.

chroot 스크립트를 작성하는 경우 장기적으로 패키지 기반 접근 방식을 취하고 먼저 기본 설치를 생성한 다음(예: Debian 기반 호스트에서 debootstrap 사용) 원하는 패키지를 설치하는 것이 덜 고통스러울 수 있습니다. 이를 통해 패키지 관리자는 종속성 해결, 필요한 모든 파일 설치, 설치 후 작업 실행 등의 모든 작업을 처리할 수 있습니다.

관련 정보