LD_LIBRARY_PATH selalu kosong setelah sudo

9

Saya mendapatkan kesalahan pustaka bersama setiap kali saya menginstal perangkat lunak secara manual. Setelah mengeksekusi echo $LD_LIBRARY_PATHitu muncul sebagai .. tidak ada . Saya sudah mencoba menambahkan /usr/local/libke .conffile dalam /etc/ld.so.conf.dtetapi tampaknya seperti itu tidak pernah dijalankan.

Ini tidak berfungsi, baik (kutipan atau lainnya):

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

Nilai akan ditetapkan sementara, tetapi tidak akan mempertahankan nilai jika saya keluar dari jendela terminal. Reboot juga tidak.

Kemarahan Pembangkang
sumber
Coba tambahkan ke~/.bashrc
Kevdog777
kemungkinan duplikat dari Bagaimana membuat `sudo` mempertahankan $ PATH?
muru
Itu bukan duplikat; pertanyaannya tidak relevan dan jawabannya tidak berhasil.
Dissident Rage
1
Ya, izinkan saya menggunakan perangkat lunak yang rusak setahun yang lalu alih-alih mengizinkan saya memperbaruinya untuk menguji apakah ada yang berubah menjadi lebih baik.
Dissident Rage

Jawaban:

7

Tambahkan yang berikut ke Anda .bashrc:

vim ~/.bashrc

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

Ini akan memungkinkan Anda me-restart komputer Anda, dan masih memiliki jalur yang ditetapkan.

Kevdog777
sumber
2
Itu bagus untuk satu pengguna. Bagaimana dengan untuk semua pengguna?
Dissident Rage
2
@DissidentRage: tambahkan hal yang sama ke
/etc/bash.bashrc
Saya akan menandai ini sebagai jawaban karena ini berfungsi untuk cakupan yang diberikan. Apa yang bisa saya lakukan dengan file yang jelas tidak dijalankan /etc/ld.so.conf.d?
Dissident Rage
1

Di Red Hat Enterprise Linux (RHEL) 6, /etc/ld.so.confmengandung include ld.so.conf.d/*.conf. Tanpa baris ini, item dalam /etc/ld.so.conf.d/*.conftidak akan pernah diuraikan.

Untuk melihat pustaka / direktori ldconfigmana yang diuraikan

ldconfig -v 

Cetak nomor versi saat ini, nama setiap direktori saat dipindai, dan semua tautan yang dibuat.

pyther
sumber
Ya, saya periksa /etc/ld.so.confsebelumnya karena saya ingin tahu apa isinya. Itu memang memiliki includegaris.
Dissident Rage
Menjalankan ldconfig -vmungkin memberi Anda ide mengapa perpustakaan tidak dimasukkan. Anda dapat menjalankan ldconfig -puntuk mencetak perpustakaan dan direktori yang ada di file cache saat ini.
pyther
0

Saya akhirnya menyelesaikan ini dengan alias:

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

Pastikan untuk menggunakan tanda kutip tunggal, sehingga variabel diperluas pada saat doa, bukan pada saat alias didefinisikan.

Ini:

  • mempertahankan HOME (yang sebaliknya diatur ke / root)
  • mempertahankan PATH (yang jika tidak diatur ke jalur 'aman' di suders)
  • mempertahankan saat ini nilai LD_LIBRARY_PATH (yang jika tidak akan blanked)

(Anda dapat melihat hal-hal apa yang bisa diatur dengan sudo bash -c "echo $HOME":)

Saya bekerja dengan driver khusus dan selalu harus sudo program pengujian saya untuk mengakses driver. Saya tidak ingin menginstal versi uji pustaka di area sistem, jadi saya menggunakan LD_LIBRARY_PATH untuk menyiapkan direktori pengujian tertentu sesuai kebutuhan. Saya tidak bisa hanya menetapkan LD_LIBRARY_PATH yang diperbaiki, saya harus dapat mengubahnya dan mempertahankan pengaturan saat ini. Mempertahankan PATH dan HOME memberi saya akses ke lingkungan kerja saya - skrip dan struktur direktori.

Alias ​​ini menghindari keharusan memberikan izin selimut di sudoers ... dan tampaknya tidak ada solusi untuk LD_LIBRARY_PATH, terlepas dari pengaturan sudoer. Ini tidak berfungsi sudo di dalam skrip, tetapi itu bisa di-hardcode sesuai kebutuhan.

maharvey67
sumber