M1 MacでDocker Desktopに頼らずにx86_64のlRubyを使うまで(追記2)(未解決)→(解決)
はじめに
M1 Macで、limaを使ってx86_64のIRubyを使ためにいろいろやりましたが、この前のように、
$ docker build --platform linux/amd64 -t iruby .
とすると
/bin/bash: pipefail: No such file or directory
と出てbuildに失敗するようになりました。どうしたものかと調べていると、そもそもlima公式に「Fast mode: Intel containers on ARM VM on ARM Host / ARM containers on Intel VM on Intel Host」という記載がありました。
セットアップ
ここに記載されているとおりにやるだけ。
$ limactl start $ lima sudo systemctl start containerd $ lima sudo nerdctl run --privileged --rm tonistiigi/binfmt --install all
以下のようなDockerfile
を用意。
(IRubyにcztopは不要になったみたいですね。)
FROM jupyter/base-notebook:latest USER root RUN apt-get update \ && apt-get install --no-install-recommends -y \ libczmq-dev \ libtool \ make \ ruby-dev \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN gem install --no-document \ iruby USER $NB_USER RUN iruby register --force
Dockerfile
を置いたディレクトリで以下を実行。
$ nerdctl.lima build --platform linux/amd64 -t iruby .
無事完了したら、以下のコマンドでIRubyを起動。
$ mkdir /tmp/lima $ nerdctl.lima run --platform linux/amd64 -it --rm -p 8888:8888 -e JUPYTER_ENABLE_LAB=yes -v /tmp/lima:/home/jovyan/work iruby
これでオーケーと思ったのですが、以下のメッセージを出力してIRubyが終了してしまいます。
Writing notebook-signing key to /home/jovyan/.local/share/jupyter/notebook_secret Operation not permitted (src/thread.cpp:309)
build時とrun時に--platform
を付けないで(linux/arm64で)動作させると、落ちないんですが…
おわりに
結局、未解決。
ここにあるように、Docker Desktop for macでも同様の現象が起きているようです。
追記
これっぽい。
解決
ここによると「For now, simply using old version (tonistiigi/binfmt:qemu-v6.0.0-12) can resolve the jupyter crash」とのことなので
$ limactl start $ lima sudo systemctl start containerd $ lima sudo nerdctl run --privileged --rm tonistiigi/binfmt:qemu-v6.0.0-12 --install all
とすると、大丈夫でした!