Сеть автоматической сборки

Сеть автоматической сборки (autobuilder) является разработкой Debian, управляющей компиляцией пакетов для всех поддерживаемых в настоящее время в Debian архитектур. Эта сеть состоит из нескольких машин, использующих специальный пакет ПО, называемый buildd для выборки пакетов из архива Debian и пересборки их для целевой архитектуры.

Зачем нужна сеть автоматической сборки?

Дистрибутив Debian поддерживает довольно много архитектур, но сопровождающие пактов обычно компилируют двоичные версии только для одной архитектуры, к которой у них есть доступ (обычно i386 или amd64). Другие сборки создаются автоматически, гарантируя, что каждый пакет будет собран только один раз. Неудачные попытки сборки отслеживаются в базе данных автоматического сборщика.

Когда был начат перенос Debian/m68k (первый перенос на платформу, отличную от Intel), его разработчикам приходилось следить за новыми версиями пакетов и перекомпилировать их, если они хотели, чтобы эти пакеты были актуальны относительно дистрибутива на платформе Intel. Всё это делалось вручную: разработчики отслеживали в списке рассылки загрузки пакетов новые пакеты и выбирали некоторые из них для сборки. Координация того, что ни один пакет не будет собран дважды разными людьми, происходила путём анонсирования в списке рассылки. Очевидно, эта процедура подвержена ошибкам и затратна в плане времени. Тем не менее, на протяжении долгого времени это было обычным способом поддержания актуальности выпусков для платформ, отличных от i386.

Система службы сборки автоматизирует большую часть этого процесса. Она состоит из набора сценариев (написанных на Perl и Python), которые со временем были разработаны для того, чтобы помочь тем, кто осуществляет перенос, в решении различных задач. Наконец они развились до уровня системы, которая способна поддерживать выпуски Debian в актуальном состоянии почти целиком автоматически. Обновления безопасности собираются на том же наборе машин, чтобы гарантировать своевременную доступность этих обновлений.

Как работает buildd?

Buildd — имя, которое обычно даётся программному обеспечению, используемому сетью автоматической сборки, но в действительности это ПО состоит из нескольких частей:

wanna-build
инструмент, который помогает координировать (пере)сборку пакета с помощью базы данных, в которой хранится список пакетов и их статус. Существует одна центральная база данных для каждой архитектуры, в которой сохраняются состояния пакета, версии и некоторая другая информация. База данных наполняется содержанием файлов Sources и Packages, получаемых из различных архивов пакетов Debian (напр., ftp-master и security-master).
buildd
служба, периодически проверяющий базу данных, поддерживаемую wanna-build и вызывающий sbuild для сборки пакетов. После принятия журнала сборки администратором buildd, эта служба загружает пакет в соответствующий архив.
sbuild
ответственна за фактическую компиляцию пакетов в изолированных окружениях chroot. Она гарантирует, что все требуемые для исходного кода зависимости будут установлены в chroot до начала сборки, и затем вызывает стандартные инструменты Debian для запуска процесса сборки. Журналы сборки отправляются в базу данных журналов сборки.

Все эти части функционируют вместе для того, чтобы работала сеть сборки.

Что должен делать разработчик Debian?

В действительности, обычному разработчику Debian не нужно явным образом использовать сеть buildd. Когда он загружает пакет в архив (двоичный скомпилированный пакет для данной архитектуры), он будет добавлен в базу данных для всех архитектур (в состоянии Needs-Build). Машины сборки отправят запрос в базу данных о наличии пакетов в этом состоянии, и в плановом порядке получат пакеты из этого списка. Список отсортирован по предыдущему состоянию компиляции (либо out-of-date, либо uncompiled), приоритету, разделу и имени пакета. Более того, для того, чтобы не допустить задержки некоторых пакетов в конце очереди, приоритет пакетов динамически увеличивается с увеличением времени ожидания в очереди.

Если сборка завершилась успешно для всех архитектур, сопровождающему больше ничего делать не нужно. Все эти двоичные пакеты будут загружены в соответствующий архив. Если сборка не была успешна, пакет входит в специальное состояние (Build-Attempted для неудач при сборки, которые не были просмотрены администратором, Failed для просмотренных администратором и указанных в отчёте об ошибке, либо Dep-Wait, если они зависят от конкретных сборочных зависимостей, которые пока недоступны). Администраторы сети автоматической сборки просматривают пакеты, сборка которых не была успешна, и сообщают о проблемах сопровождающему, обычно путём открытия ошибки в системе отслеживания ошибок.

Иногда для того, чтобы собрать пакет для данной архитектуры, требуется большое количество времени, что не даёт пакету войти в тестируемый выпуск. Если переход пакета задерживается, по запросу выпускающей команды обычно изменяются его приоритет сборки. Другие запросы не будут приняты, поскольку увеличение времени ожидания в очереди приведёт к автоматическому увеличению приоритета сборки.

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

Дополнительную информацию о различных состояниях пакетов см. на странице wanna-build-states.

Где я могу найти дополнительную информацию?

Конечно, доступная документация и исходный код этих инструментов является лучшим способом понять то, как работает сеть buildd. Дополнительно см. раздел Перенос и переносимое Руководств разработчика Debian, где представлена дополнительная информация о том, как работает сеть автоматической сборки, также там представлена некоторая информация о сборщиках пакетов и инструментах переноса, которые используются в процессе установки и настройки, а также сопровождения сети buildd.

На странице статистики buildd доступна некоторая статистика о работе сети автоматической сборки.

Как я могу настроить собственный узел сети автоматической сборки?

Вот несколько причин, почему разработчик (или пользователь) может захотеть установить и запустить автоматический сборщик:

См. дополнительную информацию о том, как настроить автоматический сборщик.

Связь с администраторами buildd

Связаться с администраторами, ответственными за buildd для какой-то определённой архитектуры, можно по адресу arch@buildd.debian.org, напр. i386@buildd.debian.org.


Это введение в сеть автоматической сборки было написано Романом Ходеком (Roman Hodek), Кристианом Штайгисом (Christian T. Steigies), Вутером Ферелстом (Wouter Verhelst), Андреасом Бартом (Andreas Barth), Франческо Паоло Ловержи (Francesco Paolo Lovergine), Хавьером Фернандез-Сангуино (Javier Fernández-Sanguino) и Филиппом Керном (Philipp Kern).