CentOS 7.5が出たので手持ちの仮想マシンをアップデートしてみたらエラーになりました。
ログはこんな感じ。
Fri May 11 19:53:00 JST 2018 cd prl_eth/pvmnet && make cd prl_eth/pvmnet && rm -rf .*.cmd .tmp_versions cd prl_tg/Toolgate/Guest/Linux/prl_tg && rm -rf .*.cmd .tmp_versions cd prl_fs/SharedFolders/Guest/Linux/prl_fs && rm -rf .*.cmd .tmp_versions make[1]: Entering directory `/var/lib/dkms/parallels-tools/13.3.0.43321/build/prl_eth/pvmnet' make[1]: warning: jobserver unavailable: using -j1. Add `+' to parent make rule. cd prl_fs_freeze/Snapshot/Guest/Linux/prl_freeze && rm -rf .*.cmd .tmp_versions make -C /lib/modules/3.10.0-862.2.3.el7.x86_64/build M=/var/lib/dkms/parallels-tools/13.3.0.43321/build/prl_eth/pvmnet make[2]: Entering directory `/usr/src/kernels/3.10.0-862.2.3.el7.x86_64' LD /var/lib/dkms/parallels-tools/13.3.0.43321/build/prl_eth/pvmnet/built-in.o CC [M] /var/lib/dkms/parallels-tools/13.3.0.43321/build/prl_eth/pvmnet/pvmnet.o /var/lib/dkms/parallels-tools/13.3.0.43321/build/prl_eth/pvmnet/pvmnet.c:396:2: error: unknown field ‘ndo_change_mtu’ specified in initializer .ndo_change_mtu = eth_change_mtu, ^ /var/lib/dkms/parallels-tools/13.3.0.43321/build/prl_eth/pvmnet/pvmnet.c:396:2: warning: initialization from incompatible pointer type [enabled by default] /var/lib/dkms/parallels-tools/13.3.0.43321/build/prl_eth/pvmnet/pvmnet.c:396:2: warning: (near initialization for ‘pvmnet_netdev_ops.ndo_set_mac_address’) [enabled by default] make[3]: *** [/var/lib/dkms/parallels-tools/13.3.0.43321/build/prl_eth/pvmnet/pvmnet.o] Error 1 make[2]: *** [_module_/var/lib/dkms/parallels-tools/13.3.0.43321/build/prl_eth/pvmnet] Error 2 make[2]: Leaving directory `/usr/src/kernels/3.10.0-862.2.3.el7.x86_64' make[1]: *** [all] Error 2 make[1]: Leaving directory `/var/lib/dkms/parallels-tools/13.3.0.43321/build/prl_eth/pvmnet' make: *** [installme] Error 2
このようなエラーが出てParallels-Toolsがインストール出来ませんでした。
というわけで。 このブログで毎度おなじみの強引な解消を試みます。
とりあえず、
/var/lib/dkms/parallels-tools/13.3.0.43321/build/prl_eth/pvmnet/pvmnet.c
を見てみると
#ifdef HAVE_NET_DEVICE_OPS static const struct net_device_ops pvmnet_netdev_ops = { .ndo_start_xmit = pvmnet_xmit, .ndo_get_stats = pvmnet_get_stats, .ndo_open = pvmnet_open, .ndo_stop = pvmnet_close, .ndo_init = pvmnet_init, .ndo_uninit = pvmnet_free, #if REAL_LINUX_VERSION_CODE < KERNEL_VERSION(3, 2, 0) .ndo_set_multicast_list = pvmnet_set_multicast_list, #else .ndo_set_rx_mode = pvmnet_set_multicast_list, #endif .ndo_change_mtu = eth_change_mtu, // ←396行目 }; #endif
となっています。
とりあえず396行目をコメントアウトしてからyum reinstall kernel
をやったらインストールに成功しました。
しばらく使ってみても特に問題なく動いているようです。
DKMSではなく手動インストールの場合
$ mount /dev/cdrom /mnt $ cp -rf /mnt /tmp/parallels-tools $ cd /tmp/parallels-tools
とすると、kmods/prl_mod.tar.gz
があります。
それを展開すると中にpvmnet.cがあるので、上記と同じように編集してから再度tar.gzに固めて、
$ ./install
とするとインストールできます。
追記
どうやらこれっぽいですね。
http://dpdk.org/dev/patchwork/patch/35566/
というわけで、
diff --git a/lib/librte_eal/linuxapp/kni/compat.h b/lib/librte_eal/linuxapp/kni/compat.h index 3f8c0bc..6a6968d 100644 --- a/lib/librte_eal/linuxapp/kni/compat.h +++ b/lib/librte_eal/linuxapp/kni/compat.h @@ -101,6 +101,11 @@ #undef NET_NAME_UNKNOWN #endif +#if (defined(RHEL_RELEASE_CODE) && \ + (RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7, 5))) +#define ndo_change_mtu ndo_change_mtu_rh74 +#endif + #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) #define HAVE_SIGNAL_FUNCTIONS_OWN_HEADER #endif
とのことなので、396行目を
.ndo_change_mtu_rh74 = eth_change_mtu,
に書き換えて再インストールしてみたらうまくいきました。これが正解っぽいです。