Adding upstream version 1.95.3.
[live-boot-grml.git] / scripts / live
index 9ab1ac5..a73da84 100755 (executable)
@@ -2,22 +2,28 @@
 
 # set -e
 
-export PATH=/root/usr/bin:/root/usr/sbin:/root/bin:/root/sbin:/usr/bin:/usr/sbin:/bin:/sbin
+export PATH="/root/usr/bin:/root/usr/sbin:/root/bin:/root/sbin:/usr/bin:/usr/sbin:/bin:/sbin"
 
 echo "/root/lib" >> /etc/ld.so.conf
 echo "/root/usr/lib" >> /etc/ld.so.conf
 
-mountpoint=/cdrom
+mountpoint="/live/image"
+LIVE_MEDIA_PATH="live"
 
-USERNAME=user
-USERFULLNAME="Live session user"
-HOST=live
-BUILD_SYSTEM=Custom
+root_persistence="live-rw"
+home_persistence="home-rw"
+root_snapshot_label="live-sn"
+home_snapshot_label="home-sn"
 
-mkdir -p $mountpoint
+USERNAME="user"
+USERFULLNAME="Live user"
+HOSTNAME="host"
+BUILD_SYSTEM="Custom"
+
+mkdir -p "${mountpoint}"
 
 [ -f /etc/live.conf ] && . /etc/live.conf
-export USERNAME USERFULLNAME HOST BUILD_SYSTEM
+export USERNAME USERFULLNAME HOSTNAME BUILD_SYSTEM
 
 . /scripts/live-helpers
 
@@ -25,22 +31,296 @@ if [ ! -f /live.vars ]; then
     touch /live.vars
 fi
 
-is_casper_path() {
-    path=$1
-    if [ -d "$path/live" ]; then
-        if [ "$(echo $path/live/*.squashfs)" != "$path/live/*.squashfs" ] ||
-            [ "$(echo $path/live/*.ext2)" != "$path/live/*.ext2" ] ||
-            [ "$(echo $path/live/*.dir)" != "$path/live/*.dir" ]; then
-            return 0
-        fi
-    fi
-    return 1
+Arguments ()
+{
+       PRESEEDS=""
+
+       for ARGUMENT in `cat /proc/cmdline`
+       do
+               case "${ARGUMENT}" in
+                       access=*)
+                               ACCESS="${ARGUMENT#access=}"
+                               export ACCESS
+                               ;;
+
+                       console=*)
+                               DEFCONSOLE="${ARGUMENT#*=}"
+                               export DEFCONFSOLE
+                               ;;
+
+                       debug)
+                               DEBUG="Yes"
+                               export DEBUG
+
+                               set -x
+                               ;;
+
+                       fetch=*)
+                                FETCH="${ARGUMENT#fetch=}"
+                                export FETCH
+                                ;;
+
+                       hostname=*)
+                               HOSTNAME="${ARGUMENT#hostname=}"
+                               LIVECONF="changed"
+                               export HOSTNAME LIVECONF
+                               ;;
+
+                       username=*)
+                               USERNAME="${ARGUMENT#username=}"
+                               LIVECONF="changed"
+                               export USERNAME LIVECONF
+                               ;;
+
+                       userfullname=*)
+                               USERFULLNAME="${ARGUMENT#userfullname=}"
+                               LIVECONF="changed"
+                               export USERFULLNAME LIVECONF
+                               ;;
+
+                       ip=*)
+                               STATICIP="${ARGUMENT#ip=}"
+
+                               if [ -z "${STATICIP}" ]
+                               then
+                                       STATICIP="frommedia"
+                               fi
+
+                               export STATICIP
+                               ;;
+
+                       keyb=*|kbd-chooser/method=*)
+                               KBD="${ARGUMENT#*=}"
+                               export KBD
+                               ;;
+
+                       klayout=*|console-setup/layoutcode=*)
+                               KLAYOUT="${ARGUMENT#*=}"
+                               export KLAYOUT
+                               ;;
+
+                       kvariant=*|console-setup/variantcode=*)
+                               KVARIANT="${ARGUMENT#*=}"
+                               export KVARIANT
+                               ;;
+
+                       kmodel=*|console-setup/modelcode=*)
+                               KMODEL="${ARGUMENT#*=}"
+                               export KMODEL
+                               ;;
+
+                       koptions=*)
+                               KOPTIONS="${ARGUMENT#koptions=}"
+                               export KOPTIONS
+                               ;;
+
+                       live-getty)
+                               LIVE_GETTY="1"
+                               export LIVE_GETTY
+                               ;;
+
+                       live-media=*|bootfrom=*)
+                               LIVE_MEDIA="${ARGUMENT#*=}"
+                               export LIVE_MEDIA
+                               ;;
+
+                       live-media-encryption=*|encryption=*)
+                               LIVE_MEDIA_ENCRYPTION="${ARGUMENT#*=}"
+                               export LIVE_MEDIA_ENCRYPTION
+                               ;;
+
+                       live-media-offset=*)
+                               LIVE_MEDIA_OFFSET="${ARGUMENT#live-media-offset=}"
+                               export LIVE_MEDIA_OFFSET
+                               ;;
+
+                       live-media-path=*)
+                               LIVE_MEDIA_PATH="${ARGUMENT#live-media-path=}"
+                               export LIVE_MEDIA_PATH
+                               ;;
+
+                       live-media-timeout=*)
+                               LIVE_MEDIA_TIMEOUT="${ARGUMENT#live-media-timeout=}"
+                               export LIVE_MEDIA_TIMEOUT
+                               ;;
+
+                       locale=*|debian-installer/locale=*)
+                               LOCALE="${ARGUMENT#*=}"
+                               export LOCALE
+                               ;;
+
+                       module=*)
+                               MODULE="${ARGUMENT#module=}"
+                               export MODULE
+                               ;;
+
+                       netboot=*)
+                               NETBOOT="${ARGUMENT#netboot=}"
+                               export NETBOOT
+                               ;;
+
+                       nfsopts=*)
+                               NFSOPTS="${ARGUMENT#nfsopts=}"
+                               export NFSOPTS
+                               ;;
+
+                       noautologin)
+                               NOAUTOLOGIN="Yes"
+                               export NOAUTOLOGIN
+                               ;;
+
+                       noxautologin)
+                               NOXAUTOLOGIN="Yes"
+                               export NOXAUTOLOGIN
+                               ;;
+
+                       nofastboot)
+                               NOFASTBOOT="Yes"
+                               export NOFASTBOOT
+                               ;;
+
+                       nopersistent)
+                               PERSISTENT=""
+                               export PERSISTENT
+                               ;;
+
+                       nosudo)
+                               NOSUDO="Yes"
+                               export NOSUDO
+                               ;;
+
+                       noswap)
+                               NOSWAP="Yes"
+                               export NOSWAP
+                               ;;
+
+                       persistent)
+                               PERSISTENT="Yes"
+                               export PERSISTENT
+                               ;;
+
+                       preseed/file=*|file=*)
+                               LOCATION="${ARGUMENT#*=}"
+                               export LOCATION
+                               ;;
+
+                       url=*)
+                               location="${ARGUMENT#url=}"
+
+                               mount -n -o bind /sys /root/sys
+                               mount -n -o bind /proc /root/proc
+                               mount -n -o bind /dev /root/dev
+
+                               mkdir -p /root/var/run/network
+                               chroot /root ifup -a
+                               chroot /root wget -P /tmp "$location"
+                               chroot /root ifdown -a
+
+                               umount /root/sys
+                               umount /root/proc
+                               umount /root/dev
+
+                               LOCATION="/tmp/$(basename "$location")"
+                               ;;
+
+                       */*=*)
+                               question="${ARGUMENT%%=*}"
+                               value="${ARGUMENT#*=}"
+                               PRESEEDS="${PRESEEDS}\"${question}=${value}\" "
+                               export PRESEEDS
+                               ;;
+
+                       showmounts)
+                               SHOWMOUNTS="Yes"
+                               export SHOWMOUNTS
+                               ;;
+
+                       timezone=*)
+                               TIMEZONE="${ARGUMENT#timezone=}"
+                               export TIMEZONE
+                               ;;
+
+                       todisk=*)
+                               TODISK="${ARGUMENT#todisk=}"
+                               export TODISK
+                               ;;
+
+                       toram)
+                               TORAM="Yes"
+                               export TORAM
+                               ;;
+
+                       union=*)
+                               UNIONTYPE="${ARGUMENT#union=}"
+                               export UNIONTYPE
+                               ;;
+
+                       utc=*)
+                               UTC="${ARGUMENT#utc=}"
+                               export UTC
+                               ;;
+
+                       xdebconf)
+                               XDEBCONF="Yes"
+                               export XDEBCONF
+                               ;;
+
+                       xvideomode=*)
+                               XVIDEOMODE="${ARGUMENT#xvideomode=}"
+                               export XVIDEOMODE
+                               ;;
+               esac
+       done
+
+       # sort of compatibility with netboot.h from linux docs
+       if [ -z "${NETBOOT}" ]
+       then
+               if [ "${ROOT}" = "/dev/nfs" ]
+               then
+                       NETBOOT="nfs"
+                       export NETBOOT
+               elif [ "${ROOT}" = "/dev/cifs" ]
+               then
+                       NETBOOT="cifs"
+                       export NETBOOT
+               fi
+       fi
+
+       if [ -z "${MODULE}" ]
+       then
+               MODULE="filesystem"
+               export MODULE
+       fi
+
+       if [ -z "${UNIONTYPE}" ]
+       then
+               UNIONTYPE="unionfs"
+               export UNIONTYPE
+       fi
+}
+
+is_live_path()
+{
+       DIRECTORY="${1}"
+
+       if [ -d "${DIRECTORY}"/"${LIVE_MEDIA_PATH}" ]
+       then
+               for FILESYSTEM in squashfs ext2 ext3 xfs dir
+               do
+                       if [ "`echo ${DIRECTORY}/${LIVE_MEDIA_PATH}/*.${FILESYSTEM}`" != "${DIRECTORY}/${LIVE_MEDIA_PATH}/*.${FILESYSTEM}" ]
+                       then
+                               return 0
+                       fi
+               done
+       fi
+
+       return 1
 }
 
 get_backing_device() {
     case "$1" in
-        *.squashfs|*.ext2)
-            echo $(setup_loop "$1" "loop" "/sys/block/loop*")
+        *.squashfs|*.ext2|*.ext3)
+            echo $(setup_loop "$1" "loop" "/sys/block/loop*" '0' "${LIVE_MEDIA_ENCRYPTION}")
             ;;
         *.dir)
             echo "directory"
@@ -64,10 +344,12 @@ match_files_in_dir() {
 mount_images_in_directory() {
     directory="$1"
     rootmnt="$2"
-    if match_files_in_dir "$directory/live/*.squashfs" ||
-        match_files_in_dir "$directory/live/*.ext2" ||
-        match_files_in_dir "$directory/live/*.dir"; then
-        setup_unionfs "$directory/live" "$rootmnt"
+
+    if match_files_in_dir "$directory/${LIVE_MEDIA_PATH}/*.squashfs" ||
+        match_files_in_dir "$directory/${LIVE_MEDIA_PATH}/*.ext2" ||
+        match_files_in_dir "$directory/${LIVE_MEDIA_PATH}/*.ext3" ||
+        match_files_in_dir "$directory/${LIVE_MEDIA_PATH}/*.dir"; then
+        setup_unionfs "$directory/${LIVE_MEDIA_PATH}" "$rootmnt"
     else
         :
     fi
@@ -123,13 +405,22 @@ copy_live_to() {
         return 1
     fi
 
-    # begin copying..
+    # begin copying (or uncompressing)
     mkdir "${copyto}"
     echo "mount -t ${fstype} ${mount_options} ${dev} ${copyto}"
     mount -t "${fstype}" ${mount_options} "${dev}" "${copyto}"
-    cp -a ${copyfrom}/* ${copyto} # "cp -a" from busybox also copies hidden files
-    umount ${copyfrom}
-    mount -r -o move ${copyto} ${copyfrom}
+
+    if [ "$extension" == "tgz" ]; then
+       cd "${copyto}"
+       tar zxf "${copyfrom}/${LIVE_MEDIA_PATH}/$(basename ${FETCH})"
+       rm -f "${copyfrom}/${LIVE_MEDIA_PATH}/$(basename ${FETCH})"
+       mount -r --move "${copyto}" "${rootmnt}"
+       cd "${OLDPWD}"
+    else
+       cp -a ${copyfrom}/* ${copyto} # "cp -a" from busybox also copies hidden files
+       umount ${copyfrom}
+       mount -r --move ${copyto} ${copyfrom}
+    fi
     rmdir ${copyto}
     return 0
 }
@@ -148,6 +439,19 @@ do_netmount() {
         NFSROOT=${ROOTSERVER}:${ROOTPATH}
     fi
 
+    # source relevant ipconfig output
+    . /tmp/net-${DEVICE}.conf
+    export HOSTNAME
+
+    if [ -n "${FETCH}" ] && do_httpmount; then
+       rc=0
+       return ${rc}
+    fi
+
+    if [ "${NFSROOT#*:}" = "$NFSROOT" ] && [ "$NETBOOT" != "cifs" ]; then
+       NFSROOT=${ROOTSERVER}:${NFSROOT}
+    fi
+
     [ "$quiet" != "y" ] && log_begin_msg "Trying netboot from ${NFSROOT}"
 
     if [ "${NETBOOT}" != "nfs" ] && do_cifsmount ; then
@@ -162,6 +466,23 @@ do_netmount() {
     return ${rc}
 }
 
+do_httpmount() {
+    rc=1
+    extension=`echo "${FETCH}" | sed 's/\(.*\)\.\(.*\)/\2/'`
+    case "${extension}" in
+       squashfs|tgz|tar)
+           [ "$quiet" != "y" ] && log_begin_msg "Trying wget ${FETCH} -O ${mountpoint}/$(basename ${FETCH})"
+           mkdir -p "${mountpoint}/${LIVE_MEDIA_PATH}"
+           wget "${FETCH}" -O "${mountpoint}/${LIVE_MEDIA_PATH}/$(basename ${FETCH})"
+           [ $? -eq 0 ] && rc=0
+           [ "${extension}" == "tgz" ] && live_dest="ram"
+           ;;
+       *)
+           [ "$quiet" != "y" ] && log_begin_msg "Unrecognized archive extension for ${FETCH}"
+    esac
+    return ${rc}
+}
+
 do_nfsmount() {
     rc=1
     modprobe "${MP_QUIET}" nfs
@@ -243,19 +564,19 @@ do_snap_copy ()
 try_snap ()
 {
     # Look for $snap_label.* in block devices and copy the contents to $snap_mount
-    #   and remember the device and filename for resync on exit in casper.init
+    #   and remember the device and filename for resync on exit in live-initramfs.init
 
     snap_label="${1}"
     snap_mount="${2}"
     snap_type="${3}"
 
-    snapdata=$(find_files "${snap_label}.squashfs ${snap_label}.cpio.gz ${snap_label}.ext2")
+    snapdata=$(find_files "${snap_label}.squashfs ${snap_label}.cpio.gz ${snap_label}.ext2 ${snap_label}.ext3")
     if [ ! -z "${snapdata}" ]; then
         snapdev="$(echo ${snapdata} | cut -f1 -d ' ')"
         snapback="$(echo ${snapdata} | cut -f2 -d ' ')"
         snapfile="$(echo ${snapdata} | cut -f3 -d ' ')"
-        if echo "${snapfile}" | grep -qs '\(squashfs\|ext2\)'; then
-            # squashfs or ext2 snapshot
+        if echo "${snapfile}" | grep -qs '\(squashfs\|ext2\|ext3\)'; then
+            # squashfs or ext2/ext3 snapshot
             dev=$(get_backing_device "${snapback}/${snapfile}")
             if ! do_snap_copy "${dev}" "${snap_mount}" "${snap_type}"; then
                  log_warning_msg "Impossible to include the ${snapfile} Snapshot"
@@ -302,7 +623,7 @@ setup_unionfs() {
     image_directory="$1"
     rootmnt="$2"
 
-    modprobe "${MP_QUIET}" -b unionfs
+    modprobe "${MP_QUIET}" -b ${UNIONTYPE}
 
     # run-init can't deal with images in a subdir, but we're going to
     # move all of these away before it runs anyway.  No, we're not,
@@ -314,30 +635,60 @@ setup_unionfs() {
     # Let's just mount the read-only file systems first
     rofsstring=""
     rofslist=""
-    if [ "${NETBOOT}" = "nfs" ] ; then
-        roopt="nfsro" # go aroung a bug in nfs-unionfs locking
+    minor_kernel_version=`uname -r|cut -c 5-|sed 's/[^0-9].*//'`
+    if [ "${NETBOOT}" = "nfs" ] && [ "${minor_kernel_version}" -lt 22 ]; then
+        # go aroung a bug in nfs-unionfs locking for unionfs <= 1.4
+        roopt="nfsro"
     else
         roopt="ro"
     fi
 
+       # Read image names from ${MODULE}.module if it exists
+       if [ -e "${image_directory}/filesystem.${MODULE}.module" ]
+       then
+               for IMAGE in `cat ${image_directory}/filesystem.${MODULE}.module`
+               do
+                       image_string="${image_string} ${image_directory}/${image}"
+               done
+       elif [ -e "${image_directory}/${MODULE}.module" ]
+       then
+               for IMAGE in `cat ${image_directory}/${MODULE}.module`
+               do
+                       image_string="${image_string} ${image_directory}/${image}"
+               done
+       else
+               # ${MODULE}.module does not exist, create a list of images
+               for FILESYSTEM in squashfs ext2 ext3 xfs dir
+               do
+                       for IMAGE in "${image_directory}"/*."${FILESYSTEM}"
+                       do
+                               if [ -e "${IMAGE}" ]
+                               then
+                                       image_string="${image_string} ${IMAGE}"
+                               fi
+                       done
+               done
+
+               # Now sort the list
+               image_string="`echo ${image_string} | sed -e 's/ /\n/g' | sort `"
+       fi
+
     mkdir -p "${croot}"
-    for image_type in "ext2" "squashfs" "dir" ; do
-        for image in "${image_directory}"/*."${image_type}"; do
-            imagename=$(basename "${image}")
-            if [ -d "${image}" ]; then
-                # it is a plain directory: do nothing
-                rofsstring="${image}=${roopt}:${rofsstring}"
-                rofslist="${image} ${rofslist}"
-            elif [ -f "${image}" ]; then
-                backdev=$(get_backing_device "$image")
-                fstype=$(get_fstype "${backdev}")
-                if [ "${fstype}" = "unknown" ]; then
-                    panic "Unknown file system type on ${backdev} (${image})"
-                fi
-                mkdir -p "${croot}/${imagename}"
-                mount -t "${fstype}" -o ro "${backdev}" "${croot}/${imagename}" || panic "Can not mount $backdev ($image) on ${croot}/${imagename}" && rofsstring="${croot}/${imagename}=${roopt}:${rofsstring}" && rofslist="${croot}/${imagename} ${rofslist}"
-            fi
-        done
+    for image in ${image_string}; do
+        imagename=$(basename "${image}")
+        if [ -d "${image}" ]; then
+            # it is a plain directory: do nothing
+            rofsstring="${image}=${roopt}:${rofsstring}"
+            rofslist="${image} ${rofslist}"
+        elif [ -f "${image}" ]; then
+            backdev=$(get_backing_device "$image")
+            fstype=$(get_fstype "${backdev}")
+            if [ "${fstype}" = "unknown" ]; then
+                panic "Unknown file system type on ${backdev} (${image})"
+             fi
+            mkdir -p "${croot}/${imagename}"
+            mount -t "${fstype}" -o ro "${backdev}" "${croot}/${imagename}" || panic "Can not mount $backdev ($image) on ${croot}/${imagename}" && rofsstring="${croot}/${imagename}=${roopt}:${rofsstring}" && rofslist="${croot}/${imagename} ${rofslist}"
+        fi
     done
     rofsstring=${rofsstring%:}
 
@@ -358,7 +709,7 @@ setup_unionfs() {
 
     mount ${cowdevice} -t ${cow_fstype} -o rw /cow || panic "Can not mount $cowdevice on /cow"
 
-    mount -t unionfs -o dirs=/cow=rw:$rofsstring unionfs "$rootmnt" || panic "Unionfs mount failed"
+    mount -t ${UNIONTYPE} -o dirs=/cow=rw:$rofsstring ${UNIONTYPE} "$rootmnt" || panic "${UNIONTYPE} mount failed"
 
     # Adding other custom mounts
     if [ -n "${PERSISTENT}" ]; then
@@ -382,21 +733,15 @@ setup_unionfs() {
             case d in
                 *.dir) # do nothing # mount -o bind "${d}" "${rootmnt}/live/${d##*/}"
                     ;;
-                *) mount -move "${d}" "${rootmnt}/live/${d##*/}"
+                *) mount --move "${d}" "${rootmnt}/live/${d##*/}"
                     ;;
             esac
         done
-        # shows cow fs on /cow for use by live-snapshot
-        mkdir -p "${rootmnt}/cow"
-        mount -o bind /cow "${rootmnt}/cow"
     fi
 
-    # move the first mount; no head in busybox-initramfs
-    for d in $(mount -t squashfs | cut -d\  -f 3); do
-        mkdir -p "${rootmnt}/rofs"
-        mount -o move "${d}" "${rootmnt}/rofs"
-        break
-    done
+    # shows cow fs on /cow for use by live-snapshot
+    mkdir -p "${rootmnt}/live/cow"
+    mount -o bind /cow "${rootmnt}/live/cow"
 }
 
 check_dev ()
@@ -407,15 +752,15 @@ check_dev ()
         devname=$(sys2dev "${sysdev}")
     fi
 
-    if [ -n "${LIVEMEDIA_OFFSET}" ]; then
-        loopdevname=$(setup_loop "${devname}" "loop" "/sys/block/loop*" "${LIVEMEDIA_OFFSET}")
-        devname="${loopdevname}" 
+    if [ -n "${LIVE_MEDIA_OFFSET}" ]; then
+        loopdevname=$(setup_loop "${devname}" "loop" "/sys/block/loop*" "${LIVE_MEDIA_OFFSET}" '')
+        devname="${loopdevname}"
     fi
 
     fstype=$(get_fstype "${devname}")
     if is_supported_fs ${fstype}; then
         mount -t ${fstype} -o ro "${devname}" $mountpoint || continue
-        if is_casper_path $mountpoint; then
+        if is_live_path $mountpoint; then
             echo $mountpoint
             return 0
         else
@@ -423,7 +768,7 @@ check_dev ()
         fi
     fi
 
-    if [ -n "${LIVEMEDIA_OFFSET}" ]; then
+    if [ -n "${LIVE_MEDIA_OFFSET}" ]; then
         losetup -d "${loopdevname}"
     fi
     return 1
@@ -432,14 +777,14 @@ check_dev ()
 find_livefs() {
     timeout="${1}"
     # first look at the one specified in the command line
-    if [ ! -z "${LIVEMEDIA}" ]; then
-        if check_dev "null" "${LIVEMEDIA}"; then
+    if [ ! -z "${LIVE_MEDIA}" ]; then
+        if check_dev "null" "${LIVE_MEDIA}"; then
             return 0
         fi
     fi
     # don't start autodetection before timeout has expired
-    if [ -n "${LIVEMEDIA_TIMEOUT}" ]; then
-        if [ "${timeout}" -lt "${LIVEMEDIA_TIMEOUT}" ]; then
+    if [ -n "${LIVE_MEDIA_TIMEOUT}" ]; then
+        if [ "${timeout}" -lt "${LIVE_MEDIA_TIMEOUT}" ]; then
             return 1
         fi
     fi
@@ -458,11 +803,11 @@ find_livefs() {
                 fi
             done
         elif [ "${fstype}" = "squashfs" -o \
-                "${fstype}" = "ext3" -o \
-                "${fstype}" = "ext2" ]; then
+                "${fstype}" = "ext2" -o \
+                "${fstype}" = "ext3" ]; then
             # This is an ugly hack situation, the block device has
             # an image directly on it.  It's hopefully
-            # casper, so take it and run with it.
+            # live-initramfs, so take it and run with it.
             ln -s "${devname}" "${devname}.${fstype}"
             echo "${devname}.${fstype}"
             return 0
@@ -489,6 +834,8 @@ mountroot() {
     exec > live.log
     exec 2>&1
 
+    Arguments
+
     set_usplash_timeout
     [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/live-premount"
     pulsate
@@ -500,7 +847,7 @@ mountroot() {
 
     set_usplash_timeout
 
-    if [ ! -z "${NETBOOT}" ]; then
+    if [ ! -z "${NETBOOT}" ] || [ ! -z "${FETCH}" ]; then
         if do_netmount ; then
             livefs_root="${mountpoint}"
         else
@@ -508,9 +855,9 @@ mountroot() {
         fi
     else
         # Scan local devices for the image
-        for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13; do
+        for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19; do
             livefs_root=$(find_livefs $i)
-            if [ "${livefs_root}" ]; then
+            if [ -n "${livefs_root}" ]; then
                 break
             fi
             sleep 1
@@ -527,7 +874,7 @@ mountroot() {
         live_dest="${TODISK}"
     fi
     if [ "${live_dest}" ]; then
-        log_begin_msg "Copying live_media to ${live_dest}"
+        log_begin_msg "Copying live media to ${live_dest}"
         copy_live_to "${livefs_root}" "${live_dest}"
         log_end_msg
     fi