Создание образов минимальной версии Debian Upstream с помощью Debos и Armbian

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.

Оригинал статьи вы можете прочитать здесь.

0 0 votes
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments