пятница, 13 января 2012 г.

Немного подробностей про RPM5

   Пожалуй мне уже давно следовало написать про это, тем более, что домыслов, слухов и кривотолков на данную тему существует просто бесчисленное множество. Попробую хоть немного положить этому конец в меру своих скромных способностей.
Текст далее нисколько не претендует на полный и исчерпывающий обзор, он лишь охватывает наиболее заметные и серьёзные изменения в сравнении с «оригинальным» RPM от компании Red Hat.


Кому оно нужно?


   Начать наверное стоит с того, что вопреки весьма крайне распространённому мнению, данный формат пакетов использует далеко не только Mandriva/ROSA Linux. Самыми первыми кто начал использовать данную версию RPM, были товарищи занимающиеся разработкой Unity Linux, если не ошибаюсь. Помимо команды Unity Linux, RPM5 используют такие дистрибутивы как весьма известный Wind River Linux, известный своей большой простотой Ark Linux (хоть и достаточно давно не обновлявшийся, к сожалению), проект OpenPKG, CAOS Linux и OpenEmbedded.
   Хотелось бы заодно мимоходом развенчать заодно ещё довольно распространённое заблуждение. ALT Linux rpm 5.x не использует. В этом дистрибутиве задействован очень сильно доработанный rpm 4.0. Сама идея о переходе ALT Linux на пятый RPM действительно существовала, были даже какие-то патчи присланные в рассылку разработчиков, но дальше этого дело не зашло.

Зачем оно потребовалось?

   Вообще, задачи написания отдельного форка для rpm поначалу и не стояло. Более того, какие-то из изменений повлекших за собой расширение функциональности начали проводиться ещё в существующей на тот момент актуальной версии rpm 4.x. Но у тогдашнего ведущего разработчика и мантейнера Джеффа Джонсона давно ходила мысль о проведении глубокого рефакторинга кода RPM4, ибо за десять лет развития там уже накопилась масса мусора и просто мало кому нужных или потерявших актуальность вещей. Но в виду проблем с принятием патчей в основной продукт и общей политикой Red Hat, направленной на сохранение совместимости и стабильную работу у корпоративных заказчиков, это вылилось в отдельный проект получившего название RPM5.
   Ещё одна причина повлекшая за собой создание RPM5 — создание технологического задела на будущее, призванный создать значительно более цельный и универсальный пакетный менеджер. Это сильно отличается от той ситуации, что наблюдается сейчас в четвёртой ветке rpm, когда практически каждый rpm-based дистрибутив дописывает массу вещей «под себя», как это делает, скажем, openSUSE или Mageia. Причём количество дописываемого кода может варьироваться от пары десятков строк, до патчей устрашающих размеров, как это наблюдается в случае ALT Linux.
   Ещё одной причиной побудившей создать RPM5 — серьёзная переработка API и ABI, которая в теории должна значительно упростить создание высокоуровневых приложений работающих с rpm, а также сильно облегчить работу мантейнерам связанную с сопровождением пакетной базы дистрибутива.

Что мы с этого имеем?

   Результат форка — вычищено очень много устаревшего и ненужного кода. В частности, удалена совместимость с RPM v3, убраны неиспользуемые или устаревшие биндинги для языка Perl и добавлены новые. Очень много внимания уделяется вопросам тестирования, для чего в код RPM5 внесены функции предназначенные для проверки сборки пакетов и обратной совместимости с предыдущими версиями. Туда же был добавлен интерпретатор для языка программирования Lua, добавлена поддержка синтаксиса YAML для файлов спецификаций, добавлены биндинги для достаточного популярного на сегодняшний день языка программирования Ruby. В результате всей получившейся чистки и переработки кода было ускорено проведение множества операций и решён ряд старых проблем.
   Что касается нашумевшей возможности под названием «мягкие зависимости» про которую все вспоминают когда речь заходит об отличиях между этими двумя разработками, то данный функционал на самом деле есть и в RPM4. Кому интересно, поищите информацию о тегах SUGGESTS и ENHANCES.
Отличие реализации «мягких зависимостей» от RPM4 в том, что у RPM5 помимо вышеуказанных первых двух тегов ещё существует специальный атрибут - RPMSENSE_MISSINGOK, который можно указать для каждой зависимости из набора REQUIRES, а не только для всего пакета целиком. Впрочем по состоянию на текущий момент, данный функционал уже перенесён и в rpm 4.x.
   На момент появления RPM5 туда также было добавлено множество других возможностей, которые в тот момент в RPM4 отсутствовали. Это поддержка алгоритма сжатия LZMA, улучшенная обработка событий при установке, обновлении и удалении пакетов и многое другое. Часть из этих нововведений уже сейчас есть и в RPM4, а кое-что из этого появилось в rpm 4.x совсем недавно. Дополнительное нововведение RPM5 - поддержка компиляторов Sun Studio и Intel C Compiler, а не только GCC.
Ещё одно достаточно важное отличие в сравнении с изначальным продуктом — поддержка платформ отличных от Linux. В настоящий момент, помимо Linux уже поддерживаются MacOS, *BSD, Cygwin и Solaris. Так что в будущем ничто не мешает добавить поддержку «настоящей» Windows, а не через cygwin. Было бы забавно это увидеть, конечно. К слову говоря, в рассылке на rpm5.org я уже видел идеи по созданию утилиты вроде rpm2msi или некоего аналога alien.
   Для мантейнеров и пользователей всё должно быть достаточно прозрачно, поскольку форматы пакетов обеих версий rpm прямо и обратно совместимы, поддерживается подавляющее большинство макросов в spec-файлах. Да и вообще, насколько я могу судить, вопросам совместимости здесь уделяется весьма немало внимания. Тем не менее, несмотря на поддержку старых конструкций, кое-что претерпело изменения. К примеру, сменился синтаксис и поведение некоторых макросов вроде %post и %exclude. Расширены возможности некоторых уже существующих старых макросов. Например, для %install была добавлена функция ускоренной сборки пакета, минуя некоторые шаги.
   Что ещё здесь можно упомянуть? Для утилиты rpm сделано множество новых опций и алиасов, полный список которых можно посмотреть здесь. Если смотреть в общем и в целом, то RPM5 развивается значительно активнее, нежели его сосед из Red Hat.
   Чего нет в RPM5 — так это поддержки стандарта LSB, в виду того, что совместимость с RPM v3 была убрана. Но надо заметить, что для Mandriva/ROSA Linux данная функциональность была специально оставлена для соответствия дистрибутива данному стандарту. В комитете занимающемся разработкой стандарта LSB про эту ситуацию в курсе, поскольку там хорошо понимают, что RPM v3 уже действительно крайне устарел. Насколько мне известно, в грядущей версии LSB за номером 5.0 (или чуть старше) требования к RPM будут значительно переработаны в соответствии с изменившимися реалиями.

Выводы

   В заключение, хотелось бы подытожить написанное выше. Можно сказать, что для пользователей и мантейнеров дистрибутивов, RPM5 не несёт каких-то сильно революционных идей и изменений, все имеющиеся там наработки больше предназначены для разработчиков. Будет ли существовать этот проект в будущем и насколько он нужен - покажет время, но его текущее бурное развитие, наличие достаточного количества действующих комиттеров, его активное обсуждение в почтовых рассылках мне лично внушает оптимизм.

1 комментарий: