Yum: введение и базовые средства

Алексей Федорчук

Yum — система управления rpm-пакетами и их репозиториями, предлагающая автоматическую установку, обновление и удаление пакетов и пакетных групп с автоматическим контролем зависимостей. По механизму действия и функциональности она сходна с системой APT, разработанной для Debian. Однако, в отличие от последней, за пределами rpm-based дистрибутивов, насколько мне известно, не используется.

Аббревиатура yum интерпретируется как Yellow dog Updater, Modified, то есть Обновитель Yellow dog Модифицированный. Что заставляет предполагать его связь с одноимённым дистрибутивом — портом (см. о клонах, портах etc.) Red Hat на архитектуру Power. Связь действительно есть, хотя и не совсем прямая. В Yellow dog использовался свой пакетный менеджер, именовавшийся YUP, написанный Брайаном Стиллвелом (Bryan Stillwell) сотоварищи. Он был взять за основу и практически полностью переписан Сетом Видалом (Seth Vidal), сотрудником Университета Дюка, для дистрибутива Red Hat, который использовался там на физическом факультете. Новый продукт и получил имя yum.

Символично и дословное значение имени программы (yum — по английски конфета). Злые языки могут трактовать его в том смысле, что эта система в состоянии сделать конфетку даже из такого… не самого совершешнного продукта, как пакеты в формате RPM. Впрочем, как выясняется, последний не столь уж и плох, как кажется по началу (этому вопросу я собираюсь посвятить специальную заметку). Что же, посредством yum он становится ещё лучше.

Yum быстро получил признание среди ряда клонов Red Hat, в частности, он был принят в качестве штатного менеджера пакетов в ASPLinux. Однако в самом Red Hat он долго конкурировал с apt-rpm, и развитие yum‘а одно время только силами команды ASPLinux и осуществлялось. Однако в конце концов он утвердился в RHEL и его клонах, в Fedora и в Yellow Dog.

В настоящее время Сет Видал, ныне — сотрудник Red Hat, вместе с группой товарищей (список разработчиков приведён в файле AUTHORS внутри пакета, там же перечислены и разработчики исходного YUP’а). Официальный сайт проекта, ранее живший на сервере Университете Дюка, — yum.baseurl.org/. На нём находятся исходники собственно пакета yum и сопутствующих компонентов (yum-utils, yum-metadata-parser), как стабильных, так и разрабатываемых, и кое-какая документация, впрочем, не очень обильная и систематизированная. Справочные сведения о yum, как обычно, можно почерпнуть из экранной документации — man yum или man info.

Система yum включает в себя собственно одноимённую утилиту, набор дополнительных утилит (yum-utils) и многочисленные плагины, образующие самостоятельные пакеты и расширяющие функциональность главной программы.

Запускается yum одноимённой командой, требующей указания субкоманды (возможно, с опциями последней), и, в ряде случаев, аргументов в виде имени пакета или группы пакетов, что в общей форме выглядит так:

$ yum subcommand [arguments] --[options]

Команда yum без указания субкоманды выведёт краткую справку касаемо последних и их опций. Аналогичный результат будет получен посредством субкоманды

$ yum help
Loaded plugins: fastestmirror, presto, refresh-packagekit
Usage: yum [options] COMMAND

List of Commands:

check-update   Check for available package updates
...
Options:
  -h, --help            show this help message and exit
  ...
    Plugin Options:
  ...

А указание имени субкоманды в качестве аргумента в этой строке выведет краткие сведения о её назначении, например:

$ yum help install
Loaded plugins: fastestmirror, presto, refresh-packagekit
install PACKAGE...

Install a package or packages on your system

Субкоманды yum‘а определяют одно из действий, которое команда должна выполнить — установку или удаление пакета, вывод информации о нём, поиск пакетов и так далее. Обычно назначение субкоманды легко угадывается из её названия и (или) краткой характеристики в выводе help’а.

Все субкоманды yum можно разделить на две группы. Первая связана с поиском пакетов и получением информации о них, вторая — с манипуляциями пакетами и группами.

В состав первой группы входят такие

  • search [string] — поиск пакета по имени или его фрагменту;
  • list — вывод списка пакетов, всех (all или без указания фильтра), установленных (installed) или доступных (available);
  • repolist — вывод списка подключённых репозиториев;
  • resolvedep [shortname] — вывод полного имени пакета, с указанием номера версии, сборки и т.д., по его краткому имени;
  • provides filename — поиск пакета, содержащего указанный файл;
  • info pkgname — вывод полной информации о пакете;
  • deplist pkgname — вывод списка зависимостей указанного пакета;
  • grouplist — вывод списка групп, разелённого на установленные и доступные;
  • groupinfo "Group name" — вывод списка пкаетов, входящих в указанную группу, имя которой даётся в соответствие с выводом субкоманды grouplist и экранируется кавычками;
  • check-update — вывод списка пакетов, для которых в данный момент доступны обновления.

Все субкоманды первой группы могут исполняться от лица обычного пользователя. Если же дать их от имени администратора, исполнение начнётся с синхронизации локальной базы пакетов с таковыми подключённых репозиториев, что может занять значительное время.

В группу субкоманд, связанных с манипуляцией пакетами, входят:

  • install pkgname1 ... pkgname# — установка из репозиториев единичного пакета или нескольких пакетов, имена которых даны (в краткой форме) в качестве аргумента, вместе со всеми их зависимостями;
  • localinstall path2/fullname.rpm — установка пакета из локально хранящегося файла; зависимости его извлекаются из репозиториев, если таковые доступны;
  • update [pkgname] — обновление пакета, указанного в качестве аргумента; в отсутствие аргумента выполняется тотальное обновление системы, аналогично сумме apt-get update и apt-get upgrade;
  • upgrade — тотальное обновление системы при смене версии дистрибутива, подобно apt-get distupgrade;
  • reinstall — переустановка ранее инсталлированного пакета, например, безнадёжно испорченного;
  • groupinstall "Group name" — установка группы пакетов, аргумент указывается аналогично субкоманде groupinfo;
  • downgrade pkgname — «откат» пакета, заданного в качестве аргумента, на предыдущую версию из числа сохраняющихся в репозитории;
  • erase pkgname — удаление пакета вместе со всем, что от него зависит; пакеты, от которых зависит удаляемый, остаются в неприкосновенности, даже если они никем не используются;
  • groupremove «Group name» — удаление группы пакетов, аргумент указывается аналогично субкоманде groupinfo;
  • makecache — запись метаданных репозиториев в локальный кэш;
  • clean — очистка локального кэша.

Все субкоманды второй группы для своего исполнения требуют прав администратора. И начинается их исполнение с синхронизации локальной базы пакетов с базами репозиториев. Затем происходит проверка зависимостей — и по её результатам выводится итог: сколько пакетов, включая зависимости, должно быть установлено, обновлено или удалено, их имена, подлежащий скачиванию объем информации. И запрашивается подтверждение на выполнение операции. Так что при ошибке вполне можно отказаться от её выполнения — это особенно актуально при удалении программ и особенно групп, когда удаление поддержки, скажем, зулусского языка может снести весь OpenOffice.org и изрядную часть шрифтов.

Опции yum довольно многочисленны, привязаны как к главной команде, так и к отдельным субкомандам. И мы их будем рассматривать по ходу дела, когда перейдём к примерам практического использования нашего менеджера пакетов.

Пока же упомяну только одну из опций, --skip-broken — она может понадобиться при первом же обновлении системы, не важно, через yum или PackageKit, о котором говорилось в предыдущей заметке. Поскольку, как показывает практика, вероятность ошибки при обновлении очень не равна нулю, особенно если не ограничиваться рекомендуемыми gpk-update-viewer обновлениями безопасности. И ошибка эта, скорее всего, окажется связанной с нарушениями зависимостей обновляемых пакетов.

И в этом случае команда

# yum update --skip-broken

спасёт всех родственников русской демократии, пропустив обновление пакетов с нарушенными зависимостями.

Отдельно надо сказать о субкоманде shell — она запускает собственную интерактивную командную оболочку yum’а, в сеансе которой можно оперировать уже просто его субкомандами, аргументами и опциями. Опуская главную команду yum. Впрочем, с учётом того, что в yum shell не работают автодополнения, выигрыш от этого сомнителен.

Сказанного, думаю, достаточно, чтобы начать практическую работу с yum. Чем мы и займёмся в следующей серии.

Добавить комментарий