Multipass で Ubuntu 仮想環境を構築する
Ubuntu 開発でお馴染みの Canonical 社が開発している仮想環境構築管理ソフトの Multipass を使ってみました。
Multipass
数ステップの簡単なコマンドで、ローカルに Ubuntu VM を構築することができます。
以下のような特徴があります。
- クロスプラットフォーム (Linux/Mac/Windows) 対応
- Apple silicon (M1/M2) でも使える
- ハイパーバイザー型 VM (macOS では HyperKit (Intel) / QEMU (Apple silicon))
- cloud-init 対応
- CLI なインタフェース
環境
今回 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 を使う際のテスト環境にもいいなと思いました。