Apple Silicon な macOS で colima を使って all-ruby を動かすと、 なぜか 1.6.8 以前が動いていなかったのですが、 qemu-user-static を入れたら動いた、という話です。

動作確認環境

  • Apple M1 Pro
  • macOS Sonoma 14.3
  • colima 0.6.7
  • VM は aarch64 の Ubuntu 23.10 (mantic)

VM 作成

クリーンな VM で再現実験をするため、通常の colima start の代わりに profile を指定して起動します。

%  colima start example
INFO[0000] starting colima [profile=example]
INFO[0000] runtime: docker
INFO[0001] creating and starting ...                     context=vm
INFO[0023] provisioning ...                              context=docker
INFO[0024] starting ...                                  context=docker
INFO[0025] done

docker context が混乱しないように通常の方は colima stop で止めてから作業しています。 動かしたまま作業するなら docker context ls などで確認します。

動作確認

i686-linux な 1.6.8 と x86_64-linux な 1.8.0 で動作確認すると、 1.8.0 は正常に動いていますが、 1.6.8 は謎のエラーになります。

% docker run --platform linux/amd64 --rm -it ghcr.io/ruby/all-ruby env ALL_RUBY_BINS='ruby-1.6.8 ruby-1.8.0' ./all-ruby -v
Unable to find image 'ghcr.io/ruby/all-ruby:latest' locally
latest: Pulling from ruby/all-ruby
004b32b1140b: Pull complete
253cedb3f24d: Pull complete
320af61238d7: Pull complete
c794b9fb941e: Pull complete
bd9ddc54bea9: Pull complete
Digest: sha256:423151ed73fa2240152eb536234be961bc011e41a6da98ae5fb3ac12e6a4dbf2
Status: Downloaded newer image for ghcr.io/ruby/all-ruby:latest
ruby-1.6.8 /all-ruby/bin/ruby-1.6.8: 1: /all-ruby/bin/ruby-1.6.8: Syntax error: "(" unexpected
	   exit 2
ruby-1.8.0 ruby 1.8.0 (2003-08-04) [x86_64-linux]

ssh でインストール

colima ssh で入って、 必要に応じて sudo apt update して、 qemu-user-static をインストールします。

% colima ssh -p example -- sudo apt install qemu-user-static -y
WARN[0000] provisioning scripts should not reference the LIMA_CIDATA variables
WARN[0000] provisioning scripts should not reference the LIMA_CIDATA variables
WARN[0000] provisioning scripts should not reference the LIMA_CIDATA variables
WARN[0000] provisioning scripts should not reference the LIMA_CIDATA variables
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
  qemu-user-static
0 upgraded, 1 newly installed, 0 to remove and 46 not upgraded.
Need to get 11.9 MB of archives.
After this operation, 117 MB of additional disk space will be used.
Get:1 http://ports.ubuntu.com/ubuntu-ports mantic-updates/universe arm64 qemu-user-static arm64 1:8.0.4+dfsg-1ubuntu3.23.10.2 [11.9 MB]
Fetched 11.9 MB in 4s (3372 kB/s)
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package qemu-user-static.
(Reading database ... 19083 files and directories currently installed.)
Preparing to unpack .../qemu-user-static_1%3a8.0.4+dfsg-1ubuntu3.23.10.2_arm64.deb ...
Unpacking qemu-user-static (1:8.0.4+dfsg-1ubuntu3.23.10.2) ...
Setting up qemu-user-static (1:8.0.4+dfsg-1ubuntu3.23.10.2) ...
Processing triggers for systemd (253.5-1ubuntu6) ...

動作確認

docker run --platform linux/amd64 --rm -it ghcr.io/ruby/all-ruby ./all-ruby -v などで i686-linux も動いているのが確認できます。

% docker run --platform linux/amd64 --rm -it ghcr.io/ruby/all-ruby env ALL_RUBY_BINS='ruby-1.6.8 ruby-1.8.0' ./all-ruby -v
ruby-1.6.8 ruby 1.6.8 (2002-12-24) [i686-linux]
ruby-1.8.0 ruby 1.8.0 (2003-08-04) [x86_64-linux]

削除

確認に使った VM を削除します。

% colima stop -p example
% colima delete example
are you sure you want to delete colima [profile=example] and all settings? [y/N] y
INFO[0008] deleting colima [profile=example]
INFO[0008] done

まとめ

all-ruby で あるバージョンより古い ruby が動かなくて、 原因不明だったのですが、不便に感じつつ amd64 環境でも動かしていたら、 なぜか i686-linux のものが動いていないと気付いて、 hsbt さんに qemu-user-static が必要なんじゃないかと教えてもらって、 試してみたら動いたので、 クリーンな VM で再現確認をした、 という話でした。

Disqus Comments

Kazuhiro NISHIYAMA

Ruby のコミッターとかやってます。 フルスタックエンジニア(って何?)かもしれません。 About znzに主なアカウントをまとめました。

znz znz


Published