From: <bl...@sy...> - 2007-09-07 07:33:19
|
Author: bli Date: 2007-09-07 02:32:56 -0500 (Fri, 07 Sep 2007) New Revision: 4267 Modified: trunk/initrd_source/skel/etc/init.d/functions trunk/initrd_source/skel/init Log: New function parse_tmpfs_opts() to parse tmpfs options and store them in the $tmpfs_opts env variable. This is to fix the bug where if initrd.img is cpio-based, the init script tries to use $tmpfs_opts which has not been declared yet. Also replaced echo with logmsg in init script. Modified: trunk/initrd_source/skel/etc/init.d/functions =================================================================== --- trunk/initrd_source/skel/etc/init.d/functions 2007-09-07 07:27:24 UTC (rev 4266) +++ trunk/initrd_source/skel/etc/init.d/functions 2007-09-07 07:32:56 UTC (rev 4267) @@ -114,7 +114,7 @@ ARCH=ppc64-iSeries logmsg "Detected ppc64 is really an iSeries partition..." fi - if [ "`grep machine /proc/cpuinfo | cut -d ' ' -f 2`" = "PS3PF" ]; then + if grep -qs PS3 /proc/cpuinfo; then ARCH=ppc64-ps3 fi fi @@ -682,20 +682,17 @@ # ################################################################################ # -# Switch root to tmpfs -# -switch_root_to_tmpfs() { - local MODULE=tmpfs +# Parse tmpfs options from /proc/cpuinfo +# +parse_tmpfs_opts() { logmsg - logmsg switch_root_to_tmpfs - logmsg - logmsg "Loading $MODULE... " - modprobe $MODULE 2>/dev/null && logmsg "done!" || logmsg "Didn't load -- assuming it's built into the kernel." + logmsg parse_tmpfs_opts mount_proc tmpfs_size=$(tr ' ' '\n' < /proc/cmdline | grep tmpfs_size\= | sed 's/.*=//') tmpfs_nr_blocks=$(tr ' ' '\n' < /proc/cmdline | grep tmpfs_nr_blocks\= | sed 's/.*=//') tmpfs_nr_inodes=$(tr ' ' '\n' < /proc/cmdline | grep tmpfs_nr_inodes\= | sed 's/.*=//') tmpfs_mode=$(tr ' ' '\n' < /proc/cmdline | grep tmpfs_mode\= | sed 's/.*=//') + umount /proc if [ "$tmpfs_size" != "" ]; then tmpfs_opts="size=$tmpfs_size" @@ -703,45 +700,62 @@ if [ "$tmpfs_nr_blocks" != "" ]; then if [ "$tmpfs_opts" != "" ]; then - tmpfs_opts="${tmpfs_opts},nr_blocks=$tmpfs_nr_blocks" + tmpfs_opts="${tmpfs_opts},nr_blocks=$tmpfs_nr_blocks" else tmpfs_opts="nr_blocks=$tmpfs_nr_blocks" - fi + fi fi if [ "$tmpfs_nr_inodes" != "" ]; then if [ "$tmpfs_opts" != "" ]; then - tmpfs_opts="${tmpfs_opts},nr_inodes=$tmpfs_nr_inodes" + tmpfs_opts="${tmpfs_opts},nr_inodes=$tmpfs_nr_inodes" else tmpfs_opts="nr_inodes=$tmpfs_nr_inodes" - fi + fi fi if [ "$tmpfs_mode" != "" ]; then if [ "$tmpfs_opts" != "" ]; then - tmpfs_opts="${tmpfs_opts},mode=$tmpfs_mode" + tmpfs_opts="${tmpfs_opts},mode=$tmpfs_mode" else tmpfs_opts="mode=$tmpfs_mode" - fi + fi fi if [ "$tmpfs_opts" != "" ]; then tmpfs_opts="-o $tmpfs_opts" fi + unset tmpfs_size + unset tmpfs_nr_blocks + unset tmpfs_nr_inodes + unset tmpfs_mode +} +# +################################################################################ +# +# Switch root to tmpfs +# +switch_root_to_tmpfs() { + local MODULE=tmpfs + logmsg + logmsg switch_root_to_tmpfs + logmsg + logmsg "Loading $MODULE... " + modprobe $MODULE 2>/dev/null && logmsg "done!" || logmsg "Didn't load -- assuming it's built into the kernel." + parse_tmpfs_opts + # Switch root over to tmpfs so we don't have to worry about the size of # the tarball and binaries that users may decide to copy over. -BEF- if [ -d /old_root ]; then logmsg logmsg "already switched to tmpfs..." - umount /proc else logmsg logmsg "switching root to tmpfs..." mkdir -p /new_root || shellout mount tmpfs /new_root -t tmpfs $tmpfs_opts || shellout - umount /proc cd / || shellout cp -a `/bin/ls | grep -v new_root` /new_root/ || shellout cd /new_root || shellout @@ -749,10 +763,6 @@ pivot_root . old_root || switch_root fi - unset tmpfs_size - unset tmpfs_nr_blocks - unset tmpfs_nr_inodes - unset tmpfs_mode unset tmpfs_opts } # Modified: trunk/initrd_source/skel/init =================================================================== --- trunk/initrd_source/skel/init 2007-09-07 07:27:24 UTC (rev 4266) +++ trunk/initrd_source/skel/init 2007-09-07 07:32:56 UTC (rev 4267) @@ -4,8 +4,10 @@ . /etc/init.d/functions -echo "initramfs detected: init called" +parse_tmpfs_opts +logmsg "initramfs detected: init called" + mkdir -p /new_root || shellout mount tmpfs /new_root -t tmpfs $tmpfs_opts || shellout cd / || shellout @@ -15,5 +17,5 @@ exec switch_root . /linuxrc -echo "error: switch_root failed." +logmsg "error: switch_root failed." shellout |