|
Bog BOS: yum - автоматическая установка, обновление и удаление пакетов rpm
|
Последнее изменение файла: 2015.03.27
Скопировано с www.bog.pp.ru: 2024.11.03
Bog BOS: yum - автоматическая установка, обновление и удаление пакетов rpm
yum (Yellowdog Updater, Modified;
версия 2.4.3 в CentOS 4.5; версия 3.0.5 в RHEL5; версия 3.2.2 в FC6; версия 3.2.8 в Fedora 8)
- инструмент автоматической установки, обновления и удаления пакетов для
дистрибутивов Linux,
основанных на RPM с использованием специально подготовленного
репозитария пакетов.
Основным преимуществом перед "ручной" работой с пакетами является автоматическое
разрешение зависимостей устанавливаемых или обновляемых пакетов с добавлением
дополнительно требуемых пакетов в список. Аналогично, при удалении пакета
в список для предстоящего удаления добавляются все зависимые от него пакеты.
Для дистрибутивов, основанных на пакетах в формате deb, в аналогичных целях используется apt.
Для работы yum требуется специальным образом подготовленный
репозитарий (хранилище) пакетов, обслуживающий этот репозитарий сервер и клиентская программа yum.
Перед каждой операцией клиент yum извлекает с сервера описание репозитария,
затем с сервера извлекаются заголовки затребованных пакетов и зависимых от них,
после чего клиент определяет какие дополнительные пакеты необходимо установить
(обновить, удалить), извлекает их заголовки и т.д. пока все зависимости не будут разрешены.
При обновлении пакета может потребоваться добавление или замена пакета.
Некоторые пакеты (например, ядро) можно только добавлять, но нельзя заменять,
чтобы не оказаться в ситуации, когда невозможно будет загрузиться.
Репозитарий может содержать несколько версий пакета,
в этом случае по умолчанию выбирается самая свежая.
Клиент может одновременно использовать сразу несколько локальных или удалённых репозитариев.
При использовании несовместимых репозитариев может оказаться, что обновление невозможно
(пакеты из разных репозитариев требуют несовместимых версий одной и той же библиотеки).
Для экономии сетевого трафика описание репозитария, заголовки и
сами пакеты могут кешироваться в файловой системе клиента.
В качестве сервера репозитария можно использовать
обычный FTP или HTTP сервер.
Также файлы могут быть расположены в локальной файловой системе,
сетевой файловой системе (NFS, CIFS) или сменном носителе (CD-ROM, DVD-ROM).
Для сетевой установки также можно воспользоваться локальным репозитарием
базовой системы и загрузчиком PXE, что позволяет обойтись
без установочных дисков.
Современные дистрибутивы
(начиная с Fedora Core 3,
CentOS 3) поставляются с yum,
уже настроенным на репозитарий (репозитарии) изготовителя.
В частности, установочный DVD-ROM дистрибутива содержит один из таких репозитариев (base).
Зачастую требуется также подключение к дополнительным репозитариям,
содержащим пакеты, которые коммерческий поставщик дистрибутива не может
включить в свой репозитарий (защищённые патентами кодеки, драйверы в двоичном виде и др.).
Начиная с Fedora Core 6 установщик anaconda
позволяет подключать дополнительные репозитарии ещё до начала установки.
Список репозитариев изготовителя и дополнительных репозитариев отличается от версии к версии
и описан в соответствующих разделах.
В крайнем случае можно самостоятельно установить клиента yum
из rpm-пакета с сайта разработчиков. Осторожно: версии различаются в зависимости от текущей
версии RPM и python!
В нормальном репозитарии все пакеты
защищены цифровой подписью производителя,
которую yum может проверять перед установкой (задаётся настройками клиента).
Если предстоит устанавливать и обновлять множество компьютеров в локальной сети,
то рекомендуется сделать локальные копии соответствующих репозитариев и поднять
обслуживающий их сервер.
Таким образом, общая процедура настройки репозитария и клиентов
для каждой версии дистрибутива состоит из следующих шагов:
- настройка локального репозитария:
- настройка FTP/HTTP сервера для доступа клиентов (метод, адрес, URL)
- получение списка необходимых репозитариев (поставщика и дополнительных)
- решение о том, для каких репозитариев необходимо делать локальные копии
- выбор способа начального наполнения локальной копии и наполнение
- выбор способа синхронизации обновляемых репозитариев
(как, откуда, как часто, когда) и запуск процедуры синхронизации
- настройка клиентов:
- настройка клиента yum: /etc/yum.conf и /etc/yum.repos.d/
- процедура извещения об имеющихся обновлениях - метод, периодичность
- выработка организационной процедуры одобрения применения обновлений
- инструкция по установке обновлений
В большой организации целесообразно создать локальные копии всех
используемых репозитариев, причём организовать единый сервер для их обслуживания.
Я поднимаю для этих целей сервер FTP на vsftpd,
настроенный на обслуживание исключительно анонимных клиентов.
Имя сервера для настройки клиентов - ftp.company.ru.
Локальные копии репозитариев для каждой версии дистрибутива размещаются в отдельном подкаталоге
внутри каталога /pub/mirror, например, "/pub/mirror/CentOS4.6".
Причём каждый репозитарий размещается в соответствующем подкаталоге,
например: "/pub/mirror/CentOS4.6/base_i386" или "/pub/mirror/CentOS4.6/updates/x86_64".
Список репозитариев определяется версией дистрибутива и описан для каждого случая
в отдельных главах (White Box Linux 3.0,
Red Hat 9, CentOS 3.4,
Fedora Core 3, Fedora Core 4, CentOS 4, Fedora Core 6, CentOS 5).
Неизменяемые базовые репозитарии можно либо скопировать с сайта изготовителя,
либо создать из ISO-образов установочных дисков, т.к. их всё равно придётся копировать.
В последнем случае, в соответствующий каталог полностью копируется содержимое всех
установочных дисков для данной архитектуры. Начиная с Fedora Core 5 (?)
репозитарий на установочных дисках стал иметь в описании "лишние" строки вида
"xml:base=\"media", которые необходимо верезать:
(подсмотрено здесь):
- разархивировать и скопировать (gzip -d primary.xml.gz; cp primary.xml primary.xml.orig
- убрать все строчки xml:base=\"media:
awk '{if(substr($2,0,16)=="xml:base=\"media:") print $1, $3; else print;}'
< primary.xml.orig > primary.xml
- сжать primary.xml
- посчитать контрольную сумму: sha1sum primary.xml.gz
- вписать её в repomd.xml
Если метаинформация репозитария утеряна или неприменима, то можно создать
её заново с помощью yum-arch (yum версии 1)
или createrepo (yum версии 2).
Регулярно обновляемые репозитарии необходимо синхронизовать
с первоисточником. В качестве средства синхронизации я использую mirror
(но можно использовать любой другой инструмент), который запускается ежедневно по ночам
для обновления всех репозитариев, антивирусных баз и т.д..
Описание пакета для mirror на примере CentOS5.1 для архитектур i386 и x86_64:
# Centos5.1 updates i386
package=linux-CentOS5.1-updates-i386
local_dir+CentOS5.1/updates/i386
site=mirror.yandex.ru
remote_dir=/centos/5.1/updates/i386
recurse_hard=true
compress_excl=.*
exclude_patt=alpha|alphaev6|sparc|ia64|s390|ls-lR|HEADER\.html|HEADER\.images|openoffice.org-core-2.0.4-5.4.17.1
max_delete_files=90%
max_delete_dirs=90%
exclude_patt+|\.nfs
# Centos5.1 updates x86_64
package=linux-CentOS5.1-updates-x86_64
local_dir+CentOS5.1/updates/x86_64
site=mirror.yandex.ru
remote_dir=/centos/5.1/updates/x86_64
recurse_hard=true
compress_excl=.*
exclude_patt=alpha|alphaev6|sparc|ia64|s390|ls-lR|HEADER\.html|HEADER\.images|openoffice.org-core-2.0.4-5.4.17.1
max_delete_files=90%
max_delete_dirs=90%
exclude_patt+|\.nfs
# Centos5.1 extras
package=linux-CentOS5.1-extras
local_dir+CentOS5.1/extras
site=mirror.yandex.ru
remote_dir=/centos/5.1/extras
recurse_hard=true
compress_excl=.*
exclude_patt=alpha|alphaev6|sparc|ia64|s390|ls-lR|HEADER\.html|HEADER\.images
max_delete_files=90%
max_delete_dirs=90%
exclude_patt+|\.nfs
# Centos5.1 addons (packages used/produced in the build but not released)
package=linux-CentOS5.1-addons
local_dir+CentOS5.1/addons
site=mirror.yandex.ru
remote_dir=/centos/5.1/addons
recurse_hard=true
compress_excl=.*
exclude_patt=alpha|alphaev6|sparc|ia64|s390|ls-lR|HEADER\.
max_delete_files=90%
max_delete_dirs=90%
exclude_patt+|\.nfs
В репозитарии yum версии 1 заголовок каждого пакета лежит в отдельном файле
в подкаталоге с именем headers в каталоге, содержащем пакеты для определённой архитектуры.
Имя файла образуется из имени пакета, заменой строки ".rpm" на ".hdr".
Содержимое представляет собой двоичный файл, сжатый gzip.
Также создаётся файл headers/header.info, который содержит по одной строке на каждый пакет.
Утилита yum-arch (скрипт на python) осуществляет рекурсивный обход
указанного в качестве параметра каталога,
вырезает заголовки всех пакетов и складывает их в подкаталог
headers (создавая его, если это необходимо). Ключи (указывать отдельно):
- -v (большая болтливость, можно ещё -vv)
- -q (меньшая болтливость)
- -s (обрабатывать также пакеты .src; только в версии 2; несовместим с ключом -d)
- -n ("холостой" запуск, работает ли?)
- -d (проверить зависимости и конфликты; рекомендуется)
- -c (проверить md5 и gpg, несовместим с ключом -n, до первой ошибки)
- -l (отслеживать символьные ссылки)
- -x (шаблоны исключений)
В версии yum 2.1 вместо подкаталога "headers" с заголовками для каждого пакета
в двоичном формате (может присутствовать для совместимости) используется каталог
repodata, который содержит файлы
в XML формате,
общем (предположительно) для yum и apt, и sqlite (в версии yum 3):
- repomd.xml содержит информацию об остальных файлах: имена, времена,
контрольные суммы, версии формата
- primary.xml[.gz] (тип primary) содержит основную информацию о пакетах
(имя, архитектура, версия, релиз,
контрольная сумма, описание, ссылка на разработчика, время сборки, время упаковки,
размер пакета и занимаемого после установки места, имя файла, формат, лицензия,
поставщик, группа, сборщик, имя исходного пакета, что пакет требует и что обеспечивает)
и некоторых файлах, используемых в зависимостях других пакетов
- primary.sqlite.bz2 (тип primary_db) - в формате sqlite
- filelists.xml.[gz] содержит список файлов, входящих в пакет
- filelists.sqlite.bz2 (тип filelists_db) - в формате sqlite
- other.xml.[gz] (тип other) содержит ChangeLog для пакетов в формате XML
- other.sqlite.bz2 (тип other_db) - в формате sqlite
- comps[-f8].xml (тип group) содержит описание групп пакетов: имя группы, назначение группы
(на всех языках), описание (на всех языках), устанавливать ли группу по умолчанию,
показывать ли группу при установке,
список пакетов и при каких условиях устанавливать каждый пакет
- updateinfo.xml.gz (тип updateinfo) - информация о каждом изменении
(кто внёс, статус (stable), тип (безопасность, исправление ошибок, добавление функций),
версия, имя, ссылка на описание (идентификатор), для какого дистрибутива,
время выпуска, описание причины выпуска, откуда можно скачать
Создание директории repodata производится
утилитой createrepo (пакет createrepo-0.4.10-1.fc6), которой
необходимо указать имя каталога с пакетами и ключи:
- -q (меньшая болтливость)
- -v (большая болтливость)
- -o имя-каталога (куда записывать результат)
- -x шаблон (шаблоны исключений имён файлов,
можно указывать несколько раз)
- -g имя-файла (файл с описанием группы; где его взять?)
- -p (создавать "красивые" xml файлы)
- -s sha | md5 (тип контрольной суммы)
- -u URL (base url, добавляется строка "xml:base=")
- -c имя-каталога (можно кешировать контрольные суммы между запусками createrepo)
- --update (если пакет не изменялся, то не пересчитывать метаданные)
- --split (позволяет создавать репозитарий из нескольких носителей)
- --database (создавать БД в формате sqlite для ускорения работы yum)
Клиентская часть yum настраивается с помощью файла
/etc/yum.conf. В новых версиях yum данный файл содержит только
общие параметры, параметры отдельных репозитариев располагаются в
/etc/yum.repos.d/*.repo (задаётся параметром reposdir).
Файл делится на секции, каждая секция начинается с
идентификатора репозитария в квадратных скобках. Пустые строки игнорируются.
Допускаются включения (в т.ч. вложенные) в виде: include=URL.
Каждый параметр определяется на отдельной строке в формате
имя=значение
Общие параметры описываются в секции "[main]" (при описании указывается
значение по молчанию и номер версии, в которой опция появилась):
- cachedir (/var/cache/yum; директория для кеширования метаданных и заголовков)
- persistdir (/var/lib/yum; версия 3; здесь сохраняются данные между запусками)
- keepcache (1; использовать кеширование)
- reposdir (/etc/yum.repos.d; версия 2.1;
список каталогов через запятую, содержащих описания отдельных
репозитариев в файлах имя-репозитария.repo)
- debuglevel (2; от 0 до 10)
- errorlevel (2; от 0 до 10)
- logfile (/var/log/yum.log)
- gpgcheck (0; 0 или 1; проверять ли GPG подписи пакетов)
- assumeyes (0; не спрашивать подтверждения, -y)
- alwaysprompt (1; спрашивать подтверждения даже, если список пакетов не обновлялся)
- tolerant (0; "прощать" пользователю yum некоторые ошибки, -t)
- exclude (; список пакетов через пробел, которые не надо устанавливать и обновлять,
можно использовать символы шаблонов * и ?)
- exactarch (1; было 0; строгое соблюдение целевой архитектуры пакета при обновлении)
- installonlypkgs (kernel, kernel-smp, kernel-bigmem, kernel-enterprise,
kernel-debug, kernel-unsupported;
список пакетов, которые нельзя обновлять, а можно только устанавливать
новые версии в дополнение к старым)
- installonly_limit (2; не хранить больше указанного числа пакетов типа installonly)
- kernelpkgnames (список имён пакетов, которые являются ядром;
удалён в версии 2.1)
- showdupesfromrepos (0; версия 2.1;
показывать только новые версии пакетов или все)
- obsoletes (версия 2.1; --obsoletes;
управляет логикой удаления пакетов, признанных
"устаревшими" при смене версии дистрибутива)
- overwrite_groups (0 или 1; версия 2.1; что делать, если в двух репозитариях
предлагаются группы пакетов с одинаковым именем: брать описание
из последнего репозитария или сливать описания)
- enable_group_conditionals (1; можно ли использовать условные пакеты)
- group_package_types (default, mandatory; версия 3; список из optional, default, mandatory;
определяет какого типа пакеты будут установлены при выполнении groupinstall)
- installroot (версия 2.1; корень файловой системы для установки;
--installroot)
- distroverpkg (redhat-release; пакет, по которому определяется версия дистрибутива;
например, whitebox-release, fedora-release)
- diskspacecheck (1)
- tsflag (; список флагов для передачи команде rpm: noscripts, notriggers, nodocs, test, repackage)
- recent (7; версия 2.1; число дней для list recent)
- retries (6; 0 - это бесконечность)
- keepalive (1; версия 2.1; использовать HTTP/1.1 keepalive)
- timeout (30; число секунд)
- http_caching (all; инструкция для прокси: all (кешировать всё), packages (только пакеты),
none)
- proxy (полный URL, включая номер порта; можно использовать переменную
окружения http_proxy; версия 2.2.2)
- proxy_username
- proxy_password
- throttle (0; ограничение трафика при загрузке пакетов в байтах/секунду -
5.5k, 2M и т.д. - или в процентах от bandwidth)
- bandwidth (0; пропускная способность интерфейса для throttle)
- pkgpolicy (newest; newest - устанавливать самую свежую версию пакета,
last - устанавливать пакет с последнего по алфавиту репозитария;
опция удалена в версии 2)
- commands (; команда yum по умолчанию, если не указано явно;
в любом случае командная строка не может быть пустой)
- plugins (0; разрешить подключаемые модули)
- pluginpath (/usr/share/yum-plugins, /usr/lib/yum-plugins)
- pluginconfpath (/etc/yum/pluginconf.d)
- metadata_expire (не проверять наличие обновлённых метаданных указанное число секунд)
- mirrorlist_expire (не проверять обновление списка зеркал)
Параметры отдельных репозитариев:
- repositoryid (версия 2.1; уникальное имя репозитария в квадратных скобках в качестве имени секции)
- name (описательное имя репозитария)
- baseurl (список альтернативных URL (http/ftp/file, базовая аутентификация)
репозитария через пробел и/или nl;
в ней д.б. "поддиректория" headers для версии 1 или repodata для версии 2;
только один оператор на репозитарий!)
- mirrorlist (URL файла, содержащего список baseurl)
- enabled (версия 2.1; установить в 0 вместо комментирования)
- gpgcheck (0 или 1 в зависимости от установки в [main]; проверять ли GPG подписи пакетов)
- gpgkey (; список URL открытого GPG ключа в текстовом формате; необходим,
если ключ не импортирован в БД rpm)
- exclude (; список пакетов через пробел, которые не надо устанавливать,
можно использовать символы шаблонов * и ? и переменные)
- includepkgs (; работать только с пакетами из этого списка;
можно использовать символы шаблонов * и ? и переменные)
- enablegroups (1; версия 2.1; можно использовать группы пакетов)
- failovermethod (roundrobin; roundrobin (перебор в случайном порядке)
или priority (последовательный перебор))
- keepalive (1; версия 2.1; использовать HTTP/1.1 keepalive)
- timeout (30; число секунд)
- http_caching (all; инструкция для прокси: all (кешировать всё), packages (только пакеты),
none)
- retries (6; 0 - это бесконечность)
- throttle (0; ограничение трафика при загрузке пакетов в байтах/секунду -
5.5k, 2M и т.д. - или в процентах от bandwidth)
- bandwidth (0; пропускная способность интерфейса для throttle)
- metadata_expire (не проверять наличие обновлённых метаданных указанное число секунд)
- mirrorlist_expire (не проверять обновление списка зеркал)
- proxy (полный URL, включая номер порта; можно использовать переменную
окружения http_proxy; версия 2.2.2; _none_ для отключения глобального параметра)
- proxy_username
- proxy_password
- cost (1000; "стоимость" обращения к репозитарию, позволяет ранжировать репозитарии)
Внутри значений параметров name, baseurl и commands
можно использовать значения переменных:
- $releasever (значение извлекается из пакета, указанного в distroverpkg)
- $arch ("uname -p" или os.uname()[4])
- $basearch (uname -i)
- от $YUM0 до $YUM9 (значения берутся из переменных окружения)
Использование yum (для заполнения кэша требуются права root):
yum [ключи] команда [список-имён-пакетов-через-пробел-или-опция]
Команды yum (шаблоны имён пакетов в стиле glob;
можно указывать архитектуру (после точки), версию и релиз -
name-epoch:ver-rel.arch):
- install шаблон ...
(установить самые свежие версии указанных пакетов с разрешением
зависимостей; можно использовать шаблоны в именах пакетов,
автоматически находятся все пакеты, требуемые для указанных пакетов;
запрашивается подтверждение на выполнение)
- update шаблон ...
(обновить указанные пакеты до самых свежих версий с разрешением
зависимостей; можно использовать шаблоны в именах пакетов;
если имена пакетов не указаны, то обновить все установленные пакеты;
автоматически находятся все пакеты, требуемые для указанных пакетов;
запрашивается подтверждение на выполнение)
- check-update
(аналог list update; возвращает код возврата 100,
если имеется хотя бы 1 требующий обновления пакет и список пакетов)
- upgrade шаблон ... (версия update для перехода от одной версии дистрибутива
к более новой; пытается учитывать удалённые в новом дистрибутиве
пакеты (см. ключ --obsoletes); работает не очень надёжно)
- remove шаблон ...
(или erase; удалить указанные пакеты и все зависящие от них)
- list (получение информации о доступных пакетах; опции:
- all (все доступные и установленные пакеты)
- имя-пакета-или-шаблон ... (доступные и установленные версии указанных пакетов)
- available [шаблон] (все доступные пакеты, самые свежие версии)
- updates [шаблон] (доступные новые версии установленных пакетов)
- installed [шаблон] (установленные версии указанных пакетов)
- extras [шаблон] (показать информацию об установленных пакетах, которых нет
в репозитариях)
- obsoletes [шаблон] (показать информацию об установленных пакетах,
для которых в репозитариях отмечены как устаревшие)
- recent (свежедобавленные пакеты)
)
- provides шаблон ... (или whatprovides;
получить список установленных или доступных пакетов,
обеспечивающих указанную фичу или файл; можно использовать шаблоны)
- search шаблон ... (найти пакет по ключевому слову в имени, описании;
можно использовать шаблоны)
- info (получение описания доступных пакетов; опции как у команды list)
- clean [ packages | headers | oldheaders | all ]
(удалить информацию из кэша)
- clean [ packages | headers | metadata | dbcache | all ] (удалить информацию
из кеша для версии 2.1; действует только на разрешённые репозитарии;
metadata в данном случае - данные о самих репозитариях)
- shell (см. yum-shell(8))
- resolvedep (вывести список пакетов, разрешающих указанные зависимости; provides?)
- localinstall имя-файла (установка пакета из файла, а не репозитария;
зависимости разрешаются из репозитария)
- localupdate имя-файла (обновление пакета из файла, а не репозитария;
зависимости разрешаются из репозитария)
- deplist (выдать список всех зависимостей для указанных пакетов и какие пакеты их
обеспечивают)
- repolist [all|enabled|disabled] (вывести список репозитариев)
- makecache ()
- groupinstall имя-группы (установка группы пакетов, кто их описывает?)
- groupupdate имя-группы
- grouplist (выдаёт список установленных и имеющихся групп пакетов)
- groupremove имя-группы
- groupinfo имя-группы (выдаёт информацию о требуемых группах,
обязательных и необязательных пакетах)
Ключи yum (в скобках - имена параметров yum.conf):
- -y (не спрашивать подтверждения на выполнение; параметр assume-yes)
- -c URL-конфигурационного-файла
- -d уровень-отладки (начинать надо с 3; параметр debuglevel)
- -e уровень-сообщений-об-ошибках (параметр errorlevel)
- -q
- -v
- -t (быть терпимым к ошибкам; параметр tolerant)
- -R минут (время ожидания перед выполнением команды?!)
- -C (использовать заголовки только из кэша)
- --installroot=корень (корень файловой системы, относительно которого
будут установлены пакеты; параметр installroot)
- --enablerepo=идентификатор-репозитария (параметр enabled; можно использовать шаблоны)
- --disablerepo=идентификатор-репозитария (параметр disabled; можно использовать шаблоны)
- --exclude=имя-пакета (не включать пакеты, соответствующие шаблону; параметр exclude)
- --disableexcludes=[all|main|имя-репозитария] (отменить действие параметров exclude
в файлах настройки)
- --download-only (только загрузить пакеты в кэш, не устанавливать их)
- --obsoletes (включать в расчёт пакеты более старых версий;
может пригодиться при переходе к новой версии дистрибутива от обновлённой старой)
- --noplugins (запретить выполнение дополнительных модулей; параметр plugins)
- --nogpgcheck (не проверять цифровые подписи пакетов; параметр gpgcheck)
yum может использовать прокси, определённый
переменной окружения http_proxy (URL!). Рекомендуется следить за сообщениями
при установке, особенно о заменах конфигурационных файлов.
Для yum написано большое количество дополнительных модулей (plugins),
рекомендую yum-changelog, [yum-fedorakmod, yum-kernel-module,] yum-list-data, yum-priorities, yum-security, yum-verify:
- yum-installonlyn обеспечивает добавление нового ядра вместо замены и удаление более старых ядер
(/etc/yum/pluginconf.d/installonlyn.conf), встроен в yum
- yum-NetworkManager-dispatcher (учёт действий NetworkManager при проверке кеша)
- yum-aliases (автор сам-то понял, чего хотел сказать?)
- yum-allowdowngrade (добавляет к команде yum флаг --allow-downgrade, который позволяет
откатить пакет к указанной старой версии)
- yum-basearchonly ("yum install" с указанием пакета без уточнения архитектуры
будет устанавливать только пакеты основной архитектуры - например, устанавливать
пакеты .x86_64, но не .i386)
- yum-changelog (позволяет показывать changelog (yum --changelog) перед или после обновления -
указывается в /etc/yum/pluginconf.d/changelog.conf)
- yum-cron (периодическое автоматическое обновление пакетов; до FC6 был встроен в пакет yum)
- yum-downloadonly (добавляет к команде yum флаг --downloadonly, который позволяет загружать
требуемые пакеты без установки или обновления)
- yum-fastestmirror (сортирует список зеркал по скорости соединения перед загрузкой пакетов)
- yum-fedorakmod (специальная обработка пакетов "kmod-..." (модули ядра) при установке
новых пакетов ядра)
- yum-kernel-module (специальная обработка пакетов "kernel-module-..." (модули ядра) при установке
новых пакетов ядра)
- yum-filter-data (добавляет к команде yum флаги --filter-{vendors, groups, packagers, licenses, arches и др.})
- yum-keys (добавляет команды работы с ключами подписей пакетов: keys, keys-info, keys-data, keys-remove)
- yum-merge-conf (добавляет к команде yum флаг --merge-conf, при использовании которого
yum будет запрашивать о судьбе конфигурационных файлов при обновлении; плохая идея)
- yum-langpacks (поддержка автоматической установки языковых пакетов для пакетов - из метаданных
устанавливаемого или удаляемого пакета извлекается информация о имеющихся языковых пакетах для него; глючный;
хранилище языков - /var/lib/yum/plugins/langpacks/installed_langpacks и $LANGUAGE и $LANG; команды
- yum langavailable # какие языки поддерживаются расширением
- yum langlist # какие языки установлены
- yum langinfo ru # какие пакеты имеются для указанного языка
- yum langinstall язык ...
- yum langremove язык ...
- yum-list-data (добавляет команды: list-{vendors, groups, packagers, licenses, arches,
committers, buildhosts, baseurls, package-sizes, archive-sizes, installed-sizes}; необходимо LANG=)
- yum-post-transaction-actions (позволяет задать действие, выполняемое при изменении пакета)
- yum-presto (позволяет загружать только изменения
(deltarpms)
при обновлении пакетов; требуется пакет deltarpm;
существуют ли репозитарии с дельтами для линии Red Hat кроме
авторского?)
- yum-priorities (позволяет назначить приоритеты пакетам из различных репозитариев;
пакеты из репозитария с более низким значением приоритета не могут быть обновлены
из репозитария с высоким значением приоритета; не путать с параметром cost;
настройки в /etc/yum/pluginconf.d/priorities.conf (enabled=; check_obsoletes=; only_samearch=)
и в описаниях репозитариев (priority=99))
- yum-protect-packages (позволяет защитить указанные пакеты от удаления;
по умолчанию защищён сам yum и его цепочка зависимости)
- yum-protectbase (позволяет защитить пакеты из указанного репозитария от обновления
из незащищённых репозитариев; см. yum-priorities)
- yum-refresh-updatesd (при завершении работы yum будет запрашивать yum-updatesd о
наличии обновлённых пакетов; костыль)
- yum-remove-with-leaves (удалить неиспользуемое?)
- yum-rpm-warm-cache (попытка ускорить доступ к rpmdb за счёт предварительного чтения, у вас есть 16ГБ памяти?)
- yum-security (добавляет команды list-security (для каждого пакета выводится идентификатор
в базе изготовителя репозитария и причина обновления (security, bugfix, enhancement))
и info-security (более подробная информация - статус, описание, дата, ссылки на идентификаторы
ошибок и сообщений об уязвимостях CVE)), а также флаги
--security, --cve=номер, --bz=номер и --advisory=номер, которые позволяют ограничить список пакетов;
основывается на новом типе метаданных updateinfo в репозитариях)
- yum-skip-broken (добавляет к команде yum флаг --skip-broken, который позволяет пропускать
пакеты с проблемами в зависимостях вместо аварийного завершения всей программы)
- yum-tmprepo (добавляет к команде yum флаг --tmprepo, который позволяет одноразово использовать
репозитарий, описанный в .repo файле)
- yum-tsflags (позволяет добавлять tsflags в командной строке; см. параметр tsflags)
- yum-updateonboot (при загрузке системы запускается "yum update")
- yum-updatesd (проверяет наличие обновлений и информирует через email, syslog или dbus)
- yum-upgrade-helper (облегчает переход к следующей версии, удаляя устаревшие пакеты
на основании специальной метаинформации)
- yum-verify (добавляет команду verify, verify-all и verify-rpm для проверки установленных пакетов,
умеет бороться с издержками multilib и изменениями в файлах конфигурации;
команда verify-rpm является аналогом "rpm -V"; команда verify-all ещё более придирчива;
настраивается в /etc/yum/pluginconf.d/verify.conf и ключами --verify-filenames (указывается список проверяемых
файлов) и --verify-configuration-files)
- yum-versionlock (блокирует указанные в /etc/yum/pluginconf.d/versionlock.list пакеты от обновления;
формат EPOCH:NAME-VERSION-RELEASE.ARCH; модуль выключен по умолчанию;
команды добавления и удаления - "yum versionlock {add|del|list} шаблон")
Пакет yum-utils:
- debuginfo-install (установка дополнений к пакетам, обеспечивающих отладочную информацию
к программам)
- package-cleanup (очистка локальной базы пакетов), ключи:
- -c имя-конфигурационного-файла (/etc/yum.conf)
- -y (соглашаемся заранее)
- --problems (вывести список проблем с зависимостями в локальной базе RPM; рекомендую)
- --leaves --all (вывести список пакетов, от которых никто не зависит)
- --orphans (вывести список пакетов, которые недоступны из репозитария)
- --oldkernels --count число --keepdevel (удалить старые ядра)
- repo-graph (построрение графика в формате graphviz (.dot, пакеты graphviz, pydot);
документация внутри)
- repoclosure (получить список неразрешённых зависимостей по совокупности репозитариев;
документация внутри)
- repomanage (?)
- repoquery пакет-или-группа ... (запрос информации из репозитария аналогично "rpm -q"), ключи:
- общие ключи
- --querytags (выдать список тегов queryformat, см. rpm)
- --repoid=имя-репозитария (по умолчанию - все разрешённые в настройках yum)
- --repofrompath=имя-репозитария,URL-репозитария (запрос к дополнительному репозитарию,
не описанному в настройках yum)
- --quiet
- -C (использовать только информацию из кеша yum)
- --tempcache (создать и использовать временный кеш; для обычного пользователя - по умолчанию)
- -c имя-конфигурационного-файла (/etc/yum.conf)
- --nvr (использовать формат name-version-release)
- --nevra (использовать формат name-epoch:version-release.architecture, по умолчанию)
- --envra (использовать формат epoch:name-version-release.architecture)
- выбор пакета или группы
- -g (выбирать группы, а не пакеты)
- -a (все пакеты или группы)
- {-f | --file} имя-файла (определить пакет по входящему в него файлу)
- --whatobsoletes зависимость (по удаляемым зависимостям)
- --whatconflicts зависимость (по конфликтам с указанной зависимостью)
- --whatprovides зависимость (по обеспечиваемым зависимостям)
- --whatrequires зависимость [--alldeps] (по требуемым зависимостям;
если --alldeps, то включать ручные и автоматические зависимости)
- --archlist=архитектура[,архитектура] (ограничить список пакетов указанной архитектурой)
- --pkgnarrow={installed | available | recent | updates | extras | all | repository}
(дополнительное ограничение списка пакетов, по умолчанию - repository)
- --grouppkgs={all | mandatory | default | optional} (ограничить пакеты по статусу в группе)
- --requires (вывести список групп, требуемых ланной группой)
- --show-dupes (по умолчанию отбирать только новейшие версии)
-
какую информацию выдавать
- -i | --info (выдать краткую информацию о пакете (аналог "rpm -qi") или группе)
- -l | --list (выдать список файлов в пакете (аналог "rpm -ql") или пакетов в группе)
- --requires [--resolve] (выдать список зависимостей пакета
[с определением требуемого пакета])
- --provides (список зависимостей, обеспечиваемых пакетом)
- --obsoletes (список зависимостей, удаляемых пакетом)
- --conflicts (список зависимостей, конфликтующих с пакетом)
- --changelog
- --location (откуда можно скачать пакет)
- --source (имя исходного пакета)
- --groupmember (в какую группу входит)
- --queryformat=формат
- -a
- reposync (синхронизация удалённого и локального репозитариев, для скачивания используется yum)
- -c имя-конфигурационного-файла (/etc/yum.conf)
- --arch=архитектура
- --repoid=имя-репозитария
- --tempcache (создать и использовать временный кеш; для обычного пользователя - по умолчанию)
- --download_path=локальный-каталог
- --gpgcheck (удалять пакеты, не прошедшие проверку)
- --urls (не загружать файлы, а только вывести их URL)
- --newest-only (только самые новые версии)
- -q
- repotrack (загрузка пакетов и всех его зависимостей из списка репозитариев)
- yum-builddep имя-пакета (установка пакетов, требуемых для сборки указанного пакета)
- yumdownloader имя-пакета (загрузка пакетов из репозитария)
- --destdir имя-каталога (куда сохранять)
- --resolve (разрешать зависимости и загружать соответствующие пакеты)
- --urls (не загружать файлы, а только вывести их URL)
- --source (загружать исходные пакеты)
- repo-rss имя-репозитария (генерирует RSS поток), ключи
- -f выходной-файл (repo-rss.xml)
- -l URL
- -t заголовок
- -d описание
- -r дней (3; за сколько дней считать обновления)
yum-updatesd - сервис (демон), сообщающий об обновлениях по e-mail или syslog,
позволяет автоматическую загрузку или установку обновлений (/etc/yum/yum-updatesd.conf).
yum-metadata-parser - обработчик метаданных на C
(быстр, но требует очень много памяти).
yumex - графическая оболочка для yum.
yum-cron - предшественник yum-updatesd (убран из yum во времена FC6).
yum-updateonboot - при загрузке запускается автоматический "yum update".
- EPEL (пакеты из Fedora, портированные в RHEL)
- Dag Wieers Apt RPM repository (RHEL, 4 тысячи проектов)
- репозитарий dries
(для RHEL и Fedora; 2500 проектов; копия)
- livna.org (мультимедиа, драйверы; несовместим с freshrpms)
- freshrpms (мультимедиа, драйверы; несовместим с livna)
- atrpms (для RHEL и Fedora; пересекается с основным репозитарием!)
- JPackage (пакеты для Java)
- репозитарий karan (Fedora Extra)
- tigro (совместим с Livna и не совместим с Freshrpms)
- RPMforge (недоделанный проект слияния
FreshRPMS, Dries и DAG)
- объединение FreshRPMS, DAG, Newrpms, Dries, ATrpms (Fedora, 1700 проектов, не все ссылки корректны)
Для примера создадим репозитарий
White Box Linux 3.0 со всеми его изменениями:
Для обновления Red Hat 9 требуется
специальная процедура.
Создадим репозитарий Red Hat 9 со всеми изменениями:
- подготавливаем клиентский компьютер к использованию yum
rpm -Uvh http://download.fedoralegacy.org/redhat/9/updates/i386/gnupg-1.2.1-9.i386.rpm
rpm -ivh http://download.fedora.us/fedora/redhat/9/i386/RPMS.stable/yum-2.0.3-0.fdr.1.rh90.noarch.rpm
rpm --import http://www.fedoralegacy.org/FEDORA-LEGACY-GPG-KEY
rpm --import http://www.redhat.com/security/db42a60e.txt
- создаём на локальном ftp-сервере директорию Redhat9/os/i386 и
выкладываем содержимое директорий RedHat/RPMS/ всех установочных дисков
(со всех SRPMS в Redhat9/os/SRPMS)
- делаем headers
- создаём на локальном ftp-сервере директорию Redhat9/updates и
обеспечиваем регулярную подкачку в неё изменений (поддиректории i386,
и SRPMS); вместе с самими пакетами получаются и многочисленные
директории headers (т.к. качаем с зеркала fedoralegacy)
- настраиваем /etc/yum.conf на клиентских компьютерах:
[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
[redhat-os]
name=Red Hat Linux $releasever ($basearch)
baseurl=ftp://имя-ftp-сервера/RedHat9/os/i386
gpgcheck=1
[redhat-updates]
name=Red Hat Linux $releasever ($basearch) updates
baseurl=ftp://имя-ftp-сервера/RedHat9/updates/i386
gpgcheck=1
- тестируем
yum list updates
Создадим репозитарий CentOS 3.4 со всеми изменениями:
Создадим репозитарий Fedora Core 3 (новый yum)
со всеми изменениями и дополнительными (внешними) репозитариями:
- создаём на локальном ftp-сервере директорию FedoraCore3/base,
заходим в неё
- в директорию os/Fedora
выкладываем содержимое директорий RedHat/RPMS/ всех установочных дисков
- копируем соответствующие директории headers и repodata с сайта
разработчика в os (или установить пакет createrepo
и создать самому, но в нём не будет описания групп)
- настраиваем /etc/yum.conf на клиентских компьютерах:
[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
gpgcheck=1
tolerant=1
pkgpolicy=newest
exactarch=1
distroverpkg=redhat-release
obsoletes=1
- настраиваем /etc/yum.repos.d/fedora.repo
[base]
name=Fedora Core $releasever - $basearch - Base
baseurl=ftp://имя-ftp-сервера/FedoraCore3/base/os
enabled=1
- в директорию SRPMS
выкладываем содержимое директорий SRPMS/ всех установочных дисков
- createrepo SRPMS
- какую пользу можно извлечь из yum для исходных пакетов я не понял
- создаём на локальном ftp-сервере директорию FedoraCore3/updates,
заходим в неё
- обеспечиваем регулярную подкачку в неё изменений (поддиректории i386,
x86_64 и SRPMS); вместе с самими пакетами получаются и многочисленные
директории headers и repodata, а также огромные поддиректории debug,
содержащие пакеты с информацией для отладки
- настраиваем /etc/yum.repos.d/fedora-updates.repo
[updates-released]
name=Fedora Core $releasever - $basearch - Released Updates
baseurl=ftp://имя-ftp-сервера/FedoraCore3/updates/$basearch
enabled=1
- остальные репозитарии у себя не держим, но также можно настроить
fedora-devel.repo:
[development]
name=Fedora Core $releasever - Development Tree
mirrorlist=http://fedora.redhat.com/download/mirrors/fedora-core-rawhide
enabled=1
fedora-updates-testing.repo:
[updates-testing]
name=Fedora Core $releasever - $basearch - Test Updates
mirrorlist=http://fedora.redhat.com/download/mirrors/updates-testing-fc$releasever
enabled=1
- проверяем сделанное:
yum list kernel
- добавляем дополнительные репозитарии (fedora-us-extra и livna: mplayer,
mp3, nvidia и пр.):
rpm --import http://rpm.livna.org/RPM-LIVNA-GPG-KEY
rpm --import http://www.fedora.us/FEDORA-GPG-KEY
rpm --import http://atrpms.net/RPM-GPG-KEY.atrpms
rpm --import http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
fedora-us.repo:
[fedora-us-3-extras]
name=Fedora Extras for Fedora Core 3 -- Fedora US mirror
baseurl=http://mirrors.kernel.org/fedora.us/fedora/fedora/$releasever/$basearch/RPMS.extras
livna.repo:
[livna-stable]
name=Livna.org Fedora Compatible Packages (stable)
baseurl= http://rpm.livna.org/fedora/$releasever/$basearch/RPMS.stable
[livna-unstable]
name=Livna.org Fedora Compatible Packages (unstable)
baseurl=http://rpm.livna.org/fedora/$releasever/$basearch/RPMS.unstable
[livna-testing]
name=Livna.org Fedora Compatible Packages (testing)
baseurl=http://rpm.livna.org/fedora/$releasever/$basearch/RPMS.testing
at.repo:
[at-stable]
name=ATrpms for Fedora Core $releasever stable
baseurl=http://apt.atrpms.net/fedora/$releasever/en/$basearch/at-stable
dag.repo:
[dag]
name=Dag RPM Repository for Fedora Core
baseurl=http://apt.sw.be/fedora/$releasever/en/$basearch/dag
- пробуем: yum install mplayer; не все пакеты в extra имеют подписи,
но т.к. они остаются в архиве, то "неподписантов" можно предварительно
установить вручную, а затем повторить установку mplayer
- проверку наличия новых пакетов в crontab:
result=`yum -d 0 --disablerepo=development --disablerepo=livna-unstable --disablerepo=dag --disablerepo=updates-testing --disablerepo=livna-testing --disablerepo=at-stable --disablerepo=dag check-update`
if [ $? ]
then
echo $result | mail -s "`hostname`: `cat /etc/redhat-release`: need updates" кому
fi
|
Bog BOS: yum - автоматическая установка, обновление и удаление пакетов rpm
|
Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru