Текущий сборщик образов (исходники доступны в репозитории) - это сборщик Урпылки, к которому приложили руку 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
-
При этом следует помнить, что скрипты эти не всегда так удобны, как кажется, и могут содержать ошибки. Лучше всё-таки не лениться и писать всё в своих скриптах. ↩