Integrate grub2 for hybrid boot
[grml-live.git] / grml-live
index 40521c3..0e0a639 100755 (executable)
--- a/grml-live
+++ b/grml-live
@@ -14,7 +14,7 @@ export LC_ALL=C
 # exit on any error:
 set -e
 
-GRML_LIVE_VERSION='0.9.12'
+GRML_LIVE_VERSION='0.9.18'
 PN="$(basename $0)"
 CMDLINE="$0 $@"
 ISO_DATE="$(date +%Y-%m-%d)"
@@ -552,19 +552,26 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then
       cp ${TEMPLATE_DIRECTORY}/boot/isolinux/*  "$BUILD_OUTPUT"/boot/isolinux/
 
       if [ -z "$NO_ADDONS" ] ; then
-         # copy only files so we can handle bsd4grml on its own
-         for file in ${TEMPLATE_DIRECTORY}/boot/addons/* ; do
-             test -f $file && cp $file "$BUILD_OUTPUT"/boot/addons/
-         done
+         if ! [ -d /usr/share/grml-live/templates/boot/addons/bsd4grml ] ; then
+           ewarn "Boot addons not found, skipping therefor. (Consider installing package grml-live-addons)" ; eend 0
+         else
+           # copy only files so we can handle bsd4grml on its own
+           for file in ${TEMPLATE_DIRECTORY}/boot/addons/* ; do
+               test -f $file && cp $file "$BUILD_OUTPUT"/boot/addons/
+           done
 
-         if [ -z "$NO_ADDONS_BSD4GRML" ] ; then
-            cp -a ${TEMPLATE_DIRECTORY}/boot/addons/bsd4grml "$BUILD_OUTPUT"/boot/addons/
+           if [ -z "$NO_ADDONS_BSD4GRML" ] ; then
+              cp -a ${TEMPLATE_DIRECTORY}/boot/addons/bsd4grml "$BUILD_OUTPUT"/boot/addons/
+           fi
          fi
       fi
 
       if ! [ -d "${BUILD_OUTPUT}/boot/grub" ] ; then
          cp -a ${TEMPLATE_DIRECTORY}/boot/grub  "$BUILD_OUTPUT"/boot/
       fi
+      # make sure we have recent template files available, otherwise updating
+      # the strings like $GRML_NAME and $VERSION might be out of date
+      cp ${TEMPLATE_DIRECTORY}/boot/grub/* "$BUILD_OUTPUT"/boot/grub/
 
       if ! [ -d "${TEMPLATE_DIRECTORY}"/GRML ] ; then
          log "${TEMPLATE_DIRECTORY}/GRML does not exist. Exiting."
@@ -595,10 +602,14 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then
       sed -i "s/%VERSION%/$VERSION/"           "$BUILD_OUTPUT"/boot/grub/menu.lst
       sed -i "s/%GRML_NAME%/$SHORT_GRML_NAME/" "$BUILD_OUTPUT"/boot/grub/menu.lst
 
+      sed -i "s/%VERSION%/$VERSION/"           "$BUILD_OUTPUT"/boot/grub/grub.cfg
+      sed -i "s/%GRML_NAME%/$SHORT_GRML_NAME/" "$BUILD_OUTPUT"/boot/grub/grub.cfg
+
       # make sure the squashfs filename is set accordingly:
       GRML_NAME_SQUASHFS="$GRML_NAME.squashfs"
       sed -i "s/%GRML_NAME_SQUASHFS%/$GRML_NAME_SQUASHFS/" "$BUILD_OUTPUT"/boot/isolinux/isolinux.cfg
       sed -i "s/%GRML_NAME_SQUASHFS%/$GRML_NAME_SQUASHFS/" "$BUILD_OUTPUT"/boot/isolinux/syslinux.cfg
+      sed -i "s/%GRML_NAME_SQUASHFS%/$GRML_NAME_SQUASHFS/" "$BUILD_OUTPUT"/boot/grub/menu.lst
 
       GRML_NAME_SQUASHFS="$(cut_string 20 "$GRML_NAME_SQUASHFS")"
       GRML_NAME_SQUASHFS="$(extend_string_end 20 "$GRML_NAME_SQUASHFS")"
@@ -727,6 +738,33 @@ else
               -b $BOOT_FILE \
               -o "${ISO_OUTPUT}/${ISO_NAME}" . ; RC=$?
 
+      # support disabling hybrid ISO image
+      if [ "$HYBRID_METHOD" = "disable" ] ; then\
+         log "Skipping creation of hybrid ISO file as requested via HYBRID_METHOD=disable"
+         einfo "Skipping creation of hybrid ISO file as requested via HYBRID_METHOD=disable"
+         eend 0
+      # use isohybrid only on request
+      elif [ "$HYBRID_METHOD" = "isohybrid" ] ; then
+         if ! which isohybrid >/dev/null 2>&1 ; then
+           bailout 12 "isohybrid binary not found - please install syslinux/syslinux-common"
+         else
+           log "Creating hybrid ISO file with isohybrid method"
+           einfo "Creating hybrid ISO file with isohybrid method"
+           isohybrid "${ISO_OUTPUT}/${ISO_NAME}"
+           eend $?
+         fi
+      # by default use our manifold boot method:
+      else
+         if ! [ -r boot/grub/core.img ] ; then
+           ewarn "boot/grub/core.img not found, not creating manifold boot ISO file"
+         else
+           log "Creating hybrid ISO file with manifold method"
+           einfo "Creating hybrid ISO file with manifold method"
+           echo 1 63 | mksh /usr/share/grml-live/scripts/bootgrub.mksh | cat - boot/grub/core.img | dd conv=notrunc of="${ISO_OUTPUT}/${ISO_NAME}" conv=notrunc
+           eend $?
+         fi
+      fi
+
       # generate md5sum and sha1sum of ISO if we are using class 'RELEASE':
       case $CLASSES in *RELEASE*)
          [ "$RC" = 0 ] && \