Розширене управління програмним забезпеченням 2

Управління спільно використовуваними бібліотеками
Ідея, що лежить в основі спільно використовуваних бібліотек, досить проста: це фрагмент компілює коду, що надає послуги і функції інших фрагментів компілює коду. Колективні бібліотеки надають часто викликаються функції іншим програмам і спроектовані так, щоб якомога більше програм могли багаторазово їх використовувати.
Спільно використовувані бібліотеки надають свої функції для підтримки інших програм. Такий підхід знижує середній розмір програм, вивільняючи значний обсяг системної пам'яті.
Під час завантаження система FreeBSD створює кеш доступних спільно використовуваних бібліотек. Програми не повинні сканувати весь диск при їх пошуку; вони просто запитують в кеші необхідні функції. Насправді здатність керувати кешем бібліотек - це одна з рис, що відрізняють новачка від професіонала.
FreeBSD надає досить багато розумних параметрів, що задаються за умовчанням, але тут ми розглянемо інструменти, необхідні для конфігурації і управління кешем в різних обставинах. Спільно використовувані бібліотеки - це кошти з норовом, однак за допомогою ldconfig. ldd і голови на плечах їх можна приручити.

Основний інструмент для управління спільно використовуваними бібліотеками - ldconfig (8). Тут ми обговорені кілька різних команд, що відносяться до ldconfig: rtld (l), ldd (l) і саму програму ldconfig.
Перш за все розглянемо типи виконуваних файлів: aout і ELF. Як адміністратор ви не повинні добре розбиратися в aout і ELF, але повинні знати, що aout - це застарілий стандарт, a ELF - новий, і що скомпільовані програми одного типу не можуть використовувати бібліотеки іншого типу. ELF-програми не можуть застосовувати aout-бібліотеки. (Під FreeBSD виконуваний файл Netscape має формат aout, тому для його застосування необхідно встановити бібліотеки сумісності з aout середовища XFree86.) Хоча виконувані aout-файли поступово зникають, системі FreeBSD ще невизначено довго доведеться підтримувати обидва типи.
При запуску ELF-програми, якій необхідні бібліотеки, система викликає rtld (l), «компоновщик на етапі виконання» (run-time linker), rtld досліджує завантажені програми, визначає, які бібліотеки ім необхідні, а потім завантажує ці бібліотеки. Для aout-nporpaмм є окремий компоновщик, званий ld (aout).

Якщо шуканої бібліотеки немає ні в одному з просканованих каталогів, її треба знайти. Взагалі кажучи, якщо відсікти перші символи в імені бібліотеки і застосувати> locate або> find >> / >> name >> libname >> print>, цей файл буде знайдений. У гіршому випадку доведеться пробиратися крізь довгий список рядків результату, в одній з яких знайдеться потрібна бібліотека.
Після встановлення тієї чи іншої програми в системі може з'явитися новий каталог з бібліотеками. За допомогою ключа -m можна досить просто «влити» бібліотеки нового каталогу в існуючий кеш. Деякі «порти» навіть застосовують цей ключ для конфігурації бібліотек під час початкового завантаження, що виключає тяжку плутанину з /etc/rc.conf. Для «вливання» моєї бібліотеки в існуючий кеш я набираю таку команду:
# Ldconfig -m / usr / local / pilot / lib

LD_LIBRARY_PATH
Ключ -т чудово працює з точки зору системного адміністратора, проте він не підходить для скромного користувача без привілеїв root. Крім того, якщо у звичайного користувача є свій набір бібліотек, системний адміністратор може не дозволити до них загальний доступ. А оскільки власником каталогу спільно використовуваних бібліотек повинен бути root, то звичайні користувачі не зможуть отримати доступ до тієї папки. Ймовірно, системний адміністратор постарається не залишити жодного шансу для зв'язування системних програм з особистими бібліотеками користувача. Саме тут на допомогу прийде змінна оточення LD_LIBRARY_PATH. Замість того щоб створювати кеш, змінна LD_LIBRARY_PATH наказує системі шукати нові бібліотеки в каталогах, список яких вона задает.В LD_LIBRARY_PATH можна вказати будь-яку кількість каталогів, розділивши їх двокрапкою. Наприклад, я можу розмістити каталоги / home / mwlucas / lib і / compat / linux / usr / lib / local в LD_LIBRARY_PATH, щоб виконати установку програмного забезпечення. Для цього я наберу таку команду:
S setenv LD_LIBRARY_PATH / home / mwlucas / lib: / compat / linux / usr / lib / local
Наприклад, зазвичай я встановлюю StarOffice вручну, а не застосовую порт. При цьому процедура установки витягує різні бібліотеки в /tmp/sv001.tmp і розраховує знайти їх при запуску графічного інсталятора. Щоб ці бібліотеки дійсно були знайдені, я починаю установку пакета з того, що задаю в LO_LIBRARY_PATH каталог jimp / sv001.tmp:
№ setenv LD_IIBRARY_PATH /tmp/sv001.tmp # ./setup
Коли буде запущений графічний інсталятор StarOffice, він знайде в цьому каталозі витягнуті бібліотеки. Таким чином, не треба реконфигурируется вать всю систему FreeBSD тільки для того, щоб застосовувати ту чи іншу програму.

Нарешті, виникає питання: які бібліотеки потрібні програмі?

Цей висновок містить імена спільно використовуваних бібліотек, які потрібні Emacs, і вказує розташування файлів, що містять ці бібліотеки. Цей список можна порівняти з висновком команди ldconfig -r, щоб переконатися, що у програми є все необхідне. Або пошукати необхідні бібліотеки.

Схожі статті