Proxmox VE 8.1 Install Battle - VMテンプレート作成編(5/N)

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.listjp.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 にするかは環境によるためです。

作成されたテンプレート

利用方法

テンプレートを選択して右クリック、「Clone」を選択

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

Clone 作成

まとめ

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

Built with Hugo
テーマ StackJimmy によって設計されています。