試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Linux 2.6.22でvmware-modulesがビルドできない問題に対処

(2007/9/17)Gentoo LinuxPortageツリーにある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。ビルドは正常に完了し、モジュールがインストールされる。

使用したバージョン:

  • Linux(gentoo-sources-2.6.22 + TuxOnIce(旧Suspend2) 2.2.10 for 2.6.22-rc3)
  • vmware-modules 1.0.0.16