# mac install
brew install --cask multipass
# os さがし
multipass find
# 22.04 をtestvmという名前で上げる
# multipass launch 22.04 --name workvm --mem 16G --disk 100G --cpus 4
multipass launch 18.04 --name workvm --mem 16G --disk 100G --cpus 4
# 状態を見てみる
multipass exec workvm -- lsb_release -a && free -h && df -h && lscpu
# VMに入る
multipass shell workvm
# stop
multipass stop workvm
# start
multipass start workvm
# directory作成 & mount
# 注意点VM(ゲスト)側のHOMEに対してマウントするとshell failed: ssh failed to authenticate: 'Access denied for 'publickey'. Authentication that can continue: publickey'と言われて怒られるので注意
mkdir -p ~/multipass_dir/workvm
multipass mount ~/multipass_dir/workvm workvm:~/workspaces
# unmount
multipass umount workvm
# vm環境の一覧
multipass list
# vm環境の情報を表示
# "--format json|yaml" など選べる
multipass info workvm
# testvmの削除(まだ削除されずゴミ箱に入れられる)
multipass delete workvm
# testvmの復元
multipass recover workvm
# vmの削除
multipass purge
# passwordを変更
multipass exec workvm -- sudo passwd ubuntu
# 鍵を持ってくる
sudo cp /var/root/Library/Application\ Support/multipassd/ssh-keys/id_rsa ~/.ssh/id_multipass_rsa
sudo chown `id -un` ~/.ssh/id_multipass_rsa
# sshできるか確認
ssh -i ~/.ssh/id_multipass_rsa ubuntu@$(multipass info workvm --format json|jq -r ".info.workvm.ipv4[]")
# ssh configを生成
cat << EOF >> ~/.ssh/config
Host workvm
HostName $(multipass info workvm --format json|jq -r ".info.workvm.ipv4[]")
IdentityFile ~/.ssh/id_multipass_rsa
User ubuntu
EOF
あとはVScodeのRemote SSHを利用してworkvmにアクセスする
割とサクッと立ち上がって cloudinit も使って動かすこともできて大変便利。ただ不満なポイントとしてはネットワーク機能がとても使えないのが厳しいところ。
例えばVM同士を繋いでトポロジーを組んでルータの実験したいなと思った際に使い物にならないのが大変不満ですね。
やはり M1Mac の場合は Vagrant + Parallels でやるのが一番説がありますね。 まぁ netns でやれよという話はあるんですがアプリケーションに対して何も考えずリソース的に切りたいとかそういう場合にVMリソースが欲しい気持ちになるのでぐぬぬという感じです。