Lima - x86_64 ubuntu on M2 Macbook Air

Written on 2022-10-26

別記事にあるように『低レベルプログラミング』という本を履修。この本はx86_64とUbuntuの環境が前提となっている。今のパソコンはM2 Macbook Air。エミューレーション環境を構築する必要がある。そのような用途にはLimaが好適。インストールは簡単で情報は豊富。この記事は2022年末時点での情報に基づくインストールメモ。

Mx Macでの仮想環境

Macがaarh64(M1,M2チップ)に移行しても、依然 x86_64 マシンの必要性は残っている。現在、UTM, Limaという2つの方法が主流であり、試してみたので方法と性能をまとめる。

UTM

  • VirtualPC/VMware station のような、マシン自体をエミュレートする方法。
  • GUIあり。裏でqemuがx86_64をエミュレートしている。
  • ディスクはVirtIO。拡張を入れればホストと共有も可能。
  • ネットワーク共有はブリッジ方式。仮想マシンには固有のIPアドレスが付与されブリッジに接続される。
  • Ubuntuを入れたらGUIはかなりもっさり。Sshで入っても遅さを感じる。
  • 自作OSなどをx86_64教本に基づいて開発したい場合。

Lima

  • Dockerのようなコンテナ式。
  • GUIなし。シェルログインもできるがsshで入ることが通常。
  • ホストのディスクをマウントする。
  • ネットワークはポート転送方式。仮想マシンのポートはローカルホストの別のポートに生えてくる(たとえば HTTPが8080など)。
  • 速度低下はあまり感じられない。
  • 自作コンパイラなどをx86_64 SystemV呼び出し規約などに基づいて開発したい場合。

今回はBIOS(UEFI)レベルの話は関係ないので、環境構築が簡単でより軽量なLimaをインストールした。

Lima はDockerと絡めて解説されている記事が多いが、WSL的な仮想環境のコマンドラインとして、手軽に使える。

Limaのインストール

brewで一発。

$ brew install lima docker docker-compose

仮想マシンの設定

本家のレポジトリから examples/default.yamlをコピー。

先頭部分を arch: "x86_64"に編集する。

$ limactl start default.yaml

このコマンドの意味は、defaultという仮想マシンをdefault.yamlに基づいて作成し、起動する。

起動される仮想マシンは次のような仕様となる。

  • x86_64
  • Ubuntu22.04 server 最新版
  • sshのポートは localhost:60022 にオープン
  • ローカルのホームディレクトリ(/Users/<user_name>/)は、同じパスに「リードオンリー」でマウント
  • /tmp/lima/が同じパスに「読み書き」でマウント
  • lima マシン内でのホームディレクトリは/home/<user_name>.lima/

limaのあとに続けてコマンドを打てば、それは仮想マシンで実行される。x86_64 Ubuntuであることを確認。

$ uname -a
Darwin m2air 21.6.0 Darwin Kernel Version 21.6.0: Mon Aug 22 20:20:07 PDT 2022; root:xnu-8020.140.49~2/RELEASE_ARM64_T8110 arm64

$ lima uname -a
Linux lima-default 5.15.0-47-generic #51-Ubuntu SMP Thu Aug 11 07:51:15 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

lima とだけコマンド入力すればdefaultという今作った仮想マシンでシェルを動かす。limactl start defaultと同じ。以後は仮想マシンで動いているシェルと対話。 中からは、自分のホスト名はlima-defaultと見えている。

❯ lima                                              # mac 上のプロンプト
<user-name>@lima-default:~$ pwd                     # lima 上のシェル
/home/<user-name>.linux                             # <user-name>のところは実際にはユーザ名
<user-name>@lima-default:~$ hostname
lima-default

sshで入ることもできる。

$ ssh -p 60022 localhost

作業環境の構築

  • VS code に Remote - SSH 拡張を入れる。
  • VS code remote で localhost:60022 に sshで接続する(左下のリモート接続マーク)
  • git clone http://github.com/nkon/dotfiles.gitdotfilesで個人環境の設定
  • sudo apt install build-essential nasm←開発環境のインストール