raspbian buster armv6(pi0など)環境上で動作する containerd.io
のパッケージング
2019/6/30時点では,raspbian buster armv6(pi0など)環境上で動作する containerd.io
のパッケージが提供されていなかったため,
元々,本リポジトリはでは動作パッケージを作成する方法を示していたが,現在は提供されている.
そのため本リポジトリは自家パッケージングの手順になっている.
クロスコンパイルもできるかもしれないのだが,qemuユーザーモードエミュレーションには面倒そうな箇所がある上,
途中までx86_64上で実施してみてもGOARCH
等を付けるとdockerdのビルド時にSEGVしたりしていた.
ただの"Hello,World!"をビルドするgo buildでも確率的にSEGVしていたので,
これはアカンとクロスコンパイルは見切っている.
パッケージングスクリプトはdockerイメージを利用するため,パッケージング環境にはdockerが入っていなければならない. raspbian busterを焼いてpi0起動する. パッケージングにはdockerイメージを複数使う.また,goプログラムのリンカが利用するメモリもpi3までの容量では不足する. swap領域も必要になるためパッケージングには予め容量の大きなSDカードを使う.8GBだと不足だった.
headlessでsshまでできるようにしておき,以下ssh後
sudo nano -w /etc/dphys-swapfile
-CONF_SWAPSIZE=100
+CONF_SWAPSIZE=2048
sudo apt-get update
sudo apt-get upgrade -y
sudo reboot
sudo nano -w /etc/apt/sources.list.d/docker.list
deb [arch=armhf] https://download.docker.com/linux/raspbian buster stable
sudo nano -w /etc/apt/preferences.d/docker.pref
Package: aufs-tools
Pin: version *
Pin-Priority: -1
wget -O- https://download.docker.com/linux/raspbian/gpg | sudo apt-key add -
sudo apt update
sudo apt install -y docker-ce
sudo usermod -aG docker pi
この後,再ログインしてsudoナシでdocker叩けるか確認
docker images
raspbian向けgolangイメージを作るためのベースイメージをraspbianで作る
git clone https://github.com/docker-library/buildpack-deps
cd buildpack-deps
git rev-parse HEAD
1e2e728fe41a84c16bc93dcd788d40f93f83fb11
cd buster/curl
nano -w Dockerfile
-FROM debian:buster
+FROM idein/actcast-rpi-app-base:buster # 大本のベースイメージをraspbian buster のdebootstrap最小構成に
docker build . -t idein/buildpack-deps:buster-curl
cd ../scm
nano -w Dockerfile
-FROM buildpack-deps:buster-curl
+FROM idein/buildpack-deps:buster-curl
docker build . -t idein/buildpack-deps:buster-scm
cd
git clone https://github.com/docker-library/golang
cd golang
git rev-parse HEAD
37413a416f71baeef1d0b2156df20721405a5a70
cd 1.14/buster/
nano -w Dockerfile
-FROM buildpack-deps:stretch-scm
+FROM idein/buildpack-deps:buster-scm
docker build . -t idein/golang:1.14-buster
cd
git clone https://github.com/Idein/containerd.io-for-raspbian
cd containerd.io-for-raspbian
docker build -t containerd-pkg-builder:1.2.13 .
docker run -v $(pwd):/root/deb containerd-pkg-builder:1.2.13
取り出しておく
$ scp pi@pi0.local:containerd.io-for-raspbian/containerd.io_1.2.13-1_armhf.deb .
raspbian busterを焼いて起動.以下,パッケージング時と同様にsshできたとこから
おやくそく
$ sudo apt-get update
$ sudo apt-get upgrade -y
$ sudo reboot
作ったパッケージを送り込んでおく.
$ scp containerd.io_1.2.13-1_armhf.deb pi@testpi.local:
インストール
$ sudo apt install ./containerd.io_1.2.13-1_armhf.deb
docker-ceを拾ってきてインストール
$ sudo apt install ./deb/docker-ce-cli_19.03.8~3-0~raspbian-buster_armhf.deb --no-install-recommends
$ sudo apt install ./deb/docker-ce_19.03.8~3-0~raspbian-buster_armhf.deb --no-install-recommends
実行
$ sudo docker images
$ sudo docker run --rm idein/actcast-rpi-app-base:buster echo hello
$ hello
pi3環境でも同様に動作確認
現時点のcontainerd(というか,go 1.13のARM runtime)にはcontainerd-shimがタイミングでSEGVするバグがある. 1.14でビルドするようになったので生じなくなったかもしれない.