Укажите отработанное время

Отработанное время:
Продуктивное время:
Bug 1578 - girar-etersoft-utils -> geet - создание пакетов из git.etersoft   Make a simular bug
Summary: girar-etersoft-utils -> geet - создание пакетов из git.etersoft
Status: CLOSED FIXED
Alias: None
Product: LINUX@Etersoft
Classification: Продукты (Products)
Component: Общее (show other bugs)
Version: не указана
Hardware: PC Linux
: P5 normal
Target Milestone: выпуск 1.0
Deadline: 2008-10-13
Assignee: Dmitry M. Maslennikov
QA Contact:
URL: http://git.etersoft.ru
Whiteboard:
Keywords:
Depends on:
Blocks: 1135
  Show dependency treegraph
 
In work:
Reported: 2008-04-04 11:04 MSD by Евгений Синельников
Modified: 2009-11-20 16:41 MSK (History)
4 users (show)

See Also:
Заявки RT:
Связано с:
Дата напоминания:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Евгений Синельников 2008-04-04 11:04:56 MSD
Необходимо создать набор скриптов для получения пакетов из git.etersoft.
Для этого нужно организовать файл ответсвенных за сборку по аналогии с вариантами:
http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus/files/list/

Формат файла предполагается такой:
_репозиторий1_ _имя1_
_репозиторий2_ _имя2_
_репозиторий3_ _имя3_

при этом сборка должна осуществляться так:

1) делается поиск новых обновлённых репозиториев по схеме
- ищутся все репозитории из списка, для которых не существует пакета более высокой версии в хранилище пакетов. Сравнение проводится по тегу.
- после неудачной сборки имя репозитория и версия тега складываются в кеш, если пакет ранее собрался неудачно, то при автоматической сборке пакетов он пропускается

Для начала нужно просто сформировать список логику выбора по тегу и пропуска по кешу не собранных можно первоначально пропустить...

2) Составленный список пакетов сортируется в порядке для пересборки по зависимостям...

Этот пункт тоже пока можно пропустить...

3) для каждого пакета из найденного списка делается клонирование во временный каталог http://git.etersoft.ru/people/_имя_/packages/_репозиторий_.git,
для которого производится попытка сборки на текущем хранилище пакетов.
Если попытка удалась, то результат перекладывается в хранилище, и делается git-push в http://git.etersoft.ru/archive/_репозиторий_.git, при этом, если в кеше не собранных пакетов, рпеозиторий этого пакета был указан, он от туда убирается. Иначе имя репозитория и версия (пот тегу) заносятся в кеш не собранных.

Итого нужно иметь два скрипта:
1. собрать пакет, который собирает выбранных пакет выписывая его у ответсвенного. Причём, если первоначально пакет будет собираться без учёта тегов (текущий HEAD ветки master), по в дальнейшем хотелось бы в дефолтном состоянии запускать сборку последней версии по тегу, а также уметь указать проивольные ветку и коммит или тег...

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

Хотелось бы хранить в конфиге список переменных с префиксами каталогов и URL репоиториев
Comment 1 Евгений Синельников 2008-04-09 19:09:56 MSD
Сделан пакет утилит autobuild, из которого предполагается собрать набор скриптов для робота. В задачи робота входят регулярные сборки репозиториев из git.eterrsoft.ru, раскладывание результатов в репозиторий разработчиков и оповещение ответственных за сборку об этих результатах.

Необходимо описать логику работы скриптов в виде минимальной документации и организовать разворачиваемое решение поверх girar. Предполагается, что сборка проходит на специально выделенном сервере не привязанном к git.etersoft, что озаначает, необходимость создания специального пользователя, от имени которого который будет вестись работа в каталоге git.etersoft.ru:/archive/.
Comment 2 Евгений Синельников 2008-04-23 10:24:14 MSD
Результат материализовался в виде двух пакетов:
http://git.etersoft.ru/people/sin/packages/autobuild.git
http://git.etersoft.ru/people/sin/packages/geet-robot.git

autobuild представляет набор модулей на питоне для работы с git и gear.
geet-robot - Gear Etersoft Robot - это набор утилит, реализующих политику сборки пакетов из Git-репозиториев rpm-пакетов. В него также водит сервис логика работы которого предполагает организовать автоматическую пересборку пакетов в репозитарий дистрибутива по запросам, событиям обновления репозиториевм и по времени. Пока он находится на стадии доработки. Пакет спланирован так, чтобы разворачиваться на сборочной среде, в которой доступен hasher и репозитории для сборки. Эти параметры могут изменены пользователся, которые въодят в группу geet_admin.

Логика работы робота требует некоторго обсуждения и уточнения всех деталей поп безопасности. Сейчас предполагается, что у робота есть свой безпарольный ssh-ключ, с помощью которого он ходит на git.etersoft.ru, а после удачной сборки пакетов, с помощью этого ключа заливает результат обратно в свой собственный набор репозиториев - /archive. Это несколько отличается от схемы принятой сейчас в ALT Linux. Кроме этого отличия в интепретации собержимого /archive, который в ALT Linux сейчас представляет собой регулярный gear-srpmimport результатов сборки, у нашего робота несколько иной критерий получения обновлений для сборки. Если в ALT Linux планируется использовать теги, то у нас это специальная ветка, в общем случае любая, но по умолчанию - это rc. Push в эту или другую отслеживаемую ветку в girar означает для робота необходимость пересобрать пакет.

Кроме всего прочего в autobuild сейчас входит полезный набот утилит geet-rpm, geet-hsh, позволяющий создавать не конфликтующие rpm-пакеты, для сборок во время отладки. Создавая временный commit утилиты добавляют к релизу суффикс вида dbg%ДАТА.%ВРЕМЯ. Это избавляет от еобходимости отслеживать во время отладки номер релиза, сохраняя возможность, увеличив исходный релиз, получить пакет старше всех предыдущих сборок.

По такой же технологии планируется быть построена сборка пакетов роботом, который будет добавлять с своих репозиториях номер сборки пакета (вида bld1, blb2 и т.д.) и автоматически увеличивать его при пересборке одного и того же коммита.
Comment 3 Евгений Синельников 2008-06-17 19:46:38 MSD
При написании была получена новая формула
gear + etersoft = geet 
Именно так называется изначальный вариант, girar-etersoft-utils.
Comment 4 Евгений Синельников 2008-06-17 19:48:50 MSD
Необходимо будет завершить эту часть для автоматической сборки любых пакетов из gear. Нужна минимальная документация... И, желательно, чтобы первоначальная настройка стала шаблоном для последующего использования по умолчанию.
Comment 5 Евгений Синельников 2008-06-17 20:00:00 MSD
Текущие проблемы:
- почта (отправка уведомлений, включается опцией, по умолчанию отключена);
- переменные окружения, должны использоваться в шаблоне конфига, который по умолчанию настроен для сборки;
- нужные параметры для geet-autobuilder, позволяющие пересобрать один отдельно взятый пакет, заменяя отдельные опции конфига
Comment 6 Евгений Синельников 2008-06-17 20:14:59 MSD
Текущие баги
1) не отрабатывает наследование meta-целей при сборке из git.eter возникает ошибка, хотя аналогичная попытка локальной сборки из git.srv работает:

[sin@server geet]$ geet-autobuilder -v
* Make directory: /home/sin/.geet/history/rect
* Update package rect from ['git.srv:/people/imelnikov/packages/rect.git', 'git.eter:/people/imelnikov/packages/rect.git'] (branch: master)
* Make directory: /home/sin/.geet/archive/rect
$ git-init
 + Initialized empty Git repository in .git/
$ git-fetch  ['git.srv:/people/imelnikov/packages/rect.git', 'git.eter:/people/imelnikov/packages/rect.git'] +master:build
 - ssh: Could not resolve hostname [git.srv: Name or service not known
 - fatal: The remote end hung up unexpectedly
$ git-checkout -f build
 - git checkout: updating paths is incompatible with switching branches/forcing
 - Did you intend to checkout 'build' which can not be resolved as commit?
Traceback (most recent call last):
  File "/usr/bin/geet-autobuilder", line 71, in <module>
    AutoBuilder().process()
  File "/usr/bin/geet-autobuilder", line 66, in process
    ret = self.process_pfiles()
  File "/usr/bin/geet-autobuilder", line 58, in process_pfiles
    ret += [self.build_package(p) for p in packages_from_file(f)]
  File "/usr/bin/geet-autobuilder", line 50, in build_package
    self.update(p)
  File "/usr/bin/geet-autobuilder", line 31, in update
    Builder.update(self, p)
  File "/usr/lib/python2.5/site-packages/geet/builder.py", line 112, in update
    git.checkout('build', '-f')
  File "/usr/lib/python2.5/site-packages/geet/utils/functions.py", line 31, in callf
    return method(*args, **kwargs)
  File "/usr/lib/python2.5/site-packages/geet/git.py", line 59, in checkout
    run('git-checkout %s %s' % (args, branch))
  File "/usr/lib/python2.5/site-packages/geet/utils/functions.py", line 122, in run
    raise RunError, ret
geet.utils.functions.RunError: Abnormal program termination


Содержимое pfile:
meta srv
<------>git = git.srv:/people/${packager}/packages/${name}.git
<------>branch = master
<------>target = i586
<------>destination = sisyphus:/var/ftp/pub/Etersoft
<------>destination = newbranch:/var/ftp/pub/Etersoft
meta eter srv
<------>git = git.eter:/people/${packager}/packages/${name}.git
meta force
<------>force = yes

meta rlz
<------>packager = rlz
meta vano
<------>packager = imelnikov

#python-module-kadmin5 srv vano
#python-module-IceSSL srv vano force
#python-module-Tartarus srv vano force
#Tartarus-Kadmin5 srv vano force
#Tartarus-Hello srv vano force

#python-module-repofilter srv vano
rect srv vano
geet srv rlz

2) не обрабатываются ошибки отсутствия meta-целей. Например, если sin отсутствует, то для "openssl srv sin" мы получим:

[sin@server geet]$ geet-autobuilder -v
Traceback (most recent call last):
  File "/usr/bin/geet-autobuilder", line 71, in <module>
    AutoBuilder().process()
  File "/usr/bin/geet-autobuilder", line 66, in process
    ret = self.process_pfiles()
  File "/usr/bin/geet-autobuilder", line 58, in process_pfiles
    ret += [self.build_package(p) for p in packages_from_file(f)]
  File "/usr/lib/python2.5/site-packages/geet/package.py", line 60, in packages_from_file
    _copy_values(current, clss[1:], meta)
  File "/usr/lib/python2.5/site-packages/geet/package.py", line 33, in _copy_values
    for meta in (meta_dict[i] for i in from_list):
  File "/usr/lib/python2.5/site-packages/geet/package.py", line 33, in <genexpr>
    for meta in (meta_dict[i] for i in from_list):
KeyError: 'sin'

Comment 7 Dmitry M. Maslennikov 2008-10-13 09:28:28 MSD
Уже с месяц используем в офисе. Все, что здесь писалось изменилось и не соответствует полученной системе.