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秒はさすがに無理でしたが、導入は簡単ですし、起動も速いので入れておいて損は無いかも。

関連リンク