hooks/live, scripts/live: Add USB modules, workaround udevtrigger (?) bug
[live-boot-grml.git] / scripts / live
index 8db6b80..797f5df 100755 (executable)
@@ -60,6 +60,11 @@ Arguments ()
                                 export FETCH
                                 ;;
 
+                       hook=*)
+                               HOOK="${ARGUMENT#hook=}"
+                               export HOOK
+                               ;;
+
                        hostname=*)
                                HOSTNAME="${ARGUMENT#hostname=}"
                                LIVECONF="changed"
@@ -229,11 +234,6 @@ Arguments ()
                                export NOKPERSONALIZER
                                ;;
 
-                       nokwallet)
-                               NOKWALLET="Yes"
-                               export NOKWALLET
-                               ;;
-
                        nolanguageselector)
                                NOLANGUAGESELECTOR="Yes"
                                export NOLANGUAGESELECTOR
@@ -322,9 +322,9 @@ Arguments ()
                                mount -n -o bind /dev /root/dev
 
                                mkdir -p /root/var/run/network
-                               chroot /root ifup -a
+                               chroot /root dhclient eth0
                                chroot /root wget -P /tmp "${location}"
-                               chroot /root ifdown -a
+                               chroot /root ifconfig eth0 down
 
                                umount /root/sys
                                umount /root/proc
@@ -381,6 +381,16 @@ Arguments ()
                                export EXPOSED_ROOT
                                ;;
 
+                       plainroot)
+                               PLAIN_ROOT="Yes"
+                               export PLAIN_ROOT
+                               ;;
+
+                       root=*)
+                               ROOT="${ARGUMENT#root=}"
+                               export ROOT
+                               ;;
+
                        union=*)
                                UNIONTYPE="${ARGUMENT#union=}"
                                export UNIONTYPE
@@ -982,8 +992,32 @@ setup_unionfs ()
        mkdir -p /cow
 
        # Looking for "${root_persistence}" device or file
-       if [ -n "${PERSISTENT}" ]
+       if [ -n "${PERSISTENT}" ] && [ -z "${NOPERSISTENT}" ]
        then
+               # Load USB modules
+               num_block=$(ls -l /sys/block | wc -l)
+               for module in sd_mod uhci-hcd ehci-hcd ohci-hcd usb-storage
+               do
+                       modprobe -q -b ${module}
+               done
+
+               udevtrigger
+               udevsettle
+
+               # For some reason, udevsettle does not block in this scenario,
+               # so we sleep for a little while.
+               #
+               # See https://bugs.launchpad.net/ubuntu/+source/casper/+bug/84591
+               for timeout in 5 4 3 2 1
+               do
+                       sleep 1
+
+                       if [ $(ls -l /sys/block | wc -l) -gt ${num_block} ]
+                       then
+                               break
+                       fi
+               done
+
                cowprobe=$(find_cow_device "${root_persistence}")
 
                if [ -b "${cowprobe}" ]
@@ -995,7 +1029,7 @@ setup_unionfs ()
                        cowdevice="tmpfs"
                        cow_fstype="tmpfs"
                fi
-       elif [ -n "${NFS_COW}" ]
+       elif [ -n "${NFS_COW}" ] && [ -z "${NOPERSISTENT}" ]
        then
                # check if there are any nfs options
                if echo ${NFS_COW}|grep -q ','
@@ -1065,7 +1099,7 @@ setup_unionfs ()
        mount -t tmpfs tmpfs ${rootmnt}/live
 
        # Adding other custom mounts
-       if [ -n "${PERSISTENT}" ]
+       if [ -n "${PERSISTENT}" ] && [ -z "${NOPERSISTENT}" ]
        then
                # directly mount /home
                # FIXME: add a custom mounts configurable system
@@ -1171,7 +1205,7 @@ find_livefs ()
        fi
 
        # or do the scan of block devices
-       for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram)
+       for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram | grep -v 'dm-')
        do
                devname=$(sys2dev "${sysblock}")
                fstype=$(get_fstype "${devname}")
@@ -1218,6 +1252,11 @@ set_usplash_timeout ()
 
 mountroot ()
 {
+    
+        if [ -x /scripts/local-top/cryptroot ]; then
+           /scripts/local-top/cryptroot
+       fi
+
        exec 6>&1
        exec 7>&2
        exec > live.log
@@ -1244,18 +1283,24 @@ mountroot ()
                        panic "Unable to find a live file system on the network"
                fi
        else
-               # Scan local devices for the image
-               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 [ -n "${PLAIN_ROOT}" ] && [ -n "${ROOT}" ]
+               then
+                       # Do a local boot from hd
+                       livefs_root=${ROOT}
+               else
+                       # Scan local devices for the image
+                       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 [ -n "${livefs_root}" ]
-                       then
-                               break
-                       fi
+                               if [ -n "${livefs_root}" ]
+                               then
+                                       break
+                               fi
 
-                       sleep 1
-               done
+                               sleep 1
+                       done
+               fi
        fi
 
        if [ -z "${livefs_root}" ]