もりねずみーのやつ

インターネット上でしか生きられません

ArchLinuxとVMwareで東方する環境を作る

ArchLinuxとVMwareで東方する環境を作る

MacbookAirはまぁいいとして、OSXに疲れてきたので、 そろそろArchLinuxをメインに使っていこうと思います。

環境

MacbookAir 11インチ(Late 2011) ArchLinux x86_64 VMware Player Linux ※MacbookAirへのArchLinuxインストールについてはここでは説明しません。Arch Wikiに全て書いてあります。むしろArch Linuxのインストールを楽しんでください。

目的

Arch Linux上でVMwareを動かし、その中にWindowsをインストールすることではありません。 東方シリーズを遊べる環境にするのが目的です。

手順

基本的にはArch Wikiに書いてある通りなので、 要点と、ちょっと頑張らないと出来なかった部分だけ。

Installing VMware in Arch Linux https://wiki.archlinux.org/index.php/VMware

結論から先に言ってしまうと、Arch Wikiの手順通りにVMwareをインストールしても、VMwarePlayer起動時にVMCIが有効でないとかなんとかで、エラーになったり、Direct3Dが有効にならなかったりで、東方は動きません。もちろん、その対処法もTroubleshootingの項に書いてあったり、ググれば出てくるので、それを念頭においた上で進めるとスムーズに行くと思います。 なので、本家とは若干異なる手順で書いていきます。

事前準備

東方はDirect3Dが動作する環境が必須です。 なので、MacbookAirに搭載されるグラフィックドライバ(xf86-video-intel)とmesaを入れておきます。

xorgの設定をして、Intelドライバが適切に動作するようにします。

/etc/X11/xorg.conf.d/20-intel.confを作成します。

Section "Device"
    Identifier    "Intel Graphics"
    Driver        "intel"
    Option        "AccelMethod" "sna"
EndSection

恐らく、同じMacbookAirならSNAを使っても問題ない。

linux-headersのインストール

Arch Linuxを使っている人達は、当然のように常に最新のカーネルを使っているかと思います。 で、この記事を書いている時点で、Kernelバージョンは3.13です。 なので、Arch Wikiに書いてある通り、vmnatモジュールのビルド時に失敗するのを防ぐため、vmware-netfilter.patchを当ててやります。

その前に、その作業の中で使われるvmware-modconfigではLinuxカーネルのソース一式がインストールされていることを前提としているので、linux-headersを公式リポジトリからインストールしておきます。

$ sudo pacman -S linux-headers

VMware Playerのインストール

先のArch Wikiの通り、本家VMware公式からVMware Player and VMware Player Plus for Linux 64-bitをダウンロードし、Arch LinuxVMware Playerをインストールします。

$ chmod +x VMware-6.0.1-1379776.x86_64.bundle
# ./VMware-6.0.1-1379776.x86_64.bundle --console

コンソールモードでインストールを進めます。

規約に同意します。2回。ちゃんと読みましょうね。

その後、"No rc*.d syle init script directories"とメッセージが表示され、何か入力を求めてくるかと思います。

残念ながら、その時、僕はラム酒を飲んでいて「ん?rc.d?systemdだろ。」と、/etc/systemdを指定してしまったような記憶があります。 正直、ここはよく覚えていませんが、その後色々ハマったこともあり、間違っていたような気もするし、間違ってなかったのかもしれません。 でもVMCI絡みでいじったファイルが/etc/init.d/vmwareなので、ここでは何も変更しなかったのかも。。 気になる人は調べてください。

インストール自体はこれで終わりです。

VMware Playerの設定

次にVMware Playerが正しく動作するように設定をしていきます。

まず、事前準備のところで触れた、3.13カーネルで動作するように、vmware-netfilter.patchを当てます。 Arch Wikiと同じです。

2014/04/16 追記です。

カーネルのバージョン3.13と3.14では手順も当てるパッチも変わるっぽい。なので、Arch Wikiを確認してください。 まぁ、この辺が頻繁に更新されて振り回されるのが大好きでドMなArchユーザなら当然ですよね! https://wiki.archlinux.org/index.php/VMware#VMware_module_patches_and_installation

$ curl http://pastie.org/pastes/8672356/download -o /tmp/vmware-netfilter.patch
$ cd /usr/lib/vmware/modules/source
# tar -xvf vmnet.tar
# patch -p0 -i /tmp/vmware-netfilter.patch
# tar -cf vmnet.tar vmnet-only
# rm -r vmnet-only
# vmware-modconfig --console --install-all

Systemdにサービスを登録

/etc/systemd/system/vmware.serviceを作成します。

[Unit]
Description=VMware daemon

[Service]
ExecStart=/etc/init.d/vmware start
ExecStop=/etc/init.d/vmware stop
PIDFile=/var/lock/subsys/vmware
TimeoutSec=0
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

これで、systemctlを使ってサービスを起動できますが、まだやることがあるので、もうちょっと待ってください。

vmciモジュールをロード出来るようにする

これも先に触れた通り、そのままVMware Playerを起動しても「/dev/vmciなんてディレクトリ無いよ」とかなんちゃらでエラーになります。 で、これもArch WikiのTroubleshootingの通り、/etc/init.d/vmwareを編集してあげます。

スクリプト内の以下の箇所を変更します。

関数名:vmwareStartVmci()

vmwareLoadModule "$mod"
↓
vmwareLoadModule "$vmci"

関数名:vmwareStartVsock()

vmwareLoadModule "$mod"
↓
vmwareLoadModule "$vsock"

関数名:vmwareStopVmci()

vmwareUnloadModule "${mod}"
↓
vmwareUnloadModule "${vmci}"

関数名:vmwareStopVsock()

vmwareUnloadModule "$mod"
↓
vmwareUnloadModule "$vsock"

/etc/init.d/vmwareを修正したら、vmware.serviceを起動してみます。

$ sudo systemctl start vmware.service

エラーにならなければOKです。

次はUSBゲームパッドVMwareゲストOSで認識できるように設定します。

# vmware-usbarbitrator
# systemctl restart vmware

これだけです。

ここまでで、VMware Playerは起動できるようになっているはずです。 試しにvmplayerを起動してみてもいいかもしれませんが、まだ設定は終わっていません。

今回は、既にVMwareゲストOSがVMXファイルで存在していることを前提とします。 もし、まだVMwarePlayerにWindowsをインストールしていなければ、先にゲストOSとしてインストールしてください。

そして、最後(多分)に、ゲストOSのVMXファイルを編集します。 ~/VirtualMachines/WindowsXP.vmwarevm/WindowsXP.vmxに以下を追記します。 ※ここのパスは人それぞれです。

mks.gl.allowBlacklistedDrivers = "TRUE"

これは、VMwareゲストOSからホスト上のグラフィックドライバの3Dアクセラレータを使用するみたいなオプションです(適当

さぁ、これでひと通りVMwareの設定が終わりました。 Windowsを立ち上げてUSBゲームパッドを挿して東方を起動してみましょう。

f:id:aburos:20140227225500j:plain

動きました!!!

しかもOSX+VMwareFusionで動かした東方とは比べ物にならないほどヌルヌル動いている気が。 つーかMavericks重いんじゃ。Lion以降重いんじゃ。

まとめ

今回は、Arch LinuxVMware Playerをインストールし、 VMwarePlayerにWindowsをインストールし、なおかつWindows側でDirect3Dが使えるようにし、USBゲームパッドが認識出来るところまで設定をしました。

これでArch Linux使いの人は心置きなくOSXを捨てることが出来ますね!

あとがき

ナズーリンに惚れまくっててほんとつらい