Fedora 22 を Kernel 4.2.3-200 にアップデートすると VMware Workstation 11 が起動できない

Fedora 22 のカーネルを 4.2.3-200 にアップデートすると、VMware Workstation 11 が起動しなくなります。これに対処するには、VMware にパッチをあてるか、Kernel をダウングレードするかの2つの方法があります。

VMware にパッチをあてる方法

https://communities.vmware.com/thread/516196
に書かれている内容を参考にパッチ作業をしたところ、うまく起動するようになりました。以下にその手順を紹介します。

(1) VMware モジュールのソースディレクトリに移動

# cd /usr/lib/vmware/modules/source

(2) vmnet.tar のバックアップの取得

# cp -npv vmnet.tar{,-ORG}
# ls -1 vmnet.tar*
vmnet.tar
vmnet.tar-ORG

(3) vmnet.tar の展開。
これにより「vmnet-only」ディレクトリが作成されます。

# tar -xf vmnet.tar

(4) vmnet-only/vmnetInt.h のバックアップの取得

# cp -npv vmnet-only/vmnetInt.h{,-ORG}
# ls -1 vmnet-only/vmnetInt.h*
vmnet-only/vmnetInt.h
vmnet-only/vmnetInt.h-ORG

(5) vmnet-only/vmnetInt.h の修正
vi エディタなどを使用して vmnet-only/vmnetInt.h を修正します。

# vi vmnet-only/vmnetInt.h

変更内容は 82 行目に示すように関数 sk_alloc の引数の最後に「,1」を追加しただけです。

変更前:

#ifdef VMW_NETDEV_HAS_NET
#   define compat_sk_alloc(_bri, _pri) sk_alloc(&init_net, \
                                                PF_NETLINK, _pri, &vmnet_proto)
#else
#   define compat_sk_alloc(_bri, _pri) sk_alloc(PF_NETLINK, _pri, &vmnet_proto, 1)
#endif

変更後:

#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 2, 0)
#   define compat_sk_alloc(_bri, _pri) sk_alloc(&init_net, \
                                                PF_NETLINK, _pri, &vmnet_proto, 1)
#else
#   define compat_sk_alloc(_bri, _pri) sk_alloc(PF_NETLINK, _pri, &vmnet_proto, 1)
#endif

変更できたことを確認します。

# diff vmnet-only/vmnetInt.h{-ORG,}
82c82
<                                                 PF_NETLINK, _pri, &vmnet_proto)
---
>                                                 PF_NETLINK, _pri, &vmnet_proto, 1)

(6) vmnet-only ディレクトリを tar で固め直す

# tar -cf vmnet.tar vmnet-only
# rm -rf vmnet-only

(7) VMware のモジュールのコンパイルとインストール

# vmware-modconfig --console --install-all

(8) VMware の動作確認
もし、動作しなかった場合は、以下の手順で元の状態にもどせます。

# mv vmnet.tar-ORG vmnet.tar

その場合、カーネルをダウングレードする方法を試してください。

Kernel をダウングレードする方法

(1) インストールされているカーネルを確認
この例では、Installed Packages の部分より3つの版のカーネルがインストールされていることがわかります。

# dnf list --showduplicates kernel
Installed Packages
kernel.x86_64              4.1.8-200.fc22             @updates
kernel.x86_64              4.1.10-200.fc22            @updates
kernel.x86_64              4.2.3-200.fc22             @updates
Available Packages
kernel.x86_64              4.0.4-301.fc22             fedora
kernel.x86_64              4.1.8-200.fc22             @updates
kernel.x86_64              4.1.10-200.fc22            @updates
kernel.x86_64              4.2.3-200.fc22             @updates
kernel.x86_64              4.2.3-200.fc22             updates

(2) GRUB メニューにエントリーされているカーネルを確認

# grep "submenu\|^\menuentry" /boot/grub2/grub.cfg | cut -d "'" -f2
Fedora (4.2.3-200.fc22.x86_64) 22 (Twenty Two) ◀ 現在のカーネル
Fedora (4.2.3-200.fc22.x86_64+debug) 22 (Twenty Two)
Fedora (4.1.10-200.fc22.x86_64+debug) 22 (Twenty Two)
Fedora (4.1.10-200.fc22.x86_64) 22 (Twenty Two) ◀ このカーネルで起動したい
Fedora (4.1.8-200.fc22.x86_64+debug) 22 (Twenty Two)
Fedora (4.1.8-200.fc22.x86_64) 22 (Twenty Two)
Fedora (0-rescue-b23d8567a69543dd97597198bda98d95) 22 (Twenty Two)

(3) 現在の GRUB 設定ファイルの内容を確認

# cat /etc/default/grub
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=fedora_f22ud1/swap rd.lvm.lv=fedora_f22ud1/root"
GRUB_DISABLE_RECOVERY="true"

(4) GRUB 設定ファイルを変更
GRUB 設定ファイルのバックアップを取得します。

# cp -npv /etc/default/grub{,-ORG}

/etc/default/grub ファイルを開き、GRUB_DEFAULT の行を変更します。デフォルトでは「saved」に設定されていますが、これに起動させたいカーネルのタイトルを指定します。4.2.3-200 よりも前のカーネル、たとえば、4.1.10-200 や 4.1.8-200 のメニュータイトルを指定してください。

変更前:
GRUB_DEFAULT=saved
→
変更後:
GRUB_DEFAULT='Fedora (4.1.10-200.fc22.x86_64) 22 (Twenty Two)'

sed で変更するにはつぎのようにコマンドを入力します。

# sed -i -e "s/GRUB_DEFAULT=.*/GRUB_DEFAULT='Fedora (4.1.10-200.fc22.x86_64) 22 (Twenty Two)'/g" /etc/default/grub

変更内容を確認する。

# diff /etc/default/grub{-ORG,}

GRUB に反映させます。

# grub2-mkconfig -o /boot/grub2/grub.cfg

(5) 再起動した後、カーネルのバージョンを確認
再起動します。

# reboot

再起動後のカーネルのバージョンを確認します。

# uname -r
4.1.10-200.fc22.x86_64

ジャーナルログからもカーネルのバージョンを確認します。

# journalctl -b | grep -i 'Linux version'
Oct 24 11:02:17 localhost.localdomain kernel: Linux version 4.1.10-200.fc22.x86_64 (mockbuild@bkernel01.phx2.fedoraproject.org) (gcc version 5.1.1 20150618 (Red Hat 5.1.1-4) (GCC) ) #1 SMP Mon Oct 5 14:22:49 UTC 2015

(6) VMware の動作確認
VMware を起動して、仮想マシンが正常起動できることを確認します。

(7) kernel の自動更新の禁止
kernel が自動更新されないよう設定しておきます。

# cat <<"EOF">> /etc/dnf/dnf.conf
exclude=kernel*
EOF

# cat /etc/dnf/dnf.conf

(2015.11.23 追記)
Fedora 23 に VMware Workstation 12 Pro をインストールした場合にも、VMware Workstation を正常に起動できない問題が発生するようです。これについては、以下のサイトに回避策が紹介されています。
http://vcojot.blogspot.jp/2015/11/vmware-worksation-12-on-fedora-core-23.html

いろいろと書いてありますが、VMware Workstation 12 Pro をインストール後に以下の操作を実行することで正常に起動できるようになります。

# wget https://raw.githubusercontent.com/ElCoyote27/krynn-tools/master/Update_VMW.sh
# sh ./Update_VMW.sh