Tôi có một hệ thống kế thừa với một glibc rất cũ, chúng tôi không thể nâng cấp mà không phải chịu một loạt công việc kiểm tra / xác nhận.
Tôi đã cần phải chạy các chương trình mới hơn (như Java 1.7) trên hệ thống đó nhiều lần. Tôi đã chọn một giải pháp chroot, nơi tôi gói tất cả các lib cần thiết và chạy một dịch vụ trong một chroot.
Mặc dù vậy, chroot rất hạn chế và tôi muốn thử giải quyết vấn đề với LD_LIBRARY_PATH. Thật không may, tôi nhận được một lỗi về libc.so.6: cannot handle TLS data
khi tôi thử điều đó.
Hóa ra tôi cũng cần /lib/ld-linux.so.2
từ chroot. Những công việc này:
LD_LIBRARY_PATH=/home/chroot/lib /home/chroot/lib/ld-linux.so.2 /home/chroot/bin/program
Tuy nhiên, thực hiện java
thủ thuật của tôi bằng cách kiểm tra /proc/self/cmdline
để xác định nơi tải thư viện của nó, điều này không thành công nếu nhị phân không được đặt tên là 'bin / java'. Ngoài ra java thực thi chính nó trong khi khởi động, vấn đề phức tạp hơn nữa.
Trong lần thử cuối cùng để thực hiện công việc này, tôi đã mở tệp nhị phân java bằng trình soạn thảo hex và thay thế chuỗi /lib/ld-linux.so.2
bằng /home/chroot/ld.so
(và làm cho nó trở thành một liên kết tượng trưng ld-linux.so.2
) và nó đã hoạt động!
Nhưng tôi nghĩ mọi người sẽ đồng ý rằng đó là một khối lượng lớn để viết lại đường dẫn của mọi nhị phân mới đến một đường dẫn tuyệt đối của hệ thống lồng nhau.
Có ai biết một cách sạch hơn để sử dụng đường dẫn thư viện tùy chỉnh bao gồm ld-linux.so tùy chỉnh không?