pkgtool
pkgtool — это утилита командной строки для управления пакетами программного обеспечения в операционных системах семейства Slackware Linux. Она предоставляет основные функции для установки, удаления, обновления и просмотра информации о программных пакетах, распространяемых в формате .tgz (или .txz). В отличие от более сложных систем управления пакетами, таких как APT (Debian, Ubuntu) или RPM (Red Hat, Fedora), pkgtool не отслеживает зависимости между пакетами автоматически, что является одной из ключевых особенностей философии Slackware.
История
pkgtool был разработан Патриком Фолькердингом (Patrick Volkerding), создателем дистрибутива Slackware, в начале 1990-х годов. Первая версия Slackware (1.0) была выпущена в 1993 году, и pkgtool входил в её состав с самого начала. Утилита создавалась как простая и надёжная альтернатива более сложным менеджерам пакетов, существовавшим на тот момент. Основная идея заключалась в том, чтобы предоставить пользователю полный контроль над системой, не навязывая автоматических решений по разрешению зависимостей.
На протяжении десятилетий pkgtool оставался практически неизменным, что подчёркивает стабильность и консервативность Slackware. Несмотря на появление дополнительных инструментов (например, slackpkg для работы с репозиториями), pkgtool по-прежнему является основным и наиболее надёжным способом ручного управления пакетами в этой операционной системе.
Основные компоненты
pkgtool состоит из набора отдельных утилит, каждая из которых выполняет свою функцию. Взаимодействие с ними происходит через командную строку или через текстовое меню, вызываемое командой pkgtool.
installpkg
Утилита для установки пакетов. Синтаксис команды:
``bash installpkg имя_пакета.tgz ``
При установке installpkg распаковывает содержимое архива в корневую файловую систему (обычно в /), копирует файлы в соответствующие каталоги (/usr/bin, /etc, /usr/lib и т.д.) и записывает метаданные о пакете в базу данных /var/log/packages/. Если пакет уже установлен, installpkg по умолчанию заменяет его, но не удаляет старые файлы, которые могли быть удалены из новой версии. Для обновления рекомендуется использовать upgradepkg.
removepkg
Утилита для удаления пакетов. Синтаксис:
``bash removepkg имя_пакета ``
При удалении removepkg считывает список файлов, принадлежащих пакету, из базы данных /var/log/packages/ и удаляет их. Если какой-либо файл используется другим пакетом (что определяется по совпадению контрольных сумм), он не удаляется. После удаления пакета запись о нём из базы данных стирается, а информация о удалённых файлах сохраняется в /var/log/removed_packages/.
upgradepkg
Утилита для обновления пакетов. Синтаксис:
``bash upgradepkg имя_старого_пакета.tgz%имя_нового_пакета.tgz ``
Или, если имя пакета не изменилось:
``bash upgradepkg имя_пакета.tgz ``
upgradepkg работает следующим образом: сначала устанавливает новый пакет, а затем удаляет файлы, которые присутствовали в старой версии, но отсутствуют в новой. Это позволяет избежать накопления «мусора» (orphaned files), которое происходит при использовании installpkg для обновления.
explodepkg
Утилита для распаковки содержимого пакета без его установки. Синтаксис:
``bash explodepkg имя_пакета.tgz ``
Эта команда просто распаковывает архив в текущий каталог, не внося никаких изменений в систему и не записывая метаданные. Используется для просмотра содержимого пакета или для извлечения отдельных файлов.
makepkg
Утилита для создания пакетов из подготовленного дерева каталогов. Синтаксис:
``bash makepkg имя_пакета.tgz ``
Пользователь создаёт структуру каталогов, имитирующую корневую файловую систему (например, ./usr/bin/, ./etc/), помещает туда файлы, а затем запускает makepkg в корне этой структуры. Утилита создаёт сжатый архив (GZip или XZ) и генерирует скрипты установки/удаления, если они присутствуют. makepkg также может автоматически создавать контрольные суммы для обнаружения конфликтов.
Формат пакета
Пакеты Slackware представляют собой сжатые архивы в формате tar (обычно сжатые GZip — .tgz или XZ — .txz). Внутри архива находится дерево каталогов, которое при установке копируется в корневую файловую систему. Пакет может содержать два специальных скрипта:
doinst.sh— скрипт, выполняемый после установки пакета (например, для создания символических ссылок или настройки конфигурационных файлов).post-install.sh— скрипт, выполняемый после установки пакета (в более новых версиях Slackware).
Метаданные пакета (имя, версия, архитектура, описание) хранятся в файле /install/slack-desc внутри архива.
База данных пакетов
Slackware ведёт две базы данных для отслеживания установленных и удалённых пакетов:
/var/log/packages/— каталог, содержащий текстовые файлы с именами, соответствующими установленным пакетам. Каждый файл содержит список всех файлов, принадлежащих данному пакету, с их контрольными суммами (MD5) и правами доступа./var/log/removed_packages/— каталог, содержащий аналогичные файлы для удалённых пакетов. Эта информация может быть полезна для восстановления системы.
Сравнение с другими системами управления пакетами
| Характеристика | pkgtool (Slackware) | APT (Debian/Ubuntu) | RPM (Red Hat/Fedora) |
|---|---|---|---|
| Разрешение зависимостей | Отсутствует (ручное) | Автоматическое | Автоматическое (через DNF/YUM) |
| Формат пакета | .tgz / .txz | .deb | .rpm |
| Сложность | Низкая | Высокая | Средняя |
| Гибкость | Высокая (полный контроль) | Средняя | Средняя |
| Скорость работы | Высокая | Средняя | Средняя |
| Риск «ада зависимостей» | Минимальный (при ручном управлении) | Возможен | Возможен |
Основное отличие pkgtool от APT и RPM заключается в отсутствии автоматического разрешения зависимостей. В Slackware предполагается, что пользователь самостоятельно устанавливает все необходимые библиотеки и программы, необходимые для работы устанавливаемого пакета. Это упрощает систему, делает её более предсказуемой и снижает вероятность возникновения проблем, связанных с циклическими зависимостями или конфликтами версий. Однако это требует от пользователя более глубокого понимания структуры операционной системы и состава пакетов.
Применение
pkgtool используется в основном в дистрибутиве Slackware Linux и его производных, таких как Zenwalk, VectorLinux и Salix OS. В этих дистрибутивах pkgtool является основным (а часто и единственным) инструментом для управления пакетами. Для работы с удалёнными репозиториями и автоматического обновления системы в Slackware используется дополнительная утилита slackpkg, которая, однако, по-прежнему полагается на pkgtool для выполнения операций установки, удаления и обновления.
Критика и ограничения
Основные недостатки pkgtool связаны с его минималистичным подходом:
- Отсутствие автоматического разрешения зависимостей. Пользователь должен вручную отслеживать, какие библиотеки и программы необходимы для работы устанавливаемого пакета. Это может быть трудоёмким, особенно при установке сложного программного обеспечения.
- Отсутствие централизованного репозитория. В отличие от Debian или Fedora, Slackware не имеет единого репозитория с тысячами пакетов. Пользователи часто полагаются на сторонние репозитории (например, SlackBuilds.org) или собирают программы из исходных кодов.
- Ручное управление обновлениями. Хотя
slackpkgавтоматизирует процесс обновления, он не может гарантировать, что все зависимости будут удовлетворены, особенно при обновлении системы между версиями (например, с 14.2 на 15.0).
Несмотря на эти ограничения, pkgtool остаётся популярным среди опытных пользователей Linux, ценящих простоту, прозрачность и контроль над системой.
Интересные факты
- Название «pkgtool» является сокращением от «package tool» (инструмент для работы с пакетами).
- В Slackware существует традиция не изменять pkgtool на протяжении многих лет. Последнее значительное обновление утилиты произошло в 2005 году (Slackware 10.2), когда была добавлена поддержка сжатия XZ.
- Формат пакетов
.tgzбыл выбран из-за его простоты и универсальности. Любой пакет Slackware можно распаковать обычным архиватором, что упрощает его анализ и модификацию. - В отличие от многих других дистрибутивов, в Slackware не используется система управления версиями пакетов (например,
dpkgилиrpm). pkgtool работает напрямую с архивами.
Источники
- Slackware Linux Essentials (официальное руководство)
- Документация Slackware: man-страницы pkgtool, installpkg, removepkg, upgradepkg
- Slackware Wiki (официальная вики-документация)
- SlackBuilds.org — репозиторий скриптов сборки пакетов для Slackware
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →