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

Черкашин Евгений, linux.irk.ru

Привет! Теперь и я решил написать кое-что изученное мной. А именно как пользоваться одной из самых важных утилит дистрибьюшена Red Hat X.X - пакета RPM (Red Hat Package manager). Пакет предназначен для упрощения установки и убивания других программных продуктов (будем называть их пакетами (packages) а RPM - RPMмом!), соответствующим образом оформленных (что-то вроде инсталлятора и деинсталлятора в Виндах, только круче). Прежде всего хочу сказать какие достоинства и недостатки таит его использование.

Начнем с достоинств:

Недостатки:

Если кто-то хочет еще добавить - это не возбраняется.

Итак, по-порядку...

Все пакеты имеют расширение .rpm. Их по содержимому, как обычно, можно разделить на два класса: пакеты с программами в двоичном коде, и пакеты с исходным кодом. Имя пакета задается следующим образом: "имя-программы"-"версия"-"релиз"."платформа или src".rpm, например недавний релиз IceWM называется так: icewm-0.9.25-1.i386.rpm, т.е. icewm версии 0.9.25, релиз первый, для платформы PC-x86. Добавлю, что необходимо смотреть для каких библиотек он скомпилирован (определяется по имени поддиректория, откуда был выкачен, например ./RPMS/..../i386/libc6/icewm...., icewm для библиотек libc6 (glibc2 ?) (для RedHat не меньше 5.0 пойдет). Я еще чайник здесь.). RPMS - имя директория с двоичными пакетами, именно в нем надо искать бинары. Сырцы (исходный код) в большинстве репозиториев лежат в SRPMS (с буквой "S" в начале), т.е. исходники icewm 0.9.25 будут лежать в файле .../SRPMS/icewm-0.9.25-1.src.rpm.

Рассмотрим подробнее первый класс, хотя большинство, а именно 57% линуксоидов инсталлирует с сырцов.

Для начала рассмотрим самый "сложный" вариант - работа с rpm в командной строке. Чтобы проинсталлировать пакет наберите команду:

bash$ rpm -i "полное имя пакета"

но лучше, используя icewm для примера, набрать

bash$ rpm -ivh icewm-0.9.25-1.i386.rpm

а еще лучше, чтобы учесть возможный апгрейд (если у вас инсталлирован пакет ранней версии):

bash$ rpm -Uvh icewm-0.9.25-1.i386.rpm

Здесь используются следующие опции: i - install package (установить пакет), U - upgrade package (апгрейд пакета). vh - для статус бара и дополнительной информации. Опция U делает не только апгрейд, если установлена старая версия, но и осуществляет установку пакета, если его нет вообще. Я пользуюсь именно -Uvh.

Можно, например, запустить

bash$ rpm -Uvh ftp://sf.irk.ru/pub/linux/redhat-5.2/i386/RPMS/apache-1.3.3-1.i386.rpm

(за точность воспроизведения не ручаюсь) тогда вы проинсталлируете Apache прямо с замечательного сайта Thora Ablestara (качка достигает 10kbps). Если надо установить проксю используются дополнительные опции.

Если установка завершена успешно то rpm ни чего не ответит, иначе выругает(ся). Если этому пакету что-то еще нужно, не беспокойтесь он [rpm] вам скажет.

Замечу еще, иногда бывает необходимо использовать как новую так и старую библиотеки, например для старого GIMP и нового GNOME с еще недоразвитыми библиотеками. В этом случае используйте -ivh опции для нового пакета. Таким образом у вас будут обе программы работать, и места в два раза больше затрачено, но при этом старая библиотека будет цела и невредима.

Если в системе уже были какие-то файлы, с теми же именами, что и в пакете, то rpm сохраняет их как .rpmsave файлы, что экономит ваши усилия по настройке.

Кстати, если вы используете Midnight Commander (mc), то вместо имени файла можно писать %f и установить курсор на сам файл. Более того mc обеспечивает специальный сервис для .rpm и .deb (Debian) пакетов. Об этом позже.

Удаление пакетов из системы осуществляется так же просто.

bash$ rpm -e apache

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

Если вам не нравятся сообщения, что то или се нельзя удалять или инсталлировать, то можно попробовать добавить опцию --force. Она полезна для переинсталляции пакета, так как rpm не хочет заново инсталлировать тот же самый пакет, если не настоять таким образом ;-). Или есть еще более крутые меры воздействия и убеждения (полезны особенно при потере информации об установленных пакетах. Бывает и такое.): --nodeps - не проверять зависимости и --replacefiles - заменять все старые файлы на новые не переименовывая их в .rpmsave.

Как узнавать информацию о пакете. Я пользуюсь Midnight Commanderом для этого (подождите, см. ниже), но этот способ не приемлем для FTP (требует полной закачки файла). Здесь я научился набирать

bash$ rpm -qpi FTP://sf.irk.ru/......./apache-1.3.3-1.i386.rpm

и подождав 5 сек получаю всю необходимую информацию

Name        : apache                      Distribution: Manhattan
Version     : 1.3.3                             Vendor: Red Hat Software
Release     : 1                             Build Date: Tue Oct 13 16:08:03 1998
Install date: (not installed)               Build Host: porky.redhat.com
Group       : Networking/Daemons            Source RPM: apache-1.3.3-1.src.rpm
Size        : 1980776                          License: Freely distributable and usable
Packager    : Red Hat Software
Summary     : Leading World Wide Web server
Description :
Apache is a full featured web server that is freely available, and also
happens to be the most widely used.

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

bash$ rpm -qpl FTP://sf.irk.ru/......./apache-1.3.3-1.i386.rpm

и получаю

/etc/httpd/conf
/etc/httpd/conf/access.conf
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/magic
/etc/httpd/conf/srm.conf
/etc/httpd/logs
/etc/httpd/modules
...................
/usr/sbin/ab
/usr/sbin/httpd
/usr/sbin/logresolve
/usr/sbin/rotatelogs
/var/cache/httpd
/var/log/httpd

и т.д. (в смысле другую информацию). Найти другие опции можно или набрав rpm, man rpm или RPM-HOWTO.XXX, есть русский перевод в разделе документации на www.linux.org.ru.

Опции: q - query (запрос), p - package (пакет), i - information (информация), l - file list. Все очевидно как в раю.

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

bash$ rpm -qi apache

узнает все об проинталлированом Апаче.

Теперь рассмотрим как узнать установлен ли данный пакет и как проверить интегрированность системы.

Сначала, например мы хотим узнать установлен ли в нашей системе IceWM.

bash$ rpm -q icewm
icewm-0.9.25-1

Как видно он у меня есть IceWM версии 0.9.25, релиз 1. А теперь хотим узнать из какого пакета мы получили файл mc

bash$ whereis mc
mc: /usr/bin/mc /usr/lib/mc /usr/man/man1/mc.1
bash$ rpm -qf /usr/bin/mc
mc-4.5.3-1

или еще круче (замечание Anton Dzubenko)

bash$ rpm -qf `whereis mc`

Теперь проверим все ли файлы Midninght Commanderа в порядке:

bash$ rpm -V mc
Unsatisfied dependencies for mc-4.5.3-1: pam >= 0.59,
/sbin/chkconfig  , ld-linux.so.2, libc.so.6, libgpm.so.1,
libm.so.6, libncurses.so.4, libslang.so.0, /bin/sh,
/usr/bin/perl
S.5....T   /usr/lib/mc/mc.ext

Исходя из этой информации нарушены некоторые зависимости, а именно нет пакета pam, версией больше 0.59, и ряда других файлов. Сие обидно, конечно, но недавно произошел сбой на моей машине и потерялась информация об инсталлированных пакетах. Поэтому на эту информацию я не обращаю (сейчас) большого внимания, а вот последняя строчка говорит мне о том, что файл /usr/lib/mc/mc.ext с глобальными настройками был мной модифицирован, это сообщают мне буквы S - size (размер файла), 5 - MD5 сумма (что-то вроде CRC?), T - time (время). Есть и другие буквы. Если с файлом все в порядке (информация о котором совпадает с информацией в ресурсном файле) то он на экран не выводится.

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

bash$ rpm -Va
Unsatisfied dependencies for tetex-latex-0.9-6: tetex = 0.9, /bin/sh  , /bin/sh
.M......   /usr/share/texmf/tex/generic/xypic/xylatex.ini
S.5....T   /usr/share/texmf/web2c/elatex.efmt
S.5....T   /usr/share/texmf/web2c/elatex.log
S.5....T   /usr/share/texmf/web2c/latex.fmt
S.5....T   /usr/share/texmf/web2c/latex.log
S.5....T   /usr/share/texmf/web2c/pdflatex.fmt
S.5....T   /usr/share/texmf/web2c/pdflatex.log
Unsatisfied dependencies for tetex-russian-2.0-6: /bin/sh  , tetex >= 0.9, patch
..5.....   /usr/share/texmf/fonts/source/lh/base/lypseudo.mf
..5.....   /usr/share/texmf/fonts/source/lh/base/nodraw.mf
..5.....   /usr/share/texmf/tex/latex/cyrsam/antiqua.fd
..5.....   /usr/bin/gyahtzee
..5.....   /usr/bin/mahjongg
..5.....   /usr/bin/same-gnome
..5..... c /etc/X11/wmconfig/printtool
.M......   /usr/lib/libImlib.so.1
.M......   /usr/lib/libgdk_imlib.so.1

Что ж вы сделали? ... А вы проверили (V - verify) все (a - all) пакеты, установленные в системе.

Это конечно не все, что может rpm, но самое основное, чем я, лично, пользуюсь.

Теперь несколько слов, как я и обещал, об программках, работающих с rpm

Midnight Commander - замечательная системка, позволяет просматривать .rpm и .deb пакеты как поддиректории файловой системы, для этого надо только нажать ввод на rpm-пакете. Обращу внимание только на ряд виртуальных файлов и директориев (они все пишутся большими буквами).

glint - спецпрограммка для X-ов, непосредственно предназначена для управлением rpmмом. Она отображает пакеты в виде иерархии (как установленные, так и директорий с неустановленными пакетами). Входит в стандартный дистрибьюшн Red Hat.

purp - ncursers-ный tty-шный пакет, удобен для удаления ненужных пакетов не запуская X-ы. Тоже отображает иерархию.

grpm,gtkrpm - GTK+-ные программки. Признаюсь честно - я их смотрел мельком. Информацию о них смотрите на www.gnome.org.

Где и Как искать эти самые rpm-ы?

Если вам нужны стабильные, качественные и, самое главное, проверенные профессионалами RedHat пакеты берите их на ftp://contrib.redhat.com, но с 15 января сие будет доступно на ftp://sf.irk.ru, наверняка в директории contrib.

Есть на http://rufus.w3.org/linux/RPM просто огромный репозиторий (43Гб). Там же есть замечательная программка rpmfind, которая ищет пакеты для вас в этом репозитории, и даже загружает их для вас в директорий /tmp. Пример:

bash$ rpmfind -q -latest icewm

- найти последний IceWM.

Кроме того rpm-ы можно найти на Home-сайтах проектов, обычно по мимо .tgz выставляются и rpmы.

Вопрос "Что делать, если информация об установленных пакетах потеряна?" я оставлю открытым. Порекомендую лишь сохранять время от времени файлы директория /var/lib/rpm. А если вдруг это случилось, то при инсталляции используйте опции --nodeps, --replacefiles.

Последнее. Если у вас настроена русская локаль, как писал уважаемый Мультик, то большую часть сообщений rpm выдает на русском И еще, меня очень удивило, что GNOME-0.99.X и программа LYX уже русифицированы! Так, что Linux крутеет не только для запада!

Если есть вопросы пишите мне, так как Вячеслав пользуется Slackware-3.6, а он, если не сделать

bash$ rpm --initdb

RPM-ов не понимает. (;-)))) от Вячеслава)

Да! И еще не забывайте проверять букву p в слове rpm, а то можно будет внезапно огорчиться.

Вот еще одно. Я чаще всего использую следующие пакеты:

Если вы хотите узнать мое мнение (пока еще чайника) о том что это и как это можно использовать, напишите мне и мы подискутируем на страницах IrkLUG!

12.01.1999