【娯楽】ESXiにWIn10をたててゲーミングPCとして利用する

背景

昨今の在宅の流れにより家のメインPCが夫婦で取り合いになる状況が多くなってきた。
それを受けて,新しくPCを新調することにした。
せっかくなのでゲームもできるPCにしようと小型ながらもゲームに耐えうるものを自作した。

そしてMHWがセールで安く売っていたので購入。
当然ながら奥様も「私もやる!」となる。しかしもう1台調達する資金は無い。最低限のパーツでもう1台準備するとなると・・・。

ということを考えた結果,ESXiのリソースが余っていたのでこれにGPUを積んでVMにパススルーさせればいけるだろうと思ったのが発端。

要件

  • 新しいPCはコスト的に手配は無理(調達するものは最低限に抑えたい)
  • 今のESXiのリソースを活用して仮想マシンで構築したい
  • ESXiがおいてある部屋とMHWをやる部屋は別なので,リモートアクセスしたい
  • タイムラグが無い操作感

<描いた構想>

<実際にできた構成>

結論から言うと,ESXi上のWin10へリモートアクセスしてやることかなわず, MHWをやるときにはESXiがある部屋に行ってやることになった。
できなかった理由は以下の通り。

  • コストを安く上げようと調達したOSがWinHomeであったためリモートデスクトップアクセスができなかった
  • TeamViewerやAnyDeskなどのリモートアクセスツールを試したが,USBのコントローラが利用できなかった
  • ESXiのリモートコンソールならUSB転送ができたが,反応がひどくて使い物にならない(そもそもグラフィックカード出力じゃないからダメ?)
最初からProを買っておけばもしかしたらいけたのかもしれないけど,買いなおすことは無駄なのでやめた。
ということで,結果的に必要となったものは
品名 参考価格
仮想マシン用OS Windows10 Home 64bit 15k
グラフィックカード 玄人志向 NVIDIA GeForce GTX 1650 15k
USBボード オウルテック USB3.0増設ボード 3k
ディスプレイ EVICIV 12.5インチ モバイルディスプレイ 28k
ゲームコントローラ PS4 コントローラー 2.5k
合計 63.5k

となかなかの出費になった。PS4買えるじゃんとも思ったが,Steam版との共闘ができないのでその線はなかった。

構築

いざ構築。手順は次の通り。

手順

  1. ESXiにグラボを搭載する
  2. 仮想マシン作成
  3. 仮想マシンオプション設定
  4. passthru.mapの編集
  5. OSインストール
  6. ESXi再起動
  7. 仮想マシン起動
<参考にしたサイト>
https://qiita.com/maeda_mikio/items/af538169d57bc89f6ca7
https://www.next-hop.net/~hiraga/VMware/esxi-gpupassthrough.shtml
https://qiita.com/strat/items/f741774d129206002cfc
https://www.vmware.com/content/dam/digitalmarketing/vmware/en/pdf/techpaper/vsp-4-vmdirectpath-host-technical-note.pdf

1. グラボ搭載

物理作業のため省略

2. 仮想マシン作成

Win10 Home64bitなのでWindowsのOSバージョンを選択する。

Windows 64ビットを選択

 Windows10 Homeは1ソケットしか対応していないのでコアは全部1つのソケットへ。

今回は4コアにした

仮想マシンオプションの詳細から「構成パラメータ」を設定する。

 「hypervisor.cpuid.v0」を「FALSE」で設定する。
このオプションにより仮想マシンに仮想CPUであることを隠せるらしい。それにより,OSにパススルーするグラフィックボードの(ドライバの)仮想環境チェックに引っかからず,エラーコード34回避に至る(と理解した)。

/etc/vmware/passthru.map を編集するため,ESX ShellとSSHサービスを有効化する。

3. OSインストール

WindowsのインストーラisoをCDドライブにマウントさせてインストールする。
※ vmware toolsもインストールしておいても良い

4. passthru.mapの編集

/etc/vmware/passthru.mapを以下のように編集する。
最後の行に

## NVIDIA
#10de ffff bridge false #コメントアウト
10de ffff d3d0 default #追記

以下のように個別に指定してもよい。

# Graphic
10de 1f82 d3d0 default #追記
# Audio
10de 10fa d3d0 default #追記

PCIデバイスリセット時の挙動を指定するオプションらしい。正直なところ分からなかったが,とりあえずここを設定しないとちゃんとグラフィックボードが機能しなかった。
ちなみにここで入力するデバイスIDとプロダクトIDは esxcfg-infoコマンドで確認できる。

5. ESXi 再起動

まさかこれが必要だとは思わず,3日くらい躓いていた。

6. PCIデバイスの接続

ESXi再起動後に仮想マシンへPCIデバイス(グラボとUSB)を付ける。

7. 仮想マシン起動

無事にグラフィックボードを認識してくれた。(ここまで本当に長かった・・・)
なお,公式サイトから最新のドライバをDLしてインストールするとまた認識してくれなくなった。

ドライバは自動でインストールされる
ちゃんと認識されている

参考にしたサイトではコンソール画面を無効化したりするなどしていたが,私はマルチディスプレイ設定でGeforceのみに出力する設定とした。

2だけを使う設定にしてコンソールは無効化

しかし問題も・・・

無事にうまくいったと思ったのもつかの間。
暫く放置する等でスリープ状態になったり,仮想マシンを再起動するとまたドライバがCode34エラーに陥ってしまう。こうなると再びVMをシャットダウンして,「VMの編集→PCIデバイスを外す→ESXiを再起動→VMへPCIデバイス取り付け」という手順を踏まなくてはならない。
これがまだ解決できていない。
なので当面はVMは絶対に落とさないという運用をすることになった・・・。

もう1つの問題はリモートの線がなくなったので,わざわざ部屋を移動してモンハンしなくてはならないという点か・・・。

とりあえずはサクサクMHWが動いたのでヨシとした。

無事MHWも起動。コントローラもサクサク動いた

【メモ】EVE-NG on ESXi で外部アクセスを行うときの注意点

PCサーバにESXiをインストールして, その中にEVE-NGのVMをたて, NICを2枚つける。
一方は管理アクセス用, もう一方はEVE-NG内から外部アクセスを行うためのCloudネットワーク。

ここで, OpenStack上に立てていたEVE-NGでは問題なく(Promiscuous設定はOpenStack側でもallowed-address-pairs で設定が必要), ESXiのvswitchのセキュリティ設定で

・無差別モードを許可

だけでなく

・偽装転送を許可

する必要があった。

たしかにvNICの中から多数のMacアドレスが流れ出てくるのだからこれは必要か。

ESXアップデートメモ

UPDATE2にしようしようと忘れていた。

ので,ちゃっちゃとやった。
参考)ESXi 5.x/6.x ホストにコマンド ラインからパッチをインストールする (2092895)
my vmwareからパッチをDL。

ESXへSSHで接続。
チャレンジレスポンスでやらんと認証うまくいかない。

・現状チェック
esxcli system version get
   Product: VMware ESXi
   Version: 6.0.0
   Build: Releasebuild-2494585
   Update: 0
   Patch: 0

・profile確認
# esxcli software profile get
ESXi-6.0.0-2494585-standard
   Name: ESXi-6.0.0-2494585-standard
   Vendor: VMware, Inc.
   Creation Time: 2015-05-13T15:47:49
   Modification Time: 2015-05-13T15:49:08
   Stateless Ready: True

   Description:

・メンテナンスモード移行
vim-cmd hostsvc/maintenance_mode_enter

・パッチ中身確認
# software sources profile list
-d /vmfs/volumes/datastore1/patch/update-from-esxi6.0-6.0_update02.zip
Name                              Vendor        Acceptance Level
——————————–  ————  —————-
ESXi-6.0.0-20160301001s-no-tools  VMware, Inc.  PartnerSupported
ESXi-6.0.0-20160302001-standard   VMware, Inc.  PartnerSupported
ESXi-6.0.0-20160301001s-standard  VMware, Inc.  PartnerSupported
ESXi-6.0.0-20160302001-no-tools   VMware, Inc.  PartnerSupported

・テスト
 esxcli software profile update –dry-run
-d /vmfs/volumes/datastore1/patch/update-from-esxi6.0-6.0_update02.zip
-p ESXi-6.0.0-20160302001-standard

・Go!
 esxcli software profile update
-d /vmfs/volumes/datastore1/patch/update-from-esxi6.0-6.0_update02.zip
-p ESXi-6.0.0-20160302001-standard

Update Result
   Message: The update completed successfully, but the system needs to be rebooted for the changes to be effective.

   Reboot Required: true

・再起動
# reboot

・確認
# esxcli system version get
   Product: VMware ESXi
   Version: 6.0.0
   Build: Releasebuild-3620759
   Update: 2

   Patch: 34
esxcli software profile get
(Updated) ESXi-6.0.0-2494585-standard
   Name: (Updated) ESXi-6.0.0-2494585-standard
   Vendor: esxhome
   Creation Time: 2016-07-01T00:18:32
   Modification Time: 2016-07-01T00:19:18
   Stateless Ready: True
   Description:

・メンテナンスモードExit
vim-cmd hostsvc/maintenance_mode_exit

以上。

【ESX】 6.0.0へUpgrade

とりあえず6.0が出たのでアップグレードした。

たしか6.0からvCenterをまたいでのvMortionができるんだっけ?
そんなんないから関係ないけど。

rufusってツールをつかってUSBブータブルを作っては見たものの我が家のPCではうまく起動せず。
結局DVD-Rにisoを焼いてポータブルDVDで起動した。

アップグレード時, NICがサポートされていないぞとメッセージが出たが, ここのサポートページをみて, まぁなんか行けるんじゃね?って判断して続行しました。

E1000のNICは6.0ではサポートしなくなるそうだが, うちのは今回は無事に動いたようですw
VMも特に問題なく動いたのでアップデートは無事に完了。
vSphere Clientも6.0にして完了!

にしても次のアップデートが怖いわ。NIC買い換えるのもアレだしなぁ。

インフラの勉強にあたり

さて,インフラエンジニアとして今後もやっていくべく改めてスキルアップを図ろうと昨日から準備を始めたわけだが思いの外時間がかかっている。

やったこと

古いPCを持ちだして再セットアップ。
余っているDiskを増設してESXをインストール。
ここでまず躓く。
ESXの条件は
・64ビットCPU
・2G以上のRAM
・NICが1個必要
などなど,ググれば詳細が出てくるんだが,NICが鬼門だった。
引っ張り出してきたマザーボードはASUSのP5KPL-AM EPUなんだが,このオンボードNICがAtheros製らしい。ESXは基本的にIntel以外のNICは標準では認識せず,インストール時に「おまえ,NIC無いからやり直しな」って弾かれる。
Realtekなら有志達がカスタムOSやらドライバを作っていたりしたんだが,Atheros L1Eってのがどうしても見つからなかった。
やむなくアマゾンにてIntel製の安いPCI NICを調達した。

かったのはこれ

で,本日ようやくインストールまで終え,次はVMにCentOSを入れて色々試す土台を作るところに来ている。

簡単に環境を書くとこんな感じ。
うちはL3SWが1台あるのでこれで外-DMZ-LANと分けている。

設計としてはESXのManagementポートはLANのセグメント。VMは外に公開できるようにDMZのセグメントを割り当てるようにしたい。

つーことで,NIC1枚しか持っていない我がマシンはL3との接続をTrunkにしてやる必要がある。

各セグメントでは適宜ACLを設定する

SW側のインタフェースはTrunk。カプセル方式はdot1qじゃないとだめ。
ESX側はManagement用のNWにVLANを指定してやればOK。
特にここは迷わない。

これは至ってシンプル
できればNICは分けたかったけど予算的に無理

さて,あとはCentOS7入れてOwnCloudとか入れて遊んでみるか。

あ,そもそも勉強するぞ!と心に決めたRubyの環境も入れな・・・。