X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=scripts%2Flive;h=3888f0368092bd2d7c13a24ce7bf3248fcea25d2;hb=dcbc0dc176cbf8143bc43e55b71535a351febca7;hp=1baf82e9530ffad7a136f7217a7db0ea3ace5c05;hpb=59a3bf0fc95889a3c4034829dec5492c5108aec9;p=live-boot-grml.git diff --git a/scripts/live b/scripts/live index 1baf82e..3888f03 100755 --- a/scripts/live +++ b/scripts/live @@ -102,9 +102,9 @@ Arguments () ;; fetch=*) - FETCH="${ARGUMENT#fetch=}" - export FETCH - ;; + FETCH="${ARGUMENT#fetch=}" + export FETCH + ;; forcepersistentfsck) FORCEPERSISTENTFSCK="Yes" @@ -119,7 +119,7 @@ Arguments () httpfs=*) HTTPFS="${ARGUMENT#httpfs=}" export HTTPFS - ;; + ;; iscsi=*) ISCSI="${ARGUMENT#iscsi=}" @@ -230,6 +230,10 @@ Arguments () export NONETWORKING ;; + ramdisk-size=*) + ramdisk_size="${ARGUMENT#ramdisk-size=}" + ;; + swapon) SWAPON="Yes" export SWAPON @@ -485,6 +489,9 @@ is_nice_device () elif echo ${sysfs_path} | grep -q "^/block/dm-" then return 0 + elif echo ${sysfs_path} | grep -q "^/block/mtdblock" + then + return 0 fi return 1 @@ -539,6 +546,13 @@ copy_live_to () return 1 fi + # Custom ramdisk size + if [ -z "${mount_options}" ] && [ -n "${ramdisk_size}" ] + then + # FIXME: should check for wrong values + mount_options="-o size=${ramdisk_size}" + fi + # begin copying (or uncompressing) mkdir "${copyto}" log_begin_msg "mount -t ${fstype} ${mount_options} ${dev} ${copyto}" @@ -784,7 +798,7 @@ do_iscsi() [ "${DEBUG}" == "Yes" ] && debugopt="-d 8" #FIXME this name is supposed to be unique - some date + ifconfig hash? ISCSI_INITIATORNAME="iqn.1993-08.org.debian.live:01:$(echo "${HWADDR}" | sed -e s/://g)" - export ISCSI_INITIATORNAME + export ISCSI_INITIATORNAME if [ -n "${ISCSI_SERVER}" ] ; then iscsistart $debugopt -i "${ISCSI_INITIATORNAME}" -t "${ISCSI_TARGET}" -g 1 -a "${ISCSI_SERVER}" -p "${ISCSI_PORT}" else @@ -1032,7 +1046,7 @@ find_snap () try_snap () { - # copy the contents of previously found snapshot to ${snap_mount} + # copy the contents of previously found snapshot to ${snap_mount} # and remember the device and filename for resync on exit in live-boot.init snapdata="${1}" @@ -1148,7 +1162,7 @@ setup_unionfs () { image_directory="${1}" rootmnt="${2}" - addimage_directory="${3}" + addimage_directory="${3}" case ${UNIONTYPE} in aufs|unionfs) @@ -1177,7 +1191,6 @@ setup_unionfs () croot="/" # Let's just mount the read-only file systems first - rofsstring="" rofslist="" if [ "${UNIONTYPE}" = "aufs" ] @@ -1237,7 +1250,7 @@ setup_unionfs () image_string="$(echo ${image_string} | sed -e 's/ /\n/g' | sort )" fi - [ -n "${MODULETORAMFILE}" ] && image_string="${image_directory}/$(basename ${MODULETORAMFILE})" + [ -n "${MODULETORAMFILE}" ] && image_string="${image_directory}/$(basename ${MODULETORAMFILE})" mkdir -p "${croot}" @@ -1254,7 +1267,6 @@ setup_unionfs () if [ -d "${image}" ] then # it is a plain directory: do nothing - rofsstring="${image}=${roopt}:${rofsstring}" rofslist="${image} ${rofslist}" elif [ -f "${image}" ] then @@ -1280,9 +1292,10 @@ setup_unionfs () if [ "${UNIONTYPE}" != "unionmount" ] then mpoint="${croot}/${imagename}" - rofsstring="${mpoint}=${roopt}:${rofsstring}" && rofslist="${mpoint} ${rofslist}" + rofslist="${mpoint} ${rofslist}" else mpoint="${rootmnt}" + rofslist="${rootmnt} ${rofslist}" fi mkdir -p "${mpoint}" log_begin_msg "Mounting \"${image}\" on \"${mpoint}\" via \"${backdev}\"" @@ -1294,14 +1307,14 @@ setup_unionfs () # we have a plain root system mkdir -p "${croot}/filesystem" log_begin_msg "Mounting \"${image_directory}\" on \"${croot}/filesystem\"" - mount -t $(get_fstype "${image_directory}") -o ro,noatime "${image_directory}" "${croot}/filesystem" || panic "Can not mount ${image_directory} on ${croot}/filesystem" && rofsstring="${croot}/filesystem=${roopt}:${rofsstring}" && rofslist="${croot}/filesystem ${rofslist}" + mount -t $(get_fstype "${image_directory}") -o ro,noatime "${image_directory}" "${croot}/filesystem" || \ + panic "Can not mount ${image_directory} on ${croot}/filesystem" && \ + rofslist="${croot}/filesystem ${rofslist}" # probably broken: mount -o bind ${croot}/filesystem $mountpoint log_end_msg fi - rofsstring=${rofsstring%:} - mkdir -p /cow # Looking for "${root_persistence}" device or file @@ -1403,30 +1416,30 @@ setup_unionfs () if [ "${UNIONTYPE}" != "unionmount" ] then - 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" - else - mount -t ${cow_fstype} -o ${cow_mountopt} ${cowdevice} /cow || \ - panic "Can not mount ${cowdevice} (o: ${cow_fstype}) on /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" + else + mount -t ${cow_fstype} -o ${cow_mountopt} ${cowdevice} /cow || \ + panic "Can not mount ${cowdevice} (o: ${cow_fstype}) on /cow" + fi fi rofscount=$(echo ${rofslist} |wc -w) - if [ -n "${EXPOSED_ROOT}" ] + if [ ${rofscount} -ne 1 ] then - if [ ${rofscount} -ne 1 ] - then - panic "only one RO file system supported with exposedroot: ${rofslist}" - fi - exposedrootfs=${rofslist%% } + panic "only one RO file system supported with exposedroot: ${rofslist}" + fi + rofs=${rofslist%% } - mount --bind ${exposedrootfs} ${rootmnt} || \ - panic "bind mount of ${exposedrootfs} failed" + if [ -n "${EXPOSED_ROOT}" ] + then + mount --bind ${rofs} ${rootmnt} || \ + panic "bind mount of ${rofs} failed" if [ -z "${SKIP_UNION_MOUNTS}" ] then @@ -1434,39 +1447,49 @@ setup_unionfs () else cow_dirs='' fi + else + cow_dirs="/" + fi - for dir in ${cow_dirs}; do - mkdir -p /cow${dir} + if [ "${cow_fstype}" != "tmpfs" ] && [ "${cow_dirs}" != "/" ] && [ "${UNIONTYPE}" = "unionmount" ] + then + true # FIXME: Maybe it does, I don't really know. + #panic "unionmount does not support subunions (${cow_dirs})." + fi - case "${UNIONTYPE}" in - unionfs-fuse) - (ulimit -n 16384; unionfs-fuse -o cow -o noinitgroups -o default_permissions -o allow_other -o use_ino -o suid /cow=RW:${exposedrootfs}${dir} "${rootmnt}${dir}" || panic "mount ${UNIONTYPE} on ${rootmnt}${dir} failed with option cow,noinitgroups,default_permissions,allow_other,use_ino,suid=/cow=RW:${exposedrootfs}${dir}") - mkdir -p /dev/.initramfs/varrun - pidof unionfs-fuse >> /dev/.initramfs/varrun/sendsigs.omit || true - ;; + unionmountopts="" + unionmountpoint="" - *) - 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" - ;; - esac - done - else + for dir in ${cow_dirs}; do + mkdir -p /cow${dir} + + unionmountpoint="${rootmnt}${dir}" + unionrw="/cow${dir}" + unionro="${rofs}${dir}" + # We don't handle spaces and other junk gracefully here, hopefully not needed. case "${UNIONTYPE}" in unionfs-fuse) - (ulimit -n 16384; unionfs-fuse -o cow -o noinitgroups -o default_permissions -o allow_other -o use_ino -o suid /cow=RW:${rofsstring} "${rootmnt}" || panic "mount ${UNIONTYPE} on ${rootmnt} failed with option cow,noinitgroups,default_permissions,allow_other,use_ino,suid=/cow:RW:${rofsstring}") - mkdir -p /dev/.initramfs/varrun - pidof unionfs-fuse >> /dev/.initramfs/varrun/sendsigs.omit || true + unionmountopts="-o cow -o noinitgroups -o default_permissions -o allow_other -o use_ino -o suid" + unionmountopts="${unionmountopts} ${unionrw}=RW:${unionro}=RO" + ( sysctl -w fs.file-max=391524 ; ulimit -HSn 16384 + unionfs-fuse ${unionmountopts} "${unionmountpoint}" ) && \ + ( mkdir -p /dev/.initramfs/varrun + pidof unionfs-fuse >> /dev/.initramfs/varrun/sendsigs.omit || true ) ;; unionmount) - mount_full -t ${cow_fstype} -o noatime,union,${cow_mountopt} ${cowdevice} "${rootmnt}" || panic "${UNIONTYPE} ${cowdevice} on ${rootmnt} failed with option noatime,union,${cow_mountopt}" + unionmountopts="-t ${cow_fstype} -o noatime,union,${cow_mountopt} ${cowdevice}" + mount_full $unionmountopts "${unionmountpoint}" ;; + *) - mount -t ${UNIONTYPE} -o noatime,${noxino_opt}dirs=/cow=rw:${rofsstring} ${UNIONTYPE} "${rootmnt}" || panic "mount ${UNIONTYPE} on ${rootmnt} failed with option noatime,${noxino_opt}dirs=/cow=rw:${rofsstring}" + unionmountopts="-o noatime,${noxino_opt}dirs=${unionrw}=rw:${unionro}=${roopt}" + mount -t ${UNIONTYPE} ${unionmountopts} ${UNIONTYPE} "${unionmountpoint}" ;; - esac - fi + esac || \ + panic "mount ${UNIONTYPE} on ${unionmountpoint} failed with option ${unionmountopts}" + done # Correct the permissions of /: chmod 0755 "${rootmnt}" @@ -1553,7 +1576,7 @@ check_dev () if [ "$ISO_DEVICE" = "/" ] then - echo "Warning: device for bootoption isofrom= ($FROMISO) not found.">>/live.log + echo "Warning: device for bootoption isofrom= ($FROMISO) not found.">>/live-boot.log else mkdir /isofrom mount -t auto "$ISO_DEVICE" /isofrom @@ -1759,15 +1782,15 @@ integrity_check () mountroot () { - if [ -x /scripts/local-top/cryptroot ]; then + if [ -x /scripts/local-top/cryptroot ]; then /scripts/local-top/cryptroot fi exec 6>&1 exec 7>&2 - exec > live.log + exec > live-boot.log exec 2>&1 - tail -f live.log >&7 & + tail -f live-boot.log >&7 & tailpid="${!}" # Ensure 'panic' function is overridden @@ -1927,5 +1950,5 @@ mountroot () exec 1>&6 6>&- exec 2>&7 7>&- kill ${tailpid} - [ -w "${rootmnt}/var/log/" ] && cp live.log "${rootmnt}/var/log/" 2>/dev/null + [ -w "${rootmnt}/var/log/" ] && cp live-boot.log "${rootmnt}/var/log/" 2>/dev/null }