LD_LIBRARY_PATH всегда пусто после sudo

9

Я получаю ошибки общей библиотеки всякий раз, когда мне кажется, что я устанавливаю программное обеспечение вручную. После выполнения echo $LD_LIBRARY_PATHэто проявляется как ... ничего . Я попытался добавить /usr/local/libв .confфайл, /etc/ld.so.conf.dно кажется, что он никогда не выполняется.

Это тоже не работает (цитаты или иначе):

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

Значение будет установлено временно, но оно не сохранит значение, если я выйду из окна терминала. Перезагрузка тоже ничего не дает.

Rissident Rage
источник
Попробуйте добавить его к~/.bashrc
Kevdog777
Возможный дубликат Как заставить `sudo` сохранить $ PATH?
Муру
Это не дубликат; вопрос не имеет значения, и ответ не работает.
Dissident Rage
1
Да, позвольте мне использовать сломанное программное обеспечение год назад вместо того, чтобы позволять мне обновлять его, чтобы проверить, изменилось ли что-нибудь к лучшему.
Dissident Rage

Ответы:

7

Добавьте следующее к вашему .bashrc:

vim ~/.bashrc

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

Это позволит вам перезагрузить компьютер и назначить этот путь.

Kevdog777
источник
2
Это хорошо для одного пользователя. Как насчет всех пользователей?
Dissident Rage
2
@DissidentRage: добавьте то же самое в /etc/bash.bashrc
JdeHaan
Я собираюсь отметить это как ответ, потому что это работает для данной области. Что я могу сделать с файлами, которые явно не запускаются /etc/ld.so.conf.d?
Dissident Rage
1

На Red Hat Enterprise Linux (RHEL) 6, /etc/ld.so.confсодержит include ld.so.conf.d/*.conf. Без этой строки элементы в /etc/ld.so.conf.d/*.confникогда не будут анализироваться.

Чтобы увидеть, какие библиотеки / каталоги ldconfigанализирует

ldconfig -v 

Напечатайте номер текущей версии, имя каждого каталога во время его сканирования и любые созданные ссылки.

pyther
источник
Да, я проверил /etc/ld.so.confранее, поскольку мне было любопытно, что это содержало. У него была includeлиния.
Dissident Rage
Запуск ldconfig -vможет дать вам представление о том, почему библиотека не включена. Вы можете запустить ldconfig -pпечать библиотек и каталогов, которые находятся в текущем файле кэша.
pyther
0

Я наконец решил это с псевдонимом:

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

Обязательно используйте одинарные кавычки, чтобы переменные раскрывались во время вызова, а не во время определения псевдонима.

Эта:

  • сохраняет HOME (в противном случае устанавливается / root)
  • сохраняет PATH (который в противном случае устанавливается в «безопасный» путь в suders)
  • сохраняет текущее значение LD_LIBRARY_PATH (которое в противном случае становится пустым)

(Вы можете увидеть , что вещи , приготовьтесь к с: sudo bash -c "echo $HOME")

Я работаю с нестандартными драйверами и всегда вынужден использовать свои тестовые программы для доступа к драйверу. Я не хочу устанавливать тестовые версии библиотек в системной области, поэтому я использую LD_LIBRARY_PATH для настройки конкретного тестового каталога по мере необходимости. Я не могу просто установить фиксированный LD_LIBRARY_PATH, мне нужно иметь возможность изменить его и сохранить текущие настройки. Сохранение PATH и HOME дает мне доступ к моей рабочей среде - сценариям и структуре каталогов.

Этот псевдоним позволяет избежать необходимости предоставления общих разрешений в sudoers ... и, по-видимому, в любом случае обходного пути для LD_LIBRARY_PATH не существует, независимо от настроек sudoers. Это не работает sudo внутри скриптов, но они могут быть жестко закодированы по мере необходимости.

maharvey67
источник