• Stiahnite 2020-08-20-raspios-buster-armhf-lite.zip z oficiálnej stránky
  • Nainštalujte požadované nástroje
sudo pacman -S unzip util-linux docker
  • Spustite Docker službu
sudo systemctl start docker.service

Pridajte sa do skupiny docker, inak budú potrebné oprávnenia

sudo usermod -aG docker $(whoami)
su - $(whoami)

Nastavenie QEMU #

yay -S binfmt-qemu-static qemu-user-static

Overte nastavenie emulácie

grep enabled /proc/sys/fs/binfmt_misc/qemu-arm
# enabled

Alternatívne, dočasné riešenie pre väčšinu distribúcií:

docker run --rm --privileged docker/binfmt:820fdd95a9972a5308930a2bdfb8573dd4447ad3

Spúšťajte privilegované kontajnery s opatrnosťou, aspoň si pozrite vrstvy kontajnera pred spustením

yay -s dive
dive docker/binfmt:820fdd95a9972a5308930a2bdfb8573dd4447ad3

Nástroj zobrazuje niektoré podrobnosti o súboroch, s ktorými pracuje, v úzkom rozložení

─────── ┃ ● Current Layer Contents ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Layer   Permission     UID:GID       Size  Filetree
   0    drwxr-xr-x         0:0     1.1 kB  ├── etc
   1    drwxr-xr-x         0:0     1.1 kB  │   └── binfmt.d
   2    -rw-rw-r--         0:0     1.1 kB  │       └── 00_linuxkit.conf
        drwxr-xr-x         0:0      17 MB  └── usr
        drwxr-xr-x         0:0      17 MB      └── bin
        -rwxr-xr-x         0:0     2.2 MB          ├── binfmt
        -rwxr-xr-x         0:0     4.1 MB          ├── qemu-aarch64
        -rwxr-xr-x         0:0     3.6 MB          ├── qemu-arm
        -rwxr-xr-x         0:0     3.9 MB          ├── qemu-ppc64le
        -rwxr-xr-x         0:0     3.2 MB          └── qemu-s390x

Pripojenie #

  • Rozbaľte stiahnutý obraz z archívu
unzip <raspios-image>.zip
  • Priraďte obraz k zariadeniu slučky
sudo losetup --read-only --show -fP <raspios-image>.img
# /dev/loop0

Skontrolujte oddiely obrazu ak je to potrebné

lsblk -o name,label /dev/loop0

Hľadajte označenie rootfs

NAME      LABEL
loop0
├─loop0p1 boot
└─loop0p2 rootfs
  • Pripojte oddiel koreňového súborového systému, ak to vaša distribúcia neurobila automaticky
sudo mkdir /tmp/raspios
sudo mount -o ro /dev/loop0p2 /tmp/raspios

Import #

  • Vytvorte Docker obraz z koreňového súborového systému Raspios
sudo tar c -C /tmp/raspios . | docker image import - raspios-lite-armhf:buster
  • Vytvorte a spustite Docker kontajner z obrazu
docker run -it --name raspios_bare raspios-lite-armhf:buster /bin/bash

Vstúpte do kontajnera znova v prípade náhodného ukončenia

docker start -ai raspios_bare
  • Upratanie
sudo umount /tmp/raspios
sudo losetup -d /dev/loop0

Manipulácia s obrazom kontajnera #

wget -qO- https://deb.nodesource.com/setup_14.x | bash -
apt install nodejs
npm i -g pkg
  • Stiahnite predkompilovaný binárny súbor Node pre armhf z repozitára
wget https://github.com/yao-pkg/pkg-binaries/releases/download/v1.0.0/fetched-v14.4.0-linux-armv6 -P /root/.pkg-cache/v2.6/
docker commit raspios_bare raspios_node_pkg

Teraz môžete bezpečne odstrániť základný kontajner

docker rm raspios_bare

Balenie #

  • Vytvorte vzorový skript na balenie
echo 'console.log("Hello World")' > index.js
  • Vytvorte dočasný kontajner, pripojte aktuálny priečinok ako /build v ňom a zabaľte ho pre linux
docker run --rm -v $PWD:/build raspios_node_pkg pkg -t linux --out-dir /build /build/index.js
  • Spustiteľný súbor Node pre armhf s názvom index je vytvorený v aktuálnom adresári
file index
# index: ELF 32-bit LSB pie executable, ARM, EABI5 version 1 (GNU/Linux), ...

Vytvorte spustiteľný skript pre zjednodušenie procesu a spúšťajte ho napríklad ako armpkg index.js

#!/bin/bash
docker run --rm -v $PWD:/build raspios_node_pkg pkg -t linux --out-dir /build "/build/$1"

Hotovo!

Odkazy #