Для установки пакета достаточно выполнить команду в режиме установки, например:
rpm -i jikes-1.16-1.i386.rpm |
Однако, администраторы в основном предпочитают режим -U (--upgrade), так как это позволяет не задумываться о том, установлен ли такой пакет. Если пакет установлен, будет произведено его обновление, если не установлен - установка:
rpm -Uhv jikes-1.16-1.i386.rpm |
Для получения обратной связи используются предупреждения и вывод результата обработки ошибок, например:
warning: pyxf86config-0.3.1-2.i386.rpm: Header V3 DSA signature: NOKEY, key ID 897da07a |
В данном случае предупреждение говорит нам о том, что пакет подписан, но ключ не найден.
3.2.1.1 Установлен ли пакет?
Для быстрой проверки факта установки конкретного пакета используется простая форма запроса:
rpm -q jikes |
Утилита вернет информацию о том, что пакет установлен. Короткое имя пакета указывает на соответствующий rpm-файл. Для получения информации rpm обращается к БД RPM. Если же пакет не установлен, вернется примерно следующее:
package jikes is not installed |
3.2.1.2 Получение расширенной информации в процессе выполнения операций
Для получения большого количества диагностических сообщений можно использовать ключи -vv:
# rpm -Uhvv jikes-1.16-1.i386.rpm D: ============== jikes-1.16-1.i386.rpm |
Одна из редко используемых опций для получения обратной связи - опция --percent. Этот ключ заставляет rpm выводить на отдельных строках прогресс выполнения операции в процентах:
# rpm -U --percent jikes-1.16-1.i386.rpm %% 0.000000 |
Удобно забрать такой поток со стандартного вывода и использовать в другой программе, например для формирования прогресс-бара операции в графическом окне. Естественно, следует более или менее скептично относиться к десятичной разрядности данной формы вывода.
3.2.1.3 Процесс инсталляции в деталях
Для установки ПО из rpm-пакетов можно воспользоваться формой команды:
# rpm -U |
или
# rpm -i |
Производя установку пакета, rpm проходит следующие шаги:
- проверка пакета и файлов, входящих в него;
- выполнение пре-инсталляционных скриптов;
- распаковка файлов и копирование их в нужные локации;
- выполнение пост-инсталляционных скриптов;
- обновление базы данных RPM.
При проверке пакета rpm анализирует зависимости. Если функционирование программ и библиотек пакета зависит от других программ или библиотек, а они в системе отсутствуют, утилита завершит работу с выводом ошибки.
В дополнение к проверке зависимостей анализируются также конфликтные ситуации. Конфликт - это ситуация, когда требуется установить определенные файлы из пакета, а в системе имеются одноименные файлы более новых версий. Это может означать, что администратор желает установить пакет более старой версии, чем уже установленный.
После этих проверок (если они успешны) rpm выполняет пре-инсталляционные скрипты. Когда подготовительные работы закончены, начинается копирование файлов в систему.
Некоторые программные продукты требуют настройки после установки. Эта настройка часто производится с помощью пост-инсталляционных скриптов.
После завершения работы скриптов rpm обновляет БД RPM. Эта стадия важна для последующего отслеживания эволюций пакета.
3.2.1.4 Не хотите ли тест-драйв?
Опция --test позволяет администратору запустить rpm в тестовом режиме. При этом производится вся необходимая диагностика, но реальных операций по копированию (или удалению) файлов не происходит.
# rpm -U --test jikes-1.16-1.i386.rpm |
Такая команда не вернет ничего. Это означает, что все операции по установке пройдут нормально. Если есть проблемы, будет вывод ошибок. Например:
package jikes-1.16-1 is already installed |
Если целостность пакета нарушена, установка прервется с сообщением об ошибке:
chap4.txt: not an rpm package (or package manifest): |
Это сообщение было получено при попытке применить rpm к файлу, который не является rpm-пакетом.
Опция --test также позволяет получить список зависимостей, которые необходимо удовлетворить.
Зависимости пакетов могут быстро превратиться в кошмар администратора. Нужно поставить пакет, который зависит от другого пакета, который зависит от пяти пакетов... и так далее.
В простых случаях опция --test сильно облегчит задачу. Например, желательно установить пакет eruby-devel. Проверим зависимости:
# rpm -U --test eruby-devel-0.9.8-2.i386.rpm |
Диагноз:
error: Failed dependencies: eruby-libs = 0.9.8 is needed by eruby-devel-0.9.8-2 |
Данное сообщение содержит не только имя, но и версию пакета. Проверим его зависимости?
# rpm -U --test eruby-libs-0.9.8-2.i386.rpm error: Failed dependencies: ruby-libs >= 1.6.4 is needed by eruby-libs-0.9.8-2 libruby.so.1.6 is needed by eruby-libs-0.9.8-2 |
Этот короткий пример демонстрирует тот факт, что иногда имеет смысл протестировать возможность установки пакета.
3.2.1.5 Установка или обновление более одного пакета за раз
Все примеры выше по тексту использовались для иллюстрации работы rpm в отношении одного пакета. Однако утилита позволяет установить и список пакетов. Основной синтаксис следующий:
# rpm -U package1.rpm package2.rpm .. package100.rpm |
Опция --noorder требует не нарушать порядок установки пакетов из списка. По умолчанию rpm будет стремиться выстроить собственную последовательность для наилучшего удовлетворения взаимных зависимостей пакетов из списка. Обычно использование этой опции не является необходимостью.
3.2.1.6 Установка в директорию, отличную от заданной в пакете
Опции --prefix и --relocate служат для задания расположения файлов пакета в директории, не предусмотренной структурой директорий пакета. Однако, не все пакеты допускают подобную вольность. Синтаксис команды следующий:
# rpm -U --prefix /new/directory package.rpm или # rpm -i --relocate /old/directory=/new/directory package.rpm |
Опция --root позволяет установить пакет в каталог, который сам пакет будет считать каталогом /. Такой прием обычно используется для создания тестовых системных окружений.
Опция --dpath говорит rpm, что БД RPM находится в обычном месте расположения, /var/lib/rpm. Это необходимо, если используется виртуальная root-директория, а информация о пакетах используется из основной системы. Совместное использование опций --root и --dpath может породить проблемы зависимостей. Например, виртуальная -root-директория должна иметь все стандартные библиотеки С и С++, установленные в нее.
# rpm -U --root /tmp --dbpath /var/lib/rpm jikes-1.16-1.i386.rpm error: Failed dependencies: ld-linux.so.2 is needed by jikes-1.16-1 libc.so.6 is needed by jikes-1.16-1 libm.so.6 is needed by jikes-1.16-1 libstdc++-libc6.2-2.so.3 is needed by jikes-1.16-1 libc.so.6(GLIBC_2.0) is needed by jikes-1.16-1 libc.so.6(GLIBC_2.1) is needed by jikes-1.16-1 libc.so.6(GLIBC_2.1.3) is needed by jikes-1.16-1 |
Для указания rpm возможности переопределения путей для всех файлов пакета используется опция --badreloc. В обычном случае переопределяются только пути для файлов, отмеченных как "relocatable".
3.2.1.7 Форсированная установка
Ряд опций rpm используется для решения проблем установки, в частности, для обхода механизмов самой утилиты.
Опция --replacepkgs позволяет заменить (переустановить) пакет, который, возможно, уже установлен.
Опция --replacefiles предлагает rpm заменить файлы с совпадающими именами, но принадлежащие другому пакету.
С помощью опции --justdb можно обновить БД RPM, как будто бы новые файлы были установлены, но сами файлы не устанавливать.
Опция --nosuggest позволяет блокировать некоторые предположения rpm, сделанные в отношении состояния пакета, которые в другом случае могли бы привести к ошибкам неудовлетворенных зависимостей.
Опция --excludepath позволяет исключить из дерева файлов и каталогов пакета некоторые пути. Это позволит не устанавливать файлы, путь к которым совпадает с образцом.Например:
# rpm -U --excludepath /usr/lib eruby-devel-0.9.8-2.i386.rpm |
Эта команда установит все файлы пакета, кроме тех, в путевом имени которых есть /usr/lib.
Опция --allfiles заставит обновить все файлы пакета, независимо от того, имеются подобные файлы на жестком диске системы, или нет.
Опция --oldpackage поможет установить старую версию пакета поверх уже установленной более новой. Такая потребность может возникнуть, если новая версия имеет ошибки, или обновление версии какой-либо библиотеки приведет к неработоспособности зависящих от нее программ.
Опция --force является результатом совместного действия опций --replacepkgs, --replacefiles и --oldpackage.
Опция --nodeps заставляет rpm пропустить тест зависимостей и установить пакет в любом случае.
Не следует применять все эти опции кроме случаев, когда вы точно знаете, что делаете.
Одной из полезных возможностей является опция --aid. Если пакеты доступны (например, установка производится из директории, содержащей коллекцию пакетов), данный флаг заставит rpm добавить в список установки все зависимости всех пакетов, которые требуется установить. Если зависимости выдаются в виде имен файлов, а не пакетов, и в этом случае --aid сработает.
3.2.1.8 Пропуск скриптов
Одной из стадий процесса установки является выполнение пре- или пост- инсталляционных скриптов. Эти скрипты выполняются в определенное время установки при каждом запуске команды на установку для данного пакета, кроме случаев, когда администратор это явно запретил.
Опция --noscripts отменяет запуск всех скриптов, заданных файлом спецификации.
При необходимости степень контроля за выполнением скриптов можно увеличить. Опции --nopost и --nopre соответственно запрещают только постинсталляционные действия или только преинсталляционные операции.
Также --nopreun отменяет действия перед удалением пакета, --nopostun - действия после удаления.
В общем случае администратору нет никакой необходимости отменять работу скриптов.
Помимо скриптов rpm использует еще один интересный механизм, так называемые триггеры (обсуждаются в разделе 11). В процессе установки вы можете распорядиться отменить все триггеры, или определенные триггеры.
Опции:
--notriggers - отменяет все триггеры;
--notriggerin - отменяет все триггеры процесса инсталляции;
--notriggerun - отменяет все триггеры процесса удаления;
--notriggerpostun - отменяет все триггеры, работающие после удаления.
3.2.1.9 Счастье игнорирования
Rpm поддерживает некоторые опции, позволяющие игнорировать некоторые обстоятельства, которые в другом случае были бы учтены.
Например, весьма опасная опция --ignorearch позволяет установить в систему пакет чуждой архитектуры. Как правило, ничего хорошего это не сулит. Пакет для PowerPC, установленный на i386 систему не будет работать, в худшем случае будет опасен для системы.
Опция --ignoreos задает игнорирование операционной системы. В большинстве ситуаций это также не плодотворная идея. Но вдруг вам требуется запустить пакет, собранный для другого Линукса?
--ignoresize заставит rpm отказаться от проверки наличия достаточного свободного места на жестком диске.
--nodigest поможет пропустить проверку целостности пакета, а --nosignature - проверку подписи.
3.2.1.10 Документация? Какая документация?
Опция --excludedocs позволяет пропустить установку всех файлов пакета, которые помечены как документация. Может быть для какой-нибудь специальной установки вам надо сэкономить место на жестком диске? В противном случае, зачем использовать эту опцию?
Имеется также странноватая опция --includedocs, при ее наличии документация устанавливается. Поскольку это поведение по умолчанию, необходимость наличия данной опции сомнительна. Может, авторами двигали соображения фундаментальной симметрии Вселенной?
Далее - Режим обновления (upgrade)
Назад - Установка и обновление пакетов
Содержание