X-Git-Url: https://git.grml.org/?p=grml-live.git;a=blobdiff_plain;f=grml-live;h=362f88cb0cb8e6766d3f62002081f146905f8282;hp=36581d18d86016f99e3cdea8fe7033e519795495;hb=b63a5f16ac3f03eb93220fd26ab188e50314f5d0;hpb=b5dfcc4daf319b12856ec41f6adc202526f8c396 diff --git a/grml-live b/grml-live index 36581d1..362f88c 100755 --- a/grml-live +++ b/grml-live @@ -39,6 +39,7 @@ $PN - build process script for generating a (grml based) Linux Live-ISO Usage: $PN [options, see as follows] -a architecture; available values: i386 and amd64 + -A ensure clean build and pack artifacts -b build the ISO without updating the chroot via FAI -B build the ISO without touching the chroot (skips cleanup) -c classes to be used for building the ISO via FAI @@ -59,6 +60,7 @@ Usage: $PN [options, see as follows] -s Debian suite; values: etch, lenny, squeeze, sid -t place of the templates -u update existing chroot instead of rebuilding it from scratch + -U arrange output to be owned by specified username -v specify version number of the release -V increase verbosity in the build process -z use ZLIB instead of LZMA/XZ compression @@ -159,6 +161,24 @@ bailout() { umount_all [ -n "$1" ] && EXIT="$1" || EXIT="1" [ -n "$2" ] && eerror "$2">&2 + if [ -n "$PACK_ARTIFACTS" ]; then + log "Cleaning up" + einfo "Cleaning up" + [ -n "${BUILD_OUTPUT}" -a -d "${BUILD_OUTPUT}" ] && rm -r "${BUILD_OUTPUT}" + [ -n "${CHROOT_OUTPUT}" -a -d "${CHROOT_OUTPUT}" ] && rm -r "${CHROOT_OUTPUT}" + eend 0 + fi + if [ -n "$CHOWN_USER" ]; then + log "Setting ownership" + einfo "Setting ownership" + [ -n "${OUTPUT}" -a -d "${OUTPUT}" ] && chown -R "${CHOWN_USER}:" "${OUTPUT}" + [ -n "${BUILD_OUTPUT}" -a -d "${BUILD_OUTPUT}" ] && chown -R "${CHOWN_USER}:" "${BUILD_OUTPUT}" + [ -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 "${CHROOT_ARCHIVE}" -a -f "${CHROOT_ARCHIVE}" ] && chown -R "${CHOWN_USER}:" "${CHROOT_ARCHIVE}" + eend 0 + fi log "------------------------------------------------------------------------------" exit "$EXIT" } @@ -266,9 +286,10 @@ fi # }}} # command line parsing {{{ -while getopts "a:C:c:d:D:g:i:I:o:r:s:t:v:bBFnNquVz" opt; do +while getopts "a:C:c:d:D:g:i:I:o:r:s:t:U:v:AbBFnNquVz" opt; do case "$opt" in a) ARCH="$OPTARG" ;; + A) PACK_ARTIFACTS=1 ;; b) BUILD_ONLY=1 ;; B) BUILD_DIRTY=1 ;; c) CLASSES="$OPTARG" ;; @@ -288,6 +309,7 @@ while getopts "a:C:c:d:D:g:i:I:o:r:s:t:v:bBFnNquVz" opt; do v) VERSION="$OPTARG" ;; F) FORCE=1 ;; u) UPDATE=1 ;; + U) CHOWN_USER="$OPTARG" ;; V) VERBOSE="-v" ;; z) SQUASHFS_ZLIB=1 ;; ?) echo "invalid option -$OPTARG" >&2; bailout 1 ;; @@ -322,7 +344,9 @@ shift $(($OPTIND - 1)) # set ARGV to the first not parsed commandline parameter [ -n "$OUTPUT" ] || OUTPUT='/grml/grml-live' [ -n "$BUILD_OUTPUT" ] || BUILD_OUTPUT="$OUTPUT/grml_cd" [ -n "$CHROOT_OUTPUT" ] || CHROOT_OUTPUT="$OUTPUT/grml_chroot" +[ -n "$CHROOT_ARCHIVE" ] || CHROOT_ARCHIVE="$OUTPUT/$(basename $CHROOT_OUTPUT).tgz" [ -n "$ISO_OUTPUT" ] || ISO_OUTPUT="$OUTPUT/grml_isos" +[ -n "$LOG_OUTPUT" ] || LOG_OUTPUT="$OUTPUT/grml_logs" # }}} # some misc checks before executing FAI {{{ @@ -375,12 +399,14 @@ if [ -z "$FORCE" ] ; then [ -n "$CHROOT_INSTALL" ] && echo " Install files from directory to chroot: $CHROOT_INSTALL" [ -n "$BOOTID" ] && echo " Boot identifier: $BOOTID" [ -n "$NO_BOOTID" ] && echo " Skipping bootid feature." + [ -n "$CHOWN_USER" ] && echo " Output owner: $CHOWN_USER" [ -n "$DEFAULT_BOOTOPTIONS" ] && echo " Adding default bootoptions: \"$DEFAULT_BOOTOPTIONS\"" [ -n "$FAI_ARGS" ] && echo " Additional arguments for FAI: $FAI_ARGS" [ -n "$LOGFILE" ] && echo " Logging to file: $LOGFILE" [ -n "$SQUASHFS_ZLIB" ] && echo " Using ZLIB (instead of LZMA/XZ) compression." [ -n "$SQUASHFS_OPTIONS" ] && echo " Using SQUASHFS_OPTIONS ${SQUASHFS_OPTIONS}" [ -n "$VERBOSE" ] && echo " Using VERBOSE mode." + [ -n "$PACK_ARTIFACTS" ] && echo " Will prepare packed artifacts and ensure clean build." [ -n "$UPDATE" ] && echo " Executing UPDATE instead of fresh installation." if [ -n "$BOOTSTRAP_ONLY" ] ; then echo " Bootstrapping only and not building (files for) ISO." @@ -400,8 +426,19 @@ if [ -z "$FORCE" ] ; then fi # }}} +# clean up before start {{{ +if [ -n "${PACK_ARTIFACTS}" ]; then + echo "Wiping old artifacts" + [ -n "${CHROOT_OUTPUT}" -a -d "${CHROOT_OUTPUT}" ] && rm -r "${CHROOT_OUTPUT}" + [ -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 "${CHROOT_ARCHIVE}" -a -f "${CHROOT_ARCHIVE}" ] && rm "${CHROOT_ARCHIVE}" +fi +# }}} + # create log file {{{ -[ -n "$LOGFILE" ] || LOGFILE=${OUTPUT}/grml_logs/grml-live.log +[ -n "$LOGFILE" ] || LOGFILE=${LOG_OUTPUT}/grml-live.log mkdir -p $(dirname "${LOGFILE}") touch $LOGFILE chown root:adm $LOGFILE @@ -629,10 +666,10 @@ else fi # move fai logs into grml_logs directory - mkdir -p "$OUTPUT"/grml_logs/fai/ - cp -r "$CHROOT_OUTPUT"/var/log/fai/"$HOSTNAME"/last/* "$OUTPUT"/grml_logs/fai/ - chown root:adm "$OUTPUT"/grml_logs/fai/* - chmod 664 "$OUTPUT"/grml_logs/fai/* + mkdir -p "$LOG_OUTPUT"/fai/ + cp -r "$CHROOT_OUTPUT"/var/log/fai/"$HOSTNAME"/last/* "$LOG_OUTPUT"/fai/ + chown root:adm "$LOG_OUTPUT"/fai/* + chmod 664 "$LOG_OUTPUT"/fai/* rm -rf "$CHROOT_OUTPUT"/var/log/fai # Remove all FAI logs from chroot if class RELEASE is used: @@ -1218,6 +1255,16 @@ else fi # }}} +# pack artifacts {{{ +if [ -n "$PACK_ARTIFACTS" ]; then + log "Packing artifcats" + einfo "Packing artifacts" + [ -f "${CHROOT_ARCHIVE}" ] && rm -r "${CHROOT_ARCHIVE}" + tar -c -a -f ${CHROOT_ARCHIVE} --preserve-permissions -C "$(dirname ${CHROOT_OUTPUT})" "$(basename ${CHROOT_OUTPUT})" + eend 0 +fi +# }}} + # log build information to database if grml-live-db is installed and enabled {{{ dpkg_to_db() { if [ -d /usr/share/grml-live-db ] ; then