まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

先日、このようなブログエントリを紹介しました:
VirtualBox の仮想マシン内で仮想マシンを使う2025020500


紹介した内容そのものは「VirtualBox のネステッド VT-x を有効化する」というものでした。

VirtualBox のゲスト OS として KVM を使う場合はこの設定だけでもいけそうだったのですが、ESXi を使おうとすると更にややこしいというか、実現難易度が少し高い気がしています。普通に ESXi を導入することもできない(途中で止まる)し、導入は最後まで進んでも起動すると、(悪名高い)PSOD( Purple Screen Of Death 下図参照) の画面になって止まってしまったり・・・
2025020806


この問題は結構メジャーなようで、現象をヒントにググると ESXi 起動時のオプション指定をすると回避できるとか、CPU が新しすぎたり古すぎたりすると NG とか・・・必ずしも自分の環境では解決に結びつかなかった情報もいくつか見つかりました。

正直な所、環境依存の問題もあると思っています(以下で紹介する方法も、インストールできる環境とできない環境に分かれます)。ただ少なくとも成功した実績のある方法、の紹介という意味で説明します。


【動作実績のある VirtualBox 内 ESXi 環境構築手順】
一言で簡単に言うと「古い Linux 環境を用意する」ことで自分の VirtualBox では ESXi を導入できました。例えば OS の種類は適当に選ぶのではなく「Linux 2.6/3.x/4.x/5.x」を選ぶ必要がありました:
2025020801


またメモリは 4GB 以上にする必要があります(これ以下だとエラーメッセージが出て止まります)。またチップセットは「ICH0」、ポインティングデバイスは「PS/2 マウス」を指定しました:
2025020802


最後に前回のブログエントリでも紹介した「ネステッド VT-x の有効化」も実施します:
2025020803


ここまで行った上で ESXi のインストール iso を DVD ドライブにセットして起動すると無事にインストールできました(上述の起動時オプション指定も不要でした)。なお ESXi のバージョンですが、7.x ではインストールできず、6.x ではインストールできました。5.x でもインストールできましたが、5.x は TLS 1.2 までしか使えず、今どきのブラウザは TLS 1.2 がサポート外のものが大半なので(インストールできてもブラウザから利用できないので)、実質的に 6.x だけの導入実績です(7 より上のバージョンは試していません):
2025020804


2025020805


個人利用目的で VMWare や ESXi を使うことはもうないと思ってますが、仕事ではお客様の環境でまだ多く使われているようで、仮想的に ESXi の動作確認環境が用意できるとなにかと便利なのでした。6.x 限定になっちゃうけど、この構築手順がどこかで誰かの役に立てばうれしいです。

 

今回紹介する VirtualBox の設定は「仮想マシン内で仮想マシンを使う」設定です。例えばゲスト OS を CentOS にして、そのゲスト OS 内に KVM などの仮想化基盤を導入するとか、あるいはゲスト VM として ESXi を使いたいといった、ゲスト OS 内で別の VM を動かす、といった用途で使う場合の設定です:
2025020500



といっても、そこまでややこしい設定ではありません。該当の VM 内でネステッド VT-x と呼ばれる機能を有効化することで実現できます。VirtualBox の場合は設定の システム - プロセッサー タブ内に「ネステッド VT-x/AMD-V を有効化」というラジオボタンがあります:
2025020501


ここにチェックを入れて有効化することでネステッド VT-x が有効になり、ゲスト OS 内の仮想化基盤で VM を動かすことが可能になります:
2025020502


少しややこしいのが、このネステッド VT-x の設定は上図のように手動で変更できる場合はいいのですが、稀に下図のようにグレイアウトされていて(GUI からは)変更できないことがある、ということです:
2025020503


その場合は CUI(Windows であればコマンドプロンプト)から VBoxManage.exe を使い、以下のように実行してネステッド VT-x を有効化してください。なお VBoxManage.exe は VirtualBox をインストールしたディレクトリ(Windows のデフォルトであれば "C:\Program Files\Oracle\VirtualBox")内に存在しています。必要に応じてフォルダを移動してから実行するか、パスを通してから実行してください:
> VBoxManage modifyvm '(VM名)' --nested-hw-virt on

これで VirtualBox の VM 内で別の VM を起動させることも可能になりました:
2025020504

2025020500



VirtualBox で作成したゲスト OS は VirtualBox のインターフェースを通して GUI 画面を直接操作することができます。ゲスト OS が Windows などである場合は、まあ GUI で操作するのが普通というか一般的なので、この操作方法に違和感を感じることはあまりないと思っています。

一方、ゲスト OS が Linux 系の OS だったりすると、GUI のデスクトップで操作できたとしても実際にはサーバー機能でしか使わないことがあったりするなど、事実上 CUI でしか操作しない、というケースも珍しくないはずです。仮にデスクトップ機能が導入された Linux を CUI で操作しようとすると、デスクトップにログインして、ターミナルを開き、その小さな画面のターミナルの中で CUI 操作することになります。いちいちデスクトップ GUI を経由するのが面倒だし、環境によってはネットワーク遅延の影響を受けることもあるんですよね。。

というわけで、私は多くのケースでホスト OS からゲスト OS に ssh 接続して使っています。操作するアプリがホスト側にあるのでネットワーク遅延もほぼ気にならないし、例えば teraterm を使ってアクセスすれば teraterm 側の便利な機能(マクロとか、操作記録ログとか)も使えて便利です。このようにホスト OS からゲスト OS に ssh 接続するためのゲスト OS の設定方法を紹介します:
2025020301



【VirtualBox のホストオンリーアダプターを使う】
VirtualBox でホスト OS からゲスト OS に ssh 接続するには、ゲスト OS 側に「ホストオンリーアダプター」が用意されている必要があります。

SSH 接続したい VM を選び、設定のネットワークからアダプターのタブを見て、まだ有効化されていないアダプターを見つけます:
2025020203


使っていなかったアダプター(図ではアダプター3)を有効化して、割り当ての種類を「ホストオンリーアダプター」に設定します。この状態でゲスト OS を起動します:
2025020204


この状態で VM を起動し、OS 側でもこのアダプターを有効にします。仮にこのアダプターが eth1 だった場合はこのような感じ:
# nmcli con add ifname eth1 con-name eth1 type ethernet

# nmcli con mod eth1 connection.autoconnect yes

# nmcli con mod eth1 ipv4.addresses 192.168.56.100/24

# nmcli con up eth1

これでホスト PC の teraterm(SSH クライアント)から 192.168.56.100 に対して ssh 接続できるようになります。使い慣れた ssh クライアントで操作できるようになって便利で、基本的な作業は VirtualBox を経由することなく、実施できるようになりました。これに慣れちゃうと、もう元の環境には戻れないです:
2025020301





このページのトップヘ