diary/Kojima/2006-01-05
の編集
http://plamo.linet.gr.jp/?diary/Kojima/2006-01-05
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
-- 雛形とするページ --
diary/Template
[[diary/Kojima]] ・initramfs 年明けくらいから initramfs 回りをあれこれいじって,何とか initramfs 上 で SCSI や RAID 用のモジュールを組み込んで起動できるようになったので備忘録用のメモ. - initramfs は 2.4 カーネルまでの initrd に置き代わる機能で,initrd の ようにファイルシステムイメージを作らなくとも,必要なディレクトリとファ イルを cpio(cnew 形式 = -c or -H cnew オプションで指定) + gzipで固めることで作成可能. 今までインストーラを作る時は, あらかじめ適当なサイズのファイルを用意→ファイル上にファイルシステムを 作成→loopback でマウントしてファイルやスクリプトの操作→umount してファ イルシステムを圧縮 みたいな手順が必要だったが,これを一つのディレクトリに必要なファイルを固めて # find . | cpio -c -o | gzip > newinitrd.gz みたいに作れるのはかなり便利. - カーネルパラメータの initrd オプションで指定して渡すこともできるが, カーネルに組み込んでしまうことも可能らしい.まだこの機能は試してないけど, どういう風に使うことを想定しているのだろう? - カーネルは起動後,initramfs があればそれを自動的にメモリ上に取った rootfs としてマウントし init コマンドを実行する.init は /bin/sh へのシ ンボリックリンクにすれば対話モードで起動するし,シェルスクリプトとして 組み込みたいモジュールや実際のルートパーティションをマウントするために必 要な処理を行うことも可能 - 必要な処理を終えて実際のルートパーティションをマウントする際,initrd では pivot_root でルートファイルシステムを切り替えていたが,initramfs で switch_root という機能を使うことになる. - initramfs 上では busybox(1.1 以降) + uClibc, nash(RH製のスクリプト実 行用 minimum shell),klibc(initramfs 用の glibc2 の最小サブセット) の 3 つのツールが使えるらしい.busybox は switch_root が入っている最新版の 1.1.0-pre1 としばらく格闘したが,このバージョンの busybox は switch_root が機能しない模様.nash なら動くことを確認.klibc はまだ試し ていない. - 手元で試した init スクリプトはこんな感じ.fc4 の initrd に入っていた ものを適当に切り貼り.fc4 の場合はコメントアウトしているところで udev を使って動的にデバイスファイルを作るが,Plamo の場合は initramfs 上の /dev 以下に必要なデバイスファイル(ディスク回り用中心でいいのかな?) を 用意しておく必要あり.あちこちに sleep が入っているのは動作確認用. #!/bin/nash mount -t proc /proc /proc setquiet echo Mounted /proc filesystem echo Mounting sysfs mount -t sysfs /sys /sys # echo Creating /dev # mount -o mode=0755 -t tmpfs /dev /dev # mknod /dev/console c 5 1 # mknod /dev/null c 1 3 # mknod /dev/zero c 1 5 # mkdir /dev/pts # mkdir /dev/shm # echo Starting udev # /sbin/udevstart # echo -n "/sbin/hotplug" > /proc/sys/kernel/hotplug echo "Loading SCSI modules" insmod /lib/scsi_mod.ko insmod /lib/sd_mod.ko insmod /lib/mptbase.ko insmod /lib/mptscsih.ko sleep 5 echo "Loading md modules" insmod /lib/md.ko insmod /lib/raid1.ko mdadm -A /dev/md0 sleep 10 echo "Loading LVM modules" insmod /lib/dm-mod.ko mkdmnod sleep 30 lvm vgscan --ignorelockingfailure lvchange -ay --ignorelockingfailure /dev/MyLV/lvol0 sleep 30 echo Creating root device mkrootdev /dev/root echo Mounting root filesystem mount -o defaults --ro -t reiserfs /dev/root /sysroot sleep 10 echo Switching to new root switchroot --movedev /sysroot mkdmnod とか mkrootdev,switchroot は nash が提供している機能だが,イマ イチ何をどう操作しているのか分らない.man ページくらいしか解説がない のでソースを見るしかないかな. initramfs の正式な解説文書も 2.6.15 になって ようやく Documents/filesytem に入った(これがあったのでイジる気になった)ような ところだから,ある意味 black magic な世界なのかも知れん..
タイムスタンプを変更しない
[[diary/Kojima]] ・initramfs 年明けくらいから initramfs 回りをあれこれいじって,何とか initramfs 上 で SCSI や RAID 用のモジュールを組み込んで起動できるようになったので備忘録用のメモ. - initramfs は 2.4 カーネルまでの initrd に置き代わる機能で,initrd の ようにファイルシステムイメージを作らなくとも,必要なディレクトリとファ イルを cpio(cnew 形式 = -c or -H cnew オプションで指定) + gzipで固めることで作成可能. 今までインストーラを作る時は, あらかじめ適当なサイズのファイルを用意→ファイル上にファイルシステムを 作成→loopback でマウントしてファイルやスクリプトの操作→umount してファ イルシステムを圧縮 みたいな手順が必要だったが,これを一つのディレクトリに必要なファイルを固めて # find . | cpio -c -o | gzip > newinitrd.gz みたいに作れるのはかなり便利. - カーネルパラメータの initrd オプションで指定して渡すこともできるが, カーネルに組み込んでしまうことも可能らしい.まだこの機能は試してないけど, どういう風に使うことを想定しているのだろう? - カーネルは起動後,initramfs があればそれを自動的にメモリ上に取った rootfs としてマウントし init コマンドを実行する.init は /bin/sh へのシ ンボリックリンクにすれば対話モードで起動するし,シェルスクリプトとして 組み込みたいモジュールや実際のルートパーティションをマウントするために必 要な処理を行うことも可能 - 必要な処理を終えて実際のルートパーティションをマウントする際,initrd では pivot_root でルートファイルシステムを切り替えていたが,initramfs で switch_root という機能を使うことになる. - initramfs 上では busybox(1.1 以降) + uClibc, nash(RH製のスクリプト実 行用 minimum shell),klibc(initramfs 用の glibc2 の最小サブセット) の 3 つのツールが使えるらしい.busybox は switch_root が入っている最新版の 1.1.0-pre1 としばらく格闘したが,このバージョンの busybox は switch_root が機能しない模様.nash なら動くことを確認.klibc はまだ試し ていない. - 手元で試した init スクリプトはこんな感じ.fc4 の initrd に入っていた ものを適当に切り貼り.fc4 の場合はコメントアウトしているところで udev を使って動的にデバイスファイルを作るが,Plamo の場合は initramfs 上の /dev 以下に必要なデバイスファイル(ディスク回り用中心でいいのかな?) を 用意しておく必要あり.あちこちに sleep が入っているのは動作確認用. #!/bin/nash mount -t proc /proc /proc setquiet echo Mounted /proc filesystem echo Mounting sysfs mount -t sysfs /sys /sys # echo Creating /dev # mount -o mode=0755 -t tmpfs /dev /dev # mknod /dev/console c 5 1 # mknod /dev/null c 1 3 # mknod /dev/zero c 1 5 # mkdir /dev/pts # mkdir /dev/shm # echo Starting udev # /sbin/udevstart # echo -n "/sbin/hotplug" > /proc/sys/kernel/hotplug echo "Loading SCSI modules" insmod /lib/scsi_mod.ko insmod /lib/sd_mod.ko insmod /lib/mptbase.ko insmod /lib/mptscsih.ko sleep 5 echo "Loading md modules" insmod /lib/md.ko insmod /lib/raid1.ko mdadm -A /dev/md0 sleep 10 echo "Loading LVM modules" insmod /lib/dm-mod.ko mkdmnod sleep 30 lvm vgscan --ignorelockingfailure lvchange -ay --ignorelockingfailure /dev/MyLV/lvol0 sleep 30 echo Creating root device mkrootdev /dev/root echo Mounting root filesystem mount -o defaults --ro -t reiserfs /dev/root /sysroot sleep 10 echo Switching to new root switchroot --movedev /sysroot mkdmnod とか mkrootdev,switchroot は nash が提供している機能だが,イマ イチ何をどう操作しているのか分らない.man ページくらいしか解説がない のでソースを見るしかないかな. initramfs の正式な解説文書も 2.6.15 になって ようやく Documents/filesytem に入った(これがあったのでイジる気になった)ような ところだから,ある意味 black magic な世界なのかも知れん..
テキスト整形のルールを表示する