Canonical MultipassのApple M1 Mac対応でUbuntu仮想マシンが使えるようになりました〜導入方法のまとめ

先週各所で報道されていましたが、Ubuntuの開発元のCanonical社が、AppleのM1チップ搭載MacでLinux仮想マシンを動作させる方法を発表。

実際は、仮想マシン管理ツール「Multipass」がM1 Macでサポートされたことにより実現されたということです。

M1 MacユーザはMultipassを導入し、M1 Macのターミナルからコマンドを実行するだけで20秒でUbuntuインスタンスが利用可能になるとのこと。

手持ちのM1搭載MacBook AirにMultipass導入してみましたので、その方法をまとめておきます。

Multipassのインストール方法

Multipassは、Canonical社のProductページからダウンロードするか、Homebrewでインストールします。

https://multipass.run/download/macos

Homebrewの場合は、–caskオプションを付けます。

% brew install --cask multipass
% brew install --cask multipass
(中略)
==> Tapping homebrew/cask
Cloning into '/opt/homebrew/Library/Taps/homebrew/homebrew-cask'...
remote: Enumerating objects: 604026, done.
remote: Counting objects: 100% (48/48), done.
remote: Compressing objects: 100% (44/44), done.
remote: Total 604026 (delta 22), reused 9 (delta 4), pack-reused 603978
Receiving objects: 100% (604026/604026), 270.99 MiB | 4.55 MiB/s, done.
Resolving deltas: 100% (427084/427084), done.
Tapped 3924 casks (4,005 files, 290.3MB).
==> Downloading https://github.com/canonical/multipass/releases/download/v1.8.1/multipass-1.8.1+mac-Darwin.pkg
==> Downloading from https://objects.githubusercontent.com/github-production-release-asset-2e65be/114128199/f223d980-f497-49b7-aa30-6f894272f6a2?X-Amz-Algorithm=AWS4-HMAC-SHA256&X
######################################################################## 100.0%
==> Installing Cask multipass
==> Running installer for multipass; your password may be necessary.
Package installers may write to any location; options such as `--appdir` are ignored.
Password:
installer: Package name is multipass
installer: Upgrading at base path /
installer: The upgrade was successful.
🍺 multipass was successfully installed

ちなみに、Multipassの導入に関しては20秒では難しかったです。

基本的な使い方

ヘルプを見ればおおよその使い方がわかります。
ヘルプはmultipass helpコマンドで確認できます。

% multipass help
Usage: multipass [options] <command>
Create, control and connect to Ubuntu instances.
This is a command line utility for multipass, a
service that manages Ubuntu instances.
Options: -h, --help Displays help on commandline options. --help-all Displays help including Qt specific options. -v, --verbose Increase logging verbosity. Repeat the 'v' in the short option for more detail. Maximum verbosity is obtained with 4 (or more) v's, i.e. -vvvv.
Available commands: alias Create an alias aliases List available aliases delete Delete instances exec Run a command on an instance find Display available images to create instances from get Get a configuration setting help Display help about a command info Display information about instances launch Create and start an Ubuntu instance list List all available instances mount Mount a local directory in the instance networks List available network interfaces purge Purge all deleted instances permanently recover Recover deleted instances restart Restart instances set Set a configuration setting shell Open a shell on a running instance start Start instances stop Stop running instances suspend Suspend running instances transfer Transfer files between the host and instances umount Unmount a directory from an instance unalias Remove an alias version Show version details

主要なコマンドの実行結果

以下に主だったコマンドの実行結果を記録しておきます。

Multipassのバージョン確認

% multipass version
multipass 1.8.1+mac
multipassd 1.8.1+mac

利用可能なインスタンスの検索

% multipass find
Image Aliases Version Description
18.04 bionic 20211109 Ubuntu 18.04 LTS
20.04 focal,lts 20211108 Ubuntu 20.04 LTS
21.04 hirsute 20211110 Ubuntu 21.04
21.10 impish 20211103 Ubuntu 21.10
anbox-cloud-appliance latest Anbox Cloud Appliance
minikube latest minikube is local Kubernetes

インスタンスの実行

インスタンスに名前を付ける場合は–nameオプションで名前を指定します。イメージを指定しない場合は標準でltsの20.04が自動的に選択されます。

% multipass launch --name ubults
Launched: ubults

イメージを指定したい場合は最後にイメージのAliasesを指定すればOK。

% multipass launch --name ubu18 bionic
Launched: ubu18

ちなみに、仮想マシンが20秒で使えるは我が家の環境では難しかったです。ネットワークの環境にもよると思いますし。ちなみに自分の場合は18.04のインスタンスで2分ぐらいで導入が完了しました。まあ、2分で使えれば十分許容範囲ですが…。

導入済みのインスタンスのリストアップ

multipass listコマンドで導入済みのインスタンスの情報を表示します。インスタンス毎にステータスやIPアドレスが確認できます。ちなみに、multipass lsでも実行できます。

% multipass list
Name State IPv4 Image
ubu18 Running 192.168.64.5 Ubuntu 18.04 LTS
ubults Stopped -- Ubuntu 20.04 LTS
% multipass ls
Name State IPv4 Image
ubu18 Running 192.168.64.5 Ubuntu 18.04 LTS
ubults Running 192.168.64.4 Ubuntu 20.04 LTS

ホストのターミナルからインスタンスのコマンドを直接実行

% multipass exec [インスタンス名] -- [実行したいコマンド]

で、M1 Macのターミナルから、起動済みUbuntuインスタンスのコマンドを直接実行できます。

% multipass exec ubults -- lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04.3 LTS
Release:	20.04
Codename:	focal
% multipass exec ubults -- uname -r
5.4.0-90-generic
% multipass exec ubu18 -- lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 18.04.6 LTS
Release:	18.04
Codename:	bionic
% multipass exec ubu18 -- uname -r
4.15.0-162-generic

インスタンスのシェルを起動

% multipass shell [インスタンス名]

でインスタンスのシェルにログインできます。

% multipass shell ubults
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-90-generic aarch64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Mon Nov 15 10:38:28 JST 2021 System load: 0.04 Usage of /: 26.4% of 4.68GB Memory usage: 19% Swap usage: 0% Processes: 101 Users logged in: 0 IPv4 address for enp0s1: 192.168.64.4 IPv6 address for enp0s1: fd91:4921:cd7c:2cb0:5054:ff:fe12:a041
0 updates can be applied immediately.
Last login: Mon Nov 15 10:36:27 2021 from 192.168.64.1
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ログイン後は、アップデートを実行してから任意のアプリのインストールなど、色々と試してみましょう。

ubuntu@ubu18:~$ sudo apt upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
(中略)
ubuntu@ubu18:~$ sudo apt install sl

ログインしたインスタンスの情報を確認

以下、ログイン済みのインスタンスで実行したコマンドの結果です。

ネットワーク確認

Multipassを導入すると自動的に192.168.64.0/24の仮想ネットワークが構築されるようです。

ubuntu@ubults:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: enp0s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:54:00:12:a0:41 brd ff:ff:ff:ff:ff:ff inet 192.168.64.4/24 brd 192.168.64.255 scope global dynamic enp0s1 valid_lft 85255sec preferred_lft 85255sec
(略)
ubuntu@ubults:~$ ip route
default via 192.168.64.1 dev enp0s1 proto dhcp src 192.168.64.4 metric 100
192.168.64.0/24 dev enp0s1 proto kernel scope link src 192.168.64.4
192.168.64.1 dev enp0s1 proto dhcp scope link src 192.168.64.4 metric 100

初回に作成したインスタンスのIPアドレスが192.168.64.4で、そこを起点にインスタンスを追加すると順番に1ずつ増えていくようです。

ubuntu@ubu18:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: enp0s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:54:00:45:0e:a1 brd ff:ff:ff:ff:ff:ff inet 192.168.64.5/24 brd 192.168.64.255 scope global dynamic enp0s1 valid_lft 83439sec preferred_lft 83439sec
(略)
ubuntu@ubu18:~$ ip route
default via 192.168.64.1 dev enp0s1 proto dhcp src 192.168.64.5 metric 100
192.168.64.0/24 dev enp0s1 proto kernel scope link src 192.168.64.5
192.168.64.1 dev enp0s1 proto dhcp scope link src 192.168.64.5 metric 100

スペック確認

ubuntu@ubults:~$ w 10:44:09 up 9 min, 1 user, load average: 0.00, 0.01, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
ubuntu pts/0 192.168.64.1 10:38 0.00s 0.08s 0.02s w
ubuntu@ubults:~$ id
uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),117(netdev),118(lxd)
ubuntu@ubults:~$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.3 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.3 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

ディスクは特に指定しないと5GB程度が割り当てられるようです。

ubuntu@ubults:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 455M 0 455M 0% /dev
tmpfs 98M 1.1M 97M 2% /run
/dev/sda1 4.7G 1.3G 3.5G 27% /
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/loop0 58M 58M 0 100% /snap/core20/1171
/dev/loop1 37M 37M 0 100% /snap/snapd/13830
/dev/loop2 61M 61M 0 100% /snap/lxd/21843
/dev/sda15 98M 290K 98M 1% /boot/efi
tmpfs 98M 0 98M 0% /run/user/1000
ubuntu@ubu18:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 481M 0 481M 0% /dev
tmpfs 99M 788K 98M 1% /run
/dev/sda1 4.7G 1.2G 3.6G 25% /
tmpfs 492M 0 492M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 492M 0 492M 0% /sys/fs/cgroup
/dev/sda15 98M 264K 98M 1% /boot/efi
tmpfs 99M 0 99M 0% /run/user/1000

同様にメモリも1GBが標準のようです。

ubuntu@ubults:~$ free -h total used free shared buff/cache available
Mem: 974Mi 131Mi 497Mi 1.0Mi 345Mi 766Mi
Swap: 0B 0B 0B
ubuntu@ubu18:~$ free -h total used free shared buff/cache available
Mem: 983M 77M 498M 788K 407M 829M
Swap: 0B 0B 0B

CPUの情報も確認。

ubuntu@ubults:~$ lscpu
Architecture: aarch64
CPU op-mode(s): 64-bit
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 1
NUMA node(s): 1
Vendor ID: ARM
Model: 3
Model name: Cortex-A72
Stepping: r0p3
BogoMIPS: 48.00
NUMA node0 CPU(s): 0
(中略)
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 fphp asimdhp cpuid dit
ubuntu@ubu18:~$ lscpu
Architecture: aarch64
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 1
NUMA node(s): 1
Vendor ID: ARM
Model: 3
Model name: Cortex-A72
Stepping: r0p3
BogoMIPS: 48.00
NUMA node0 CPU(s): 0
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 fphp asimdhp cpuid dit

インスタンスの終了

インスタンスを終了したい場合はmultipass stopコマンドを実行します。

% multipass stop ubults

導入済みインスタンスの実行

既に導入済みで、停止中のインスタンスを再度実行する場合などはmultipass startコマンドを使います。

% multipass start ubults

インスタンスの削除

インスタンスを削除する場合はmultimass deleteまたはmultipass purgeを実行。複数指定も可能です。

% multipass delete ubults ubu18
% multipass purge ubults

まとめ

初代M1 Mac登場から早1年。M1 MacでLinuxを動かす方法として、Parallels DesktopやUTMの利用がありますが、今回のMultipassの導入はそれらと比較して本当に手軽です。

LinuCでもdebian系の一部のコマンドはしっかり出題範囲に入っていますので、学習環境の構築という観点で今回のMultipassの対応はとにかくお手軽で便利です。

M1 Macオーナーで、linuxの勉強がしたい人にとっても朗報と言えるのではないでしょうか。

エスパくん

20秒はさすがに無理でしたが、導入は簡単ですし、起動も速いので入れておいて損は無いかも。

関連リンク