Открыть сервис

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 →