Система сборки

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

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

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

Overview

Система сборки представляет собой набор Make-файлов и утилит, организованных в одном каталоге, который монтируется в исходное дерево разрабатываемого продукта.

Основной задачей системы сборки является автоматизация всех этапов создания программного продукта, начиная с организации работ с архивами исходных текстов сторонних производителей и заканчивая выпуском собственного отчуждаемого дистрибутива.

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

Подробности ≫

Package Tools

Средства управления пакетами изначально предназначены для работы в трех режимах.

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

Во-вторых, утилиты можно использовать во время работы системного инсталлятора, например, для организации диалога с пользователем перед инсталляцией наборов пакетов.

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

Подробности ≫

User's Makefile

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

После того как заданы все зависимости, необходимо описать конечный пакет, а именно его название, версию, целевую архитектуру, дать краткое описание, которое будет представлено пользователю системы.

И наконец, пользовательский Make-файл должен определять основные цели сборки и правила, по которым создается пакет, заполняется временное окружение разработки, которое будет необходимо для дальнейшей сборки других зависящих от данного пакетов. Разумеется, некоторые части и цели могут быть опущены.

Подробности ≫

Internals

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

Одним словом, данный раздел посвящен тем, кто предпочитает владеть, а не просто пользоваться.

Подробности ≫

Development Environment

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

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

Подробности ≫

Build System in Practice

Наилучшим способом изучить какое-либо средство является его практическое применение. Вводная статья дает лишь простой пример сборки отдельной программы, которая взаимодействует лишь с библиотекой языка C и не представляет интерес с точки зрения создания отчуждаемых пакетов.

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

Подробности ≫

Download

Исходные коды системы сборки хранятся в SVN репозитории и доступны для копирования.

Система сборки отчуждаема и может использоваться в любых проектах. Необходимо только знать, какая именно версия системы пригодна для решения тех или иных задач. Пользователи могут монтировать систему в каталог build-system собственных проектов посредством механизма svn:externals, выбирая нужный тег или, просто, HEAD транка, а также хранить копию системы в отдельном каталоге собственного дерева исходных кодов.

Подробности ≫