Secure Boot support
[grml-live.git] / etc / grml / fai / config / scripts / GRMLBASE / 45-grub-images
index 42ed130..84bc178 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash
-# Filename:      ${GRML_FAI_CONFIG}/config/scripts/GRMLBASE/45-efi
-# Purpose:       create grub image for use in ISO for EFI boot
+# Filename:      ${GRML_FAI_CONFIG}/config/scripts/GRMLBASE/45-grub-images
+# Purpose:       create grub images for use in ISO
 # Authors:       grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
 # Bug-Reports:   see http://grml.org/bugs/
 # License:       This file is licensed under the GPL v2 or any later version.
@@ -9,15 +9,9 @@
 set -e
 set -u
 
+TMP_CONFIG="/tmp/grub_config_efi"
 
-BOOTX64="${target}/boot/bootx64.efi"
-BOOTX32="${target}/boot/bootia32.efi"
-EFI_IMG="${target}/boot/efi.img"
-TMP_CONFIG="${target}/tmp/grub_config_efi"
-
-rm -f "$BOOTX64" "$EFI_IMG" "$TMP_CONFIG"
-
-cat > "$TMP_CONFIG" <<EOF
+cat > "${target}/${TMP_CONFIG}" <<EOF
 search.file /conf/bootid.txt root
 set prefix=(\$root)/boot/grub
 insmod normal
@@ -25,13 +19,7 @@ normal
 echo "E: Could not find root device!"
 EOF
 
-BOOTX64="${BOOTX64##${target}}"
-BOOTX32="${BOOTX32##${target}}"
-EFI_IMG="${EFI_IMG##${target}}"
-TMP_CONFIG="${TMP_CONFIG##${target}}"
-
 ARCHS=(i386-pc)
-
 declare -A ADDITIONAL_MODULES
 ADDITIONAL_MODULES[i386-pc]="biosdisk"
 
@@ -43,7 +31,9 @@ if ifclass AMD64 ; then
     echo "/usr/lib/grub/x86_64-efi/moddep.lst could not be found, skipping."
     echo "NOTE: grub-efi-amd64-bin not installed?"
   fi
-elif ifclass I386 ; then
+fi
+
+if ifclass I386 ; then
   if [ -r "${target}"/usr/lib/grub/i386-efi/moddep.lst ] ; then
     ARCHS+=(i386-efi)
     ADDITIONAL_MODULES[i386-efi]="efi_gop efi_uga"
@@ -53,53 +43,20 @@ elif ifclass I386 ; then
   fi
 fi
 
-for arch in ${ARCHS[@]} ; do
-  $ROOTCMD grub-mkimage -O $arch -o /boot/$arch.img --prefix=/boot/grub/ --config="$TMP_CONFIG" \
+for arch in "${ARCHS[@]}" ; do
+  filename=''
+  case "$arch" in
+    i386-pc)    filename=/boot/grub/grub.img ;;
+    x86_64-efi) filename=/boot/bootx64.efi   ;;
+    i386-efi)   filename=/boot/bootia32.efi  ;;
+  esac
+
+  $ROOTCMD grub-mkimage -O $arch -o "$filename" --prefix=/boot/grub/ --config="$TMP_CONFIG" \
     echo iso9660 part_msdos search_fs_file test \
     fat ext2 reiserfs xfs btrfs squash4 part_gpt lvm \
     ${ADDITIONAL_MODULES[$arch]}
 done
 
-if [ -f "${target}/boot/i386-pc.img" ] ; then
-  mv "${target}/boot/i386-pc.img" "${target}/boot/grub/grub.img"
-fi
-
-if [ -f "${target}/boot/x86_64-efi.img" ] ; then
-  mv "${target}/boot/x86_64-efi.img" "${target}/${BOOTX64}"
-fi
-
-if [ -f "${target}/boot/i386-efi.img" ] ; then
-  mv "${target}/boot/i386-efi.img" "${target}/${BOOTX32}"
-fi
-
-if ifclass AMD64 ; then
-  if ! [ -r "${target}/${BOOTX64}" ] ; then
-    echo "Can not access grub efi image ${BOOTX64}." >&2
-    exit 1
-  fi
-
-  dd if=/dev/zero of="${target}/${EFI_IMG}" bs=4M count=1 2>/dev/null
-  $ROOTCMD mkfs.vfat -n GRML "$EFI_IMG" >/dev/null
-  $ROOTCMD mmd -i "$EFI_IMG" ::EFI
-  $ROOTCMD mmd -i "$EFI_IMG" ::EFI/BOOT
-  $ROOTCMD mcopy -i "$EFI_IMG" "$BOOTX64" ::EFI/BOOT/bootx64.efi >/dev/null
-  echo "Generated 64-bit EFI image $BOOTX64"
-elif ifclass I386 ; then
-  if ! [ -r "${target}/${BOOTX32}" ] ; then
-    echo "Can not access grub efi image ${BOOTX32}." >&2
-    exit 1
-  fi
-
-  dd if=/dev/zero of="${target}/${EFI_IMG}" bs=4M count=1 2>/dev/null
-  $ROOTCMD mkfs.vfat -n GRML "$EFI_IMG" >/dev/null
-  $ROOTCMD mmd -i "$EFI_IMG" ::EFI
-  $ROOTCMD mmd -i "$EFI_IMG" ::EFI/BOOT
-  $ROOTCMD mcopy -i "$EFI_IMG" "$BOOTX32" ::EFI/BOOT/bootia32.efi >/dev/null
-  echo "Generated 32-bit EFI image $BOOTX32"
-fi
-
-echo "Generated EFI image $EFI_IMG"
-
 rm -f "${target}/${TMP_CONFIG}"
 echo "Generated Grub images"