RPM5 — различия между версиями

Материал из Rosalab Wiki
Перейти к: навигация, поиск
м (История появления RPM5: some more historical notes)
(Сравнительный обзор RPM4 и RPM5: + comments)
Строка 51: Строка 51:
 
| Linux || Linux<br/>BSD<br/>Solaris<br/>Mac OS X<br/>Cygwin
 
| Linux || Linux<br/>BSD<br/>Solaris<br/>Mac OS X<br/>Cygwin
 
|}
 
|}
 +
 +
'''Some comments'''
 +
 +
Баги и коммиты подсчитаны за все время существования проектов.
 +
 +
Поддержка многих платформ/компиляторов в RPM5 - это хорошо, но при выборе формата в рамках одного конкретного дистрибутива вряд ли является ключевым фактором.
 +
 +
Насчет поддержки LSB в RPM5 - хорошо бы иметь более детальные сведения - что именно не поддерживается. Вообще вопрос об обновлении RPM в LSB назрел давно, и мы могли бы этим заняться.
 +
 +
В целом, вормат пакетов и функциональные возможности непосредственно инструментария rpm в обоих проектах достаточно близки - например, пресловутые Soft Dependencies (Suggests/Enhances) имеются и там, и там. Большее количество опций в RPM5 объясняется, в основном, алиасами - те же опции '--suggests' и '--enhances' можно элементарно получить и в RPM4.
 +
 +
Существенные отличия имеются во внешнем API. Теоретически, новый API RPM5 должне существенно облегчить создание высокоуровневых инструментов, использующих rpm в качестве бэкенда.
  
 
== RPM в разных дистрибутивах ==
 
== RPM в разных дистрибутивах ==

Версия 09:59, 30 ноября 2011

Целью данного документа является сравнение двух веток развития формата RPM (Redhat Package Manager): RPM версии 4 и RPM версии 5.

История появления RPM5

Краткие сведения по истории возникновения RPM5 можно прочитать в этой статье.

Главное, что следует помнить - RPM4 и RPM5 являются независимыми параллельно развивающимися продуктами. Просто Джефф Джонсон с умом назвал свой форк.

RPM4 некоторое время пребывал в стагнации, однако после активной кампании Джеффа по продвижению RPM5 его разработчики зашевелились и тоже подобавляли всякой современной функциональности наподобий LZMA-сжатия.

Сравнительный обзор RPM4 и RPM5

Таблица 1. Сравнение RPM4 и RPM5
RPM 4 RPM 5
Версия 4.9.1.2 5.4.4
Опции 73 182 (однако сюда вошли build-опции,
а также куча опций,
реализованных через alias)
Строки кода 59,432 285,821
Языки С (90.6%)
Perl (4.3%)
Shell (4.3%)
Others (0.8%)
C (77.5%)
Perl (14.3%)
Shell (2.7%)
Others (5.5%)
Коммиты 11347 16352
Баги 851 68
Разработчики 3-5 3-5
Пользователи RHEL
Fedora
CentOS
SUSE Enterprise
openSUSE
ALT Linux
Mageia
PCLinuxOS
Mandriva Linux
Unity Linux
Wind River Linux
CAOS Linux
Ark Linux
OpenPKG
LSB Совместим Несовместим (не
поддерживает RPM3)
Сжатие Gzip
Bzip2
LZMA
Gzip
Bzip2
LZMA
Поддержка
компиляторов
GCC GCC
Sun Studio
Intel C/C++
Поддержка
платформ
Linux Linux
BSD
Solaris
Mac OS X
Cygwin

Some comments

Баги и коммиты подсчитаны за все время существования проектов.

Поддержка многих платформ/компиляторов в RPM5 - это хорошо, но при выборе формата в рамках одного конкретного дистрибутива вряд ли является ключевым фактором.

Насчет поддержки LSB в RPM5 - хорошо бы иметь более детальные сведения - что именно не поддерживается. Вообще вопрос об обновлении RPM в LSB назрел давно, и мы могли бы этим заняться.

В целом, вормат пакетов и функциональные возможности непосредственно инструментария rpm в обоих проектах достаточно близки - например, пресловутые Soft Dependencies (Suggests/Enhances) имеются и там, и там. Большее количество опций в RPM5 объясняется, в основном, алиасами - те же опции '--suggests' и '--enhances' можно элементарно получить и в RPM4.

Существенные отличия имеются во внешнем API. Теоретически, новый API RPM5 должне существенно облегчить создание высокоуровневых инструментов, использующих rpm в качестве бэкенда.

RPM в разных дистрибутивах

RPM4 используется шире, но часто в него вносятся существенные distribution-specific дополнения.

Таблица 2. RPM в разных дистрибутивах
Дистрибутив Версия Размер патчей
Fedora 4.9 2 Kb (0.1% от исходного кода)
openSUSE 4.9 200 Kb (10%)
Mageia 4.8 40 Kb (3%)
Ark Linux 5.3 40 Kb (1%) (не считая патча, заменяющего db-5.0.21 на db-5.0.26)
Mandriva 5.3 10 Kb (~1%)
ALT Linux 4.0 Размер diff'a - более 50% от оригинала

(понятно, что RHEL/CentOS и клоны используют то, что отточено в Fedora, а SLES - наработки из openSUSE).

Говорить о том, что повсюду используется "чистый" RPM4 из upstream, не приходится. Размеры патчей для RPM5 в Mandriva и Ark не так уж велики по сравнению с тем, что имеет SUSE для RPM4 (не говоря уже об ALT, но это уже крайность).

Информация по RPM4 и RPM5

Таблица 3. Информация по RPM4 и RPM5
RPM 4 RPM 5
Сайт Сайт
Репозиторий Репозиторий
Релизы Релизы
Баги Баги
Коммиты Коммиты
Документация Документация
API API

Анализ совместимости

Формат RPM-пакетов

Форматы бинарных пакетов RPM4 и RPM5 обратно и прямо совместимы, т.е. пакеты, собранные с помощью RPM4, могут быть установлены при помощи RPM5 и наоборот. Стоит заметить, что RPM5 не поддерживает RPM3, который, однако, поддерживается RPM4. Из пресс-релиза RPM5:

Finally, support for the old RPMv3 (LSB) package format was removed to cleanup and simplify the code base. RPM 5, with respect to RPM format packages, now supports RPMv4 format only.

Формат spec-файлов

Форматы spec-файлов для сборки пакетов RPM4 и RPM5, в целом, не совместимы. Изменения в формате spec-файлов частично описаны в этом документе, написанном разработчиками Unity Linux при переходе на RPM5. Несмотря на то, что все старые теги поддерживаются, семантика и синтаксис некоторых из них поменялись. Изменения претерпели следующие конструкции.

Способ отключения макросов

RPM4:

#%post -n foo

RPM5:

#%%post -n foo

Т.е. чтобы закомментировать макрос надо использовать #% вместо #.

Ключевые слова в именах макросов

RPM4:

%define dirname %{version}-%{release}
...
%prep
%setup -qn %{dirname}

RPM5:

error: Bad %setup option -qn: missing argument

Т.е. нельзя использовать имена системных команд для именования макросов, так как rpmbuild сначала попытается выполнить соответствующую команду.

Макрос %exclude изменил значение

Макрос %exclude не влияет на список установленных файлов в секции %install. Т.е. теперь надо вручную удалять ненужные файлы в секции %install.

RPM4:

%exclude %_kde_iconsdir/hicolor/index.theme
...
%install
rm -fr %buildroot
  
%makeinstall_std -C build

RPM5:

#%%exclude %_kde_iconsdir/hicolor/index.theme
...
%install
rm -fr %buildroot

%makeinstall_std -C build
rm -f %buildroot%{_kde_iconsdir}/hicolor/index.theme

API и ABI

Согласно этой таблице, API на языке Си (библиотека librpm) претерпел серьезные изменения. ABI также изменился. Таким образом, все приложения, использующие librpm, должны быть пересобраны, а некоторые - с модификацией исходного кода.

Статьи