どうも、Tです。
vSphere環境でUbuntu Server 22.04のテンプレート用仮想マシンを作っており、難儀したので忘れないように備忘録です。
これっ!という確実な設定はありませんので、本番環境作るときの参考情報程度にみてください。
カスタマイズスクリプトについては、記事にしていますのでご参考ください。
環境
今回検証した環境です。
vSphere環境
- VMware vCenter Server:8.0.1.00000(21560480)
- VMware vSphere ESXi:8.0.1, 21495797
RHEL環境(テンプレート仮想マシン)
- Ubuntu Server 22.04.2 LTS
- open-vm-tools:12.1.5.39265 (build-20735119)
Ubuntuはほぼデフォルトでインストールしており、SSH許可を行っています。
やりたいこと
概要
本手順では、テンプレートとして用したRHEL9の仮想マシンを仮想マシンのカスタマイズ仕様を使って簡単にクローンを作成しようという思いからはじまりました。
カスタマイズ仕様の設定は後ほど記載します。
内容
実施内容 | 実施タイミング | 実施方法 |
自動アップデート無効化 | テンプレート作成時 | 手動 |
hostsファイルの確認 | テンプレート作成時 | 手動 |
マシンID削除 | クローン時 | カスタマイズ仕様で自動的に処理 |
SSHキー削除 | クローン時(Pre処理) | カスタマイズ仕様のスクリプト |
netplan(yamlファイル)削除 | クローン時(Pre処理) | カスタマイズ仕様のスクリプト |
SSHキー再作成 | クローン時(Post処理) | カスタマイズ仕様のスクリプト |
netplan(yamlファイル)修正・適用 | クローン時(Post処理) | カスタマイズ仕様のスクリプト |
テンプレート仮想マシンを作成する(およびクローンするとき)に必要な項目をまとめました。
カスタマイズスクリプトが使えるようにしておく必要があります。
テンプレート仮想マシンの手動設定
自動アップデート無効化
自動アップデートを無効化します。「20auto-upgrades」ファイルを開きます。
$ sudo vi /etc/apt/apt.conf.d/20auto-upgrades
それぞれの数字を1(有効)から0(無効)に変更します。
APT::Periodic::Update-Package-Lists "0"; APT::Periodic::Unattended-Upgrade "0";
項目 | 意味 |
Update-Package-Lists | パッケージ自動アップデート |
Unattended-Upgrade | パッケージ自動アップグレード |
hostsファイルの確認
hostsファイルに不要な登録を削除しておきます。(下記参照)
$ cat /etc/hosts 127.0.0.1 localhost # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters
仮想マシンのカスタマイズ仕様
カスタマイズ仕様の内容
検証に使用したカスタマイズ仕様設定を記載しておきます。
以後は、主にカスタマイズスクリプトについての説明になります。
#!/bin/bash if [ x$1 == x"precustomization" ]; then echo Do Precustomization tasks rm -rf /etc/ssh/ssh_host_* rm -rf /etc/netplan/* elif [ x$1 == x"postcustomization" ]; then echo Do Postcustomization tasks dpkg-reconfigure openssh-server fi
VMware社のサンプルコードでは、シェルの指定が「#!/bin/sh」になっていますが、Ubuntuの場合は、「#!/bin/bash」を必ず指定してあげましょう。
Ubuntuの/bin/shはdashへのシンボリックリンクになっており、「#!/bin/sh」ではスクリプト実行時にエラーになり動作しません。
$ ls -lh /bin/sh lrwxrwxrwx 1 root root 4 Mar 23 2022 /bin/sh -> dash
マシンID削除
いきなりカスタマイズスクリプトではない説明になります。
永続的に変更されてない、一意に識別するためのmachine-idが生成されています。※後半はxで置き換えています。
$ cat /etc/machine-id 79326a6aff064fdcbxxxxxxxxxxxxx
テンプレート仮想マシンでは以下のようにIDが状態にしておくのですが、machine-idはない場合に起動時に自動生成されます。
# echo "uninitialized" > /etc/machine-id
いれるとしたらカスタマイズスクリプトのpre処理のタイミングですが、vSphereのカスタマイズ仕様を使用する場合、machine-idを自動生成してくれているので明示的な処理は不要です。考慮点として覚えておく必要があるため備忘録として記載しました。
【pre処理】SSHキー削除
カスタムスクリプトの下記の部分になります。
rm -rf /etc/ssh/ssh_host_*
SSHで使用される秘密鍵と公開鍵をすべて削除しています。
Ubuntuの場合は、秘密鍵と公開鍵は存在しない場合も自動的に作成されてないため、ポストスクリプトで再生成を行います。
【pre処理】netplan(yamlファイル)削除
カスタムスクリプトの下記の部分になります。
rm -rf /etc/netplan/*
デフォルトで「01-network-manager-all.yaml」ファイルが存在しています。このままカスタマイズ仕様を使うと元ファイルとバックアップファイルを作成したうえで、カスタマイズ仕様でさらに別ファイルが作成されます。不要なファイルを残さないために削除しておきます。
【post処理】SSHキー再作成
カスタムスクリプトの下記の部分になります。
dpkg-reconfigure openssh-server
プレスクリプトで削除したSSHで使用する秘密鍵、公開鍵を再作成します。
クローン後の確認
あとは、テンプレートからクローンする際に「ゲストOSのカスタマイズ」で作成した仕様を指定すればクローンが行えます。
カスタマイズした部分がかわっているか確認しておきましょう。
まとめ
Ubuntu Server版は、Desktopとは違いNetwork Managerがデフォルトでインストールされません。今回は、Network Managerがない状態からのシンプルな構成で試してみました。
お作法がどれになるかはさておき、NetworkManagerない状態で使っていってみようかな。