Tôi biết các khái niệm cơ bản về sử dụng ldconfig
và LD_LIBRARY_PATH
, nhưng tôi hy vọng một chút trợ giúp về guru với tình huống của tôi.Sử dụng thích hợp LD_LIBRARY_PATH hoặc ldconfig cho gói phần mềm
Tôi có gói phần mềm di động nằm trong thư mục riêng và có nhiều phiên bản thư viện riêng.
Có nhiều tập lệnh nhị phân và tập lệnh chạy từ thư mục này.
Một số tệp nhị phân (apache, php, postgres) cũng có thể có các phiên bản riêng được cài đặt trên hệ thống.
Vì có thể có hai phiên bản của php, nó không đủ để tạo /etc/ld.so.conf.d/myapp.conf
nếu hệ thống không thể xác định phiên bản "myapp" nào sử dụng tệp ldconfig cho.
Tôi đang tìm các phương pháp hay nhất về định cấu hình hệ thống như vậy. Người ban đầu thiết lập gói phần mềm xuất khẩu LD_LIBRARY_PATH
để TẤT CẢ các ứng dụng trên hệ thống đã sử dụng nó.
Tôi đang cố gắng cách ly chỉ các ứng dụng trong thư mục gói.
Một số thông số để làm việc với:
/mypack
- chứa tất cả mọi thứ cho gói phần mềm
/mypack/local/lib
- chứa thư viện cần thiết mà có thể không tương thích với hệ thống
thư viện ví dụ:
/mypack/local/lib/libz.so.1 => /mypack/local/lib/libz.so.1.2.3
/lib/libz.so.1 => /lib/libz.so.1.2.3
mặc dù các phiên bản giống nhau, phiên bản trong/mypack có thể không tương thích với bản phân phối và sẽ phá vỡ hệ thống nếu được sử dụng
ví dụ nhị phân: php tồn tại trong cả/mypack và trong thư mục mặc định php từ/mypack nên sử dụng libs từ/mypack/local/lib và phiên bản distro nên sử dụng/lib
Một số câu hỏi về đường dẫn thư viện linux: - Có thể chỉ định /etc/ld.so.conf.d/php.conf sao cho nó chỉ ảnh hưởng đến phiên bản php trong/mypack ? - Đường dẫn thư viện có thể được chỉ định dựa trên vị trí của tệp thực thi không? Đó là, vào thời gian chạy, nếu đường dẫn của một tập tin thực thi nằm trong/mypack, nó có thể tự động sử dụng các thư viện từ đó không? - Làm thế nào về trên cơ sở mỗi người dùng? Một số/hầu hết hệ thống chạy trên các tài khoản người dùng khác nhau. Nếu tôi có thể thiết lập một đường dẫn thư viện khác nhau cho mỗi người dùng, điều đó sẽ giải quyết nó.
Tôi nghĩ cách tiếp cận điển hình là để sử dụng tập lệnh trình bao bọc. Kịch bản trình bao bọc đặt giá trị của LD_LIBRARY_PATH và sau đó chạy tệp thi hành. Hãy xem google-chrome chẳng hạn. –
Nếu đó là cách duy nhất mà bất cứ ai đến với, tôi sẽ đi với nó. Tôi đã chạy Chrome 28 trong CentOS bằng cách làm điều đó, nhưng do số lượng thực thi khác nhau có liên quan, tôi đã cố gắng để tránh nó. – thatthatisis