Xen 3.0.2 on Debian Sarge.

Debian Xen Team の活動の結果、sid へのアップロードが秒読み段階のようだ。(Thanks to Debian Xen Team!)
開発者によれば、sid へのupload が完了したら sarge への公式 backport パッケージを backports.org へアップロードするとのこと。もっとも、パッケージ自体は開発者のサイトで既に公開されてるので、一足先に試してみた。

パッケージをインストール

Xen 以外に追加で必要なパッケージは udev, make, kernel-package など。
ほとんどは backports.org からダウンロードできるが、kernel-package は sid から借りてくる必要がある。(kernel-package (>=10.041) が必要)
/etc/apt/sources.list に以下を追加。

deb http://www.backports.org/debian sarge-backports main
deb http://naquadah.org/~jd/debian/xen stable main
deb http://ftp.debian.org/debian sid main

/etc/apt/preferences に以下を追加。

Package: *
Pin: release a=sarge-backports
Pin-Priority: 200

Package: *
Pin: release a=unstable
Pin-priority: 90

で、必要なパッケージをインストール。

 $ sudo apt-get update
 $ sudo apt-get install -t sarge-backports udev make
 $ sudo apt-get install -t unstable kernel-package

で、Xen のパッケージをインストール。

 $ sudo apt-get install xen-utils-3.0 xen-hypervisor-3.0-i386

メモリをたくさん積んでるので PAE を使いたいという人は、xen-hypervisor-3.0-i386-pae をインストールすれば良い。

Xen Linux カーネルをビルド

Debian の新しい Xen package には、Domain 0/Domain U で使うための Linux カーネルは含まれていない。とりあえずはパッチを配布するので各自でビルドしてくれ、ということのようだ(パッチがパッケージ化されるかどうかは不明)。将来的に XenLinux kernel のメインツリーに merge されれば、カーネルイメージのパッケージを作るらしい。
ということで、パッチをダウンロードする。(linux-2.6.x-xen-patch.gz)

あと、カーネルソースもダウンロードする。

私は、kernel 2.6.16.9 + linux-2.6.16-xen.patch.gz (2006/04/11) で試した。
で、パッチを適用してカーネルコンフィグ。

 $ tar jxf linux-2.6.16.9.tar.bz2
 $ cd linux-2.6.16.9
 $ zcat ../linux-2.6.16-xen.patch.gz | patch -p1

Makefile で 1 箇所 reject が出たけど、適当に修正した。

 $ make menuconfig

"Processor type and features" -> "Subarchitecture Type" -> "Xen-Compatible" という選択肢が出来ているので、それを選択。*1 するとトップに "XEN" という階層が出るので、そこでいろいろ設定する。Domain0 or DomainU は ここで選ぶ。もちろん、普通のカーネルと同じようにデバイスドライバとかも設定しておく。
で、後はビルドする。kernel-package 10.041 からは、make-kpkg が Xen Linux カーネルの面倒を見てくれるようになったので、普通のカーネルと同じようにビルド & インストールできる。

 $ CONCURRENCY_LEVEL=4 fakeroot make-kpkg --append_to_version -custom --revision 20060424 kernel_image
 $ sudo dpkg -i ../linux-xen0-2.6.16.9-custom_20060424_i386.deb

Domain0 の準備

以降は、あくまでも例。
make-kpkg の --initrd オプションを指定してもうまく動作しなかったので、手動で mkinitramfs を実行。(yaird は不可)

 $ sudo mkinitramfs -o /boot/initrd.img-xen0-2.6.16.9-custom -r /dev/mapper/vg01-root 2.6.16.9-custom

/boot/grub/menu.lst に以下のようなエントリーを追加。(あくまでも例)

title   Xen 3.0 / Linux 2.6.16.9
kernel  /xen-3.0-i386.gz console=vga
module  /xen0-linux-2.6.16.9-custom root=/dev/mapper/vg01-root ro
module  /initrd.img-xen0-2.6.16.9-custom
boot

上の例では、/boot が別パーティションになっており、root デバイスは LVM 上にある。
以上で Domain0 は準備完了なので、リブート。

DomainU を作る

以前と同じなので省略。
xen-tools を使ってみる、というのも良いかも。

*1:Xen 3.0.2 からこうなった。3.0.1 までは ARCH=xen make menuconfig とかやってた