Linux 2.6.22でvmware-modulesがビルドできない問題に対処
(2007/9/17)Gentoo LinuxのPortageツリーにあるvmware-modules-1.0.0.16-r1の時点では、パッチ適用済みの状態(http://platan.vc.cvut.cz/ftp/pub/vmware/ にあるvmware-any-any-update113.tar.gzに含まれる修正済みvmnet.tar)からビルドするようになっているため、下の手順を行う必要はなくなっている。また、方法としても、VMware Playerのパッケージファイルを変更するよりも、パッチを下のように適用する形のほうがスマートで良かったのではないかと思った(vmware-mod_src_unpackが分かっていれば...)。/usr/portage/app-emulation/vmware-modules/ChangeLogを見ると、7月の終わりごろからパッチがPortageツリーに入っていたようだ。
[引用]ファイル名: /usr/portage/app-emulation/vmware-modules/vmware-modules-1.0.0.16.ebuild より
src_unpack() { vmware-mod_src_unpack cd ${WORKDIR} epatch ${FILESDIR}/${PV}-kernel-2.6.22.patch }
カーネル2.6.22が出たので乗り換えたところ、vmware-modulesパッケージのビルドで
Using 2.6.x kernel build system. make -C /usr/src/linux/include/.. M=$PWD SRCROOT=$PWD/. modules make[1]: Entering directory `/usr/src/linux-2.6.22-gentoo' make[1]: warning: jobserver unavailable: using -j1. Add `+' to parent make rule. CC [M] /var/tmp/portage/app-emulation/vmware-modules-1.0.0.16/work/vmnet-only/driver.o CC [M] /var/tmp/portage/app-emulation/vmware-modules-1.0.0.16/work/vmnet-only/hub.o CC [M] /var/tmp/portage/app-emulation/vmware-modules-1.0.0.16/work/vmnet-only/userif.o /var/tmp/portage/app-emulation/vmware-modules-1.0.0.16/work/vmnet-only/userif.c: In function 'VNetCopyDatagramToUser': /var/tmp/portage/app-emulation/vmware-modules-1.0.0.16/work/vmnet-only/userif.c:630: error: 'const struct sk_buff' has no member named 'h' /var/tmp/portage/app-emulation/vmware-modules-1.0.0.16/work/vmnet-only/userif.c:630: error: 'const struct sk_buff' has no member named 'nh' /var/tmp/portage/app-emulation/vmware-modules-1.0.0.16/work/vmnet-only/userif.c:636: error: 'const struct sk_buff' has no member named 'h' make[3]: *** [/var/tmp/portage/app-emulation/vmware-modules-1.0.0.16/work/vmnet-only/userif.o] Error 1 make[2]: *** [_module_/var/tmp/portage/app-emulation/vmware-modules-1.0.0.16/work/vmnet-only] Error 2 make[1]: *** [modules] Error 2 make[1]: Leaving directory `/usr/src/linux-2.6.22-gentoo' make: *** [vmnet.ko] Error 2
となり、失敗する。調べたところ、
https://communities.vmware.com/message/645058
に載っていたURLのパッチ(vmware-workstation-6.0_linux-kernel-2.6.22.patch)を使用することで、ビルドは通り、動作も正常であることを確認。フォーラムでは、「動作した」という人と「挙動がおかしい」という人がいたが、手元の環境(x86_64で、カーネルはgentoo-sources-2.6.22にTuxOnIceのパッチを当てたもの)では問題なし。
修正版vmnet.tarを含むカスタム.tar.gzパッケージを作る(Gentoo Linux)
/usr/portage/distfiles/の下にダウンロード済みのVMware Playerの.tar.gzファイルと上で紹介したパッチとを使って、/usr/portage/distfiles/の下にカスタムパッケージを作成。これを後にローカルOverlayで使用する。
$ wget "http://npw.net/~phbaer/vmware-workstation-6.0_linux-kernel-2.6.22.patch" $ tar zxf /usr/portage/distfiles/VMware-player-2.0.0-45731.x86_64.tar.gz $ tar xf vmware-player-distrib/lib/modules/source/vmnet.tar $ cd vmnet-only/ $ patch -p1 < ../vmware-workstation-6.0_linux-kernel-2.6.22.patch patching file bridge.c patching file filter.c patching file smac_compat.c patching file userif.c patching file vnetInt.h $ cd - $ tar cf vmnet.tar vmnet-only $ chmod 444 vmnet.tar $ mv vmnet.tar vmware-player-distrib/lib/modules/source/ -f $ tar zcf VMware-player-2.0.0-45731.x86_64-custom.tar.gz vmware-player-distrib/ $ sudo mv VMware-player-2.0.0-45731.x86_64-custom.tar.gz /usr/portage/distfiles/ $ rm vmnet-only/ vmware-player-distrib/ vmware-workstation-6.0_linux-kernel-2.6.22.patch -fr
(2007/7/11)Gentoo Linuxの「vmware-modules」パッケージは、VMware Playerの.tar.gzファイルに含まれるvmnet.tarからモジュール作成を行うため、上の流れとなっているが、他のディストリの場合、インストール先ディレクトリ以下に存在するvmnet.tarを置き換える形になると思われる。
なお、下の作業も含めて、パッケージのファイル名がx86_64版のものなので、x86版の場合、「x86_64.tar.gz」を「i386.tar.gz」のように読み替える。
ローカルOverlayで上のカスタムパッケージをインストールできるようにする
ローカルOverlayを使用するための/etc/make.confなどの準備については「2006.1のebuildを利用してx86-chroot 2007.0をインストール」を参照。
ディレクトリツリーのコピー
$ sudo cp -pr /usr/portage/app-emulation/vmware-modules/ /usr/local/overlays/local/app-emulation/
ソースファイル名の修正
$ sudo sed -i -e 's/x86_64.tar.gz/x86_64-custom.tar.gz/' /usr/local/overlays/local/app-emulation/vmware-modules/vmware-modules-1.0.0.16.ebuild
ダイジェストを取る
$ sudo ebuild /usr/local/overlays/local/app-emulation/vmware-modules/vmware-modules-1.0.0.16.ebuild digest
emergeでインストール
FEATURES=ccache sudo emerge -av -O1 vmware-modules [ebuild R ] app-emulation/vmware-modules-1.0.0.16 0 kB [2] Total: 1 package (1 reinstall), Size of downloads: 0 kB Portage overlays: [1] /usr/local/overlays/layman/xeffects [2] /usr/local/overlays/local
ここまでで問題が無ければ続行。
* VMware-player-2.0.0-45731.x86_64-custom.tar.gz MD5 ;-) ... [ ok ] * VMware-player-2.0.0-45731.x86_64-custom.tar.gz RMD160 ;-) ... [ ok ] * VMware-player-2.0.0-45731.x86_64-custom.tar.gz SHA1 ;-) ... [ ok ] * VMware-player-2.0.0-45731.x86_64-custom.tar.gz SHA256 ;-) ... [ ok ] * VMware-player-2.0.0-45731.x86_64-custom.tar.gz size ;-) ... [ ok ] * checking ebuild checksums ;-) ... [ ok ] * checking auxfile checksums ;-) ... [ ok ] * checking miscfile checksums ;-) ... [ ok ] * checking VMware-player-2.0.0-45731.x86_64-custom.tar.gz ;-) ... [ ok ]
となって、先に進めればOK。ビルドは正常に完了し、モジュールがインストールされる。
使用したバージョン: