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を持ってきたり色々やってみたが結局あきらめた。
作業に必要なパッケージはいくつかあったが、とりあえず
- yum install ncurses-dev subversion gcc rpm-build
くらいで足りるはず。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以降のカーネルを起動するために必要な対処をしておく。
- id:haradats:20070819:p6
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
その後やることは以下で、これは問題にならないはずだ。
- patches/seriesに並んでいる順番にパッチをpatch -p1であてる
- ccsにcdして、make installする
- /usr/lib/ccstools/tomoyo_init_policy.shを実行する
ビルド
いつものmake menuconfigを行う。その後、何をすれば良いかわからなかったので(笑)、色々検索して調べたが、make rpmでRPMパッケージを作成してくれることがわかったので、早速実行した。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の課題として、
- AppArmorが受けた指摘(主にパス名ベースであること)への回答
- AppArmorとの差異の明確化
が挙げられている。後者については今回の投稿ではファイルアクセス以外のMACの追加およびTOMOYO Linux自体の説明の追加という形で答えているが、結局のところパス名ベースの偏見を一掃しない限り先は見えないということか・・・。それをやるとしたらAppArmorの何ヶ月にもわたる膨大なスレッドを追いかけて、そこで受けた指摘を拾い出し、それに対する回答を説明して納得してもらう以外方法はない。あまりに長い道のりだ。