LinuxNews
Home Новости Документация Общение

Просмотр документа

 
Сегодня я предоставляю место на своих страницах второму основателю linux.irk.ru, Евгению 
Черкашину. Все, что ниже, практически не модифицировалось и не правилось мной, я этого не 
пробовал, в общем, я этот механизм (rpm) не знаю абсолютно 


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

         
Начнем с достоинств: 
Превосходный способ доставки. В добавок, возможность инсталляции по FTP. 
Удобная и быстрая установка программных продуктов. При этом нет необходимости сливать 
все во временный директорий. 
Проверка вашей системы на наличие компонент необходимых устанавливаемому пакету при 
инсталляции, т.е. 
Наличие определенных файлов, например командного интерпретатора bash для запуска 
скриптов установки и деинсталляции. 
Наличие необходимых библиотек и проверок их версий. 
Наличие необходимых пакетов, требуемых для данного. 
Простое удаление пакетов из системы. При этом осуществляется проверка наличия пакетов, 
функционирование которых зависит от удаляемого. 
Апгрейд (Upgrade) пакетов, с контролем версии (запрет дегрейда (Degrade)), и всего описанного 
ранее. 
Просмотр информации о пакете: что делает, кто сделал, где взять, содержимые файлы, и т.д. 
Есть много утилит, обеспечивающих пользовательский интерфейс. 
Существуют так называемые репозитории (хранилища) пакетов, с организованным в них 
поиском. 
Каждый пакет (установленный и нет) имеет свое место в иерархии, т.е. существует общая 
иерархия пакетов, с помощью которой просто определить что делает этот пакет. 
Обеспечивается возможность поиска к какому пакету относится данный файл или директорий. 
Комплексная проверка состояния пакетов в системе: что изменялось, что запортилось, что 
случайно удалили, и т.д. 
Недостатки: 
Большинство (но не все, например GNOME и IceWM) пакетов готовятся немного с 
запаздыванием. Особенно это относится к пакетам, хранящимся в репозитории Red Hat. Но, в 
основном, этот список хранит стабильные версии пакетов. 
Немного проблематично искать пакеты, которые необходимы для основного пакета. Если часть 
программного обеспечения поставляется вне 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-пакете. Обращу 
внимание только на ряд виртуальных файлов и директориев (они все пишутся большими 
буквами). 

HEADER - заголовок пакета, то, что получаете по rpm -qi .... Содержимое просматривается по 
F3. 
*INSTALL и *UPGRADE, если вы нажмете на них ввод, то Midnight Commander, 
соответственно, проинсталлирует или апргрейднет этот пакет. Заметьте, чрезвычайно удобно. 
/INFO - директорий с разнообразной информацией, тоже в виде файлов. (Разберитесь с ним 
сами). 
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 крутеет не только для запада! 


 
Подписка от Subscribe.RU
ваш e-mail для получения новостей
Поделитесь новостью
 

Copyright 1999 SWsoft, All rights reserved.
По всем вопросам обращайтесь по телефону (+7 095) 788-0705
или пишите нам по адресу: info@linuxnews.ru
SW Interactive