coLinuxカーネルの再構築

さて、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>