[[diary/Kojima]]

・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 ファイルを展開するときくらいしか使ったこ
とが無いので,こんな問題が内在しているとは全然気がつかなかった,,(^^:

#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS