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 следующим образом:
1 |
docker pull godebos/debos |
Конфигурация для Debos производится через файлы YAML. Collabora уже предоставила такой файл для платы Orange Pi Zero 2+: orangepi0p2.yaml. Вам нужно будет изменить его в соответствии с вашей версией Armbian, как мы и сделали ниже. А также мы добавили комментарии, объясняющие немного больше о каждом разделе:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# 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, и мы должны запустить ее как обычный пользователь:
1 |
sudo usermod -aG kvm $USER |
Выйдите из системы и войдите снова. Теперь, теоретически, эта команда должна создать наш образ:
1 |
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 |
Но, к сожалению, мы столкнулись с ошибками прав доступа, на исправление которых ушла пара часов:
1 2 3 |
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:
1 2 |
groups jaufranc adm dialout cdrom sudo dip plugdev lpadmin sambashare vboxusers docker kvm libvirt |
и модули KVM действительно загружены:
1 2 3 4 5 |
lsmod | grep kvm kvm_amd 94208 0 ccp 86016 1 kvm_amd kvm 634880 1 kvm_amd irqbypass 16384 1 kvm |
По неизвестным нам причинам, запуск команды с помощью sudo тоже не удался. Поэтому мы попытались сгенерировать образ без docker, установив Debos напрямую:
1 2 3 4 |
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 |
Итак, давайте попробуем сгенерировать команду с помощью утилиты:
1 2 |
~/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.
Оригинал статьи вы можете прочитать здесь.