Merging casper 1.108.
authorDaniel Baumann <daniel@debian.org>
Mon, 8 Oct 2007 22:24:11 +0000 (00:24 +0200)
committerDaniel Baumann <daniel@debian.org>
Wed, 9 Mar 2011 16:31:05 +0000 (17:31 +0100)
docs/ChangeLog.casper
hooks/live
manpages/live-initramfs.en.7.txt
scripts/live

index b1f55c9..bfd3c50 100644 (file)
@@ -1,3 +1,13 @@
+casper (1.108) gutsy; urgency=low
+
+  * If CASPER_GENERATE_UUID is set, generate a random UUID in the initramfs,
+    and check it against the discovered medium (unless booting with the
+    ignore_uuid parameter). This allows live CD images to be safely copied
+    to the hard disk without causing problems when booting future live CDs
+    (LP: #144800).
+
+ -- Colin Watson <cjwatson@ubuntu.com>  Thu, 04 Oct 2007 14:23:37 +0100
+
 casper (1.107) gutsy; urgency=low
 
   * Fix gconf keys for suspend and hibernate (thanks, Oliver Grawert;
index a59fe3b..e692690 100755 (executable)
@@ -120,3 +120,9 @@ if [ -x /usr/bin/wget ]
 then
        copy_exec /usr/bin/wget /bin
 fi
+
+if [ "$CASPER_GENERATE_UUID" ]; then
+    # Unique ID
+    mkdir -p $DESTDIR/conf
+    uuidgen -r > $DESTDIR/conf/uuid.conf
+fi
index c197abb..238c810 100644 (file)
@@ -60,6 +60,11 @@ copying to ram and booting it.
 
 Those parameters lets you override values read from the config file.
 
+  ignore_uuid
+
+Do not check that any UUID embedded in the initramfs matches the discovered medium.
+casper may be told to generate a UUID by setting CASPER_GENERATE_UUID=1 when building the initramfs.
+
   integrity-check::
 
 If specified, an MD5 sum is calculated on the live media during boot and
index ebac3ae..16a54c2 100755 (executable)
@@ -79,6 +79,9 @@ Arguments ()
                                export USERFULLNAME LIVECONF
                                ;;
 
+                       ignore_uuid)
+                               IGNORE_UUID="Yes" ;;
+
                        ip=*)
                                STATICIP="${ARGUMENT#ip=}"
 
@@ -434,6 +437,22 @@ is_live_path ()
        return 1
 }
 
+matches_uuid() {
+    if [ "$IGNORE_UUID" ] || [ ! -e /conf/uuid.conf ]; then
+        return 0
+    fi
+    path="$1"
+    uuid="$(cat /conf/uuid.conf)"
+    for try_uuid_file in "$mountpoint/.disk/casper-uuid"*; do
+        [ -e "$try_uuid_file" ] || continue
+        try_uuid="$(cat "$try_uuid_file")"
+        if [ "$uuid" = "$try_uuid" ]; then
+            return 0
+        fi
+    done
+    return 1
+}
+
 get_backing_device ()
 {
        case "${1}" in
@@ -983,6 +1002,7 @@ check_dev ()
 {
        sysdev="${1}"
        devname="${2}"
+       skip_uuid_check="${3}"
 
        if [ -z "${devname}" ]
        then
@@ -1002,7 +1022,8 @@ check_dev ()
                mount -t ${fstype} -o ro,noatime,nodiratime "${devname}" ${mountpoint} || continue
 
                if is_live_path ${mountpoint}
-               then
+               if is_live_path $mountpoint && \
+                       ([ "$skip_uuid_check" ] || matches_uuid $mountpoint); then
                        echo ${mountpoint}
                        return 0
                else
@@ -1025,7 +1046,7 @@ find_livefs ()
        # first look at the one specified in the command line
        if [ ! -z "${LIVE_MEDIA}" ]
        then
-               if check_dev "null" "${LIVE_MEDIA}"
+               if check_dev "null" "${LIVE_MEDIA}" "skip_uuid_check"
                then
                        return 0
                fi