Debos -- еще одна утилита для создания ОС
LVEE Winter 2018
Утилита Debos создана Sjoerd Simons в качестве альтернативы существующим системам подготовки образов дисков на базе дистрибутива Debian, с прицелом на встраиваемые системы. Основная задача, которую решает Debos — максимально упростить пользователю описание для создания образов систем, готовых к “заливке” на целевое устройство.
Для реализации основной задачи используются несколько принципов, заложенных в архитектуру проекта:
- вся информация о сборке должна находится в конфигурационном файле или “рецепте”(recipe) проекта;
- строго последовательное выполнение действий при создании образа;
- для каждого отдельного действия (action) создается свой модуль;
- действия должны быть самодостаточными и, в идеале, не связанными друг с другом;
- каждое действие должно быть простым — для сложных задач декларируется использование пользовательких скриптов и/или внешних программ.
Одна из стандартных проблем, которая возникает при сборке образа — это необходимость использования повышенных привилегий для некоторых шагов, таких как установка пакетов. Разными утилитами и дистрибутивами эта задача решается по-разному. Для ‘debos’ используется библиотека fakemachine, написанной Sjoerd Simons. Данная библиотека утилизирует виртуальную машину Qemu, позволяя работать с “повышенными” привилегиями, в текущей системе. Кроме того, такой подход позволяет без дополнительных затрат организовать сборку образа под любую архитектуру, поддерживаемую в Qemu.
В задачу утилиты не входит создание повторяемого сборочного окружения. Подразумевается, что для каждого проекта оно индивидуально и должно создаваться другими средствами, позволяющими создавать воспроизводимое окружение для запуска — Docker, к примеру.
Синтаксис для recipe
Конфигурационный файл для создания образа представляет собой файл, описывающий пошаговое выполнение действий, в формате YAML. Для расширения возможностей, при описании конфигурации используется текстовый шаблонизатор (https://golang.org/pkg/text/template)
Рецепт, условно, можно разделить на 2 части:
- заголовок
- список шагов
Для комментирования используется символ “#”. Пример рецепта:
# Declare variable 'Var'
{{- !http://www.codecogs.com/png.latex?\textstyle%20Var%20:=%20%22Value%22%20-%7D%7D%0D%0A%0D%0A%23%20Header%0D%0Aarchitecture:%20arm64%0D%0A%0D%0A%23%20Actions%20are%20executed%20in%20listed%20order%0D%0Aactions:%0D%0A%20%20-%20action:%20ActionName1%0D%0A%20%20%20%20property1:%20true%0D%0A%0D%0A%20%20-%20action:%20ActionName2%0D%0A%20%20%20%20%23%20Use%20value%20of%20variable%20'Var'%20defined%20above%0D%0A%20%20%20%20property2:%20%7B%7B!Var}}
На данный момент поддерживаются следующие базовые действия, которые можно использовать для создания образа системы:
- apt — установка пакетов в целевое окружение с помощью apt;
- debootstrap — создание базового окружения с помощью утилиты debootstrap;
- download — скачивание файла и распаковка, если это необходимо;
- filesystem-deploy — “перенос” подготовленного окружения на образ диска;
- image-partition — создание файла-образа диска, разметка и создание разделов;
- ostree-commit — фиксирует ревизию (“коммитит”) в репозиторий в формате ostree;
- ostree-deploy — использует версию из репозитория в формате ostree для подготовки целевого окружения;
- overlay — позволяет копировать файлы и директории со сборочной системы в целевое окружение;
- pack — создает архив с целевым окружением, как правило для использования в других сценариях или с помощью “chroot” либо аналогов;
- raw — запись файла напрямую в образ диска или раздела по указанному смещению — чаще всего используется для загрузчиков;
- run — запуск пользовательского скрипта или команды. Можно запускать как в сборочном, так и в целевом окружении;
- unpack — распаковать архив в целевом окружении.
Постоянно обновляемая документация по существующим “действиям” (actions) доступна по адресу https://godoc.org/github.com/go-debos/debos/actions, а пример для создания загружаемого образа, пока что только для Raspberry Pi 3 — https://github.com/go-debos/debos-recipes.
Заключение
На момент подготовки статьи Debos уже используется в проекте Apertis при подготовке загружаемых образов дисков, как "классических, так и ostree-based, в том числе и для контейнеров LXC. По мере расширения использования и вовлечения в проект новых людей, находятся и “латаются” ошибки, а также появляются новые идеи для новых действий (actions).
Abstract licensed under Creative Commons Attribution-ShareAlike 3.0 license
Back