Зачем нужен rpm.
rpm (Redhat Package Manager) служит для работы с пакетами -- установка, удаление, проверка и т.д.
При установке пакета rpm записывает информацию о нем в свою базу данных, что и позволяет в дальнейшем удалять пакет, просматривать информацию о нем и т.д.
Такой подход к установке ПО имеет несколько достоинств, в частности:
- Унифицированная работа с разными пакетами (в частности, не надо помнить, куда какая-либо программа положила при инсталляции свои файлы -- постоянная головная боль в Dos/Windows).
- Отслеживание зависимостей между пакетами выполняется автоматически (не надо помнить, что программа такая-то требует некоей библиотеки с версией не ниже какой-то -- сравните с вечными проблемами, к примеру, с DirectX в Windows).
- Непротиворечивость между разными пакетами -- в частности, корректно "разводится" ситуация, когда несколько пакетов содержат один и тот же файл (например, в /etc/).
Режимы работы 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" позволяет вместо имени пакета указать какой-либо файл, принадлежащий этому пакету (см. ниже).
Можно указывать не один файл-пакета или пакет, а сразу несколько, разделяя их пробелами. http://www.rpm.org/
Получение информации
Команда 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
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
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: