Slackware 10.2 への Linux 統合サービス for Hyper-V インストールを試みる
SOFTWARE REPORT
Hyper-V 統合サービスのインストール
Microsoft の仮想化技術 Hyper-V Server 2008 R2 上にインストールした Slackware 10.2 に Hyper-V 統合サービスのインストールを行えればと思い、いろいろ試してみたのですけど、モジュールのコンパイルの段階でエラーとなってしまうようでした。
以前にインストールを行って、正常に組み込むことのできた CentOS と挙動を比べてみたりしたのですけど、make やモジュールコンパイル周りの知識が不足しているのもあってか、原因を特定することができません。以前に EZ-NET レポート: CentOS 5.3 に Linux 統合サービス for Hyper-V をインストールする に記したように、CentOS でなら上手くいったので、それと状況を比べてみたりもしたのですけど、わかりませんでした。
そんな感じで、成功していない内容ではありますが、経過として記しておくことにします。
なお、Linux 用の Hyper-V 統合サービスは、平成 21 年 10 月 14 日現在、Linux Integration Components for Windows Server 2008 Hyper-V R2 からダウンロードできるようになっています。
なお、"Linux Integration Components for Windows Server 2008 Hyper-V R2" のシステム要件として "Hyper-V Server 2008 R2" の他、"Hyper-V Server 2008" も含まれているので、Hyper-V Server 2008 (R1) 環境でも大丈夫だろうと思いますが、Hyper-V Server 2008 (R1) 用の Linux 統合サービスも Linux Integration Components for Windows Server 2008 Hyper-V で提供されているようなので、そちらのリンクも念のため記載しておきます。
今回は、"Linux Integration Components for Windows Server 2008 Hyper-V R2" から "Linux_IC_v2.EXE" をダウンロードすることにします。
これを Windows 上で実行すると "LinuxIC v2.iso" という CD-ROM イメージファイルが生成されます。これを CentOS がインストールされている仮想 PC へマウントしてあげます。
mount /dev/cdrom
これで CD-ROM の内容が /mnt/cdrom/ ディレクトリにマウントされました。
CD-ROM がマウントされたら、次のようにして、その内容を /usr/local/src/LinuxICv2 ディレクトリにコピーします。
cp -rf /mnt/cdrom /usr/local/src/LinuxICv2
そして、本来ならばここでコピーしたディレクトリに移動して "./setup.pl driver" を実行すればセットアップが始まるのですけど、今回の自分の環境では、次のメッセージが表示されてしまい、インストールを続行することができませんでした。
No kernel-devel or kernel-source package installed. You must install this package before installing the drivers.
カーネルソースはインストールされているので、おそらく RPM パッケージとしてインストールされていないのが問題のように思います。
RPMM による管理が徹底されていれば大丈夫なのかもしれないですけど、Slackware では RPM での管理はあまりしていないような気がするので、今回は "setup.pl" の "PreInstallDriversCheck" 関数での RPM チェックを行わないようにしてみました。具体的には "sub PreInstallDriversCheck {" 行の次あたりに 2 行を追加して、以下のような感じにします。
sub PreInstallDriversCheck {
print "skipped.\n";
return;
このようにしてから次の命令を実行すれば、Slackware でも処理が続行されます。
./setup drivers
こうしてみると、インストールの段階で、次のエラーが発生してしまいました。
make[1]: Entering directory `/usr/local/src/LinuxICv2/drivers/dist/vmbus'
Building vmbus driver...make -C /lib/modules/2.4.31/build SUBDIRS=/usr/local/src/LinuxICv2/drivers/dist/vmbus modules 1>&2
make[2]: Entering directory `/usr/src/linux-2.4.31'
make -C /usr/local/src/LinuxICv2/drivers/dist/vmbus CFLAGS="-D__KERNEL__ -I/usr/src/linux-2.4.31/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -pipe -mpreferred-stack-boundary=2 -march=i686 -DMODULE" MAKING_MODULES=1 modules
make[3]: Entering directory `/usr/local/src/LinuxICv2/drivers/dist/vmbus'
make[3]: *** No rule to make target `modules'. Stop.
make[3]: Leaving directory `/usr/local/src/LinuxICv2/drivers/dist/vmbus'
make[2]: *** [_mod_/usr/local/src/LinuxICv2/drivers/dist/vmbus] Error 2
make[2]: Leaving directory `/usr/src/linux-2.4.31'
make[1]: *** [default] Error 2
make[1]: Leaving directory `/usr/local/src/LinuxICv2/drivers/dist/vmbus'
make: *** [public] Error 2
make modules のルールが不足しているようですけど、make のことがよくわかっていないため、これ以上突き詰めることができませんでした。
確かに drivers/dist/vmbus/Makefile には modules ターゲットは存在しないのですけど、これは、以前に正しく導入できた CentOS 上のファイルにも modules ターゲットが存在してはいないようなので、どこか別のところから modules のルールが取り込まれるようにも思います。
なお、CentOS 5.3 と Slackware 10.2 とで、カーネルをコンパイルする際に実行される命令を抜き出してみると、内容に違いは見られました。
Slackware 10.2:
/lib/modules/2.4.31/build/Makefile
modules: $(patsubst %, _mod_%, $(SUBDIRS))
CentOS 5.3
/lib/modules/2.6.18-164.el5/build/Makefile
modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux)
@echo ' Building modules, stage 2.';
$(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost
これをじっくり読み解いていけば何か見えてはくるのでしょうけれど、Makefile に不慣れということもあり、とりあえず見合う時間で解決できそうな気がしないので、今はこのまま様子をみておこうと思います。