RPM менеджер пакетів
User Rating: / 1
PoorBest 
There are no translations available.

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.
 
>
BookNewsPractice SearchPartnersAbout
Підтримка та дизайн: Могильний С.С. Шаблон: Joomla Templates by BuyHTTP Joomla Hosting