From 612de86fa7f8d721690c1b70e216cbc678d280a7 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Tue, 16 Mar 2010 18:52:22 +0100 Subject: [PATCH] Merging casper 1.175. --- debian/control | 2 +- docs/ChangeLog.casper | 10 ++++++++ hooks/live | 6 +++++ scripts/live | 64 +++++++++++++++++++++++++++++++++++++++++++-------- 4 files changed, 71 insertions(+), 11 deletions(-) diff --git a/debian/control b/debian/control index bc80150..75b5897 100644 --- a/debian/control +++ b/debian/control @@ -16,7 +16,7 @@ Depends: ${misc:Depends}, busybox, file, initramfs-tools, sudo, udev, user-setup Recommends: cryptsetup, eject, rsync, uuid-runtime, wget Suggests: loop-aes-utils, curlftpfs, genext2fs (>= 1.4.1), httpfs2, squashfs-tools, - mtd-tools + mtd-tools, unionfs-fuse Description: Debian Live initramfs hook live-initramfs is a hook for the initramfs-tools, used to generate a initramfs capable to boot live systems, such as those created by live-helper. This diff --git a/docs/ChangeLog.casper b/docs/ChangeLog.casper index e5eed55..a172b09 100644 --- a/docs/ChangeLog.casper +++ b/docs/ChangeLog.casper @@ -1,3 +1,13 @@ +casper (1.175) karmic; urgency=low + + * Suppress error message if + /root/usr/share/applications/firefox-fav.desktop doesn't exist. + * Add unionfs-fuse support. + * Automatically fall back to unionfs-fuse if the default union filesystem + is not available but unionfs-fuse is. + + -- Colin Watson Sun, 24 May 2009 12:28:00 +0100 + casper (1.174) karmic; urgency=low * debian/control: Increase dependency on initramfs-tools to get the version diff --git a/hooks/live b/hooks/live index 6862407..5973d20 100755 --- a/hooks/live +++ b/hooks/live @@ -116,6 +116,12 @@ manual_add_modules unlzma manual_add_modules aufs manual_add_modules unionfs +# Filesystem: unionfs-fuse +if [ -x /usr/bin/unionfs-fuse ] +then + copy_exec /usr/bin/unionfs-fuse /bin +fi + # Filesystem: vfat manual_add_modules nls_cp437 manual_add_modules nls_iso8859-1 diff --git a/scripts/live b/scripts/live index 96ab63a..3e7ed03 100755 --- a/scripts/live +++ b/scripts/live @@ -1086,7 +1086,17 @@ setup_unionfs () image_directory="${1}" rootmnt="${2}" addimage_directory="${3}" - modprobe -q -b ${UNIONTYPE} + + case ${UNIONTYPE} in + aufs|unionfs) + modprobe -q -b ${UNIONTYPE} + + if ! cut -f2 /proc/filesystems | grep -q "^${UNIONTYPE}\$" && [ -x /bin/unionfs-fuse ] + then + UNIONTYPE="unionfs-fuse" + fi + ;; + esac # 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, @@ -1102,6 +1112,9 @@ setup_unionfs () if [ "${UNIONTYPE}" = "aufs" ] then roopt="rr,noxino" + elif [ "${UNIONTYPE}" = "unionfs-fuse" ] + then + roopt="RO" else roopt="ro" fi @@ -1341,16 +1354,27 @@ setup_unionfs () 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" + + 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}") + ;; + + *) + 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 - mount -t ${UNIONTYPE} -o noatime,dirs=/cow=rw:${rofsstring} \ - ${UNIONTYPE} "${rootmnt}" || panic "mount ${UNIONTYPE} on \ - ${rootmnt} failed with option noatime,dirs=/cow=rw:${rofsstring}" + 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}") + ;; + + *) + mount -t ${UNIONTYPE} -o noatime,dirs=/cow=rw:${rofsstring} ${UNIONTYPE} "${rootmnt}" || panic "mount ${UNIONTYPE} on ${rootmnt} failed with option noatime,dirs=/cow=rw:${rofsstring}" + ;; + esac fi # Correct the permissions of /: @@ -1393,7 +1417,15 @@ setup_unionfs () ;; *) - mount -o move "${d}" "${rootmnt}/live/${d##*/}" + case "${UNIONTYPE}" in + unionfs-fuse) + mount -o bind "${d}" "${rootmnt}/live/${d##*/}" + ;; + + *) + mount -o move "${d}" "${rootmnt}/live/${d##*/}" + ;; + esac ;; esac done @@ -1714,12 +1746,24 @@ mountroot () log_end_msg + # unionfs-fuse needs /dev to be bind-mounted for the duration of + # live-bottom; udev's init script will take care of things after that + if [ "${UNIONTYPE}" = unionfs-fuse ] + then + mount -n -o bind /dev "${rootmnt}/dev" + fi + maybe_break live-bottom log_begin_msg "Running /scripts/live-bottom\n" run_scripts /scripts/live-bottom log_end_msg + if [ "${UNIONFS}" = unionfs-fuse ] + then + umount "${rootmnt}/dev" + fi + exec 1>&6 6>&- exec 2>&7 7>&- kill ${tailpid} -- 2.1.4