Журнал LinuxFormat - перейти на главную

LXF131:DrBrown2

Материал из Linuxformat
Перейти к: навигация, поиск

Быстрое руководство по RPM

Пользуйтесь RPM как профи, не читая man-страницу.

RPM – сокращение от Red Hat Package Manager (менеджер пакетов Red Hat). Название относится и к формату файлов пакетов, и к программе для управления ими. Данный формат определен в Linux Standard Base и используется (естественно) в Red Hat Linux, в производных Red Hat, таких как CentOS и Fedora, и в некоторых конкурирующих дистрибутивах, включая SUSE. По современным стандартам, RPM – примитивное средство, и большинство пользователей, наверное, предпочтут ему более высокоуровневые утилиты на основе репозиториев, которые поддерживают автоматическое разрешение зависимостей – типа Yum, apt-get, gpk-application или Synaptic.

Тем не менее, RPM сохраняет свое значение как основной инструмент сопровождения базы данных установленных пакетов, а также собственно их развертывания и опроса. И не помешает знать, как управлять им напрямую. Как и многие утилиты командной строки в Linux, rpm страдает излишком количества опций, и в нашем кратком руководстве я покажу, как выполнить основные задачи без необходимости нырять в man. В таблице ниже приведены некоторые стандартные задачи и способ их решения.

RPM подробно

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

Во-первых, рассмотрим случай, когда при попытке установки пакета RPM не удается разрешить зависимость:

#rpm -i agg-2.4-2.1.i386.rpm
error: Failed dependencies:
	 libSDL-1.2.so.0 is needed by agg-2.4-2.1.i386

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

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

# rpm --verify initscripts

Или для всех пакетов:

# rpm --verify --all

Вот фрагмент вывода:

# rpm --verify --all
..5….T. c /etc/inittab
S.5….T. /etc/cron.d/smolt
S.5….T. с /etc/libuser.conf
.M……. /usr/lib/pm-utils/sleep.d
S.5….T. с /etc/ldap.conf
.M….G.. /var/log/gdm

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

  • S – отличается размер файла;
  • M – отличаются права доступа к файлу;
  • 5 – отличается контрольная сумма MD5;
  • D – отличается младший/старший номер устройства;
  • U – отличается владелец файла;
  • G – отличается группа файла;
  • T – отличается время изменения.

Так, мы видим, что, например, у файла /etc/ldap.conf размер, контрольная сумма и время изменения не те, что хранятся в базе данных RPM. Для конфигурационных файлов это нормально, и более половины рассогласований касаются именно их.

Именование имен

У пакетов RPM ужасные названия – невольно радуешься, что есть на свете дополнение имени файла. Но эти имена следуют определенному шаблону, показанному на рисунке. Обратите внимание, что фрагмент имен перед расширением .rpm означает архитектуру, для которой собран пакет. Архитектуры i386 и sparc предполагают пакеты из скомпилированных двоичных файлов для соответствующего семейства процессоров. Src означает, что в пакете исходный код, а noarch сообщает, что пакет «не зависит от архитектуры». Такие пакеты обычно пишутся на интерпретируемых языках, например Perl или Python, или могут быть просто документацией.

Чтобы... Воспользуйтесь командой:
Вывести список всех установленных пакетов rpm -qa
Часто передается в ''grep'', чтобы найти заданные пакеты: rpm -qa | grep init
Показать информацию об установленном пакете rpm -qi initscripts
Показать файлы, входящие в состав установленного пакета rpm -ql initscripts
Выяснить, из какого пакета файл rpm -qf /usr/sbin/sshd
Найти зависимости («Что еще нужно для того, чтобы этот пакет работал?») rpm -qR openssh-server
Найти зависимые пакеты («Что сломается, если я удалю этот пакет?») rpm --whatrequires initscripts
Одни зависимости выводятся как имена пакетов, другие – как имена файлов, часто библиотек
Вывести сведения о еще не установленном пакете rpm -qip bzip2-1.0.3-3.i386.rpm
Установить пакет rpm -ivh bzip2-1.0.3-3.i386.rpm
Удалить пакет rpm -e openssh-server
Выяснить, изменились ли какие-то файлы пакета с момента его установки rpm --verify openssh-server
Персональные инструменты
купить
подписаться
Яндекс.Метрика