Когда разработка только начинается часто еще непонятно какие именно пакеты пойдут в целевую rootfs.
Иными словами хвататься за LFS, buildroot или yocto (или еще что-то) еще рано, а начинать уже нужно. Для богатых (у меня на пилотных образцах 4GB eMMC) есть выход раздать разработчикам дистрибутив, который позволит оперативно доставить что-то чего не хватает в данный момент, а затем мы всегда можем собрать списки пакетов и сформировать список для целевой rootfs.
Данная статья не несет в себе новизны и представляет из себя простую copy-paste инструкцию.
Цель статьи сборка Ubuntu rootfs для ARM борды (в моем случае на базе Colibri imx7d).
Градење слика
Собираем целевой rootfs для тиражирования.
Распаковываем Ubuntu Base
Релиз выбираем сами исходя из необходимости и собственных предпочтений. Здесь я привел 20.
$ mkdir ubuntu20
$ cd ubuntu20
$ mkdir rootfs
$ wget http://cdimage.ubuntu.com/ubuntu-base/releases/20.04/release/ubuntu-base-20.04-base-armhf.tar.gz
$ tar xf ubuntu-base-20.04-base-armhf.tar.gz -C rootfs
Проверка поддержки BINFMT в ядре
Если у вас распространенный дистрибутив, то поддержка BINFMT_MISC есть и все настроено, если нет — то я уверен, что вы знаете как включить поддержку BINFMT в ядре.
Заголовочные файлы ядра, модули, это отдельный разговор. Загрузчик, ядро, модули, device tree через Ubuntu мы конечно же не поставим. Они придут к нам извне или сами соберем или нам их выдаст производитель борды, в любом случае это за гранью данной инструкции.
До какой-то степени расхождение версий допустимо, но лучше взять их со сборки ядра.
# apt install --yes linux-headers-generic
Смотрим, что получилось и получилось немало:
# apt clean
# du -d 0 -h / 2>/dev/null
770M /
Не забудьте задать пароль.
Пакуем образ
$ sudo tar -C rootfs --transform "s|^./||" --numeric-owner --owner=0 --group=0 -c ./ | tar --delete ./ | gzip > rootfs.tar.gz
Дополнительно можем поставить etckeeper с настройкой autopush
Ну допустим раздали мы нашу сборку, работа пошла, как лучше собрать потом различные версии нашей системы.
На помощь нам может прийти etckeeper.
Безопасность личное дело каждого:
можете защитить определённые ветки
генерировать уникальный ключ для каждого устройства