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

В RPM используются пять основных действий (не считая создания пакета): установка, удаление, обновление, анализ и проверка. В этом разделе содержится обзор каждого действия. Подробное описание и список параметров, вы можете найти, выполнив rpm --help, а в разделе Дополнительные ресурсы вы найдёте источники дополнительной информации о RPM.

Поиск пакетов RPM

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

Установка

Обычно файлы, содержащие пакеты RPM, имеют подобные имена: foo-1.0-1.i386.rpm. Имя файла включает название пакета (foo), версию (1.0), выпуск (1), и архитектуру (i386). Установить пакет не сложнее, чем ввести следующую команду (собственно она и делает это) в приглашении оболочки:

# rpm -ivh foo-1.0-1.i386.rpm
foo                       ####################################
#

Как вы видите, RPM выводит имя пакета, а затем, по мере установки пакета, последовательность символов "решётка", отражающую выполнение установки.

ЗамечаниеЗамечание
 

Хотя чаще используется команда rpm -ivh foo-1.0-1.i386.rpm установки RPM пакета, вы можете также воспользоваться командой rpm -Uvh foo-1.0-1.i386.rpm. Параметр -U чаще используется при обновлении пакета, но он также работает и при установке новых пакетов. Обратитесь к разделу Обновление за дополнительной информацией об использовании параметра -U системы RPM.

Установка пакета должна выполняться просто, но иногда вы можете встретить ошибки:

Пакет уже установлен

Если пакет с той же версией уже установлен, вы увидите:

# rpm -ivh foo-1.0-1.i386.rpm
foo                     package foo-1.0-1 is already installed
#

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

# rpm -ivh --replacepkgs foo-1.0-1.i386.rpm
foo                       ####################################
#

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

Конфликтующие файлы

Если вы попытаетесь установить пакет, который содержит файл, установленный другим пакетом или более ранней версий того же пакета, вы увидите сообщение:

# rpm -ivh foo-1.0-1.i386.rpm
foo           /usr/bin/foo conflicts with file from bar-1.0-1
#

Чтобы система RPM игнорировала эту ошибку, используйте параметр --replacefiles:

# rpm -ivh --replacefiles foo-1.0-1.i386.rpm
foo                       ####################################
#

Нарушенная зависимость

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

# rpm -ivh foo-1.0-1.i386.rpm
failed dependencies:
        bar is needed by foo-1.0-1
#

Чтобы исправить эту ошибку вы должны установить требуемые пакеты. Если вы хотите выполнить установку принудительно (плохая идея, так как пакет скорее всего не будет работать корректно), воспользуйтесь параметром --nodeps.

Удаление

Удаление пакета выполняется также просто как и его установка. Введите в приглашении оболочки следующую команду:

# rpm -e foo
#

ЗамечаниеЗамечание
 

Обратите внимание, здесь используется имя пакета foo, а не имя файла оригинального пакета foo-1.0-1.i386.rpm. Чтобы удалить пакет, вы должны заменить foo действительным именем первоначального пакета.

Вы можете столкнуться с нарушением зависимости при удалении пакета, если другой установленный пакет зависит от пакета, который вы пытаетесь удалить. Например:

# rpm -e foo
removing these packages would break dependencies:
        foo is needed by bar-1.0-1
#

Чтобы система RPM игнорировала эту ошибку и принудительно удалить пакет (что также является плохой идеей, так как пакеты, зависящие от этого, скорее всего, не будут работать правильно), воспользуйтесь параметром --nodeps.

Обновление

Обновление пакета похоже на его установку. Введите в приглашении оболочки следующую команду:

# rpm -Uvh foo-2.0-1.i386.rpm
foo                       ####################################
#

В приведённом выше примере не видно, как система RPM автоматически удалила старую версию пакета foo. В действительности, вы можете всегда использовать параметр -U для установки пакетов, так как он будет работать даже если предыдущая версия пакета не установлена.

Так как RPM выполняет умное обновление пакетов с файлами конфигурации, вам может встретиться подобное сообщение:

saving /etc/foo.conf as /etc/foo.conf.rpmsave

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

Обновление в самом деле представляет собой комбинацию из удаления и установки, поэтому во время обновления RPM вы можете встретить ошибки и удаления и установки, плюс ещё одну. Если система RPM решает, что вы обновляете новый пакет на пакет со старой версией, вы увидите:

# rpm -Uvh foo-1.0-1.i386.rpm
foo    package foo-2.0-1 (which is newer) is already installed
#

Чтобы вынудить RPM всё же выполнить "обновление", воспользуйтесь параметром --oldpackage:

# rpm -Uvh --oldpackage foo-1.0-1.i386.rpm
foo                       ####################################
#

Освежение

Освежение пакета похоже на его обновление. Введите в приглашении оболочки следующую команду:

# rpm -Fvh foo-1.2-1.i386.rpm
foo                       ####################################
#

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

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

В этом случае, вы можете выполнить простую команду:

# rpm -Fvh *.rpm

RPM автоматически обновит только уже установленные пакеты.

Анализ

Выполните команду rpm -q для обращения к базе данных установленных пакетов. Команда rpm -q foo выведет название пакета, версию и номер выпуска установленного пакета foo:

# rpm -q foo
foo-2.0-1
#

ЗамечаниеЗамечание
 

Обратите внимание, в этом примере используется имя пакета foo. Чтобы запросить пакет, вы должны заменить foo действительным именем пакета.

Вместо указания имени пакета, вы можете использовать следующие параметры команды -q для указания запрашиваемых пакета (ов). Эти параметры называются Параметрами определения пакета.

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

Вы можете получать список файлов в разных форматах, добавив ключ -v, также как в уже знакомой команде ls -l.

Проверка

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

Команда rpm -V выполняет проверку пакета. Вы можете использовать любой из перечисленных Параметров выбора пакета, для указания пакетов, которые вы хотите проверить. Простым примером выполнения проверки является команда rpm -V foo, которая проверяет, что все в файлы в пакете foo находятся там, куда они были первоначально установлены. Например:

Если проверка проходит успешно, никакие сообщения на экране не появятся. В случае обнаружения каких-либо нарушений, вы увидите сообщения об этом. Для каждого несоответствия на экран будет выведена строка из восьми символов ( c обозначает файл конфигурации), а затем имя файла. Каждый из восьми символов обозначает результат сравнения одного атрибута файла со значением атрибута, записанного в базе данных RPM. Одна . (точка) означает, что тест пройден. Следующие символы обозначают ошибки при выполнении определённых проверок:

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