<< Предыдущий раздел | /\ Содержание | >> Следующий раздел

Зачем нужен rpm

Как уже упоминалось в разделе "Добавление и удаление пакетов", rpm (Redhat Package Manager) служит для работы с пакетами -- установка, удаление, проверка и т.д.

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

Такой подход к установке ПО имеет несколько достоинств, в частности:

Режимы работы rpm

Если вызвать rpm без параметров, то он покажет "краткий" список ключей. Обычно же формат вызова rpm такой:

rpm -КлючРежима [дополнительные ключи] [параметры]

КлючРежима, указываемый первым, определяет режим работы. Самые частоиспользуемые режимы перечислены в таблице.

Основные варианты вызова rpm
Команда Назначение
rpm -i файл-пакета.rpm Установка пакета (install)
rpm -U файл-пакета.rpm Обновление пакета (Upgrage)
rpm -e пакет Удаление пакета (erase)
rpm -q пакет Получение информации (query)
rpm -y пакет Проверка пакета (verify)
rpm -b Создание пакета .rpm из .src.rpm (build); здесь не рассматривается

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

Ключи и параметры, общие для разных режимов

В аргументах обычно используется два варианта ссылок на пакеты.

Имя-файла-пакета.rpm для режимов -i и -U -- это полное (с директорией) имя файла. Например, ~/RPMS/apache-1.3.3-1.i386.rpm. В принципе, rpm понимает имена файлов в виде ftp-URL, т.е. ftp://сервер/директория/файл.rpm, но ими имеет смысл пользоваться только в быстрой и надежной сети (в нашей стране -- в локальной). Впрочем, в локальной сети (и любой быстрой) удобнее пользоваться NFS-сервером, если он есть.

Пакет -- это имя уже установленного пакета для режимов -e, -q и -y. Оно может указываться как с номером версии, так и без него. Примеры: acroread-3.01-4, acroread. Если вместо списка пакетов указать ключ "-a" (all), то это будет означать "все пакеты". Кроме того, ключ "-f" позволяет вместо имени пакета указать какой-либо файл, принадлежащий этому пакету (см. ниже).

Можно указывать не один файл-пакета или пакет, а сразу несколько, разделяя их пробелами.

Получение информации

Команда rpm -q позволяет получать следующую информацию о пакете:

Просто "rpm -qимя-пакета" выдает полное название пакета, вместе с версией:

bobby:~% rpm -q gcc
gcc-2.7.2.3-14
bobby:~% _

Но чаще всего команда "rpm -q" используется для получения списка файлов пакета.

Краткая информация о пакете -- rpm -qi


Команда "rpm -qi" (info) выдает сводку информации о пакете -- название, версия, объем и т.д., плюс краткую аннотацию:

bobby:~% rpm -qi xjewel
Name        : xjewel                      Distribution: Manhattan
Version     : 1.6                               Vendor: Red Hat Software
Release     : 9                             Build Date: Thu Aug 13 05:51:53 1998
Install date: Wed Dec  9 21:00:59 1998      Build Host: porky.redhat.com
Group       : X11/Games/Video               Source RPM: xjewel-1.6-9.src.rpm
Size        : 50289                            License: MIT
Packager    : Red Hat Software <[email protected]>
Summary     : Game like Sega's columns
Description :
Jewel is a game much like Domain/Jewelbox which is a puzzle game like
Tetris.

It is played by controling the motion of blocks which continue to fall from
the top of the screen.  One can move them left and right, as well as
rotate the jewel segements.  The object is to get the most points before
the grim reaper ends the fun.
bobby:~% _

Список файлов пакета -- rpm -ql


Для получения списка файлов используется ключ "-l" (list):

bobby:~% rpm -ql xjewel
/etc/X11/wmconfig/xjewel
/usr/X11R6/bin/xjewel
/usr/X11R6/man/man1/xjewel.1x
/var/lib/games/xjewel.scores
bobby:~% _

Поскольку некоторые пакеты содержат очень большое количество файлов, то стоит отправлять вывод от rpm -ql команде less:

rpm -ql gcc | less

Для получения "полной" информации о пакете (аннотации и списка файлов) можно указать ключи "-i" и "-l" одновременно:

bobby:~% rpm -qil xjewel
Name        : xjewel                      Distribution: Manhattan
Version     : 1.6                               Vendor: Red Hat Software
Release     : 9                             Build Date: Thu Aug 13 05:51:53 1998
Install date: Wed Dec  9 21:00:59 1998      Build Host: porky.redhat.com
Group       : X11/Games/Video               Source RPM: xjewel-1.6-9.src.rpm
Size        : 50289                            License: MIT
Packager    : Red Hat Software <[email protected]>
Summary     : Game like Sega's columns
Description :
Jewel is a game much like Domain/Jewelbox which is a puzzle game like
Tetris.

It is played by controling the motion of blocks which continue to fall from
the top of the screen.  One can move them left and right, as well as
rotate the jewel segements.  The object is to get the most points before
the grim reaper ends the fun.
/etc/X11/wmconfig/xjewel
/usr/X11R6/bin/xjewel
/usr/X11R6/man/man1/xjewel.1x
/var/lib/games/xjewel.scores
bobby:~% _

Какому пакету принадлежит файл


Часто возникает необходимость узнать, какому пакету принадлежит какой-то файл (например, чтобы знать, где искать к нему документацию). Для этого можно воспользоваться ключом "-f" (file):

bobby:~% rpm -qf /etc/dosemu.users
dosemu-0.98.1-2
bobby:~% _

При этом надо указывать полное имя файла -- с директорией. Кроме того, если к файлу есть "несколько путей" (из-за символьных линков на директории), то следует указывать "основной" (обычно тот, который без символьных линков), иначе rpm не сможет дать ответ:

bobby:~% ls -ld /usr/X11 /usr/X11R6
lrwxrwxrwx   1 root     root            5 Dec  9 20:44 /usr/X11 -> X11R6
drwxr-xr-x   8 root     root         1024 Jan 19 05:14 /usr/X11R6
bobby:~% rpm -qf /usr/X11/lib/X11/app-defaults/GV
file /usr/X11/lib/X11/app-defaults/GV is not owned by any package
bobby:~% rpm -qf /usr/X11R6/lib/X11/app-defaults/GV
gv-3.5.8-5
bobby:~% _

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

rpm -qif /etc/zshenv
и

rpm -qi zsh
эквивалентны.

А как там назывался пакет...


Иногда возникает такая ситуация: примерно помнишь, как назывался некий пакет, но только примерно (а мало ли где в имени были заглавные буквы, где маленькие, где дефисы...). В этой ситуации можно заставить rpm выдать список всех пакетов (ключ "-a") и найти нужное при помощи grep. Пример ("как назывались пакеты, содержащие netscape?"):

bobby:~% rpm -qa | grep netscape
netscape-communicator-4.08-1
netscape-common-4.08-1
bobby:~% _

Другой пример ("к чему там относится afterstep?"):

bobby:~% rpm -qa | grep -i after
AfterStep-1.5-0.7
AfterStep-APPS-1.5-0.3
bobby:~% _

Где же был этот файл...


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

Вместо того, чтобы делать поиск по всему диску (что очень долго), можно заставить rpm выдать список файлов всех пакетов (ключ "-al") и отфильтровать нужное при помощи grep. Пример ("где там был файл с параметрами разных мониторов?"):

bobby:~% rpm -qal | grep -i monitors
/usr/X11R6/share/Xconfigurator/MonitorsDB
/usr/X11R6/lib/X11/doc/Monitors
bobby:~% _

Искомый файл в данном примере -- второй.

Информация о неинсталлированном пакете


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

Получить информацию о содержимом .rpm-файла можно, если вместо имени пакета указать ключ "-p" (package) и полное имя .rpm-файла, содержащего пакет. Пример:

bobby:~% rpm -qip /net/rdist/dist/contrib/libc6/i386/x11amp-0.65r2-1.i386.rpm
Name        : x11amp                      Distribution: (none)
Version     : 0.65r2                            Vendor: (none)
Release     : 1                             Build Date: Fri Mar 13 16:09:25 1998
Install date: (not installed)               Build Host: fallenAngel.intrak.tuke.sk
Group       : X11/Applications              Source RPM: x11amp-0.65r2-1.src.rpm
Size        : 349571                           License: Not GPL, please read http:
//www.x11amp.ml.org/source.html
Summary     : mp3 player for X windows
Description :
This player will have the same features as the original winamp from Windows
95 but it will of course feature some specials only available for the linux
version. Some features that are already included are: Nice file requester,
Seeking in files, Volume/Balance, Shuffle play, Repeat play, Playlist
editor, Spectrum Analyzer, Realtime Playing.
bobby:~% _

Чего требует пакет -- rpm -qR


Ключ "-R" (Requirements) позволяет узнать, какие пакеты и библиотеки требуются пакету. Особенно часто это требуется перед установкой пакета. Пример:

bobby:~% rpm -qRp /net/rdist/dist/contrib/libc6/i386/x11amp-0.9-alpha2-2.i386.rpm
gtk+ >= 1.1.13
ld-linux.so.2
libX11.so.6
libXext.so.6
libc.so.6
libdl.so.2
libgdk-1.1.so.13
libglib-1.1.so.13
libgmodule-1.1.so.13
libgtk-1.1.so.13
libm.so.6
libpthread.so.0
libx11amp.so.0
bobby:~% rpm -q gtk+
gtk+-1.0.6-3
bobby:~% _

В вышеприведенном примере видно, что данный пакет установить не удастся, как минимум потому, что установленная версия пакета gtk+ слишком старая.

Проверка

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

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

Сравниваются следующие параметры:

5
Контрольная сумма (подсчитанная по алгоритму MD5)
S
Размер файла
L
Куда указывает символьный линк (если проверяемый файл является симлинком)
T
Время модификации
D
Устройство (раздел), на котором расположен файл
U
Владелец
G
Группа-владелец
M
Права доступа

Проверку лучше выполнять как "root", так как некоторые файлы (например, /usr/X11R6/bin/xterm) могут быть недоступны на чтение другим пользователям и для них всегда будет выдаваться несовпадение по контрольной сумме.

Пример:

bobby:~# rpm -y setup
S.5....T c /etc/exports
S.5....T c /etc/printcap
S.5....T c /etc/securetty
S.5....T c /etc/services
bobby:~# _

Как видно из этого примера, в некоторых файлах обязательно будут отличия, поскольку тот же /etc/passwd изменяется при создании и изменении пользователей.

Аналогично команде rpm -q, rpm -y можно вместо имени пакета указывать "-f файл" или "-a".

Команда rpm -ya полезна для проверки всей системы, но ее исполнение занимает много времени.

Замечание
Иногда в документации вместо "-y" указывается "-V" (Verify) -- эти два ключа эквивалентны.

Где еще брать информацию про rpm

Основные сведения содержатся в man-странице по rpm. Кроме того, с системой поставляется "HOWTO" документация --

/usr/doc/HOWTO/other-formats/html/RPM-HOWTO.html

Самое лучшее справочное пособие по rpm -- книга Ed Bailey "Maximum RPM". Она есть в электронном виде на сайте rpm:

http://www.rpm.org/


<< Предыдущий раздел | /\ Содержание | >> Следующий раздел