altboot: Update to latest version
authorMatthias Hentges <oe@hentges.net>
Tue, 27 Mar 2007 22:22:45 +0000 (22:22 +0000)
committerMatthias Hentges <oe@hentges.net>
Tue, 27 Mar 2007 22:22:45 +0000 (22:22 +0000)
14 files changed:
packages/altboot/files/altboot-menu/Advanced/55-bin-sh
packages/altboot/files/altboot.func
packages/altboot/files/init.altboot
packages/altboot/files/nslu2le/.mtn2git_empty [new file with mode: 0644]
packages/altboot/files/nslu2le/altboot-2.6.cfg [new file with mode: 0644]
packages/altboot/files/nslu2le/altboot-handlers/.mtn2git_empty [new file with mode: 0644]
packages/altboot/files/nslu2le/altboot-handlers/05-USB-Storage [new file with mode: 0644]
packages/altboot/files/nslu2le/altboot-handlers/10-Onboard-Flash [new file with mode: 0644]
packages/altboot/files/nslu2le/altboot-menu/.mtn2git_empty [new file with mode: 0644]
packages/altboot/files/nslu2le/altboot-menu/00-Default [new file with mode: 0644]
packages/altboot/files/nslu2le/altboot-menu/30-bootUSB-Stick [new file with mode: 0644]
packages/altboot/files/nslu2le/altboot-menu/55-bin-sh [new file with mode: 0644]
packages/altboot/files/nslu2le/altboot.rc/.mtn2git_empty [new file with mode: 0644]
packages/altboot/files/set-bootdev [new file with mode: 0755]

index 6c9aef3..e4fe99e 100644 (file)
@@ -7,7 +7,7 @@ run_module() {
        
        test -e /etc/altboot.func && . /etc/altboot.func || die "ERROR: /etc/altboot.func not found. Check your installation!"
        
-       test "$ASK_PW_ON_BOOT" != "yes" && verify_master_pw >/dev/tty0
+       test "$ASK_PW_ON_BOOT" != "yes" && verify_master_pw >/dev/$OUT_TTY
        
        # Mount /proc, etc
        init_rootfs
@@ -15,7 +15,7 @@ run_module() {
        echo -e "\nBoot system with 'exec /sbin/init 5'\n"
        while true
        do
-               exec $SH_SHELL </dev/tty0 >/dev/tty0 2>&1
+               exec $SH_SHELL </dev/$OUT_TTY >/dev/$OUT_TTY 2>&1
                echo "WARNING: Shell was killed!"
        done
 }
index e990a06..ae38c5b 100644 (file)
@@ -392,7 +392,7 @@ verify_master_pw() {
        
        test -e /etc/altboot.pwd && . /etc/altboot.pwd
        
-       if ! test -z "$MASTER_PASSWORD"
+       if test -n "$MASTER_PASSWORD" -a "$MASTER_PASSWORD" != "[none]"
        then
                auth_timeout="3"
 
index 3086802..74200d1 100644 (file)
@@ -90,7 +90,7 @@ show_menu() {
                if ! test -d "$1/$file"
                then                    
                        # NOTE: It is important to use "." here so that the script inherits
-                       # the shell environment / all set variables!                                            
+                       # the shell environment / all set variables!                                    
                        M_TITLE="`. $1/$file title`"
                        FLAGS="`$1/$file flags`"
                        
@@ -109,6 +109,8 @@ show_menu() {
                fi
        done
 
+#      debug_echo "FILES READ"
+
        # Display directories below /etc/altboot-menu as menu-item
        # and add all scripts inside the directory to m_entry
        for dir in `ls -1`
@@ -159,6 +161,8 @@ show_menu() {
                fi
        done
 
+#      debug_echo "DIRS READ"
+
        echo ""         
 }
 
@@ -491,6 +495,7 @@ fi
 # The NSLU2 is an exception as it uses the way-ugly busybox "ps"
 #
 
+mount | grep -q "^/proc" || mount -t proc proc /proc
 MACHINE="`cat /proc/cpuinfo | sed -n "/^Hardware/s/.*\:\ \(.*\)/\1/p"`"
 
 case "$MACHINE" in
@@ -507,6 +512,12 @@ case "$MACHINE" in
                ;;
 esac
 
+if test "`basename "$0"`" = "altboot"
+then
+       show_menu /etc/altboot-menu 
+       exit 0
+fi
+
 if test "$user_called" = "1"
 then
        echo "altboot: Using real init [$REAL_INIT] [$*] [`ps |wc -l|tr -d " "`] *" >"$OUT_TTY"
diff --git a/packages/altboot/files/nslu2le/.mtn2git_empty b/packages/altboot/files/nslu2le/.mtn2git_empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/packages/altboot/files/nslu2le/altboot-2.6.cfg b/packages/altboot/files/nslu2le/altboot-2.6.cfg
new file mode 100644 (file)
index 0000000..626c543
--- /dev/null
@@ -0,0 +1,55 @@
+#
+# Altboot machine configuration for: NSLU2 / Kernel 2.6
+#
+
+# Handled by /sbin/init.altboot
+# Allow booting images from SD or CF instead of booting
+# the ROM. 
+ENABLE_ALTBOOT="yes"
+
+# If set to "0" the menu will always be shown, if set to
+# "[none]" there will be no menu and no delay
+TIMEOUT="[none]"
+
+REAL_INIT="/sbin/init.sysvinit"
+SH_SHELL="/bin/sh"
+
+ENABLE_SOUND="no"
+
+IMAGE_PATH="boot-images"
+IMAGE_TYPE="ext2"
+FSCK_IMAGES="yes"
+
+
+# Can't do that due to missing console
+ENABLE_IMAGECONF="no"
+
+SD_DEVICE=""
+SD_KERNEL_MODULE=""
+
+
+USB_HOST_AVAILABLE="yes"
+USB_STORAGE_MODULES="ohci_hcd usb_storage sd_mod"
+USB_STORAGE_PARTITION="/dev/sda1"
+USB_STORAGE_WAIT="4"
+
+USB_NETWORKING_AVAILABLE="no"
+USB_NW_MODULES="usbcore pxa27x_udc ohci-hcd g_ether"
+USB_NW_DEVICE="usb0"
+
+INIT_RUNLEVEL="3"
+NO_GUI_RL=""
+
+# The if set to "", altboot will force you to set a master password on 
+# first-boot
+MASTER_PASSWORD="[none]"
+ASK_PW_ON_BOOT="no"
+
+SD_MOUNTPOINT="/media/card"
+CF_MOUNTPOINT="/media/cf"
+
+DISABLE_SD_BOOT="yes"
+DISABLE_CF_BOOT="yes"
+DISABLE_NOGUI_BOOT="yes"
+DISABLE_BINSH_BOOT="yes"
+DISABLE_INSTTGZ_BOOT="yes"
diff --git a/packages/altboot/files/nslu2le/altboot-handlers/.mtn2git_empty b/packages/altboot/files/nslu2le/altboot-handlers/.mtn2git_empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/packages/altboot/files/nslu2le/altboot-handlers/05-USB-Storage b/packages/altboot/files/nslu2le/altboot-handlers/05-USB-Storage
new file mode 100644 (file)
index 0000000..50d35ed
--- /dev/null
@@ -0,0 +1,90 @@
+#!/bin/sh
+# NOTE: Ported to altboot by CoreDump <oe@hentges.net>
+# Based on the original turnup helper script.
+#
+# All parts by Matthias 'CoreDump' Hentges are hereby placed
+# under the terms of the GPL
+#
+# boot from the hard disk partition "$1" (which
+# must be given) using options from the rest of
+# the command line.
+#
+
+M_TITLE="Boot USB Storage"
+test "$USB_HOST_AVAILABLE" = "yes" || exit 0
+
+run_module() {
+       x=x
+}
+
+case "$1" in
+title) echo "$M_TITLE" ; exit 0 ;;
+run)   run_module "$2";;
+esac
+
+nslu2_feeback heartbeat
+
+bootdev_data="$*"
+bootdev_mode="`echo "$bootdev_data" | awk '{print $1}'`"
+bootdev_name="`echo "$bootdev_data" | awk '{print $2}'`"
+bootdev_uuid="`echo "$bootdev_data" | awk '{print $3}'`"                               
+
+
+# Use the standard init path (see /etc/init.d/rcS)
+export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+#
+# Load the helper functions
+. /etc/default/functions
+. /etc/default/modulefunctions
+#
+leds boot system
+#
+if test -n "$1"
+then
+       device="$bootdev_name"
+       UUID="$bootdev_uuid"
+       
+       shift
+        # proc is needed for UUID mount and module load
+        mount -t proc proc /proc
+        # load USB & SCSI storage modules (/proc required!)
+        echo "boot: loading modules required for disk boot"
+        loaddiskmods
+       # waiting for disk (FIXME)
+       sleep=6
+       test "$sleep" -gt 0 && sleep "$sleep"
+       #
+       # fire the boot
+       echo "boot: rootfs: mount $* $device [$UUID]"
+       #
+       # Mount read-write because before exec'ing init
+       # If a UUID is given (in the environment) this
+       # is used in preference to the device, but if
+       # the UUID mount fails a standard device mount
+       # is attempted.
+       if      test -n "$UUID" &&
+               mount "$@" -U "$UUID" /mnt ||
+               mount "$@" "$device" /mnt
+       then
+               # checkmount checks for sh, chroot, init
+               # and /mnt (i.e. /mnt/mnt in this case)
+               if checkmount /mnt
+               then
+                       # pivot to /initrd if available, else /mnt
+                       cd /
+                       if test -d /mnt/initrd
+                       then
+                               swivel mnt initrd
+                       else
+                               swivel mnt mnt
+                       fi
+                       # swivel failed
+               fi
+               # Failure: unmount the partition
+               umount /mnt
+       fi
+fi
+
+# fallback - use the flash boot
+nslu2_feeback failure
+exec /boot/flash
diff --git a/packages/altboot/files/nslu2le/altboot-handlers/10-Onboard-Flash b/packages/altboot/files/nslu2le/altboot-handlers/10-Onboard-Flash
new file mode 100644 (file)
index 0000000..394279c
--- /dev/null
@@ -0,0 +1,18 @@
+#! /bin/sh
+#
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2007
+# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
+#
+# Filename: 10-Onboard-Flash
+# Date: 20070218 (YMD)
+
+leds beep
+. /etc/default/functions
+leds boot system
+test -x /sbin/init && exec /sbin/init
+# fallback if /sbin/init has been deleted (bad!)
+leds boot system panic
+exec <>/dev/console >&0 2>&0
+test -x /sbin/sulogin && exec /sbin/sulogin
+test -x /bin/sh && exec /bin/sh
+exit 1
diff --git a/packages/altboot/files/nslu2le/altboot-menu/.mtn2git_empty b/packages/altboot/files/nslu2le/altboot-menu/.mtn2git_empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/packages/altboot/files/nslu2le/altboot-menu/00-Default b/packages/altboot/files/nslu2le/altboot-menu/00-Default
new file mode 100644 (file)
index 0000000..cb06661
--- /dev/null
@@ -0,0 +1,17 @@
+# !/bin/sh
+M_TITLE="Flash"
+
+
+run_module() {
+       leds beep
+       leds boot system
+       exec $REAL_INIT "$INIT_RUNLEVEL"
+       exit 0
+}
+
+case "$1" in
+title) echo "$M_TITLE";;
+run)   run_module;;
+*)     echo "Unknown parameter [$1]";;
+esac
+
diff --git a/packages/altboot/files/nslu2le/altboot-menu/30-bootUSB-Stick b/packages/altboot/files/nslu2le/altboot-menu/30-bootUSB-Stick
new file mode 100644 (file)
index 0000000..c6c215e
--- /dev/null
@@ -0,0 +1,174 @@
+# !/bin/sh
+#
+# Copyright Matthias Hentges (c) 2005
+#
+# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the GPL)
+
+
+M_TITLE="USB Attached Storage"
+
+test "$USB_HOST_AVAILABLE" = "yes" || exit 0
+       
+# This function is activated by init.altboot by calling this script with the "run" option
+run_module() {
+       
+       test -e /etc/altboot.func && . /etc/altboot.func || die "ERROR: /etc/altboot.func not found. Check your installation!"
+       
+       # Mount /proc, etc
+       init_rootfs
+
+       echo -e "\nStarting USB..."
+       
+       for module in $USB_STORAGE_MODULES
+       do
+               echo -en "\t - $module: "
+               modprobe "$module" >/dev/null 2>&1 && echo ok || die "Failed to modprobe [$module]"
+       done
+
+       echo ""
+       scan_devices
+       usb_show_menu 
+               
+#      echo -n "Mounting $USB_STORAGE_PARTITION..."  >/dev/tty0
+#      
+#      mkdir -p /media/usb-storage >/dev/null 2>&1
+#      
+#      sleep "$USB_STORAGE_WAIT"
+#      
+#      /bin/mount -t auto -o defaults,noatime $USB_STORAGE_PARTITION /media/usb-storage >/dev/null 2>&1 && echo ok  >/dev/tty0|| die "/bin/mount -t auto -o defaults,noatime $SD_DEVICE $SD_MOUNTPOINT failed"
+#              
+#      echo "" 
+#      
+#      # Check for a real fs and loop-images.
+#      check_target "/media/usb-storage" >/dev/tty0            
+}
+
+scan_devices() {
+       reset_pref "available_devices"
+
+       cnt=1   
+       
+       for scsi_disk in `ls -1 /sys/block/ | grep ^sd`
+       do
+               scsi_disk_name="`echo "$scsi_disk" | awk '{printf("%s\n",toupper($0))}'`"
+               test -e /sys/block/$scsi_disk/device/vendor && HDD_VENDOR="`cat /sys/block/$scsi_disk/device/vendor | sed "s/\ $//"`" 
+               test -z "$HDD_VENDOR" && HDD_VENDOR="Unknown Vendor"
+
+               test -e /sys/block/$scsi_disk/device/model && HDD_MODEL="`cat /sys/block/$scsi_disk/device/model`" 
+               test -z "$HDD_MODEL" && HDD_MODEL="Unknown Model"
+
+               scsi_disk_partition_cnt="`ls -1 /sys/block/$scsi_disk | grep ^$scsi_disk | wc -l | tr -d " "`"
+               test "$scsi_disk_partition_cnt" -gt 1 && scsi_disk_partition_cnt="$scsi_disk_partition_cnt partitions" || scsi_disk_partition_cnt="$scsi_disk_partition_cnt partition"
+               
+               set_pref "available_devices" "$cnt" "$scsi_disk_name ( $HDD_VENDOR $HDD_MODEL with $scsi_disk_partition_cnt)"
+               set_pref "available_devices_short" "$cnt" "$scsi_disk"  
+               set_pref "available_devices_type" "$cnt" "usb"  
+               
+               let cnt=$cnt+1
+       done
+       
+}
+
+usb_show_menu() {              
+
+       cnt2=0 ; let cnt=$cnt-1 
+       while test "$cnt" != "$cnt2"
+       do
+               let cnt2=$cnt2+1
+               get_pref "available_devices" "$cnt2" dev
+               
+               echo -e "\t[$cnt2] - $dev"                      
+       done
+       
+       while test -z "$selected_dev"
+       do      
+               echo -en "\nYour choice: "
+               read junk
+               get_pref "available_devices" "$junk" selected_dev
+               get_pref "available_devices_type" "$junk" part_mode
+               
+#              debug_echo "show_menu(): selected: [$selected_dev]"
+       done
+       
+       if ( echo "$selected_dev" | grep -q "^Flash" )
+       then
+               boot_from flash         
+       else
+               get_pref "available_devices_short" "$junk" selected_dev
+#              debug_echo "show_menu(): selected_devices_short: [$selected_dev]"
+               
+               partitions="`ls -1 /sys/block/$selected_dev|grep ^$selected_dev`"
+               test -z "$partitions" && die "No partitions found on /dev/$selected_dev!"
+               
+               
+               echo -e "\nPlease select a partition on $selected_dev to boot from:\n"
+               
+               cnt=1
+               for partition in $partitions
+               do                      
+                       # We assume that partitions with a "size" < 10 are extended partitions
+                       # and should not be listed. TYPE=swap is blacklisted as well.
+                       part_size="`cat /sys/block/$selected_dev/$partition/size`"
+                       part_type="`blkid -s TYPE -o value /dev/$partition`"            
+                       
+                       if test "$part_size" -gt 10 -a "$part_type" != "swap"
+                       then
+                               let part_size="($part_size/2)/1000"
+                               echo -e "\t[$cnt] $partition (~ ${part_size}Mb, $part_type)"    
+                               set_pref "available_partitions" "$cnt" "$partition"
+                               
+                               let cnt=$cnt+1                  
+                       fi
+               done
+               
+               while test -z "$selected_partition"
+               do
+                       echo -en "\nYour choice: "      
+                       read junk       
+                       get_pref "available_partitions" "$junk" selected_partition                                              
+               done
+               
+               part_uuid="`blkid -c /dev/null -s UUID -o value /dev/$selected_partition`"
+                                       
+               boot_from "$part_mode" "$selected_partition" "$part_uuid"               
+       fi                              
+}      
+
+boot_from() {
+       debug_echo "boot_from() [$*]"
+       
+       part_mode="$1"
+       part_name="$2"
+       part_uuid="$3"
+       
+       case "$part_mode" in 
+       usb)            umount /tmp/mnt.set-bootdev >/dev/null 2>&1
+                       rm -rf /tmp/mnt.set-bootdev ; mkdir -p /tmp/mnt.set-bootdev
+
+                       if ! ( mount -U "$part_uuid" /tmp/mnt.set-bootdev )
+                       then
+                               echo "** Note: UUID mount for $part_name failed"
+                               mount /dev/$part_name /tmp/mnt.set-bootdev && echo "** Note: Normal mount for $part_name successful"
+                       fi
+
+                       if ! test -e /tmp/mnt.set-bootdev/sbin/init.sysvinit
+                       then
+                               copy_rootfs /tmp/mnt.set-bootdev/
+                       else
+                               umount /tmp/mnt.set-bootdev
+                               echo -e "\nSetting /dev/$part_name as boot-partition"
+                               echo "3 $part_name $part_uuid" > /etc/altboot.last
+                       fi
+                       ;;
+       esac
+}
+
+copy_rootfs() {
+       debug_echo "copy_rootfs() [$*]"
+}
+
+case "$1" in
+title) echo "$M_TITLE";;
+run)   run_module "$2";;
+esac
+
diff --git a/packages/altboot/files/nslu2le/altboot-menu/55-bin-sh b/packages/altboot/files/nslu2le/altboot-menu/55-bin-sh
new file mode 100644 (file)
index 0000000..1c3fccd
--- /dev/null
@@ -0,0 +1,27 @@
+# !/bin/sh
+M_TITLE="init=/bin/sh"
+
+test "$DISABLE_BINSH_BOOT" = yes && exit 0
+
+run_module() {
+       
+       test -e /etc/altboot.func && . /etc/altboot.func || die "ERROR: /etc/altboot.func not found. Check your installation!"
+       
+       test "$ASK_PW_ON_BOOT" != "yes" && verify_master_pw >$OUT_TTY
+       
+       # Mount /proc, etc
+       init_rootfs
+       
+       echo -e "\nBoot system with 'exec /sbin/init 5'\n"
+       while true
+       do
+               exec $SH_SHELL <$OUT_TTY >$OUT_TTY 2>&1
+               echo "WARNING: Shell was killed!"
+       done
+}
+
+case "$1" in
+title) echo "$M_TITLE";;
+run)   run_module;;
+esac
+
diff --git a/packages/altboot/files/nslu2le/altboot.rc/.mtn2git_empty b/packages/altboot/files/nslu2le/altboot.rc/.mtn2git_empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/packages/altboot/files/set-bootdev b/packages/altboot/files/set-bootdev
new file mode 100755 (executable)
index 0000000..60d0283
--- /dev/null
@@ -0,0 +1,150 @@
+#!/bin/sh
+
+VERSION="0.0.1"
+ENABLE_DEBUG="yes"
+
+die() {
+       echo -e "ERROR: $1" 
+       exit 1
+}
+
+. /etc/altboot.func || die "/etc/altboot.func is missing!"
+test -d /sys/block || die "Sysfs problem? (/sys/block not found)"
+
+debug_echo() {
+       test "$ENABLE_DEBUG" = "yes" && echo -e "${C_YELLOW}DEBUG:${C_RESET}${C_WHITE} $1 ${C_RESET}" 
+}
+
+scan_devices() {
+       reset_pref "available_devices"
+
+       cnt=1   
+       set_pref "available_devices" "$cnt" "Flash" ; let cnt=$cnt+1
+       
+       for scsi_disk in `ls -1 /sys/block/ | grep ^sd`
+       do
+               scsi_disk_name="`echo "$scsi_disk" | awk '{printf("%s\n",toupper($0))}'`"
+               test -e /sys/block/$scsi_disk/device/vendor && HDD_VENDOR="`cat /sys/block/$scsi_disk/device/vendor | sed "s/\ $//"`" 
+               test -z "$HDD_VENDOR" && HDD_VENDOR="Unknown Vendor"
+
+               test -e /sys/block/$scsi_disk/device/model && HDD_MODEL="`cat /sys/block/$scsi_disk/device/model`" 
+               test -z "$HDD_MODEL" && HDD_MODEL="Unknown Model"
+
+               scsi_disk_partition_cnt="`ls -1 /sys/block/$scsi_disk | grep ^$scsi_disk | wc -l | tr -d " "`"
+               test "$scsi_disk_partition_cnt" -gt 1 && scsi_disk_partition_cnt="$scsi_disk_partition_cnt partitions" || scsi_disk_partition_cnt="$scsi_disk_partition_cnt partition"
+               
+               set_pref "available_devices" "$cnt" "$scsi_disk_name ( $HDD_VENDOR $HDD_MODEL with $scsi_disk_partition_cnt)"
+               set_pref "available_devices_short" "$cnt" "$scsi_disk"  
+               set_pref "available_devices_type" "$cnt" "usb"  
+               
+               let cnt=$cnt+1
+       done
+       
+}
+       
+show_menu() {          
+       echo -e "\nset-bootdev v$VERSION\n"     
+
+       echo -e "Please select the device you wish to boot from:\n"
+       
+       cnt2=0 ; let cnt=$cnt-1 
+       while test "$cnt" != "$cnt2"
+       do
+               let cnt2=$cnt2+1
+               get_pref "available_devices" "$cnt2" dev
+               
+               echo -e "\t[$cnt2] - $dev"                      
+       done
+       
+       while test -z "$selected_dev"
+       do      
+               echo -en "\nYour choice: "
+               read junk
+               get_pref "available_devices" "$junk" selected_dev
+               get_pref "available_devices_type" "$junk" part_mode
+               
+#              debug_echo "show_menu(): selected: [$selected_dev]"
+       done
+       
+       if ( echo "$selected_dev" | grep -q "^Flash" )
+       then
+               boot_from flash         
+       else
+               get_pref "available_devices_short" "$junk" selected_dev
+#              debug_echo "show_menu(): selected_devices_short: [$selected_dev]"
+               
+               partitions="`ls -1 /sys/block/$selected_dev|grep ^$selected_dev`"
+               test -z "$partitions" && die "No partitions found on /dev/$selected_dev!"
+               
+               
+               echo -e "\nPlease select a partition on $selected_dev to boot from:\n"
+               
+               cnt=1
+               for partition in $partitions
+               do                      
+                       # We assume that partitions with a "size" < 10 are extended partitions
+                       # and should not be listed. TYPE=swap is blacklisted as well.
+                       part_size="`cat /sys/block/$selected_dev/$partition/size`"
+                       part_type="`blkid -s TYPE -o value /dev/$partition`"            
+                       
+                       if test "$part_size" -gt 10 -a "$part_type" != "swap"
+                       then
+                               let part_size="($part_size/2)/1000"
+                               echo -e "\t[$cnt] $partition (~ ${part_size}Mb, $part_type)"    
+                               set_pref "available_partitions" "$cnt" "$partition"
+                               
+                               let cnt=$cnt+1                  
+                       fi
+               done
+               
+               while test -z "$selected_partition"
+               do
+                       echo -en "\nYour choice: "      
+                       read junk       
+                       get_pref "available_partitions" "$junk" selected_partition                                              
+               done
+               
+               part_uuid="`blkid -c /dev/null -s UUID -o value /dev/$selected_partition`"
+                                       
+               boot_from "$part_mode" "$selected_partition" "$part_uuid"               
+       fi                              
+}      
+
+boot_from() {
+       debug_echo "boot_from() [$*]"
+       
+       part_mode="$1"
+       part_name="$2"
+       part_uuid="$3"
+       
+       case "$part_mode" in 
+       usb)            umount /tmp/mnt.set-bootdev >/dev/null 2>&1
+                       rm -rf /tmp/mnt.set-bootdev ; mkdir -p /tmp/mnt.set-bootdev
+
+                       if ! ( mount -U "$part_uuid" /tmp/mnt.set-bootdev )
+                       then
+                               echo "** Note: UUID mount for $part_name failed"
+                               mount /dev/$part_name /tmp/mnt.set-bootdev && echo "** Note: Normal mount for $part_name successful"
+                       fi
+
+                       if ! test -e /tmp/mnt.set-bootdev/sbin/init.sysvinit
+                       then
+                               copy_rootfs /tmp/mnt.set-bootdev/
+                       else
+                               umount /tmp/mnt.set-bootdev
+                               echo -e "\nSetting /dev/$part_name as boot-partition"
+                               echo "$part_mode $part_name $part_uuid" > /etc/set-bootdev.conf
+                       fi
+                       ;;
+       flash)          echo "Setting the onboard flash as boot-partition"
+                       echo "$part_mode $part_name $part_uuid" > /etc/set-bootdev.conf
+                       ;;
+       esac
+}
+
+copy_rootfs() {
+       debug_echo "copy_rootfs() [$*]"
+}
+
+scan_devices
+show_menu