カスタムルートファイルシステムの構築マニュアル

Last modified: $Date: 2006-11-25 10:18:46 +0900 (Sat, 25 Nov 2006) $


必要最小限のファイルのみを含んだカスタマイズされたルートファイルシステムを作成する手順について説明します。

1.準備

TOMOYO Linux導入手順(簡易版)「例外ポリシーの更新」の直前までの操作を行います。
ただし、「例外ポリシーの作成」において、 /root/security/exception_policy.txt を作成後、以下のように修正する必要があります。

毎回ファイル名が変化するテンポラリファイルに関するエラーメッセージは無視してください。

2.イメージファイルの作成

2.1 ファイル一覧の抽出

ここから先は通常のカーネルで操作してください。

以下のコマンドを実行して、 /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)は非常に大きいため、容量の制限がある場合は除外してください。

2.2 リンク情報の取得

以下のコマンドを実行し、ハードリンクとシンボリックリンクの一覧を作成します。

find / -type l -print0 | /root/ccstools/dumpsymlink > ~/symlink.txt
find / -links +1 -print0 | /root/ccstools/dumplink > ~/link.txt

2.3 コピー先領域のマウント

コピー先を用意し、適当な場所にマウントします。ここでは、 /tmp/rootfs という名前のループバックイメージファイルを /data.tmp/ にマウントする場合で説明します。initramfsとして作成する場合はcpioで固めれば良いので、マウントする必要はありません。

mkdir -p /data.tmp
mount -o loop /tmp/rootfs /data.tmp/

2.4 ファイルのコピー

必要なディレクトリを作成し、ファイルをコピーします。

カーネル 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

2.5 リンク情報の反映

必要なハードリンクとシンボリックリンクを作成します。ハードリンクとシンボリックリンクが互いに依存している場合があるため、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

2.6 コピー先領域のアンマウント

アンマウントします。必要に応じて gzip で圧縮します。

cd
umount -d /data.tmp/

initramfs として作成している場合は以下のコマンドを実行します。

cd /data.tmp/
find -print0 | cpio -o0 -H newc | gzip -9 > /tmp/initrd.img

目次へ戻る