Наши партнеры

UnixForum



  • грязезащитный коврик ячеистый здесь
  • floor-mats.ru



Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

YUM HOWTO (управление программным обеспечением в дистрибутиве Fedora)

(С) В.А.Костромин, 10-22 мая 2008 г.

Для начала хочу сказать, что до недавнего времени у меня не было достаточно свободного выхода в интернет. И если мне требовалось установить какое-то приложение в Линукс-системе, приходилось пользоваться утилитой rpm, предварительно найдя и скачав соответствующий rpm-пакет (компиляцией ПО из исходных кодов я как-то никогда не увлекался). И у меня была уверенность (обоснованная личным опытом) в том, что установка дополнительного ПО в Линукс - это довольно нетривиальная задача. Так что когда я подключился к Интернет по безлимитному тарифу и познакомился с утилитой yum в дистрибутиве Fedora, я был приятно удивлен той легкостью, с которой можно устанавливать и обновлять программное обеспечение в Линукс. Захотелось детальнее разобраться с этой утилитой и ее возможностями, результатом чего и является настоящая статья.

Основным источником для настоящего HOWTO послужила статья Fedora Software Management Guide, которую авторы считают пока только черновиком. Из нее заимствованы некоторые примеры. Но я старался проверить приводимые утверждения на своей системе. Другие использованные источники перечислены в конце настоящей статьи.

Начну я издалека, с напоминания о том, что такое менеджер пакетов rpm, и определения понятия репозитория.

Менеджер пакетов RPM

Одним из самых существенных признаков или критериев, по которым различаются дистрибутивы Линукс, является используемый в данном дистрибутиве принцип управления программным обеспечением и, соответственно, менеджер пакетов, который входит в этот дистрибутив. Существуют дистрибутивы, у которых все программное обеспечение поставляется в исходных кодах и компилируется "на месте". Другие дистрибутивы применяют заранее скомпилированные пакеты ПО и специальные программы (менеджеры пакетов), которые размещают исполняемые файлы пакета по "своим местам" в системе, проверяют зависимости и создают необходимые ссылки.

В Red Hat и его клонах (или наследниках, последователях) таким менеджером служит RPM. RPM является сокращением от Red Hat Package Manager - менеджер пакетов Red Hat. Эта аббревиатура обозначает две взаимосвязанных вещи: формат пакетов программного обеспечения и утилиту, созданную для управления этими пакетами.

Каждый rpm-пакет представляет собой сжатый архив, содержащий информацию о продукте, программные файлы, документацию и скрипты управления. Утилита rpm (и другие средства управления пакетами) использует содержимое пакета для того, чтобы корректно разместить программные файлы в системе, инсталлировать ПО, обновить или удалить его. Пакет часто включает в себя еще и цифровую подпись, удостоверяющую, что пакет получен из определенного (надежного) источника, что обеспечивает безопасность системы. Перед установкой осуществляется проверка цифровой подписи с использованием публичного (открытого) ключа. Рассказывать здесь о том, что такое rpm не имеет смысла, я просто приведу несколько ссылок, по которым вы при желании сможете отыскать нужную информацию.

Элементарное введение в тематику управления пакетами ПО и такое же элементарное описание rpm можно найти по следующим ссылкам:
  • "Установка и обновление программных пакетов. Программа rpm"
  • "Основы использования RPM"
  • Более подробные сведения найдутся здесь:
  • Maximum RPM (Maximum RPM). Это книга датирована 2000 годом и по некоторым данным уже существенно устарела.
  • RPM Guide - более позднее издание, датированное 2005 годом.
  • Обе книги имеются только на английском языке (по крайней мере мне переводы неизвестны и Google тоже ничего не находит).

    14 июля 2009 г. посетитель сайта с ником navaga прислал мне следующее собщение: "Я хочу сообщить Вам, что вторая книга (RPM Guide) имеет русский перевод и лежит по этому адресу http://www.lexpr.ru/node/11"

    Нужно еще отметить, что rpm-пакеты используются не только в Red Hat и Fedora, но и в других дистрибутивах, например, в Mandriva, openSUSE и других.

    RPM - отличная утилита, которая существенно упрощает установку программного обеспечения в Линукс-системах, однако она имеет один существенный недостаток, который иногда называют "кошмаром зависимостей" ("dependency hell"). Он заключается в том, что rpm-пакеты часто требуют установки каких-то других пакетов, необходимых для работы устанавливаемого ПО. Чаще всего это бывает связано с использованием библиотек, которые используются многими приложениями и поэтому поставляются в виде отдельных пакетов. Чтобы корректно установить приложение, оказывается необходимо вначале установить все используемые им библиотеки. В составе rpm-пакета содержится информация о том, какие библиотеки или отдельные файлы нужны данному приложению, но часто эта информация ограничивается названием нужного модуля или файла и не содержит данных о том, в каком именно пакете содержится нужный файл. И найти нужный пакет или отдельную библиотеку бывает очень не просто. С этой проблемой и помогают справиться репозитории программного обеспечения и утилита YUM, которые будут предметом нашего дальнейшего рассмотрения.

    Утилита yum заботится о том, чтобы все зависимости были удовлетворены в процессе инсталляции. Она автоматически установит все библиотеки, которые необходимы новому приложению. А если новое приложение конфликтует с уже установленным ПО, yum откажется делать какие-то изменения в вашей системе.

    Все необходимые для разрешения зависимостей дополнительные пакеты утилита yum находит и забирает из указанных ей (в конфигурационных файлах) репозиториев.

    Репозиторий

    Русскоязычная Википедия сообщает о репозитории следующее:

    "Репозиторий - место, где хранятся и поддерживаются какие-либо данные. Чаще всего данные в репозитории хранятся в виде файлов, доступных для дальнейшего распространения по сети.
    Примером репозитория может служить репозиторий свободного программного обеспечения Сизиф ALT Linux.
    Репозитории используются в системах управления версиями, в них хранятся все документы вместе с историей их изменения и другой служебной информацией. Русское сообщество Subversion рекомендует использовать вместо термина репозиторий термин хранилище, поскольку он полностью соответствует как прямому переводу слова "repository", так и его понятию.
    Разрабатывается автоматизированная система создания репозиториев на CD/DVD - APTonCD."

    Англоязычная версия википедии дает более подробные сведения:

    "Репозиторий программного обеспечения (иногда сокращенно называемый репо) - это место для хранения ПО, из которого программные пакеты могут быть получены и установлены на компьютер. Многие организации и распространители программного обеспечения поддерживают для этой цели сервера в Интернет, доступ к которым может быть либо бесплатным, либо предоставляться по подписке за определённую плату. Репозитории могут создаваться под одну конкретную программу, например, репозиторий CPAN для языка программирования Perl, или для целой операционной системы. Владельцы таких репозиториев обычно предоставляют систему управления пакетами, инструменты для поиска, установки и других действий с программными пакетами, хранящимися в репозитории. Например, многие дистрибутивы Линукс используют Advanced Packaging Tool или yum.
    Поскольку репозитории создаются как место хранения полезных программ, обычно принимаются специальные меры для того, чтобы в их состав не попало вредоносное ПО. Если сконфигурировать систему на компьютере таким образом, чтобы использовались только надежные репозитории и при инсталляции ПО производилась проверка цифровых подписей, да к тому же были правильно настроены права доступа в системе, то угроза проникновения вредоносного ПО для такой системы существенно снижается. В качестве следствия или побочного эффекта получаем, что построенные таким образом системы могут не нуждаться в установке дополнительных средств защиты от вредоностного ПО и компьютерных вирусов."

    Эти две цитаты дают достаточно полное представление о репозитории в общем смысле. Нас же интересуют репозитории, ориентированные конкретно на определенный дистрибутив Линукс. Такие репозитории представляют собой наборы пакетов программного обеспечения, ориентированные на определенную систему управления пакетами ПО, размещенные в специальном дереве каталогов и снабженные дополнительными файлами с индексами и контрольными суммами пакетов. Кроме того, для каждого репозитория разрабатываются специальные средства, обеспечивающие и облегчающие доступ пользователей к этому репозиторию. Для дистрибутива Дебиан таким средством является набор скриптов APT, для дистрибутива Fedora - утилита YUM.

    Набор пакетов, включаемых в репозиторий, обычно создается таким образом, что в нем
    • имеются все необходимые пакеты для разрешения зависимостей и
    • отсутствуют противоречия между различными приложениями.
    Это освобождает вас от необходимости вручную искать нужные пакеты для установки или обновления какого-то приложения. С помощью одной команды можно обновить все установленные в вашей системе приложения, а также установить какое-то приложение или группу приложений по заданному критерию.

    О репозиториях для дистрибутива Дебиан можно прочитать в специальном HOWTO, автором которого является Aaron Isotton и который переведен на русский язык: "HOWTO: репозиторий Debian" . Но нас сейчас интересует работа с репозиториями Fedora, что и будем рассматривать в оставшейся части заметки.

    Предназначение yum

    Как уже сказано выше, основной проблемой системы управления пакетами RPM является проблема разрешения зависисимостей пакетов друг от друга. В дистрибутиве Дебиан для решения подобной проблемы был создан набор утилит Advanced Packaging Tool (APT), но в своем исходном виде он не работает в Red Hat и Fedora. В рамках Connectiva Linux была разработана утилита APT-RPM, которая предоставляла пользователям дистрибутивов, основанных на rpm, большинство возможностей APT, однако в своих ранних версиях она для достижения результата использовала некоторые приемы, противоречащие правилам rpm.

    Утилита Yum (Yellow Dog Updater, Modified) была создана с целью преодоления недостатков APT-RPM и удовлетворения всех ограничений, накладываемых инструментом управления пакетами up2date, разработанным Red Hat. Yum корректно обрабатывает зависимости и обеспечивает работу с несколькими репозиториями. Кроме того, он поддерживает установку пакетов группами - можно дать утилите задание обработать определенную группу приложений и она установит все приложения данной группы. Это существенно упрощает процедуры в случае управления многими машинами.

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

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

    Принципы именования rpm-пакетов

    Прежде чем приступить к рассказу о том, как использовать yum, надо немного рассказать о том, как именуются rpm-пакеты.

    Название rpm-пакета состоит из нескольких частей или полей и в общем виде может быть представлено такой строкой:
    name-version-release.architecture.rpm
    где

  • name - имя пакета (обычно название основного приложения, которое содержится в пакете);
  • version - версия;
  • release - релиз (иногда в этом же поле имеется указание на того, кто сформировал пакет);
  • architecture - архитектура (например, i386);
  • Указание архитектуры - это обычно минимум информации, помимо названия приложения, который необходим для установки пакета. Это поле может принимать следующие значения:

  • i386 - подходит для любого Интел-совместимого компьютера
  • noarch - совместимо с любой архитектурой компьютера
  • ppc - предназначено для систем на базе PowerPC, таких как Apple Power Macintosh
  • x86_64 - пакет для установки на 64-битные Intel-совместимые процессоры, такие как Opteron
  • src - означает, что данный пакет содержит исходный код

    Иногда rpm-пакеты с программным обеспечением могут быть оптимизированы для определенного типа процессора. Одно и то же ПО может поставляться в разных пакетах для компьютеров на процессорах i386, i586, i686 и x86_64. На машинах, основанных как минимум на Intel Pentium, VIA C3 или совместимых ЦПУ, можно использовать пакеты, которые содержат i586 в своем имени. Для компьютеров на Intel Pentium Pro или выше или на соответствующей модели AMD рассчитаны i686-пакеты.

    Утилита yum не требует указания всех полей в том случае, когда ей передается имя rpm-пакета (например, для установки). Она воспринимает следующие варианты наименования пакетов: name, name.architecture, name-version, name-version-release, name-version-release.architecture и epoch:name-version-release.architecture (Прим. К сожалению, не могу пояснить, что такое epoch ;-)).

    При вызове команды yum рекомендуется использовать краткие имена rpm-пакетов. В таком случае yum автоматически выберет в репозиториях самый свежий пакет из числа тех, которые соответствуют архитектуре вашего компьютера.

    Репозитории обычно организованы таким образом, что пакеты для каждой архитектуры хранятся в отдельных каталогах. Тем не менее можно указать имя пакета в формате name.architecture, чтобы быть уверенным в соответствии ПО вашему процессору.

    Указание пакета с другим форматом имени служит для того, чтобы указать yum, что требуется изменить принятый по умолчанию режим обработки и использовать пакет, который строго соответствует указанному шаблону. Это может потребоваться в тех случаях, когда известно, что выбираемый по умолчанию пакет содержит ошибку или по каким-то другим причинам не годится для установки в вашей системе.

    Установка и настройка yum

    Примечание:
      Установка нового или обновление имеющегося программного обеспечения в Linux-системе обычно требует наличия прав администратора. Вы можете выполнять приводимые ниже команды, пользуясь каждый раз утилитой su, например, следующим образом:
      su -c 'yum update'
      Однако при этом каждый раз придется снова вводить пароль суперпользователя. Гораздо удобнее выполнять эти действия, запустив отдельную сессию с соответствующими правами, например, перейдя в виртуальную консоль или запустив окно эмулятора терминала от имени root-а.
      Во всех приводимых примерах, мы будем предполагать, что вы обладаете соответствующими правами. В примерах это обозначается тем, что перед каждой командой будет стоять приглашение системы вида
      [root] #
      характерное именно для работы в root-сессии.

    Если утилита yum в вашей системе не установлена по умолчанию, то можно скачать и установить соответствующий rpm-пакет (например, из одного из репозиториев Fedora, адреса которых будут приведены ниже).

    Настройка утилиты осуществляется с помощью файла /etc/yum.conf. Этот файл содержит несколько секций. Секции бывают двух типов - главная и секции репозиториев. Главная секция (обозначается ключевым словом [main]) содержит глобальные опции конфигурации. Секция (секции) репозиториев определяют конфигурацию отдельного репозитория (сервера). Файл /etc/yum.conf может содержать одну или несколько секций репозиториев. Но иногда такие секции могут вообще отсутствовать в этом файле - они выносятся в отдельные файлы, располагающиеся в каталоге /etc/yum.repos.d. В моей системе имеет место как раз такой случай, у меня файл /etc/yum.conf имеет следующий вид:

    [main]
    cachedir=/var/cache/yum
    keepcache=0
    debuglevel=2
    logfile=/var/log/yum.log
    exactarch=1
    obsoletes=1
    gpgcheck=1
    plugins=1
    metadata_expire=1800
    
    # PUT YOUR REPOS HERE OR IN separate files named file.repo
    # in /etc/yum.repos.d
    
    Значение параметров, задаваемых в главной секции этого файла, можно понять, просмотрев страничку man yum.conf. В моем случае строки этой секции означают следующее:
    cachedir=/var/cache/yumрабочий каталог, в котором будут временно сохраняться скачанные для обновления пакеты и файлы баз установленных и(или) обновляемых пакетов
    keepcache=0указание на то, надо ли сохранять (=1) или нужно удалять (=0) содержимое кэша после успешной инсталляции
    debuglevel=2уровень выдачи отладочных сообщений (от 0 до 10)
    logfile=/var/log/yum.logполный путь к файлу, в котором будет сохранен протокол работы программы
    exactarch=1если установить этот параметр в 1, то yum будет обновлять только те пакеты, для которых указана та же самая архитектура, что и у установленных пакетов; то есть если был установлен пакет для архитектуры i386, то новый пакет с суффиксом i686 не будет рассматриваться как возможный вариант для обновления
    obsoletes=1эта опция работает только вместе с командой update; полезна для случая полного обновления версии дистрибутива
    gpgcheck=1если значение этой опции равно 1, то будет произволиться проверка цифровой подписи GPG для устанвливаемых пакетов
    plugins=1переключатель, определяющий возможность использования плагинов к команде yum
    metadata_expire=1800величина интервала (в секундах) по истечении которого yum будет обновлять метаданные репозиториев; если вы считаете, что yum недостатоно часто проверяет наличие обновлений в репозиториях, уменьшите это значение

    Секции репозиториев могут иметь примерно такой вид:

    [base]
    name=Fedora Core $releasever - $basearch - Base
    baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/$releasever/$basearch/os/>
    
    [updates-released]
    name=Fedora Core $releasever - $basearch - Released Updates
    baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/updates/$releasever/$basearch/
    
    #[updates-testing]
    #name=Fedora Core $releasever - $basearch - Unreleased Updates
    #baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/updates/testing/$releasever/$basearch/
    
    #[development]
    #name=Fedora Core $releasever - Development Tree
    #baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/development/$basearch/
    

    Вместо $releasever и $basearch yum подставит нужные значения, так что путь будет указывать на реальную точку в структуре каталогов репозитория.

    Но в моем случае, как вы можете видеть из приведенного выше листинга файла /etc/yum.conf, таких секций в этом файле нет. Описания репозиториев вынесены в отдельные файлы, размещенные в каталоге /etc/yum.repos.d. В следующем листинге приведен пример одного из этих файлов:

    [fedora8]
    name=Fedora8 $releasever - $basearch
    #baseurl=http://download.fedora.redhat.com/pub/fedora/linux/releases/8/Everything/$basearch/os/
    mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-8&arch=$basearch
    enabled=1
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora file:///etc/pki/rpm-gpg/RPM-GPG-KEY
    
    [fedora-debuginfo]
    name=Fedora $releasever - $basearch - Debug
    #baseurl=http://download.fedora.redhat.com/pub/fedora/linux/releases/$releasever/Everything/$basearch/debug/
    mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-debug-$releasever&arch=$basearch
    enabled=0
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora file:///etc/pki/rpm-gpg/RPM-GPG-KEY
    
    [fedora-source]
    name=Fedora $releasever - Source
    #baseurl=http://download.fedora.redhat.com/pub/fedora/linux/releases/$releasever/Everything/source/SRPMS/
    mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-source-$releasever&arch=$basearch
    enabled=0
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora file:///etc/pki/rpm-gpg/RPM-GPG-KEY

    В строке, начинающейся с ключевого слова "name" приводится понятное для человека условное название репозитория (можете назвать его так, как вам нравится). В строке, обозначенной ключом "baseurl", приводится путь (URL) к репозиторию. URL должен начинаться одним из следующих префиксов http://, ftp:// или file://. В моем случае, как вы можете видеть, эта строка оказалась закомментирована (символом #). Зато в следующей строке (ключевое слово "mirrorlist") указан путь к файлу, содержащему список базовых URL.

    В секции репозитория, кроме указанных выше имени и адреса репозитория, могут также задаваться какие-то опции. В отличие от опций, заданный в секции [main] они будут влиять только на один репозиторий, указанный в данной секции. В частности, с помощью опции "enabled=0" можно вообще отключить данный репозиторий. Что вы и видите в приведеном примере - хотя в нем содержаться 3 секции репозиториев, но yum будет работать только с одним репозиторием из этих трех.

    Но в некоторых случаях только задания опции "enabled=0" может оказаться недостаточно для полного отключения репозитория. Чтобы полностью исключить доступ к репозиторию:

    1. Удалите соответствующий файл из /etc/yum.repos.d/.
    2. Удалите сохраненную в кэше директорию из /var/cache/yum/.

    Использование цифровых подписей

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

    Для проведения такой проверки конфигурационный файл каждого репозитория должен содержать строку, указывающую местоположение открытого ключа, используемого для подтверждения достоверности пакетов, размещенных в данном репозитории. Эта строка обозначена ключевым словом gpgkey.

    Открытые ключи для проверки пакетов хранятся в базе данных открытых ключей утилиты rpm. Добавить новый ключ в эту базу можно с помощью команды rpm. Например, чтобы добавить ключ из файла /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora, нужно выполнить команду

    [root] # rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora 
    Можно импортировать открытый ключ подписи в базу ключей rpm непосредственно с веб-сайта. Например, чтобы импортировать файл GPG-PUB-KEY.asc с веб-сайта www.therepository.com, используйте следующую команду
    [root] # rpm --import http://www.therepository.com/GPG-PUB-KEY.asc 
    Man-страница к утилите rpm сообщает, что все установленные в системе открытые ключи можно просмотреть по команде
    [root] # rpm --qa gpg-pubkey* 
    В моей системе эта команда выдала следующий результат:
    gpg-pubkey-db42a60e-37ea5438
    gpg-pubkey-a109b1ec-3f6e28d5
    gpg-pubkey-4f2a6fd2-3f9d9d3b
    Подробную информацию о каждом ключе можно получить по такой, примерно, команде:
    [root] # rpm --qi gpg-pubkey-a109b1ec-3f6e28d5 
    а удалить ключ из базы можно командой:
    [root] # rpm -e gpg-pubkey-a109b1ec-3f6e28d5 

    При работе с репозиториями утилита yum автоматически импортирует открытый ключ цифровой подписи в систему в первом же сеансе работы с данным репозиторием. Вы увидите сообщение примерно такого вида:

    warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID 4f2a6fd2 
    public key not available for tsclient-0.132-6.i386.rpm
    Retrieving GPG key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora
    Importing GPG key 0x4F2A6FD2 "Fedora Project <fedora@redhat.com>"
    Is this ok [y/N]:

    Если ввести в ответ [y], это будет означать, что вы признаете данный ключ и разрешаете проводить проверку файлов на основе такого ключа. Если нажать [N] или [Enter], yum прекратит установку пакетов из этого репозитория.

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

    При инсталляции системы из дистрибутива Fedora обычно автоматически настраивается доступ к основным репозиториям проекта Fedora. Таких репозиториев существует несколько. Основными можно назвать репозитории Fedora, в которых поддерживаются стабильные версии этого дистрибутива. Для каждой версии Fedora поддерживаются 2 стандартных репозитория, называющихся 'fedora' и 'updates'. Для целей разработки и тестирования создаются отдельные репозитории: fedora-devel (Rawhide), fedora-extras-devel и updates-testing.

    Но поскольку некоторые программные продукты являются несвободными или требуют для своей работы установки каких-то несвободных компонентов, а проект Fedora придерживается принципа использования только свободного ПО, в указанных выше репозиториях может не оказаться нужного вам ПО. Искать его нужно в других репозиториях. Производитель продукта может дать ссылку или рекомендовать обратиться к какому-то другому репозиторию. Например, популярное программное обеспечения для языка программирования Java можно найти в репозитории http://www.jpackage.org/. Кроме того, существуют репозитории, организуемые различными независимыми организациями и даже отдельными лицами. Краткий обзор таких репозиториев имеется в блоге А.Шейна. Аркадий поддерживает и собственный репозиторий, который вы сможете найти по приведенной ссылке.

    Среди дополнительных репозиториев самым интересным для новичка является Livna - репозиторий, необходимый для установки многих несвободных пакетов, в первую очередь относящихся к разделу мультимедиа, например, обеспечивающих поддержку формата mp3. Из этого репозитория вы можете установить такие пакеты как mplayer-gui - видеоплейер, поддерживающий почти все существующие мультимедиаформаты, gstreamer-plugins-ugly - плагины для gstreamer, добавляющие поддержку несвободныех мультимедиа форматов в totem и некоторые другие программы gnome, kdemultimedia-extras-nonfree - поддержка несвободных мультимедиа форматов в программах kde, mplayerplug-in -  поддержка несвободных мультимедиа форматов для firefox и совместимых браузеров, k3b-extras-nonfree - поддержка несвободных мультимедиа форматов для k3b, xine - отличный dvd плейер.

    В некоторых случаях добавление нового репозитория в перечень доступных источников пакетов для yum может быть выполнено с помощью утилиты rpm. Организаторы репозиториев часто поддерживают специальный rpm-пакет, который надо просто установить в свою систему, чтобы включить репозиторий в перечень доступных. Например, репозиторий Livna можно добавить с помощью одной из следующих команд (в соответствии с установленной у вас версией Fedora):

    [root] # rpm -Uvh http://rpm.livna.org/livna-release-6.rpm
    [root] # rpm -Uvh http://rpm.livna.org/livna-release-7.rpm
    [root] # rpm -Uvh http://rpm.livna.org/livna-release-8.rpm
    Примечание: очевидно все вышеперечисленные команды будут работать только если ваш компьютер подключен к интернету.

    Если такого рода команда по каким-то причинам не работает, можно все, что она делает, сделать и "вручную". Для этого достаточно отредактировать соответствующим образом какой-то из файлов с расширением .repo, из числа размещающихся в каталоге /etc/yum.repos.d/ (или создать новый файл такого типа) в соответствии с приведенными выше рекомендациями. Если приведенных рекомендаций недостаточно, загляните в man yum.conf или man yum.

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

    Совместимость репозиториев

    Полный набор пакетов для дистрибутива Fedora содержит несколько тысяч пакетов, которые все совместимы между собой. Если пакет разрабатывается сторонним разработчиком, он тоже должен быть совместим со всеми пакетами официального дистрибутива. Но это условие трудно выполнить просто из-за большого объема проверок, которые для этого необходимо проделать. Конечно, создатели репозитория такую работу проводят, и все пакеты, включенные в отдельный репозиторий совместимы друг с другом. Но если мы подключаем несколько репозиториев, то гарантий, что все пакеты объединенной совокупности будут совместимы, уже никто не дает.

    Кроме того, сторонние производители ПО могут предлагать версии некоторых продуктов, которые отличаются от аналогичных продуктов, производимых сообществом Fedora, функционируют по-другому и так далее. Обычно информация о таких несовместимостях присутствует на сайте производителя продукта. Вы сами должны оценивать необходимость и целесообразность использования альтернативных версий ПО.

    Еще один вариант возникновения несовместимости - смена версии самого дистрибутива Fedora. Пакеты, созданные для одной версии, могут оказаться несовместимы с пакетами, разработанными для другой версии (последующей). Создатели репозитория должны четко указывать (а вы - найти эту информацию перед использованием репозитория) на какую версию Fedora рассчитан данный репозиторий.

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

    Можно еще отметить, что формат индекса репозитория изменился при переходе на версию 2.1 утилиты yum. Чтобы убедиться, что репозиторий совместим с современными версиями yum, проверьте, содержит ли репозиторий подкаталог с именем repodata/.

    Использование yum

    Поиск в репозиториях

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

    Для поиска в репозиториях с помощью yum используются три команды: list, search и provides. Самый простой способ поиска - использование команды list. Команда list просматривает названия пакетов и их версии в поисках совпадений. Например, для вывода списка пакетов, в названии которых присутствует tsclient, используйте команду:

    [root] # yum list tsclient
    Для того, чтобы сделать поиск более целенаправленным, можно конкретизировать цель поиска - указать не только имя пакета, но и какие-то другие его аттрибуты, например, версию или архитектуру. Так, по команде
    [root] # yum list tsclient-0.132
    будет производиться поиск пакета, содержащего tsclient версии 0.132. Если в ответ на запрос вы не получили никакой информации, значит не существует пакета, соответствующего заданным критериям.

    Если вы не знаете названия пакета, используйте опции search или provides. С любой из опций можно использовать символы-заместители, что позволяет расширить зону поиска (подробнее об этом будет сказано чуть позже).

    Опция search проверяет имена пакетов, описания, резюме и список разработчиков пакета в поисках совпадений с указанной строкой. Например, для поиска пакетов, связанных с PalmPilot, введите:

    [root] # yum search PalmPilot

    Опция provides проверяет файлы, включенные пакет, и имена функций, которые реализуются программами этого пакета. Например, для поиска пакетов, содержащих файл libneon, введите:

    [root] # yum provides libneon

    Для поиска всех пакетов, которые реализуют сервис MTA (Mail Transport Agent) или содержат файлы, содержащие в имени подстроку MTA, используйте команду:

    [root] # yum provides MTA
    Следует иметь в виду, что опция provides требует от утилиты yum загрузки и обработки индексных файлов значительно бОльшего объема, чем опция search.

    Использование шаблонов

    Пакеты можно искать по части их имени. Все команды поиска поддерживают символы-заместители ? и * (экранируйте их символом \ для корректной обработки bash). К примеру, для поиска пакетов, начинающихся на tsc, введите:

    [root] # yum list tsc\*
    для поиска пакетов, содержащих файлы в директории /etc/httpd
    [root] # yum provides /etc/httpd\* 
    В результатах поиска yum покажет все пакеты, которые соответствуют заданному критерию. При этом надо иметь в виду, что соответствие должно быть точным. Так, например, если вы зададите шаблон запроса в виде shadowutils или shadow-util, то пакет shadow-utils не появится в результатах поиска. Для того, чтобы его найти, в качестве шаблона запроса надо задать shadow-util\? или shadow\*.

    Установка пакетов из репозиториев с помощью Yum

    Если у вас настроены репозитории, то для установки любого приложения (пакета) с помощью yum достаточно воспользоваться параметром install с указанием нужного приложения. При этом yum отыщет последнюю версию пакета из имеющихся в сконфигурированных репозиториях, и проанализирует имеющиеся зависимости. Например, для установки tsclient введите:
    [root] # yum install tsclient
    Будет запрошен пароль root-а, поскольку для установки нового ПО в системе обычно необходимы права суперпользователя. После ввода пароля и некоторой задержки (в это время производится разрешение зависимостей) yum сообщит об итогах разрешения зависимостей и запросит подтверждения на установку, обновление или удаление пакетов:
    ============================================================================= 
     Package                 Arch       Version          Repository        Size
    =============================================================================
    Installing:
     tsclient                i386       0.132-6          base              247 k
    Installing for dependencies:
     rdesktop                i386       1.4.0-2          base              107 k
    
    Transaction Summary
    =============================================================================
    Install      2 Package(s)
    Update       0 Package(s)
    Remove       0 Package(s)
    Total download size: 355 k
    Is this ok [y/N]:
    

    Если вы введете в ответ [y], yum скачает найденный пакет и все пакеты, которые необходимы для разрешения зависимостей, после чего установит полученные пакеты в вашей системе. Если необходимо, будут удалены какие-то пакеты, конфликтующие с устанавливаемым ПО. Если в ответ на запрос вы введете [N] или [Enter], это будет означать отказ от установки указанного приложения. Соответственно, и перекачка пакетов производиться не будет.

    Как уже упоминалось выше, yum ищет и устанавливает самую последнюю версию приложения из тех, которые ему доступны. Если вы хотите установить какую-то конкретную версию, например, одну из предыдущих, надо указать номер версии в команде, то есть вместо

    [root] # yum install tsclient
    дать команду вида
    [root] # yum install tsclient-0.132-1

    Примечания

    • Каждая завершенная операция по установке пакета отображается в файле протокола /var/log/yum.log. Этот файл доступен для просмотра только суперпользователю (root).
    • Если приложение, которые вы обновляете, в это время используется, старая версия остается активной до тех пор, пока приложение или сервис не будут перезапущены. Изменения в ядре вступят в силу только после перезапуска системы.
    • Если вы устанавливаете сервис или службу, Fedora не запускает и не активизирует его. Чтобы обеспечить запуск службы во время загрузки системы, воспользуйтесь пунктом "Система - Службы" или "Администрирование - Службы" главного меню или же используйте утилиты командной строки chkconfig и service.
    • Пакеты, содержащие ядро Linux, не удаляются из системы полсе установки свежей версии ядра. Это сделано для того, чтобы обеспечить загрузку работоспособной версии ядра в том случае, если с ядром новой версии загрузка окажется невозможной или будут иметь место какие-то ошибки. Однако yum автоматически удалит из системы пакеты с совсем устаревшими версиями ядра, оставив только текущее ядро и предыдущую версию.
    • Пакеты, которые скачиваются для инсталляции, временно сохраняются в каталоге, указанном в параметре cachedir= конфигурационного файла /etc/yum.conf (по умолчанию cachedir=/var/cache/yum). Если в том же файле параметр keepcache= принимает значение 0, то после установки эти пакеты будут удалены. Если вы хотите их сохранить, замените строку keepcache=0 на keepcache=1.

    Установка приложений из .rpm файлов

    Для установки приложения из локального .rpm пакета с автоматическим разрешением зависимостей используется команда localinstall. Так команда:
    [root] # yum localinstall foo.rpm
    автоматически найдет зависимости пакета foo.rpm в репозиториях (если сможет) и предложит их установить.

    Если вы потребуете установить пакет, содержащий более свежую версию приложения, уже установленного в системе, yum обновит установленное ПО.

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

    Если вы установили какое-то приложение не из репозитория, а из другого источника (например, загрузили его с сайта производителя) yum update не сможет в дальнейшем отслеживать появление новых версий и обновлять такое ПО. Если вы хотите быть в курсе обновлений такого пакета, подпишитесь на рассылку новостей на сайте производителя.

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

    Установка групп приложений

    С помощью yum можно устанавливать приложения не по одному, а целыми группами. Список доступных групп приложений можно получить по команде
    [root] # yum grouplist
    В моей системе вывод этой команды содержит 57 названий, причем список разбит на 2 части: установленные группы (у меня их 20) и доступные группы.
    Чтобы установить все пакеты группы MySQL Database, введите команду:
    [root] # yum groupupdate "MySQL Database"

    Обновление системы

    Обновление системы осуществляется с помощью уже упоминавшейся команды update, только уже без указания конкретного пакета. Таким образом:
    [root] # yum update
    обновит все приложения в вашей системе. А команда
    [root] # yum update foo
    обновит только пакет foo.

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

    [root] # /sbin/chkconfig --level 345 yum on; /sbin/service yum start
    Не существует специальной службы (демона) yum, которая запускается этой командой. Приведенная команда активизирует скрипт /etc/cron.daily/yum.cron, который заставляет демон cron автоматически запускать обновление системы в 4 часа ночи каждый день.

    Удаление пакетов

    С помощью yum можно не только устанавливать и обновлять программное обеспечение вашей системы, но и удалять ненужные пакеты. Удаление пакетов осуществляется с помощью команды remove. Так,
    [root] # yum remove foo
    удалит пакет foo из системы.

    При удалении пакета yum не просто удаляет указанный пакет, но и исследует зависимости пакетов, определяя те пакеты, которые от него зависят. В результате выполнения команды будет удален заданный пакет и все зависящие от него пакеты. Конечно, вам будет выдан список удаляемых пакетов и запрошено согласие на их удаление.

    Можно также удалить целиком группу пакетов. Чтобы удалить все пакеты группы MySQL Database, введите команду:

    [root] # yum groupremove "MySQL Database"

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

    Создание локального репозитория

    По умолчанию yum в Fedora требует доступа к интернету и скачивает пакеты оттуда. Но можно создать локальный репозиторий из имеющихся у вас пакетов (в том числе и с установочного диска). Для этого:

  • Копируем файлы пакетов с установочного диска и добытые из других источников дополнительные пакеты *.rpm в какой-либо каталог, например /tmp/repo/
  • Проверяем, установлена ли программа createrepo, если не установлена - устанавливаем одноименный пакет.
  • Создаем репозиторий командой:
    [root] # createrepo /tmp/repo/
  • После того, как репозиторий создастся, создаем в каталоге /etc/yum.repos.d/ файл local.repo, содержащий, например, такие строки:
    [local]
    baseurl=file:///tmp/repo/
    enabled=1
    gpgcheck=0 
    Можно поставить gpgcheck=1 и импортировать ключ, но если вы качаете пакеты только из проверенных источников, эту проверку и мороку с ключами можно опустить, еще наверное придется отключить проверку gpg в /etc/yum.conf.

    Если вы запишете репозиторий на DVD-диск, то путь, соответственно, будет примерно такой:

    baseurl=file:///media/cdrom/repo/
    Здесь /mnt/cdrom - путь, по которому у вас примонтирован установочный диск. Для случая, когда у вас fedora на нескольких dvd или cd, то придется скопировать содержимое этих дисков в определенную папку на жестком диске и уже ее прописывать как baseurl.

    Если вы не подключены к Интернет, то имеет смысл во всех остальных файлах *.repo в каталоге /etc/yum.repos.d/ прописать enabled=0, чтобы yum не искал обновления ПО в сети, ибо это вызовет только дополнительные задержки.


    На этом я закончу эту часть статьи про утилиту yum. Во второй части я планирую рассмотреть графические оболочки к этой утилите. Так что "Продолжение следует...". А пока перечислю те источники, которые были использованы при подготовке статьи.

    Источники и ссылки

    Основным источником для настоящего HOWTO послужила статья

    Утилита yum имеет свойства и опции, которые не рассмотрены в настоящем HOWTO. Чтобы познакомиться с ними, восспользуйтесь man-страницами man yum и man yum.conf.

    Полезно посетить веб-сайт проекта yum

    подписаться на лист рассылки

    Есть несколько статей (в том числе и на русском языке), которые полезно прочитать или хотя бы просмотреть.


    Продолжение