Summary ¶
企業のネットが星を被い、電子や光が駆け巡ってもハイパーバイザーやデータが消えてなくなるほど、情報化されていない近未来。
VMware の社内利用を禁じられた企業ネットでは新しい仮想化基盤を構築するべく自宅環境をクローンするのであった。
前回は、クラスターを作成していきました。今回は仮想マシーンのテンプレートの作成を実施します。
cloud-init とは ¶
パブリッククラウドなどで利用が増えているソフトウェアです。初回起動時に特定の設定やファイルの配置などを仕込んでインストールの自動化をすること出来ます。また Proxmox VE 7.0 以降はこれを利用して IP Address, 初期ユーザー名, SSH 公開鍵などを設定できるため便利です。
準備 ¶
参考ドキュメントは下記です。
今回は Ubuntu 24.04 を template として登録し起動できる所までを目指します。Proxmox VE では KVM ベースの仮想環境となりますので Disk のイメージは qcow2 のファイルとなります。すべての作業はクラスターに参加しているどれかの Node で作業すればクラスター内どれでも利用すること出来ます。
依存関係をインストールしておきます。
1
| apt -y install libguestfs-tools jq
|
イメージのダウンロード ¶
Disk image は Ubuntu 24.04 であれば下記で公開されているためこれをダウンロードします。
sha256sum
で HASH を確認して問題なければ名前を統一するため ubuntu-2404.img
に変更します。
1
2
3
4
5
6
7
| mkdir -p ~/images
cd ~/images
wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img
wget https://cloud-images.ubuntu.com/noble/current/SHA256SUMS
sha256sum --ignore-missing -c SHA256SUMS
cp -av noble-server-cloudimg-amd64.img ubuntu-2404.img
|
template ファイルの作成 ¶
OS にインストールするパッケージなどは事前インストール済みとしたいため、設定ファイルを作成してイメージに含めてしまいます。
やってること。
- history の設定を変更
apt/source.list
を jp.archive.ubuntu.com
に向ける- パッケージのインストール
- NTP を Cloudflare とマルチフィードに同期登録
- TimeZone を Asia/Tokyo に設定
- 全部流せてたら 1 分後に再起動
11_template.cfg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
| #cloud-config
# This will cause the set+update hostname module to not operate (if true)
preserve_hostname: false
write_files:
- content: |
# history initialization
HISTTIMEFORMAT='%Y-%m-%dT%H:%M:%S.%s%z '
HISTSIZE=10000
HISTFILESIZE=10000
HISTCONTROL=ignoreboth
PROMPT_COMMAND='history -a; history -c; history -r'
path: /etc/profile.d/servers.sh
append: false
apt:
preserve_sources_list: false
primary:
- arches: [amd64]
uri: http://jp.archive.ubuntu.com/ubuntu
package_upgrade: true
packages:
- curl
- htop
- mtr
- nano
- net-tools
- qemu-guest-agent
- tcpdump
- traceroute
- wget
ntp:
enabled: true
ntp_client: chrony
pools:
- time.cloudflare.com
- ntp.jst.mfeed.ad.jp
timezone: "Asia/Tokyo"
power_state:
delay: "+1"
mode: reboot
message: Bye Bye
timeout: 30
|
作成したファイルを ubuntu-2404.img
にコピーする。
1
2
| cd ~/images
virt-copy-in -a ubuntu-2404.img 11_template.cfg /etc/cloud/cloud.cfg.d
|
コピーされたのを確認するには下記。
1
2
3
4
5
| > virt-ls -a ubuntu-2404.img /etc/cloud/cloud.cfg.d/
05_logging.cfg
11_template.cfg
90_dpkg.cfg
README
|
テンプレートの作成 ¶
- ちょくちょく出てくる物を変数として定義しとく変数の中身は各自変更する事
1
2
3
4
| export PVE_TMP_VMID=9000
export PVE_VOLUME=cephrbd01
export PVE_NET0_VLAN=221
export PVE_USERNAME=naa0yama
|
VLAN が必要な場合はコマンドの末尾に tag=${PVE_NET0_VLAN}
を追加する。
1
| qm create ${PVE_TMP_VMID} --name "Ubuntu-24.04" --cores 2 --memory 2048 --net0 virtio,bridge=vmbr0
|
cloud-init の設定ファイルをコピーしたイメージをインポートする。
1
2
| cd ~/images
qm importdisk ${PVE_TMP_VMID} ubuntu-2404.img ${PVE_VOLUME}
|
- Disk を SCSI として仮想マシーンにアタッチ
- Boot Disk に設定
- Disk Size を 20GB に拡張
1
2
3
4
| qm set ${PVE_TMP_VMID} --scsihw virtio-scsi-pci --scsi0 ${PVE_VOLUME}:vm-${PVE_TMP_VMID}-disk-0
qm set ${PVE_TMP_VMID} --boot c --bootdisk scsi0
qm resize ${PVE_TMP_VMID} scsi0 +$(echo $( echo 20*1024 - $(qemu-img info --output=json ubuntu-2404.img | jq '.["virtual-size"]')/1024/1024 | bc)M)
|
- cloud-init の設定ファイルを入れる CDROM ドライブを作成
- cloud-init ではシリアルコンソールが必要なのでアタッチ
1
2
| qm set ${PVE_TMP_VMID} --ide2 ${PVE_VOLUME}:cloudinit
qm set ${PVE_TMP_VMID} --serial0 socket --vga serial0
|
OS Type
の設定 l26
は WebGUI の Linux 2.6 - 5.X Kernel
と同じ意味QEMU Guset Agent
を有効化にする
1
2
| qm set ${PVE_TMP_VMID} --ostype l26
qm set ${PVE_TMP_VMID} --agent enabled=1,fstrim_cloned_disks=1
|
cloud-init の追加設定。
Username
を設定- Github から公開鍵を取ってきて埋め込む
1
2
3
4
5
| qm set ${PVE_TMP_VMID} --ciuser ${PVE_USERNAME}
cd ~/images
curl -sfSL https://github.com/${PVE_USERNAME}.keys -o ${PVE_USERNAME}.keys
qm set ${PVE_TMP_VMID} --sshkeys ${PVE_USERNAME}.keys
|
テンプレートとして登録。
1
| qm template ${PVE_TMP_VMID}
|
登録された画面で、 Password
, IP Config
を変更しておくと楽が出来ます。
CLI で設定しない理由は、ターミナルに残ることと DHCP にするかは環境によるためです。

利用方法 ¶

VM ID
は 100 番から振られるので各自で変更Nmae
仮想マシン名を入力Mode
は Full Clone
を選択。 Linked Clone
でも良いがテンプレートを更新するのに手間が増えるTarget Storage
を選択

まとめ ¶
これで cloud-init を使った、 VM 作成の省力化できました。宅内で使う場合ほぼ同一設定のため手軽に作って壊してがしやすくて気に入っている。弊宅では同様の方法で AlmaLinux8, RHEL8, Ubuntu-22.04 も取り揃えています。