(2015-3-29)
ローダーは置いといて、その後の流れから。
←昔こんな本を購入し、やってみようかと思いつつ読んでいたが、あれよあれよと月日が流れてしまった。 カーネル2.4/2.6頃の本なので細部の内容はもう合わなくなっているが、過去を追ってみるのも良い勉強に思う。 因みにこの本の元になったような古めの記事が今でも残っている。 自分Linuxを作り出せ | |
2008年9月時点、2.6.26.5 との事。所持していないが↑のよりは新しい。 | |
日経BP社 (2013/4/17):Ubuntu 対象が多い。Tips 的記事多し。4章に10頁程 USB メモリ起動の Linux 作成記事有り。 |
USBフラッシュメモリへインストールしたものより:
なお、忘れかけているが確か SATA ハードディスクが存在する(インストール先に指定可能な)状態でインストール作業を進めたので USB メモリは sdb となっていたと思う。
grub インストール場面では順序を変える操作で USB メモリへ配置する事が出来た。
# grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/sdb2 # initrd /initrd-version.img #boot=/dev/sdb default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Red Hat Enterprise Linux Server (2.6.18-8.el5) root (hd0,0) kernel /vmlinuz-2.6.18-8.el5 ro root=LABEL=/ initrd /initrd-2.6.18-8.el5.img
黄色マーカー部が注目すべき処か…。
/dev/sdb なのに (hd0,0) で良い処は良く判らない…
VM環境にインストールしておいた RHEL5 の initrd を見てみる。
適当な場所へコピーしてから展開して見る。一応、USBフラッシュメモリへのインストール/起動も考えて、異なる点も調べている。
# gunzip < initrd-2.6.18-8.el5.img | cpio -i
# tree . |-- bin | |-- insmod | |-- modprobe -> /sbin/nash | `-- nash |-- dev | |-- console | |-- mapper | |-- null | |-- ptmx | |-- ram -> ram1 | |-- ram0 | |-- ram1 | |-- rtc | |-- systty | |-- tty …途中略 | `-- zero |-- etc |-- init |-- lib | |-- ahci.ko | |-- ehci-hcd.ko | |-- ext3.ko | |-- jbd.ko | |-- libata.ko | |-- ohci-hcd.ko | |-- scsi_mod.ko | |-- sd_mod.ko | `-- uhci-hcd.ko | `-- usb-storage.ko ... USBフラッシュメモリにインストールした場合に入る。 |-- proc |-- sbin -> bin |-- sys `-- sysroot
実は Ubuntu 12 も見たのだが、それに比べると随分あっさりしている。 さて init スクリプトを見ると
1: #!/bin/nash 2: 3: mount -t proc /proc /proc 4: setquiet 5: echo Mounting proc filesystem 6: echo Mounting sysfs filesystem 7: mount -t sysfs /sys /sys 8: echo Creating /dev 9: mount -o mode=0755 -t tmpfs /dev /dev 10: mkdir /dev/pts 11: mount -t devpts -o gid=5,mode=620 /dev/pts /dev/pts 12: mkdir /dev/shm 13: mkdir /dev/mapper 14: echo Creating initial device nodes 15: mknod /dev/null c 1 3 16: mknod /dev/zero c 1 5 17: mknod /dev/systty c 4 0 18: mknod /dev/tty c 5 0 19: mknod /dev/console c 5 1 20: mknod /dev/ptmx c 5 2 21: mknod /dev/rtc c 10 135 22: mknod /dev/tty0 c 4 0 …途中略 38: mknod /dev/ttyS3 c 4 67 39: echo Setting up hotplug. 40: hotplug 41: echo Creating block device nodes. 42: mkblkdevs 43: echo "Loading uhci-hcd.ko module" 44: insmod /lib/uhci-hcd.ko ... USB1.1 45: echo "Loading ohci-hcd.ko module" 46: insmod /lib/ohci-hcd.ko ... USB1.1 47: echo "Loading ehci-hcd.ko module" 48: insmod /lib/ehci-hcd.ko ... USB2.0 49: mount -t usbfs /proc/bus/usb /proc/bus/usb 50: echo "Loading jbd.ko module" 51: insmod /lib/jbd.ko ...................... ジャーナリング利用。ext3.ko より先である事。 52: echo "Loading ext3.ko module" 53: insmod /lib/ext3.ko ..................... Ext3 ファイルシステム 54: echo "Loading scsi_mod.ko module" 55: insmod /lib/scsi_mod.ko ................. SCSI デバイスの核 56: echo "Loading sd_mod.ko module" 57: insmod /lib/sd_mod.ko ................... これも SCSI? USBフラッシュメモリにインストールした場合、ここから 58 echo "Loading usb-storage.ko module" 59 insmod /lib/usb-storage.ko .......... USB接続ストレージ 60 echo Waiting for driver initialization. 61 stabilized /proc/bus/usb/devices ここまで追加。 62: echo "Loading libata.ko module" 63: insmod /lib/libata.ko 64: echo "Loading ahci.ko module" 65: insmod /lib/ahci.ko 66: echo Waiting for driver initialization. 67: stabilized --hash --interval 250 /proc/scsi/scsi 68: mkblkdevs 69: resume LABEL=SWAP-sdb3 70: echo Creating root device. 71: mkrootdev -t ext3 -o defaults,ro sdb2 72: echo Mounting root filesystem. 73: mount /sysroot 74: echo Setting up other filesystems. 75: setuproot 76: echo Switching to new root and running init. 77: switchroot
さて nash とは?
# bin/nash (running in test mode). Red Hat nash version 5.1.19.6 starting
ん?これ起動時にコンソールに出てる奴。
nash って何だろうと思っていたが、これだったのか…
因みに man nash は古いようで「script interpretor to interpret linuxrc images」となっている。
調べると昔のスクリプトは linuxrc だったそうな。
setquiet を呼んでいるのに echo を連発しているのはコメント代わりなのだろうか…
必要な時には setquiet を消してデバッグ出来るので良い。
黄色マーカー部はデバイス/パーティションに拠って変更せねばならない。
どうやらソースを見るしか無さそう。
RHEL5 では mkinitrd に含まれているそうで、mkinitrd-5.1.19.6-1.src.rpm をダウンロード。
ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Server/en/os/SRPMS/
RPMパッケージからファイルを取り出す。次を参考に適当な場所へ展開。
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/522rpmcpio.html
$ mkdir work
$ cd work
$ rpm2cpio ../smartmontools-5.23-1.i386.rpm | cpio -id