さて、coLinuxをインストールしたのであったが、CP932が組み込まれてないせいでエラーが起きてたり色々いやな感じなので、自前でカーネルを再構築する。
まずはカーネルのソースを取得してDebian向けのPatchを当てるのだけれど、これはaptでkernel-source-2.6.10を取得すれば足りる。coLinuxパッチはカーネルのかなり深い部分を触ってるので、特に重大な問題がなければベースにするソースコードはcolinux本家でベースにしてる2.6.10が無難と思われる。前に2.6.11に当てようとしたら大量に*.rejが発生した記憶がある。
kernel-source-2.6.10パッケージをインストールすると/usr/src/にkernel-source-2.6.10.tar.gzができているので、これをその場で展開する。それから、colinuxのソース(colinux-0.6.2.tar.gz)をダウンロードして、これも展開する。その上で、一応、linux -> kernel-source-2.6.10 にリンクを張って、以下その中で作業する。
# pwd /usr/src # ls colinux-0.6.2.tar.gz kernel-source-2.6.10.tar.gz # tar -xzf kernel-source-2.6.10.tar.gz # ln -s kernel-source-2.6.10 linux # tar -xzf colinux-0.6.2.tar.gz # cd linux # patch -p1 < ../colinux-0.6.2/patch/linux # cp ../colinux-0.6.2/conf/linux-config .config
あとはmake menuconfigして、好きなように設定を直す。私がやったのはファイルシステムのNLSにCP932やUTF-8を入れたのと、CPUの種類をx86一般からPentium4ファミリーに変更したぐらい。
それから、パッチを当てた時点でlocalversion-cooperativeというファイルができていて、内容は「-co-」のはずだけれども、これがカーネルのリリース名(uname -r)に反映されるらしいので、「-co-0.6.2-jade」に変更しておく。
以上で設定は一通り終了。
これでmake vmlinux modulesすればよいんじゃないかと思ったのだけれど、Linuxカーネルのリビルドという記事を見ると、そのままmake modules_installするんじゃ駄目(?)らしい。良くわからないけど。とりあえず、そちらの記事のやり方で害はなさそうなので真似てみる。まずは、カーネルパッケージをビルドして、その中からカーネルモジュールだけ拾ってvmlinux-modules.tar.gzを作成。
# pwd /usr/src/linux # make-kpkg kernel-image => ... 色々出て、/usr/src/kenel-image-2.6.8.1-co-0.6.2-jade_10.00.Custome_i386.debが生成された。 # cd /tmp # mkdir colinux # ar -x /usr/src/kenel-image-2.6.8.1-co-0.6.2-jade_10.00.Custome_i386.deb # tar -xzf data.gz # tar -czf vmlinux-modules.tar.gz lib
なお、ビルドした時点で/usr/src/linuxにvmlinuxもできている。これも後で使う。
できあがったvmlinux-modules.tar.gzをcolinuxのバイナリパッケージに付いてきたinitrd.gzに組み込めば良さそうだ。あらかじめ、initrd.gzは/tmp/colinuxにおいてあるとして、
# pwd /tmp/colinux # gzip -d initrd.gz # mkdir /mnt/initrd # mount -o loop initrd /mnt/initrd # cp vmlinux-modules.tar.gz /mnt/initrd/lib/modules/ # umount /mnt/initrd # rmdir /mnt/initrd # gzip initrd
これで、目的のカーネルイメージ/usr/src/linux/vmlinuxと、/tmp/colinux/initrd.gzができあがった。これを適当にリネームしてcolinuxのインストールディレクトリに持っていき、config.xmlもそれに合わせて適当に変えればよい。私の場合おのおのvmlinux-jade, initrd-jade.gzという名前にしたので設定ファイルはこうなった。
<?xml version="1.0" encoding="UTF-8"?>
<colinux>
<!-- /etc/fstabが参照しているブロックデバイスを定義 -->
<!-- (root) -->
<block_device index="0" alias="sda7" path="\Device\Harddisk0\Partition6" enabled="true" />
<!-- (swap) -->
<block_device index="1" alias="sda6" path="\Device\Harddisk0\Partition5" enabled="true" />
<!-- /home -->
<block_device index="2" alias="sda8" path="\Device\Harddisk0\Partition7" enabled="true" />
<!-- original /boot -->
<block_device index="3" alias="sda5" path="\Device\Harddisk0\Partition4" enabled="true" />
<!-- /interos -->
<block_device index="4" alias="sda9" path="\Device\Harddisk0\Partition8" enabled="true" />
<!-- /media/cdrom -->
<block_device index="5" alias="hda" path="\Device\Cdrom0" enabled="true" />
<!-- /media/floppy0 -->
<block_device index="6" alias="fd0" path="\Device\Floppy0" enabled="true" />
<!-- bootparams allows you to pass kernel boot parameters -->
<bootparams>ro 4 root=/dev/sda7</bootparams>
<!-- Initial RamDISK (initrd) support -->
<initrd path="initrd-jade.gz" />
<!-- image allows you to specify the kernel to boot -->
<image path="vmlinux-jade" />
<!-- this line allows you to specify the amount of memory available
to coLinux -->
<memory size="128" />
<!-- This allows you to modify networking parameters, see the README
or website or wiki for more information -->
<network index="0" type="tap" />
</colinux>