VMware Player in docker container on NixOS

読了まで:約3分


という組み合わせで、

VMware Workstation Player を NixOS で動作させる

というコトに成功したので、今日はその話を書きます。

証拠(Screenshot)

VMware Player in docker container on NixOS

参考にして欲しいファイル類(configuration.nix)

そもそも何故 VMware Player は NixOS での動作が困難なのか

具体的には、下記の理由に拠ります:

  1. VMware Player のインストーラーが NixOS の様な Linux Distro を想定していない
  2. そのため、通常の方法ではインストールすることすら出来ない
  3. そして、仮にインストーラーをなんとかしても、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 で折り合いが付かない部分をなんとかしてみよう!

と思いついたので、実際に今回の作業でやってみたら出来た、と言う感じです。はい。

以上

まぁ、細かい設定ファイルなどについては、

辺りを参照してください。

また上記設定ファイルは自分用に設定してあるので、 各自応用する際にその辺りの調整は必要になるだろう、と思います。はい。

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。
次に備えて待機中。

今は趣味でプログラミングをして
生活しています。