Fedora15 KVM上のWindowsにデバイスドライバを導入するには

Fedora15のvirt-managerではいくつかのハードウェアを設定できるが、このうちWindows上で次を使用する場合には、Windowsに専用のデバイスドライバを追加する必要がある。

・ virtio storage
・ virtio nic
・ baloon driver
・ virtio serial
・ QXL

(QXLはSPICEのサイト(http://spice-space.org/download.html), それ以外はFedora KVMのサイト(http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/)からダウンロードできる)

後々のために、Windows上でドライバを読ませるための設定をまとめておこう。。

基本: ドライバの自動読み取り

Windows上で使用するドライバ(実体はsysファイルで、設定ファイルとしてinfファイルがある)は、OS起動時に、デバイスID(PCI IDなど)を鍵とした自動検索がかかる。
自動検索の検索パスは、デフォルトで c:\windows\inf 以下なので、上記のデバイスに対するドライバをこのパスに置いておくと、対応するデバイスを追加した際に、Windowsが自動で認識するようになる。

ドライバ署名の回避

特に64bit版のWindowsで問題になるのだが、新しめのWindowsにはマイクロソフトの署名が入っていないドライバの読み込みを拒否する機能がある。。商用のKVMではvirtio-win パッケージからドライバが手に入るので問題にならないはずなのだが、テスト用のドライバには署名は行われていない。
この対応には、次のdseoというツールが有用だった。
http://www.ngohq.com/home.php?page=dseo

このツールでは、1. テスト署名の作成, 2. 署名検証の無効化 の2つの操作を実施できる。こちらでドライバへの署名と、検証の無効化を行うことで、ドライバの読み取りが出来るようになった。
※ 2. 署名検証の無効化は、実際には bcdedit /set TESTSIGNING ON を実行しているらしい。。 1.はテスト署名のキーストアへの登録、署名の実施等を行っているようだが、詳細はわからなかった。。
なお、検証の無効化を行っても、あくまでマイクロソフト署名のチェックを行わないだけで、テスト署名そのものは必要なようなので、1, 2は両方実施する必要があった。
なお、dseoのサイトには書いていないが、こちらで試した限りでは、テスト署名については、 sysファイル、catファイル(infファイルからinf2cat で作成できる署名ファイル?) の両方に行う必要があるらしい。。

VESA,Memory等、既にデバイスドライバがある場合の対応

QXLのグラフィックスアダプターや、Balloon用のメモリは、通常はVESA/Memoryとして振る舞うため、Microsoft純正のドライバが優先されてしまう場合があった。
この場合、次のコマンドを実行することで、無理やりドライバを更新することができた。

Windows7 試用版(pnputil):
> pnputil -i c:\windows\inf\ballon.inf
> pnputil -i c:\windows\inf\qxl.inf

WindowsServer2003試用版(devcon, PCIパスの詳細はinfファイルの中身を確認):
> devcon update c:\windows\inf\ballon.inf "PCIパス"
> devcon update c:\windows\inf\qxl.inf "PCIパス"

このうち、pnputilはWindowsのバージョンにより存在しないことがあるので、その場合はdevconを使うことになりそうだ。。devconは次 (http://support.microsoft.com/kb/311272/ja)から入手できる。32bit/64bitがあり、バージョンが違うと変更が実施できない(閲覧系のコマンドは実施できる)ので注意。
なお、デバイスマネージャー経由でも読み込みを実施できるのかもしれないが、優先度を変更する方法がわからなかったため上記のツールを使用している。。 orz

その他注意点

qxlでcatファイルが無い

qxlのデバイスファイルはSPICEのサイトから入手できるが、2011/6の時点で、64bit版が無いのに加えて(これは今のところ自力でビルドするしかなさそう。。)、zipファイルにcatファイルが含まれておらず、署名チェックが回避出来ないという問題があった。対応として inf2cat ( ここから入手できる: https://winqual.microsoft.com/help/Inf2cat_FAQ.htm ) でcatファイルを作成する必要があった。

vdagent, blnsvrのインストール

SPICE, Baloonの動作のためには、Windows上に対応するサービスをインストールする必要がある。それぞれ、次のコマンドでインストールできた。

SPICE vdagent(SPICEのサイトからダウンロード):
> vdservice install

Balloonエージェント(FedoraKVMのサイトからダウンロード)
> blnsvr -i 

まとめ

Tipsとして、Fedora15のguestfishではゲストOSのNTFSに直接ファイルを配置出来るため、大量にドライバや、devcon.exeなどを配置する場合には、WindowsFTP等を使うより、ホストOSから直接置いた方が簡単そうだ。。(Windows上でもPuppetが使えるようになれば、楽なのだが。。)<<参考リンク>>
http://spice-space.org/page/WinQXL