2013-07-17 2 views
9
$ uname -a 
Linux xhost10.bcgsc.ca 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:14 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux 

$ /sbin/ldconfig --version 
ldconfig (GNU libc) 2.5 

Я устанавливаю несколько бинарных файлов и библиотек локально, так как у меня нет доступа root.Обновление кэша ldconfig без разрешения root

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

При выполнении программа возвращает:

$ path/to/cc1 
path/to/cc1: error while loading shared libraries: libmpc.so.3: cannot open shared object file: No such file or directory 

Я добавил пути к библиотекам $LD_LIBRARY_PATH, но я не могу обновить ldconfig кэш без корневого доступа ...

Есть user- специфический /etc/ld.so.cache?

Или, в общем, возможно ли «скрыть» файл конфигурации системы с помощью файла конфигурации пользователя?

+0

Я могу получить ld.so для поиска разделяемых библиотек путем экспорта LD_LIBRARY_PATH в ~/.bashrc и повторного входа в систему. Запуск двоичных файлов, динамически загружающих библиотеки в LD_LIBRARY_PATH, кажется, занимает намного больше времени для инициализации (общая сетевая файловая система), но по крайней мере они запускаются ... –

ответ

4

Кэш ldconfig применяется только к пути, указанному в файле /etc/ld.so.conf или /etc/ld.so.conf.d. Поскольку они не могут быть записаны для пользователей без root, вы не можете использовать их для повышения скорости запуска для исполняемых файлов, установленных без прав root без помощи root (но даже тогда было бы неплохо добавить файл, доступный для записи, пользователю системные шаблоны поиска библиотеки).

Для этих случаев вам необходимо использовать переменную среды LD_LIBRARY_PATH или путь к траектории rpath/runpath в исполняемом файле или библиотеке, которая зависит от библиотек в пути по умолчанию. Я не знаю различий в скорости между LD_LIBRARY_PATH и rpath/runpath, но путь rpath/runpath имеет то преимущество, что они влияют только на конкретные исполняемые файлы и, следовательно, с меньшей вероятностью могут вызывать проблемы для других программ.

В linux/unix отсутствует общий способ маскирования файла конфигурации системы и вместо этого использовать предоставленный пользователем файл. На самом деле это то, что модель безопасности unix активно предотвращает, чтобы избежать разного рода эскалации привилегий. Вот почему даже многие переменные окружения становятся недоступными для исполняемых файлов suid, например. У многих программ есть один способ указать переопределяющую конфигурацию пользователя, некоторые более сложные из них также имеют способы для системного администратора устанавливать обязательные настройки, которые не являются переопределяемыми.

Смежные вопросы