Коли розробка тільки починається часто ще незрозуміло, які саме пакети підуть у цільову rootfs.
Іншими словами хапатися за LFS, buildroot чи yocto (або ще щось) ще рано, а починати вже потрібно. Для багатих (у мене на пілотних зразках 4GB eMMC) є вихід роздати розробникам дистрибутив, який дозволить оперативно доставити щось не вистачає в даний момент, а потім ми завжди можемо зібрати списки пакетів і сформувати список для цільової rootfs.
Ця стаття не несе в собі новизни і є простою copy-paste інструкцією.
Мета статті – збірка Ubuntu rootfs для ARM борди (у моєму випадку на базі Colibri imx7d).
Складання образу
Збираємо цільові rootfs для тиражування.
Розпаковуємо Ubuntu Base
Реліз вибираємо самі виходячи з необхідності та власних переваг. Тут я навів двадцять.
$ 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
Ну, припустимо, роздали ми нашу збірку, робота пішла, як краще зібрати потім різні версії нашої системи.