Multipass で Ubuntu 仮想環境を構築する

Ubuntu 開発でお馴染みの Canonical 社が開発している仮想環境構築管理ソフトの Multipass を使ってみました。

https://multipass.run/

Multipass

数ステップの簡単なコマンドで、ローカルに Ubuntu VM を構築することができます。
以下のような特徴があります。

環境

今回 Multipass を使ってみた環境は以下の通りです。
Homebrew はインストール済みの前提です。

インストール

% brew install --cask multipass

最新版 Ubuntu LTS を使ってみる

インスタンス起動

multipass launch コマンドで VM インスタンスを起動します。
--name オプションでインスタンス名を設定します。

% multipass launch --name ubuntu-latest
Launched: ubuntu-latest

multipass list コマンドでインスタンスの状態を確認します。

% multipass list  
Name                    State             IPv4             Image
ubuntu-latest           Running           192.168.XXX.XXX     Ubuntu 22.04 LTS

インスタンスへのシェル接続

multipass shell コマンドで起動したインスタンスのシェルへ接続します。

% multipass shell ubuntu-latest
Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-78-generic aarch64)
(省略)
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.2 LTS
Release:        22.04
Codename:       jammy
$ uname -a
Linux ubuntu-latest 5.15.0-78-generic #85-Ubuntu SMP Fri Jul 7 15:29:30 UTC 2023 aarch64 aarch64 aarch64 GNU/Linux
$ exit
logout

インスタンス停止/起動

multipass stop コマンドでインスタンスを停止します。

% multipass stop ubuntu-latest
% multipass list
Name                    State             IPv4             Image
ubuntu-latest           Stopped           --               Ubuntu 22.04 LTS

multipass start コマンドでインスタンスを起動します。

% multipass start ubuntu-latest
% multipass list
Name                    State             IPv4             Image
ubuntu-latest           Running           192.168.XXX.XXX     Ubuntu 22.04 LTS

インスタンス削除

インスタンスの削除は、multipass delete -> multipass purge コマンドで行います。
multipass delete コマンドでインスタンスを削除可能な状況 (Deleted) にして、multipass purge コマンドで完全削除します。
Deleted な状態であれば、multipass recover コマンドで復旧することが可能です。

% multipass stop ubuntu-latest
% multipass list
Name                    State             IPv4             Image
ubuntu-latest           Stopped           --               Ubuntu 22.04 LTS

% multipass delete ubuntu-latest    #State が 「Deleted」 (削除可能状態)になる
% multipass list                
Name                    State             IPv4             Image
ubuntu-latest           Deleted           --               Not Available

% multipass recover ubuntu-latest     #State が 「Deleted」 から 「Stopped」 に戻る(削除可能状態から復旧)
% multipass list                 
Name                    State             IPv4             Image
ubuntu-latest           Stopped           --               Ubuntu 22.04 LTS

% multipass delete ubuntu-latest
% multipass purge     #完全削除
% multipass list
No instances found.

cloud-init の使用

multipass launch 時に --cloud-init オプションで cloud-init で初期化することが可能です。
以下では、Timezone と Lacale の設定、sl パッケージをインストールする cloud-init 設定です。

cloud-init.yaml

#cloud-config
repo_update: true
repo_upgrade: all

timezone: Asia/Tokyo
locale: ja_JP.UTF-8

packages:
  - sl

上記の YAML ファイルを指定して、インスタンスを起動します。

% multipass launch --name ubuntu-latest --cloud-init /path/to/cloud-init.yaml
% multipass shell ubuntu-latest
$ timedatectl
(省略)
                Time zone: Asia/Tokyo (JST, +0900)
$ localectl
   System Locale: LANG=ja_JP.UTF-8
(省略)
$ which sl
/usr/games/sl

最新版 LTS 以外のインスタンス起動

multipass find コマンドで使用できるイメージが表示されます。
multipass launch 時にイメージ名を指定すれば、最新版 LTS 以外の Ubuntu を起動することもできます。

% multipass find
Image                       Aliases           Version          Description
20.04                       focal             20230731         Ubuntu 20.04 LTS
22.04                       jammy,lts         20230729         Ubuntu 22.04 LTS
23.04                       lunar             20230729         Ubuntu 23.04

Blueprint                   Aliases           Version          Description
anbox-cloud-appliance                         latest           Anbox Cloud Appliance
charm-dev                                     latest           A development and testing environment for charmers
docker                                        0.4              A Docker environment with Portainer and related tools
jellyfin                                      latest           Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media.
minikube                                      latest           minikube is local Kubernetes
ros-noetic                                    0.1              A development and testing environment for ROS Noetic.
ros2-humble                                   0.1              A development and testing environment for ROS 2 Humble.

Ubuntu 23.04 を起動します。
multipass exec は、インスタンスでコマンドを実行するコマンドです。

% multipass launch 23.04 --name ubuntu2304
Launched: ubuntu2304
% multipass list
Name                    State             IPv4             Image
ubuntu2304              Running           192.168.XXX.XXX    Ubuntu 23.04
% multipass exec ubuntu2304 -- lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 23.04
Release:        23.04
Codename:       lunar

Ubuntu 23.04 が起動しました。

感想

手軽に Ubuntu 環境が準備できるのはいいなぁと思いました。
cloud-init も使えるので、ある程度のプロビジョニングなら簡単にできるし、クラウド環境で cloud-init を使う際のテスト環境にもいいなと思いました。

https://multipass.run/multipass.run github.com