RPM: відмінності між версіями

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
[неперевірена версія][неперевірена версія]
Вилучено вміст Додано вміст
правопис
Немає опису редагування
 
(Не показано 33 проміжні версії 19 користувачів)
Рядок 1: Рядок 1:
{{Картка програми
{{Infobox_Software
| name = RPM Package Manager
| name = RPM Package Manager
| logo = [[Image:RPM Logo.svg|96px]]
| logo = RPM Logo.svg
| logo_size = 96px
| screenshot =
| screenshot =
| caption =
| caption =
| developer = [[Red Hat]]
| developer = [[Red Hat]]
| latest_release_version = 4.10.0
| latest_release_date = {{release_date|2012|5|24}}
| operating_system = [[Linux]]
| operating_system = [[Linux]]
| programming language =
| genre = [[менеджер пакунків]]
| genre = [[менеджер пакунків]]
| license = [[GNU General Public License]]
| license = [[GNU General Public License]]
| website = [http://rpm.org/ rpm.org]
| website = {{url|http://rpm.org}}
}}
}}
{{otheruses|rpm (значення)}}
{{otheruses|rpm (значення)}}
'''RPM''' ({{lang-en|Red Hat Package Manager}} — менеджер пакунків [[Red Hat]]<ref name="max">[http://www.rpm.org/max-rpm/s1-rpm-file-format-rpm-file-format.html Maximum RPM: Taking the Red Hat Package Manager to the Limit]</ref> або RPM Package Manager — RPM — менеджер пакунків) — позначає дві речі: формат пакунків програмного забезпечення і програму, створену для управління цими пакунками. Програма дозволяє встановлювати, видаляти і оновлювати [[програмне забезпечення]]. Формат RPM заснований на форматі, розробленому [[LSB]].
'''RPM''' ({{lang-en|Red Hat Package Manager}} — менеджер пакунків [[Red Hat]]<ref name="max">{{Cite web |url=http://www.rpm.org/max-rpm/s1-rpm-file-format-rpm-file-format.html |title=Maximum RPM: Taking the Red Hat Package Manager to the Limit |accessdate=17 липня 2008 |archiveurl=https://web.archive.org/web/20080705132956/http://www.rpm.org/max-rpm/s1-rpm-file-format-rpm-file-format.html |archivedate=5 липня 2008 |deadurl=yes }}</ref> або RPM Package Manager — RPM — менеджер пакунків) — позначає дві речі: [[Формати пакетів|формат пакунків]] програмного забезпечення і програму, створену для управління цими пакунками. Програма дозволяє встановлювати, видаляти і оновлювати [[програмне забезпечення]]. Формат RPM заснований на форматі, розробленому [[Linux Standard Base|LSB]].


Спочатку розроблений компанією [[Red Hat]] для [[Red Hat Linux]], RPM став використовуватися в багатьох дистрибутивах [[GNU/Linux]] і був портований на інші операційні системи: [[Novell NetWare]] (з версії 6.5 SP3), [[IBM AIX]] (з версії 5) та інші.
Спочатку розроблений компанією [[Red Hat]] для [[Red Hat Linux]], RPM став використовуватися в багатьох дистрибутивах [[GNU/Linux]] і був портований на інші операційні системи: [[Novell NetWare]] (з версії 6.5 SP3), [[IBM AIX]] (з версії 5) та інші.


Сьогодні ''«RPM Package Manager»'' використовується як рекурсивний [[акронім]].
Сьогодні ''«RPM Package Manager»'' використовується як [[рекурсивний акронім]].


Проект RPM 4 ([http://rpm.org/ rpm.org]) розвивається компанією [[Red Hat]] і використовується в таких дистрибутивах, як [[RHEL]], [[Fedora]], [[SUSE Linux]], [[openSUSE]], [[Mageia]], [[ALT Linux]] і [[MeeGo]]. RPM 4 не слід плутати з проектом RPM 5 ([http://rpm5.org/ rpm5.org]), який ніяк не пов'язаний з RPM 4 і з [[2007]] року розвивається паралельно іншою командою розробників. З дистрибутивів, що перейшли на RPM 5, можна відмітити [[Unity Linux]], [[Wind River]], [[OpenEmbedded]], [[ArkLinux]] і [[Mandriva Linux]].
Проєкт RPM 4 ([http://rpm.org/ rpm.org] {{Webarchive|url=https://web.archive.org/web/20180615065929/http://rpm.org/ |date=15 червня 2018 }}) розвивається компанією [[Red Hat]] і використовується в таких дистрибутивах, як [[RHEL]], [[Fedora]], [[SUSE Linux]], [[openSUSE]], [[Mageia]], [[ALT Linux]] і [[MeeGo]]. RPM 4 не слід плутати з проєктом RPM 5 ([https://web.archive.org/web/20070820044303/http://rpm5.org/ rpm5.org]), який ніяк не пов'язаний з RPM 4 і з [[2007]] року розвивається паралельно іншою командою розробників. З дистрибутивів, що перейшли на RPM 5, можна відмітити [[Unity Linux]], [[OpenEmbedded]], [[ArkLinux]] і [[Mandriva Linux]].

== База даних RPM ==
База даних RPM ведеться в теці /var/lib/rpm. Вона складається з одиночної бази даних (Packages), в якій зберігається вся інформація про пакунки і безліч маленьких баз (__db.001, __db.002 і т. д.), які служать для індексації і містять в собі відомості про те, які файли мінялися і створювалися при встановленні і видаленні пакунків.

Якщо база даних дещо зіпсується (що може відбутися, якщо процес встановлення або видалення був «убитий» або закінчилося місце на розділі), то її можна відновити, ввівши команду rpm --rebuilddb.

Якщо база була знищена — рекомендується дістати копію наперед зробленої копії або відновити за допомогою rpm -ivh --justdb за списком пакунків, наперед отриманих командою rpm -qa | sort. Можливі напівевристичні методи відновлення бази за списком файлів в пакунках репозиторію, з якого була встановлена система, але краще до цього не доводити.


== Назви пакунків ==
== Назви пакунків ==
Рядок 34: Рядок 25:
* Назва програми
* Назва програми
* Версія програми
* Версія програми
* Номер релізу (кількість разів перезбірки програми однієї і тієї ж версії). Також часто використовується для позначення дистрибутива, під який зібраний цей пакунок, наприклад mdv (Mandriva Linux) або fc4 (Fedora Core 4).
* Номер релізу (кількість разів перезбірки програми однієї і тієї ж версії). Також часто використовується для позначення дистрибутиву, під який зібраний цей пакунок, наприклад mdv (Mandriva Linux) або fc4 (Fedora Core 4).
* Архітектура, під яку зібраний пакунок (i386, ppc і т. д.)
* Архітектура, під яку зібраний пакунок (i386, ppc і т. д.)


Рядок 49: Рядок 40:
Бібліотеки найчастіше розповсюджуються в двох окремих пакунках. Перший містить зібраний код, другий (зазвичай до нього додають -devel) містить заголовні файли і інші файли, необхідні розробникам. Необхідно стежити за тим, щоб версії цих двох пакунків збігалися, інакше бібліотеки можуть працювати некоректно. Пакунки з розширенням noarch.rpm не залежать від конкретної архітектури комп'ютера. Зазвичай вони містять графіку і тексти, що використовують інші програми.
Бібліотеки найчастіше розповсюджуються в двох окремих пакунках. Перший містить зібраний код, другий (зазвичай до нього додають -devel) містить заголовні файли і інші файли, необхідні розробникам. Необхідно стежити за тим, щоб версії цих двох пакунків збігалися, інакше бібліотеки можуть працювати некоректно. Пакунки з розширенням noarch.rpm не залежать від конкретної архітектури комп'ютера. Зазвичай вони містять графіку і тексти, що використовують інші програми.


== Фізичний формат пакунків ==
== Структура пакунків RPM ==
Пакунок записується у двійковому форматі і складається з чотирьох розділів:<ref name="max"/>
Пакунок записується у двійковому форматі і складається з чотирьох розділів:<ref name="max" />
* початкова ідентифікація пакунка як RPM файла, що містить також деякі застарілі заголовки.
* початкова ідентифікація пакунка як RPM файла, що містить також деякі застарілі заголовки.
* Підпис, який може використовуватися для впевненості в цілісності та/або автентичності.
* Підпис, який може використовуватися для впевненості в цілісності та/або автентичності.
* Заголовок містить [[метадані]], включно з назвою пакунка, версією, архітектурою, списком файлів тощо.
* Заголовок містить [[метадані]]:
** назва, версія, реліз пакунка
* Файловий архів, який звичайно стиснений [[cpio]] з [[gzip]]. Останні версії RPM також можуть запаковані [[bzip2]] або [[lzma]]. Формат RPM 5.0 підтримує архіватор [[xar]].
** архітектура
** залежності які потребує пакет
** залежності які надає, задовільняє, для встановлення інших пакетів
** група пакетів
** інформація про збірку, з яких вихідних файлів, коли та на якому хості було зібрано пакет
** список файлів
** короткий опис, URL та опис пакунку
** журнал змін
* Файловий архів [[cpio]] який стиснений за допомогою [[gzip]], [[bzip2]] або [[LZMA|lzma]]. Формат RPM 5.0 підтримує архіватор [[xar]].
* Архів також має скрипти, які виконуються під час встановлення, видалення пакунків.


== Переваги і недоліки RPM ==
== Переваги і недоліки RPM ==
Рядок 69: Рядок 70:
* Незавершена і застаріла документація (або англомовна чернетка)
* Незавершена і застаріла документація (або англомовна чернетка)
* Збірка пакунка з вихідних кодів зазвичай вимагає великих знань
* Збірка пакунка з вихідних кодів зазвичай вимагає великих знань
* Залежності. RPM не займається задоволенням залежностей. Цю проблему вирішують менеджери yum, urpmi, yast, zypper в залежності від диструбутива.
* Макропакунки між дистрибутивами можуть істотно розрізнятися
* Макропакунки між дистрибутивами можуть істотно розрізнятися
* Іноді відбувається несумісність версій пакунків при пошуку залежностей (найчастіше це відбувається тоді, коли відбувається спроба встановити пакунок від іншого дистрибутиву, наприклад від Fedora Core до Mandriva)
* Іноді відбувається несумісність версій пакунків при пошуку залежностей (найчастіше це відбувається тоді, коли відбувається спроба встановити пакунок від іншого дистрибутиву, наприклад від Fedora Core до Mandriva)
* Неможливо розпакувати звичайним ПЗ (в порівнянні з deb (Debian) або tgz (Slackware). Для цього існує скрипт [https://listman.redhat.com/archives/rhn-users/2003-May/msg00092.html rpm2cpio.sh] (він розпаковує пакунок за допомогою od, expr, dd і gunzip, а не однією командою)
* Неможливо розпакувати звичайним ПЗ (в порівнянні з deb (Debian) або tgz ([[Slackware]])). Для цього існує скрипт [https://listman.redhat.com/archives/rhn-users/2003-May/msg00092.html rpm2cpio.sh] {{Webarchive|url=https://web.archive.org/web/20120306162633/https://listman.redhat.com/archives/rhn-users/2003-May/msg00092.html |date=6 березня 2012 }} (він розпаковує пакунок за допомогою od, expr, dd і gunzip, а не однією командою)


== Створення пакунку ==
== Створення пакунку ==
Для створення пакунку потрібний spec-файл. Це звичайний текстовой файл, має суфікс .spec і містить в собі назву пакунку, версію, номер реліза, інструкції по збірці і установці пакунку і список змін. За наявності spec-файла пакунок створюється командою rpmbuild
Для створення пакунку потрібний spec-файл. Це звичайний текстовой файл, має суфікс .spec і містить в собі назву пакунку, версію, номер реліза, інструкції по збірці і установці пакунку і список змін. За наявності spec-файла пакунок створюється командою rpmbuild


Дуже короткий курс молодого бійця можна знайти [http://www.linux.kiev.ua/ru/docs/articles/rpm-spec-howto/ тут]; з англомовних керівництв можна рекомендувати хоч і старе, але багато в чому (особливо по частині макросів) актуальне [http://rpm.org/max-rpm/ Maximum RPM] і чернетка його оновленої версії — [http://fedora.redhat.com/docs/drafts/rpm-guide-en/ RPM Guide].
Дуже короткий [[курс молодого бійця]] можна знайти [https://web.archive.org/web/20081018064909/http://www.linux.kiev.ua/ru/docs/articles/rpm-spec-howto/ тут]; з англомовних керівництв можна рекомендувати хоч і старе, але багато в чому (особливо по частині макросів) актуальне [http://rpm.org/max-rpm/ Maximum RPM] {{Webarchive|url=https://web.archive.org/web/20080516072707/http://www.rpm.org/max-rpm/ |date=16 травня 2008 }} і чернетка його оновленої версії — [https://web.archive.org/web/20070315010546/http://fedora.redhat.com/docs/drafts/rpm-guide-en/ RPM Guide].


== Приклади ==
== Приклади використання ==
=== маніпуляції з пакунками ===
* rpm -Uhv package.rpm — За наявності пакунка package відбудеться його оновлення, за відсутності — установка.
* <code>rpm -i package-1.2.3-1.el9.x86_64.rpm</code> — встановлення пакунка.
* rpm -qa --queryformat '%010{SIZE}\t%{NAME}-%{VERSION}-%{RELEASE}\n' — виведення переліку всіх
* <code>rpm -U package-1.2.3-2.el9.x86_64.rpm</code> — за наявності встановленого пакунка package відбудеться його оновлення, за відсутності — встановлення.
встановлених пакунків і їх розмірів
* <code>rpm -e package</code> — видалення пакунка


=== запити до бази RPM ===
== дистрибутиви GNU/Linux ==
* <code>rpm -qa</code> — (<code>--all</code>) виведення переліку всіх встановлених пакунків
Список деяких найвідоміших дистрибутивів [[GNU/Linux]], заснованих на RPM:
* <code>rpm -ql package</code> — виведення переліку всіх встановлених файлів пакунка package
* <code>rpm -qf /path/to/file</code> — виведення пакунка, якому належить файл <code>/path/to/file</code>
* <code>rpm -qa --queryformat '%010{SIZE}\t%{NAME}-%{VERSION}-%{RELEASE}\n'</code> — використання визначеного формату запиту при виводі списку всіх встановлених пакунків: розмір файла пакета, назва пакета, версія, реліз.
* <code>rpm --verify package</code> — проведення перевірки (аудіта) пакунка package. Виявляє файли що стали відсутні або змінені після встановлення пакунка.

== База даних RPM ==
База даних RPM представляє собою набір [[База даних «ключ—значення»|баз]] [[Berkeley DB]], який ведеться в теці <code>/var/lib/rpm</code>. В них ведеться інформаця про те, які пакет встановлювались, оновлювались, їх залежності, які файли були встановлені операційну систему, їх метадані при встановленні тощо.

При встановленні або видалені програм, rpm перевіряє наявність необхідних залежностей, причому перевіряє не наявність файлів на файловій системі, а наявність саме в цій базі. Залежності іноді собою представляють не тільки файл, а абстрактну сутність, бібліотеку яка

В набір утілит rpm входить функціонал аудиту, який дозволяє перевірити наявність або відсутність файлів які були встановлені в пакеті, їх контрольну суму а також встановлені права.

База даних не має вбудованих механізмів журналювання, тому може постраждати від переривання процесу встановлення/видалення пакетів, помилок, нестачі вільного місця на файловій системі. Це призводить до неконсистентного стану бази, в такому випадку її можна відновити за допомогою <code>rpm --rebuilddb</code>.

При повній втраті бази, її можна відновити з наявних пакунків, з них можна отримати інформацію якою база повинна бути наповнена, в емулювати встановлення без перезапису файлів, а лише записи в базу <code>rpm -ivh --justdb</code> за списком пакунків.

== Дистрибутиви Linux ==
Список деяких найвідоміших [[Дистрибутив Linux|дистрибутивів Linux]], заснованих на RPM:
* [[Red Hat Enterprise Linux]], [[CentOS]], [[Fedora]]
* [[openSUSE]], SUSE Linux Enterprise Desktop, SUSE Linux Enterprise Server
* [[Azure Linux]]
* [[ALT Linux]]
* [[ALT Linux]]
* [[ASP Linux]]
* [[CentOS]]
* [[Fedora]]
* [[Mandriva Linux]]
* [[Mandriva Linux]]
* [[Red Hat Enterprise Linux]]
* [[openSUSE]]
* [[Fuduntu]]
* [[Fuduntu]]
* [[Mageia]]
* [[MeeGo]]


== Виноски ==
== Виноски ==
Рядок 98: Рядок 119:


== Посилання ==
== Посилання ==
* [http://www.rpm.org/ Офіційний сайт]{{ref-en}}
* [http://www.rpm.org Офіційний сайт] {{Webarchive|url=https://web.archive.org/web/20140911044847/http://www.rpm.org/ |date=11 вересня 2014 }}{{ref-en}}
* [https://web.archive.org/web/20070227004339/http://www.linux.kiev.ua/ru/docs/articles/ideal-sysadm-rpm/ Идеальный сисадмин: RPM] (пояснение выгоды для администраторов){{ref-ru}}
* [http://fedoraproject.org.ru/rpm Керівництво]{{ref-ru}}
* [https://web.archive.org/web/20061206192715/http://fedora.redhat.com/participate/developers-guide/ch-rpm-building.html Сборка пакетов RPM]{{ref-en}}
* [http://www.linux.kiev.ua/ru/docs/articles/ideal-sysadm-rpm/ Идеальный сисадмин: RPM] (пояснение выгоды для администраторов){{ref-ru}}
* [http://fedora.redhat.com/participate/developers-guide/ch-rpm-building.html Сборка пакетов RPM]{{ref-en}}
* [https://web.archive.org/web/20060219023154/http://www.rpm.org/max-rpm/rpm.8.html man-страница RPM]{{ref-en}}
* [http://www.rpm.org/max-rpm/rpm.8.html man-страница RPM]{{ref-en}}
* [https://web.archive.org/web/20050312181634/http://www.hut.fi/~tkarvine/rpm-build-as-user.html Збірка пакунків простим користувачем]{{ref-en}}
* [http://www.hut.fi/~tkarvine/rpm-build-as-user.html Збірка пакунків простим користувачем]{{ref-en}}
* [http://www.linuxbase.org/spec/refspecs/LSB_1.3.0/gLSB/gLSB/swinstall.html Package File Format — Linux Standards Base]{{ref-en}}
* [http://www.linuxbase.org/spec/refspecs/LSB_1.3.0/gLSB/gLSB/swinstall.html Package File Format — Linux Standards Base]{{ref-en}}
* [http://rpmfind.net/ www.rpmfind.net]{{ref-en}} — велетенський [[репозиторій]] пакунків
* [http://rpmfind.net/ www.rpmfind.net] {{Webarchive|url=https://web.archive.org/web/20060813090348/http://www.rpmfind.net/ |date=13 серпня 2006 }}{{ref-en}} — велетенський [[репозиторій]] пакунків
* [https://listman.redhat.com/archives/rhn-users/2003-May/msg00092.html rpm2cpio.sh] — скрипт для розпаковки пакунків
* [https://listman.redhat.com/archives/rhn-users/2003-May/msg00092.html rpm2cpio.sh] {{Webarchive|url=https://web.archive.org/web/20120306162633/https://listman.redhat.com/archives/rhn-users/2003-May/msg00092.html |date=6 березня 2012 }} — скрипт для розпакування пакунків
* [http://server-tuning.info/ru/first-steps/rpm-repositories.html Подключение сторонних RPM-репозиториев в Fedora/CentOS]{{ref-ru}}
* [http://server-tuning.info/ru/first-steps/rpm-repositories.html Подключение сторонних RPM-репозиториев в Fedora/CentOS] {{Webarchive|url=https://web.archive.org/web/20070327161105/http://server-tuning.info/ru/first-steps/rpm-repositories.html |date=27 березня 2007 }}{{ref-ru}}
* [http://www.ibm.com/developerworks/ru/library/l-roadmap9/index.html План перехода с Windows на Linux: Часть 9. Установка программного обеспечения]{{ref-ru}} [[developerWorks Россия]]
* [http://www.ibm.com/developerworks/ru/library/l-roadmap9/index.html План перехода с Windows на Linux: Часть 9. Установка программного обеспечения] {{Webarchive|url=https://web.archive.org/web/20070501213154/http://www.ibm.com/developerworks/ru/library/l-roadmap9/index.html |date=1 травня 2007 }}{{ref-ru}} [[developerWorks Россия]]


== Дивись також ==
== Дивись також ==
Рядок 114: Рядок 134:


{{Формати архівів}}
{{Формати архівів}}
{{Пакетні менеджери для Linux}}


[[Категорія:Акроніми]]
[[Категорія:Акроніми]]
[[Категорія:Лінукс]]
[[Категорія:Вільне ПЗ для Linux]]
[[Категорія:Системи керування пакунками]]
[[Категорія:Вільні системи керування пакунками]]
[[Категорія:Вільне програмне забезпечення на C]]

[[Категорія:Формати архівів]]
[[ar:مدير حزم آر بي إم]]
[[az:RPM paket idarə edici]]
[[ca:Sistema de paquets rpm]]
[[cs:RPM Package Manager]]
[[da:RPM Package Manager]]
[[de:RPM Package Manager]]
[[en:RPM Package Manager]]
[[es:RPM Package Manager]]
[[eu:RPM]]
[[fi:RPM Package Manager]]
[[fr:RPM Package Manager]]
[[he:מנהל החבילות RPM]]
[[id:RPM Package Manager]]
[[it:RPM Package Manager]]
[[ja:RPM Package Manager]]
[[ko:RPM 패키지 매니저]]
[[ml:ആർ.പി.എം. പാക്കേജ് മാനേജർ]]
[[ms:RPM Package Manager]]
[[nl:RPM Package Manager]]
[[no:RPM Package Manager]]
[[pl:RPM Package Manager]]
[[pt:RPM (Linux)]]
[[ru:RPM]]
[[simple:RPM Package Manager]]
[[sk:RPM]]
[[sv:.rpm]]
[[uz:RPM]]
[[zh:RPM套件管理員]]

Поточна версія на 10:31, 25 жовтня 2024

RPM Package Manager
Типменеджер пакунків
АвториMarc Ewingd[1], Erik W. Troand[1] і Red Hat
РозробникRed Hat
Операційна системаLinux
Мова програмуванняC
ЛіцензіяGNU General Public License
Репозиторійgithub.com/rpm-software-management/rpm
Вебсайтrpm.org

RPM (англ. Red Hat Package Manager — менеджер пакунків Red Hat[2] або RPM Package Manager — RPM — менеджер пакунків) — позначає дві речі: формат пакунків програмного забезпечення і програму, створену для управління цими пакунками. Програма дозволяє встановлювати, видаляти і оновлювати програмне забезпечення. Формат RPM заснований на форматі, розробленому LSB.

Спочатку розроблений компанією Red Hat для Red Hat Linux, RPM став використовуватися в багатьох дистрибутивах GNU/Linux і був портований на інші операційні системи: Novell NetWare (з версії 6.5 SP3), IBM AIX (з версії 5) та інші.

Сьогодні «RPM Package Manager» використовується як рекурсивний акронім.

Проєкт RPM 4 (rpm.org [Архівовано 15 червня 2018 у Wayback Machine.]) розвивається компанією Red Hat і використовується в таких дистрибутивах, як RHEL, Fedora, SUSE Linux, openSUSE, Mageia, ALT Linux і MeeGo. RPM 4 не слід плутати з проєктом RPM 5 (rpm5.org), який ніяк не пов'язаний з RPM 4 і з 2007 року розвивається паралельно іншою командою розробників. З дистрибутивів, що перейшли на RPM 5, можна відмітити Unity Linux, OpenEmbedded, ArkLinux і Mandriva Linux.

Назви пакунків

[ред. | ред. код]

Кожен пакунок RPM має назву, яка складається з декількох частин:

  • Назва програми
  • Версія програми
  • Номер релізу (кількість разів перезбірки програми однієї і тієї ж версії). Також часто використовується для позначення дистрибутиву, під який зібраний цей пакунок, наприклад mdv (Mandriva Linux) або fc4 (Fedora Core 4).
  • Архітектура, під яку зібраний пакунок (i386, ppc і т. д.)

Зібраний пакунок зазвичай має такий формат назви:

<назва>-<версія>-<реліз>.<архітектура>.rpm

Наприклад:

nano-0.98-2.i386.rpm

Іноді в пакунок входять початкові коди. Такі пакунки не містять інформації про архітектуру, вона замінюється на src. Наприклад:

libgnomeuimm2.0-2.0.0-3.src.rpm

Бібліотеки найчастіше розповсюджуються в двох окремих пакунках. Перший містить зібраний код, другий (зазвичай до нього додають -devel) містить заголовні файли і інші файли, необхідні розробникам. Необхідно стежити за тим, щоб версії цих двох пакунків збігалися, інакше бібліотеки можуть працювати некоректно. Пакунки з розширенням noarch.rpm не залежать від конкретної архітектури комп'ютера. Зазвичай вони містять графіку і тексти, що використовують інші програми.

Структура пакунків RPM

[ред. | ред. код]

Пакунок записується у двійковому форматі і складається з чотирьох розділів:[2]

  • початкова ідентифікація пакунка як RPM файла, що містить також деякі застарілі заголовки.
  • Підпис, який може використовуватися для впевненості в цілісності та/або автентичності.
  • Заголовок містить метадані:
    • назва, версія, реліз пакунка
    • архітектура
    • залежності які потребує пакет
    • залежності які надає, задовільняє, для встановлення інших пакетів
    • група пакетів
    • інформація про збірку, з яких вихідних файлів, коли та на якому хості було зібрано пакет
    • список файлів
    • короткий опис, URL та опис пакунку
    • журнал змін
  • Файловий архів cpio який стиснений за допомогою gzip, bzip2 або lzma. Формат RPM 5.0 підтримує архіватор xar.
  • Архів також має скрипти, які виконуються під час встановлення, видалення пакунків.

Переваги і недоліки RPM

[ред. | ред. код]

Переваги RPM над іншими засобами управління і установкою програмного забезпечення:

  • Легкість видалення і оновлення програм
  • Популярність: дуже багато програм збираються саме в RPM, тому немає необхідності збирати програму з вихідних кодів
  • «Неінтерактивна установка»: легко автоматизувати процес установки/оновлення/видалення
  • Перевірка цілісності пакунків за допомогою контрольних сум і GPG-підписів
  • DeltaRPM, аналог patch, що дозволяє відновити встановлене програмне забезпечення з мінімальними витратами на трафік
  • Можливість акумуляції досвіду складальників в spec-файлі
  • Відносна компактність spec-файлів за рахунок використання макросів

Основні недоліки

[ред. | ред. код]
  • Незавершена і застаріла документація (або англомовна чернетка)
  • Збірка пакунка з вихідних кодів зазвичай вимагає великих знань
  • Залежності. RPM не займається задоволенням залежностей. Цю проблему вирішують менеджери yum, urpmi, yast, zypper в залежності від диструбутива.
  • Макропакунки між дистрибутивами можуть істотно розрізнятися
  • Іноді відбувається несумісність версій пакунків при пошуку залежностей (найчастіше це відбувається тоді, коли відбувається спроба встановити пакунок від іншого дистрибутиву, наприклад від Fedora Core до Mandriva)
  • Неможливо розпакувати звичайним ПЗ (в порівнянні з deb (Debian) або tgz (Slackware)). Для цього існує скрипт rpm2cpio.sh [Архівовано 6 березня 2012 у Wayback Machine.] (він розпаковує пакунок за допомогою od, expr, dd і gunzip, а не однією командою)

Створення пакунку

[ред. | ред. код]

Для створення пакунку потрібний spec-файл. Це звичайний текстовой файл, має суфікс .spec і містить в собі назву пакунку, версію, номер реліза, інструкції по збірці і установці пакунку і список змін. За наявності spec-файла пакунок створюється командою rpmbuild

Дуже короткий курс молодого бійця можна знайти тут; з англомовних керівництв можна рекомендувати хоч і старе, але багато в чому (особливо по частині макросів) актуальне Maximum RPM [Архівовано 16 травня 2008 у Wayback Machine.] і чернетка його оновленої версії — RPM Guide.

Приклади використання

[ред. | ред. код]

маніпуляції з пакунками

[ред. | ред. код]
  • rpm -i package-1.2.3-1.el9.x86_64.rpm — встановлення пакунка.
  • rpm -U package-1.2.3-2.el9.x86_64.rpm — за наявності встановленого пакунка package відбудеться його оновлення, за відсутності — встановлення.
  • rpm -e package — видалення пакунка

запити до бази RPM

[ред. | ред. код]
  • rpm -qa — (--all) виведення переліку всіх встановлених пакунків
  • rpm -ql package — виведення переліку всіх встановлених файлів пакунка package
  • rpm -qf /path/to/file — виведення пакунка, якому належить файл /path/to/file
  • rpm -qa --queryformat '%010{SIZE}\t%{NAME}-%{VERSION}-%{RELEASE}\n' — використання визначеного формату запиту при виводі списку всіх встановлених пакунків: розмір файла пакета, назва пакета, версія, реліз.
  • rpm --verify package — проведення перевірки (аудіта) пакунка package. Виявляє файли що стали відсутні або змінені після встановлення пакунка.

База даних RPM

[ред. | ред. код]

База даних RPM представляє собою набір баз Berkeley DB, який ведеться в теці /var/lib/rpm. В них ведеться інформаця про те, які пакет встановлювались, оновлювались, їх залежності, які файли були встановлені операційну систему, їх метадані при встановленні тощо.

При встановленні або видалені програм, rpm перевіряє наявність необхідних залежностей, причому перевіряє не наявність файлів на файловій системі, а наявність саме в цій базі. Залежності іноді собою представляють не тільки файл, а абстрактну сутність, бібліотеку яка

В набір утілит rpm входить функціонал аудиту, який дозволяє перевірити наявність або відсутність файлів які були встановлені в пакеті, їх контрольну суму а також встановлені права.

База даних не має вбудованих механізмів журналювання, тому може постраждати від переривання процесу встановлення/видалення пакетів, помилок, нестачі вільного місця на файловій системі. Це призводить до неконсистентного стану бази, в такому випадку її можна відновити за допомогою rpm --rebuilddb.

При повній втраті бази, її можна відновити з наявних пакунків, з них можна отримати інформацію якою база повинна бути наповнена, в емулювати встановлення без перезапису файлів, а лише записи в базу rpm -ivh --justdb за списком пакунків.

Дистрибутиви Linux

[ред. | ред. код]

Список деяких найвідоміших дистрибутивів Linux, заснованих на RPM:

Виноски

[ред. | ред. код]
  1. а б в http://rpm5.org/roadmap.php
  2. а б Maximum RPM: Taking the Red Hat Package Manager to the Limit. Архів оригіналу за 5 липня 2008. Процитовано 17 липня 2008.

Посилання

[ред. | ред. код]

Дивись також

[ред. | ред. код]