Merge branch 'debian'
[live-boot-grml.git] / scripts / live
index a8ac678..584193e 100755 (executable)
@@ -399,7 +399,7 @@ Arguments ()
        then
                PERSISTENT_ENCRYPTION="none"
                export PERSISTENT_ENCRYPTION
-       elif echo ${PERSISTENT_ENCRYPTION} | grep -qw luks
+       elif echo ${PERSISTENT_ENCRYPTION} | grep -qe "\<luks\>"
        then
                if ! modprobe dm-crypt
                then
@@ -536,7 +536,7 @@ is_nice_device ()
                PATH_ID="/sbin/udevadm test-builtin path_id"
        fi
 
-       if "${PATH_ID}" "${sysfs_path}" | egrep -q "ID_PATH=(usb|pci-[^-]*-(ide|sas|scsi|usb|virtio)|platform-sata_mv|platform-orion-ehci|platform-mmc|platform-mxsdhci)"
+       if ${PATH_ID} "${sysfs_path}" | egrep -q "ID_PATH=(usb|pci-[^-]*-(ide|sas|scsi|usb|virtio)|platform-sata_mv|platform-orion-ehci|platform-mmc|platform-mxsdhci)"
        then
                return 0
        elif echo "${sysfs_path}" | grep -q '^/block/vd[a-z]$'
@@ -1403,12 +1403,12 @@ setup_unionfs ()
                                ;;
                esac
 
-               if echo ${PERSISTENT_METHOD} | grep -qw overlay
+               if echo ${PERSISTENT_METHOD} | grep -qe "\<overlay\>"
                then
                        overlays="${root_persistence} ${home_persistence}"
                fi
 
-               if echo ${PERSISTENT_METHOD} | grep -qw snapshot
+               if echo ${PERSISTENT_METHOD} | grep -qe "\<snapshot\>"
                then
                        snapshots="${root_snapshot_label} ${home_snapshot_label}"
                fi
@@ -1448,16 +1448,17 @@ setup_unionfs ()
                then
                        cowdevice=${cowprobe}
                        cow_fstype=$(get_fstype "${cowprobe}")
-                       cow_mountopt="rw,noatime"
+                       if [ -z "${PERSISTENT_READONLY}" ]
+                       then
+                               cow_mountopt="rw,noatime"
+                       else
+                               cow_mountopt="ro,noatime"
+                       fi
 
                        if [ "${FORCEPERSISTENTFSCK}" = "Yes" ]
                        then
                                fsck -y ${cowdevice}
                        fi
-               else
-                       cowdevice="tmpfs"
-                       cow_fstype="tmpfs"
-                       cow_mountopt="rw,noatime,mode=755"
                fi
        elif [ -n "${NFS_COW}" ] && [ -z "${NOPERSISTENT}" ]
        then
@@ -1470,6 +1471,12 @@ setup_unionfs ()
                        nfs_cow_opts="-o nolock"
                        nfs_cow=${NFS_COW}
                fi
+
+               if [ -n "${PERSISTENT_READONLY}" ]
+               then
+                       nfs_cow_opts="${nfs_cow_opts},nocto,ro"
+               fi
+
                mac="$(get_mac)"
                if [ -n "${mac}" ]
                then
@@ -1478,7 +1485,10 @@ setup_unionfs ()
                else
                        panic "unable to determine mac address"
                fi
-       else
+       fi
+
+       if [ -z "${cowdevice}" ]
+       then
                cowdevice="tmpfs"
                cow_fstype="tmpfs"
                cow_mountopt="rw,noatime,mode=755"
@@ -1486,16 +1496,23 @@ setup_unionfs ()
 
        if [ "${UNIONTYPE}" != "unionmount" ]
        then
+               if [ -n "${PERSISTENT_READONLY}" ]
+               then
+                       persistent_root="/$(basename ${cowdevice})-backing"
+                       mkdir -p ${persistent_root}
+               else
+                       persistent_root="/cow"
+               fi
 
                if [ "${cow_fstype}" = "nfs" ]
                then
                        log_begin_msg \
-                               "Trying nfsmount ${nfs_cow_opts} ${cowdevice} /cow"
-                       nfsmount ${nfs_cow_opts} ${cowdevice} /cow || \
-                               panic "Can not mount ${cowdevice} (n: ${cow_fstype}) on /cow"
+                               "Trying nfsmount ${nfs_cow_opts} ${cowdevice} ${persistent_root}"
+                       nfsmount ${nfs_cow_opts} ${cowdevice} ${persistent_root} || \
+                               panic "Can not mount ${cowdevice} (n: ${cow_fstype}) on ${persistent_root}"
                else
-                       mount -t ${cow_fstype} -o ${cow_mountopt} ${cowdevice} /cow || \
-                               panic "Can not mount ${cowdevice} (o: ${cow_fstype}) on /cow"
+                       mount -t ${cow_fstype} -o ${cow_mountopt} ${cowdevice} ${persistent_root} || \
+                               panic "Can not mount ${cowdevice} (o: ${cow_fstype}) on ${persistent_root}"
                fi
        fi
 
@@ -1555,7 +1572,13 @@ setup_unionfs ()
 
 
                        *)
-                               unionmountopts="-o noatime,${noxino_opt}dirs=${unionrw}=rw:${unionro}=${roopt}"
+                               if [ -n "${PERSISTENT_READONLY}" ]
+                               then
+                                       mount -t tmpfs -o rw,noatime,mode=755 tmpfs "${unionrw}"
+                                       unionmountopts="-o noatime,${noxino_opt}dirs=${unionrw}=rw:${persistent_root}=${roopt}:${unionro}=${roopt}"
+                               else
+                                       unionmountopts="-o noatime,${noxino_opt}dirs=${unionrw}=rw:${unionro}=${roopt}"
+                               fi
                                mount -t ${UNIONTYPE} ${unionmountopts} ${UNIONTYPE} "${unionmountpoint}"
                                ;;
                esac || \
@@ -1929,6 +1952,7 @@ mountroot ()
                                then
                                        # We found a memdisk, set up phram
                                        modprobe phram phram=memdisk,${MEMDISK}
+                                       modprobe phram phram=memdisk,${MEMDISK}
 
                                        # Load mtdblock, the memdisk will be /dev/mtdblock0
                                        modprobe mtdblock