Virtual Machine Additions for Linux を Fedora 12 で使う

はじめに

今回は Fedora 12 を、Virtual Server あるいは Virtual PC で実用的に動作させるための方法について書いてみたいと思います。

以前、「Virtual Machine Additions for Linux を Fedora 9 で使う」というメモを書きました。これが、Fedora 9 など、比較的新しい Linux Kernel を採用したディストリビューションに対して Virtual Machine Additions をインストールする方法について初めて Web 上で記述した文書でした。現在ではこのメモで書いた内容が各国語に翻訳され、一部のディストリビューションでの FAQ 的な Wiki にも記載されるにいたりました(つまり、このメモが現在存在するすべての同じ情報の元になっています。中には英語サイトを読んで日本語で再度伝えた記事もあります)。日本語で書くことによっても、現代においては無料の翻訳サービスなどを使用して他語の人々ともコミュニケーションがとれるようになったのだなぁ、と、とても感慨深く思います。

話がそれたので元に戻します。

前述のメモでは Fedora 9 を対象としていました。その後の Linux Kernel ではやや仕様が変更となり、Virtual Machine Additions for Linux をインストールする方法が少々変わりました。今回は Fedora 9 から 12 までに適用できる形に変更して、メモをまとめなおしてみたいと思います。

Virtual Machine Additions for Linux の機能

大きく分けて Virtual Machine Additions for Linux には以下に挙げる4つの機能があります。

  • ゲストとして導入した OS に対するホスト OS との時刻の同期、ゲスト OS の生死を伝えるハートビート(鼓動)の生成、ホストと調和してシャットダウンを行う(時刻同期は Virtual PC 2004 や Windows Server 2005(無印) などでは行えません)。
  • 仮想マシンと統合されたマウス・カーソルの位置を制御するマウス・ドライバー。
  • 仮想マシンに最適化されたディスプレイ・ドライバー。
  • SCSI ハードディスクをエミュレートするドライバ(Virtual Server 2005 R2 Service Pack 1 を必要とします)

このうち、マウス・カーソルとディスプレイおよびSCSI ハードディスクのドライバーに関しては、私が必要としていないため、このメモでは省略しています。

ハートビートの検出は主に Virtual Server におけるスクリプト制御などで、活性検出を行う際に役立ちます。また、シャットダウン関係の制御は、Virtual Server および VirtualPC のメニューやホスト OS と連動しての制御に役立ちます。

いずれにしても、ある程度以上実用的に Linux を Virtual Server あるいは VirtualPC のゲスト OS として使用する場合には、Virtual Machine Additions for Linux のインストールが必要となるでしょう。

免責の宣言

Virtual Machine Additions for Linux は Fedora シリーズ向けにリリースされたソフトウェアではありません。私が書いた文書によって損害を受けることがあったとしても一切責任を負いません。また Microsoft も筆者とは無関係であり、責任を負う立場にありません。あくまでも自己責任においてのみ、このメモの内容を用いなければなりません。

Virtual Machine Additions for Linux のインストール

Virtual Machine Additions for Linux からインストール・ファイルをダウンロードしてインストールします。この際、インストールに必要となる依存アプリケーションはないため Virtual Server だけではなく Virtual PC のインストールされた環境にもインストールすることができます。インストール先のディレクトリ(デフォルトでは C:\Program Files\Microsoft Virtual Server\Virtual Machine Additions です)の中に ISO イメージであるファイル VMAdditionsForLinux.iso があります。

ゲスト OS へのインストールの手順

ここで説明する手順は Fedora 12 の「開発ツール」をインストールした状態の環境であることを前提としています。コマンドを入力してエラーが出るなど、足りないパッケージがある場合には別途インストールする必要があります。

まず「端末」(アプリケーション→システムツール→端末)を起動します(もちろん外部から ssh で接続しての操作でも大丈夫です)。その後 su – コマンドでルートに切り替えます。パスワードには root のパスワードを入力します。

[sakaki@localhost ~]$ su -
パスワード:(ここでrootのパスワードを入力する)

続いて Virtual Machine Additions for Linux の ISO イメージ・ファイル VMAdditionsForLinux.iso を仮想マシンにキャプチャします(デフォルトのインストール先に Virtual Machine Additions for Linux をインストールしている場合、Virtual Server 2003 では選択リストにこのファイルが表示されるため、フルパスを入力せずともリストから選択するだけでキャプチャすることができます)。ローカル・ログインしている状態で ISO イメージをキャプチャすれば自動的にマウントされます。そうではない場合は別途手動でマウントする必要があります。ここでは自動的にマウントされたものとして話を進めます。

マウントした ISO イメージのあるディレクトリにカレント・ディレクトリを切り替えます。

[root@localhost ~]# cd /media/VMAdditionsForLinux/

続いてこの ISO イメージに含まれるカーネル・モジュールをインストールします。

[root@localhost VMAdditionsForLinux]# rpm -ivh vmadd-kernel-module-RHEL-2.0-1.i386.rpm
準備中...                ########################################### [100%]
   1:vmadd-kernel-module-RHE########################################### [100%]
Messages displayed during installation will be logged to /var/log/vmadd-kernel-module.log
cp: cannot stat `/usr/X11R6/lib/modules/drivers/s3_drv.o': そのようなファイルやディレクト リはありません
cp: cannot stat `/usr/X11R6/lib/modules/input/mouse_drv.o': そのようなファイルやディレクトリはありません
cp: cannot stat `/usr/X11R6/lib/modules/input/mouse_drv.so': そのようなファイルやディレク トリはありません

エラーが出ますがこれは無視します。カーネル・モジュールの make を内部で行おうとしますが、Fedora 12 ではコンパイルをすることなく終わってしまいます(以前の Fedora ではエラーとなって終わっていません)。後の手順でこれを行います。

残りの rpm ファイルもインストールします(今回のインストールに関連するもののみ)。

[root@localhost VMAdditionsForLinux]# rpm -ivh vmadd-heartbeat-2.0-1.i386.rpm
準備中...                ########################################### [100%]
   1:vmadd-heartbeat        ########################################### [100%]
[root@localhost VMAdditionsForLinux]# rpm -ivh vmadd-shutdown-2.0-1.i386.rpm
準備中...                ########################################### [100%]
   1:vmadd-shutdown         ########################################### [100%]
[root@localhost VMAdditionsForLinux]# rpm -ivh vmadd-timesync-2.0-1.i386.rpm
準備中...                ########################################### [100%]
   1:vmadd-timesync         ########################################### [100%]

次はカーネル・モジュールを make します。まず cd /lib/modules/vmadd/module/ と入力してカレント・ディレクトリを変更します。

[root@localhost VMAdditionsForLinux]# cd /lib/modules/vmadd/module/

このディレクトリの中に make に必要なファイルがあります。このうち3つのファイルを修正します。まず vpc-mod.c を修正します。ファイルの先頭1行目に「#include <linux/fs.h>」と書き加えます。次に vpc-utils.c の 105 行目を修正します。

           : "ebx", "ecx", "edx", "esi", "edi", "ebp"

赤い部分「, "ebp"」を削除します(カンマも忘れずに削除しなければなりません)。

続けて Makefile の 37 行目と 39 行目の先頭に # を付加します。

#ifdef TOPDIR
obj-m := vmadd.o
#endif

ファイルの修正が終わったら make を実行します。

[root@localhost module]# make
make -C /lib/modules/2.6.31.5-127.fc12.i686.PAE/build modules SUBDIRS=/lib/modules/vmadd/module M=/lib/modules/vmadd/module
make[1]: ディレクトリ `/usr/src/kernels/2.6.31.5-127.fc12.i686.PAE' に入ります
  CC [M]  /lib/modules/vmadd/module/vpc-mod.o
/lib/modules/vmadd/module/vpc-mod.c: In function ‘vpc_open’:
/lib/modules/vmadd/module/vpc-mod.c:188: 警告: assignment discards qualifiers from pointer target type
/lib/modules/vmadd/module/vpc-mod.c:189: 警告: the address of ‘vpc_fops’ will always evaluate as ‘true’
/lib/modules/vmadd/module/vpc-mod.c: In function ‘init’:
/lib/modules/vmadd/module/vpc-mod.c:787: 警告: passing argument 2 of ‘request_irq’ from incompatible pointer type
include/linux/interrupt.h:116: note: expected ‘irq_handler_t’ but argument is of type ‘enum irqreturn_t (*)(int,  void *, struct pt_regs *)’
  CC [M]  /lib/modules/vmadd/module/vpc-utils.o
  LD [M]  /lib/modules/vmadd/module/vmadd.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /lib/modules/vmadd/module/vmadd.mod.o
  LD [M]  /lib/modules/vmadd/module/vmadd.ko
make[1]: ディレクトリ `/usr/src/kernels/2.6.31.5-127.fc12.i686.PAE' から出ます

警告が若干出ますが make は成功しています。

ここで構築したカーネル・モジュールをインストールします。インストールの方法は make vmadd-install-module です。

[root@localhost module]# make vmadd-install-module
make -C /lib/modules/2.6.31.5-127.fc12.i686.PAE/build modules SUBDIRS=/lib/modules/vmadd/module M=/lib/modules/vmadd/module
make[1]: ディレクトリ `/usr/src/kernels/2.6.31.5-127.fc12.i686.PAE' に入ります
  Building modules, stage 2.
  MODPOST 1 modules
make[1]: ディレクトリ `/usr/src/kernels/2.6.31.5-127.fc12.i686.PAE' から出ます
mkdir -p /lib/modules/2.6.31.5-127.fc12.i686.PAE/misc
install -m 0400 -o 0 -g 0 vmadd.ko /lib/modules/2.6.31.5-127.fc12.i686.PAE/misc

続いてカーネル・モジュールを認識させるため depmod コマンドを実行します。

[root@localhost module]# depmod

以上で Virtual Machine Additions for Linux のインストールが完了しました。

試しに service vmadd start と実行してカーネル・モジュールを起動してみます。

[root@localhost module]# service vmadd start
Starting VM additions                                      [  OK  ]

OK が表示されれば問題はありません。続いて他のデーモンも起動してみます。

[root@localhost module]# service vmadd-heartbeat start
Starting heartbeat                                         [  OK  ]
[root@localhost module]# service vmadd-timesync start
Starting timesync                                          [  OK  ]
[root@localhost module]# service vmadd-shutdown start
Starting shutdown                                          [  OK  ]

全て問題なく起動できることを確認したら次回からは自動で起動するように設定するとよいでしょう。この設定は以下のように行います。

[root@localhost ~]# chkconfig vmadd on
[root@localhost ~]# chkconfig vmadd-heartbeat on
[root@localhost ~]# chkconfig vmadd-timesync on
[root@localhost ~]# chkconfig vmadd-shutdown on

カーネルをバージョン・アップグレードする場合の注意

Linux Kernel をバージョン・アップグレードすると、カーネル・モジュールは無効になります。カーネル・モジュールはカーネルのバージョンと一致していなければ使用できないという制限があるためです。このため、カーネルをアップグレードした場合には make から service コマンドでの起動までを root ユーザーで行う必要があります。

終わりに

Fedora 12 で変わったのは Makefile にも手を入れる必要が出た点です。後は変わっていません。この Makefile への変更は以前のバージョンでも行っても問題ありません。同じ手順で Virtual Machine Additions for Linux をインストールすることができます。

このメモが再び皆様のお役に立てば幸いです。

注意

筆者は Windows Virtual PC では一切インストールを試していません。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です