Red Hat Linux 7.2: Официальное руководство по настройке Red Hat Linux | ||
---|---|---|
Назад | Глава 25. Управление пакетами с помощью RPM | Вперед |
В RPM используются пять основных действий (не считая создания пакета): установка, удаление, обновление, анализ и проверка. В этом разделе содержится обзор каждого действия. Подробное описание и список параметров, вы можете найти, выполнив rpm --help, а в разделе Дополнительные ресурсы вы найдёте источники дополнительной информации о RPM.
Перед тем как воспользоваться пакетами RPM, вы должны знать где их найти. Поисковые машины в интернет найдут множество хранилищ RPM, но если вы ищете пакеты RPM, созданные компанией Red Hat, обратитесь к следующим источникам:
Компакт-диски с официальным Red Hat Linux
Страница обновлений Red Hat, расположенная по адресу http://www.redhat.com/support/errata.
Список зеркал FTP сервера Red Hat, опубликованный по адресу http://www.redhat.com/mirrors.html
Red Hat Network — Обратитесь к Главе 27 за описанием Red Hat Network
Обычно файлы, содержащие пакеты 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 для указания запрашиваемых пакета (ов). Эти параметры называются Параметрами определения пакета.
-a запрашивает все установленные пакеты.
-f <file> запросит пакет, к которому относится файл <file>. Указывая файл, вы должны определить полный путь файла (например, /usr/bin/ls).
-p <packagefile> запрашивает пакет <packagefile>.
Указать, какие данные запрошенных пакетов вы хотите получить, можно разными способами. Следующие параметры определяют тип искомой информации. Они называются Параметры выбора информации.
-i отображает информацию о пакете, включая имя, описание, выпуск, размер, дату сборки, дату установки, производителя и другую разнообразную информацию.
-l выводит список файлов, содержащихся в пакет.
-s выводит состояние всех файлов в пакете.
-d выводит список файлов, помеченных как документация (страницы man, info, файлы README, и т.д.).
-c выводит список файлов, помеченных как файлы конфигурации. Таковыми считаются файлы, изменяемые вами после установки для настройки пакета в вашей системе (например, sendmail.cf, passwd, inittab и т.д.).
Вы можете получать список файлов в разных форматах, добавив ключ -v, также как в уже знакомой команде ls -l.
При проверке пакета сравнивается информация о файлах, установленных из пакета, с информацией в оригинальном пакете. Помимо остального, при такой проверке проверяется размер, сумма MD5, разрешения, тип, владелец и группа владельца каждого файла.
Команда rpm -V выполняет проверку пакета. Вы можете использовать любой из перечисленных Параметров выбора пакета, для указания пакетов, которые вы хотите проверить. Простым примером выполнения проверки является команда rpm -V foo, которая проверяет, что все в файлы в пакете foo находятся там, куда они были первоначально установлены. Например:
Чтобы проверить пакет, содержащий конкретный файл, выполните:
rpm -Vf /bin/vi |
Чтобы проверить ВСЕ установленные пакеты:
rpm -Va |
Чтобы сравнить установленный пакет с файлом пакета RPM:
rpm -Vp foo-1.0-1.i386.rpm |
Если проверка проходит успешно, никакие сообщения на экране не появятся. В случае обнаружения каких-либо нарушений, вы увидите сообщения об этом. Для каждого несоответствия на экран будет выведена строка из восьми символов ( c обозначает файл конфигурации), а затем имя файла. Каждый из восьми символов обозначает результат сравнения одного атрибута файла со значением атрибута, записанного в базе данных RPM. Одна . (точка) означает, что тест пройден. Следующие символы обозначают ошибки при выполнении определённых проверок:
5 — контрольная сумма MD5
S — размер
L — символическая ссылка
T — дата изменения файла
D — устройство
U — пользователь
G — группа
M — режим (включая разрешения и тип файла)
? — файл не удалось прочитать
Если вы увидели такие сообщения, вы должны решить, будете ли вы удалять или переустанавливать пакет или исправлять проблему другим способом.