はじめに
Proxmox VEで複数台のVMを立てる際、毎回ISOからインストールするのは手間がかかります。
Cloud-initを活用して 「OSインストール済みのテンプレート」 を作成しておけば、クローンするだけでユーザー作成やネットワーク設定が完了した状態のVMを数秒でデプロイできます。
今回は、Ubuntu 24.04を使用したテンプレート作成手順を解説します。
1. ISOイメージの取得
ProxmoxのGUIから、直接UbuntuのISOファイルをダウンロードします。
Proxmoxにログインし、localストレージのISOイメージからURLからダウンロードをクリックします。
今回はUbuntu Serverを利用します。
Ubuntuの公式サイトから、ダウンロードリンク(download nowのリンク先)をコピーし、Proxmoxの画面に貼り付けます。
※ローカルPCにISOを落として、ハイパーバイザーにアップロードしなくて済むので、地味にこの機能便利。
今回使用したリンクとファイル名は以下です。
リンク先を入力後、クエリURLをクリックすると、自動的にファイル名が入力されます。

2. テンプレート元となるVMの作成
VMの作成をクリックし、ベースとなるVMを設定します。
デフォルトから変更しない設定値については記載を省略します。
また、設定値の根拠としては、公式のSuggested minimumに準拠します。
全般
| 項目 | 設定値 |
|---|---|
| ノード | 任意のProxmoxホスト |
| VM ID | 9000 |
| 名前 | hip1kt-pvimag01 |
OS
| 項目 | 設定値 |
|---|---|
| CD/DVDイメージファイルを使用 | 有効 |
| ストレージ | local |
| ISOイメージ | 先程ダウンロードしたISOを指定 |
システム
| 項目 | 設定値 |
|---|---|
| Qemuエージェント | 有効 |
Qemuエージェントを有効にすると、Proxmoxの管理画面からVMのIPアドレスを確認できるようになります。
ディスク
| 項目 | 設定値 |
|---|---|
| 中止 | 有効 |
| SSDエミュレーション | 有効 |
| ディスクサイズ(GiB) | 25 |
CPU
CPU設定は特に変更しません。
メモリ
| 項目 | 設定値 |
|---|---|
| メモリ(MiB) | 3072 |
| 最小メモリ量(MiB) | 1536 |
※画像では最小メモリが1MiBになっていますが、OS起動時にメモリ不足でCloud-initが実行できない事象が発生したため、1536に増やしています。

ネットワーク
確認
確認画面で設定を確認してVM作成します。
3. Cloud-initデバイスの追加
作成したVMに、Cloud-initの設定情報を流し込むための「仮想ドライブ」を追加します。
作成したVMを選択肢、ハードウェアから追加をクリック、Cloudinitデバイスを選択します。

ストレージでlocal-lvmを選択し、追加をクリックします。
4. Ubuntuのインストールと初期設定
通常通りOSをインストールします。この時の設定は「テンプレート」に引き継がれるため、最小構成を目指します。
コンソールを開き、Start Nowから電源投入します。

Try or Install Ubuntu Serverを選択し、Enterを押します。

キーボードレイアウトはここでは日本語レイアウトに変更しています。

Ubuntu Server (minimized)で構築を進めます。
この辺は好みですが、私は最小で構築したい派なので、こちらを選びます。

自宅ホームルータ(BuffaloやNECのもの)があればDHCPでIPアドレスが降ってくると思うので、そのまま設定します。

インターネットに繋がっていれば、自動でミラーテストが走って完了すると思います。

ディスク周りはLVMが有効になっていることを確認して、次へ進めます。

初期ユーザの設定です。
イメージを固める前にこのユーザは削除するので、適当に設定します。

Ubuntu Proのライセンスなんて無いのでスキップします。

インストールメディアが入ったままだと怒られるので、メディアを取り外します。
Proxmoxの画面に戻り、VMのハードウェア>CD/DVDドライブを編集します。

コンソールに戻り、Enterを押せばUbuntu Serverが起動してきます。

5. イメージ化前のクリーンアップ
テンプレートからクローンした際に「同じホスト鍵」や「不要なユーザー」が残らないよう、仕上げを行います。
作成した一時ユーザーでログインし、以下のコマンドを実行します。
まず、rootユーザを有効化し、初期ユーザを削除します。
# rootパスワードの設定と切り替え
sudo passwd root
実行例
cloud-init@hip1tk-pvimag01:~$ sudo passwd root
[sudo] password for cloud-init:<初期設定ユーザのPW>
New password:<新しいroot PW>
Retype new password:<新しいroot PW>
passwd: password updated successfully
cloud-init@hip1tk-pvimag01:~$
cloud-initユーザから抜けて、rootで入り直します。
exit
# その後rootユーザでコンソールで入り直す
rootで入り直してから、以下を実行します。
# 初期ユーザの削除
deluser --remove-all-files <初期ユーザ>
# パッケージの最新化
apt update && apt upgrade -y
# QEMUエージェントの導入
apt install -y qemu-guest-agent
systemctl enable --now qemu-guest-agent
systemctl status qemu-guest-agent
# 4. マシン固有情報の削除(重要!)
# SSHホスト鍵の削除(クローン後に再生成させるため)
rm -f /etc/ssh/ssh_host_*
# Cloud-initのキャッシュクリア
cloud-init clean --logs
# aptキャッシュの削除
apt clean
# 履歴のクリア
history -c
ここまで実行したら、Proxmoxから対象VMを停止します。
6. テンプレートへの変換
ここからが本番です。
停止したVMのMoreからテンプレートに変換をクリックします。
これで、このVMは起動不可になり、クローン専用の「マスターイメージ」になります。

7. テンプレートからの自動展開
実際にテンプレートから新しいVMを作ってみましょう。
VMテンプレートを選択し、Moreからクローンをクリックします。

モードを完全クローンに切り替え、VM IDとVM名を設定します。
今回は、Ansibleサーバを立てたいので、hip1tk-pvansi01とします。

Cloud-initの設定後、VMを起動します。
quem-guest-agentのお陰でVMのIPアドレスがダッシュボードで見られるので、Teratermで直接SSHしてみたいと思います。

無事SSHに成功しました。ホスト名、ユーザ名とPWも正常にセットされていることが確認できました。
Welcome to Ubuntu 24.04.3 LTS (GNU/Linux 6.8.0-100-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.
To restore this content, you can run the 'unminimize' command.
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
ansible-user@hip1tk-pvansi01:~$




















