RPM5
Целью данного документа является сравнение двух веток развития формата RPM (Redhat Package Manager): RPM версии 4 и RPM версии 5.
Содержание
История появления RPM5
Краткие сведения по истории возникновения RPM5 можно прочитать в этой статье.
Главное, что следует помнить - RPM4 и RPM5 являются независимыми параллельно развивающимися продуктами. Просто Джефф Джонсон с умом назвал свой форк.
Сравнительный обзор RPM4 и RPM5
RPM 4 | RPM 5 | |
---|---|---|
Версия | 4.9.1.2 | 5.4.4 |
Опции | 73 | 182 |
Строки кода | 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 |
Gzip Bzip2 LZMA |
Поддержка компиляторов |
GCC | GCC Sun Studio Intel C/C++ |
Поддержка платформ |
Linux | Linux BSD Solaris Mac OS X Cygwin |
RPM4 в разных дистрибутивах
RPM4 используется шире, но часто в него вносятся существенные distribution-specific дополнения.
Дистрибутив | Версия | Размер патчей |
---|---|---|
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
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, должны быть пересобраны, а некоторые - с модификацией исходного кода.