X-Git-Url: http://git.grml.org/?p=grml-live.git;a=blobdiff_plain;f=grml-live;h=00321211b36dedb705b7ce8a5d6d3e9d4d5769fd;hp=7f6bda09ef1d329b3e2e33a4a0d466fe651e9a03;hb=7beda7dae5063c45ab57c061bcfb27e13fd704ea;hpb=1ebce30e7ecfa743317e678898cc0f8854de452b diff --git a/grml-live b/grml-live index 7f6bda0..0032121 100755 --- a/grml-live +++ b/grml-live @@ -71,6 +71,8 @@ Usage: $PN [options, see as follows] -U arrange output to be owned by specified username -v specify version number of the release -V increase verbosity in the build process + -w wayback machine, build system using Debian archives + from specified date -z use ZLIB instead of LZMA/XZ compression Usage examples: @@ -277,12 +279,12 @@ extend_string_end() { # This is because: # * We assume that the chroot always has a "good" version of # the file. Also it makes sources handling easier. -# * On unstable, we Recommend the Debian packages containing +# * On unstable, we recommend the Debian packages containing # these files. The user can override them by putting his # "better" version into the chroot. -# * On stable, the Debian packages are probably not available, -# or outdated, so we look in TEMPLATE_DIRECTORY/compat first, where -# our grml-live-compat package installs current file versions. +# * With older releases the Debian packages are probably +# not available, so we look in TEMPLATE_DIRECTORY/compat, +# where a (custom) package might install current file versions. copy_addon_file() { DEST="${BUILD_OUTPUT}/boot/$3" if [ ! -d "${DEST}/" ]; then @@ -294,7 +296,7 @@ copy_addon_file() { return $? fi if [ -e "${TEMPLATE_DIRECTORY}/compat/$3/$1" ]; then - log "Copying $1 from grml-live-compat" + log "Copying $1 from ${TEMPLATE_DIRECTORY}/compat" cp "${TEMPLATE_DIRECTORY}/compat/$3/$1" "${DEST}/" return $? fi @@ -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 @@ -399,7 +402,7 @@ fi [ -n "$VERSION" ] || VERSION='0.0.1' # output specific stuff, depends on $OUTPUT (iff not set): -[ -n "$OUTPUT" ] || OUTPUT='/grml/grml-live' +[ -n "$OUTPUT" ] || OUTPUT='./grml/' [ -n "$BUILD_OUTPUT" ] || BUILD_OUTPUT="$OUTPUT/grml_cd" [ -n "$CHROOT_OUTPUT" ] || CHROOT_OUTPUT="$OUTPUT/grml_chroot" [ -n "$ISO_OUTPUT" ] || ISO_OUTPUT="$OUTPUT/grml_isos" @@ -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 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 @@ -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 @@ -913,7 +923,11 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then # get adjusted according to the build. cp ${TEMPLATE_DIRECTORY}/boot/isolinux/* "$BUILD_OUTPUT"/boot/isolinux/ + mkdir -p "${BUILD_OUTPUT}/boot/grub" + cp -a ${TEMPLATE_DIRECTORY}/boot/grub/* "$BUILD_OUTPUT"/boot/grub/ + if [ -n "$NO_ADDONS" ] ; then + rm -f "$BUILD_OUTPUT"/boot/grub/addons.cfg 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 @@ -921,7 +935,7 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; 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 - # copy addons from system packages or grml-live-compat + # copy addons from system packages or grml-live-addons copy_addon_file ipxe.lkrn /usr/lib/ipxe addons copy_addon_file pci.ids /usr/share/misc addons copy_addon_file memtest86+.bin /boot addons @@ -933,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" @@ -961,11 +977,6 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then fi # no "$TEMPLATE_DIRECTORY"/boot/addons fi # NO_ADDONS - if ! [ -d "${BUILD_OUTPUT}/boot/grub" ] ; then - mkdir -p "${BUILD_OUTPUT}/boot/grub" - fi - cp -a ${TEMPLATE_DIRECTORY}/boot/grub/* "$BUILD_OUTPUT"/boot/grub/ - # generate loopback.cfg config file without depending on grub's regexp module # which isn't available in Debian/squeeze echo "## grub2 loopback configuration" > "${BUILD_OUTPUT}"/boot/grub/loopback.cfg @@ -974,7 +985,9 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then [ -r "$config" ] || continue echo "source ${config##$BUILD_OUTPUT}" >> "${BUILD_OUTPUT}"/boot/grub/loopback.cfg done - echo "source /boot/grub/addons.cfg" >> "${BUILD_OUTPUT}"/boot/grub/loopback.cfg + if [ -z "$NO_ADDONS" ] ; then + echo "source /boot/grub/addons.cfg" >> "${BUILD_OUTPUT}"/boot/grub/loopback.cfg + fi echo "source /boot/grub/footer.cfg" >> "${BUILD_OUTPUT}"/boot/grub/loopback.cfg # copy grub files from target @@ -1086,7 +1099,7 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then done echo "include options.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/grmlmain.cfg" - if [ ! -n "$NO_ADDONS" ] ; then + if [ -z "$NO_ADDONS" ] ; then echo "include addons.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/grmlmain.cfg" fi echo "include isoprompt.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/grmlmain.cfg" @@ -1104,7 +1117,9 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then else log "including ${DISTRI_NAME}.cfg in ${BUILD_OUTPUT}/boot/isolinux/distri.cfg" echo "include ${DISTRI_NAME}.cfg" > "${BUILD_OUTPUT}/boot/isolinux/distri.cfg" - [ -n "$NO_ADDONS" ] || echo "include addons.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/distri.cfg" + if [ -z "$NO_ADDONS" ] ; then + echo "include addons.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/distri.cfg" + fi fi fi @@ -1386,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" @@ -1425,6 +1440,10 @@ else touch -r ${ISO_NAME} ${ISO_NAME}.md5 sha1sum ${ISO_NAME} > ${ISO_NAME}.sha1 && \ touch -r ${ISO_NAME} ${ISO_NAME}.sha1 + sha256sum ${ISO_NAME} > ${ISO_NAME}.sha256 && \ + touch -r ${ISO_NAME} ${ISO_NAME}.sha256 + sha512sum ${ISO_NAME} > ${ISO_NAME}.sha512 && \ + touch -r ${ISO_NAME} ${ISO_NAME}.sha512 fi ) ;; @@ -1485,6 +1504,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" @@ -1501,6 +1524,8 @@ create_netbootpackage() { ( cd $(dirname "${OUTPUT_FILE}") sha1sum $(basename "${OUTPUT_FILE}") > "${OUTPUT_FILE}.sha1" + sha256sum $(basename "${OUTPUT_FILE}") > "${OUTPUT_FILE}.sha256" + sha512sum $(basename "${OUTPUT_FILE}") > "${OUTPUT_FILE}.sha512" ) einfo "Generated netboot package ${OUTPUT_FILE}" ; eend 0 rm -rf "${OUTPUTDIR}"