Info: Version 1.3 is available.
Last modified: $Date: 2011-07-01 13:55:23 +0900 (Fri, 01 Jul 2011) $
必要最小限のファイルのみを含んだカスタマイズされたルートファイルシステムを作成する手順について説明します。
TOMOYO Linux導入手順(簡易版)の「例外ポリシーの更新」の直前までの操作を行います。
ただし、「例外ポリシーの作成」において、 /root/security/exception_policy.txt を作成後、以下のように修正する必要があります。
毎回ファイル名が変化するテンポラリファイルに関するエラーメッセージは無視してください。
ここから先は通常のカーネルで操作してください。
以下のコマンドを実行して、 /root/security/domain_policy.txt からファイル名の一覧を抽出します。
grep -v '<kernel>' ~/security/domain_policy.txt | grep / | awk ' { print $2; print $3; } ' | grep -v ^/proc/ | grep -v ^/sys/ | grep -v ^/root/ccstools/ | grep -v /root/security/ | sort | uniq > ~/filelist.tmp |
抽出されたファイル名の一覧から、不要なファイル(ログファイル、PIDファイル、一時ファイル等)を除外します。
grep -v /tmp/ ~/filelist.tmp | grep -v /var/log/ | grep -v /var/run/ | grep -v /var/tmp/ > ~/filelist.txt |
~/filelist.txt に、不要なファイルが含まれていないことを確認してください。ロケールファイル(/usr/lib/locale/locale-archive)は非常に大きいため、容量の制限がある場合は除外してください。
以下のコマンドを実行し、ハードリンクとシンボリックリンクの一覧を作成します。
find / -type l -print0 | /root/ccstools/dumpsymlink > ~/symlink.txt find / -links +1 -print0 | /root/ccstools/dumplink > ~/link.txt |
コピー先を用意し、適当な場所にマウントします。ここでは、 /tmp/rootfs という名前のループバックイメージファイルを /data.tmp/ にマウントする場合で説明します。initramfsとして作成する場合はcpioで固めれば良いので、マウントする必要はありません。
mkdir -p /data.tmp mount -o loop /tmp/rootfs /data.tmp/ |
必要なディレクトリを作成し、ファイルをコピーします。
カーネル 2.4 系の場合は sys と selinux ディレクトリは不要です。
~/filelist.txt で使用しているファイル名の表記はTOMOYO Linux独自形式であり、 cpio が受け取るファイル名の形式とは異なっていますが、ほとんどの場合、空白や改行などを含むファイル名は含まれていないので問題は発生しないはずです。
cd /data.tmp/ mkdir -pm 755 sys selinux mkdir -pm 755 proc dev dev/shm dev/pts var/log var/run var/tmp var/run/netreport mkdir -pm 1777 tmp mkdir -pm 111 var/empty/sshd mknod dev/console c 5 1 mknod dev/null c 1 3 mknod dev/zero c 1 5 cpio -pdm . < ~/filelist.txt find var/log/ -type f -print0 | xargs -0 rm find var/lock/ -type f -print0 | xargs -0 rm find var/run/ -type f -print0 | xargs -0 rm |
必要なハードリンクとシンボリックリンクを作成します。ハードリンクとシンボリックリンクが互いに依存している場合があるため、1回で全て作成できるとは限らないので、交互に数回繰り返してください。
for i in 1 2 3 4 5 do /root/ccstools/makelink /data.tmp/ < ~/link.txt /root/ccstools/makesymlink /data.tmp/ < ~/symlink.txt done |
アンマウントします。必要に応じて gzip で圧縮します。
cd umount -d /data.tmp/ |
initramfs として作成している場合は以下のコマンドを実行します。
cd /data.tmp/ find -print0 | cpio -o0 -H newc | gzip -9 > /tmp/initrd.img |