でびあんの initrd (11)

scripts/init-bottom/udev の中身を見ているに nuke というコマンドを発見。なんとなく意味てきに_消す_なんでしょうが、rm を簡単に作った、という理解で良いのでしょうか。
と言いつつ晩メシの買い物中にソース見れば良いとゆー事に気づく。
とりあえず initramfs-tools 見てみるか、と言いつつソース取得して中身見てみたのですが nuke の元になるような c のソースはない。
busybox の中かな、と言いつつこれもソース持ってきてみたんですが微妙。困りつつ mkinitramfs を file してみたら

$ file mkinitramfs
mkinitramfs: Bourne shell script text executable
$

との事にて中身を確認したら以下なソレがあった。

# klibc
ln -s /usr/lib/klibc/bin/* ${DESTDIR}/bin
ln -s /lib/klibc-*.so ${DESTDIR}/lib
rm -f ${DESTDIR}/bin/kinit ${DESTDIR}/bin/gzip

なんで symlink なんだろ、と言いつつ klibc なパケジを search

$ apt-cache search klibc
initramfs-tools - tools for generating an initramfs
klibc-utils - small statically-linked utilities built with klibc
libklibc - minimal libc subset for use with initramfs
libklibc-dev - kernel headers used during the build of klibc
$

中身を見てみる

$ dpkg -L libklibc
/.
/lib
/lib/klibc-rOj3PRLKBA9FcF5ZuoqKQLmOWcA.so
/usr
/usr/share
/usr/share/doc
/usr/share/doc/libklibc
/usr/share/doc/libklibc/copyright
/usr/share/doc/libklibc/README
/usr/share/doc/libklibc/changelog.Debian.gz
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/libklibc
$

違う。

$ dpkg -L klibc-utils|grep nuke
/usr/lib/klibc/bin/nuke
$

ありますな。ソースげとしてチェキ。usr/utils/nuke.c がそれにあたる模様。中身は略しますが非常に簡単に作ってあります。

追補

なんで symlink なのか微妙、と言いつつ mkinitramfs の該当箇所を見てみたら直上のコメントに以下の記述を発見。

# Have to do each file, because cpio --dereference doesn't recurse down
# symlinks.

ええと最終的に cpio して gzip -9 してますが、cpio に --dereference というオプションを渡しています。man で確認してみると_シンボリックリンクを参照しない_とある。symlink 自体をコピーするのではなく、実体をコピーするとの事。