This patch enables support for verifying the ISO through bootid=.... bootoption.
authorMichael Prokop <mika@grml.org>
Fri, 26 Jun 2015 12:47:59 +0000 (14:47 +0200)
committerEvgeni Golov <evgeni@debian.org>
Fri, 26 Jun 2015 12:47:59 +0000 (14:47 +0200)
Logic behind bootoptions and possible combinations:
* bootid.txt + wrong bootid=...                    => fails to boot
* bootid.txt + right bootid=...                    => boots
* bootid.txt + ignore_bootid                       => boots
* bootid.txt + no bootid=... + no ignore_bootid    => fails to boot
* no bootid.txt + no bootid=... + no ignore_bootid => boots
* no bootid.txt + bootid=...                       => fails to boot
* no bootid.txt + ignore_bootid=...                => boots

components/9990-cmdline-old
components/9990-misc-helpers.sh

index efb33c1..cccd8f2 100755 (executable)
@@ -18,6 +18,11 @@ Cmdline_old ()
                                BOOTIF="${_PARAMETER#BOOTIF=}"
                                ;;
 
+                       bootid=*)
+                               BOOTID="${_PARAMETER#bootid=}"
+                               export BOOTID
+                               ;;
+
                        dhcp)
                                # Force dhcp even while netbooting
                                # Use for debugging in case somebody works on fixing dhclient
@@ -79,6 +84,11 @@ Cmdline_old ()
                                export FROMISO
                                ;;
 
+                       ignore_bootid)
+                               IGNORE_BOOTID="Yes"
+                               export IGNORE_BOOTID
+                               ;;
+
                        ignore_uuid)
                                IGNORE_UUID="true"
                                export IGNORE_UUID
index 9318a4b..4251898 100755 (executable)
@@ -15,6 +15,42 @@ is_live_path()
        return 1
 }
 
+grml_match_bootid()
+{
+       path="$1"
+
+       if [ -n "$IGNORE_BOOTID" ] ; then
+               echo " * Ignoring verification of bootid.txt as requested via ignore_bootid.">>/boot.log
+               return 0
+       fi
+
+       if [ -n "$BOOTID" ] && ! [ -r "${path}/conf/bootid.txt" ] ; then
+               echo "  * Warning: bootid=... specified but no bootid.txt found on currently requested device.">>/boot.log
+               return 1
+       fi
+
+       [ -r "${path}/conf/bootid.txt" ] || return 0
+
+       bootid_conf=$(cat "${path}/conf/bootid.txt")
+
+       if [ -z "$BOOTID" -a -z "$IGNORE_BOOTID" ]
+       then
+               echo " * Warning: bootid.txt found but ignore_bootid / bootid=.. bootoption missing...">>/boot.log
+               return 1
+       fi
+
+       if [ "$BOOTID" = "$bootid_conf" ]
+       then
+               echo " * Successfully verified /conf/bootid.txt from ISO, continuing... ">>/boot.log
+       else
+               echo " * Warning: BOOTID of ISO does not match. Retrying and continuing search...">>/boot.log
+               return 1
+       fi
+
+       return 0
+}
+
+
 matches_uuid ()
 {
        if [ "${IGNORE_UUID}" ] || [ ! -e /conf/uuid.conf ]
@@ -214,7 +250,7 @@ check_dev ()
                fi
 
                if is_live_path ${mountpoint} && \
-                       ([ "${skip_uuid_check}" ] || matches_uuid ${mountpoint})
+                       ([ "${skip_uuid_check}" ] || grml_match_bootid ${mountpoint})
                then
                        echo ${mountpoint}
                        return 0
@@ -310,19 +346,6 @@ find_livefs ()
                                        return 0
                                fi
                        done
-               elif [ "${fstype}" = "squashfs" -o \
-                       "${fstype}" = "btrfs" -o \
-                       "${fstype}" = "ext2" -o \
-                       "${fstype}" = "ext3" -o \
-                       "${fstype}" = "ext4" -o \
-                       "${fstype}" = "jffs2" ]
-               then
-                       # This is an ugly hack situation, the block device has
-                       # an image directly on it.  It's hopefully
-                       # live-boot, so take it and run with it.
-                       ln -s "${devname}" "${devname}.${fstype}"
-                       echo "${devname}.${fstype}"
-                       return 0
                fi
        done