[devel] HOWTO по RPM-версионированию

Damir Shayhutdinov =?iso-8859-1?q?damir_=CE=C1_altlinux=2Eorg?=
Чт Дек 18 17:18:21 MSK 2008


>> VL> Ну это есть в полиси по бэкпортированию. Правда у меня
>> есть к VL> нему поправки :)
> При бэкпортировании устанавливать релиз как
> alt(N-1).MM.(N)
> где N - это номер релиза в Сизифе, MM - это M41, M40 (обозначение
> бранча)

Определение:
дистрибутив - это Сизиф на какой-то определенный момент времени +
переложенные из Сизифа пакеты + updates..

При добавлении новой версии пакета в updates (то есть бэкпортировании)
должны быть выполнены следующие условия:

1. Пакет из updates должен замещать пакет из дистрибутива
2. Пакет из updates должен быть замещен сизифным, вышедшим позже чем
дистрибутивная версия

В терминах rpm, "x должен замещать y" означает EVRx > EVRy. (EVR =
Epoch-Version-Release).
"x должен быть замещен y" означает EVRx < EVRy.

Эти же правила можно распространить на несколько дистрибутивов,
растущий из одного и того же места  - например Desktop 4.0 и школьный
дистрибутив. Надо лишь определить "правила подчинения".

Итого, если в Сизифе на момент отделения бранча был пакет foo с версий
2.0-alt1, и он же без изменений попал в дистрибутив, тогда для
правильной работы обновлений НЕОБХОДИМО, чтобы при добавлении новой
сборки пакета foo в updates/branch, либо релиз был больше alt1, либо
версия была больше 2.0.

Простейший случай - была найдена какая-то ошибка, пакет был обновлен в
Сизифе до версии 2.0-alt2. После чего возникла необходимость
сбэкпортировать исправления из Сизифа в бранч.

Получаем два условия: релиз должен быть больше alt1, но меньше чем alt2.
Тут отлично подходит то самое правило бэкпортирования.
По правилу, релиз формируется как alt(2-1).M41.0, то есть alt1.M41.0

Правило работает.

Если в Сизифе была обновлена версия (2.1-alt1), то при бэкпортировании
надо выбирать такой релиз, который был бы меньше alt1. Правило
работает и в этом случае, то есть будет релиз alt0.M41.0 - и все
довольны.

Проблема возникает, когда в Сизифе пакет не обновился, но необходимо
обновить версию в бранче.
Допустим, в сизифе так и осталась версия 2.0-alt1. А нам необходимо
обновить пакет в бранче, не обновляя его в Сизифе.

По правилу, релиз должен быть 2.0-alt0.M41.0. Проблема в том, что этот
пакет не обновит уже установленный из бранче пакет 2.0-alt1. Придется
выкинуть правило, и сделать 2.0-alt1.M41.0. Но тогда апгрейд с бранча
до Сизифа будет сломан. К сожалению, без обновления пакета в Сизифе
этот вопрос не решить. Если между бранчем и Сизифом нету "зазора
версий", обновление будет сломано.

В общем, не все так просто. К счастью, такие экзотические случаи
довольно редки и их можно решить взаимодействием мантейнеров.


Подробная информация о списке рассылки Devel