【メモ】ESXi 7.0 の Kickstart の %post で boot.cfg を触る

Share on:

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 セクションの利用で十分じゃないかと思います。