【vSphere】仮想マシンのカスタマイズスクリプトをRHEL9で使ってみた

どうも、Tです。

以前、「【vSphere】仮想マシンクローンのカスタマイズがうまく動かないときに確認した方がよいこと」という記事を書いていました。

【vSphere】仮想マシンクローンのカスタマイズがうまく動かないときに確認した方がよいこと
どうも、Tです。 仮想マシンのクローンしていますか?仮想マシンのカスタマイズ仕様使っていますか? vSphere...

今回、RHEL9でこのカスタマイズを実現する「仮想マシンのカスタマイズ仕様」の中にある「カスタマイズスクリプト」を使おうとして少しはまったので次は忘れぬように備忘録です。

スポンサーリンク
アドセンス1

やりたいこと

カスタマイズスクリプトを使うために必要な設定やカスタマイズスクリプトの仕様について確認した部分をまとめます。VMware社の下記ドキュメントをベースにして適時補足していきます。本記事のこの後の文章で、引用元を明記していない場合は、下記のドキュメントから引用しています。

Windows および Linux でのカスタマイズ仕様の作成と管理
Windows と Linux ゲスト OS のカスタマイズ仕様を作成および管理できます。カスタマイズ仕様は、仮想マシンのゲスト OS の設定が含まれている XML ファイルです。

vSphere Clientの画面だと下記のカスタマイズスクリプトの部分になります。

カスタマイズ仕様の細かい使い方や手順は割愛しています。

環境

下記の環境での確認を説明していきます。

vSphere環境

  • VMware vCenter Server:8.0.1.00000(21560480)
  • VMware vSphere ESXi:8.0.1, 21495797

RHEL環境(テンプレート仮想マシン)

  • Red Hat Enterprise Linux release 9.2 (Plow)
  • open-vm-tools:12.1.5.39265 (build-20735119)

カスタマイズスクリプトを使うために必要なこと

VMware Toolsのバージョン

ドキュメントは「VMware Tools バージョン 10.1.0 以降がインストールされていること」と説明されています。

Linuxの場合は、open-vm-toolsがほとんどだと思うので調べたところKB74880がありました。ここから少し情報をたどりましたが、カスタマイズスクリプトに必要なopen-vm-toolsの明確なバージョンにはたどり着けませんでした・・・・。

Setting the customization script for virtual machines in vSphere 7.x and 8.x

Ensure that VMware Tools version 10.1.0 or later is installed.
Please note that the Linux version of VMware Tools is “open-vm-tools”, which is separate from the Windows version. Please see https://docs.vmware.com/en/VMware-Tools/12.2.0/com.vmware.vsphere.vmwaretools.doc/GUID-8B6EA5B7-453B-48AA-92E5-DB7F061341D1.html

ここからは検証していないため憶測になりますが、KB2075048がありopen-vm-tools version 9.10.0以降であれば動きそうにも読み取れます。また、open-vm-tools 9.4.x でも下記プラグインを追加することで動きそうに見受けられます。

Installing the deployPkg plug-in in a Linux virtual machine with open- vm-tools version lower than 9.10

ここまで古いバージョンも過去の遺産以外ではないでしょうかご参考までに。

perlのインストール

そもそもの「仮想マシンのカスタマイズ仕様」を使用したカスタマイズのためにperlが必要です。下記のコマンドなどでperlをインストールしておきましょう。

# dnf install perl

enable-custom-scriptsの有効化

カスタマイズスクリプトを使用するためのenable-custom-scriptsオプションが無効になっています。有効にしておきましょう。

有効にして設定値がtrueになっていることを確認します。

# vmware-toolbox-cmd config set deployPkg enable-custom-scripts true
# vmware-toolbox-cmd config get deployPkg enable-custom-scripts
[deployPkg] enable-custom-scripts = true

上記のコマンドを実行することにより、下記のディレクトリにtools.confファイルを作成して設定値を書き込んでくれています。

# cd /etc/vmware-tools/
# cat tools.conf
[deployPkg]
enable-custom-scripts=true

カスタマイズスクリプトの作成

カスタマイズスクリプトを作成しカスタマイズ仕様の設定に貼り付けます。

#!/bin/sh
if [ x$1 == x"precustomization" ]; then
# ここからがカスタマイズ前に実行されるスクリプト
echo Do Precustomization tasks
touch /tmp/Pre-test.txt
elif [ x$1 == x"postcustomization" ]; then
# ここからがカスタマイズ後に実行されるスクリプト
echo Do Postcustomization tasks
touch /tmp/Post-test.txt
fi

テストのために、プリスクリプトとポストスクリプトそれぞれに標準出力するechoコマンドとファイルを作成するtouchコマンドを記載しています。

echoコマンドは入れておいたほうがいいかと思います。後述する部分にも関与しますが、何も処理が入っていないとカスタマイズスクリプトがエラーになりますので、echoのように動作影響のないものは有用かと考えています。

実行したときの結果

先ほどのカスタマイズスクリプトの結果を見てみます。

echoコマンドは、/tmp/stdout.logに出力されていきます。スクリプトで書いておいたほうがいいといったのは、このechoによりプリスクリプト・ポストスクリプトどちらまで実行されているのか判別しやすいこともあります。

# cat /tmp/stdout.log
Do Postcustomization tasks

touchコマンドも指定の場所にファイルが作成されていました。ファイルタイムスタンプからもPreが実行されたあとにPostが実行されたことがわかります。

# ls -lh /tmp/*txt
-rw-r--r--. 1 root root 0 7月 8 17:52 /tmp/Post-test.txt
-rw-r--r--. 1 root root 0 7月 8 17:51 /tmp/Pre-test.txt

覚えておくべき仕様

実行タイミング

プリスクリプトは、カスタマイズ仕様のカスタマイズが始まる前にに実行されます。プリスクリプト実行中はネットワークに繋がっていないことに注意が必要です。

“precustomization” コマンドライン パラメータを含むカスタマイズ スクリプトを追加すると、ゲストのカスタマイズが開始される前にスクリプトが呼び出されます。その結果、仮想 NIC が切断され、ネットワークにアクセスできなくなります。

ポストスクリプトはカスタマイズ仕様によるカスタマイズが終了した後に実行されます。そのため、ネットワークにもつながている状態です。

“postcustomization” コマンドライン パラメータを含むカスタマイズ スクリプトを追加すると、ゲストのカスタマイズが終了した後にスクリプトが呼び出されます。その結果、仮想マシンがパワーオンし、NIC が接続され、ネットワークにアクセスできるようになった後の初期化プロセス内でスクリプトがスケジューリングされます。スクリプトの実行時間はデフォルトのタイムアウト期間に含まれず、ゲストのカスタマイズに失敗することはありません。

タイムアウト値

カスタマイズのタイムアウト期間は100秒です。この期間は、プリスクリプト+カスタマイズ仕様のカスタマイズの合計であり、ポストスクリプトの時間は含まれていません。

デフォルトとあるので変更できるのかと探してみましたが、変更のパラメーターは見つかりませんでした。

ゲストのカスタマイズが完了するまでのデフォルトのタイムアウト期間は 100 秒に設定されています。このタイムアウト期間には、precustomization” コマンドライン パラメータを使用するときのスクリプトの実行時間が含まれます。スクリプトの実行時間がタイムアウトを超える場合は、ゲストのカスタマイズが失敗します。

文字数制限

カスタマイズスクリプトは1500文字となっています。

カスタマイズ スクリプトは 1,500 文字以下にしてください。

しかし、KB74880では、下記のように記載されているためvSphere8.x以降であれば65536文字まで可能なようです。

Setting the customization script for virtual machines in vSphere 7.x and 8.x

1. The length of customization script cannot be greater than 1500 characters in vSphere 7.x, this length
limitation has been increased to 65536 characters in vSphere 8.x.

カスタマイズスクリプトが動かないときの確認点

カスタマイズスクリプトが動かないときに確認したほうが良いログなどです。

カスタマイズのログの確認

# ls -lh /var/log/vmware-imc/
合計 40K
-rw-r--r--. 1 root root 599 7月 8 17:52 customization.log
-rw-------. 1 root root 36K 7月 8 17:51 toolsDeployPkg.log

カスタマイズ仕様の処理のログは、「/var/log/vmware-imc/」に出力されます。

ドキュメントなどに明記はされていませんが、問題がある場合toolsDeployPkg.logにエラーログ記載されます。また正常時のログも出力されるので、大まかな流れを掴むのに役立ちます。

カスタマイズスクリプトの確認

# cat /root/.customization/customize.sh
#!/bin/sh
if [ x$1 == x"precustomization" ]; then
# ここからがカスタマイズ前に実行されるスクリプト
echo Do Precustomization tasks
touch /tmp/Pre-test.txt
elif [ x$1 == x"postcustomization" ]; then
# ここからがカスタマイズ後に実行されるスクリプト
echo Do Postcustomization tasks
touch /tmp/Post-test.txt

実行に使われたカスタマイズスクリプトは、「/root/.customization/customize.sh」ファイルとなっています。

エラーが発生した場合は、ここを見たり部分的に実行したりで再現性を確認できます。

まとめ

自動化を考えたら、クローン後のAnsibleなどのほかツールから実行するのがいいのでしょうが、簡単な変更であればカスタマイズスクリプトも便利そうです。

スポンサーリンク
アドセンス1
アドセンス1
ブログランキング・にほんブログ村へ

シェアする

フォローする