Tôi đang lên kịch bản cho việc tạo ra các nhà tù chroot và một phần của tự động hóa đó bao gồm sao chép các thực thi khác nhau và sự phụ thuộc của chúng vào nhà tù. Tôi đang sử dụng dòng bash sau đây để phân tích các đường dẫn tệp ra khỏi danh sách các phụ thuộc (ví dụ như 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
Điều này hoạt động rất tốt cho Node.js và Python, nhưng khi tôi cố gắng thực thi java
từ bên trong nhà tù, tôi gặp lỗi:
java: lỗi trong khi tải thư viện dùng chung: libjli.so: không thể mở tệp đối tượng dùng chung: Không có tệp hoặc thư mục như vậy
Nó chỉ ra rằng đường dẫn libjli.so bị thiếu trong danh sách các phụ thuộc ... ít nhất là các đường dẫn ldd
hiển thị cho chúng tôi (dòng 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)
Tôi tìm thấy tập tin ...
$ 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
... nhưng tôi muốn biết tại sao nó không được liệt kê ldd
. Đó là một sự phụ thuộc được biết rõ ràng, nhưng con đường không rõ? Bất kỳ trợ giúp được đánh giá cao!