RPM менеджер пакетов
Оценка пользователей: / 1
ПлохоОтлично 
RPMRedhat Packet Manager (RPM) – менеджер пакетов, который используется для создания, установки, отслеживания, проверки, обновления и удаления отдельных программных пакетов.
Пакет состоит из набора файлов и информации о пакете, который включает в себя название, версию и описание пакета.
Redhat Packet Manager
RPM спроектирован так, что обеспечивает мощную систему запросов. Вы можете искать в Вашей базе данных информацию о пакете или о конкретных файлах пакета. Вы можете легко определить, какому пакету принадлежит файл и откуда он появился. Сами файлы RPM является сжатыми архивами, но Вы можете легко и быстро задавать необходимый пакет, потому что в пакет добавляется двоичный заголовок со всем, что Вам может быть необходимо знать в несжатом виде. Именно это позволяет делать быстрые запросы.
Другое мощное свойство - проверка пакетов. Если Вы беспокоитесь, что удалили важный файл из пакета, просто проверьте это и будете сообщении о любой аномалии. В такой ситуации Вы можете переустановить пакет, если необходимо, и при этом предыдущие конфигурационные файлы будут сохранены.
RPM является мощным, гибким и удобным менеджером пакетов, что позволяет избежать многих проблем при установке программного обеспечения из исходного кода, но начальные администраторы почему-то его игнорируют.
Из названия менеджера понятно, что я буду рассматривать RedНat подобные дистрибутивы: RedHat, CentOS, Fedora Core, SuSe и т.д., так как в Debian и Gentoo используется совсем другой формат пакетов и менеджеры в них, соответственно, другие. Хотя и на любых других дистрибутивах стоит использовать их родные менеджеры пакетов.
Все дальнейшие действия в данной статье будут выполняться под дистрибутивом RHEL 6.4 (аналогична версии CentOS только с официальной поддержкой).
Основные операции
Наиболее распространенными операциями являются установка/удалением пакетов. Установка пакета:
[root@rhel-test1 ~]# ls -lhtr /opt/tmp/
total 108M
-rw-r--r-- 1 root root 54M Nov 23 19:11 MySQL-server-5.6.13-1.el6.i686.rpm
-rw-r--r-- 1 root root 54M Nov 23 19:12 MySQL-server-5.6.14-1.el6.i686.rpm
[root@rhel-test1 ~]# rpm --install --verbose --hash /opt/tmp/MySQL-server-5.6.13-1.el6.i686.rpm
Preparing...                ########################################### [100%]
   1:MySQL-server           ########################################### [100%]
В дальнейшем в статье параметры для команды rpm будут указываться полностью и отдельно для понимания выполняемых действий. Эквивалентно можно указать параметры сокращенно и вместе:
[root@rhel-test1 ~]# rpm -ivh /opt/tmp/MySQL-server-5.6.13-1.el6.i686.rpm
Детальное описание параметров для команды rpm можно посмотреть следующим образом:
[root@rhel-test1 ~]# man rpm
Теперь можем проверить установлен пакет в нашей системе:
[root@rhel-test1 ~]# rpm --query MySQL-server
MySQL-server-5.6.13-1.el6.i686
[root@rhel-test1 ~]# rpm --query MySQL-server-5.6.13-1.el6.i686
MySQL-server-5.6.13-1.el6.i686
Удаление пакета. Разница между удалением и установкой пакета состоит в том, что для удаления необязательно указывать путь и полное название пакета.
Достаточно указать его имя, например MySQL-server:
[root@rhel-test1 ~]# rpm --erase MySQL-server
[root@rhel-test1 ~]# rpm --query MySQL-server
package MySQL-server is not installed
Хотя можно указать и полное название пакета для удаления:
[root@rhel-test1 ~]# rpm --erase MySQL-server-5.6.13-1.el6.i686
Обратите внимание, что регистр здесь имеет значение. Иначе при удалении Вы получите следующую ошибку:
[root@rhel-test1 ~]# rpm --erase mysql-server
error: package mysql-server is not installed
Если Вы не знаете точного имени пакета, то можно использовать следующее взаимодействие команд (через pipe (англ. «труба») - "|"):
[root@rhel-test1 ~]# rpm --query --all | grep -i mysql
MySQL-server-5.6.13-1.el6.i686
Обновление пакета. Рассмотрим случай, когда у Вас в системе установлена старая версия пакета, который Вы хотите обновить:
[root@rhel-test1 ~]# rpm --query MySQL-server
MySQL-server-5.6.13-1.el6.i686
Можно конечно удалить старую версию пакета и установить новую, но возможно, что от данного пакета могут зависеть другие и тогда Вы не сможете удалить старый пакет без параметра/ключа -nodeps, который необходимо использовать очень осторожно (при этом не проверяется зависимость между данным и другими пакетами при удалении). Поэтому корректнее использовать параметр –upgrade.
Также полезно использовать параметр -test, при котором будет имитироваться процесс установки/обновления пакета (файлы устанавливаться не будут), и если будут найдены ошибки или неудовлетворительные зависимости, то об этом будет сообщение. Если никаких сообщений не будет, то можно смело устанавливать пакет. Также на время установки нового пакета желательно остановить службу, которая использует этот пакет, во избежание конфликтов и сделать резервную копию текущих конфигурационных файлов (могут перезаписатись на новые):
[root@rhel-test1 ~]# rpm --upgrade --test --verbose --hash /opt/tmp/MySQL-server-5.6.14-1.el6.i686.rpm
Preparing...                ########################################### [100%]
[root@rhel-test1 ~]# /etc/init.d/mysql stop
Shutting down MySQL..                                      [  OK  ]
[root@rhel-test1 ~]# rpm --upgrade --verbose --hash /opt/tmp/MySQL-server-5.6.14-1.el6.i686.rpm
Preparing...                ########################################### [100%]
Giving mysqld 5 seconds to exit nicely
   1:MySQL-server           ########################################### [100%]
[root@rhel-test1 ~]# rpm --query MySQL-server
MySQL-server-5.6.14-1.el6.i686
Запускаем обновленную службу:
[root@rhel-test1 ~]# /etc/init.d/mysql start
Starting MySQL......                                       [  OK  ]
Также еще одной полезной возможностью является проверка целостности упаковки (все ли файлы существуют в системе):
[root@rhel-test1 ~]# rpm --verify MySQL-server
Если при выполнении команды не будет никаких сообщений, то пакет цел. Для демонстрации перенесем файл, который принадлежит пакету, в другое место (аналогично можно удалить):
[root@rhel-test1 ~]# mv /usr/sbin/mysqld /tmp/
[root@rhel-test1 ~]# rpm --verify MySQL-server
missing     /usr/sbin/mysqld
Как видим в сообщении указано, что файл, который был перемещен/изменено название/удалено не найден. Вернем файл назад и проверим целостность снова:
[root@rhel-test1 ~]# mv /tmp//usr/sbin/mysqld
[root@rhel-test1 ~]# rpm --verify MySQL-server
Для проверки всех пакетов необходимо добавить параметр -all:
[root@rhel-test1 ~]# rpm --verify –all
Еще одной полезной функцией RPM является отображение информации о конкретном пакете, если Вы хотите узнать о назначении пакета до того как его проинсталлировать:
[root@rhel-test1 ~]# rpm --query --info --package /opt/tmp/MySQL-server-5.6.14-1.el6.i686.rpm | less
Name        : MySQL-server                 Relocations: (not relocatable)
Version     : 5.6.14                            Vendor: Oracle and/or its affiliates
Release     : 1.el6                         Build Date: Tue 10 Sep 2013 10:58:36 AM EEST
Install Date: (not installed)               Build Host: tyr29
Group       : Applications/Databases        Source RPM: MySQL-5.6.14-1.el6.src.rpm
Size        : 224593914                        License: Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Under GPL license as shown in the
...
Если Вы установили пакет и хотите узнать пути и названия файлов, которые были установлены:
[root@rhel-test1 ~]# rpm --query --list MySQL-server | less
/etc/init.d/mysql
/etc/logrotate.d/mysql
...
Если Вы хотите посмотреть содержимое пакета, без его установки:
[root@rhel-test1 ~]# rpm --query --list --package /opt/tmp/MySQL-server-5.6.14-1.el6.i686.rpm | less
/etc/init.d/mysql
/etc/logrotate.d/mysql
...
Иногда необходимо узнать, какому пакету принадлежит конкретный установленный файл:
[root@rhel-test1 ~]# rpm --query --file /etc/init.d/mysql
MySQL-server-5.6.14-1.el6.i686
Представьте ситуации, что Вы все устанавливаете из исходных файлов, при этом Вы автоматически не имеете всех вышеописанных преимуществ. При установке программы Вам необходимо каждый раз ее собирать снова.
При конфигурации программы можно использовать параметр -prefix и указать необходимую директорию, но это не выход из ситуации, так как все файлы будут установлены в одну директорию. Конечно, можно использовать и другие параметры, такие как -mandir, -datadir, -infodir, -libdir, -includedir и другие, но это не выход из ситуации, так как обновление программ из исходного кода становится очень сложным.
При использовании RPM всех этих проблем не будет и соответствующие конфигурационные, исполнительные, вспомогательные и другие файлы будут установлены в соответствующие директории (как это требуется от иерархической файловой системы Linux - для ознакомления можете прочитать man hier).
Также при установке программы программ из исходного кода будут отсутствовать скрипты для автоматического запуска программу при загрузке ОС, находящихся в /etc/init.d/ и используются для управлением автозагрузки с помощью утилиты chkconfig (определяется на любом из 7 runlevel будет запускаться программа при старте ОС).
Безопасность
Для безопасности перед установкой пакетов необходимо их проверять на подлинность, для того чтобы быть уверенным, что Вы устанавливаете необходимый пакет.
Для этого существуют два способа: проверка GPG-подписи и MD5-суммы. Для того, чтобы проверить GPG-подпись необходимо выполнить команду с параметром --checksig:
[root@rhel-test1 ~]# rpm --checksig /opt/tmp/MySQL-server-5.6.14-1.el6.i686.rpm
/opt/tmp/MySQL-server-5.6.14-1.el6.i686.rpm: sha1 md5 (GPG) NOT OK (MISSING KEYS: GPG#5072e1f5)
Как видно из сообщения, у нас отсутствует ключ GPG и, соответственно, мы не можем проверить подпись. Для исправления ситуации нам необходимо добавить ключ GPG в нашу базу с помощью следующей команды и проверить пакет:
[root@rhel-test1 ~]# rpm --import /opt/tmp/5072e1f5.asc
[root@rhel-test1 ~]# rpm --checksig /opt/tmp/MySQL-server-5.6.14-1.el6.i686.rpm
/opt/tmp/MySQL-server-5.6.14-1.el6.i686.rpm: sha1 md5 gpg OK
Как видим, у нас действительно оригинальный пакет (без изменений) и его можно устанавливать. Но если у нас все же нет ключа GPG, то пакет можно проверить с помощью контрольной суммы (менее надежный метод). Перед установкой необходимо сравнить контрольную сумму с сайта и текущего пакета:
RPM-1
[root@rhel-test1 ~]# md5sum /opt/tmp/MySQL-server-5.6.14-1.el6.i686.rpm
1035ff3112063aaa3d9866e0b42cf053  /opt/tmp/MySQL-server-5.6.14-1.el6.i686.rpm
Если контрольные суммы совпадают, то у Вас оригинальный пакет и теперь можно его устанавливать. Если контрольные суммы не совпадают, то, возможно, при загрузке файл был поврежден или этот совсем неоригинальный файл. В данном случае лучше не устанавливать пакет. Также, если у Вас нет никакой возможности проверить пакет на оригинальность, то лучше его вовсе не устанавливать, так как можно установить себе в систему rootkit.
Надеюсь, мне удалось Вас убедить в том, что RPM является мощным, гибким и удобным менеджером пакетов, используя который Ваша системы будет работать корректно.
Автор Дмитрий Озаркив, магистрант НТУУ «КПИ».
Подготовлено специально для isearch.kiev.ua.
 
>
КнигаНовости Практика поискаПартнерыО нас
Підтримка та дизайн: Могильний С.С. Шаблон: Joomla Templates by BuyHTTP Joomla Hosting