🕍
MacでUbuntu serverを立てるのにmultipassを使ってみた
インストール
ここから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)
参考
以下のページを参考にしました。
追記 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自体を再起動すると復帰できると書いてありました。
Discussion