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.git
←dotfiles
で個人環境の設定sudo apt install build-essential nasm
←開発環境のインストール