Міжнародная канферэнцыя распрацоўнікаў і карыстальнікаў свабодных праграм

OBS - частная практика. Заметки на полях

Denis Pynkin, Minsk, Belarus

LVEE 2012

Open Build Service (OBS) — is an open and complete distribution development platform. It provides the infrastructure to easily create and release open source software for openSUSE and other Linux distributions on different hardware architectures. This article describe some approaches for usage of private OBS instance in development process.

Некоторые проблемы коммерческой разработки Подавляющее большинство современных дистрибутивов на базе ОС Linux использует бинарные пакеты для распространения программного обеспечения. Таким образом гарантируется, что все пользователи получают программы скомпилированные «правильной» версией компилятора, в «правильном» окружении и с корректно установленными зависимостями на другие программы и библиотеки, необходимые для функционирования. В общем случае это означает, что между исходным кодом и конечным пакетом находится целый пласт процессов и правил, описывающих как правильно «приготовить» программное обеспечение из исходного кода, причем эти процессы и правила уникальны для различных семейств дистрибутивов. Такая сегментация часто приводит к тому, что коммерческие разработки все теснее интегрируются с каким-либо единожды и давно выбранным дистрибутивом. Процесс разработки коммерческого продукта предназначенного для bare-metal установки во многом схож с созданием форка выбранного дистрибутива и последующей его поддержкой, так что переход на другую, более подходящую в современных реалиях базу, потребует от производителя больших затрат времени, сил и средств, фактически останавливая разработку своего продукта на время переезда. Еще одна проблема, с которой сталкиваются разработчики — это смешивание и наслоение правил создания программного обеспечения, сборочной среды и подготовки рабочего образа операционной системы. Даже изначально отлично спроектированный и реализованный процесс, с годами начинает обрастать дополнительными «фичами» и «подпорками», которые сплетают красивую и стройную систему в единый клубок, распутать который становится проблематично. Сборочные системы призваны упростить и минимизировать работу человека по созданию и сопровождению программного обеспечения, входящего в дистрибутив. Кроме того они стараются отслеживать соблюдение правил создания программного обеспечения и результирующего установочного образа. Одна из лучших по совокупности параметров и возможностей система автоматической сборки общего назначения — это Open Build Service 1, представляющая собой универсальную модульную и расширяемую базу для создания проектов любого уровня. Проекты в OBS Проект в OBS — это это организационная единица, представляющая собой единую площадку с общими правилами сборки для всех пакетов. Проект включает в себя:
  • конфигурацию проекта, включая макросы и определения используемые в
    сборочной среде;
  • сборочные цели — дистрибутивы, на базе которых OBS будет пытаться
    собрать пакеты, входящие в проект.
  • пакеты, состоящие из:
  • исходного кода;
  • правил сборки программного обеспечения (spec, dsc) или дискового
    образа (kiwi).
Конфигурация проекта, сборочные цели и зависимости, прописанные в правилах сборки, описывают, как будет создаваться сборочное окружение для конкретного пакета и какое программное обеспечение туда будет входить. Конфигурации проекта наследуются из базового проекта, который определяется сборочной целью — так, для сборки одного и того же пакета, но для разных сборочных целей, например для Fedora и CentOS, будет использоваться различный набор макросов, а зависимость foo, прописанная в spec-файле, будет преобразована в foo-fedora и bar-centos соответственно. Распределенная инфраструктура Одна из интереснейших возможностей OBS — возможность взаимодействия между серверами. В архитектуру OBS изначально заложена развитая система кэширования, которая позволяет минимизировать сетевой трафик и нагрузку на отдельно взятый сервер — ведь передаются только обновленные пакеты, причем обновления отслеживаются автоматически, как на стороне сервера, так и на стороне клиента. Такой режим работы особенно актуален для географически распределенных офисов, так как позволяет переложить на плечи сборочной системы отслеживание изменений в зависимостях, их автоматическое скачивание и пересборку локальных проектов с уведомлением о результате. Кроме того, можно создавать локальные сборочные фермы, расположенные близко к разработчикам, если в этом есть необходимость. Взаимодействие с системами контроля версий исходного кода OBS поддерживает версионирование исходного кода в стиле Subversion. Однако, по внутренним правилам многих коммерческих компаний для хранения исходного кода требуется использовать какую-либо внутреннюю систему контроля версий. В таких случаях на помощь приходят сервисы — специальные расширения, позволяющие взаимодействовать с системами контроля версий исходного кода и преобразовать исходный код в нужный вид, например выкачать исходники, находящиеся в определенном бранче git-репозитория, упаковать их в tar архив со строго определенным именем, сжатый gzip. В результате OBS сервер хранит только последнюю версию исходного кода, в остальном полагаясь на систему контроля версий, что, в вырожденном случае, позволяет хранить там весь исходный код, включая правила для сборки. Частный сервер для проекта Для организации частной сборочной системы рекомендуется 2 использовать специально подготовленные образы, доступные по адресу http://download.opensuse.org/repositories/openSUSE:/Tools/images/. В зависимости от того, какие задачи необходимо решать разработчикам, а так же от наличия ресурсов, можно выделить режимы использования локального сервера OBS:
  • с подключением к внешним серверам;
  • изолированный — полностью автономный сервер без связи с внешним
    миром.
В режиме подключения локальный сервер зависит от внешних серверов, которые предоставляют базу для разработки. Такой режим отлично подходит для компаний, которые хотят протестировать сборку своего программного обеспечения на множестве различных дистрибутивов. Еще один плюс подключения к внешним серверам — минимизация инфраструктуры, что особенно хорошо подходит для стартапов, так как в OBS интегрировано множество возможностей для совместной работы, начиная от контроля версий исходного кода и заканчивая взаимодействием между разработчиками. Можно подчеркнуть, что отпадает необходимость иметь в штате системного программиста, так как в простейшем случае установить, настроить и использовать OBS сможет даже школьник. В изолированном режиме придется самостоятельно создавать «базовые» проекты 3 и всю инфраструктуру. Кроме того увеличивается нагрузка на сопровождение, так как приходится самостоятельно отслеживать апдейты системы и изменения в настройках соответствующего проекта. Тем не менее такой режим позволяет создавать полностью автономную и независимую сборочную инфраструктуру, что является определяющим фактором с долговременной точки зрения.

Bibliography

1 Пынькин Д.А. Обзор Open Build System. http://winter.lvee.org/ru/articles/269

2 Build Service private installation. http://en.opensuse.org/openSUSE:Build Service private installation

3 Build Service private instance boot strapping. http://en.opensuse.org/openSUSE:Build Service private instance boot strapping

Лицензия Creative Commons
Текст тезисов доступен под лицензией Creative Commons Attribution-ShareAlike 3.0.