Ныне этот недостаток постепенно исправляется. Надеюсь, что со временем, совместными усилиями русскоязычного сообщества пользователей Zenwalk, пробелы в источниках информации по этому дистрибутиву будут ликвидированы. И это позволит ответить на вопрос, вынесенный в заголовок настоящей статьи.
Управление rpm-пакетами: нынче не то, что давеча
LinuxFormat, #125 (декабрь 2009)
Многие, чьё знакомство с Red Hat и его клонами пришлось на 90-е годы, надолго сохранили предубеждение и против формата их пакетов, и против утилиты управления оными. Конечно, дать команду rpm -ihv – проще, нежели собрать нужный пакет из исходников. Однако, в сравнении с портами FreeBSD, с одной стороны, и с Debian'овским APT'ом – с другой, она приобретала вид вполне бледный.
Но всё течёт, всё меняется – и ныне rpm-based дистрибутивы располагают развитыми системами пакетного менеджмента, работающими как в текстовом, так и в графическом режиме. В настоящей заметке мы остановимся на двух из них – yum и PackageKit на примере использования в дистрибутиве Fedora.
Yum – система управления rpm-пакетами и их репозиториями, предлагающая автоматическую установку, обновление и удаление пакетов и пакетных групп с автоматическим контролем зависимостей. По механизму действия и функциональности она сходна с системой APT, разработанной для Debian. Однако если последний получил в последние годы широкую известность – не в последнюю очередь благодаря популярности Ubuntu, а также тому, что усилиями сначала Connectiva, а затем Altlinux широко распространился за пределами родного дистрибутива, – то yum остаётся малоизвестным. Однако yum, с одной стороны, по своим возможностям управления rpm-пакетами ничуть не уступает утилитам семейства apt для deb-пакетов, а с другой, используется достаточно широко: эта система принята в качестве основной в Fedora, RHEL и их прямых и косвенных потомках.
Аббревиатура yum интерпретируется как Yellow dog Updater, Modified, то есть Обновитель Yellow dog Модифицированный. Однако его связь с одноимённым дистрибутивом – портом Red Hat на архитектуру Power, не совсем прямая. Его пакетный менеджер, именовавшийся YUP, послужил основой для Сета Видала (Seth Vidal), при написании yum для дистрибутива Red Hat. Символично и дословное его значение (yum – по английски конфетка) – его можно трактовать так, что эта система в состоянии сделать конфетку даже из такого… не самого приятного продукта, как пакеты в формате RPM. Yum быстро получил признание среди ряда клонов Red Hat, в частности, был принят в качестве штатного менеджера пакетов в ASPLinux. Однако в самом Red Hat он долго конкурировал с apt-rpm, и развитие yum’а одно время только силами команды ASPLinux и осуществлялось. Однако в конце концов он утвердился в RHEL и его клонах (CentOS, Scientific Linux), в Fedora и в Yellow Dog.
Система yum включает в себя собственно одноимённую утилиту, набор дополнительных утилит (yum-utils) и многочисленные плагины, в виде самостоятельных пакетов расширяющие функциональность главной программы.
Запускается yum одноимённой командой, требующей указания субкоманды (возможно, с опциями последней), и, в ряде случаев, аргументов в виде имени пакета или группы пакетов, что в общей форме выглядит так:
$ yum subcommand [arguments] —[options]
Команда yum без указания субкоманды выведёт краткую справку касаемо последних и их опций. Аналогичный результат будет получен посредством субкоманды
$ yum help
А указание имени субкоманды в качестве аргумента, например, так
$ yum help install
выведет краткие сведения о её назначении.
Субкоманды yum’а определяют одно из действий, которое команда должна выполнить – установку или удаление пакета, вывод информации о нём, поиск пакетов и так далее. Обычно назначение субкоманды легко угадывается из её названия и (или) краткой характеристики в выводе help’а.
Все субкоманды yum можно разделить на две группы. Первая связана с поиском пакетов и получением информации о них, вторая – с манипуляциями пакетами и группами. В составы первой группы наиболее употребимы:
• search [string] – поиск пакета по имени или его фрагменту;
• list – вывод списка пакетов, всех (all или без указания фильтра), установленных (installed) или доступных (available);
• info pkgname – вывод полной информации о пакете.
Все субкоманды первой группы могут исполняться от лица обычного пользователя. Во второй группе субкоманд наиболее важны:
• install pkgname1 ... pkgname# – установка из репозиториев единичного пакета или нескольких пакетов, имена которых даны (в краткой форме) в качестве аргумента, вместе со всеми их зависимостями;
• localinstall path2/fullname.rpm – установка пакета из локально хранящегося файла; зависимости его извлекаются из репозиториев, если таковые доступны;
• update [pkgname] – обновление пакета, указанного в качестве аргумента; в отсутствие аргумента выполняется тотальное обновление системы, аналогично сумме apt-get update и apt-get upgrade;
• erase pkgname – удаление пакета вместе со всем, что от него зависит; пакеты, от которых зависит удаляемый, остаются в неприкосновенности, даже если они никем не используются.
Все субкоманды второй группы для своего исполнения требуют прав администратора. Отдельно надо сказать о субкоманде shell – она запускает собственную интерактивную командную оболочку yum’а, в сеансе которой можно оперировать уже просто его субкомандами, аргументами и опциями, пуская главную команду yum.
Рис. 1. Yum с его интерактивной оболочкой
Исполнение любой субкоманды начинается с синхронизации локальной базы пакетов с базами репозиториев. Затем происходит проверка зависимостей – и по её результатам выводится итог: сколько пакетов, включая зависимости, должно быть установлено, обновлено или удалено, их имена, подлежащий скачиванию объем информации. И запрашивается подтверждением на выполнение операции. Опции yum довольно многочисленны, привязаны как к главной команде, так и к отдельным субкомандам. Исчерпывающую справку о них можно получить через
$ man (8) yum
В состав пакета yum-utils входит серия утилит, запускаемых как самостоятельные команды, со своими опциями. Полный их список можно получить из
$ man yum-utils
Важнейшей из этих команд является package-cleanup, предназначенная для получения сведений о непорядках в локальной базе данных пакетов и их устранения. Она имеет несколько опций. Например,
$ package-cleanup —problems
выведет список нарушенных зависимостей, а с помощью команды
$ package-cleanup —leaves
можно вывести список пакетов, от которых не зависят никакие другие компоненты.
Плагины, в отличие от утилит, не запускаются как самостоятельные команды, а встраиваются по умолчанию в команду yum, добавляя ей новые функции. По умолчанию в RFRemix устанавливаются следующие плагины:
• fastestmirror – проверка скорости доступа к зеркалам репозитория и выбор самого быстрого из них, выполняется при каждом запуске команды yum;
• presto – при обновлении пакетов скачивает из репозиториев только дельты изменений (deltarpms), минимизируя таким образом трафик;
• refresh-packagekit – обеспечивает обновление системы PackageKit, о которой будет говориться в следующей заметке.
Эффективное использование yum требует некоторых мероприятий по настройке, включающих:
• настройку собственно yum;
• подключение и настройку плагинов;
• подключение дополнительных репозиториев.
За настройки собственно yum отвечает файл /etc/yum.conf – он содержит общие параметры для этой утилиты в формате:
название=значение
Значение может быть булевым (0 – запрещено, 1 – разрешено), численным – от 1 и до... разумного предела (значение 0 равносильно отключению) или символьным – например, путь к каталогу или список пакетов; в последнем случае значения разделяются пробелами. По умолчанию yum.conf выглядит так:
• cachedir=/var/cache/yum – каталог для кэширования метаданных репозиториев и пакетов, скачиваемых в ходе установки ;
• keepcache=0 – определяет, сохранять ли скачанные пакеты в локальном кэше или удалять их после успешной установки;
• debuglevel=2 – уровень отладочных сообщений;
• logfile=/var/log/yum.log – каталог для файлов протоколирования действий yum;
• exactarch=1 – значение по умолчанию предписывает устанавливать пакеты, точно соответствующие архитектуре;
• obsoletes=1 – определяет логику замены «устаревших» пакетов при тотальном обновлении;
• gpgcheck=1 – включение этой опции обязывает к проверке подписей при установке;
• plugins=1 – использовать или нет плагины к yum’у;
• installonly_limit=3 – максимальное количество пакетов, запрещённых к обновлению (можно только устанавливать параллельно более новую версию).
Кроме перечисленных, существует ещё немало параметров настройки yum. Так, очевидно, что опция installonly_limit имеет смысл только при наличии списка запрещённых к обновлению пакетов. Он задаётся параметром