VMware Player in docker container on NixOS
読了まで:約3分
という組み合わせで、
VMware Workstation Player を NixOS で動作させる
というコトに成功したので、今日はその話を書きます。
証拠(Screenshot)
参考にして欲しいファイル類(configuration.nix)
そもそも何故 VMware Player は NixOS での動作が困難なのか
具体的には、下記の理由に拠ります:
- VMware Player のインストーラーが NixOS の様な Linux Distro を想定していない
- そのため、通常の方法ではインストールすることすら出来ない
- そして、仮にインストーラーをなんとかしても、NixOS の流儀では suid 周りで詰る
まぁ簡素に書くとこういう事なんですが、もう少し具体的に書くと:
- NixOS はシステムディレクトリが Read-only で Writable ではない
- システムディレクトリが Writable な事を想定しているソフトウェアは動作不可
- VMware Workstation(Player)辺りのインストーラーはまずここに引っ掛かる
- 次に、NixOS の特性故に、VMware インストーラーの正常動作が相当に困難(だった)
- NixOS のシステムディレクトリ構造は、通常の Linux と大分異なっている
- そのため、主に実行ファイルのパスも要因でインストール作業が出来なかった
- 最後に、
vmware-vmx
は suid が付いた root executable permission を要求する- が、NixOS だとその辺りも色々独特なので、これも動作出来ない要因の 1 つ
- まぁ色々試したんだけど、これをどうにかは NixOS では出来なかった
という感じです。つらい。
ではどうやって NixOS で VMware Player を動作させたか
これはシンプルにこうしました:
- NixOS 側では VMware の host kernel modules のみインストール させる
- 次に NixOS で docker を有効にして、VMware Workstation Player 用のコンテナを作る
- 最後に、VMware Player のコンテナに特権とデバイスファイルを渡して起動 する
基本、VMware Workstation Player がホスト側に要求する仕様としては、
- VMware 用の Linux Host Kernel Module が正常に動作していること
vmware-vmx
が suid root で起動できることvmware-vmx
も含め、VMware のソフトウェアがデバイスファイルを触れること
の 3 要素だけっぽかったので、VMware の Linux host kernel module は NixOS に組み込み、 他を docker の ubuntu:18.04
コンテナに任せることで NixOS 特有の制限を回避するという方法でなんとかしました。
実際にやってみた感想
そもそも、なんで VMware Player を NixOS で動作させようかと思ったかと言うと、
VirtualBox にしろ KVM で dGPU Passthrough にしろ、VM の 3D Acceleration がつらい
というのがあり、Windows 10 Pro を VM で使い込むにはちょっと力不足だった、というのが有ります。 そのため、VMware が使えないと Windows 10 Pro が使いモノにならない、という状況がありました。
また、私は過去に何度か VMware Workstation Player を NixOS で動作させようとしては失敗しており、 何回目かの失敗の時、
そうだ! docker container を使って NixOS で折り合いが付かない部分をなんとかしてみよう!
と思いついたので、実際に今回の作業でやってみたら出来た、と言う感じです。はい。
以上
まぁ、細かい設定ファイルなどについては、
辺りを参照してください。
また上記設定ファイルは自分用に設定してあるので、 各自応用する際にその辺りの調整は必要になるだろう、と思います。はい。