LD_LIBRARY_PATH luôn để trống sau sudo


8

Tôi nhận được lỗi thư viện chia sẻ bất cứ khi nào tôi dường như cài đặt phần mềm bằng tay. Khi thực hiện echo $LD_LIBRARY_PATHnó hiện lên như .. không có gì . Tôi đã thử thêm /usr/local/libvào một .conftập tin /etc/ld.so.conf.dnhưng có vẻ như nó không bao giờ thực thi.

Điều này không hoạt động, hoặc (trích dẫn hoặc cách khác):

LD_LIBRARY_PATH="/usr/local/lib"
export LD_LIBRARY_PATH
sudo ldconfig -v

Giá trị sẽ được đặt tạm thời, nhưng nó sẽ không giữ lại giá trị nếu tôi thoát khỏi cửa sổ đầu cuối. Khởi động lại cũng không có gì.


Hãy thử thêm nó vào~/.bashrc
Kevdog777

bản sao có thể có của Cách tạo `sudo` bảo toàn $ PATH?
muru

Nó không phải là một bản sao; câu hỏi không liên quan và câu trả lời không hoạt động.
Cơn thịnh nộ bất đồng


1
Có, hãy để tôi sử dụng phần mềm bị hỏng từ một năm trước thay vì cho phép tôi cập nhật phần mềm để kiểm tra xem có gì thay đổi tốt hơn không.
Cơn thịnh nộ bất đồng

Câu trả lời:


7

Thêm phần sau vào .bashrc:

vim ~/.bashrc

...
export LD_LIBRARY_PATH=/usr/local/lib

Điều này sẽ cho phép bạn khởi động lại máy tính của mình và vẫn được chỉ định đường dẫn đó.


2
Điều đó tốt cho một người dùng. Còn đối với tất cả người dùng thì sao?
Cơn thịnh nộ bất đồng

2
@DissidentRage: thêm tương tự vào
/etc/bash.bashrc

Tôi sẽ đánh dấu đây là câu trả lời vì điều này hoạt động trong phạm vi nhất định. Tôi có thể làm gì với các tệp rõ ràng không được chạy trong /etc/ld.so.conf.d?
Cơn thịnh nộ bất đồng

1

Trên Red Hat Enterprise Linux (RHEL) 6, /etc/ld.so.confcó chứa include ld.so.conf.d/*.conf. Không có dòng này, các mục trong /etc/ld.so.conf.d/*.confsẽ không bao giờ được phân tích cú pháp.

Để xem thư viện / thư mục nào ldconfigđang phân tích cú pháp

ldconfig -v 

In số phiên bản hiện tại, tên của mỗi thư mục được quét và bất kỳ liên kết nào được tạo.


Vâng, tôi đã kiểm tra /etc/ld.so.conftrước đó vì tôi tò mò nó chứa cái gì. Nó đã có includedòng.
Cơn thịnh nộ bất đồng

Chạy ldconfig -vcó thể cho bạn một ý tưởng tại sao thư viện không được bao gồm. Bạn có thể chạy ldconfig -pđể in các thư viện và thư mục trong tệp bộ đệm hiện tại.
pyther

0

Cuối cùng tôi đã giải quyết điều này với một bí danh:

alias sudo='sudo PATH="$PATH" HOME="$HOME" LD_LIBRARY_PATH="$LD_LIBRARY_PATH"'

Hãy chắc chắn sử dụng các dấu ngoặc đơn, để các biến được mở rộng tại thời điểm gọi, không phải tại thời điểm bí danh được xác định.

Điều này:

  • giữ nguyên HOME (nếu không được đặt thành / root)
  • duy trì PATH (mặt khác được đặt thành đường dẫn 'an toàn' trong suders)
  • giữ nguyên giá trị hiện tại của LD_LIBRARY_PATH (nếu không sẽ bị xóa trắng)

(Bạn có thể thấy những thứ được thiết lập với sudo bash -c "echo $HOME":)

Tôi đang làm việc với các trình điều khiển tùy chỉnh và luôn phải sudo các chương trình thử nghiệm của mình để truy cập trình điều khiển. Tôi không muốn cài đặt các phiên bản thử nghiệm của các thư viện trong khu vực hệ thống, vì vậy tôi sử dụng LD_LIBRARY_PATH để thiết lập một thư mục thử nghiệm cụ thể khi cần. Tôi không thể chỉ đặt LD_LIBRARY_PATH cố định, tôi cần có thể thay đổi nó và giữ cài đặt hiện tại. Bảo tồn PATH và HOME cho phép tôi truy cập vào môi trường làm việc của mình - tập lệnh và cấu trúc thư mục.

Bí danh này tránh việc phải cấp quyền cho chăn trong sudoers ... và rõ ràng không có cách giải quyết nào cho LD_LIBRARY_PATH bất kể cài đặt sudoers nào. Nó không hoạt động sudo bên trong các tập lệnh, nhưng chúng có thể được mã hóa cứng khi cần thiết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.