CUBE SUGAR CONTAINER

技術系のこと書きます。

Lima を使って Apple Silicon 版の Mac で x86-64 (Intel on ARM) な仮想マシンを扱う

Apple Silicon 版の Mac を使っていても、依然として成果物をデプロイする先は ISA が x86-64 (amd64) のマシンであることが多い。 となると、どうしても x86-64 の環境を使って作業をしたい場面が出てくる。 もちろん、IaaS を利用してリモートにマシンを立ち上げれば良いんだけど、簡単な検証なら手元で手軽に済ませたい。 今回は、そんなニーズを埋めてくれるかもしれない Lima を使ってみる。

Lima を使うと、Apple Silicon 版の Mac 上で ISA が x86-64 の Linux 仮想マシンを手軽に立ち上げることができる 1。 ただし、バックエンドは QEMU のソフトウェアエミュレーション (qemu-system-x86_64) なので、ネイティブな環境に比べるとパフォーマンスは大きく劣る。

使った環境は次のとおり。

$ sw_vers   
ProductName:    macOS
ProductVersion: 12.2.1
BuildVersion:   21D62
$ uname -srm              
Darwin 21.3.0 arm64
$ lima --version          
limactl version 0.8.3

もくじ

下準備

あらかじめ、Homebrew で Lima をインストールする。

$ brew install lima

インストールすると limactl コマンドが使えるようになる。

$ limactl --version        
limactl version 0.8.3

仮想マシンを立ち上げる

Lima は YAML 形式の設定ファイルを元に仮想マシンを作成する。 以下のサンプルでは ISA が x86-64 で、ディストリビューションが Ubuntu 20.04 LTS の仮想マシンを定義している。

$ cat << 'EOF' > focal-amd64.yaml
arch: "x86_64"
images:
- location: "https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img"
  arch: "x86_64"
EOF

設定ファイルができたら limactl validate コマンドで形式が正しいかチェックしておこう。

$ limactl validate focal-amd64.yaml
INFO[0000] "focal-amd64.yaml": OK

上記の設定ファイルを元に limactl start コマンドで仮想マシンを起動する。 --tty=false オプションは、つけない場合に設定ファイルをエディタで編集した上で起動するようになる。

$ limactl start --tty=false focal-amd64.yaml

上記を実行すると、初回はイメージファイルのダウンロードや仮想マシンの作成とセットアップが走る。 環境にもよるけど、この作業には数分かかるので気長に待つ。

ちなみに設定ファイルの項目やデフォルトの値は以下を参照すると良い。

github.com

また、limactl start コマンドで YAML ファイルではなく単純に仮想マシンの名前を指定した場合にも、上記のデフォルトの設定ファイルをベースに仮想マシンが作られる。 ここでも、--tty=false をつけなければ、デフォルトの設定ファイルをインタラクティブに編集しながら仮想マシンが定義できる。 現在 (2022-02) のデフォルトのディストリビューションは Ubuntu 21.10 のようだ。

$ limactl start impish

仮想マシンが作成できると limactl list コマンドに確認できるようになる。

$ limactl list                              
NAME           STATUS     SSH                ARCH      CPUS    MEMORY    DISK      DIR
focal-amd64    Running    127.0.0.1:50191    x86_64    4       4GiB      100GiB    /Users/amedama/.lima/focal-amd64

仮想マシンを操作する

仮想マシンが起動したら limactl shell コマンドで仮想マシンにログインしてシェルが取れる。

$ limactl shell focal-amd64

ログインできたら uname -r コマンドで仮想マシンの ISA を確認してみよう。 ちゃんと x86_64 と表示されるはず。

$ uname -m
x86_64

そして、次のとおり仮想マシンが Ubuntu 20.04 LTS であることがわかる。

$ uname -sr
Linux 5.4.0-99-generic
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.3 LTS
Release:    20.04
Codename:   focal

Lima には他にも色々と機能があるけど、とりあえず今回はそんな感じで。


  1. 反対に、Intel 版の Mac 上で ISA が ARM64 の Linux 仮想マシンを立ち上げることもできる