Merging casper 1.175.
authorDaniel Baumann <daniel@debian.org>
Tue, 16 Mar 2010 17:52:22 +0000 (18:52 +0100)
committerDaniel Baumann <daniel@debian.org>
Wed, 9 Mar 2011 16:48:07 +0000 (17:48 +0100)
debian/control
docs/ChangeLog.casper
hooks/live
scripts/live

index bc80150..75b5897 100644 (file)
@@ -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
index e5eed55..a172b09 100644 (file)
@@ -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 <cjwatson@ubuntu.com>  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
index 6862407..5973d20 100755 (executable)
@@ -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
index 96ab63a..3e7ed03 100755 (executable)
@@ -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}