Сборка образов с помощью pi gen
Содержимое официальной сборки Raspbian для Raspberry Pi
Официальный сайт Raspberry Pi предлагает на выбор несколько дистрибутивов операционных систем для Raspberry Pi. Raspbian официально поддерживается Raspberry Pi Foundation и на сегодняшний день является самым популярным дистрибутивом среди пользователей. На странице Downloads предлагается выбрать одну из трёх сборок:
- «Raspbian Stretch with desktop and recommended software» – образ с графической оболочкой и множеством предустановленных программ на все случаи жизни
- «Raspbian Stretch with desktop» – образ с графической оболочкой
- «Raspbian Stretch Lite» – образ без графической оболочки
Если скачать один из этих образов, записать на SD-карту и заглянуть внутрь, то мы увидим два раздела. Первый раздел называется загрузочным и предназначен для инициализации платы и передачи управления операционной системе. Загрузочный раздел отформатирован в FAT32 и содержит файлы, необходимые на этапе инициализации платы, а именно:
- файлы начальной загрузки платы или т.н. boot binaries (bootcode.bin, start.elf и др.)
- файл конфигурации Raspberry Pi (config.txt)
- дерево устройств (отдельный файл для каждой платы семейства Raspberry Pi, например bcm2710-rpi-3-b-plus.dtb)
- скомпилированное ядро Linux (kernel7.img) и файл, содержащий параметры запуска ядра (cmdline.txt).
Если сравнить содержимое загрузочного раздела трёх образов со страницы Downloads, то придём к выводу, что загрузочный раздел одинаковый для всех. Вне зависимости от того, какие приложения предустановлены в образе, способ загрузки платы один и тот же.
Второй раздел образа отформатирован в ext4 и содержит корневую файловую систему с предустановленными приложениями, а также конфигурационные файлы и директории необходимые для работы операционной системы и приложений. Корневой раздел имеет схожую структуру для каждого из трёх образов, но наполнение каждой директории отличается.
Какую сборку Raspbian хотят пользователи Raspberry Pi?
Каждый пользователь Raspberry Pi рано или поздно задумывается о том, как создать собственную сборку Raspbian для Raspberry Pi и установить туда только нужные для решения конкретной задачи приложения и их зависимости. Иными словами, как создать кастомную сборку «под себя».
Основным двигателем этой мысли является стремление человека к рациональному использованию ограниченных ресурсов одноплатных компьютеров. Следуя принципу рациональности, мы стремимся оставить в образе только те программы, которые мы реально будем использовать и избавиться от всего остального. Нет смысла расходовать место на SD-карте под офисные приложения и игры, если мы не планируем их использовать.
Запрос на кастомизацию чаще всего заключается в изменении содержимого корневого раздела, т.к. именно в корневой раздел устанавливаются программы, необходимые пользователю. Гораздо реже требуется что-либо менять в загрузочном разделе.
Скрипт для создания сборок Raspbian
Инструмент pi-gen используется для сборки официального дистрибутива Raspbian. Результат работы pi-gen – это те три образа, которые опубликованы на странице загрузки Raspbian на сайте Raspberry Pi. Любой желающий может скачать исходный код pi-gen, изучить как работает скрипт, разобраться в конфигурационных параметрах и собрать свою собственную сборку Raspbian Stretch под любую модель Raspberry Pi.
Чтобы воспользоваться pi-gen нужен компьютер с операционной системой на базе Linux.
В самом простом случае, можно запустить build.sh из pi-gen и передать следующие параметры:
- FIRST_USER_NAME (по умолчанию «pi» ) – имя пользователя.
- FIRST_USER_PASS (по умолчанию «raspberry») – пароль пользователя.
- WPA_ESSID, WPA_PASSWORD and WPA_COUNTRY (по умолчанию не заданы) – используются для конфигурирования wpa_supplicant.conf, чтобы Raspberry Pi мог автоматически подключится к WiFi при первой загрузке.
- ENABLE_SSH (по умолчанию «0») – Разрешить подключение к плате через ssh.
- STAGE_LIST (по умолчанию stage*) – для задания последовательности шагов сборки.
По умолчанию сборка поделена на шесть последовательных шагов:
Шаг 0 – bootstrap. Создаёт chroot-окружение, основу будущей корневой файловой системы, при помощи debootstrap, конфигурирует apt и устанавливает пакет raspberrypi-bootloader.
Шаг 1 – минимальная система. Устанавливает системные файлы, например /etc/fstab, конфигурирует загрузчик, сеть и ставит несколько вспомогательных пакетов, например raspi-config.
Шаг 2 – Raspbian Lite. Устанавливает fake-hwclock, ntp, dphys-swapfile и другие базовые пакеты для управления железом. Настраивает WiFi и bluetooth. Создаёт пользователей и группы в системе. Устанавливает несколько полезных инструментов, например Python и Lua, а также пакет build-essential. Полученный на этом шаге образ это и есть Raspbian Lite, опубликованный в разделе Downloads на сайте Raspberry Pi.
Шаг 3 – графическая среда. Устанавливает полноценную графическую оболочку с X11 и LXDE, браузером, и различными улучшениями интерфейса от Raspbian, а также git и другие инструменты разработки.
Шаг 4 – Raspbian на 4GB. Устанавливает больше инструментов для разработки, почтовый клиент, различные специализированные пакеты, например, sonic-pi и т.д.
Шаг 5 – официальный образ Raspbian с графической оболочкой. Добавляет пакет Mathematica.
В корне проекта pi-gen находятся поддиректории stage0, stage1, … stage5. В каждой из них описываются действия, которые pi-gen должен выполнить. Продвинутые пользователи pi-gen создают собственные шаги и при помощи параметра STAGE_LIST вставляют их в нужное место, например:
STAGE_LIST stage0 stage1 mystage stage2 – выполнит шаг mystage перед шагом stage2.
Для создания собственного шага, требуется понимание синтаксиса Bash и базовые знания в устройстве Linux-подобных операционных систем. Также потребуется немного времени, чтобы разобраться с принципом сборки в pi-gen.
Онлайн сервис для создания сборок Raspbian, Ubuntu и других ОС для Raspberry Pi
Инструмент CusDeb работает по схожему c pi-gen принципу. Главное отличие CusDeb от pi-gen в том, что образ готовится на удалённом сервере, а управление сборкой происходит через веб-интерфейс. Чтобы пользоваться CusDeb нужен только веб-браузер и подключение к сети Интернет. Большинство возможностей CusDeb доступно обладателям Pro-аккаунтов.
Сервис развивается и помимо Raspbian доступны сборки на основе других дистрибутивов, например Ubuntu, Debian и Devuan. Недавно появилась поддержка платы Orange Pi PC Plus и скорее всего это не последняя плата.
В CusDeb cборка состоит из четырёх шагов, и на первом шаге необходимо выбрать целевое устройство и дистрибутив.
После этого на сервере CusDeb инициализируется болванка, содержащая минимальный набор файлов для корневого раздела будущей файловой системы (т.н. baseimage), а на экране появится список пакетов из официального репозитория Raspbian Stretch.
Выберите нужные пакеты и добавьте в свой образ. Для поиска пакета по имени воспользуйтесь строкой поиска. Для добавления пакета в сборку, нажмите «+» перед именем пакета. При добавлении пакета, конструктор автоматически установит все зависимые пакеты в образ. После того, как закончите с пакетами, перед вами появится список всех пользователей и групп в создаваемой системе. Кликните на root в первой строке таблицы и задайте пароль суперпользователя в появившемся модальном окне. Нажмите на кнопку «Добавить пользователя» для создания учётной записи непривилегированного пользователя в системе.
На заключительном этапе конфигурации системы задайте имя хоста и часовой пояс, после чего нажмите кнопку «Собрать».
За ходом сборки можно следить прямо из браузера. Все команды, выполняемые на сервере, транслируются в CusDeb.
Можно закрыть вкладку и дождаться уведомления об успешном завершении сборки на почту. Сборка образа занимает от нескольких минут до нескольких часов в зависимости от загруженности сервера.
CusDeb при помощи debootstrap создаёт основу для корневой файловой системы, затем при помощи chroot устанавливает в неё дополнительные пакеты и правит конфигурационные файлы. Затем CusDeb подготавливает пустой файл с расширением .img, создаёт в нём таблицу разделов с двумя разделами при помощи утилиты parted (загрузочный и корневой). CusDeb форматирует первый раздел в FAT32, а второй раздел в ext4 с помощью mkfs, после чего записывает rsync’ом в отформатированный корневой раздел корневую файловую систему, а в загрузочный раздел бинарные файлы, необходимые для загрузки платы, конфигурационные файлы и скомпилированное ядро.
Исходный код большинства компонентов CusDeb открыт. Например, вот исходники системы сборки образов: https://github.com/tolstoyevsky/pieman – это аналог pi-gen, только с поддержкой большего количества операционных систем и различных моделей одноплатных компьютеров. Разработчики проекта общительные ребята, всегда открыты к новым идеям и рады любым отзывам.