diary/Kojima/2009-03-04
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[diary/Kojima]]
・P-Plamo の内部構造(その3)
P-Plamo の初期化処理を行う[[init ファイル:ftp://plamo.lin...
内容を簡単に紹介します.
なお、ここに紹介するのは2009 3/3 版の必要最小限な init で...
内容は適宜変更されますがあしからず。
実際のファイルには試行錯誤的にやってみた形跡をコメントア...
#/bin/sh
export PATH=/bin:.
mount -t proc proc /proc
mount -t sysfs sys /sys
for i in aufs.ko unlzma.ko sqlzma.ko squashfs.ko ; do
insmod /lib/modules/$i
done
# nls_euc-jp.ko needs vfat.ko
for i in nls_iso8859-1.ko nls_ascii.ko nls_cp932.ko cdro...
sg.ko fat.ko vfat.ko nls_euc-jp.ko ; do
insmod /lib/modules/$i
done
# this wait is needed for detecting USB CD-ROM via sr_mo...
sleep 10
まず,PATH変数を設定してから、proc-fs, sys-fs をマウント...
次に union mount 用の aufs.ko ドライバモジュール,lzma 圧...
sqlma.ko モジュールをロードし,最後に squashfs.ko モジュ...
や sqlzma.ko の機能を必要とするので,先に unlama.ko, sqlz...
次に iso9660 形式の DVD か VFAT 形式の USB メモリをマウン...
これらも依存関係があるので,順番を違えるとエラーになって...
# modprobe を使えば自動的に処理してくれるのですが,わざわ...
モジュールドライバをロードすると,それらのドライバによっ...
チェックするので,そのためにしばらく時間を置きます.
mount_ok=0
# check CD device
for i in hdc hda hdb hdd sr0 sr1 sr2 ; do
echo "trying CD device"
mount -t iso9660 /dev/$i /cdrom -o ro
if [ $? = "0" ]; then
if [ -f /cdrom/isolinux/rootimg.squash ]; then
echo "found cdrom on /dev/$i"
mount_ok=1
break
else
umount /cdrom
fi
fi
done
# check /dev/sdXX for USB CD device
if [ "$mount_ok" == "0" ]; then
partitions=`cat /proc/partitions | cut -b23-28 | gre...
for i in $partitions ; do
mount /dev/$i /cdrom
if [ $? = "0" ]; then
if [ -f /cdrom/isolinux/rootimg.squash ]; then
echo "found cdrom on /dev/$i"
mount_ok=1
break
else
umount /cdrom
fi
fi
done
fi
# cannot find any CD device
if [ "$mount_ok" == "0" ]; then
echo "cannot find partition include squashfs. cannot...
exec /bin/sh
fi
DVD あるいは USB メモリを /cdrom にチェックするためのルー...
そこの isolinux ディレクトリに rootimg.squash があるかで...
最初のループで IDE の hdc, hda, hdb, hdd,SCSI(SATA) の s...
見つかれば $mount_ok を 1 にして次のループを飛し,見つか...
sd デバイス(USBメモリは sd デバイスとして認識される)を順...
見つからなければ以後の処理を打ちきって /bin/sh を起動して...
一応,対話的な操作は可能なので busybox の限られたコマンド...
# mount squashfs'ed rootfs image into /loop
losetup /dev/loop0 /cdrom/isolinux/rootimg.squash
mount -t squashfs /cdrom/isolinux/rootimg.squash /loop
mount -t tmpfs none /loop/tmp
mkdir -p /loop/tmp/ow/var
mount -t aufs -o br:/loop/tmp/ow/var:/loop/var none /loo...
mkdir -p /loop/tmp/ow/usr
mount -t aufs -o br:/loop/tmp/ow/usr:/loop/usr none /loo...
mkdir -p /loop/tmp/ow/etc
mount -t aufs -o br:/loop/tmp/ow/etc:/loop/etc none /loo...
echo "copyinng modified rc.S and rc.M to /etc/rc.d/"
cp /etc/rc.S.modified /loop/etc/rc.d/rc.S
cp /etc/rc.M.modified /loop/etc/rc.d/rc.M
cp /etc/rc.4.modified /loop/etc/rc.d/rc.4
cp /etc/csh.login /loop/etc/csh.login
for i in inittab fstab passwd shadow ; do
echo "copying modified $i to /etc/$i"
cp /etc/$i /loop/etc/$i
done
rootimg.squash が見つかれば,それを /dev/loop0 に結びつけ...
この時点で,/loop の下に(squash-fs 上に構築した)ルートフ...
この squash-fs 上のルートファイルシステムの /tmp に tmpfs...
/var や /us,/etc 等,書き替えが必要となる部分のディレク...
修正が必要な設定ファイル類を initramfs/etc の下からコピー...
union mount したディレクトリに書き込んだファイルは /loop/...
元の RO なファイルは見えなくなります.以下,同様の union ...
mount -t tmpfs tmpfs /loop/dev
cp -a /dev/console /loop/dev
/loop に root partition を切り替えた際に使うことになる /l...
現在使っている /dev/console を使い続けるために /loop/dev ...
こうしておかないと root partition を切り替えた際にコンソ...
mount --move /proc /loop/proc
mount --move /sys /loop/sys
/proc と /sys を使い続けるために /loop 以下に移動させ,
# exec /bin/sh
echo "switch_root to /loop"
sleep 5
cd /loop
exec /bin/switch_root -c /dev/console . /sbin/init
"switch_root to /loop" のメッセージを出力して 5 秒後に cd...
/bin/switch_root コマンドを発行し,現在のディレクトリ(/lo...
/sbin/init を実行します.以後の処理は通常の Plamo 同様,/...
sysinit に該当する /etc/rc.d/rc.S を起動して,rc.S が ude...
コメントアウトしている exec /bin/sh を有効にすれば、必要...
必要な設定等が行われているかを調べることができます。対話...
squash_fs 上のファイルシステムに切り替えることが可能です。
#comment
終了行:
[[diary/Kojima]]
・P-Plamo の内部構造(その3)
P-Plamo の初期化処理を行う[[init ファイル:ftp://plamo.lin...
内容を簡単に紹介します.
なお、ここに紹介するのは2009 3/3 版の必要最小限な init で...
内容は適宜変更されますがあしからず。
実際のファイルには試行錯誤的にやってみた形跡をコメントア...
#/bin/sh
export PATH=/bin:.
mount -t proc proc /proc
mount -t sysfs sys /sys
for i in aufs.ko unlzma.ko sqlzma.ko squashfs.ko ; do
insmod /lib/modules/$i
done
# nls_euc-jp.ko needs vfat.ko
for i in nls_iso8859-1.ko nls_ascii.ko nls_cp932.ko cdro...
sg.ko fat.ko vfat.ko nls_euc-jp.ko ; do
insmod /lib/modules/$i
done
# this wait is needed for detecting USB CD-ROM via sr_mo...
sleep 10
まず,PATH変数を設定してから、proc-fs, sys-fs をマウント...
次に union mount 用の aufs.ko ドライバモジュール,lzma 圧...
sqlma.ko モジュールをロードし,最後に squashfs.ko モジュ...
や sqlzma.ko の機能を必要とするので,先に unlama.ko, sqlz...
次に iso9660 形式の DVD か VFAT 形式の USB メモリをマウン...
これらも依存関係があるので,順番を違えるとエラーになって...
# modprobe を使えば自動的に処理してくれるのですが,わざわ...
モジュールドライバをロードすると,それらのドライバによっ...
チェックするので,そのためにしばらく時間を置きます.
mount_ok=0
# check CD device
for i in hdc hda hdb hdd sr0 sr1 sr2 ; do
echo "trying CD device"
mount -t iso9660 /dev/$i /cdrom -o ro
if [ $? = "0" ]; then
if [ -f /cdrom/isolinux/rootimg.squash ]; then
echo "found cdrom on /dev/$i"
mount_ok=1
break
else
umount /cdrom
fi
fi
done
# check /dev/sdXX for USB CD device
if [ "$mount_ok" == "0" ]; then
partitions=`cat /proc/partitions | cut -b23-28 | gre...
for i in $partitions ; do
mount /dev/$i /cdrom
if [ $? = "0" ]; then
if [ -f /cdrom/isolinux/rootimg.squash ]; then
echo "found cdrom on /dev/$i"
mount_ok=1
break
else
umount /cdrom
fi
fi
done
fi
# cannot find any CD device
if [ "$mount_ok" == "0" ]; then
echo "cannot find partition include squashfs. cannot...
exec /bin/sh
fi
DVD あるいは USB メモリを /cdrom にチェックするためのルー...
そこの isolinux ディレクトリに rootimg.squash があるかで...
最初のループで IDE の hdc, hda, hdb, hdd,SCSI(SATA) の s...
見つかれば $mount_ok を 1 にして次のループを飛し,見つか...
sd デバイス(USBメモリは sd デバイスとして認識される)を順...
見つからなければ以後の処理を打ちきって /bin/sh を起動して...
一応,対話的な操作は可能なので busybox の限られたコマンド...
# mount squashfs'ed rootfs image into /loop
losetup /dev/loop0 /cdrom/isolinux/rootimg.squash
mount -t squashfs /cdrom/isolinux/rootimg.squash /loop
mount -t tmpfs none /loop/tmp
mkdir -p /loop/tmp/ow/var
mount -t aufs -o br:/loop/tmp/ow/var:/loop/var none /loo...
mkdir -p /loop/tmp/ow/usr
mount -t aufs -o br:/loop/tmp/ow/usr:/loop/usr none /loo...
mkdir -p /loop/tmp/ow/etc
mount -t aufs -o br:/loop/tmp/ow/etc:/loop/etc none /loo...
echo "copyinng modified rc.S and rc.M to /etc/rc.d/"
cp /etc/rc.S.modified /loop/etc/rc.d/rc.S
cp /etc/rc.M.modified /loop/etc/rc.d/rc.M
cp /etc/rc.4.modified /loop/etc/rc.d/rc.4
cp /etc/csh.login /loop/etc/csh.login
for i in inittab fstab passwd shadow ; do
echo "copying modified $i to /etc/$i"
cp /etc/$i /loop/etc/$i
done
rootimg.squash が見つかれば,それを /dev/loop0 に結びつけ...
この時点で,/loop の下に(squash-fs 上に構築した)ルートフ...
この squash-fs 上のルートファイルシステムの /tmp に tmpfs...
/var や /us,/etc 等,書き替えが必要となる部分のディレク...
修正が必要な設定ファイル類を initramfs/etc の下からコピー...
union mount したディレクトリに書き込んだファイルは /loop/...
元の RO なファイルは見えなくなります.以下,同様の union ...
mount -t tmpfs tmpfs /loop/dev
cp -a /dev/console /loop/dev
/loop に root partition を切り替えた際に使うことになる /l...
現在使っている /dev/console を使い続けるために /loop/dev ...
こうしておかないと root partition を切り替えた際にコンソ...
mount --move /proc /loop/proc
mount --move /sys /loop/sys
/proc と /sys を使い続けるために /loop 以下に移動させ,
# exec /bin/sh
echo "switch_root to /loop"
sleep 5
cd /loop
exec /bin/switch_root -c /dev/console . /sbin/init
"switch_root to /loop" のメッセージを出力して 5 秒後に cd...
/bin/switch_root コマンドを発行し,現在のディレクトリ(/lo...
/sbin/init を実行します.以後の処理は通常の Plamo 同様,/...
sysinit に該当する /etc/rc.d/rc.S を起動して,rc.S が ude...
コメントアウトしている exec /bin/sh を有効にすれば、必要...
必要な設定等が行われているかを調べることができます。対話...
squash_fs 上のファイルシステムに切り替えることが可能です。
#comment
ページ名: