Armbian предоставляет облегченные образы Debian или Ubuntu для различных Arm Linux SBC, и с годами стал рекомендуемым источником стабильных образов прошивок для плат, входящих в семейства Orange Pi и Banana Pi, и других.
Несжатые образы, по-прежнему, превышают 1 ГБ и поставляются с инструментами, специфичными для Armbian, ядром и загрузчиком. Если вы хотите использовать образы Armbian, но вместо этого создавать исходный образ Debian Upstream только с теми пакетами, которые вы собираетесь использовать, Collabora объясняет, как это сделать с помощью плат Orange Pi Zero +2 H5 и Libre Computer AML-S905X-CC (известный так же как Le Potato) с использованием Debos Debian OS builder.
Мы решили попробовать инструкции для Orange Pi Zero Plus2 H5 на ноутбуке с Ubuntu 18.04, чтобы лучше понять, как все это работает.
Предполагается, что вы уже установили Docker и убедились, что он работает как пользователь без полномочий root, поэтому мы можем установить Debos следующим образом:
docker pull godebos/debos
Конфигурация для Debos производится через файлы YAML. Collabora уже предоставила такой файл для платы Orange Pi Zero 2+: orangepi0p2.yaml. Вам нужно будет изменить его в соответствии с вашей версией Armbian, как мы и сделали ниже. А также мы добавили комментарии, объясняющие немного больше о каждом разделе:
# Base recipe for minimal Debian SID ARM64 image
architecture: arm64
actions:
- action: debootstrap
suite: sid
components:
- main
mirror: https://deb.debian.org/debian
variant: minbase
- action: apt
packages: [ sudo, adduser, systemd-sysv, initramfs-tools, u-boot-tools, u-boot-menu, util-linux ]
- action: run
chroot: true
command: echo debian-sid-arm64 > /etc/hostname
- action: run
chroot: true
command: echo "127.0.1.1\tdebian-sid-arm64" >> /etc/hosts
- action: overlay
source: overlays/etc
destination: /etc
- action: run
chroot: true
script: scripts/setup-user.sh
# End of base recipe for minimal Debian SID ARM64 image
# Add armbian repository
- action: overlay
source: overlays/armbian
# Get Linux kernel and U-boot from Armbian repository
- action: apt
packages: [ linux-image-next-sunxi64, linux-dtb-next-sunxi64, linux-u-boot-orangepizeroplus2-h5-next ]
# Create the (rootfs) partitions
- action: image-partition
imagename: debian-sid-arm64.img
imagesize: 1GB
partitiontype: msdos
mountpoints:
- mountpoint: /
partition: root
partitions:
- name: root
fs: ext4
start: 2MB
end: 100%
flags: [ boot ]
# Deploy the filesystem to an image
- action: filesystem-deploy
description: Deploying filesystem onto image
# U-boot-menu expects FDT directory name to include the kernel version as
# returned by linux-version.
- action: run
chroot: true
command: ln -s linux-image-next-sunxi64 /usr/lib/linux-image-$(linux-version list)
# Update U-Boot menu after creation of image partitions and filesystem
# deployment to get correct root information from /etc/fstab
- action: run
description: Update U-Boot menu
chroot: true
command: u-boot-update
# Install Install uboot in our image.
# Armbian encode a version number in path to u-boot binaries, 5.83 at time I write this blog, this may need to be changed
- action: raw
origin: filesystem
source: /usr/lib/linux-u-boot-next-orangepizeroplus2-h5_5.83_arm64/sunxi-spl.bin
offset: 8192 # bs=8k seek=1
- action: raw
origin: filesystem
source: /usr/lib/linux-u-boot-next-orangepizeroplus2-h5_5.83_arm64/u-boot.itb
offset: 40960 # bs=8k seek=5
# Create block map file
- action: run
description: Create block map file
postprocess: true
command: bmaptool create debian-sid-arm64.img > debian-sid-arm64.img.bmap
#Compress final image
- action: run
description: Compressing final image
postprocess: true
command: gzip -f debian-sid-arm64.img
Следующая команда требует KVM для QEMU, и мы должны запустить ее как обычный пользователь:
sudo usermod -aG kvm $USER
Выйдите из системы и войдите снова. Теперь, теоретически, эта команда должна создать наш образ:
docker run --rm --interactive --tty --device /dev/kvm --user $(id -u) --workdir /recipes --mount "type=bind,source=$(pwd),destination=/recipes" --security-opt label=disable godebos/debos orangepi0p2.yaml
Но, к сожалению, мы столкнулись с ошибками прав доступа, на исправление которых ушла пара часов:
Could not access KVM kernel module: Permission denied
qemu-system-x86_64: failed to initialize KVM: Permission denied
open /tmp/fakemachine-048715194/result: no such file or directory
Наше имя пользователя является частью групп kvm и docker:
groups
jaufranc adm dialout cdrom sudo dip plugdev lpadmin sambashare vboxusers docker kvm libvirt
и модули KVM действительно загружены:
lsmod | grep kvm
kvm_amd 94208 0
ccp 86016 1 kvm_amd
kvm 634880 1 kvm_amd
irqbypass 16384 1 kvm
По неизвестным нам причинам, запуск команды с помощью sudo тоже не удался. Поэтому мы попытались сгенерировать образ без docker, установив Debos напрямую:
sudo apt install golang git libglib2.0-dev libostree-dev qemu-system-x86 \
qemu-user-static debootstrap systemd-container
export GOPATH=${HOME}/gocode # or whatever suites your needs
go get -u github.com/go-debos/debos/cmd/debos
Итак, давайте попробуем сгенерировать команду с помощью утилиты:
~/gocode/bin/debos orangepi0p2.yaml
2019/06/22 15:11:10 open failed: /lib/modules/5.0.1-050001-generic/kernel/drivers/char/virtio_console.ko - open /lib/modules/5.0.1-050001-generic/kernel/drivers/char/virtio_console.ko: no such file or directory
Отсутствуют дополнительные модули ядра. Это выглядит не простым для установки, поэтому пропустим …. Сообщите нам в разделе комментариев, если вам повезло больше.
Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.