Linuxの仮想環境 on M1(Apple Silicon)
Apple SiliconのCPUを搭載したMac(通称"M1 Mac")を購入して、ファンレスでこのパフォーマンス、しかも熱くならない、バッテリー持ちがすごい、何に安い!、などなど、いい意味で衝撃を受けています。
一方で、エンジニア目線で気になるのは、ちゃんと開発ツールが動くのか、だと思います。 特に、LinuxのVM環境は必須で、作っては壊し、壊しては作る(Build & Scrap!)をカジュアルにできないと何かと困ります。これまではVagrant+VirtualBoxでその環境を整えてきたのですが、M1 Macではこれができません。
Multipass
そうこうしているうちに、Ubuntuでお馴染みのCanonicalからMultipassというツールが出てきました。これは、Ubuntuに限られるのですが、Vagrant的にLinux VMを作って・壊すというのがすぐにでき、かつ、M1 Macにも対応しているので、Vagrantのワークフローと同様のことがM1 Mac上でできてしまします。
以下、Multipassの簡単な使い方を見ていきます。
Multipassのインストール
Multipassの公式ページもしくはgithub Releaseからバイナリ(パッケージ)をダウンロードできます。通常通り、ダブルクリックでインストールできます。
インストール後はターミナルからコマンドを実行して確認できます。
% multipass version
multipass 1.8.1+mac
multipassd 1.8.1+mac
基本的な使い方
起動・shellログイン・停止・削除など一通りやってみます。
起動
まず、利用可能なUbuntuのversionをリストします。
% multipass find
Image Aliases Version Description
18.04 bionic 20220104 Ubuntu 18.04 LTS
20.04 focal,lts 20220118 Ubuntu 20.04 LTS
21.10 impish 20220118 Ubuntu 21.10
LTS(Long Term Support)版と最新のversionは利用可能になっています。
Ubuntuのversionを指定してVMを起動します。指定しない場合は一番新しいLTSが使われるようです。
## デフォルトのUbuntu LTSで立ち上げる
% multipass launch -n my-ubuntu-123
## Ubuntu focalで立ち上げる
% multipass launch -n my-ubuntu-123 focal
## CPU=2コア, RAM=2GB, Disk=10GBで立ち上げる
% multipass launch -n my-ubuntu-123 -c 2 -m 2g -d 10g
Shellにログインする
% multipass shell my-ubuntu-123
ubuntu@my-ubuntu-123:~$ pwd
/home/ubuntu
...
ログインした後は、Vagrantと同様に、sudo
でパスワードなしでrootになれます。
起動しているVMのリスト
% multipass list
Name State IPv4 Image
docker-lab Running 192.168.64.7 Ubuntu 20.04 LTS
172.17.0.1
172.18.0.1
my-ubuntu-123 Running 192.168.64.9 Ubuntu 20.04 LTS
server-lab Stopped -- Ubuntu 20.04 LTS
終了・再開
# 終了
% multipass stop my-ubuntu-123
# 再開
% multipass start my-ubuntu-123
削除
ここはVagrantとは少し異なり、Miultipassの場合は、delete
した後、purge
で完全削除になる。purge
前であれば、delete
後でも復活させることができる(recover
)。
% multipass delete my-ubuntu-123
# 完全削除
% multipass purge my-ubuntu-123
ホストとのファイルの共有
VagrantではゲストOS側上の/vagrant/
ディレクトリがホストOS側のVagrant実行ディレクトリに自動的にマウントされ、そこ経由でファイルの共有ができました。
Multipassではmount
コマンドを実行して上記と同じことができます。
ここでは、ゲストOS(すでに立ち上がっているmy-ubuntu-123
)側の/data/
をホストOS側の/Users/foobar123
にマウントする例を見ていきます。
# マウント
% multipass mount /Users/foobar123 my-ubuntu-123:/data
# 確認
% multipass info my-ubuntu-123
Name: my-ubuntu-123
State: Running
IPv4: 192.168.64.9
Release: Ubuntu 20.04.3 LTS
Image hash: 6fbeb622aace (Ubuntu 20.04 LTS)
Load: 0.00 0.02 0.00
Disk usage: 1.4G out of 4.7G
Memory usage: 208.8M out of 970.0M
Mounts: /Users/foobar123 => /data
UID map: 501:default
GID map: 20:default
実際にShellで入って、/data
ディレクトリをlistしてみます。
% multipass shell my-ubuntu-123
ubuntu@my-ubuntu-123:~$
ubuntu@my-ubuntu-123:~$ cd /data/
ubuntu@my-ubuntu-123:~$ ls
drwx------ 1 ubuntu ubuntu 96 Nov 2 20:55 Applications
drwx------ 1 ubuntu ubuntu 288 Jan 26 13:41 Desktop
drwx------ 1 ubuntu ubuntu 192 Jan 7 08:27 Documents
drwx------ 1 ubuntu ubuntu 320 Jan 26 13:31 Downloads
...
....
まとめ
非常にシンプルにVagrant的なワークフローが回せるので重宝してます。 本家にCheatsheetがあったので、貼っておきます。