Adding upstream version 1.110.5.
[live-boot-grml.git] / scripts / live
index 7e748dc..9fff065 100755 (executable)
@@ -18,12 +18,11 @@ home_snapshot_label="home-sn"
 USERNAME="user"
 USERFULLNAME="Live user"
 HOSTNAME="host"
-BUILD_SYSTEM="Custom"
 
 mkdir -p "${mountpoint}"
 
 [ -f /etc/live.conf ] && . /etc/live.conf
-export USERNAME USERFULLNAME HOSTNAME BUILD_SYSTEM
+export USERNAME USERFULLNAME HOSTNAME
 
 . /scripts/live-helpers
 
@@ -46,7 +45,7 @@ Arguments ()
 
                        console=*)
                                DEFCONSOLE="${ARGUMENT#*=}"
-                               export DEFCONFSOLE
+                               export DEFCONSOLE
                                ;;
 
                        debug)
@@ -170,6 +169,11 @@ Arguments ()
                                export NFSOPTS
                                ;;
 
+                       nfscow=*)
+                               NFS_COW="${ARGUMENT#nfscow=}"
+                               export NFS_COW
+                               ;;
+
                        noaccessibility)
                                NOACCESSIBILITY="Yes"
                                export NOACCESSIBILITY
@@ -372,6 +376,11 @@ Arguments ()
                                export TORAM MODULETORAM
                                ;;
 
+                       exposedroot)
+                               EXPOSED_ROOT="Yes"
+                               export EXPOSED_ROOT
+                               ;;
+
                        union=*)
                                UNIONTYPE="${ARGUMENT#union=}"
                                export UNIONTYPE
@@ -498,13 +507,16 @@ mount_images_in_directory ()
 {
        directory="${1}"
        rootmnt="${2}"
+       mac="${3}"
+
 
        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}"
+               [ -n "${mac}" ] && adddirectory="${directory}/${LIVE_MEDIA_PATH}/${mac}"
+               setup_unionfs "${directory}/${LIVE_MEDIA_PATH}" "${rootmnt}" "${adddirectory}"
        else
                :
        fi
@@ -618,7 +630,7 @@ do_netmount ()
 {
        rc=1
 
-       modprobe "${MP_QUIET}" af_packet # For DHCP
+       modprobe -q af_packet # For DHCP
 
        udevtrigger
        udevsettle
@@ -688,7 +700,7 @@ do_nfsmount ()
 {
        rc=1
 
-       modprobe "${MP_QUIET}" nfs
+       modprobe -q nfs
 
        if [ -z "${NFSOPTS}" ]
        then
@@ -721,7 +733,7 @@ do_cifsmount ()
                fi
 
                [ "${quiet}" != "y" ] && log_begin_msg "Trying mount.cifs ${NFSROOT} ${mountpoint} ${CIFSOPTS}"
-               modprobe "${MP_QUIET}" cifs
+               modprobe -q cifs
 
                if mount.cifs "${NFSROOT}" "${mountpoint}" "${CIFSOPTS}"
                then
@@ -762,7 +774,7 @@ do_snap_copy ()
                if [ -n "${fstype}" ]
                then
                        # Copying stuff...
-                       mount -t "${fstype}" -o ro,noatime,nodiratime "${fromdev}" "${tomount}"
+                       mount -t "${fstype}" -o ro,noatime "${fromdev}" "${tomount}"
                        cp -a "${tomount}"/* ${todir}
                        umount "${tomount}"
                else
@@ -860,8 +872,8 @@ setup_unionfs ()
 {
        image_directory="${1}"
        rootmnt="${2}"
-
-       modprobe "${MP_QUIET}" -b ${UNIONTYPE}
+        addimage_directory="${3}"
+       modprobe -q -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,
@@ -909,6 +921,20 @@ setup_unionfs ()
                        done
                done
 
+               if [ -n "${addimage_directory}" ] && [ -d "${addimage_directory}" ]
+               then
+                       for FILESYSTEM in squashfs ext2 ext3 xfs dir
+                       do
+                               for IMAGE in "${addimage_directory}"/*."${FILESYSTEM}"
+                               do
+                                       if [ -e "${IMAGE}" ]
+                                       then
+                                               image_string="${image_string} ${IMAGE}"
+                                       fi
+                               done
+                       done
+               fi
+
                # Now sort the list
                image_string="$(echo ${image_string} | sed -e 's/ /\n/g' | sort )"
        fi
@@ -938,15 +964,13 @@ setup_unionfs ()
 
                        mkdir -p "${croot}/${imagename}"
                        echo "debug: Can not mount backdev ${backdev} (image = ${image}) on croot/imagename ${croot}/${imagename}"
-                       mount -t "${fstype}" -o ro,noatime,nodiratime "${backdev}" "${croot}/${imagename}" || panic "Can not mount ${backdev} (${image}) on ${croot}/${imagename}" && rofsstring="${croot}/${imagename}=${roopt}:${rofsstring}" && rofslist="${croot}/${imagename} ${rofslist}"
+                       mount -t "${fstype}" -o ro,noatime "${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%:}
 
        mkdir -p /cow
-       cowdevice="tmpfs"
-       cow_fstype="tmpfs"
 
        # Looking for "${root_persistence}" device or file
        if [ -n "${PERSISTENT}" ]
@@ -960,11 +984,74 @@ setup_unionfs ()
                else
                        [ "${quiet}" != "y" ] && log_warning_msg "Unable to find the persistent medium"
                fi
+       elif [ -n "${NFS_COW}" ]
+       then
+               # check if there are any nfs options
+               if echo ${NFS_COW}|grep -q ','
+               then
+                       nfs_cow_opts="-o nolock,$(echo ${NFS_COW}|cut -d, -f2-)"
+                       nfs_cow=$(echo ${NFS_COW}|cut -d, -f1)
+               else
+                       nfs_cow_opts="-o nolock"
+                       nfs_cow=${NFS_COW}
+               fi
+               mac="$(get_mac)"
+               if [ -n "${mac}" ]
+               then
+                       cowdevice=$(echo ${nfs_cow}|sed "s/client_mac_address/${mac}/")
+                       cow_fstype="nfs"
+               else
+                       panic "unable to determine mac address"
+               fi
+       else
+               cowdevice="tmpfs"
+               cow_fstype="tmpfs"
+       fi
+
+       if [ "${cow_fstype}" = "nfs" ]
+       then
+               [ "${quiet}" != "y" ] && log_begin_msg \
+                       "Trying nfsmount ${nfs_cow_opts} ${cowdevice} /cow"
+               nfsmount ${nfs_cow_opts} ${cowdevice} /cow || \
+                       panic "Can not mount ${cowdevice} on /cow"
+       else
+               mount ${cowdevice} -t ${cow_fstype} -o rw,noatime /cow || \
+                       panic "Can not mount ${cowdevice} on /cow"
        fi
 
-       mount ${cowdevice} -t ${cow_fstype} -o rw,noatime,nodiratime /cow || panic "Can not mount ${cowdevice} on /cow"
+       rofscount=$(echo ${rofslist} |wc -w)
+
+       if [ -n "${EXPOSED_ROOT}" ]
+       then
+               if [ ${rofscount} -ne 1 ]
+               then
+                       panic "only one RO file system supported with exposedroot: ${rofslist}"
+               fi
+               exposedrootfs=${rofslist%% }
+
+               mount --bind ${exposedrootfs} ${rootmnt} || \
+                       panic "bind mount of ${exposedrootfs} failed"
+
+               cow_dirs='/var/tmp /var/lock /var/run /var/log /var/spool
+                       /home /var/lib/live'
+
+               for dir in ${cow_dirs}; do
+                       mkdir -p /cow${dir}
+                       mount -t ${UNIONTYPE} \
+                               -o rw,noatime,dirs=/cow${dir}=rw:${exposedrootfs}${dir}=ro \
+                               ${UNIONTYPE} "${rootmnt}${dir}" || \
+                               panic "mount ${UNIONTYPE} on ${rootmnt}${dir} failed with option \
+                                       rw,noatime,dirs=/cow${dir}=rw:${exposedrootfs}${dir}=ro"
+               done
+       else
+               mount -t ${UNIONTYPE} -o noatime,dirs=/cow=rw:${rofsstring} \
+                       ${UNIONTYPE} "${rootmnt}" || panic "mount ${UNIONTYPE} on \
+                       ${rootmnt} failed with option noatime,dirs=/cow=rw:${rofsstring}"
+       fi
 
-       mount -t ${UNIONTYPE} -o noatime,nodiratime,dirs=/cow=rw:${rofsstring} ${UNIONTYPE} "${rootmnt}" || panic "${UNIONTYPE} mount failed"
+       # tmpfs file systems
+       mkdir -p "${rootmnt}/live"
+       mount -t tmpfs tmpfs ${rootmnt}/live
 
        # Adding other custom mounts
        if [ -n "${PERSISTENT}" ]
@@ -975,7 +1062,7 @@ setup_unionfs ()
 
                if [ -b "${homecow}" ]
                then
-                       mount -t $(get_fstype "${homecow}") -o rw,noatime,nodiratime "${homecow}" "${rootmnt}/home"
+                       mount -t $(get_fstype "${homecow}") -o rw,noatime "${homecow}" "${rootmnt}/home"
                        export HOMEMOUNTED=1 # used to proper calculate free space in do_snap_copy()
                else
                        [ "${quiet}" != "y" ] && log_warning_msg "Unable to find the persistent home medium"
@@ -1030,7 +1117,7 @@ check_dev ()
 
        if is_supported_fs ${fstype}
        then
-               mount -t ${fstype} -o ro,noatime,nodiratime "${devname}" ${mountpoint} || continue
+               mount -t ${fstype} -o ro,noatime "${devname}" ${mountpoint} || continue
 
                if is_live_path ${mountpoint} && \
                        ([ "${skip_uuid_check}" ] || matches_uuid ${mountpoint})
@@ -1192,7 +1279,9 @@ mountroot ()
        then
                setup_unionfs "${livefs_root}" "${rootmnt}"
        else
-               mount_images_in_directory "${livefs_root}" "${rootmnt}"
+               mac="$(get_mac)"
+               mac="$(echo ${mac} | sed 's/-//g')"
+               mount_images_in_directory "${livefs_root}" "${rootmnt}" "${mac}"
        fi
 
        log_end_msg