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



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-12-17 (金) 16:35:41