PAE非対応なマシンでのXen

少し前からDebian/etchXenカーネル(linux-modules-2.6.18-4-xen-686)がPAEサポート付きでビルドされてるようだけど、私のマシンはPAE非対応なCPUなので

Kernel panic - not syncing: cannot execute a PAE-enabled kernel on a PAE-less CPU!

カーネルパニックになって動いてくれません。仕方ないのでPAEを無効にしたカーネルを自分でビルドして使ってますが、数日前にetchカーネルが更新され(2.6.18.dfsg.1-12)ビルドし直したので、その手順をまとめました。Xenを本格的に使うならPAE無しのマシンで動かすことはないと思いますが、ちょっと試してみようとしたら非PAEなCPUだった、とかいうことはあると思うので。

$ apt-get source linux-2.6
$ cd linux-2.6-2.6.18.dfsg.1
$ patch -p1 <../xen-nonpae.patch
$ mv debian/arch/i386/xen/abi-4.686 debian/arch/i386/xen/abi-4.686.uncheck
$ dch -i
$ fakeroot debian/rules clean
$ fakeroot debian/rules setup
$ fakeroot make -f debian/rules.gen binary-arch-i386-xen-686

xen-nonpae.patch は以下のパッチファイルですが、変更点は2カ所だけなので直接編集した方がはやいですね。

--- linux-2.6-2.6.18.dfsg.1/debian/arch/i386/xen/defines.orig   2007-03-02 15:13:55.000000000 +0900
+++ linux-2.6-2.6.18.dfsg.1/debian/arch/i386/xen/defines        2007-03-02 15:29:19.792752331 +0900
@@ -13,12 +13,12 @@
 type: plain-xen
 
 [xen]
-flavour: i386-pae
+flavour: i386
 
 [686]
 class: i686
 longclass: i686 and compatible
 
 [686_image]
-configs: i386/config.686-bigmem
+configs: i386/config.686
 

dch -i では 2.6.18.dfsg.1-12.nonpae.1 とか適当にバージョンを付けておくとよいです。abi-4.686 をリネームしてるのは、ビルドの途中で走る debian/bin/abicheck.py のチェックに失敗するから。abi-4.686 をリネームしておけばこのチェックがスキップされます。

fakeroot debian/rules clean を実行しないと debian/rules.gen などが更新されないので必ず実行してください。