Fedora 8のカーネル2.6.24とVMware Server

Fedora 8のカーネルが2.6.24.7から2.6.25.4へ上がった。"ソフトウェアの更新"で余り何も考えずにアップグレードしてしてしまった。「またvmware-config.plを実行して設定ファイルをいくつか直さなければならない」と思いつつ。そしたら、ソフトウェアの更新後リブートして、vmware-config.plを実行したらコンパイルが通らない。「any-any-updateの最新版を当ててみるか」と思い、http://groups.google.com/group/vmkernelnewbies/files をアクセスする。すると、

ファイル名 アップロードの実行者 サイズ アップロードを行った日付
vmware-any-any-update117.tgz Peter Teoh 483.2 KB 5月6日
vmware-any-any-update117.tgz (2) Peter Teoh 483.8 KB 5月7日
vmware-any-any-update117a.tgz @rik 483.7 KB 5月15日
vmware-any-any-update117b.tgz Sumant 2.4 MB 6月6日

とany-any-update117が4つもある。どれを使えば良いのか? 仕方ないので、(2)、a、b、と順番に試してみた。(「(2)」と「a」は含まれている内容は同じだった。どうもバージョン管理が混乱している。) 結果、117bを使ってvmware-config.plは無事、カーネルモジュールをコンパイルすることができた。ただ、いくつか気になることかがある。

  1. any-any-updateのメインストリームではない(メインストリームがあるのかわからないが)。ちなみに、作成者のSumant氏のホームページはここ:http://www.dre.vanderbilt.edu/~sutambe/?p=27 元々はFedora 8 2.6.24のために作ったらしい。
  2. ".gz"の拡張子がついているが、ファイルは圧縮されていないtar形式。単なるオペチョンとは思うが、大丈夫かなぁと心配。
  3. vmmonのコンパイル中の警告(warning)も結構ある。(vmnetに関しては全く出てこない。)
  4. これらの4つのパッチはどれもany-any-update116ではなく115をベースにしている。(といっても、どうやら116自身がメインストリームではないのかも知れない。最近、ayn-ayn-updateは http://platan.vc.cvut.cz/ftp/pub/vmware 以外に最新版が置かれるようになっていて、どれが(本当の)最新版なのかよくわからない。)

vmware-any-any-update117bを使ってvmmonモジュールをコンパイルしたログは以下のとおり。いつもより警告メッセージが多いような。

Building for VMware Server 1.0.0.
Using 2.6.x kernel build system.
make: Entering directory `/tmp/vmware-config6/vmmon-only'
make -C /lib/modules/2.6.25.4-10.fc8/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules
make[1]: Entering directory `/usr/src/kernels/2.6.25.4-10.fc8-x86_64'
  CC [M]  /tmp/vmware-config6/vmmon-only/linux/driver.o
  CC [M]  /tmp/vmware-config6/vmmon-only/linux/driverLog.o
  CC [M]  /tmp/vmware-config6/vmmon-only/linux/hostif.o
  CC [M]  /tmp/vmware-config6/vmmon-only/common/comport.o
  CC [M]  /tmp/vmware-config6/vmmon-only/common/cpuid.o
  CC [M]  /tmp/vmware-config6/vmmon-only/common/hash.o
  CC [M]  /tmp/vmware-config6/vmmon-only/common/memtrack.o
  CC [M]  /tmp/vmware-config6/vmmon-only/common/phystrack.o
  CC [M]  /tmp/vmware-config6/vmmon-only/common/task.o
cc1plus: warning: command line option "-Werror-implicit-function-declaration" is valid for C/ObjC but not for C++
cc1plus: warning: command line option "-Wdeclaration-after-statement" is valid for C/ObjC but not for C++
cc1plus: warning: command line option "-Wno-pointer-sign" is valid for C/ObjC but not for C++
cc1plus: warning: command line option "-Wstrict-prototypes" is valid for Ada/C/ObjC but not for C++
/tmp/vmware-config6/vmmon-only/common/task_compat.h: In function ‘void Task_Switch_V45(VMDriver*, Vcpuid)’:
/tmp/vmware-config6/vmmon-only/common/task_compat.h:2666: warning: ‘sysenterState.SysenterStateV45::validEIP’ may be used uninitialized in this function
/tmp/vmware-config6/vmmon-only/common/task_compat.h:2666: warning: ‘sysenterState.SysenterStateV45::cs’ may be used uninitialized in this function
/tmp/vmware-config6/vmmon-only/common/task_compat.h:2666: warning: ‘sysenterState.SysenterStateV45::rsp’ may be used uninitialized in this function
/tmp/vmware-config6/vmmon-only/common/task_compat.h:2666: warning: ‘sysenterState.SysenterStateV45::rip’ may be used uninitialized in this function
  CC [M]  /tmp/vmware-config6/vmmon-only/common/vmciContext.o
  CC [M]  /tmp/vmware-config6/vmmon-only/common/vmciDatagram.o
  CC [M]  /tmp/vmware-config6/vmmon-only/common/vmciDriver.o
  CC [M]  /tmp/vmware-config6/vmmon-only/common/vmciDs.o
  CC [M]  /tmp/vmware-config6/vmmon-only/common/vmciGroup.o
  CC [M]  /tmp/vmware-config6/vmmon-only/common/vmciHashtable.o
  CC [M]  /tmp/vmware-config6/vmmon-only/common/vmciProcess.o
  CC [M]  /tmp/vmware-config6/vmmon-only/common/vmciResource.o
  CC [M]  /tmp/vmware-config6/vmmon-only/common/vmciSharedMem.o
  CC [M]  /tmp/vmware-config6/vmmon-only/common/vmx86.o
  CC [M]  /tmp/vmware-config6/vmmon-only/vmcore/compat.o
  CC [M]  /tmp/vmware-config6/vmmon-only/vmcore/moduleloop.o
  LD [M]  /tmp/vmware-config6/vmmon-only/vmmon.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /tmp/vmware-config6/vmmon-only/vmmon.mod.o
  LD [M]  /tmp/vmware-config6/vmmon-only/vmmon.ko
make[1]: Leaving directory `/usr/src/kernels/2.6.25.4-10.fc8-x86_64'
cp -f vmmon.ko ./../vmmon.o
make: Leaving directory `/tmp/vmware-config6/vmmon-only'
The module loads perfectly in the running kernel.

2.6.25カーネルコンパイルできるパッチを提供してくれたSumant氏に感謝しつつも、ちょっと様子見モード。念のために2.6.24のルート・ファイルシステムとブート・ファイルシステムはイメージファイルとしてしばらく保存しておき、何かあったら直に戻せるようにしておいた。(もっとも、VMwareが動作保障をしていないFedoraを使おうというところが、そもそも間違いなのだが。)

無理にカーネルのバージョンを上げることはないのだが

安定して動いているので、カーネルのバージョンを無理に上げる必要はないのだが、Fedoraの場合、頻繁に色々なソフトウェアのバージョンがあるので、ある程度追従していないと、そのうち更新が正常にできなく恐れがある。以前も、しばらくカーネルの更新だけをスキップして(他のソフトウェアは随時更新していた)、久しぶりに更新しようとしたら、うまく更新できないことがあった。

VMware Serverもバージョンが上がっている

VMware Serverも1.0.6へバージョンが上がっている。1.0.6は"Version 1.0.6 is a maintenance bug fix release"ということで、何が修正されているかというと、

  • Virtual machines fail unexpectedly after a Symantec virus definition update from version 213 to version 220.
  • Previous versions of VMware Server allowed using the VIX API from the guest operating system. In VMware Server 1.0.6 this is no longer allowed by default. This feature can be enabled in VMware Server 1.0.6 by setting a new parameter in the configuration (.vmx) file: vix.inGuest.enable="TRUE"

1番目の修正は、Symantecのウィルス対策ソフトは使っていないので、とりあえずは関係ない。(しかし、ウィルスの定義ファイルの更新で仮想マシンが落ちるなんてことがあるんだ、と感心してしまう。)
2番目の修正は結構、大きな修正だが、どちらかというと、今すぐ導入したくないかも。しばらく様子を見た後でも良いのでは?と思った。
ということで、今回は1.0.6へのバージョンアップは見送ることにした。ただでさえLinuxカーネルバージョンが上がって心配なのに、同時に不安定要素を付け加えたくない。

VMware Serverの今後の導入方針

やはり、VMware社が動作保証リストに載せているUbuntuをベースにしたい。ただ、現時点では最新のLTS(長期サポート)版であるUbuntu 8.04(Linux 2.6.24ベース)はまだリストに載っていないので、VMware Server 2.0のリリース時に8.04がリストに載るのを期待したい。VMware Server 2.0β2では大きな問題もないので、たとえリストに載らなくても大丈夫だとは思うが。
あと、FedoraVMware Server 1.x から UbuntuVMware Server 2.x への移行は、Server 2.0のリリース時期もあるが、新しいマザーボードでPCのハードウェアを一新してから行いたいので、Intel 4シリーズのチップセットG45チップセット対応のマザーボードが出そろったところで、考えてみたい。