X-Git-Url: https://git.grml.org/?p=grml-live.git;a=blobdiff_plain;f=grml-live;h=27e8e6ae04c1f6f553f9f862a96de9ea4b3abe1f;hp=83ef125ee160bb5f1bfa53d6f545ddfbcf17886b;hb=a49d9355f0de16c7e14b789839101598983c451b;hpb=98aec0d988c3538badbf5fbd57332f5c22195e69 diff --git a/grml-live b/grml-live index 83ef125..27e8e6a 100755 --- a/grml-live +++ b/grml-live @@ -24,7 +24,7 @@ fi # set -e # global variables -GRML_LIVE_VERSION='0.16.1' +GRML_LIVE_VERSION='0.17.0' PN="$(basename $0)" CMDLINE="$0 $@" ADDONS_LIST_FILE='/boot/isolinux/addons_list.cfg' @@ -56,6 +56,7 @@ Usage: $PN [options, see as follows] -N bootstrap (build chroot) only, do not create files for ISO -o main output directory of the build process -q skip mksquashfs + -Q skip netboot package build -r release name -s Debian suite; values: etch, lenny, squeeze, sid -t place of the templates @@ -183,6 +184,7 @@ bailout() { [ -n "${CHROOT_OUTPUT}" -a -d "${CHROOT_OUTPUT}" ] && chown -R "${CHOWN_USER}:" "${CHROOT_OUTPUT}" [ -n "${ISO_OUTPUT}" -a -d "${ISO_OUTPUT}" ] && chown -R "${CHOWN_USER}:" "${ISO_OUTPUT}" [ -n "${LOG_OUTPUT}" -a -d "${LOG_OUTPUT}" ] && chown -R "${CHOWN_USER}:" "${LOG_OUTPUT}" + [ -n "${NETBOOT}" -a -d "${NETBOOT}" ] && chown -R "${CHOWN_USER}:" "${NETBOOT}" [ -n "${CHROOT_ARCHIVE}" -a -f "${CHROOT_ARCHIVE}" ] && chown -R "${CHOWN_USER}:" "${CHROOT_ARCHIVE}" eend 0 fi @@ -284,23 +286,24 @@ copy_addon_file() { # }}} # command line parsing {{{ -while getopts "a:C:c:d:D:g:i:I:o:r:s:t:T:U:v:AbBFnNquVz" opt; do +while getopts "a:C:c:d:D:g:i:I:o:r:s:t:T:U:v:AbBFnNqQuVz" opt; do case "$opt" in a) ARCH="$OPTARG" ;; A) PACK_ARTIFACTS=1 ;; b) BUILD_ONLY=1 ;; B) BUILD_DIRTY=1 ;; c) CLASSES="$OPTARG" ;; - C) GRML_LIVE_LOCAL_CONFIG="$OPTARG" ;; + C) LOCAL_CONFIG="$(readlink -f $OPTARG)" ;; d) DATE="$OPTARG" ;; - D) GRML_FAI_CONFIG="$OPTARG" ;; + D) GRML_FAI_CONFIG="$(readlink -f $OPTARG)" ;; g) GRML_NAME="$OPTARG" ;; i) ISO_NAME="$OPTARG" ;; I) CHROOT_INSTALL="$OPTARG" ;; n) SKIP_MKISOFS=1 ;; N) BOOTSTRAP_ONLY=1; SKIP_MKISOFS=1; SKIP_MKSQUASHFS=1 ;; - o) OUTPUT="$OPTARG" ;; + o) OUTPUT="$(readlink -f $OPTARG)" ;; q) SKIP_MKSQUASHFS=1 ;; + Q) SKIP_NETBOOT=1 ;; r) RELEASENAME="$OPTARG" ;; s) SUITE="$OPTARG" ;; t) TEMPLATE_DIRECTORY="$OPTARG";; @@ -318,21 +321,21 @@ shift $(($OPTIND - 1)) # set ARGV to the first not parsed commandline parameter # }}} # read local (non-packaged) configuration {{{ -if [ -z "$GRML_LIVE_LOCAL_CONFIG" ]; then +if [ -z "$LOCAL_CONFIG" ]; then if [ -r "/etc/grml/grml-live.local" ]; then - GRML_LIVE_LOCAL_CONFIG="/etc/grml/grml-live.local" + LOCAL_CONFIG="/etc/grml/grml-live.local" fi fi -if [ -n "$GRML_LIVE_LOCAL_CONFIG" ]; then - if [ -r "$GRML_LIVE_LOCAL_CONFIG" ]; then - . $GRML_LIVE_LOCAL_CONFIG +if [ -n "$LOCAL_CONFIG" ]; then + if [ -r "$LOCAL_CONFIG" ]; then + . $LOCAL_CONFIG else - eerror "Could not read specified local configuration file \"$GRML_LIVE_LOCAL_CONFIG\"." + eerror "Could not read specified local configuration file \"$LOCAL_CONFIG\"." bailout 1 fi - GRML_LIVE_LOCAL_CONFIG=$(readlink -f "$GRML_LIVE_LOCAL_CONFIG") + LOCAL_CONFIG=$(readlink -f "$LOCAL_CONFIG") else - GRML_LIVE_LOCAL_CONFIG='' + LOCAL_CONFIG='' fi if [ -n "${GRML_LIVE_SOURCES:-}" ] ; then @@ -371,6 +374,7 @@ fi [ -n "$ISO_OUTPUT" ] || ISO_OUTPUT="$OUTPUT/grml_isos" [ -n "$LOG_OUTPUT" ] || LOG_OUTPUT="$OUTPUT/grml_logs" [ -n "$REPORTS" ] || REPORTS="${LOG_OUTPUT}/reports/" +[ -n "$NETBOOT" ] || NETBOOT="${OUTPUT}/netboot/" # }}} # some misc checks before executing FAI {{{ @@ -404,7 +408,7 @@ if [ -z "$FORCE" ] ; then echo "${PN} [${GRML_LIVE_VERSION}]: check your configuration (or use -F to force execution):" echo echo " FAI classes: $CLASSES" - [ -n "$GRML_LIVE_LOCAL_CONFIG" ] && echo " Configuration: $GRML_LIVE_LOCAL_CONFIG" + [ -n "$LOCAL_CONFIG" ] && echo " Configuration: $LOCAL_CONFIG" [ -n "$GRML_FAI_CONFIG" ] && echo " Config directory: $GRML_FAI_CONFIG" echo " main directory: $OUTPUT" [ -n "$UNPACK_CHROOT" ] && echo " Chroot from: $UNPACK_CHROOT" @@ -436,6 +440,7 @@ if [ -z "$FORCE" ] ; then echo " Bootstrapping only and not building (files for) ISO." else [ -n "$SKIP_MKSQUASHFS" ] && echo " Skipping creation of SQUASHFS file." + [ -n "$SKIP_NETBOOT" ] && echo " Skipping creation of NETBOOT package." [ -n "$SKIP_MKISOFS" ] && echo " Skipping creation of ISO file." [ -n "$BUILD_ONLY" ] && echo " Executing BUILD_ONLY instead of fresh installation or UPDATE." [ -n "$BUILD_DIRTY" ] && echo " Executing BUILD_DIRTY to leave chroot untouched." @@ -457,6 +462,7 @@ if [ -n "${PACK_ARTIFACTS}" ]; then [ -n "${BUILD_OUTPUT}" -a -d "${BUILD_OUTPUT}" ] && rm -r "${BUILD_OUTPUT}" [ -n "${ISO_OUTPUT}" -a -d "${ISO_OUTPUT}" ] && rm -r "${ISO_OUTPUT}" [ -n "${LOG_OUTPUT}" -a -d "${LOG_OUTPUT}" ] && rm -r "${LOG_OUTPUT}" + [ -n "${NETBOOT}" -a -d "${NETBOOT}" ] && rm -r "${NETBOOT}" fi # }}} @@ -504,7 +510,7 @@ fi start_seconds=$(cut -d . -f 1 /proc/uptime) log "------------------------------------------------------------------------------" log "Starting grml-live [${GRML_LIVE_VERSION}] run on $(date)" -log "Using local config file: $GRML_LIVE_LOCAL_CONFIG" +log "Using local config file: $LOCAL_CONFIG" log "Executed grml-live command line:" log "$CMDLINE" @@ -545,7 +551,7 @@ case $SUITE in esac export SUITE # make sure it's available in FAI scripts -for file in "$LIVE_CONF" "$GRML_LIVE_LOCAL_CONFIG" "$NFSROOT_CONF" ; do +for file in "$LIVE_CONF" "$LOCAL_CONFIG" "$NFSROOT_CONF" ; do if [ -n "$file" ] ; then sed "s|^FAI_DEBOOTSTRAP=\"[a-z]* |FAI_DEBOOTSTRAP=\"$SUITE |" "$file" | sponge "$file" fi @@ -625,8 +631,8 @@ else echo force-unsafe-io > "$CHROOT_OUTPUT/etc/dpkg/dpkg.cfg.d/unsafe-io" log "Executed FAI command line:" - log "BUILD_ONLY=$BUILD_ONLY BOOTSTRAP_ONLY=$BOOTSTRAP_ONLY GRML_LIVE_LOCAL_CONFIG=$GRML_LIVE_LOCAL_CONFIG 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_LOCAL_CONFIG="$GRML_LIVE_LOCAL_CONFIG" fai $VERBOSE \ + log "BUILD_ONLY=$BUILD_ONLY BOOTSTRAP_ONLY=$BOOTSTRAP_ONLY GRML_LIVE_LOCAL_CONFIG=$LOCAL_CONFIG 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_LOCAL_CONFIG="$LOCAL_CONFIG" 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 RC="$PIPESTATUS" # notice: bash-only @@ -1339,6 +1345,61 @@ else fi # }}} +# netboot package {{{ +create_netbootpackage() { + local OUTPUT_FILE="${NETBOOT}/grml_netboot_package_${GRML_NAME}_${VERSION}.tar.bz2" + + if [ -f "${OUTPUT_FILE}" -a -z "$UPDATE" -a -z "$BUILD_ONLY" -a -z "$BUILD_DIRTY" ] ; then + log "Skipping stage 'netboot' as $OUTPUT_FILE exists already." + ewarn "Skipping stage 'netboot' as $OUTPUT_FILE exists already." ; eend 0 + return 0 + elif [ -n "$SKIP_NETBOOT" ] ; then + log "Skipping stage 'netboot' as requested via option -Q" + ewarn "Skipping stage 'netboot' as requested via option -Q" ; eend 0 + return 0 + fi + + mkdir -p "$NETBOOT" + + if ! [ -r "${CHROOT}/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." + eoutdent + return 0 + fi + + local OUTPUTDIR="${NETBOOT}/build_tmp" + local WORKING_DIR="${OUTPUTDIR}/grml_netboot_package_${GRML_NAME}_${VERSION}/tftpboot/" + + mkdir -p "$WORKING_DIR" + + cp "${CHROOT_OUTPUT}"/boot/vmlinuz-* "$WORKING_DIR"/linux26 + cp "${CHROOT_OUTPUT}"/boot/initrd.img-* "$WORKING_DIR"/initrd.img + cp "${CHROOT_OUTPUT}"/usr/lib/syslinux/pxelinux.0 "${WORKING_DIR}/pxelinux.0" + + if [ -r "${BUILD_OUTPUT}/boot/isolinux/netboot.cfg" ] ; then + mkdir -p "${WORKING_DIR}/pxelinux.cfg/default" + cp "${BUILD_OUTPUT}/boot/isolinux/netboot.cfg" "${WORKING_DIR}/pxelinux.cfg/default" + else + ewarn "File ${BUILD_OUTPUT}/boot/isolinux/netboot.cfg not found." ; eend 0 + fi + + mkdir -p "${WORKING_DIR}/pxelinux.cfg" + + if tar -C "$OUTPUTDIR" -jcf "${OUTPUT_FILE}" "grml_netboot_package_${GRML_NAME}_${VERSION}" ; then + einfo "Generated netboot package ${OUTPUT_FILE}" ; eend 0 + rm -rf "${OUTPUTDIR}" + else + rm -rf "${OUTPUTDIR}" + eerror "Could not generate netboot package ${OUTPUT_FILE}" ; eend 1 + bailout 21 + fi +} + +create_netbootpackage +# }}} + # pack artifacts {{{ if [ -n "$PACK_ARTIFACTS" ]; then log "Packing artifcats"