Qubes OS
Z
信頼度ランク
| S | 公式ソース確認済み |
| A | 成功実績多数・失敗例少数 |
| B | 賛否両論 |
| C | 動作未確認・セキュリティリスク高 |
| Z | 個人所感 |
Qubes OS テンプレートVMをカスタマイズする
FedoraやDebianのテンプレートVMへのパッケージ追加、カスタムテンプレートの作成、/rw/config を使った永続的な設定方法を解説します。
一言結論
テンプレートVMへの変更は全AppVMに即時反映されるという特性を理解すると、用途別に独立したカスタムテンプレートを作ることで環境汚染を防ぎつつAppVM間の一貫性を保てる。
テンプレートVMの仕組み
AppVM はテンプレートVMのルートファイルシステムを読み取り専用でマウントして起動します。
TemplateVM
│(/usr, /etc などを読み取り専用で共有)
├── work AppVM
├── personal AppVM
└── untrusted AppVM
各VMは /home, /rw だけが独自のデータ
テンプレートに変更を加えること = 全AppVMに変更が反映される
テンプレートVMでのパッケージインストール
# テンプレートを起動
qvm-start fedora-40 # または qubes-manager から起動
# テンプレートのターミナルを開く
qvm-run fedora-40 "xterm"
# Fedora の場合
sudo dnf install -y vim htop git curl wget nmap
# Debian の場合
sudo apt update && sudo apt install -y vim htop git curl wget
# インストール後、テンプレートをシャットダウン
sudo poweroff
重要: パッケージのインストールはテンプレートVMで行います。AppVMで行っても再起動すると消えます。
AppVM で永続的な変更を行う(/rw/config)
AppVM の /rw 以下は再起動後も保持されます。起動時に実行したいスクリプトは /rw/config/rc.local に記述します。
# work AppVM のターミナルで
cat /rw/config/rc.local
#!/bin/bash
# /rw/config/rc.local - AppVM 起動時に実行される
# ネームサーバーを変更
echo "nameserver 1.1.1.1" > /etc/resolv.conf
# 特定のサービスを起動
/usr/local/bin/my-service &
chmod +x /rw/config/rc.local
カスタムテンプレートの作成
既存テンプレートをクローンして新しいテンプレートを作る
# dom0 ターミナルで
qvm-clone fedora-40 fedora-40-dev
# クローンしたテンプレートで開発ツールをインストール
qvm-run fedora-40-dev "xterm"
# fedora-40-dev のターミナルで
sudo dnf install -y java-17-openjdk eclipse nodejs npm python3-pip
sudo poweroff
# クローンテンプレートを使う AppVM を作成
qvm-create --template fedora-40-dev --label blue dev-work
Debian テンプレートの追加
# dom0 ターミナルで
sudo qubes-dom0-update qubes-template-debian-12
Minimal テンプレートの使用
Fedora/Debian の Minimal テンプレートは最小限のパッケージしか入っていません。メモリ使用量が少なく、攻撃面も小さいです。
sudo qubes-dom0-update qubes-template-fedora-40-minimal
# Minimal でよく必要なパッケージ
qvm-run fedora-40-minimal "xterm"
sudo dnf install -y qubes-core-agent-networking qubes-core-agent-nautilus
sudo dnf install -y qubes-usb-proxy qubes-pdf-converter
bind-dirs で追加のディレクトリを永続化する
/rw/config/qubes-bind-dirs.d/ で指定したディレクトリを永続化できます。
# /rw/config/qubes-bind-dirs.d/50_user.conf
# (AppVM の) 追加で永続化したいディレクトリ
binds+=( '/etc/ssh' ) # SSH設定を保持
binds+=( '/opt/myapp' ) # カスタムアプリを保持
このファイルを作成して AppVM を再起動すると、指定したディレクトリが /rw/bind-dirs/ 以下にバックアップされ、起動時に元の場所にマウントされます。
テンプレートのアップデート
# テンプレートのアップデート(dom0 から)
qubes-dom0-update # dom0 自体のアップデート
# GUI ツール
# Q メニュー → System Tools → Qubes Update
# 手動で各テンプレートをアップデート
qvm-run --auto fedora-40 "sudo dnf upgrade -y && sudo poweroff"
qvm-run --auto debian-12 "sudo apt update && sudo apt upgrade -y && sudo poweroff"
テンプレートのスクリーンショットの整理
# テンプレートの一覧
qvm-ls --type TemplateVM
# 不要なテンプレートを削除(このテンプレートを使っているVMがないことを確認)
qvm-remove fedora-39 # 古いバージョン
よくある間違い
# NG: AppVM でパッケージをインストールしても消える
qvm-run work "sudo dnf install -y vim" # 再起動で消える
# OK: テンプレートでインストールする
qvm-run fedora-40 "sudo dnf install -y vim"
qvm-shutdown fedora-40
# その後 work を再起動すると vim が使える
qvm-shutdown work
qvm-start work
まとめ
| 変更の種類 | 保存場所 |
|---|---|
| アプリのインストール | TemplateVM で dnf/apt install |
| 起動時スクリプト | AppVM の /rw/config/rc.local |
| 設定ファイルの永続化 | AppVM の /rw/config/qubes-bind-dirs.d/ |
| ユーザーデータ | AppVM の /home |
テンプレートを適切に管理することが、Qubes OS を効率よく運用するコツです。