Skip to content

Latest commit

 

History

History
38 lines (22 loc) · 6.01 KB

kb005_builder.md

File metadata and controls

38 lines (22 loc) · 6.01 KB

Сборщик образов

Текущий сборщик образов (исходники доступны в репозитории) - это сборщик Урпылки, к которому приложили руку goldarte, okalachev и я. Сборщик призван упростить сборку образов (то есть делать это одной командой) и когда-то хотел претендовать на универсальность.

Сборщик поставляется как Docker-контейнер с названием sfalexrog/img-tool:qemu-update (это на данный момент).

Состав сборщика

Сборщик по сути является минимальной Linux-системой, основанной на Debian. Дополнительно в систему установлены пакеты bc (консольный калькулятор), jq (парсер json для командной строки), unzip (утилита для распаковки zip-архивов), wget (утилита для скачивания файлов), parted (редактор таблицы разметки диска), git (система контроля версий), gawk (GNU awk), lsof (утилита для просмотра открытых файлов), gcc (набор компиляторов GNU) и их зависимости. Кроме того, в систему копируется собранный бинарник qemu-arm-static для запуска программ, написанных для процессоров семейства arm (таких, как стоят в Raspberry Pi), на системах на базе x86-64 (таких, как большинство современных персональных компьютеров и серверов).

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

Помимо этого, в сборщик входят два скрипта-"помощника" для операций над образами:

  • image-chroot.sh - можно использовать для выполнения команд в образе и копирования в образ файлов и директорий;
  • image-resize.sh - позволяет изменения размера образа.

Использование этих скриптов не обязательно, но может упростить написание скриптов1.

Запуск сборщика

Сборщик возможно запускать на системах на базе Linux. На основной системе в ядре должен присутствовать модуль binfmt_misc. Он нужен для того, чтобы автоматически запускать программы для arm через qemu-arm-static и qemu-wrapper.

Сборщику требуется доступ к директории устройств на Linux (/dev). Это происходит из-за текущего способа монтирования образа. По этой же причине сборщику требуются права суперпользователя (то есть запуск должен производиться с ключом --privileged).

Также сборщик ожидает, что репозиторий, который он будет собирать, будет доступен в контейнере по пути /builder/repo, а файл с инструкциями по сборке будет доступен по пути /builder/repo/builder/image-build.sh. Поэтому команда для запуска сборщика будет минимально выглядеть так:

docker run --privileged --rm -v /dev:/dev -v $(pwd):/builder/repo sfalexrog/img-tool:qemu-update

Запуск должен производиться от суперпользователя (через sudo), если текущий пользователь не состоит в группе docker.

При выполнении этой команды текущая директория будет доступна сборщику по пути /builder/repo, а после окончания сборки (или её неудачного завершения) контейнер будет удалён (ключ --rm в строке запуска). Если требуется выполнить что-то отличное от сборки образа (например, сборку debian-пакета), то можно в конец указанной команды добавить имя нужной команды (например, /bin/bash), а среди ключей (перед именем docker-образа) добавить ключ -it для получения интерактивной консоли.

(to be continued)

Footnotes

  1. При этом следует помнить, что скрипты эти не всегда так удобны, как кажется, и могут содержать ошибки. Лучше всё-таки не лениться и писать всё в своих скриптах.