[Devel] Рабочие окружения, сборочные среды, репозитории

Evgeny Sinelnikov sin на etersoft.ru
Вт Июл 20 00:51:02 MSD 2010


Здравствуйте,

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

*Обоснование.*

 Для того, чтобы вести совместную работу над проектами АСУ, требуется
общая рабочая среда. Сейчас такую среду принято называть
_сборочной_средой_, представляющей обычно установленную систему. Такая
система может быть установлена как на тестовый компьютер, так и на
виртуальную машину.

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

 Пакетная база для состоит из базового репозитория Sisyphus, 5.1, 5.0
(далее BASE_REPO) и т.д. и дополнительных репозиториев, в которые мы
компонуем, собираемые нами пакеты. Дополнительные репозитории у нас
состоят из следующих компонент:
 /var/ftp/pub/Etersoft/LINUX на Etersoft/$BASE_REPO - для пакетов
доступных публично
 /var/ftp/pvt/Etersoft/LINUX на Etersoft/$BASE_REPO - для пакетов
доступных только в офисе

Для публичных проектов пакетная база составляется из двух репозиториев:
 /var/ftp/pub/ALTLinux/$BASE_REPO
 /var/ftp/pub/Etersoft/LINUX на Etersoft/$BASE_REPO

Для закрытых проектов - из трёх:
 /var/ftp/pub/ALTLinux/$BASE_REPO
 /var/ftp/pub/Etersoft/LINUX на Etersoft/$BASE_REPO
 /var/ftp/pvt/Etersoft/LINUX на Etersoft/$BASE_REPO

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

Для публичных проектов в карманах пакетная база составляется из трёх
репозиториев:
 /var/ftp/pub/ALTLinux/$BASE_REPO
 /var/ftp/pub/Etersoft/LINUX на Etersoft/$BASE_REPO
 /var/ftp/pub/Etersoft/LINUX на Etersoft/Pockets/$POCKET_NAME

Для закрытых проектов в карманах - из четырёх репозиториев:
 /var/ftp/pub/ALTLinux/$BASE_REPO
 /var/ftp/pub/Etersoft/LINUX на Etersoft/$BASE_REPO
 /var/ftp/pvt/Etersoft/LINUX на Etersoft/$BASE_REPO
 /var/ftp/pvt/Etersoft/LINUX на Etersoft/Pockets/$POCKET_NAME

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

Фиксирование пакетной базы - это копирование базовых репозиториев, для
исключения их не явного обновления. К примеру, 5.1 в ALTLinux
обновляется асинхронно и единственный способ ограничить приток новых
пакетов - сделать копию.

*Предложение о фиксации пакетной базы для АСУ решений в Этерсофт.*

В ALTLinux Принято следующее соглашение о Ветках или Срезах. В каталог
/var/ftp/pub/Etersoft/LINUX на Etersoft/$BASE_REPO/branch
копируется срез исходный Сизифа. Получается обновляемый репозиторий.
Далее этот репозиторий обновляется отдельно от Сизифа. В него не
вносятся новые версии библиотек, сохраняются зависимости и проводятся
другие ограничения по сохранению бинарной совместимости пакетной базы.
Это обеспечивает возможность гарантированной репрезентативности
решений на базе, используемой Ветки.

По мере фиксации решений на основе заданной Ветки. Решения фиксируются
в виде копий каталога
/var/ftp/pub/Etersoft/LINUX на Etersoft/$BASE_REPO/branch
Например, для АСУ можно сделать
/var/ftp/pub/Etersoft/LINUX на Etersoft/$BASE_REPO/asu

В решениях ALTLinux эти копии не принято обновлять. Созданные
репозитории являются зафиксированными наборами пакетов, поставляемых в
Решениях ALTLinux. Для каждого проекта предполагается вести отдельную
Ветку. В ряде случаев, копий репозиториев поставляемых решений не
делается. Решения фиксируются в тех ISO-образах, которые создаются.
При этом, сборочная среда, тех ISO-образов, куда не входят
devel-пакеты и т.п. теряет возможность быть восстановленной.

Поскольку в решениях для АСУ никаких образов не делается, для фиксации
пакетной базы используются копии репозиториев. Существенным отличием
этих копий от копий репозиториев ALTLinux, является их неполнота. Наши
репозитории являются довеском к репозиториям ALTLinux. Соответственно,
при фиксации пакетной базы, требуется делать копии не только наших
репозиториев, но и репозиториев ALTLinux.

*Пример текущего решения*

В текущем решении для standpm, у нас используются следующие репозитории:
 /var/ftp/pub/ALTLinux/5.1
 /var/ftp/pub/Etersoft/LINUX на Etersoft/5.1/branch
 /var/ftp/pvt/Etersoft/LINUX на Etersoft/5.1/branch
 /var/ftp/pvt/Etersoft/LINUX на Etersoft/Pockets/standpm

Вариант с карманом выбран, в данном случае, потому, что проектов на
5.1 у нас может быть несколько. В ином случае все пакеты можно было бы
хранить в закрытом  LINUX на Etersoft/5.1.

В зафиксированном виде, проект standpm может выглядеть следующим образом:
1)
 /var/ftp/pvt/Etersoft/LINUX на Etersoft/5.1/asu.classic (срез ALTLinux 5.1)
 /var/ftp/pvt/Etersoft/LINUX на Etersoft/5.1/asu.addon (срез публичного
Etersoft 5.1 Addon)
 /var/ftp/pvt/Etersoft/LINUX на Etersoft/5.1/asu (общий набор закрытых
пакетов АСУ для 5.1 - uniwidgets и т.д.)
 /var/ftp/pvt/Etersoft/LINUX на Etersoft/Pockets/standpm (пакеты проекта standpm)
2)
 /var/ftp/pvt/Etersoft/LINUX на Etersoft/5.1/asu.classic (срез ALTLinux 5.1)
 /var/ftp/pvt/Etersoft/LINUX на Etersoft/5.1/asu.addon (срез публичного
Etersoft 5.1 Addon)
 /var/ftp/pvt/Etersoft/LINUX на Etersoft/5.1/asu (общий набор закрытых
пакетов АСУ для 5.1, включая все пакеты отдельных проектов)

Предлагаю рассмотреть эти два случая. Думаю, что для АСУ выгоднее
вести одну общую ветку на каждом базовом репозитории. Тестировать
можно продолжать в кармане. В итоге, результатом, который мы отдаём
является полный срез пакетов.

sources.list для проекта АСУ standpm, при этом, будет выглядеть вот так:
rpm  file:///var/ftp/pub/ALTLinux/ 5.1/i586 classic
rpm  file:///var/ftp/pub/Etersoft/LINUX@Etersoft/ 5.1/branch/i586 addon
rpm  file:///var/ftp/pvt/Etersoft/LINUX@Etersoft/ 5.1/branch/i586 addon
rpm  file:///var/ftp/pvt/Etersoft/LINUX@Etersoft/ Pockets/standpm/i586 pocket

Доступ к этим источникам лучше организовать символическими ссылками,
через отдельные каталоги, которые в будущем станут отдельным срезом:
rpm  file:///var/ftp/pvb/Etersoft/LINUX@Etersoft/ 5.1/asu.classic/i586 classic
rpm  file:///var/ftp/pvt/Etersoft/LINUX@Etersoft/ 5.1/asu.addon/i586 addon
rpm  file:///var/ftp/pvb/Etersoft/LINUX@Etersoft/ 5.1/asu/i586 addon
rpm  file:///var/ftp/pvt/Etersoft/LINUX@Etersoft/ Pocket/standpm/i586 pocket

В случае использования общего репозитория каталога с репозиторием
кармана (pocket) не будет.

В таком виде я предлагаю сохранять срезы. Из существенных моментов
важных для организации такой работы хочу отметить следующие:
- для организации сборочных песочниц нужно использовать заданные
репозитории (sources.list я указал);
- итоговые результаты нужно собирать в репозиторий проекта (отдельный
pocket или общий addon);
- промежуточные результаты для обмена пересобираются для тестирования
в репозиторий проекта по мере работы. Они обеспечивают единую,
повторяемую в chroot или hasher, рабочую среду.

-- 
Sin (Sinelnikov Evgeny)


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