【メモ】ESXi 7.0 の Kickstart の %post で boot.cfg を触る
Table of contents
はじめに
以前の Nested ESXi の記事や KB2149444 等でも言及されていますが、ESXi のブートオプションは /bootbank/boot.cfg の kernelopt 行に記載されます。
ESXi は キックスタートファイルを使用した自動インストールが可能なので、%post や %firstboot のセクションで編集できないかと思い、各セクションで以下のような sed コマンドを実行して試してみました。
1sed -i "s/kernelopt=.*/kernelopt=autoPartition=FALSE allowLegacyCPU=true/" /bootbank/boot.cfg
今回の環境は ESXi 7.0 Update 2 です。
結果
%firstboot セクションでは sed により boot.cfg の内容が置換されました。しかし、%post セクションでは sed の実行がエラーになり置換されませんでした。
原因
sed コマンドがエラーになっていることから /bootbank の状態が気になるので、ks.cfg 内で以下のコマンドを実行して %post の時の状態を覗いてみました。
1%post --interpreter=busybox
2ls -laR / > /vmfs/volumes/datastore1/_ks_post_ls_-laR.txt
結果としては、%post 時点では /bootbank のリンク先が /tmp になっていました。また、/tmp には boot.cfg が存在していなかったので、/bootbank/boot.cfg が無いために sed がエラーになっていることが分かりました。
1/:
2total 885
3drwxr-xr-x 1 root root 512 Aug 6 14:54 .
4drwxr-xr-x 1 root root 512 Aug 6 14:54 ..
5-r--r--r-- 1 root root 20 Feb 17 23:19 .mtoolsrc
6drwxr-xr-x 1 root root 512 Aug 6 14:51 bin
7lrwxrwxrwx 1 root root 4 Aug 6 14:54 bootbank -> /tmp
8
9/tmp:
10total 204
11drwxrwxrwt 1 root root 512 Aug 6 14:57 .
12drwxr-xr-x 1 root root 512 Aug 6 14:54 ..
13drwx------ 1 root root 512 Aug 6 14:52 _bootbank4uex0li5
14-rwx------ 1 root root 51 Aug 6 14:57 ks-script
15drwxr-xr-x 1 root root 512 Aug 6 14:57 onetime
16-rw-r--r-- 1 root root 175616 Aug 6 14:57 onetime.tar
17drwxr-xr-x 1 root root 512 Aug 6 14:54 scratch
18drwx------ 1 root root 512 Aug 6 14:51 vmware-root
19drwx------ 1 root root 512 Aug 6 14:52 vmware-root_67638-4085508114
対処
%post 時点でも /vmfs/volumes/BOOTBANK1 と /vmfs/volumes/BOOTBANK2 は各 Bootbank にシンボリックリンクが張られていたので、それらのパスを指定すれば問題なさそうでした。
1/vmfs/volumes:
2total 2564
3 (略)
4lrwxr-xr-x 1 root root 35 Aug 6 14:57 BOOTBANK1 -> 942316fe-674efb8b-d7b0-301624c483db
5lrwxr-xr-x 1 root root 35 Aug 6 14:57 BOOTBANK2 -> 20e8e950-984ae7c3-a2bb-a996b5042d09
6
7/vmfs/volumes/942316fe-674efb8b-d7b0-301624c483db:
8total 200447
9drwxr-xr-x 1 root root 8 Jan 1 1970 .
10drwxr-xr-x 1 root root 512 Aug 6 14:57 ..
11-rwx------ 1 root root 249930 Aug 6 14:56 atlantic.v00
12-rwx------ 1 root root 142168 Aug 6 14:54 b.b00
13-rwx------ 1 root root 1896323 Aug 6 14:57 basemisc.tgz
14-rwx------ 1 root root 261369 Aug 6 14:56 bnxtnet.v00
15-rwx------ 1 root root 113370 Aug 6 14:56 bnxtroce.v00
16-rwx------ 1 root root 1583 Aug 6 14:57 boot.cfg
ということで %post セクションを以下のようにして、まとめて sed で置換しました。
1%post --interpreter=busybox
2sed -i "s/kernelopt=.*/kernelopt=autoPartition=FALSE allowLegacyCPU=true/" /vmfs/volumes/BOOTBANK*/boot.cfg
おわりに
今回は ESXi のインストール時に boot.cfg のブートオプションを編集するという普通はやらない作業のため手間取りました。
%post セクションでも単純なコマンドの実行であれば問題なく動くと思いますが、必要に駆られなければ ESXi の再起動後の %firstboot セクションの利用で十分じゃないかと思います。