Робота з програмними пакетами

Програмний пакет є об'єднанням пов'язаних між собою програм, які готові до інсталяції. Коли ви завантажуєте архів текстів програм, ви повинні відконфігуровати, відкомпільовати та встановити його вручну. В програмному пакеті це вже зроблено для вас. Все, що ви повинні зробити - встановити пакет. Інша приємна властивість використання програмного пакета є дуже просте видалення та оновлення його, якщо ви забажаєте. Slackware має програми для всіх потрібних функцій роботи з пакетами. Ви маєте можливість дуже легко встановити, видалити, та перевірити пакети.

З тих часів, як з'явився RedHat Pakage Manager, існує поширена думка, що Slackware не має засобів для встановлення програмних пакетів. Це далеко від правди. Slackware завжди мав в своєму складі програми для встановлення програмних пакетів, навіть до виникнення RedHat. Хоч pkgtool та пов'язані програми не такі повнофункціональні та поширені як rpm (або відповідно deb), вони виконують встановлення пакетів ніяк не гірше за rpm. Річ не в тому, що pkgtool не існує, а в тому, що він не виконує перевірку залежностей.

Нема сумнівів, що багато людей в співтоваристві Лінукса мають думку, що програма встановлення програмних пакетів повинна за визначенням виконувати перевірку залежностей. Але це не так, тому що Slackware у більшості випадків не робить. Це означає не те, що програмні пакети Slackware не мають залежностей, а тільки те, що програми встановлення програмних пакетів не роблять перевірку залежностей. Розв'язання залежностей залишено системному адміністратору, і це нам подобається.

Перегляд формату пакета

Перед вивченням утиліт ви повинні ознайомитися з форматом пакету Slackware. В Slackware пакет є просто файлом архіву tar , який стиснено програмою gzip. Пакети створюються для розпакування до кореневого каталогу.

Тут наведена умовна програма та приклад її пакету.

./
usr/
usr/bin/
usr/bin/makehejaz
usr/doc/
usr/doc/makehejaz-1.0/
usr/doc/makehejaz-1.0/COPYING
usr/doc/makehejaz-1.0/README
usr/man/
usr/man/man1
usr/man/man1/makehejaz.1.gz
install/
install/doinst.sh

Система встановлення пакетів витягне цю структуру файлів щоб встановити до кореневого каталогу. В базі даних пакетів буде створено запис про цей пакет, так що пізніше буде можливість його обновити або видалити.

Зверніть увагу на підкаталог install/. Це спеціальний підкаталог, що містить після-установчий скрипт з назвою doinst.sh. Якщо система обробки пакетів знайде цей файл, вона виконає його після встановлення пакету.

До пакету можуть бути вбудовані також інші скрипти, але вони будуть обговорюватися більш детально нижче, в секції ?18.3.2|.

Підпрограми обробки пакетів

Є чотири головні програми для обробки програмних пакетів. Вони виконують встановлення, видалення та оновлення пакетів.

pkgtool

pkgtool(8) є керованою меню програмою яка дозволяє встановлювати і видаляти пакети. Головне меню наведено на малюнку 18-1.

Малюнок 18-1. Головне меню pkgtool

+-------------------------------------------------------------------+
|          Slackware Package Tool (pkgtool version 9.1.0)           |
| Welcome to the Slackware package tool.                            |
| Which option would you like?                                      |
| +---------------------------------------------------------------+ |
| |  Current   Install packages from the current directory        | |
| |  Other     Install packages from some other directory         | |
| |  Floppy    Install packages from floppy disks                 | |
| |  Remove    Remove packages that are currently installed       | |
| |  View      View the list of files contained in a package      | |
| |  Setup     Choose Slackware installation scripts to run again | |
| |  Exit      Exit Pkgtool                                       | |
| +---------------------------------------------------------------+ |
|                                                                   |
|-------------------------------------------------------------------|
|                  < OK >                  < Cancel >               |
+-------------------------------------------------------------------+

Встановлення пропонується з поточного каталогу (Current), іншого каталогу (Other) або з гнучкого диску (Floppy). Просто виберіть бажаний метод встановлення, і pkgtool буде шукати у вказаному місці пакети, що можуть бути встановлені.

Ви також можете переглянути список встановлених пакетів (View), як показано на малюнку 18-2.

Малюнок 18-2. Режим перегляду pkgtool

+--------------------------------------------------------------------+
|    Please select the package you wish to view.                     |                          
|  +--------------------------------------------------------------+  |
|  | a2ps-4.13b-i386-2       a2ps (any to PostScript filter)      |  |
|  | aaa_base-9.1.0-noarch   aaa_base (Basic Linux filesystem pac |  |
|  | aalib-1.4rc5-i386-1     aalib (ASCII Art library) _1l1vlvlvl |  |
|  | abiword-2.0.0-i486-1    abiword (AbiWord Personal)           |  |
|  | acct-6.3.2-i386-1       acct (process accounting utilities)  |  |
|  | acme-2.4.0-i486-1       acme                                 |  |
|  | acpid-1.0.2-i486-1      acpid (ACPI daemon)                  |  |
|  | alsa-driver-0.9.6-i48   alsa-driver (Advanced Linux Sound Ar |  |
|  | alsa-lib-0.9.6-i486-1   alsa-lib (Advanced Linux Sound Archi |  |
|  | alsa-oss-0.9.6-i486-1   alsa-oss (library/wrapper to use OSS |  |
|  +--------------------------------------------------------------+  |
|--------------------------------------------------------------------|
|                  < OK >          < Cancel >                        |
+--------------------------------------------------------------------+

Якщо ви хочете видалити пакет, виберіть видалення (Remove) и вам буде надано список всіх встановлених пакетів. Встановіть відмітку на тому, який хочете видалити та виберіть ОК. pkgtool видалить його.

Деякі користувачі надають перевагу цій програмі перед програмами командного рядка. Але треба відмітити, що останні пропонують набагато більше можливостей. Так, можливість оновити пакет надається тільки програмами командного рядка.

insntallpkg

installpkg(8) виконує встановлення нових пакетів в системі. Синтаксис є таким:

#  installpkg option package_name

Для installpkg передбачені три можливості вибору (option). Тільки одна з них може бути використана одночасно.

Таблиця 18-1. Опції installpkg

-m : Виконує операцію makepkg в поточному каталозі.

-warn : Показує, що станеться, якщо ви встановите визначений пакет. Це корисно для створення системи, тому що ви можете точно побачити що станеться перед тим, як щось встановите.

-r : Рекурсивне встановлення всіх пакетів в поточному та вкладених каталогах. В назві пакету може бути застосувати вільну карту, яка буде використовуватися як маска пошуку під час рекурсивного встановлення.

Якщо ви надасте значення змінній оточення root до запуску installpkg, цей шлях буде використано для кореневого каталогу. Це корисно для встановлення нового пристрою для вашого кореневого каталогу. Звичайно він монтується до /mnt або ще чогось іншого ніж /.

Відомості про встановлений пакет зберігаються як елемент бази даних в /var/log/pakages. Цей елемент насправді є просто звичайним текстовим файлом, один файл для кожного пакету. Якщо пакет має після-установчий скрипт, він записується до /var/log/scripts.

Ви можете вказати декілька пакетів або застосувати вільну карту для назви пакету. Враховувайте, що installpkg не попередить вас, якщо ви перезаписуєте встановлений пакет. Він просто встановить новий наверх старого. Якщо ви бажаєте бути впевненим, що старі файли з попереднього пакету коректно видалені, використайте upgradepkg.

removepkg

removepkg(8) виконує видалення встановленого пакету із системи. Синтаксис є таким:

# removepkg option package_name

Для removepkg передбачені чотири можливості вибору (option). Тільки одна з них може бути використана одночасно.

Таблиця 18-2. Опції removepkg.

-copy : Пакет копіюється до каталогу збереженого пакету. Це створює дерево оригінального пакету без видалення його.

-keep : Зберігає тимчасові файли, що створені під час видалення. Реально корисне тільки для налагодження.

-preserve : Пакет видаляється, але одночасно копіюється до каталогу збереженого пакету.

-warn : Показує, що станеться якщо ви видалите пакет.

Якщо ви надасте значення змінній оточення root до запуску removepkg, цей шлях буде використано для кореневого каталогу. Це корисно для встановлення нового пристрою для вашого кореневого каталогу. Звичайно він монтується до /mnt або ще чогось іншого ніж /.

removepkg переглядає інші встановлені пакети та видаляє тільки файли, унікальні для визначеного вами пакету. Він також переглядає після-установчий скрипт для визначеного пакету і видаляє всі символічні зв'язки що були створені цим скриптом.

Під час процесу видалення показується звіт про стан. Після видалення запис з бази пакетів пересувається до /var/log/removed_packages і після-установчий скрипт пересувається до /var/log/removed_scripts.

Також як для installpkg ви можете вказати декілька пакетів або застосувати вільну карту для назви пакету.

upgradepkg

upgradepkg(8) оновлюватиме встановлений пакет Slackware. Синтаксис є таким:

# upgradepkg package_name

або

# upgradepkg old_package_name%new_package_name

upgradepkg виконує спершу встановлення нового пакету, а потім видалення старого пакету так що старі файли більше не займають місце в системі. Якщо назва оновленого пакету змінюється, використайте знак відсотку щоби визначити старий пакет (що був встановлений) та новий пакет (той, до якого його треба оновити).

Якщо ви надасте значення змінній оточення root до запуску upgradepkg, цей шлях буде використано для кореневого каталогу. Це корисно для встановлення нового пристрою для вашого кореневого каталогу. Звичайно він монтується до /mnt або ще чогось іншого ніж /.

upgradepkg не є бездоганним. Ви завжди повинні зберігати ваші конфігураційні файли. Якщо вони будуть видалені або перезаписані, ви ви забажаєте скопіювати оригінали для будь яких потрібних відновлень.

Також як для installpkg і removepkg ви можете вказати декілька пакетів або застосувати вільну карту для назви пакету.

rpm2tgz / rpm2targz

Програма Red Hat Package Manager є дуже популярною в наш час. Багато розповсюджувачів програмного забезпечення надають їх продукти в форматі RPM. Так як це не наш рідний формат, ми не рекомендуємо цілком надіятися на нього. Але деякі речі доступні тільки в RPM (навіть вихідні тексти).

Ми надаємо програму, яка перетворює пакети RPM на наш рідний .tgz формат. Це дозволить вам розпакувати пакет (можливо з допомогою explodepkg) до тимчасового каталогу і перевірити його зміст.

Програма rpm2tgz створить пакет Slackware з розширенням .tgz, в той час як rpm2targz створює архів з розширенням .tar.gz.

Створення пакетів

Створення пакетів Slackware може бути як простим, так і важким. Не існує єдиного визначеного методу створення пакету. Єдина вимога - пакет має бути стиснутим gzip файлом tar, та крім того, якщо пакет містить після-установчий скрипт, цей скрипт повинен бути /install/doinst.sh.

Якщо ви зацікавлені у створенні пакетів для вашої системи або мережі, ви повинні переглянути різні створюючи скрипти в дереві вихідних текстів Slackware. Є декілька методів, які ми використовуємо для створення пакетів.

explodepkg

explodepkg(8) робить те ж, що installpkg робить для розпакування пакету, але не встановлює насправді та не записує до бази даних пакетів. Ця програма тільки розпаковує файли до поточного каталогу.

Якщо ви переглянете дерево вихідних текстів Slackware, то побачите, як ми використовуємо цю команду для пакетів "framework". Такі пакети містять скелетон того, як буде виглядати фінальний пакет. Вони містять всі необхідні назви файлів (нульової довжини), дозволи та належності. Скрипт побудови єднає зміст пакету із вихідного каталогу з каталогом побудови пакету.

makepkg

makepkg(8) запаковує поточний каталог до пакету Slackware. Він переглядає дерево підкаталогів на наявність символічних посилань та додає блок створення до після-установчого скрипту для для створення їх під час встановлення пакету. Він також попереджує про будь-які файли нульової довжини в дереві пакету.

Ця команда звичайно виконується після того, як ви створите ваше дерево пакету.

Скрипт SlackBuild

Пакети Slackware за необхідністю будуються багатьма різними шляхами. Не всі програмні пакети написані їх програмістами щоб компілюватися однаково. Багато з них мають опції часу компіляції які не входять до таких, що використані в пакетах Slackware. Можливо вам потрібні деякі з таких функцій; тоді вам необхідно відкомпілювати свій особистий пакет. На щастя для багатьох пакетів Slackware ви можете знайти серед вихідного тексту пакету скрипт SlackBuild.

Так що ж таке SlackBuild? Скрипти SlackBuild є виконуваними скриптами оболонки, які ви запускаєте як root щоб конфігурувати, компілювати та створити програмний пакет Slackware. Ви можете вільно змінити ці скрипти в каталозі вихідних текстів та виконати для створення своєї особистої версії стандартного пакету Slackware.

Створення дескрипторів та файлів дескрипторів (для встановлення)

Програма встановлення Slackware виконує встановлення програмних пакетів до вашої системи. Є файли, які кажуть програмі встановлення, які пакети повинні бути встановлені, які є необов'язковими і які повинні бути вибрані стандартно.

Файл дескрипторів є в першому каталогу серії програмних продуктів. Він надає список пакетів в цьому наборі дисків та їх статус. Статус може бути:

Вибір Значення
ADD Пакет потрібний для належної роботи системи
SKP Пакет буде автоматично пропущено
REC Пакет не потрібний, але рекомендований
OPT Пакет необов'язковий

Формат простий:

pakage_name: status

Один пакет на строку. Оригінальні файли дескрипторів для кожної серії програм зберігаються як tagfile.org. Якщо ви зіпсуєте ваш, ви можете відновити оригінальний.

Багато адміністраторів вважають за краще написати свої файли дескрипторів, запустити програму встановлення та вибрати "повне". Програма встановлення буде читати файли дескрипторів і виконувати встановлення згідно їх змісту. Але, якщо ви використаєте REC або OPT, з'явиться можливість запитати користувача, чи хоче він цей окремий пакет. Тому, коли ви пишете файли дескрипторів для автоматичного встановлення, рекомендовано використовувати REC та OPT.

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