instsoft.GRMLBASE: ensure that file-rc can be installed
[grml-live.git] / grml-live
index cce5a68..d9620d0 100755 (executable)
--- a/grml-live
+++ b/grml-live
@@ -71,6 +71,8 @@ Usage: $PN [options, see as follows]
    -U <username>           arrange output to be owned by specified username
    -v <version_number>     specify version number of the release
    -V                      increase verbosity in the build process
    -U <username>           arrange output to be owned by specified username
    -v <version_number>     specify version number of the release
    -V                      increase verbosity in the build process
+   -w <date>               wayback machine, build system using Debian archives
+                           from specified date
    -z                      use ZLIB instead of LZMA/XZ compression
 
 Usage examples:
    -z                      use ZLIB instead of LZMA/XZ compression
 
 Usage examples:
@@ -311,7 +313,7 @@ copy_addon_file() {
 # }}}
 
 # command line parsing {{{
 # }}}
 
 # command line parsing {{{
-while getopts "a:C:c:d:D:e:g:i:I:o:r:s:S:t:U:v:AbBFhnNqQuVz" opt; do
+while getopts "a:C:c:d:D:e:g:i:I:o:r:s:S:t:U:v:w:AbBFhnNqQuVz" opt; do
   case "$opt" in
     a) ARCH="$OPTARG" ;;
     A) CLEAN_ARTIFACTS=1 ;;
   case "$opt" in
     a) ARCH="$OPTARG" ;;
     A) CLEAN_ARTIFACTS=1 ;;
@@ -340,6 +342,7 @@ while getopts "a:C:c:d:D:e:g:i:I:o:r:s:S:t:U:v:AbBFhnNqQuVz" opt; do
     u) UPDATE=1 ;;
     U) CHOWN_USER="$OPTARG" ;;
     V) VERBOSE="-v" ;;
     u) UPDATE=1 ;;
     U) CHOWN_USER="$OPTARG" ;;
     V) VERBOSE="-v" ;;
+    w) export WAYBACK_DATE="$OPTARG" ;;
     z) SQUASHFS_ZLIB=1 ;;
     ?) echo "invalid option -$OPTARG" >&2; usage; bailout 1 ;;
   esac
     z) SQUASHFS_ZLIB=1 ;;
     ?) echo "invalid option -$OPTARG" >&2; usage; bailout 1 ;;
   esac
@@ -631,11 +634,15 @@ fi
 
 # generate nfsroot configuration for FAI on the fly
 if [ -z "$FAI_DEBOOTSTRAP" ] ; then
 
 # generate nfsroot configuration for FAI on the fly
 if [ -z "$FAI_DEBOOTSTRAP" ] ; then
-  FAI_DEBOOTSTRAP="$SUITE http://http.debian.net/debian"
+  if [ -n "$WAYBACK_DATE" ] ; then
+    FAI_DEBOOTSTRAP="$SUITE http://snapshot.debian.org/archive/debian/$WAYBACK_DATE/"
+  else
+    FAI_DEBOOTSTRAP="$SUITE http://ftp.debian.org/debian"
+  fi
 fi
 
 if [ -z "$FAI_DEBOOTSTRAP_OPTS" ] ; then
 fi
 
 if [ -z "$FAI_DEBOOTSTRAP_OPTS" ] ; then
-  FAI_DEBOOTSTRAP_OPTS="--exclude=info,tasksel,tasksel-data --arch $ARCH"
+  FAI_DEBOOTSTRAP_OPTS="--exclude=info,tasksel,tasksel-data --include=aptitude --arch $ARCH"
 fi
 
 # create backup of old (not yet automatically generated) config file
 fi
 
 # create backup of old (not yet automatically generated) config file
@@ -693,7 +700,7 @@ else
       mount --bind "${OUTPUT}/grml_sources/" "${CHROOT_OUTPUT}/grml-live/sources/"
 
       log "Executed FAI command line:"
       mount --bind "${OUTPUT}/grml_sources/" "${CHROOT_OUTPUT}/grml-live/sources/"
 
       log "Executed FAI command line:"
-      log "BUILD_ONLY=$BUILD_ONLY BOOTSTRAP_ONLY=$BOOTSTRAP_ONLY GRML_LIVE_CONFIG=$CONFIGDUMP fai $VERBOSE -C $GRML_FAI_CONFIG -s file:///$GRML_FAI_CONFIG/config -c$CLASSES -u $HOSTNAME $FAI_ACTION $CHROOT_OUTPUT $FAI_ARGS"
+      log "BUILD_ONLY=$BUILD_ONLY BOOTSTRAP_ONLY=$BOOTSTRAP_ONLY GRML_LIVE_CONFIG=$CONFIGDUMP WAYBACK_DATE=$WAYBACK_DATE fai $VERBOSE -C $GRML_FAI_CONFIG -s file:///$GRML_FAI_CONFIG/config -c$CLASSES -u $HOSTNAME $FAI_ACTION $CHROOT_OUTPUT $FAI_ARGS"
       BUILD_ONLY="$BUILD_ONLY" BOOTSTRAP_ONLY="$BOOTSTRAP_ONLY" GRML_LIVE_CONFIG="$CONFIGDUMP" fai $VERBOSE \
                   -C "$GRML_FAI_CONFIG" -s "file:///$GRML_FAI_CONFIG/config" -c"$CLASSES" \
                   -u "$HOSTNAME" "$FAI_ACTION" "$CHROOT_OUTPUT" $FAI_ARGS | tee -a $LOGFILE
       BUILD_ONLY="$BUILD_ONLY" BOOTSTRAP_ONLY="$BOOTSTRAP_ONLY" GRML_LIVE_CONFIG="$CONFIGDUMP" fai $VERBOSE \
                   -C "$GRML_FAI_CONFIG" -s "file:///$GRML_FAI_CONFIG/config" -c"$CLASSES" \
                   -u "$HOSTNAME" "$FAI_ACTION" "$CHROOT_OUTPUT" $FAI_ARGS | tee -a $LOGFILE
@@ -746,6 +753,11 @@ else
          grep 'FAILED with exit code' $CHECKLOG/shell.log >> $LOGFILE && ERROR=6
       fi
 
          grep 'FAILED with exit code' $CHECKLOG/shell.log >> $LOGFILE && ERROR=6
       fi
 
+      if [ -r "$CHECKLOG/fai.log" ] ; then
+        grep 'updatebase.*FAILED with exit code' "$CHECKLOG/fai.log" >> "$LOGFILE" && ERROR=7
+        grep 'instsoft.*FAILED with exit code'   "$CHECKLOG/fai.log" >> "$LOGFILE" && ERROR=8
+      fi
+
       if [ -n "$ERROR" ] ; then
          log    "Error: there was a critical error [${ERROR}] during execution of stage 'fai dirinstall' [$(date)]"
          eerror "Error: there was a critical error during execution of stage 'fai dirinstall'"
       if [ -n "$ERROR" ] ; then
          log    "Error: there was a critical error [${ERROR}] during execution of stage 'fai dirinstall' [$(date)]"
          eerror "Error: there was a critical error during execution of stage 'fai dirinstall'"
@@ -804,7 +816,7 @@ else
 <testsuite name="grml-live-missing-packages" tests="${package_count}" time="1" failures="${package_errors}" errors="${package_errors}" skipped="0" assertions="0">
 EOF
 
 <testsuite name="grml-live-missing-packages" tests="${package_count}" time="1" failures="${package_errors}" errors="${package_errors}" skipped="0" assertions="0">
 EOF
 
-  for package in $(awk '{print $1}' "${CHECKLOG}/package_errors.log") ; do
+  for package in $(awk '{print $1}' "${CHECKLOG}/package_errors.log" | sed 's;/;\\/;') ; do
     failure_reason="$(awk "/$package/ {print \$2}" "${CHECKLOG}/package_errors.log")"
     cat >> "${REPORT_MISSING_PACKAGES}" << EOF
   <testcase name="test_missing_packages_${package}" time="0" assertions="0">
     failure_reason="$(awk "/$package/ {print \$2}" "${CHECKLOG}/package_errors.log")"
     cat >> "${REPORT_MISSING_PACKAGES}" << EOF
   <testcase name="test_missing_packages_${package}" time="0" assertions="0">
@@ -898,11 +910,9 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then
        # copy _required_ isolinux files
        if [ -d "${CHROOT_OUTPUT}/usr/lib/ISOLINUX" ] ; then
          copy_addon_file isolinux.bin /usr/lib/ISOLINUX isolinux
        # copy _required_ isolinux files
        if [ -d "${CHROOT_OUTPUT}/usr/lib/ISOLINUX" ] ; then
          copy_addon_file isolinux.bin /usr/lib/ISOLINUX isolinux
-         copy_addon_file ifcpu64.c32  /usr/lib/syslinux/modules/bios/ isolinux
-         copy_addon_file ldlinux.c32  /usr/lib/syslinux/modules/bios/ isolinux
-         copy_addon_file libcom32.c32 /usr/lib/syslinux/modules/bios/ isolinux
-         copy_addon_file libutil.c32  /usr/lib/syslinux/modules/bios/ isolinux
-         copy_addon_file vesamenu.c32 /usr/lib/syslinux/modules/bios/ isolinux
+         for file in ${CHROOT_OUTPUT}/usr/lib/syslinux/modules/bios/*.c32 ; do
+           copy_addon_file "$(basename "$file")"  /usr/lib/syslinux/modules/bios/ isolinux
+         done
        else # syslinux versions <= 3:4.05+dfsg-6+deb8u1
          copy_addon_file isolinux.bin /usr/lib/syslinux isolinux
          copy_addon_file ifcpu64.c32  /usr/lib/syslinux isolinux
        else # syslinux versions <= 3:4.05+dfsg-6+deb8u1
          copy_addon_file isolinux.bin /usr/lib/syslinux isolinux
          copy_addon_file ifcpu64.c32  /usr/lib/syslinux isolinux
@@ -937,10 +947,12 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then
             else
               syslinux_modules_dir=/usr/lib/syslinux
             fi
             else
               syslinux_modules_dir=/usr/lib/syslinux
             fi
-            for file in memdisk chain.c32 hdt.c32 mboot.c32 menu.c32; do
+            for file in chain.c32 hdt.c32 mboot.c32 menu.c32; do
               copy_addon_file "${file}" "${syslinux_modules_dir}" addons
             done
 
               copy_addon_file "${file}" "${syslinux_modules_dir}" addons
             done
 
+            copy_addon_file memdisk /usr/lib/syslinux addons
+
             # make memtest filename FAT16/8.3 compatible
             mv "${BUILD_OUTPUT}/boot/addons/memtest86+.bin" \
               "${BUILD_OUTPUT}/boot/addons/memtest"
             # make memtest filename FAT16/8.3 compatible
             mv "${BUILD_OUTPUT}/boot/addons/memtest86+.bin" \
               "${BUILD_OUTPUT}/boot/addons/memtest"
@@ -1389,7 +1401,7 @@ else
         fi
       elif [ "$HYBRID_METHOD" = "isohybrid" ] ; then
         if ! which isohybrid >/dev/null 2>&1 ; then
         fi
       elif [ "$HYBRID_METHOD" = "isohybrid" ] ; then
         if ! which isohybrid >/dev/null 2>&1 ; then
-          bailout 12 "isohybrid binary not found - please install syslinux/syslinux-common"
+          bailout 12 "isohybrid binary not found - please install syslinux/syslinux-common/syslinux-utils"
         else
           log   "Creating hybrid ISO file with isohybrid method"
           einfo "Creating hybrid ISO file with isohybrid method"
         else
           log   "Creating hybrid ISO file with isohybrid method"
           einfo "Creating hybrid ISO file with isohybrid method"
@@ -1488,6 +1500,10 @@ create_netbootpackage() {
   cp "${CHROOT_OUTPUT}"/boot/initrd.img-* "$WORKING_DIR"/initrd.img
   cp "${CHROOT_OUTPUT}/${pxelinux_dir}/pxelinux.0" "${WORKING_DIR}/pxelinux.0"
 
   cp "${CHROOT_OUTPUT}"/boot/initrd.img-* "$WORKING_DIR"/initrd.img
   cp "${CHROOT_OUTPUT}/${pxelinux_dir}/pxelinux.0" "${WORKING_DIR}/pxelinux.0"
 
+  if [ -r "${CHROOT_OUTPUT}"/usr/lib/syslinux/modules/bios/ldlinux.c32 ] ; then
+    cp "${CHROOT_OUTPUT}"/usr/lib/syslinux/modules/bios/ldlinux.c32 "${WORKING_DIR}"/
+  fi
+
   mkdir -p "${WORKING_DIR}/pxelinux.cfg"
   if [ -r "${BUILD_OUTPUT}/boot/isolinux/netboot.cfg" ] ; then
     cp "${BUILD_OUTPUT}/boot/isolinux/netboot.cfg" "${WORKING_DIR}/pxelinux.cfg/default"
   mkdir -p "${WORKING_DIR}/pxelinux.cfg"
   if [ -r "${BUILD_OUTPUT}/boot/isolinux/netboot.cfg" ] ; then
     cp "${BUILD_OUTPUT}/boot/isolinux/netboot.cfg" "${WORKING_DIR}/pxelinux.cfg/default"