YUM создан для решения следующих задач:

  • Поиск пакетов в репозиториях
  • Установка пакетов из репозиториев
  • Установка пакетов из .rpm файлов, с разрешением зависимостей с помощью репозиториев
  • Обновление системы
  • Удаление ненужных пакетов
  • Фактически, YUM представляет собой оболочку для RPM, обеспечивающую работу с репозиториями.

Запускается 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 – поиск пакетов, файлов

Для поиска используются три опции YUM – list, search, provide.

Поиск пакета по его названию выполняется с помощью опции list. Например, найти пакет packagename можно так:

# yum list packagename

Если вы не помните имя пакета полностью – можно воспользоваться подстановкой значения с помощью символа *, не забывая его заэкранировать с помощью символа обратного слеша для правильной обработки вашим командным интерпретатором (например – bash):

# yum list packagen*

Вместо * (замена любого количества символов) можно использовать знак ? – который заменяет один любой символ в поиске. Например, в имени пакета screen – 6 символов. Для поиска по первым 4-м символам введите:

# yum list scre??

screen.i686                          4.0.3-16.el6                          @base

Эти символы замены (? и *) допускаются и в большинстве остальных команд YUM.

Поиск пакета в списках по его имени  (можно неполному слову) и в его описании:

# yum search scre

screen.i686 : A screen manager that supports multiple logins on one terminal

Интересная опция – provides. Она используется для поиска пакета, содержащего указанный в поиске файл/каталог. К примеру, требуется узнать к какому пакету относится файл httpd.conf. Для этого воспользуемся такой командой:

# yum provides */httpd.conf

httpd-2.2.15-15.el6.centos.1.i686 : Apache HTTP Server
Repo        : base
Matched from:

В результате мы получаем Apache Server, который после установки будет содержать файл httpd.conf.

Другой вариант – надо найти пакет, который хранит свои файлы в каталоге /etc/httpd:

# yum provides /etc/httpd*

Установка, обновление, удаление пакетов с помощью YUM

Установка производится с помощью опции install. В процессе – YUM попробует обнаружить все зависимости и предложит их установить:

# yum install mc

Dependencies Resolved

================================================================================
Package                     Arch       Version                Repository  Size
================================================================================
Installing:
mc                          i686       1:4.7.0.2-3.el6        base       1.6 M
Installing for dependencies:
gpm-libs                    i686       1.20.6-12.el6          base        28 k
perl                        i686       4:5.10.1-127.el6       base       9.7 M
perl-Module-Pluggable       i686       1:3.90-127.el6         base        38 k
perl-Pod-Escapes            i686       1:1.04-127.el6         base        30 k
perl-Pod-Simple             i686       1:3.13-127.el6         base       210 k
perl-libs                   i686       4:5.10.1-127.el6       base       591 k
perl-version                i686       3:0.77-127.el6         base        49 k

Можно указать несколько пакетов для установки, разделяя их запятыми.

Что бы YUM не запрашивал подтверждения установки пакета и/или его зависимостей – используйте ключ -y:

# yum -y install mc

Переустановить пакет:

# yum reinstall packagename

Для установки пакета, предварительно загруженного на сервер – воспользуйтесь опцией localinstall. Например – установка пакета atop:

# yum localinstall atop-1.25-1.el5.rf.i386.rpm

Обновить установленный пакет packagename можно командой:

# yum update packagename

А обновить полностью систему – той же командой, но без указания имени пакета:

# yum update

Посмотреть список установленных пакетов, которые можно обновить:

# yum check-update

Выполнить downgrade пакета до его предыдущей версии:

# yum downgrade packagename

Для удаления пакета из системы используется опция remove (или erase – которая является алиасом remove):

# yum remove packagename

YUM и репозитории

Получить список активных репозиториев в ваших repo-файлов из каталога /etc/yum.repos.d/можно так:

# yum repolist
repo id                                                                    repo name                                                                              status
base                                                                       CentOS-6 – Base                                                                        4,776
extras                                                                     CentOS-6 – Extras                                                                         17
updates                                                                    CentOS-6 – Updates                                                                       960

А всех, в том числе неактивных – так:

# yum repolist all

repo id                                                                  repo name                                                                        status

C6.2-extras                                                              CentOS-6.2 – Extras                                                              disabled
C6.2-updates                                                             CentOS-6.2 – Updates                                                             disabled
base                                                                     CentOS-6 – Base                                                                  enabled: 4,776
c6-media                                                                 CentOS-6 – Media                                                                 disabled

debug                                                                    CentOS-6 – Debuginfo                                                             disabled
extras                                                                   CentOS-6 – Extras                                                                enabled:    17
updates                                                                  CentOS-6 – Updates                                                               enabled:   960

Ещё интересная возможность – отобразить доступные для установки (уже установленные пакеты отображаться не будут) только из определённого репозитория. Например – вывести список пакетов из репозитория base:

# yum –disablerepo “*” –enablerepo “base” list available

Что бы получить полный список, в том числе уже установленные пакеты – уберите слово available в этой команде.

Другие возможности YUM

Получить информацию об установленных пакетах можно так:

# yum info

О конкретном пакете packagename:

# yum info packagename

Если пакет уже установлен в системе – он будет отмечен как Installed Packages в описании. Если пакет доступен для установки из репозитория, но ещё не установлен – он будет отмечен как Available Packages. Например:

# yum info gcc-c++
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: ftp.colocall.net
* extras: ftp.colocall.net
* updates: ftp.colocall.net
Available Packages
Name        : gcc-c++
Arch        : i686
Version     : 4.4.6
Release     : 4.el6
Size        : 4.3 M
Repo        : base
Summary     : C++ support for GCC
URL         : http://gcc.gnu.org
License     : GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions
Description : This package adds C++ support to the GNU Compiler Collection.
: It includes support for most of the current C++ specification,
: including templates and exception handling.

Тут так же поддерживаются символы-заменители, например – вы не помните полностью имя пакета screen:

# yum info scre*

Исключить пакет из списка пакетов для обновления можно так.

Откройте для редактирования файл /etc/yum.conf, и в него добавьте строку:

exclude=

После чего через запятую укажите список пакетов, которые необходимо поддерживать в их текущей версии. Например – так:

exclude=aic94xx-firmware, b43-openfwwf

Просмотреть список зависимостей пакета:

# yum deplist packagename

Посмотреть список последних действий YUM:

# yum history
Loaded plugins: fastestmirror
ID     | Login user               | Date and time    | Action(s)      | Altered
——————————————————————————-
7 | root <root>              | 2013-03-06 15:02 | I, U           |   45
6 | root <root>              | 2013-03-06 14:59 | Install        |    1 EE
5 | root <root>              | 2013-03-06 14:58 | Install        |    1
4 | root <root>              | 2013-03-06 14:54 | Install        |    8
3 | root <root>              | 2013-03-06 14:47 | Install        |    3
2 | root <root>              | 2013-03-06 14:22 | Install        |    1
1 | System <unset>           | 2013-03-06 13:52 | Install        |  209

При проблемах с менеджером пакетов YUM

Очистить кеш:

# yum clean all

Пересоздать кеш:

# yum makecache

Другие возможности работы с RPM-пакетами

Посмотреть список установленных в системе пакетов НЕ из списка репозиториев CentOS;

# rpm -qa –qf ‘%{NAME} %{VENDOR}n’ | grep -v CentOS

Посмотреть список man-страниц для определённого пакета можно так:

# rpm -qd packagename

Посмотреть список всех установленных в системе пакетов:

# rpm -qa

Показать список всех GPG-ключей с соответствующей информацией репозитория:

# rpm -q gpg-pubkey –qf ‘%{name}-%{version}-%{release} –> %{summary}n

Посмотреть список изменений в версиях пакета:

# rpm -q –changelog packagename | less

Посмотреть список пакетов по дате их установки/обвноления (например – найти необновившиеся пакеты):

# rpm -qa –last | less

Получить список установленных ключей GPG с информацией об их репозиториях:

# rpm -q gpg-pubkey –qf ‘%{name}-%{version}-%{release} –> %{summary}n’

GNU Privacy GuardGnuPGGPG — свободная альтернатива набору криптографического ПО PGP, выпущенная под лицензией GNU General Public License. Является частью проекта GNU, получила гранты от немецкого правительства. GnuPG полностью совместим со стандартом IETF OpenPGP. Текущие версии GnuPG могут взаимодействовать с PGP и другими OpenPGP-совместимыми системами в режиме совместимости. GnuPG позволяет шифровать и подписывать данные в целях безопасного хранения и передачи информации.

Yum, шпаргалка

отображение команд и опций

#yum help


список названий пакетов из репозиторий

#yum list


список всех доступных пакетов

#yum list available


список всех установленных пакетов

#yum list installed


установлен ли указанный пакет

#yum list installed httpd


список установленных и доступных пакетов

#yum list all


список пакетов, относящихся к ядру

#yum list kernel


отображение информации о пакете

#yum info httpd


список зависимостей и необходимых пакетов

#yum deplist httpd


найти пакет, который содержит файл

#yum provides "*bin/top"


поиск пакета по имени и описанию

#yum search httpd

 

#yum search yum


получить информацию о доступных обновлениях безопасности

#yum updateinfo list security


вывести список групп

#yum grouplist


вывести описание и содержимое группы 

#yum groupinfo "Basic Web Server"


установка группы пакетов «Basic Web Server»

#yum groupinstall "Basic Web Server"


удаление группы

#yum groupremove "Basic Web Server"


Проверка на доступные обновления

#yum check-update


список подключенных репозиториев

#yum repolist


информация об определенном репозитории

#yum repoinfo epel


информация о пакетах в указанном репозитории

#yum repo-pkgs epel list


установить все пакеты из репозитория

#yum repo-pkgs reponame install


удалить пакеты установленные из репозитория

#yum repo-pkgs reponame remove


создать кэш

#yum makecache


проверить локальную базу rpm (поддерживаются параметры dependencies, duplicates, obsoletes, provides)

#yum check

 

#yum check dependencies


просмотр yum истории (вывод списка транзакций)

#yum history list


просмотр информации определенной транзакции (установленные пакеты, установленные зависимости)

#yum history info 9


отмена транзакции

#yum history undo 9


повторить

#yum history redo 9


дополнительно можно просмотреть лог

#cat /var/log/yum.log


удалить пакеты сохраненные в кэше

#yum clean packages


удалить все пакеты и метаданные

#yum clean all


установить пакет

#yum install httpd


удаление пакета

#yum remove httpd


обновить пакет

#yum update httpd


обновить все пакеты

#yum update


обновить до определенной версии

#yum update-to


установить из локальной директории (поиск/установка зависимостей будут произведены из подключенных репозиториев) 

#yum localinstall httpd.rpm


или

#yum install httpd.rpm


установить с http

#yum localinstall http://server/repo/httpd.rpm


откатиться к предыдущей версии пакета

#yum downgrade


переустановка пакета (восстановление удаленных файлов)

#yum reinstall httpd


удаление ненужных более пакетов

#yum autoremove


создание локальных репозиториев (createrepo ставится отдельно)

#createrepo


установка обновлений по расписанию (yum-cron устанавливается отдельно)

#yum-cron

Опции Yum


ответить «yes» при запросе, 

-y

 

#yum update -y


ответить «no» при запросе

--assumeno


использовать Yum без плагинов

--noplugins


или отключить определенный плагин

--disableplugin=fastestmirror


включить плагины, которые установлены, но отключены

#yum --enableplugin=ps


включить отключенный репозиторий

#yum update -y --enablerepo=epel


отключить репозиторий

#yum update -y --disablerepo=epel


скачать пакеты, но не устанавливать 
(на Centos 7 x86_64 будут скачаны в '/var/cache/yum/x86_64/7/base/packages/')

#yum install httpd --downloadonly

Cледующие команды доступны после установки пакета yum-utils


найти из какого репозитория установлен пакет

#find-repos-of-install httpd


найти процессы, пакеты которых обновлены и требуют рестарта

#needs-restarting


запрос к репозиторию, узнать зависимости пакета, не устанавливая его

#repoquery  --requires --resolve httpd


синхронизировать yum репозиторий updates в локальную директорию repo1

#reposync -p repo1 --repoid=updates


проверить локальный репозиторий на целостность

#verifytree URL


завершить транзакции

#yum-complete-transaction


установить необходимые зависимости для сборки RPM пакета

#yum-builddep


управление конфигурационными опциями и репозиториями yum 

#yum-config-manager


запрос к локальной базе yum, отображение информации о пакете 
(использованная команда, контрольная сумма, URL с которого был установлен и другое)

#yumdb info httpd


скачать rpm пакеты из репозитория

#yumdownloader


скачать src.rpm пакет из репозитория
(должен быть подключен соответствующий репозиторий, например в '/etc/yum.repos.d/CentOS-Sources.repo' в CentOS)

yumdownloader --source php

Конфигурационные файлы Yum и их расположение


Основной конфигурационный файл

/etc/yum.conf


директория, с конфигурациями (например, yum плагины)

/etc/yum/


директория, содержащая информацию о репозиториях

/etc/yum.repos.d/

Некоторые опции yum.conf:


Директория, где yum хранит кэш и файлы базы (по умолчанию '/var/cache/yum')

cachedir=/var/cache/yum/$basearch/$releasever


Определяет должен или нет Yum хранить кэш заголовков и пакетов после успешной установки. Значения: 0 или 1. (по умолчанию 1)

keepcache=1


уровень вывода отладочных сообщений. Значения: 1-10 (по умолчанию 2)

debuglevel=2


лог файл (по умолчанию '/var/log/yum.log')

logfile=/var/log/yum.log


обновлять устаревшие пакеты

obsoletes=1


проверка подписи пакетов. Значения: 0 или 1 (по умолчанию 1)

gpgcheck=1


включение плагинов. Значения: 0 или 1 (по умолчанию 1)

plugins=1

 

Некоторые полезные плагины


Добавляет опцию командной строки для просмотра ченжлога перед/после обновлениями

yum-plugin-changelog


выбирает более быстрые репозитории из списка зеркал

yum-plugin-fastestmirror


добавляет команды keys, keys-info, keys-data, keys-remove, которые позволяют работать с ключами. 

yum-plugin-keys


блокировать указанные пакеты от обновления, команда yum versionlock

yum-plugin-versionlock


добавление команд yum verify-all, verify-multilib, verify-rpm для проверки контрольных сумм пакетов

yum-plugin-verify


Работа Yum через прокси сервер


Для всех пользователей: 
добавить в секцию [main] в /etc/yum.conf

proxy="http://server:3128"


при необходимости указать пароль, добавить

proxy_proxy_username=user
proxy_password=pass


указать прокси для отдельного пользователя 

#export http_proxy="http://server:3128"

Буду рад любым дополнениям и замечаниям.
Дополнительно читайте:

#man yum
#man rpm