Операционные системы - статьи

         

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


,

Привет! Теперь и я решил написать кое-что изученное мной. А именно как пользоваться одной из самых важных утилит дистрибьюшена . Пакет предназначен для упрощения установки и убивания других программных продуктов (будем называть их пакетами (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 прямо с замечательного сайта (качка достигает 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, есть русский перевод в разделе документации на .

    Опции: 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

    или еще круче (замечание ) 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+-ные программки. Признаюсь честно - я их смотрел мельком. Информацию о них смотрите на .


    Содержание раздела