Release new version 0.38.1
[grml-live.git] / grml-live
index 1158f86..8b0adfe 100755 (executable)
--- a/grml-live
+++ b/grml-live
@@ -184,6 +184,24 @@ umount_all() {
 }
 # }}}
 
+# store logfiles {{{
+store_logfiles() {
+  # move fai logs into grml_logs directory
+  mkdir -p "$LOG_OUTPUT"/fai/
+  cp -r "$CHROOT_OUTPUT"/var/log/fai/"$HOSTNAME"/last/* "$LOG_OUTPUT"/fai/
+  rm -rf "$CHROOT_OUTPUT"/var/log/fai
+
+  # store copy of autogenerated configuration file
+  cp ${GRML_FAI_CONFIG}/nfsroot.conf "$LOG_OUTPUT"/fai/
+
+  # copy fai package list
+  cp "$CHROOT_OUTPUT"/var/log/install_packages.list "$LOG_OUTPUT"/fai/
+  # fixup owners
+  chown root:adm "$LOG_OUTPUT"/fai/*
+  chmod 664 "$LOG_OUTPUT"/fai/*
+}
+# }}}
+
 # clean exit {{{
 bailout() {
   rm -f /var/run/fai/fai_softupdate_is_running \
@@ -745,9 +763,10 @@ else
       RC="$PIPESTATUS" # notice: bash-only
 
       if [ "$RC" != 0 ] ; then
-         log    "Error: critical error while executing fai [exit code ${RC}]. Exiting."
-         eerror "Error: critical error while executing fai [exit code ${RC}]. Exiting." ; eend 1
-         bailout 1
+        store_logfiles  # ensure to have logfiles available even if building failed
+        log    "Error: critical error while executing fai [exit code ${RC}]. Exiting."
+        eerror "Error: critical error while executing fai [exit code ${RC}]. Exiting." ; eend 1
+        bailout 1
       fi
 
       # provide inform fai about the ISO we build, needs to be provided
@@ -759,19 +778,7 @@ else
 
       FORCE_ISO_REBUILD=true
 
-      # move fai logs into grml_logs directory
-      mkdir -p "$LOG_OUTPUT"/fai/
-      cp -r "$CHROOT_OUTPUT"/var/log/fai/"$HOSTNAME"/last/* "$LOG_OUTPUT"/fai/
-      rm -rf "$CHROOT_OUTPUT"/var/log/fai
-
-      # store copy of autogenerated configuration file
-      cp ${GRML_FAI_CONFIG}/nfsroot.conf "$LOG_OUTPUT"/fai/
-
-      # copy fai package list
-      cp "$CHROOT_OUTPUT"/var/log/install_packages.list "$LOG_OUTPUT"/fai/
-      # fixup owners
-      chown root:adm "$LOG_OUTPUT"/fai/*
-      chmod 664 "$LOG_OUTPUT"/fai/*
+      store_logfiles
 
       umount_all
 
@@ -967,7 +974,7 @@ grub_setup() {
           ;;
         *)
           log   "Secure Boot method '${SECURE_BOOT}' is unsupported."
-          error "Secure Boot method '${SECURE_BOOT}' is unsupported." ; eend 1
+          eerror "Secure Boot method '${SECURE_BOOT}' is unsupported." ; eend 1
           bailout 59
           ;;
       esac
@@ -1116,12 +1123,16 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then
       log   "Skipping installation of boot addons as requested via \$NO_ADDONS."
       einfo "Skipping installation of boot addons as requested via \$NO_ADDONS."; eend 0
     else
-      if ! [ -d "$TEMPLATE_DIRECTORY"/boot/addons ] ; then
+      if ! [ -r "$TEMPLATE_DIRECTORY"/boot/addons ] ; then
         log   "Boot addons not found, skipping therefore. (Consider installing package grml-live-addons)"
         ewarn "Boot addons not found, skipping therefore. (Consider installing package grml-live-addons)" ; eend 0
       else
+        log   "Installing boot addons."
+        einfo "Installing boot addons."
+
         # copy addons from system packages or grml-live-addons
         copy_addon_file ipxe.lkrn /usr/lib/ipxe addons
+        copy_addon_file ipxe.efi /usr/lib/ipxe addons
         copy_addon_file pci.ids /usr/share/misc addons
         copy_addon_file memtest86+.bin /boot addons
 
@@ -1138,6 +1149,8 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then
 
         copy_addon_file memdisk /usr/lib/syslinux addons
 
+        eend 0
+
         # make memtest filename FAT16/8.3 compatible
         mv "${BUILD_OUTPUT}/boot/addons/memtest86+.bin" \
           "${BUILD_OUTPUT}/boot/addons/memtest"
@@ -1372,8 +1385,8 @@ else
 
    # use sane defaults if $SQUASHFS_OPTIONS isn't set
    if [ -z "$SQUASHFS_OPTIONS" ] ; then
-     # use blocksize 256k as this gives best result with regards to time + compression
-     SQUASHFS_OPTIONS="-b 256k"
+     # use block size 1m as this gives good result with regards to time + compression
+     SQUASHFS_OPTIONS="-b 1m"
 
      # set lzma/xz compression by default, unless -z option has been specified on command line
      if [ -z "$SQUASHFS_ZLIB" ] ; then
@@ -1653,6 +1666,53 @@ create_netbootpackage() {
     eoutdent
   fi
 
+  # don't include shim + grubnetx64 + grub files in i386 netboot packages,
+  # as those don't make much sense there
+  if [ "$ARCH" = amd64 ] ; then
+    if ! [ -r "${BUILD_OUTPUT}/boot/grub/netboot.cfg" ] ; then
+      log   "File ${BUILD_OUTPUT}/boot/grub/netboot.cfg not found."
+      ewarn "File ${BUILD_OUTPUT}/boot/grub/netboot.cfg not found."
+      eindent
+      log   "Hint: Are you using custom templates which do not provide grub.cfg?"
+      ewarn "Hint: Are you using custom templates which do not provide grub.cfg?" ; eend 0
+      eoutdent
+    else
+      cp "${BUILD_OUTPUT}/boot/grub/netboot.cfg" "${WORKING_DIR}/grub.cfg"
+      adjust_boot_files "${WORKING_DIR}/grub.cfg"
+
+      if [ -r "${CHROOT_OUTPUT}"/usr/lib/shim/shimx64.efi.signed ] ; then
+        log "Installing ${CHROOT_OUTPUT}/usr/lib/shim/shimx64.efi.signed as shim.efi in netboot package"
+        cp "${CHROOT_OUTPUT}"/usr/lib/shim/shimx64.efi.signed "${WORKING_DIR}"/shim.efi
+      elif [ -r "${CHROOT_OUTPUT}"/usr/lib/shim/shimx64.efi ] ; then
+        log "Installing ${CHROOT_OUTPUT}/usr/lib/shim/shimx64.efi as shim.efi in netboot package"
+        cp "${CHROOT_OUTPUT}"/usr/lib/shim/shimx64.efi "${WORKING_DIR}"/shim.efi
+      else
+        log   "No shimx64.efi for usage with PXE boot found (shim-signed not present?)"
+        ewarn "No shimx64.efi for usage with PXE boot found (shim-signed not present?)" ; eend 0
+      fi
+
+      if [ -r /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed ] ; then
+        log "Installing /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed as grubx64.efi in netboot package"
+        cp /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed "${WORKING_DIR}"/grubx64.efi
+      elif [ -r /usr/lib/grub/x86_64-efi/monolithic/grubnetx64.efi ] ; then
+        log "Installing /usr/lib/grub/x86_64-efi/monolithic/grubnetx64.efi as grubx64.efi in netboot package"
+        cp /usr/lib/grub/x86_64-efi/monolithic/grubnetx64.efi "${WORKING_DIR}"/grubx64.efi
+      else
+        log   "No grubnetx64.efi for usage with PXE boot found (grub-efi-amd64-signed not present?)"
+        ewarn "No grubnetx64.efi for usage with PXE boot found (grub-efi-amd64-signed not present?)." ; eend 0
+      fi
+
+      if [ -r "${CHROOT_OUTPUT}"/usr/share/grub/unicode.pf2 ] ; then
+        log "Installing ${CHROOT_OUTPUT}/usr/share/grub/unicode.pf2 as grub/fonts/unicode.pf2 in netboot package"
+        mkdir -p "${WORKING_DIR}"/grub/fonts/
+        cp "${CHROOT_OUTPUT}"/usr/share/grub/unicode.pf2 "${WORKING_DIR}"/grub/fonts/
+      else
+        log   "No unicode.pf2 for usage with PXE boot found (grub-common not present?)"
+        ewarn "No unicode.pf2 for usage with PXE boot found (grub-common not present?)" ; eend 0
+      fi
+    fi
+  fi
+
   if tar -C "$OUTPUTDIR" -jcf "${OUTPUT_FILE}" "grml_netboot_package_${GRML_NAME}_${VERSION}" ; then
     (
       cd $(dirname "${OUTPUT_FILE}")