モジュールにパッチを当てていたことを忘れてVmware Workstation 9をバージョンアップしてしまいました。当然ですがモジュールがビルドできないので使えない状態になってしまいました。現在、利用しているVmware Workstation 9用のパッチは検索しても簡単には見つからないようなので、手元に残っていたモジュールソースのアーカイブを利用して使えるようにしました。
かなり無責任なエントリですが、Linux 3.14カーネルとVmware Workstationを利用されている方なら参考にはなると思います。また忘れそうなので自分用のメモです。
Vmware Workstation 9のモジュールソースコードがFedora 20のカーネル(現在利用しているカーネルは3.14.8-200。3.14なら古いバージョンでも利用可能なはずです)に対応していないからです。以下のモジュールソースコードは確か9.0.2用に作ったtarアーカイブだったと思います。
モジュールソースコード : vmware9-fedora20-modules
使い方は以下の通りです。
[root@dev tmp]# unzip vmware9-fedora20-modules.zip Archive: vmware9-fedora20-modules.zip creating: vmware9-fedora20-modules/ inflating: vmware9-fedora20-modules/vmblock.tar inflating: vmware9-fedora20-modules/vmci.tar inflating: vmware9-fedora20-modules/vmmon.tar inflating: vmware9-fedora20-modules/vmnet.tar inflating: vmware9-fedora20-modules/vsock.tar # バックアップが必要なら、コピーの前に保存してください [root@dev tmp]# cp -f vmware9-fedora20-modules/vmnet.tar /usr/lib/vmware/modules/source/ [root@dev tmp]# vmware-modconfig --console --install-all (省略) LD [M] /tmp/modconfig-7ElOlC/vmnet-only/vmnet.o Building modules, stage 2. MODPOST 1 modules CC /tmp/modconfig-7ElOlC/vmnet-only/vmnet.mod.o LD [M] /tmp/modconfig-7ElOlC/vmnet-only/vmnet.ko make[1]: ディレクトリ `/usr/src/kernels/3.14.8-200.fc20.x86_64' から出ます /bin/make -C $PWD SRCROOT=$PWD/. \ MODULEBUILDDIR= postbuild make[1]: ディレクトリ `/tmp/modconfig-7ElOlC/vmnet-only' に入ります make[1]: `postbuild' は更新済みです make[1]: ディレクトリ `/tmp/modconfig-7ElOlC/vmnet-only' から出ます cp -f vmnet.ko ./../vmnet.o make: ディレクトリ `/tmp/modconfig-7ElOlC/vmnet-only' から出ます Starting vmware (via systemctl): [ OK ] [root@dev tmp]#
最後にsystemctlがvmwareサービスの起動が成功すれば完了です。普通にVmware Workstation 9が利用できるはずです。
ビルドできない場合、
ln -s /usr/src/kernels/$(uname -r)/include/generated/uapi/linux/version.h /usr/src/kernels/$(uname -r)/include/linux/version.h
が必要かも知れません。
ビルドパッチ以外の差分もあるかも知れません。気になる方はオリジナルのソースとの差分で確認してください。ファイルサイズで確認したところ、vmnet.tarだけ異るようです。利用は自己責任でお願いします。
パッチの内容は恐らく以下の内容です。恐らく、という理由は古いFedora用のパッチも保存していたので、別のパッチも手元に残っていたからです。ざっとネットを眺めた感じではVmware Workstation 10でも3.14カーネルだと同じパッチが必要なようです。
--- vmnet-only/filter.c 2013-10-18 15:11:55.000000000 -0400 +++ vmnet-only/filter.c 2013-12-21 20:15:15.000000000 -0500 @@ -27,6 +27,7 @@ #include "compat_module.h" #include <linux/mutex.h> #include <linux/netdevice.h> +#include <linux/version.h> #if COMPAT_LINUX_VERSION_CHECK_LT(3, 2, 0) # include <linux/module.h> #else @@ -203,7 +204,11 @@ #endif static unsigned int +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0) VNetFilterHookFn(unsigned int hooknum, // IN: +#else +VNetFilterHookFn(const struct nf_hook_ops *ops, // IN: +#endif #ifdef VMW_NFHOOK_USES_SKB struct sk_buff *skb, // IN: #else @@ -252,7 +257,12 @@ /* When the host transmits, hooknum is VMW_NF_INET_POST_ROUTING. */ /* When the host receives, hooknum is VMW_NF_INET_LOCAL_IN. */ - transmit = (hooknum == VMW_NF_INET_POST_ROUTING); + +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0) + transmit = (hooknum == VMW_NF_INET_POST_ROUTING); +#else + transmit = (ops->hooknum == VMW_NF_INET_POST_ROUTING); +#endif packetHeader = compat_skb_network_header(skb); ip = (struct iphdr*)packetHeader;
追記:
少なくとも私の環境では Fedora20 + Kernel 3.15.x は安定していないようです。VMwareが使えないのではなく、ホストのカーネル(VMではなくホストのカーネル)がクラッシュします。このため、しばらくは3.14を使うつもりです。