나는 매우 오래된 glibc를 가진 레거시 시스템을 가지고 있으며, 많은 테스트 / 검증 작업을 거치지 않으면 업그레이드 할 수 없습니다.
해당 시스템에서 여러 번 새로운 프로그램 (예 : Java 1.7)을 실행해야했습니다. 필요한 모든 libs를 패키지하고 chroot에서 서비스를 실행하는 chroot 솔루션을 선택했습니다.
chroot는 매우 제한적이며 LD_LIBRARY_PATH의 문제를 해결하려고합니다. 불행히도, libc.so.6: cannot handle TLS data
시도 할 때 오류가 발생합니다.
/lib/ld-linux.so.2
chroot에서도 필요하다는 것이 밝혀졌습니다 . 이것은 작동합니다 :
LD_LIBRARY_PATH=/home/chroot/lib /home/chroot/lib/ld-linux.so.2 /home/chroot/bin/program
그러나 라이브러리를로드 할 위치를 java
검사 /proc/self/cmdline
하여 바이너리를 'bin / java'로 지정하지 않으면 실패합니다. 또한 Java는 시작하는 동안 자체적으로 실행되어 문제를 더욱 복잡하게 만듭니다.
이 작업을 수행하기위한 마지막 도랑 시도에서 16 진 편집기로 Java 바이너리를 열고 문자열 /lib/ld-linux.so.2
을 /home/chroot/ld.so
(으로 심볼릭 링크로 ld-linux.so.2
) 바꾸면 효과가 있습니다!
그러나 모든 사람들이 모든 새로운 바이너리의 경로를 중첩 시스템의 절대 경로로 다시 작성하는 것이 큰 문제라는 데 모든 사람들이 동의 할 것이라고 생각합니다.
누구나 사용자 정의 ld-linux.so를 포함 하여 사용자 정의 라이브러리 경로를 사용하는 깔끔한 방법을 알고 있습니까?