[devel] Персональная собиралка Сизифа

Evgeny Sinelnikov =?iso-8859-1?q?sin_=CE=C1_altlinux=2Eru?=
Ср Май 7 03:47:02 MSD 2008


2008/5/7 Dmitry V. Levin <ldv на altlinux.org>:
> On Wed, May 07, 2008 at 02:40:16AM +0400, Wartan Hachaturow wrote:
>  > 2008/5/7 Alexey Gladkov <legion на altlinux.ru>:
>  > >  Раз это не сложно, то расскажи как узнать из какого git репозитория
>  > > собирасется пакет FooBar, при условии что из одного репозитория может
>  > > собираться не один пакет и то что имена пакетов и репозиториев не всегда
>  > > совпадают. Меня интересует альгритм поиска соотвествия. Я такого альгоритма
>  > > придумать не могу.
>  >

Я сейчас как раз нахожусь на стадии формализации процесса сборки
пакетов. При этом я ввёл ряд ограничений... Прежде всего это относится
к переходу от использования src.rpm-пакетов, в качестве первичного
источника, к gear-репозиториям. То есть сборка свалки из
src.rpm-пакетов сводится к предварительному импортированию этих
пакетов в git. Благо git.alt/archive делается путём gear-srpmimport...
При этом отпадает необходимость в излишней эвристике. Насчёт git
задано одно ограничение - сборка учитывает не теги, а выбранную
ветку... её обновление - означает необходимость пересобрать пакет.

Собиралка предполагает использовать gear --hasher для замыкания
сборочной среды, на выбранном репозитории. Особенность gear по сборке
src.rpm-пакета в chroot'е является здесь существенным моментом, хотя
это и приводит в к тому, что BuildRequires(pre) начинает требоваться
то там, то тут...

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

Для бинарных пакетов предполагается, что результат сборки является не
только функцией исходного пакета, но и того набора бинарных пакетов,
на котором собирается исходный. Поэтому при сборке всегда добавляется
номер сборки %release.bld1, %release.bld2, ... Это унифицирует процесс
пересборки...

В общем пока это только стадия формализации процесса сборки пакетов,
которая доведена, до необходимого минимума.

Скрипт называется autobuilder:
http://git.etersoft.ru/people/sin/packages/geet-autobuilder.git
Но он пока далёк от совершенства... К сожалению он настолько сырой,
что использовать его пока можно только для фиксированного набора
задач... Проблема также состоит в том, что многие пакеты не содержат
правильных зависимостей BuildRequires(pre), которые могут
потребоваться не только для вычисления nvr, но и, например, для
раскрытия макросов вида %get_version, указанных в зависимостях.

В этом плане меня интересует вопрос, существуют ли средства для
вычисления порядка сборки пакетов, если необходимо собрать несколько
взаимозависимых пакета? Как при этом принято поступать?

Кстати, наткнулся на то, что в kdelibs есть race на уровне генерации
заголовочных файлов и, в стандартной схеме сборки на многопроцессорной
или многоядерной машине. Поэтому этот пакет может собираться
"иногда"...

>  > У вас в rpm-мире вообще никогда ничего нельзя понять точно -- даже то,
>  > где кончается имя пакета и начинается версия по имени файла ;) Это я
>  > уже осознал.
>
>  В версии, релизе и архитектуре пакета не может быть дефисов, так что, если
>  имя файла пакета каноническое (не было переименовано для запутывания
>  следов), то имя, версию, релиз и архиткутуру пакета можно идентифицировать
>  однозначно по имени файла пакета.
>

Для этого можно, например, относительно легко воспользоваться
python-modules-rpm, который умеет парсить заголовки пакетов.

>
>  > Поскольку в данном случае речь идёт только об src.rpm'ах, то
>  > однозначное отображение между репозиторием и src.rpm установить можно,
>  > я полагаю.
>
>  В 90% случаев (число взято с потолка, но ситуацию отражает) можно.
>

-- 
Sin (Sinelnikov Evgeny)


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