・cpio のこと
最近は initrd の機能が initramfs という形で実装され,initrd みたいにあ らかじめファイルシステムを作っておかなくても cpio + gzip 形式で固めるだ けで自動展開してくれるそうなので,ちょっと試してみようかとイジってみた ら cpio でハマってしまった..
Plamo のインストーラを,ファイルシステムではなくあるディレクトリ以下に展開して, そこを cpio で固めようと
find . | cpio -ov -H newc > plamo_installer.cpio
みたいに作ってみたのだけど,何かサイズがデカいし,以前の initrd に比べ て読み込みも目に見えるくらい時間がかかっている.
あれれ? と plamo_installer.cpio の中身を確認したら,シンボリックリック が,指す先の実体ファイルに展開されてしまっている模様.cpio にシンボリックリンクを保存するような オプション指定あったっけ? と思いながら man や info 等を見ても シンボリックリンクを展開するオプション(-L)はあるものの,保存する方法は発見できず. かといって,find を使ったファイル名の指定の仕方で変るわけでも無さそうだし, google とかで調べてもあまり意味のある記述は見つからないし..
かと言って cpio がシンボリックリンクを保存しないのかと言うと,fedora core4 で作った環境の initrd イメージは initramfs 用の cpio + gzip の形式なのだけど 眺めてみるとちゃんとシンボリックリンクが保存されている.
kojima@vm42[~/Init]% cpio -tv < initrd_centos.cpio drwx------ 10 root root 0 Nov 22 16:30 . drwxr-xr-x 2 root root 0 Nov 22 16:30 loopfs drwxr-xr-x 2 root root 0 Nov 22 16:30 sys ... lrwxrwxrwx 1 root root 3 Nov 22 16:30 sbin -> bin drwxr-xr-x 2 root root 0 Nov 22 16:30 bin lrwxrwxrwx 1 root root 4 Nov 22 16:30 bin/udevstart -> udev -rwxr-xr-x 1 root root 37960 Nov 22 16:30 bin/nash lrwxrwxrwx 1 root root 10 Nov 22 16:30 bin/modprobe -> /sbin/nash -rwxr-xr-x 1 root root 541716 Nov 22 16:30 bin/udev lrwxrwxrwx 1 root root 10 Nov 22 16:30 bin/hotplug -> /sbin/nash
cpio のバージョンも 2.6 で同じなのに何が違うのだろう,,あれこれ試行錯誤をしたところ, 結局 cpio-2.6 の configure スクリプトのバグで,lstat 機能が有効になっていないことが原因だった模様. これも結局 fc4のSRPMからパッチを引っぱり出すところまでかかってしまった..
多分,Plamo デフォルトの cpio だと
% mkdir test && cd test % touch file1 ; ln -s file1 file2 % find . | cpio -o > ../test1.cpio
とやると
kojima@xeon[~/tmp/test]% less ../test1.cpio drwxr-xr-x 2 kojima users 0 Jan 5 01:41 . -rw-r--r-- 1 kojima users 0 Jan 5 01:41 file1 -rw-r--r-- 1 kojima users 0 Jan 5 01:41 file2
こんな感じになってしまうハズ.一応,lstat 機能を有効にしてやった cpio では
kojima@xeon[~/tmp/test]% find . | ../cpio-lstat -o > ../test2.cpio kojima@xeon[~/tmp/test]% less ../test2.cpio drwxr-xr-x 2 kojima users 0 Jan 5 01:41 . -rw-r--r-- 1 kojima users 0 Jan 5 01:41 file1 lrwxrwxrwx 1 kojima users 5 Jan 5 01:41 file2 -> file1
という形でリンクが保存されることを確認.
Plamo の上だと cpio なんて rpm ファイルを展開するときくらいしか使ったこ とが無いので,こんな問題が内在しているとは全然気がつかなかった,,(^^: