ござるのブログ

覚え書きいろいろ

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

とすると、大丈夫でした!