ラズパイ4へのraspbian busterインストールは前記事(ラズパイ4にraspbian busterをセットアップ)を参照。
環境を汚したくないのでdocker運用したい。…ということでインストールを行ったが、結構ハマった…。
busterへのdockerインストールについて
raspbian buster用のdockerは正式にラズパイリポジトリに公開されていない。
おそらく将来的にはstrechと同じ手順でインストールできるようになると思うので、strechの手順も載せておく。
※現状はbusterでstrechの手順を実行してもエラーになるため注意。
busterの場合
必要パッケージのインストール
$ sudo apt install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
debian用のリポジトリを追加する。
$ sudo bash -c "echo 'deb [arch=armhf] http://download.docker.com/linux/debian buster stable' > /etc/apt/sources.list.d/docker.list"
インストール
$ sudo apt update
$ sudo apt install --no-install-recommends docker-ce
--no-install-recommendsオプションを付けるのがミソ。
このオプションを付けないと、dockerと一緒にインストールされるaufs-dkmsのインストールが失敗する(なお、失敗してもそのままdockerは使用できる様子)。原因究明の試行錯誤はトラブル対応の履歴で後述する。
strechの場合(1)
詳細は公式のdebian docker-ceインストール手順を参考にするとよい。
必要パッケージのインストール
$ sudo apt install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
GPGキー追加
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
インストール
$ sudo apt update
$ sudo apt install docker-ce
strechの場合(2)
こっちのほうが楽。たぶん上述(1)と同じ処理だと思う(未確認)。
$ curl -sSL https://get.docker.com | sh`
トラブル対応の履歴
以下はdocker-ceインストール時にハマった試行錯誤記。
--no-install-recommends
を付けずにインストールすると、エラーが発生する。
$ sudo apt install docker-ce
:
dpkg: パッケージ aufs-dkms の処理中にエラーが発生しました (--configure):
installed aufs-dkms package post-installation script subprocess returned error exit status 10
cgroupfs-mount (1.4) を設定しています ...
docker-ce (5:19.03.5~3-0~debian-buster) を設定しています ...
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service.
Created symlink /etc/systemd/system/sockets.target.wants/docker.socket → /lib/systemd/system/docker.socket.
systemd (241-7~deb10u2+rpi1) のトリガを処理しています ...
man-db (2.8.5-2) のトリガを処理しています ...
libc-bin (2.28-10+rpi1) のトリガを処理しています ...
処理中にエラーが発生しました:
aufs-dkms
E: Sub-process /usr/bin/dpkg returned an error code (1)
エラーログによるとinstalled aufs-dkms package post-installation script subprocess returned error exit status 10
とあるので、post-installation script
の処理がエラーこいてるっぽい。
dpkgやapt-get関連でエラーが出た時の対処法を参考にして、エラーステータスを確認する。
$ sudo dpkg --audit
以下のパッケージは最初の設定中に問題が発生したため、設定が終了していません。
dpkg --configure <パッケージ> か dselect で設定 (configure) メニューオプショ
ンを使って設定作業を再試行しなければなりません:
aufs-dkms DKMS files to build and install aufs
apt installのエラーログどおりだが、aufs-dkmsの設定がうまくいってないらしい。
- aufs-dkmsとは
Debian 9 stretch では aufs をデフォルトで利用できないによると、union mountを実現するファイルシステムでdockerがサポートしているファイルシステムの1つらしい。overlayが利用可能になったのでaufsは不要になった…らしい。
aufs-dkmsって、いらない子なんじゃない?とも思うが、ひとまず設定ファイルを検索してみる。
$ sudo find / -name aufs-dkms*
/usr/share/doc/aufs-dkms
/var/cache/apt/archives/aufs-dkms_4.19+20190211-1_all.deb
/var/lib/dpkg/info/aufs-dkms.list
/var/lib/dpkg/info/aufs-dkms.postinst
/var/lib/dpkg/info/aufs-dkms.md5sums
/var/lib/dpkg/info/aufs-dkms.prerm
post-installation script
に相当するのは、/var/lib/dpkg/info/aufs-dkms.postinst
っぽいかな、とアタリをつけた。
Debian ポリシーマニュアル:Chapter 6 - パッケージ管理スクリプトとインストールの手順によると「postinst は展開された後に呼び出されます」とのこと。
一度、再設定コマンドを実行してみたところ、kernelが原因っぽいことが見え隠れする…。
$ sudo dpkg --configure aufs-dkms
Building initial module for 4.19.75+
Error! Bad return status for module build on kernel: 4.19.75+ (armv7l)
Consult /var/lib/dkms/aufs/4.19+20190211/build/make.log for more information.
詳細ログ(/var/lib/dkms/aufs/4.19+20190211/build/make.log
)を見てみると、read/writeでエラーになっている。
もしかして、新しいカーネルでは古い機能がサポートされなくなったか??
:
make[1]: ディレクトリ '/usr/src/linux-headers-4.19.75+' に入ります
CC [M] /var/lib/dkms/aufs/4.19+20190211/build/fs/aufs/module.o
CC [M] /var/lib/dkms/aufs/4.19+20190211/build/fs/aufs/sbinfo.o
CC [M] /var/lib/dkms/aufs/4.19+20190211/build/fs/aufs/super.o
CC [M] /var/lib/dkms/aufs/4.19+20190211/build/fs/aufs/branch.o
In file included from /var/lib/dkms/aufs/4.19+20190211/build/fs/aufs/branch.h:33,
from /var/lib/dkms/aufs/4.19+20190211/build/fs/aufs/aufs.h:38,
from /var/lib/dkms/aufs/4.19+20190211/build/fs/aufs/sbinfo.c:23:
/var/lib/dkms/aufs/4.19+20190211/build/fs/aufs/super.h:134:2: error: unknown type name ‘vfs_readf_t’
vfs_readf_t si_xread;
^~~~~~~~~~~
/var/lib/dkms/aufs/4.19+20190211/build/fs/aufs/super.h:135:2: error: unknown type name ‘vfs_writef_t’
vfs_writef_t si_xwrite;
:
ググると同じ問題がissue:Kernel missing support for aufs-dkms #3021にも挙がっており、下記コメントがついている。
i used to install docker ce 18.09.0 on Raspian Buster
(意訳)docker-ce18.09なら使えるよ!That does not work either.I am getting the same error:
(意訳)つかえねーよ。同じエラーでたぞAdded --no-install-recommends to my docker ce installation step.
(意訳)--no-install-recommendsオプションを付けろaufs-dkms is not a dependency of docker-ce, but a recommendation.
docker is not default to use aufs anymore; It now default prefer to use overlayfs2.
(意訳)aufs-dkmsはdocker-ceに不要。デフォルトのファイルシステムはoverlay2だし。
現在のdocker versionを確認してみる。
$ docker -v
Docker version 19.03.5, build 633a0ea
バージョンは19.03。情報通りならバージョン指定するか、19.03でも--no-install-recommendsをつければいけるかも。
おや?インストール(post処理)が失敗してもdockerコマンドが動いてるな…。ちょっとrunを実行してみるか。
$ sudo docker run --rm hello-world
Hello from Docker!
:
って、動いてるじゃん!???(マジかよ!)
インストールまではうまくいってて後処理(post)が失敗してるだけってことみたい。
一度、アンインストールして--no-install-recommendsで再インストールしてみる。
$ sudo apt purge docker-ce
:
Error! Bad return status for module build on kernel: 4.19.75+ (armv7l)
Consult /var/lib/dkms/aufs/4.19+20190211/build/make.log for more information.
dpkg: パッケージ aufs-dkms の処理中にエラーが発生しました (--configure):
installed aufs-dkms package post-installation script subprocess returned error exit status 10
処理中にエラーが発生しました:
aufs-dkms
purgeするときにも同じエラーがでてきやがる。。。
しょうがないので、aufs-dkms.postinst
という原因っぽいファイルをリネームしてpurge実行したらうまくいった。
$ sudo mv /var/lib/dpkg/info/aufs-dkms.postinst /var/lib/dpkg/info/aufs-dkms.postinst.bak
$ sudo apt purge docker-ce # 成功
$ sudo apt autoremove
$ sudo rm /var/lib/dpkg/info/aufs-dkms.postinst.bak
あらためてインストール。
$ sudo apt install --no-install-recommends docker-ce
エラーなしで成功ッッッ!!!ついにきたか!
aufs-dkmsのインストール(未実施)
前述のように--no-install-recommendsなしでdockerをインストールした場合、aufs-dkmsがインストールできない。
だがpurgeの挙動をみると、aufs-dkms.postinstファイルを削除してから、configureしなおせばインストールできると思われる。
削除してよいのかという疑問は残るけど。・・というか使えるんだから放置でもいいかもしれない。
# 未検証だけど、これでひとまずエラーは消える(はず)
sudo rm /var/lib/dpkg/info/aufs-dkms.postinst
sudo dpkg --configure aufs-dkms
動作確認
$ docker -v
Docker version 19.03.5, build 633a0ea
docker run hello-world
, docker images
など問題なく動く。
ただ、run実行後にコンテナ起動するまでが異常に遅い…。起動に10秒くらい
かかる。うーん・・
ラズパイ3+strech+dockerの組合せでは遅くなる現象はなかったので、まだどこかおかしい様子。
でも、ひとまずインストールはできた。