headermask image

Notice: Undefined variable: t in /var/www/user97185/data/www/system-administrators.info/yandex-ad.php on line 15

Notice: Undefined variable: r in /var/www/user97185/data/www/system-administrators.info/yandex-ad.php on line 15
Рекомендую: Фриланс-биржа | Кэшбэк-сервис | Интернет-бухгалтерия

LPI 101: Установка Linux и управление пакетами. Менеджер пакетов Red Hat (RPM)

В предыдущем разделе об управлении пакетами в Debian, мы дали вам краткий обзор управления пакетами. В этом разделе мы сосредоточимся на Red Hat Package Manager (менеджере пакетов Red Hat) или RPM, разработанном Red Hat. RPM и APT во многом схожи. Оба могут устанавливать и удалять пакеты. Оба хранят базу данных установленных пакетов. Оба имеют основные функции для командной строки, а также другие инструменты, предоставляющие более дружественный для пользователя интерфейс. Оба могут загружать пакеты из Интернет. Вообще говоря, RPM-пакетов не так много, как пакетов для APT, хотя команда rpm обладает большими возможностями. Другим отличем является то, что RPM не хранит информацию об установленных пакетах в вашей системе в той же расширенной форме, что и dpkg.

Red Hat представила RPM в 1995. В настоящее время RPM это система управления пакетами используемая для создания пакетов в Linux Standard Base (LSB). Опции команды rpm сгруппированы в три подгруппы для:

  • Опроса и проверки пакетов
  • Установки, обновления и удаления пакетов
  • выполнения других функций.

В этом учебнике мы сосредоточимся на первых двух. Вы можете найти информацию о других функциях в man страницах для rpm.

Мы также должны отметить, что rpm это имя основной команды, используемой с RPM, а .rpm это расширение, используемое для файлов RPM. Поэтому “rpm-пакет” или “xxx rpm-пакет” будет означать, вообще говоря, файл RPM, тогда как “rpm” обычно будет означать команду.

Установка и удаление пакетов RPM

Как и в предыдущем разделе мы рассмотрим проблемы, обнаружившиеся при установке Dr Geo в системе Fedora Core 4 в разделе Компиляция и установка программ. Вы можете вернуться к Листингу 17, в котором мы пропустили команду guile-config.

Введение в rpm

Команда rpm может устанавливать пакеты из локальной файловой системы или из Интернет, используя http или ftp. В Листинге 35 показана установка пакета guile-devel с использованием команды rpm -ivh и сетевого источника пакета.

Листинг 35. Установка guile-devel при помощи rpm

[root@attic4 ~]# rpm -ivh http://download.fedora.redhat.com/pub/fedora\
> /linux/core/4/i386/os/Fedora/RPMS/guile-devel-1.6.7-2.i386.rpm
Retrieving http://download.fedora.redhat.com/pub/fedora/linux/core/4/i386/os/Fedora/
RPMS/guile-devel-1.6.7-2.i386.rpm
Preparing... ########################################### [100%]
1:guile-devel ########################################### [100%]

Отметим, что опция -v предоставляет подробный вывод, а опция -h показывает знак “решетка” (#), для индикации прогресса. Если вы хотите перед установкой из сети проверить пакет, то возможно вам придется сначала загрузить его и только потом установить. Мы поговорим о проверке пакетов чуть позже, а сейчас давайте используем команду wget для получения пакета с его последующей установкой из локальной файловой системы без использования опций -vh. Вывод показан в Листинге 36.

Листинг 36. Установка guile-devel из файла

[root@attic4 ~]# wget http://download.fedora.redhat.com/pub/fedora/\
> linux/core/4/i386/os/Fedora/RPMS/guile-devel-1.6.7-2.i386.rpm
--22:29:58-- http://download.fedora.redhat.com/pub/fedora/linux/core/4/i386/os/Fedora/
RPMS/guile-devel-1.6.7-2.i386.rpm
=> `guile-devel-1.6.7-2.i386.rpm'
Resolving download.fedora.redhat.com... 209.132.176.221
Connecting to download.fedora.redhat.com[209.132.176.221]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 481,631 [application/x-rpm]
100%[====================================>] 481,631 147.12K/s ETA 00:00
22:30:02 (140.22 KB/s) - `guile-devel-1.6.7-2.i386.rpm' saved [481,631/481,631]
[root@attic4 ~]# ls guil*
guile-devel-1.6.7-2.i386.rpm
[root@attic4 ~]# rpm -i guile-devel-1.6.7-2.i386.rpm

Ни решеток, ни сообщений.

Переустановка rpm-пакета

Если вы самостоятельно выполнили указанные выше команды, то на втором шаге вы вероятно увидели ошибку (или на первом, если в вашей системе пакет guile-devel уже установлен), сообщающую, что guile-devel уже установлен. Для того, чтобы обойти это, вам следует использовать опцию -e для удаления (или стирания) rpm-пакета перед его повторной установкой, как показано в Листинге 37. Это также следует сделать, если вам необходимо переустановить rpm-пакет, из-за того, что вы случайно удалили его некоторые файлы.


Листинг 37. Удаление guile-devel

[root@attic4 ~]# rpm -e guile-devel

Принудительная установка rpm-пакета

Иногда удаление rpm-пакета не удобно, особенно если имеются некоторые программы, зависящие от него. Например, если вы попытаетесь удалить пакет guile вместо guile-devel, то можете увидеть нечто подобное Листингу 38, где многие установленные пакеты зависят от пакета guile, а потому удаление не разрешается.

Листинг 38. Попытка удалить guile.

[root@attic4 ~]# rpm -q -R guile-devel
/bin/sh
/usr/bin/guile
guile = 5:1.6.7
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
[root@attic4 ~]# rpm -e guile
error: Failed dependencies:
libguile-ltdl.so.1 is needed by (installed) g-wrap-1.3.4-8.i386
libguile-ltdl.so.1 is needed by (installed) gnucash-1.8.11-3.i386
libguile.so.12 is needed by (installed) g-wrap-1.3.4-8.i386
libguile.so.12 is needed by (installed) gnucash-1.8.11-3.i386
libqthreads.so.12 is needed by (installed) g-wrap-1.3.4-8.i386
libqthreads.so.12 is needed by (installed) gnucash-1.8.11-3.i386
guile is needed by (installed) g-wrap-1.3.4-8.i386
guile = 5:1.6.7 is needed by (installed) guile-devel-1.6.7-2.i386
/usr/bin/guile is needed by (installed) guile-devel-1.6.7-2.i386

Не стоит говорить, что в этом случае не нужно удалять все пакеты, зависящие от этого, решением данной проблемы является принудительная установка rpm-пакета при помощи опции --force. В Листинг 39 мы проиллюстрировали принудительную переустановку guile-devel из файла загруженного в Листинге 36.

Листинг 39. Установка guile-devel с опцией --force.

[root@attic4 ~]# rpm -ivh --force guile-devel-1.6.7-2.i386.rpm
Preparing... ########################################### [100%]
1:guile-devel ########################################### [100%]

Принудительное удаление rpm-пакета

Существует альтернатива принудительной установке при помощи опции --force, что может понадобиться в некоторых случаях. Вы можете удалить rpm-пакет, используя опцию --nodeps, отключающую внутреннюю проверку зависим�стей. Вообще вам следует делать это только если вы знаете что делаете и только если вы собираетесь исправить проблемы с зависимостями путем переустановки пакета. Примером может служить необходимость по некоторым причинам сменить версию пакета на более раннюю и желание убедиться, что все следы поздней версии были удалены. Команда, которую вам следует использовать для удаления пакета guile без проверки зависимостей выглядит так

rpm -e --nodeps guile

Опцию --nodeps можно также использовать и при установке rpm-пакета. И опять это не рекомендуется, но иногда необходимо.

Обновление RPM пакетов

Теперь, когда вы знаете как устанавливать и удалять RPM-пакеты, обратим свой взор на обновление до новых версий. Это похоже на установку, за тем исключением, что мы используем опцию -U или -F вместо опции -i. Различие между двумя этими опциями состоит в том, что опция -U обновляет существующие пакеты или устанавливает пакет, если он не был установлен, тогда как опция -F только обновляет или freshen (освежает) уже установленные пакеты. Вследствии этого опция -U используется чаще, особенно когда командная строка содержит список RPM-пакетов. Таким образом, удаленные пакеты устанавливаются, а установленные -- обновляются. Листинг 40 показывает результат попытки обновления guile-devel до текущей версии, а затем он удаляется и попытка обновления повторяется (теперь это срабатывает как установка).

Листинг 40. Обновление guile-devel.

[root@attic4 ~]# rpm -Uvh guile-devel-1.6.7-2.i386.rpm
Preparing... ########################################### [100%]
package guile-devel-1.6.7-2 is already installed
[root@attic4 ~]# rpm -e guile-devel
[root@attic4 ~]# rpm -Uvh guile-devel-1.6.7-2.i386.rpm
Preparing... ########################################### [100%]
1:guile-devel ########################################### [100%]

Опрос RPM-пакетов

Как вы могли понять из приведенных нами примеров установка rpm-пакетов требует указания полного имени файла (или URL), вроде guile-devel-1.6.7-2.i386.rpm. С другой стороны, удаление rpm-пакета требует только имени пакета, вроде guile-devel. Также как и с APT, RPM хранит внутреннюю базу установленных пакетов, позволяющую вам манипулировать установленными пакетами, используя имя пакета. В этой части учебника мы рассмотрим какая же информация из этого хранилища доступна для вас, при помощи опции -q (от query) для команды rpm.

Базовый запрос просто спрашивает пакет установлен или нет. Добавьте опцию -i и вы получите информацию о пакете. Отметим, что для установки, обновления и удаления пакетов вам потребуются права суперпользователя (root), но не-root пользователи могут выполнять запросы к базе данных rpm-пакетов.

Листинг 41. Отображение информации о guile-devel.

[ian@attic4 ~]$ rpm -q guile-devel
guile-devel-1.6.7-2
[ian@attic4 ~]$ rpm -qi guile-devel
Name : guile-devel Relocations: (not relocatable)
Version : 1.6.7 Vendor: Red Hat, Inc.
Release : 2 Build Date: Wed 02 Mar 2005 11:04:14 AM EST
Install Date: Thu 08 Sep 2005 08:35:45 AM EDT Build Host: porky.build.redhat.com
Group : Development/Libraries Source RPM: guile-1.6.7-2.src.rpm
Size : 1635366 License: GPL
Signature : DSA/SHA1, Fri 20 May 2005 01:25:07 PM EDT, Key ID b44269d04f2a6fd2
Packager : Red Hat, Inc.
Summary : Libraries and header files for the GUILE extensibility library.
Description :
The guile-devel package includes the libraries, header files, etc.,
that you will need to develop applications that are linked with the
GUILE extensibility library.
You need to install the guile-devel package if you want to develop
applications that will be linked to GUILE. You also need to install
the guile package.

RPM пакеты и файлы в них

У вас будет часто появляться желание узнать что же находится внутри пакета или к какому пакету принадлежит некоторый файл. Для вывода списка файлов пакета guile-devel, используйте опцию -ql, как показано в Листинге 42. В этом пакете много файлов, но мы покажем только часть этого вывода.

Листинг 42. Отображение информации о guile-devel.

[ian@attic4 ~]$ rpm -ql guile-devel
/usr/bin/guile-config
/usr/bin/guile-snarf
/usr/include/guile
/usr/include/guile/gh.h
/usr/include/guile/srfi
/usr/include/guile/srfi/srfi-13.h
/usr/include/guile/srfi/srfi-14.h
/usr/include/guile/srfi/srfi-4.h
/usr/include/libguile
/usr/include/libguile.h
...

Вы можете ограничить список выводимых файлов, до списка настроечных файлов, добавлением опции -c к вашему запросу. Подобно этому, опция -d ограничивает вывод только файлами документации.

Опрос файла пакета

Приведенная выше команда это запрос к базе данных RPM установленных пакетов. Если вы только что загрузили пакет и хотите получить ту же информацию, то вы можете воспользоваться опцией -p (для файла пакета) в вашем запросе с указанием имени файла пакета (также как при установке пакета). Листинг 43 повторяет запросы из Листинга 41 к файлу пакета вместо базы данных RPM.

Листинг 43. Отображение информации для файла пакета guile-devel.

[ian@attic4 ~]$ rpm -qp guile-devel-1.6.7-2.i386.rpm
guile-devel-1.6.7-2
[ian@attic4 ~]$ rpm -qpi guile-devel-1.6.7-2.i386.rpm
Name : guile-devel Relocations: (not relocatable)
Version : 1.6.7 Vendor: Red Hat, Inc.
Release : 2 Build Date: Wed 02 Mar 2005 11:04:14 AM EST
Install Date: (not installed) Build Host: porky.build.redhat.com
Group : Development/Libraries Source RPM: guile-1.6.7-2.src.rpm
Size : 1635366 License: GPL
Signature : DSA/SHA1, Fri 20 May 2005 01:25:07 PM EDT, Key ID b44269d04f2a6fd2
Packager : Red Hat, Inc.
Summary : Libraries and header files for the GUILE extensibility library.
Description :
The guile-devel package includes the libraries, header files, etc.,
that you will need to develop applications that are linked with the
GUILE extensibility library.
You need to install the guile-devel package if you want to develop
applications that will be linked to GUILE. You also need to install
the guile package.

Опрос всех установленных пакетов

Опция -a применяет ваш запрос ко всем установленным пакетам. Это приводит к очень большому выводу информации, поэтому обычно его используют вместе с одним или несколькими фильтрами, таким как sort для сортировки листинга, more или less для разбивки на страницы, wc для получения количества пакетов или файлов, или grep для поиска пакетов имя которых вы знаете не точно. Листинг 44 показывает следующие запросы:

  1. Отсортированный список всех пакетов в системе.
  2. Количество всех пакетов в системе.
  3. Количество всех файлов во всех пакетах системы.
  4. Количество всех файлов документации установленных при помощи RPM.
  5. Поиск всех пакетов с именем, содержащим "guile" (с учетом регистра).

Листинг 44. Запросы ко всем пакетам.

[ian@attic4 ~]$ rpm -qa | sort | more
4Suite-1.0-8.b1
a2ps-4.13b-46
acl-2.2.23-8
acpid-1.0.4-1
alchemist-1.0.36-1
alsa-lib-1.0.9rf-2.FC4
alsa-utils-1.0.9rf-2.FC4
...
[ian@attic4 ~]$ rpm -qa | wc -l
874
[ian@attic4 ~]$ rpm -qal | wc -l
195681
[ian@attic4 ~]$ rpm -qald | wc -l
31881
[ian@attic4 ~]$ rpm -qa | grep -i "guile"
guile-devel-1.6.7-2
guile-1.6.7-2

Используя rpm -qa можно облегчить администрирование нескольких систем. Если вы перенаправите отсортированный листинг в файл на одной из машин, то выполнив то же самое на другой машине, вы, при помощи программы diff, сможете найти различия.

Поиск владельца файла.

Учитывая, что теперь вы можете вывести список всех пакетов и всех файлов пакета, можно сказать, что теперь у вас есть все, чтобы обнаружить к какому пакету принадлежит некий файл. Однако команда rpm предоставляет опцию -f, для помощи в обнаружении пакета, являющегося владельцем файла. В нашем примере с Dr Geo в разделе Компиляция и установка программ, нам потребовалась guile-config. Теперь у нас есть установленный пакет guile-devel, этоn исполняемый файл то что нам нужно. В Листинге 45 показано как использовать команду which для получения полного пути к команде guile-config, и полезный пример использования вывода в качестве входных параметров для команды rpm -qf. Отметим, что апострофы, окружающие `which guile-config` наклонены в обратную сторону. Другим способом использования в bash является использование $(which guile-config)

Листинг 45. К какому пакету принадлежит guile-config.

[ian@attic4 ~]$ which guile-config
/usr/bin/guile-config
[ian@attic4 ~]$ rpm -qf `which guile-config`
guile-devel-1.6.7-2
[ian@attic4 ~]$ rpm -qf $(which guile-config)
guile-devel-1.6.7-2

RPM зависимости

Ранее мы видели, что не можем стереть пакет guile из-за зависимостей. В добавок к файлам RPM пакет может содержать различные функции, от которых могут зависеть другие пакеты. В нашем примере многим другим пакетам требуются функции, предоставляемые пакетом guile. И мы не сможем установить guile-devel, если мы еще не установили в системе guile. А как только guile-devel будет установлен, он станет еще одной причиной почему guile не может быть удален.

Обычно все это работает хорошо. Если вам необходимо установить несколько пакетов одновременно, некоторые из которых могут зависеть от других, просто предоставьте полный список вашей команде rpm -Uvh и она проанализирует зависимости и выполнит установку в верном порядке.

Вместо попыток стереть установленный пакет и получения сообщения об ошибке, команда rpm предоставляет опцию для опроса установленных пакетов или файлов пакетов для поиска от чего они зависят или что требуют. Это опция --requires, которая может быть сокращена до -R. В Листинге 46 перечислены функции, необходимые для guile-config. Добавьте опцию -p и используйте полные RPM-имена, если хотите опросить файл пакета вместо базы данных RPM.

Листинг 46. Требования guile-config.

[ian@attic4 ~]$ rpm -qR guile-devel
/bin/sh
/usr/bin/guile
guile = 5:1.6.7
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1

В добавок к поиску функциональности, необходимой пакету, вам может потребоваться найти, какому файлу требуется данная функциональность (что делается при попытке удаления пакета). Листинг 47 иллюстрирует это для двух функций, требующихся guile-devel. Поскольку вывод может включать повторы, мы также показали как можно отфильтровать вывод при помощи sort и uniq для вывода каждого требуемого пакета только один раз.

Листинг 47. Что необходимо /usr/bin/guile и guile.

[ian@attic4 ~]$ rpm -q --whatrequires /usr/bin/guile guile
guile-devel-1.6.7-2
g-wrap-1.3.4-8
guile-devel-1.6.7-2
[ian@attic4 ~]$ rpm -q --whatrequires /usr/bin/guile guile | sort|uniq
guile-devel-1.6.7-2
g-wrap-1.3.4-8


Целостность RPM пакетов.

Чтобы убедиться в целостности RPM-пакетов, они содержат MD5 или SHA1 дайджест, а также могут иметь цифровую подпись. Пакеты с цифровой подписью обычно требуют публичный ключ для проверки. Чтобы проверить целостность файла RPM-пакета используйте опцию rpm --checksig (сокращенно -K). Обычно вы найдете полезным добавление опции -v для подробного вывода.

Листинг 48. Проверка целостности файла пакета guile-devel.

[ian@attic4 ~]$ rpm --checksig guile-devel-1.6.7-2.i386.rpm
guile-devel-1.6.7-2.i386.rpm: (sha1) dsa sha1 md5 gpg OK
[ian@attic4 ~]$ rpm -Kv guile-devel-1.6.7-2.i386.rpm
guile-devel-1.6.7-2.i386.rpm:
Header V3 DSA signature: OK, key ID 4f2a6fd2
Header SHA1 digest: OK (b2c61217cef4a72a8d2eddb8db3e140e4e7607a1)
MD5 digest: OK (cf47354f2513ba0c2d513329c52bf72a)
V3 DSA signature: OK, key ID 4f2a6fd2

Вы можете получить строку вывода, похожую на :

V3 DSA signature: NOKEY, key ID 16a61572

Это означает, что этот пакет подписан, но у вас в базе данных RPM нет необходимого публичного ключа. Отметим, что ранние версии RPM могли обеспечивать другую верификацию.

Если пакет подписан и вы хотите проверить соответствует ли он подписи, то вы должны найти файл соответствующей подписи и импортировать его в базу данных RPM. Сначала вам следует загрузить ключ, а затем проверить его отпечатки пальцев перед тем как импортировать его с использованием команды rpm --import. Для более подробной информации смотри Man страницы для rpm. Вы также можете найти большое количество информации об подписанных бинарных файлах на www.rpm.org.

Проверка установленного пакета

Подобно проверке целостности rpm-пакета вы можете захотеть проверить целостность установленных файлов, используя rpm -V. Эти шаги необходимы, чтобы убедиться в том, что файлы не изменились с тех пор, как были установлены из rpm-пакета. Как показано в Листинге 49 если пакет все еще не был изменен, то ничего не выводится.

Листинг 48. Проверка установленного пакета guile-devel.

[ian@attic4 ~]$ rpm -V guile-devel

Давайте войдем как root и удалим /usr/bin/guile-config вместе и заменим /usr/bin/guile-snarf копией /bin/bash и попытаемся сделать то же самое вновь. Результат приведен в Листинге 49.

Листинг 49. Подделка пакета guile-devel.

[root@attic4 ~]# rm /usr/bin/guile-config
rm: remove regular file `/usr/bin/guile-config'? y
[root@attic4 ~]# cp /bin/bash /usr/bin/guile-snarf
cp: overwrite `/usr/bin/guile-snarf'? y
[root@attic4 ~]# rpm -V guile-devel
missing /usr/bin/guile-config
S.5....T /usr/bin/guile-snarf

Этот листинг показывает нам, что /usr/bin/guile-snarf имеет не верную MD5 сумму, размер файла и не прошел проверку mtime. Вы можете исправить это стерев пакет и переустановив его, или принудительно переустановив, как было показано ранее. Если вы удаляте пакет, то ждите сообщения об ошибке, поскольку один из его файлов отсутствует.

Настройка RPM

RPM редко требует настройки. В старых версиях rpm вы могли производить изменения в /etc/rpmrc для управления операциями во время работы. В последних версиях этот файл был перенесен в /usr/lib/rpm/rpmrc, где он автоматически заменяется, при обновлении rpm-пакета, что приводит к потере любых сделанных вами изменений. Если требуется некая специфичная для системы конфигурация, то она все еще может быть добавлена в /etc/rpmrc, а индивидуальная конфигурация для пользователей должна находиться в .rpmrc.in в домашнем каталоге пользователя. Вы можете найти описание формата этих файлов в книге Maximum RPM (Смотри Ресурсы).

Если вы хотите просмотреть конфигурацию rpmrc, то для этого имеется специальная опция команды rpm. Используйте команду:

rpm rpm --showrc


Репозитории и другие средства

Теперь вы можете удивиться откуда же берутся все эти rpm пакеты, как их можно найти и как управлять обновлением своей системы. Если у вас дистрибутив, основанный на RPM (RPM-based), то скорее всего ваш дистрибутив имеет репозиторий (repository) пакетов. Ваш дистрибутив может также предоставлять инструменты для установки пакетов из репозитория или обновления вашей исходной системы. Эти инструменты могут быть как графическими, так и работать в командной строке. Примерами могут быть:

* YaST (SUSE)
* up2date (Red Hat)
* yum - Yellow Dog Updater Modified (Fedora и другие)
* Mandrake Software Management (Mandriva)

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

Если вы не можете найти какой-то особенный RPM при помощи встроенных средств вашей системы, другим прекрасным ресурсом для поиска RPM-пакетов является сервер Rpmfind.Net

Взято с ibm developerworks

Похожие посты
  • LPI 101: Установка Linux и управление пакетами. Управление библиотеками совместного доступа
  • Описание более 350 команд Linux c примерами.
  • Mac4Lin: как Linux превратить в Mac
  • Простая установка и настройка BIND 9 (ДНС сервер)
  • Как установить программу на комп если установка программ запрещена администратором
  • Ubuntu 7.10
  • FreeBSD. Установка дополнительных программ из “пакетов” (packages).
  • Управление дисками: parted
  • Разрешаем внешние подключения для postfix
  • LPI 101: Установка Linux и управление пакетами. Управление пакетами в Debian