initramfs (3)
でびあんには mkinitramfs というナニがある模様 (パケジ的には initramfs-tools)。試しに作って色々いぢくり回してみる事に。
# mkinitramfs -o ./initrd.img # mkdir tmp # zcat initrd.img |(cd tmp; cpio -iuvmd) # cd tmp # ls bin conf etc init lib sbin scripts #
で init の中身を見るにあの難解なソレなのですが、もしかして最後らへんの
# Chain to real filesystem maybe_break init exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console panic "Could not execute run-init."
のあたりを
exec /bin/sh
ってヤッてあげたら busybox のシェルが動くの?
や、もしかして以下?
exec /bin/busybox
試験してみます。
と、言いつつ
色々確認。
# which mkinitramfs /usr/sbin/mkinitramfs # file /usr/sbin/mkinitramfs /usr/sbin/mkinitramfs: POSIX shell script text executable #
中身確認。ケツのあたりにある以下のナニが出力している箇所か。
[ "${verbose}" = y ] && echo "Building cpio ${outfile} initramfs" (cd "${DESTDIR}" && find . | cpio --quiet --dereference -o -H newc | gzip >"${outfile}") || exit 1
修正後、上記コマンドで再構築、な方向で。
とりあえず
/bin/sh からナニ。
# emacs -nw init # rm -f init~ # cd .. # cd tmp && find . |cpio --quiet --dereference -o -H newc | gzip > /tmp/initrd.binsh.img # cd /tmp; cp initrd.binsh.img /boot/. # reboot
ええとこれで grub からナニですな。一連の出力の後に以下となった。
BusyBox v1.10.2 (Debian 1:1.10.2-2) built-in shell (ash) Enter 'help' for a list of built-in commands. /bin/sh: can't access tty; job control turned off / #
とゆーコトで
- exec /bin/busybox なソレと
- 何もしないナニ
を用意してそれぞれ initrd な image を用意。/boot は色々な image が御座います。って image 置いときゃ grub が読みこめる、というのも lilo と比べりゃ楽ですな。
で、試してみた所、
- exec /bin/busybox なソレも Kernel panic した
- 何もしないナニは Kernel panic した
あら、何で busybox を exec するソレは kernel panic なのかなぁ。一応中身を改めてみたんですが、exec /bin/busybox してますな。再確認。
うーん
Currently define functions: なソレには busybox がありません。ちなみに sh は御座いますな。とりあえず exec /bin/sh で起動してコマンドプロンプトから busybox をナニしたら色々ツールが使える模様。
ただ proc の中身が空。mount してみるか。
/ # mount -t proc none /proc / # mount -t sysfs none /sys / # ifconfig / #
うーん。おかしいな。基本 init 実行しているハズだから /proc とか /sys とかは mount されているはずなんですが ...
しかも /proc を mount したら df も出た。
/ # df Filesystem 1k-blocks Used Available Use% Mounted on ndev 10240 28 10212 0% /root/dev /dev/hda1 3889892 3331984 360312 90% /root / #
root partition が /root に mount されておる。あ、なるほど。proc とか sys が mount されてるのは /root 配下の proc とか sys なのか。
そーゆー意味では適切なオプションで run-init したら起動が再開なのか。試してみます。
/ # exec run-init /root /sbin/init </root/dev/cosole >/root/dev/console (略
あらら。あっとゆー間にコンソールにログインプロンプトが出た。なんとなく消化不良ッス。init のケツは以下になってるのですが
exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console
この init にどんな引数が与えられてるのか、を調べるにはどうしたら良いのやら。