Patchwork [v3] initrd: add recovery feature

login
register
mail settings
Submitter Radu Moisan
Date Nov. 15, 2012, 6:06 p.m.
Message ID <1353002784-9025-1-git-send-email-radu.moisan@intel.com>
Download mbox | patch
Permalink /patch/39127/
State New
Headers show

Comments

Radu Moisan - Nov. 15, 2012, 6:06 p.m.
Allows you to use as root a partition instead of the rootfs.img
for recovering an old install, and fails safe when no rootfs is
found, dropping the user to a shell if something goes wrong.

Signed-off-by: Radu Moisan <radu.moisan@intel.com>
Signed-off-by: Alexandru Damian <alexandru.damian@intel.com>
---
 meta/recipes-core/initrdscripts/files/init-live.sh |   44 +++++++++++++++++++-
 1 file changed, 42 insertions(+), 2 deletions(-)

Patch

diff --git a/meta/recipes-core/initrdscripts/files/init-live.sh b/meta/recipes-core/initrdscripts/files/init-live.sh
index 5682fd1..3867dfd 100644
--- a/meta/recipes-core/initrdscripts/files/init-live.sh
+++ b/meta/recipes-core/initrdscripts/files/init-live.sh
@@ -68,13 +68,49 @@  fatal() {
 
 early_setup
 
+# wait for the udevd to settle
+echo "Waiting for udev to settle..."
+udevadm settle
+
 [ -z "$CONSOLE" ] && CONSOLE="/dev/console"
 
 read_args
 
-echo "Waiting for removable media..."
-while true
+# boot partiton menu, if one or more bootable partitions exist
+BOOTMENU=`ls /media/sd*/sbin/init 2>/dev/null | wc -l`
+if [ $BOOTMENU -gt 0 ]; then
+   choice=0
+   while [ $choice -le 0 ]; do
+       echo "1). boot live ramfs image"
+       count=2
+       for i in `ls /media/sd*/sbin/init 2>/dev/null | cut -d "/" -f 3`; do
+           echo $count"). boot /dev/"$i
+           choicecmd[$count]=$i
+           count=$(( count + 1))
+       done
+       echo
+       echo -n "Your choice: "
+       read choice
+   done
+
+   if [ $choice -gt 1 ]; then
+       #ROOT_MOUNT=/media/${choicecmd[${choice}]}
+       ROOT_MOUNT=none #testing
+       echo "Booting local root ... $ROOT_MOUNT"
+       if [ -d $ROOT_MOUNT ]; then
+           boot_live_root
+       else
+           fatal "Rootfs partition not mounted"
+       fi
+   fi
+fi
+
+echo -n "Waiting for removable media... "
+CNT=0
+while [ $CNT -le 3 ];
 do
+  echo -n "$CNT "
+  CNT=$(( $CNT + 1 ))
   for i in `ls /media 2>/dev/null`; do
       if [ -f /media/$i/$ROOT_IMAGE ] ; then
 		found="yes"
@@ -91,6 +127,10 @@  do
   sleep 1
 done
 
+if [ "$found" != "yes" ]; then
+   fatal "...could not mount removable media, drop to shell"
+fi
+
 case $label in
     boot)
 	mkdir $ROOT_MOUNT