Make the GRUB images modular
[grml-live.git] / grml-live
index 4a68301..b629c12 100755 (executable)
--- a/grml-live
+++ b/grml-live
@@ -64,7 +64,7 @@ Usage: $PN [options, see as follows]
    -q                      skip mksquashfs
    -Q                      skip netboot package build
    -r <release_name>       release name
-   -s <suite>              Debian suite; values: etch, lenny, squeeze, sid
+   -s <suite>              Debian suite/release, like: stable, testing, unstable
    -t <template_directory> place of the templates
    -u                      update existing chroot instead of rebuilding it from scratch
    -U <username>           arrange output to be owned by specified username
@@ -77,7 +77,7 @@ Usage examples:
     $PN
     $PN -c GRMLBASE,GRML_FULL,AMD64 -o /dev/shm/grml
     $PN -c GRMLBASE,GRML_FULL,AMD64 -i grml_0.0-1.iso -v 0.0-1
-    $PN -c GRMLBASE,GRML_FULL,AMD64 -s sid -V -r 'grml-live rocks'
+    $PN -c GRMLBASE,GRML_FULL,AMD64 -s stable -V -r 'grml-ftw'
 
 More details: man grml-live + /usr/share/doc/grml-live/grml-live.html
               http://grml.org/grml-live/
@@ -147,7 +147,13 @@ fi
 
 # source main configuration file:
 LIVE_CONF=/etc/grml/grml-live.conf
-. $LIVE_CONF
+if ! [ -r "$LIVE_CONF" ] ; then
+  ewarn "Configuration file $LIVE_CONF can not be read, ignoring"
+else
+  einfo "Sourcing configuration file $LIVE_CONF"
+  . $LIVE_CONF
+  eend $?
+fi
 # }}}
 
 # umount all directories {{{
@@ -622,7 +628,7 @@ fi
 
 # generate nfsroot configuration for FAI on the fly
 if [ -z "$FAI_DEBOOTSTRAP" ] ; then
-  FAI_DEBOOTSTRAP="$SUITE http://cdn.debian.net/debian"
+  FAI_DEBOOTSTRAP="$SUITE http://http.debian.net/debian"
 fi
 
 if [ -z "$FAI_DEBOOTSTRAP_OPTS" ] ; then
@@ -690,6 +696,12 @@ else
                   -u "$HOSTNAME" "$FAI_ACTION" "$CHROOT_OUTPUT" $FAI_ARGS | tee -a $LOGFILE
       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
+      fi
+
       # provide inform fai about the ISO we build, needs to be provided
       # *after* FAI stage, otherwise FAI skips the debootstrap stage if
       # there is not BASEFILE (as it checks for presence of /etc) :(
@@ -699,12 +711,6 @@ else
 
       FORCE_ISO_REBUILD=true
 
-      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
-      fi
-
       # move fai logs into grml_logs directory
       mkdir -p "$LOG_OUTPUT"/fai/
       cp -r "$CHROOT_OUTPUT"/var/log/fai/"$HOSTNAME"/last/* "$LOG_OUTPUT"/fai/
@@ -952,13 +958,18 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then
        echo "source /boot/grub/footer.cfg" >> "${BUILD_OUTPUT}"/boot/grub/loopback.cfg
 
        # copy grub files from target
-       cp -a "${CHROOT_OUTPUT}"/usr/lib/grub/*-pc/*.mod "${BUILD_OUTPUT}"/boot/grub/
-       cp -a "${CHROOT_OUTPUT}"/usr/lib/grub/*-pc/*.o "${BUILD_OUTPUT}"/boot/grub/
-       cp -a "${CHROOT_OUTPUT}"/usr/lib/grub/*-pc/*.lst "${BUILD_OUTPUT}"/boot/grub/
+       mkdir -p "${BUILD_OUTPUT}"/boot/grub/i386-pc/
+       cp -a "${CHROOT_OUTPUT}"/usr/lib/grub/*-pc/*.mod "${BUILD_OUTPUT}"/boot/grub/i386-pc/
+       cp -a "${CHROOT_OUTPUT}"/usr/lib/grub/*-pc/*.o "${BUILD_OUTPUT}"/boot/grub/i386-pc/
+       cp -a "${CHROOT_OUTPUT}"/usr/lib/grub/*-pc/*.lst "${BUILD_OUTPUT}"/boot/grub/i386-pc/
        cp -a "${CHROOT_OUTPUT}"/usr/share/grub/ascii.pf2 "${BUILD_OUTPUT}"/boot/grub/
        cp -a "${CHROOT_OUTPUT}"/boot/grub/core.img "${BUILD_OUTPUT}"/boot/grub/
        cp -a "${CHROOT_OUTPUT}"/boot/grub/grub.img "${BUILD_OUTPUT}"/boot/grub/
 
+       # copy modules for UEFI grub
+       mkdir -p "${BUILD_OUTPUT}"/boot/grub/x86_64-efi/
+       cp -a "${CHROOT_OUTPUT}"/usr/lib/grub/x86_64-efi/*.{mod,lst} "${BUILD_OUTPUT}"/boot/grub/x86_64-efi/
+
        if ! [ -d "${TEMPLATE_DIRECTORY}"/GRML ] ; then
           log    "Error: ${TEMPLATE_DIRECTORY}/GRML does not exist. Exiting."
           eerror "Error: ${TEMPLATE_DIRECTORY}/GRML does not exist. Exiting." ; eend 1
@@ -1429,7 +1440,7 @@ create_netbootpackage() {
 
   mkdir -p "$NETBOOT"
 
-  if ! [ -r "${CHROOT}/usr/lib/syslinux/pxelinux.0" ] ; then
+  if ! [ -r "${CHROOT_OUTPUT}/usr/lib/syslinux/pxelinux.0" ] ; then
     ewarn "File /usr/lib/syslinux/pxelinux.0 not found in build chroot." ; eend 0
     eindent
     einfo "Install syslinux[-common] package in chroot to get a netboot package."