Пакети та портовані програми у FreeBSD, Документація FreeBSD, Linux, Cisco
Сайт для нотаток, статей. Щоб самому не забути, ну і може комусь допоможе
Пакети та портовані програми у FreeBSD
Стаття про пакети та порти у FreeBSD, описано що це і як використовується
Вступ Операційна система (ОС) FreeBSD включає у своїй поставці значну кількість програм і пакетів сторонніх розробників. Для зручності встановлення їх у системі використовуються два взаємопов'язані механізми: перший – система пакетів, другий – дерево портування. У цьому документі будуть описані деякі подробиці функціонування кожного з них та способи вирішення проблем, що виникають у процесі інсталяції та деінсталяції програм.
Пакети (packages) Пакетами в FreeBSD називаються спеціально оформлені архіви з вже відкомпільованими програмами. Ці архіви містять всю необхідну інформацію про файли, що становлять пакет, про каталоги в які файли слід розмістити, про взаємозв'язки цього пакета з іншими пакетами. Процес встановлення нового пакета вкрай простий: потрібно скористатися системною програмою pkg_install, яка виконає всі дії щодо встановлення та налаштування системи для роботи з вмістом пакета або програмою sysinstall, яка є надбудовою над pkg_install. Встановлення нового пакета може вимагати додаткових (взаємопов'язаних) пакетів, що містять програми та файли, необхідні для функціонування пакета, що встановлюється. Процедура деінсталювання пакета так само проста, вона здійснюється або викликом програми pkg_delete або засобами програми sysinstall. Як і в процесі інсталяції може виникнути питання видалення інших пакетів, які використовують даний.
Тепер зупинимося докладніше на питаннях пов'язаних звнутрішньою структурою пакету та інформації про вже встановлені в системі пакети. Кожен пакет - це стислий архів, створений програмами tar та gzip. Всередині пакета зазвичай міститься дерево файлів зі структурою, що збігається з розташуванням файлів у системі після установки пакета. Крім файлів, які безпосередньо стосуються набору програм, що встановлюються, у пакеті містяться додаткові файли в яких містяться відомості про сам пакет і засоби налаштування програм. Вміст файлів такий: [quote]+COMMENT -однорядковий опис вмісту пакета, +CONTENTS -скрипт, що містить перелік файлів у пакеті та їх контрольні суми, +DESC -докладний опис пакета, + DISPLAY -інформаційний файл, що виводиться на екран у процесі встановлення пакета, +MTREE_DIRS -використовується для створення дерева каталогів в якому будуть розміщені гайли пакета та встановлення необхідних прав доступу до них (файл у форматі програми mtree). [/quote]
Після встановлення пакета в системі в каталозі /var/db/pkg створюється підкаталог з тим самим ім'ям, що й у пакета. Вміст підкаталогу -файли +COMMENT, +CONTENTS, +DESC, +DISPLAY, +MTREE_DIRS, +REQUIRED_BY. Файл +REQUIRED_BY містить перелік пакетів для роботи яких необхідний пакет.
Оскільки програми роботи з пакетами спираються на вміст каталогу /var/db/pkg, різні маніпуляції з файлами в ньому вкрай небажані (звичайно якщо немає точної впевненості у своїх діях). Детально про нестандартні способи використання вмісту /var/db/pkg буде описано нижче.
Дерево портування (/usr/ports) Дерево портування -це сукупність файлів, необхідні установки в системі програмного продукту з використанням вихідних текстів. Побудова програм із вихіднихтекстів зазвичай займає набагато більше часу, ніж установка відповідного пакета. Однак, в установці програм таким чином є свій резон: багато помилок в установці та конфігуруванні системи можуть бути виявлені саме в процесі компіляції вихідних текстів. Крім того, компіляція програм дозволяє уникнути зайвих перетинів однотипних пакетів (наприклад, у разі встановлення русифікованих версій apache та додаткових модулів до нього) і тим більше змінити установки та конфігурацію програми.
Звичайна процедура компіляції програм зводиться до видачі команди make install clean або двох послідовних команд: make install і make clean у відповідному каталозі. Більш цікавими є наступні опції програми make, що використовуються при роботі з деревом портування. Опція:
fetch - дозволяє завантажити необхідні файли для побудови програм, extract -розпакувати архів з вихідними текстами, patch -здійснити зміни (патчі) у вихідних текстах, configure -конфігурувати програми, build -відкомпілювати програми , install (reinstall)-встановити (повторно) програми, clean -очистити каталог від тимчасових робочих файлів, deinstall - деінсталювати порт distclean -видалити з системи файли з вихідними текстами.
У підкаталогах дерева портування зазвичай містяться такі файли:
Makefile -файл, необхідний для побудови програм, distinfo -файл, що містить список архівів з вихідними текстами програм та їх контрольні суми, pkg-comment -однорядковий і pkg-descr -детальніший опис вмісту даного елемента портування, pkg-plist -список файлів, що входять в даний набір програм, крім того може бути підкаталог files, в якому містяться файли, необхідні для доповнення та змінивихідних текстів.
У процесі компіляції програм у поточному каталозі створюється тимчасовий підкаталог work у піддереві якого розпаковується архів із вихідними текстами та виробляється побудова програм. У самому каталозі work у процесі компіляції утворюється кілька файлів-ключів, кожен із яких створюється внаслідок виконання відповідних фаз побудови:
.extract_done.[ім'я пакета] -утворюється в результаті розпакування вмісту архівів і відповідає команді make extract, .patch_done.[ім'я пакета] -утворюється після застосування патчів до вихідних текстів (відповідає make patch), .configure_done. [ім'я пакета] -утворюється після конфігурування програм перед компіляцією (відповідає make configure), .buid_done.[ім'я пакета] -утворюється після компіляції програм (відповідає make build), .install_done. після встановлення пакета у системі (відповідає make install). Видалення того чи іншого файлу-ключа дозволяє зробити повторну операцію, в результаті якої даний ключ створюється (тобто видалення .build_done.* дозволяє багаторазово компілювати програми пакета).
Проблеми із встановленням програм, деякі рекомендації Доволі часто трапляються випадки, коли встановлення програм за допомогою пакетів або портингу призводить до небажаних результатів. Це насамперед пов'язані з тим, що з роботи програм найчастіше потрібні різні версії однієї й тієї ж програмного продукту. Здебільшого це стосується бібліотек, але іноді цілих програмних комплексів. Існує також кілька пакетів, які в тій чи іншій мірі замінюють файли, створені в процесі встановлення системи. Деякі пакети мають взаємні перетину файлів, так що видалення одного пакета може призвести до втратипрацездатності іншого.
Характерні приклади проблемних пакетів: XFree86-4 -у процесі установки замінює частину файлів XFree86-3.3.6, остання ставиться зазвичай оминаючи системи пакетів на стадії установки ОС. KDE1, KDE2 - є взаємовиключними елементами, установка одного призводить до втрати працездатності іншого, аналогічна проблема виникає при встановленні бібліотек QT різних версій (перетин заголовкових файлів). Різні варіанти HTTP сервера apache частково перетинаються файлами і можуть призводити до втрати працездатності при видаленні в разі одночасної установки декількох версій.
Окремою проблемою є процес переходу на нову версію системи та (або) оновлення дерева портингу. У цьому випадку частина пакетів змінює свою назву і стає потенційним джерелом неприємностей, пов'язаних із перетином файлів. Найправильніше рішення в цьому випадку (якщо звичайно передбачається подальший розвиток системи та встановлення нових компонентів) - повністю перевстановити всі пакети, що є в системі. Видалити всі пакети з системи можна або багаторазовою видачею команди pkg_delete * в каталозі /var/db/pkg (при цьому за один раз видаляються пакети, що не є чиєюсь залежністю) або командою pkg_delete -f там же (при цьому кожен пакет видаляється незважаючи на його залежності).