古いサーバでNestedESXi8+TPM2.0の仮想マシンを作る話

ESXi8とTPM2.0をTPM未対応のIvy鯖で使う話

ESXi8は古いCPUを大幅にリストラ


ESXi7の頃から警告だけで、SandyBridge世代のCPUでもインストールできていましたが、
ESXi8からついに標準ではインストールできなくなってしまいました。
回避方法を色々調べたので、備忘録程度に残しておきます。
ついでにTPM交換時のオペレーションも知りたかったので有効にしてみます。

仮想TPMの有効化

まずは動作させるvCenter上でTPM2.0を仮想的に作成します。
vCenterには「ネイティブキープロバイダ」という機能があり、
下記条件を満たせば、仮想マシンに仮想TPM2.0を搭載することが可能です。

  • vCenter 7.0U2以降
  • ESXiのライセンスが「vSphere Enterprise Plus」

他にもPyKMIPを使って外部KMSを構築する方法もあるらしいですが今回は触れません。
(VMUGでESXiのライセンス貰ってたらEnterprise Plusのはず)
VMware解説だとなんかややこしそうに書いてますが、結局のところ仮想TPMが作成できるよってだけです。

手順

  1. インベントリ リストを参照し、vCenter Server インスタンスを選択します。
  2. [構成] をクリックし、[セキュリティ] の [キー プロバイダ] をクリックします。
  3. [追加] をクリックしてから、[ネイティブ キー プロバイダの追加] をクリックします。
  4. vSphere Native Key Provider の名前を入力します。
  5. [TPM で保護された ESXi ホストでのみキー プロバイダを使用する] はオフにします。

これでTPMの搭載されていないサーバでもTPM2.0の仮想マシンを作る準備ができました。

仮想マシン作成

今回はNestedで構築しますが、ベアメタルでもそこまで差異はないと思います。
とりあえずvCenterで下記のような仮想マシンを1台作成します。
変更した箇所だけ記載しています。

  • 互換対象:ESXi 7.0 U2以降
  • ゲストOSファミリ:その他
  • ゲストOSのバージョン:VMware ESXi7.0以降
  • CPU:1CPU 8コア
  • ハードウェアアシストによる仮想化をゲストOSに公開
  • I/O MMU:有効
  • メモリ:12GB
  • ハードディスク1: 256GB シンプロ
  • CD/DVDドライブ:ESXi8 iOSを指定
  • セキュアブート:無効化 ※気分

スペックにかかわる箇所は変更しても大丈夫のはずです。

TPM作成


ここで問題になるのが、「ゲストOS」をESXiで指定して作成すると仮想マシンに
TPMの追加ができません
おそらく「NestedESXiでわざわざTPMいれんやろ」という判断とは思いますが、
こちとらシステムボード交換でTPM交換するんじゃ手順書作らせろボケェィ
強制的に有効化できるのでやっていきます。

1.PowerCLIインストール

まずはPowerCLIをインストールします。
PowerCLI上でコマンド一つ叩くだけです。

Install-Module VMware.PowerCLI -Scope CurrentUser

何かと便利なツールなのでこれを機会にインストールしておきましょう。
しばらく変化がありませんが、インストールは進んでいるので気長に待ちます。

2.vCenterへの接続


下記コマンドでvCenterへ接続します。

Connect-VIServer -Server <vCenterのアドレス> -User Administrator@vsphere.local -Password <パスワード> -force

3.仮想マシンへのTPM追加

Get-VM "<仮想マシン名>" | New-VTpm

上記コマンドで対象の仮想マシンにTPMを追加します。

同時にvCenter上で設定変更が走ったメッセージが出力されます。

vCenter上で仮想マシンを確認するとTPMが追加されています!!

これで仮想マシンの作成は完了です。ヨシッ!

インストールと初期設定

仮想マシンを起動していきますが、このままでは未対応CPUとしてエラーになってしまうので工夫していくことにします。
OS起動と同時にWEBコンソールもしくはREMOTE CONSOLEを表示します。
表示されたらすぐさま「Shift+O」 失敗したら再起動でOKです。

runweasel cdromBoot allowLegacyCPU=true

赤字の「allowLegacyCPU=true」を追記します。

runweasel cdromBootは残しておきます

入力を終えたらそのままEnterで起動するとインストーラが始まるのでそのままインストールしていきます。
再起動すると、Shift+Oで入力した箇所は消えてしまうため、再度入力します。

allowLegacyCPU=trueを恒久化

Shift+Oで入力する箇所は再起動のたびに消えてしまうのでこれを恒久化していきます。
通常通り起動したあと、その仮想マシンにSSHアクセスできるよう設定します。

ESXiにCLIでログイン後、下記ファイルを開いて編集
/bootbank/boot.cfg
/altbootbank/boot.cfg
両方ともの「kernelopt」allowLegacyCPU=trueを追記

編集したら再起動。そのまま起動してきます。

完了!


あとはvCenterクラスタに組み込もうが何しようがOKです。
(適切なライセンスは忘れずに)
ESXi8になりましたが、基本的な機能なデザイン面以外変わっていないように見えます。
というか、ESXi7 U2→U3が変わりすぎです..。