CentOS 4.5でLKMLに投稿したTOMOYO Linux 2.1.0-rc3をビルドする

RedHat系はふだん使っていないので、勝手がわからず結構苦労した。ひっかかりそうなところを中心にメモを残しておく。

用意したもの

残念ながらUbuntuのように仮想マシンのデータは配布していないようなので、小さめ?のイメージを探していたところ、「CD1枚でサーバをセットアップ――CentOS 4.4 Single Server CDの簡易導入ガイド 」という記事を見つけたので、それを使うことにした。CentOSは既に5になっているが、Single Serverはこの日記を書いている8月28日現在では4.4が最新のようだ。ISOイメージだが、この記事にあるリンクでは見つけられなかったので、ちょっと苦労したが、http://vault.centos.org/4.4/isos/i386/の下に見つかった。

準備

CentOSなのでまずはyum updateだ。ということで実行したところ、400個近いパッケージが更新されて4.5にアップグレードした(以前も同じ事をしたのだが忘れていた)。せっかく小さな(580MB)イメージを使って構築したのにX.org関係でごっそりとパッケージが導入されて一気にふくれあがってしまった。しかも、Xが起動できない・・・。稼働中のCentOSのxrog.confを持ってきたり色々やってみたが結局あきらめた。

作業に必要なパッケージはいくつかあったが、とりあえず

くらいで足りるはず。rpmbuildコマンドが入っているパッケージの名前がrpm-buildというのはややこしい。

既に2.6.24-rc1が出てしまったが、とりあえずUbuntu, Debian Etch(4.0r1)と同じく、kernel.orgから2.6.23-rc3を取得して、/usr/srcに展開する。

# cd /usr/src
# wget http://www2.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.23-rc3.tar.bz2
# tar xff linux-2.6.23-rc3.tar.bz2

忘れないうちにVMwareで2.6.21以降のカーネルを起動するために必要な対処をしておく。

TOMOYO Linuxパッチとツールのダウンロード

LKML投稿メッセージにある手順の通りでも良いのだが、せっかくSubversionレポジトリがあるのだから、そこから落とすことにした。

# cd /usr/src linux-2.6.23-rc3
# svn co http://svn.sourceforge.jp/svnroot/tomoyo/trunk/2.1.x/tomoyo-lsm/patches
# svn co http://svn.sourceforge.jp/svnroot/tomoyo/trunk/1.5.x/ccs-tools/ccs

その後やることは以下で、これは問題にならないはずだ。

  1. patches/seriesに並んでいる順番にパッチをpatch -p1であてる
  2. ccsにcdして、make installする
  3. /usr/lib/ccstools/tomoyo_init_policy.shを実行する

ビルド

いつものmake menuconfigを行う。その後、何をすれば良いかわからなかったので(笑)、色々検索して調べたが、make rpmRPMパッケージを作成してくれることがわかったので、早速実行した。kernel.specというファイルを元にパッケージを作ってくれるらしい。make rpmは本当に全自動でRPMを作成してくれるのだが、rpm-buildのパッケージを導入していないと、途中でrpmコマンドが"unknown option"といって止まってしまう。rpm-buildパッケージを入れることにより自動的にrpmがrpmbuildに置換されるようだ。

make rpmが無事終了したら、次にinitrdのイメージを作らなければいけない。それを行うのはmkinitrdだが、ここでひとつ準備が必要で、/etc/modprobe.confの中のalias scsi_hostadapter1 mptscsiの行をコメントアウトしておかないと、"No module mptscsi found for kernel 2.6.18.3-default, aborting."といって怒られる。これについては、ここに詳しい説明がある。

# mkinitrd /boot/initrd-2.6.23-rc3.tomoyo.img 2.6.23-rc3-tomoyo

mkinitrdが終了したら、/usr/src/redhat/RPMS/i386にkernel-2.6.23rc3tomoyo-1.i386.rpmができている。ので、

# rpm -ih /usr/src/redhat/RPMS/i386/kernrel-2.6.23rc3tomoyo-1.i386.rpm

カーネルの導入は終了だが、このあとgrubにエントリーを追加しなければいけなくて、ここも少し手間取ったので、grub.confに追加した部分を貼っておく。

title CentOS (2.6.23-rc3-tomoyo)
    root (hd0, 0)
    kernel /vmlinuz-2.6.23-rc3-tomoyo ro root=/dev/VolGroup00/LogVol00
    initrd /initrd /initrd-2.6.23-rc3.tomoyo.img