🕍

MacでUbuntu serverを立てるのにmultipassを使ってみた

2022/05/01に公開

インストール

https://multipass.run/

ここからpkgファイルをダウンロードして実行。

とりあえず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 version
multipass   1.8.1+mac
multipassd  1.8.1+mac

作成できるイメージの一覧

$ multipass find
Image                       Aliases           Version          Description
18.04                       bionic            20220424         Ubuntu 18.04 LTS
20.04                       focal,lts         20220419         Ubuntu 20.04 LTS
21.10                       impish            20220309         Ubuntu 21.10
anbox-cloud-appliance                         latest           Anbox Cloud Appliance
charm-dev                                     latest           A development and testing environment for charmers
docker                                        latest           A Docker environment with Portainer and related tools
minikube               

VMの作成

u01という名前でVMを作成してみる

$ multipass launch --name u01

VMの実行

そのVMインスタンスで /bin/bashを実行

$ multipass exec u01 /bin/bash

メモリサイズ、ストレージサイズ、CPUの個数を確認。

ubuntu@u01:~$ free -h
              total        used        free      shared  buff/cache   available
Mem:          976Mi       141Mi       419Mi       0.0Ki       416Mi       699Mi
Swap:            0B          0B          0B
ubuntu@u01:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            472M     0  472M   0% /dev
tmpfs            98M  876K   97M   1% /run
/dev/vda1       4.7G  1.4G  3.4G  29% /
tmpfs           489M     0  489M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/loop0       62M   62M     0 100% /snap/core20/1405
/dev/loop1       68M   68M     0 100% /snap/lxd/22753
/dev/loop2       44M   44M     0 100% /snap/snapd/15177
/dev/vda15      105M  5.2M  100M   5% /boot/efi
tmpfs            98M     0   98M   0% /run/user/1000
ubuntu@u01:~$ lscpu
Architecture:                    x86_64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
Address sizes:                   39 bits physical, 48 bits virtual
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:                       GenuineIntel
CPU family:                      6
Model:                           142
Model name:                      Intel(R) Core(TM) i5-7360U CPU @ 2.30GHz
Stepping:                        9
CPU MHz:                         2300.000
BogoMIPS:                        4599.93
L1d cache:                       32 KiB
L1i cache:                       32 KiB
L2 cache:                        256 KiB
L3 cache:                        4 MiB
NUMA node0 CPU(s):               0
Vulnerability Itlb multihit:     KVM: Vulnerable
Vulnerability L1tf:              Mitigation; PTE Inversion
Vulnerability Mds:               Vulnerable: Clear CPU buffers attempted, no microcode; SMT Host state unknown
Vulnerability Meltdown:          Mitigation; PTI
Vulnerability Spec store bypass: Vulnerable
Vulnerability Spectre v1:        Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:        Mitigation; Retpolines, STIBP disabled, RSB filling
Vulnerability Srbds:             Unknown: Dependent on hypervisor status
Vulnerability Tsx async abort:   Vulnerable: Clear CPU buffers attempted, no microcode; SMT Host state unknown
Flags:                           fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2
                                  ss ht pbe syscall nx pdpe1gb lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid pni pclmu
                                 lqdq dtes64 ds_cpl ssse3 sdbg fma cx16 xtpr pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rd
                                 rand hypervisor lahf_lm abm 3dnowprefetch pti fsgsbase bmi1 hle avx2 bmi2 erms rtm xsaveopt arat
ubuntu@u01:~$ 

別のttyから以下を実行してみた

$ multipass list
Name                    State             IPv4             Image
u01                     Running           192.168.64.2     Ubuntu 20.04 LTS

先ほど起動した/bin/bash を終了してから、そのttyで以下を実行

$ multipass list
Name                    State             IPv4             Image
u01                     Running           192.168.64.2     Ubuntu 20.04 LTS

VMは動き続けるようだ。

$ multipass stop u01
$ multipass list
Name                    State             IPv4             Image
u01                     Stopped           --               Ubuntu 20.04 LTS

止めてみた。

$ multipass shell u01

VMを自動で起動してshellを実行してくれた。

ローカルストレージのマウント

Macの別のttyから

$ cd work
$ multipass mount $PWD u01:/home/ubuntu/work
koba-mac:work koba$ multipass info
Name argument or --all is required
$ multipass info u01
Name:           u01
State:          Running
IPv4:           192.168.64.2
Release:        Ubuntu 20.04.4 LTS
Image hash:     eba3234587c9 (Ubuntu 20.04 LTS)
Load:           0.05 0.02 0.03
Disk usage:     1.3G out of 4.7G
Memory usage:   152.8M out of 976.9M
Mounts:         /Users/koba/work => /home/ubuntu/work
                    UID map: 501:default
                    GID map: 20:default

VM内のshellで以下を実行。

ubuntu@u01:~/work$ echo abc > abc
ubuntu@u01:~/work$ ls -l abc
-rw-rw-r-- 1 ubuntu ubuntu 4 May  1 12:45 abc

Macの別のttyでそのファイルを見る

$ ls -l abc
-rw-rw-r--  1 koba  staff  4  5  1 12:45 abc

mountのときにUID, GIDのマッピングをいい感じにしてくれるので楽ですね。
ちなみに、mountはsshfsを使って行われていました。

ubuntu@u01:~$ mount |grep '/home/ubuntu/work'
:/Users/koba/work on /home/ubuntu/work type fuse.sshfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)

参考

以下のページを参考にしました。
https://dev.classmethod.jp/articles/intro-to-multipass/

追記 2022/05/01

ubuntu@u01:~$ sudo reboot

リブートしようとして、shellの中からsudo reboot をしたら、VMが壊れた。
これはやってはいけない操作だったか ...

$ multipass shell u01
start failed: The following errors occurred:                                    
u01: timed out waiting for response
koba-mac:work koba$ multipass list                                              
Name                    State             IPv4             Image
u01                     Unknown           --               Ubuntu 20.04 LTS

削除した。

$ multipass delete u01
$ multipass list
Name                    State             IPv4             Image
u01                     Deleted           --               Not Available
$ multipass purge u01
This command takes no arguments
$ multipass purge --help
Usage: multipass purge [options]
Purge all deleted instances permanently, including all their data.

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.

完全に削除する purgeは個別にはできなくて全てのインスタンスを削除する。

$ multipass launch --name u01
launch failed: instance "u01" already exists      

同じ名前でもう一度作成することはできない。

$ multipass purge
$ multipass list
No instances found.

最初からやり直す。

以下の記事では、rebootしておかしくなったときには、Mac自体を再起動すると復帰できると書いてありました。
https://zenn.dev/kujirahand/articles/57c367702ed1f2#ubuntu内でrebootするとおかしくなる

Discussion