Switch from aptitude to apt-get as package manager in package list
[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
+   -w <date>               wayback machine, build system using Debian archives
+                           from specified date
    -z                      use ZLIB instead of LZMA/XZ compression
 
 Usage examples:
@@ -311,7 +313,7 @@ copy_addon_file() {
 # }}}
 
 # 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 ;;
@@ -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" ;;
+    w) export WAYBACK_DATE="$OPTARG" ;;
     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
-  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
-  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
@@ -693,7 +700,7 @@ else
       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
@@ -746,6 +753,11 @@ else
          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'"
@@ -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
 
-  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">
@@ -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_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
@@ -937,10 +947,12 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then
             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 memdisk /usr/lib/syslinux addons
+
             # 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
-          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"
@@ -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"
 
+  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"