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

Kyleからのメッセージ

LKMLのほうはその後あまり反応がないが、Kyleから投稿があった。

This is probably not acceptable; I doubt there's a chance in hell  
that TOMOYO will get merged as long as it has text-based-language  
parsing in the kernel.  You also have $NEW_RANDOM_ABUSE_OF_PROCFS and  
$PATH_BASED_LSM_ISSUES.  See the long flamewars on AppArmor for  
discussion on the latter.

Cheers,
Kyle Moffett

Linux FoundationのLinux Weather Forecastでは、TOMOYO Linuxの課題として、

  1. AppArmorが受けた指摘(主にパス名ベースであること)への回答
  2. AppArmorとの差異の明確化

が挙げられている。後者については今回の投稿ではファイルアクセス以外のMACの追加およびTOMOYO Linux自体の説明の追加という形で答えているが、結局のところパス名ベースの偏見を一掃しない限り先は見えないということか・・・。それをやるとしたらAppArmorの何ヶ月にもわたる膨大なスレッドを追いかけて、そこで受けた指摘を拾い出し、それに対する回答を説明して納得してもらう以外方法はない。あまりに長い道のりだ。