Учебно-методические материалы для студентов кафедры АСОИУ

ЛР №8. Управление пакетами

Цель работы

Ознакомиться с основными принципами комплектации системы в дистрибутивах Linux на основе Red Hat Packet Manager (RPM) и научиться выполнять установку, удаление и обновление программного обеспечения.

Задания к работе

  1. Вывести полный список пакетов, установленных в системе (rpm -qa). Подсчитать общее количество пакетов, установленных в системе (rpm -qa | wc -l)
  2. Выбрать из общего списка все пакеты, имеющие в названии слово gnome (т.е. те пакеты, которые принадлежат интегрированной среде GNOME) и подсчитать их количество (rpm -qa |grep -i gnome | wc -l)
  3. Проверить, установлен ли в системе пакет mc (rpm-q mc) и получить расширенную информацию об этом пакете (rpm -qi mc)
  4. Вывести в файл список тех файлов, которые включены в пакет mc (rpm -ql mc)
  5. Вывести список зависимостей для этого пакета (rpm -qR mc)
  6. Выполнить имитацию удаления (НЕ УДАЛЕНИЕ!) пакета perl. Подсчитать количество пакетов, которые от него зависят (rpm -e --test perl &> f1; wc -l f1 – все задание в одной команде)
  7. Проверить, установлены ли в системе пакеты lynx, links и w3m.
  8. Выполнить установку пакета w3m (если не установлен)
  9. Выполнить имитацию установки пакетов (rpm -ivh - -test файл_пакета) httpd, vsftpd и webmin, проанализировать результаты (убедиться, что все зависимости удовлетворены)

Методические указания

  1. Дистрибутивы и форматы пакетов
  2. Программы управления пакетами

Дистрибутивы и форматы пакетов

Программы управления пакетами

Формат .tar

Формат .rpm

Менеджер пакетов rpm

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

Может быть выбран один из следующих основных режимов: Инициализация базы данных, Перестроение базы данных, Сборка пакетов, Перекомпиляция пакетов, Сборка пакетов из tar-архивов, Запрос, Показ полей запроса, Установка, Обновление, Удаление, Проверка установки, Проверка подписи, Повторная подпись, Добавление подписи, Установка владельцев и групп и Показ конфигурации.

ОБЩИЕ ОПЦИИ

Эти опции могут быть использованы во всех режимах работы.

-vv
Выводить много отладочной информации.
--quiet
Выводить как можно меньше сообщений - как правило, выводятся только сообщения об ошибках.
--help
Вывести более детальную, чем обычно, справку об использовании rpm.
--version
Вывести одну строку, содержащую номер версии используемого rpm.
--rcfile <список-файлов>
Каждый файл из разделенного двоеточиями <списка-файлов> последовательно читается rpm на предмет конфигурационной информации. По умолчанию <список-файлов> выглядит как /usr/lib/rpm/rpmrc:/etc/rpmrc:~/.rpmrc. В этом списке обязан существовать только первый файл; все тильды будут заменены значением переменной среды $HOME.
--root <каталог>
Использовать для всех операций файловую систему с корнем в <каталоге>. Обратите внимание, что это значит, что база данных также будет читаться и модифицироваться в <каталоге>, а все pre и post скрипты будут исполняться после chroot() в <каталог>.
--dbpath <каталог>
Использовать базу данных RPM, расположенную в <каталоге>.
--justdb
Обновить только базу данных, не затрагивая файловую систему.
--nowait-lock
Не ждать освобождения блокировки базы данных пакетов.
--ftpproxy <хост>
Использовать <хост> как FTP-прокси. См. ОПЦИИ FTP/HTTP.
--ftpport <порт>
Использовать <порт> как FTP порт прокси-сервера. См. ОПЦИИ FTP/HTTP.
--httpproxy <хост>
Использовать <хост> как HTTP-прокси. См. ОПЦИИ FTP/HTTP.
--httpport <порт>
Использовать <порт> как FTP или HTTP порт прокси-сервера. См. ОПЦИИ FTP/HTTP.
--pipe <cmd>
Перенаправить вывод rpm на вход команды <cmd>.

ОПЦИИ УСТАНОВКИ И ОБНОВЛЕНИЯ

Общая форма команды установки пакетов выглядит так:

rpm -i [опции-установки] <файл_пакета>+

Такая команда устанавливает новые пакеты. Общая форма команды обновления пакетов выглядит так:

rpm -U [опции-установки] <файл_пакета>+

Такая команда производит обновление установленных пакетов. Работа этой команды полностью аналогична работе команды установки за исключением того, что все остальные версии пакетов удаляются из системы.

rpm [-F|--freshen] [опции-установки] <файл_пакета>+

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

Допускается задание <файл_пакета> в виде адресов ftp или http. В этом случае перед установкой файл будет получен с сервера, указанного в URL. См. ОПЦИИ FTP/HTTP на предмет информации о встроенной поддержке FTP/HTTP.

--force
То же, что и комбинация --replacepkgs, --replacefiles и --oldpackage.
-h, --hash
Выводить знаки "#" по мере распаковки архива с пакетом. Количество печатаемых знаков рассчитывается при запуске rpm исходя из характеристик выходного потока с тем, чтобы совместно с именем пакета выводимая информация про каждый пакет занимала ровно одну строку. Используется совместно с -v для улучшения восприятия.
--oldpackage
Позволяет заменить новый пакет на более старый при обновлении (откатиться назад, на предыдущую версию).
--percent
Выводить процент готовности по мере распаковки архива с пакетом. Задумано для облегчения использования rpm из других утилит.
--fancypercent
Выводить "живой процент" готовности по мере установки пакета (полезно вместе с -h).
--replacefiles
Устанавливать пакеты, даже если они перепишут файлы из других, уже установленных пакетов.
--replacepkgs
Устанавливать пакеты, даже если некоторые из них уже установлены в системе.
--allfiles
Устанавливать или обновлять все файлы, определенные как "missingok", даже если они уже существуют.
--nodeps
Не проверять зависимости перед установкой или обновлением пакета.
--noscripts
Не исполнять пре- и пост-установочных скриптов.
--notriggers
Не исполнять триггер-скриптов, активируемых при установке данного пакета.
--ignoresize
Не проверять файловую систему на наличие достаточного свободного места перед установкой этого пакета.
--excludepath <путь>
Не устанавливать файлы, чьи имена начинаются с <пути>.
--excludedocs
Не устанавливать никаких файлов, отмеченных при сборке пакета как файлы документации.
--includedocs
Устанавливать файлы документации. Это поведение по умолчанию.
--test
Не устанавливать пакет, просто проверить возможность установки и сообщить о возможных проблемах.
--ignorearch
Произвести установку или обновление, даже если архитектуры бинарного RPM и машины не совпадают.
--ignoreos
Произвести установку или обновление, даже если операционные системы бинарного RPM и машины не совпадают.
--prefix <путь>
Для переместимых пакетов: установить префикс установки в <путь>.
--relocate <старый_путь>=<новый_путь>
Для переместимых пакетов: преобразовывает файлы, которые должны были бы быть установлены в <старый_путь>, в <новый_путь>.
--badreloc
Для использования вместе с --relocate; производит перемещение, даже если пакет не является переместимым.
--noorder
Не переупорядочивать список устанавливаемых пакетов. Обычно список переупорядочивается для удовлетворения зависимостей.

ОПЦИИ ЗАПРОСА

Общая форма команды запроса (инспекции) выглядит так:

rpm -q [опции-запроса]

Можно задать формат, в котором будет выводиться информация о пакете. Для этого используется опция --queryformat с последующей строкой формата.

Форматы запроса представляют собой модифицированную версию стандартного форматирования printf. Формат состоит из статических строк (которые могут включать стандартные escape-последовательности C для переводов строки, табуляций и других специальных символов) и форматов по типу используемых в printf(3). Так как rpm уже знает типы данных, подлежащих выводу, спецификаторы типов должны быть опущены и заменены именами тэгов(ключей) заголовков, подлежащих выводу, заключенными в {}. Часть имени тэга RPMTAG_ может быть опущена.

Альтернативные форматы вывода могут быть заданы путем добавления к имени тэга :typetag. В настоящее время поддерживаются следующие типы: octal, date, shescape, perms, fflags и depflags.

Например, для вывода только названий запрашиваемых пакетов, можно использовать в качестве строки формата %{NAME}. Для вывода названий пакетов и информации о дистрибутиве в две колонки можно использовать %-30{NAME}%{DISTRIBUTION}.

Будучи запущенным с аргументом --querytags, rpm выведет список всех тэгов, которые можно использовать в строке формата.

Есть два набора опций для запроса - выбор пакетов и выбор информации.

Опции выбора пакетов:

<название_пакета>
Запросить установленный в системе пакет с именем <название_пакета>.
-a, --all
Запросить все установленные в системе пакеты.
--whatrequires <сервис>
Запросить все пакеты, требующие <сервис> для правильного функционирования.
--whatprovides <сервис>
Запросить все пакеты, предоставляющие <сервис>.
-f <файл>, --file <файл>
Запросить пакеты, которым принадлежит <файл>.
-g <группа>, --group <группа>
Запросить пакеты, входящие в<группу>.
-p <файл_пакета>
Запросить (не инсталлированый) <файл_пакета>. Файл <файл_пакета> может быть задан как адрес ftp или http; в этом случае заголовок пакета будет получен с указанного сервера. См. ОПЦИИ FTP/HTTP на предмет встроенной поддержки FTP/HTTP.
--specfile <spec-файл>
Разобрать и запросить <spec-файл> так, как если бы это был пакет. Хотя не вся информация (например, списки файлов) доступна, этот тип запроса позволяет использовать rpm для извлечения информации из spec-файлов без необходимости написания парсера spec-файлов.
--querybynumber <номер>
Запросить непосредственно запись базы данных под указанным <номером>. Может быть полезно для отладочных целей.
--triggeredby <пакет>
Запросить все пакеты, содержащие триггер-скрипты, активируемые <пакетом>.

Опции выбора информации:

-i
Вывести информацию о пакете, включая название, версию и описание. Использует --queryformat, если таковой задан.
-R, --requires
Вывести список пакетов, от которых зависит данный пакет.
--provides
Вывести список сервисов, предоставляемых данным пакетом.
--changelog
Вывести протокол изменений данного пакета.
-l, --list
Вывести список файлов, входящих в данный пакет.
-s, --state
Вывести состояние файлов в пакете (подразумевает -l). Каждый файл может находиться в одном из следующих состояний: нормальный, не установлен или заменен.
-d, --docfiles
Вывести список только файлов документации (подразумевает -l).
-c, --configfiles
Вывести список только конфигурационных файлов (подразумевает -l).
--scripts
Вывести специфические для данного пакета скрипты, используемые как часть процессов инсталляции/деинсталляции, если таковые есть.
--triggers, --triggerscripts
Показать все триггер-скрипты, если таковые имеются, содержащиеся в пакете.
--dump
Вывести информацию о файлах следующим образом: path size mtime md5sum mode owner group isconfig isdoc rdev symlink. Эта опция должна использоваться в сочетании с по меньшей мере одной из опций -l, -c, -d.
--last
Упорядочить список пакетов по времени установки таким образом, что наиболее свежие пакеты находятся в верху списка.
--filesbypkg
Показать все файлы в каждом пакете.
--triggerscripts
Показать все триггер-скрипты для выбранных пакетов.

ОПЦИИ ПРОВЕРКИ

Общая форма команды проверки выглядит так:

rpm -V|-y|--verify [опции-проверки]

В процессе проверки пакета информация об инсталлированных файлах пакета сравнивается с информацией из оригинального пакета из базы данных RPM. В числе прочих, проверяется размер, контрольная сумма MD5, права доступа, тип, владелец и группа каждого файла. Все несоответствия докладываются. Опции выбора пакетов такие же, как и для запроса (инспекции) пакетов.

Файлы, которые не устанавливались из пакета (например, файлы документации, которые были исключены из процесса инсталляции при помощи опции "--excludedocs"), молча игнорируются.

Опции, которые могут быть использованы в процессе проверки:

--nofiles
Игнорировать отсутствующие файлы.
--nomd5
Игнорировать ошибки проверки контрольной суммы MD5.

Форматом вывода является строка из восьми символов, возможный символ "c", указывающий на конфигурационный файл, и имя файла. Каждый из восьми символов показывает результат сравнения одного из атрибутов файла со значением, записанным в базе данных RPM. Точка обозначает, что тест прошел успешно. Следующие символы говорят об ошибках некоторых тестов:

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

Общая форма команды удаления (деинсталляции) выглядит так:

rpm -e <название_пакета>+

--allmatches
Удалить все версии пакета, отвечающие <названию_пакета>. Обычно, если <название_пакета> отвечает нескольким пакетам, выдается сообщение об ошибке и удаление не производится.
--noscripts
Не исполнять пре- и пост-установочные скрипты.
--notriggers
Не исполнять триггер-скриптов, активируемых при удалении данного пакета.
--nodeps
Не проверять зависимостей перед удалением пакетов.
--test
Не производить удаления, только сделать вид. Полезна в сочетании с опцией -vv.

Формат .deb

CC-BY-CA Анатольев А.Г., 11.01.2013