«前の日記(2007-12-28) 最新 次の日記(2008-04-16)» 編集

meta's blog - The Power To Serve

筆者について

FreeBSDを通じてOSSにささかな貢献を。

OSS活動をご支援いただける方を募集しています


2008-04-15 Debian はじめました

Linux 2.6.24 で VMware Workstation 6.0.3 の configure に失敗する

問題の環境はこんな感じ。

$ uname -a
Linux algedi 2.6.24-1-686 #1 SMP Thu Mar 27 17:45:04 UTC 2008 i686 GNU/Linux

Debian etch で動いていたものを lenny にアップグレードしたら動かなくなった。 カーネルのバージョンが 2.6.18 から 2.6.24 に替わったので vmware-config.pl を再度実行する必要がある。

何も考えずに vmware-config.pl を実行すると、

Using 2.6.x kernel build system.
make: ディレクトリ `/tmp/vmware-config1/vmmon-only' に入ります
make -C /lib/modules/2.6.24-1-686/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules
make[1]: ディレクトリ `/usr/src/linux-headers-2.6.24-1-686' に入ります
/tmp/vmware-config1/vmmon-only/Makefile:90: *** Inappropriate build environment: you wanted to use gcc version 4.2.3 while kernel attempts to use gcc version 4.1.3.
/tmp/vmware-config1/vmmon-only/Makefile:92: *** For proper build you'll have to replace  gcc-4.1 -m32 with symbolic link to /usr/bin/gcc.  中止.
make[1]: *** [_module_/tmp/vmware-config1/vmmon-only] エラー 2
make[1]: ディレクトリ `/usr/src/linux-headers-2.6.24-1-686' から出ます
make: *** [vmmon.ko] エラー 2
make: ディレクトリ `/tmp/vmware-config1/vmmon-only' から出ます
Unable to build the vmmon module.

For more information on how to troubleshoot module-related problems, please
visit our Web site at "http://www.vmware.com/download/modules/modules.html" and
"http://www.vmware.com/support/reference/linux/prebuilt_modules_linux.html".

Execution aborted.

で止まる。

Inappropriate build environment: you wanted to use gcc version 4.2.3 while kernel attempts to use gcc version 4.1.3.
For proper build you'll have to replace  gcc-4.1 -m32 with symbolic link to /usr/bin/gcc.

ということなので gcc-4.1 をインストールして、/usr/bin/gcc を /usr/bin/gcc-4.1 に向けて再チャレンジ。

Using 2.6.x kernel build system.
make: ディレクトリ `/tmp/vmware-config2/vmmon-only' に入ります
make -C /lib/modules/2.6.24-1-686/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules
make[1]: ディレクトリ `/usr/src/linux-headers-2.6.24-1-686' に入ります
  CC [M]  /tmp/vmware-config2/vmmon-only/linux/driver.o
  CC [M]  /tmp/vmware-config2/vmmon-only/linux/hostif.o
  CC [M]  /tmp/vmware-config2/vmmon-only/common/comport.o
  CC [M]  /tmp/vmware-config2/vmmon-only/common/cpuid.o
In file included from include/asm/bitops.h:2,
                 from /tmp/vmware-config2/vmmon-only/./include/vcpuset.h:74,
                 from /tmp/vmware-config2/vmmon-only/./include/modulecall.h:23,
                 from /tmp/vmware-config2/vmmon-only/common/vmx86.h:18,
                 from /tmp/vmware-config2/vmmon-only/common/hostif.h:18,
                 from /tmp/vmware-config2/vmmon-only/common/cpuid.c:14:
include/asm/bitops_32.h:9:2: error: #error only <linux/bitops.h> can be included directly
make[2]: *** [/tmp/vmware-config2/vmmon-only/common/cpuid.o] エラー 1
make[1]: *** [_module_/tmp/vmware-config2/vmmon-only] エラー 2
make[1]: ディレクトリ `/usr/src/linux-headers-2.6.24-1-686' から出ます
make: *** [vmmon.ko] エラー 2
make: ディレクトリ `/tmp/vmware-config2/vmmon-only' から出ます
Unable to build the vmmon module.

For more information on how to troubleshoot module-related problems, please
visit our Web site at "http://www.vmware.com/download/modules/modules.html" and
"http://www.vmware.com/support/reference/linux/prebuilt_modules_linux.html".

Execution aborted.

いい加減に言うと VMware WS 6.0.3 が Linux 2.6.24 には未対応らしいが、パッチをみつけた

具体的な対処法は vmware-config.pl を実行後、

What is the location of the directory of C header files that match your running kernel? [/lib/modules/2.6.24-1-686/build/include]

ここで Enter を押した直後に Ctrl-Z でコンパイルを中断する。

Using 2.6.x kernel build system.
make: ディレクトリ `/tmp/vmware-config3/vmmon-only' に入ります

という表示のところで止められればOK。

次に /tmp/vmware-config3/vmmon-only/include/vcpuset.h の 74行目あたりの

#include "asm/bitops.h"

という行を

#include "linux/bitops.h"

と書き換える。

書き換えたら fg でコンパイルを再開する。

Using 2.6.x kernel build system.
make: ディレクトリ `/tmp/vmware-config3/vmmon-only' に入ります
make -C /lib/modules/2.6.24-1-686/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules

[1]+  Stopped                 sudo vmware-config.pl
meta@algedi:/tmp/vmware-config2/vmmon-only$ fg
sudo vmware-config.pl
make[1]: ディレクトリ `/usr/src/linux-headers-2.6.24-1-686' に入ります
  CC [M]  /tmp/vmware-config3/vmmon-only/linux/driver.o
  CC [M]  /tmp/vmware-config3/vmmon-only/linux/hostif.o
  CC [M]  /tmp/vmware-config3/vmmon-only/common/comport.o
  CC [M]  /tmp/vmware-config3/vmmon-only/common/cpuid.o
  CC [M]  /tmp/vmware-config3/vmmon-only/common/hash.o
  CC [M]  /tmp/vmware-config3/vmmon-only/common/memtrack.o
  CC [M]  /tmp/vmware-config3/vmmon-only/common/phystrack.o
  CC [M]  /tmp/vmware-config3/vmmon-only/common/task.o
  CC [M]  /tmp/vmware-config3/vmmon-only/common/vmciContext.o
  CC [M]  /tmp/vmware-config3/vmmon-only/common/vmciDatagram.o
  CC [M]  /tmp/vmware-config3/vmmon-only/common/vmciDriver.o
  CC [M]  /tmp/vmware-config3/vmmon-only/common/vmciDs.o
  CC [M]  /tmp/vmware-config3/vmmon-only/common/vmciGroup.o
  CC [M]  /tmp/vmware-config3/vmmon-only/common/vmciHashtable.o
  CC [M]  /tmp/vmware-config3/vmmon-only/common/vmciProcess.o
  CC [M]  /tmp/vmware-config3/vmmon-only/common/vmciResource.o
  CC [M]  /tmp/vmware-config3/vmmon-only/common/vmciSharedMem.o
  CC [M]  /tmp/vmware-config3/vmmon-only/common/vmx86.o
  CC [M]  /tmp/vmware-config3/vmmon-only/vmcore/moduleloop.o
  LD [M]  /tmp/vmware-config3/vmmon-only/vmmon.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /tmp/vmware-config3/vmmon-only/vmmon.mod.o
  LD [M]  /tmp/vmware-config3/vmmon-only/vmmon.ko
make[1]: ディレクトリ `/usr/src/linux-headers-2.6.24-1-686' から出ます
cp -f vmmon.ko ./../vmmon.o
make: ディレクトリ `/tmp/vmware-config3/vmmon-only' から出ます
The module loads perfectly in the running kernel.

/dev is dynamic:
Trying to find a suitable vmblock module for your running kernel.

None of the pre-built vmblock modules for VMware Workstation is suitable for
your running kernel.  Do you want this program to try to build the vmblock
module for your system (you need to have a C compiler installed on your
system)? [yes]

コンパイルが通ったので、あとは普通に configure の続きを実行する。 これで問題はないんだけど、もっとスマートな方法があるような気がする。

vmware-install.pl を使ってインストールした場合はこれでいいんだけど、make-vmpkg を使って deb パッケージ化する際にも同様のビルドエラーが起こるので、この場合はどの段階でソースを書き換えればいいんだろう。