X-Git-Url: https://git.grml.org/?p=grml-live.git;a=blobdiff_plain;f=grml-live;h=52097768f19f331de7fbb108dc7f49e8e786b365;hp=db8fd63f76bace47d34b6f8fd78076f574268efb;hb=c5624ba39fa032cda30698121bb8775640edb965;hpb=b8872624221cbf7f5d28005eabe2682692a98faf diff --git a/grml-live b/grml-live index db8fd63..5209776 100755 --- a/grml-live +++ b/grml-live @@ -4,7 +4,7 @@ # Authors: grml-team (grml.org), (c) Michael Prokop # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2 or any later version. -# Latest change: Sun Oct 28 14:43:27 CET 2007 [mika] +# Latest change: Die Okt 30 00:09:42 CET 2007 [mika] ################################################################################ # read configuration files, set some misc variables {{{ @@ -16,6 +16,8 @@ export LC_ALL=C set -e GRML_LIVE_VERSION='0.0.7' +CMDLINE="$0 $@" +ISO_DATE="$(date +%Y-%m-%d)" # we need root permissions for the build-process: if [ "$(id -u 2>/dev/null)" != 0 ] ; then @@ -29,9 +31,16 @@ if [ -r /var/run/fai/FAI_INSTALLATION_IN_PROGRESS ] ; then exit 1 fi +if [ -r /var/run/fai/fai_softupdate_is_running ] ; then + echo "/usr/sbin/fai softupdate already running or was aborted before.">&2 + echo "You may remove /var/run/fai/fai_softupdate_is_running and try again.">&2 + exit 1 +fi + # make sure they are not set by default VERBOSE='' FORCE='' +UPDATE='' if [ -r /etc/grml/lsb-functions ] ; then . /etc/grml/lsb-functions @@ -54,6 +63,7 @@ bailout() { [ -n "$MIRROR_DIRECTORY" ] && umount "${CHROOT_OUTPUT}/${MIRROR_DIRECTORY}" [ -n "$1" ] && EXIT="$1" || EXIT="1" [ -n "$2" ] && eerror "$2">&2 + log "------------------------------------------------------------------------------" exit "$EXIT" } trap bailout 1 2 3 15 @@ -145,7 +155,7 @@ $PN - build process script for generating a (grml based) Linux Live-ISO Usage: $PN [-a ] [-c ] [-g ] \\ [-i ] [-o ] [-s ] \\ [-t ] [-s ] \\ - [-v ] [-FVh] + [-v ] [-FVhu] Usage examples: @@ -167,7 +177,7 @@ http://grml.org/bugs/ # command line parsing {{{ -while getopts "a:c:g:i:o:r:s:t:v:FhV" opt; do +while getopts "a:c:g:i:o:r:s:t:v:FhuV" opt; do case "$opt" in a) ARCH="$OPTARG" ;; c) CLASSES="$OPTARG" ;; @@ -184,6 +194,7 @@ while getopts "a:c:g:i:o:r:s:t:v:FhV" opt; do v) VERSION="$OPTARG" ;; F) FORCE=1 ;; h) usage ; bailout 0 ;; + u) UPDATE=1 ;; V) VERBOSE="-v" ;; ?) echo "invalid option -$OPTARG" >&2; bailout 1 ;; esac @@ -218,6 +229,7 @@ if [ -z "$FORCE" ] ; then [ -n "$FAI_ARGS" ] && echo " additional arguments for FAI: $FAI_ARGS" [ -n "$LOGFILE" ] && echo " Logging to file: $LOGFILE" [ -n "$VERBOSE" ] && echo " Using VERBOSE mode." + [ -n "$UPDATE" ] && echo " Executing UPDATE instead of fresh installation." echo echo -n "Is this ok for you? [y/N] " read a @@ -229,8 +241,8 @@ fi start_seconds=$(cut -d . -f 1 /proc/uptime) log "------------------------------------------------------------------------------" -log "Starting grml-live [${GRML_LIVE_VERSION}] run [$(date)]" -log "Executed command line: $0 $@" +log "Starting grml-live [${GRML_LIVE_VERSION}] run on $(date)" +log "Executed command line: $CMDLINE" einfo "Logging actions to logfile $LOGFILE" # }}} @@ -287,7 +299,22 @@ fi # CHROOT_OUTPUT - execute FAI {{{ [ -n "$CHROOT_OUTPUT" ] || CHROOT_OUTPUT="$OUTPUT/grml_chroot" -if [ -d "$CHROOT_OUTPUT/bin" ] ; then +if [ -n "$UPDATE" ] ; then + FAI_ACTION=softupdate +else + FAI_ACTION=dirinstall +fi + +if [ -n "$UPDATE" ] ; then + if ! [ -r "$CHROOT_OUTPUT/etc/grml_version" ] ; then + log "Error: It does not look like you have a working chroot system. Updating not possible." + eerror "Error: It does not look like you have a working chroot system. Updating not possible." + eend 1 + bailout 20 + fi +fi + +if [ -d "$CHROOT_OUTPUT/bin" -a -z "$UPDATE" ] ; then log "$CHROOT_OUTPUT exists already, skipping stage 'fai dirinstall'" ewarn "$CHROOT_OUTPUT exists already, skipping stage 'fai dirinstall'" ; eend 0 else @@ -296,7 +323,10 @@ else mkdir -p "${CHROOT_OUTPUT}/${MIRROR_DIRECTORY}" mount --bind "${MIRROR_DIRECTORY}" "${CHROOT_OUTPUT}/${MIRROR_DIRECTORY}" fi - fai $VERBOSE -C "$GRML_FAI_CONFIG" -c"$CLASSES" -u "$HOSTNAME" dirinstall "$CHROOT_OUTPUT" $FAI_ARGS | tee -a $LOGFILE + fai $VERBOSE -C "$GRML_FAI_CONFIG" -c"$CLASSES" -u "$HOSTNAME" $FAI_ACTION "$CHROOT_OUTPUT" $FAI_ARGS | tee -a $LOGFILE + log "Setting /etc/grml_version to $GRML_NAME $VERSION Release Codename $RELEASENAME [$ISO_DATE]" + echo "$GRML_NAME $VERSION Release Codename $RELEASENAME [$ISO_DATE]" > $CHROOT_OUTPUT/etc/grml_version + chmod 644 $CHROOT_OUTPUT/etc/grml_version umount $CHROOT_OUTPUT/proc 2>/dev/null || /bin/true umount $CHROOT_OUTPUT/sys 2>/dev/null || /bin/true [ -n "$MIRROR_DIRECTORY" ] && umount "${CHROOT_OUTPUT}/${MIRROR_DIRECTORY}" @@ -306,6 +336,7 @@ else if [ -r "/var/log/fai/dirinstall/$HOSTNAME/software.log" ] ; then # 1 errors during executing of commands # Unable to write mmap - msync (28 No space left on device) + # 'No candidate version found for' [/var/log/fai/current/software.log] grep 'dpkg: error processing' /var/log/fai/dirinstall/$HOSTNAME/software.log >> $LOGFILE && ERROR=1 grep 'E: Method http has died unexpectedly!' /var/log/fai/dirinstall/$HOSTNAME/software.log >> $LOGFILE && ERROR=2 grep 'ERROR: chroot' /var/log/fai/dirinstall/$HOSTNAME/software.log >> $LOGFILE && ERROR=3 @@ -334,12 +365,12 @@ mkdir -p "$BUILD_OUTPUT" || bailout 6 "Problem with creating $BUILD_OUTPUT for s # i386: if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then - if [ -d "$BUILD_OUTPUT"/boot ] ; then + if [ -d "$BUILD_OUTPUT"/boot -a -z "$UPDATE" ] ; then log "$BUILD_OUTPUT/boot exists already, skipping stage 'boot'" ewarn "$BUILD_OUTPUT/boot exists already, skipping stage 'boot'" ; eend 0 else # booting stuff: - mkdir -p "$BUILD_OUTPUT"/boot/isolinux + [ -d "$BUILD_OUTPUT"/boot/isolinux ] || mkdir -p "$BUILD_OUTPUT"/boot/isolinux cp /boot/memtest86+.bin "$BUILD_OUTPUT"/boot/isolinux/memtest # if we don't have an initrd we a) can't boot and b) there was an error @@ -352,11 +383,12 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then bailout 10 fi - cp "$CHROOT_OUTPUT"/boot/vmlinuz* "$BUILD_OUTPUT"/boot/isolinux/linux26 - cp /usr/lib/syslinux/chain.c32 "$BUILD_OUTPUT"/boot/isolinux/ - cp /usr/lib/syslinux/isolinux.bin "$BUILD_OUTPUT"/boot/isolinux/ - cp /usr/lib/syslinux/memdisk "$BUILD_OUTPUT"/boot/isolinux/ - cp /usr/lib/syslinux/menu.c32 "$BUILD_OUTPUT"/boot/isolinux/ + KERNEL_IMAGE="$(ls $CHROOT_OUTPUT/boot/vmlinuz* | sort -r | head -1)" + cp "$KERNEL_IMAGE" "$BUILD_OUTPUT"/boot/isolinux/linux26 + cp /usr/lib/syslinux/chain.c32 "$BUILD_OUTPUT"/boot/isolinux/ + cp /usr/lib/syslinux/isolinux.bin "$BUILD_OUTPUT"/boot/isolinux/ + cp /usr/lib/syslinux/memdisk "$BUILD_OUTPUT"/boot/isolinux/ + cp /usr/lib/syslinux/menu.c32 "$BUILD_OUTPUT"/boot/isolinux/ [ -n "$TEMPLATE_DIRECTORY" ] || TEMPLATE_DIRECTORY='/usr/share/grml-live/templates' if ! [ -d "${TEMPLATE_DIRECTORY}"/boot ] ; then @@ -364,20 +396,24 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then eerror "${TEMPLATE_DIRECTORY}/boot does not exist. Exiting." ; eend 1 bailout 8 fi - cp ${TEMPLATE_DIRECTORY}/boot/isolinux/* "$BUILD_OUTPUT"/boot/isolinux/ - cp ${TEMPLATE_DIRECTORY}/boot/isolinux/* "$BUILD_OUTPUT"/boot/isolinux/ - cp -a ${TEMPLATE_DIRECTORY}/boot/grub "$BUILD_OUTPUT"/boot/ + + cp ${TEMPLATE_DIRECTORY}/boot/isolinux/* "$BUILD_OUTPUT"/boot/isolinux/ + cp ${TEMPLATE_DIRECTORY}/boot/isolinux/* "$BUILD_OUTPUT"/boot/isolinux/ + + if ! [ -d "${BUILD_OUTPUT}/boot/grub" ] ; then + cp -a ${TEMPLATE_DIRECTORY}/boot/grub "$BUILD_OUTPUT"/boot/ + fi if ! [ -d "${TEMPLATE_DIRECTORY}"/GRML ] ; then log "${TEMPLATE_DIRECTORY}/GRML does not exist. Exiting." eerror "${TEMPLATE_DIRECTORY}/GRML does not exist. Exiting." ; eend 1 bailout 9 fi + [ -d "$BUILD_OUTPUT"/GRML ] || mkdir "$BUILD_OUTPUT"/GRML cp -a ${TEMPLATE_DIRECTORY}/GRML/* "$BUILD_OUTPUT"/GRML/ # adjust boot splash information: - ISO_DATE="$(date +%Y-%m-%d)" RELEASE_INFO="$GRML_NAME $VERSION - Release Codename $RELEASENAME" RELEASE_INFO="$(cut_string 68 "$RELEASE_INFO")" RELEASE_INFO="$(extend_string_end 68 "$RELEASE_INFO")" @@ -398,17 +434,20 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then if [ -d "${TEMPLATE_DIRECTORY}/windows/autostart/" ] ; then cp ${TEMPLATE_DIRECTORY}/windows/autostart/* "$BUILD_OUTPUT"/ fi + # windows-binaries: if [ -n "$WINDOWS_BINARIES" ] ; then if [ -f "$BUILD_OUTPUT"/windows/putty.exe ] ; then log "$BUILD_OUTPUT/windows exists already, skipping stage 'WINDOWS_BINARIES'" ewarn "$BUILD_OUTPUT/windows exists already, skipping stage 'WINDOWS_BINARIES'" ; eend 0 else - mkdir "$BUILD_OUTPUT"/windows - ( cd "$BUILD_OUTPUT"/windows - for file in pageant plink pscp psftp putty puttygen ; do - wget -O ${file}.exe ${WINDOWS_BINARIES}/${file}.exe - done ) + if ! [ -d "$BUILD_OUTPUT"/windows ] ; then + mkdir "$BUILD_OUTPUT"/windows + ( cd "$BUILD_OUTPUT"/windows + for file in pageant plink pscp psftp putty puttygen ; do + wget -O ${file}.exe ${WINDOWS_BINARIES}/${file}.exe + done ) + fi fi log "Finished execution of stage 'WINDOWS_BINARIES' [$(date)]" einfo "Finished execution of stage 'WINDOWS_BINARIES'" ; eend 0 @@ -423,11 +462,11 @@ else eerror 'Error: Unsupported ARCH, sorry. Want to support it? Contribute!' ; eend 1 fi -if [ -f "$BUILD_OUTPUT"/live/grml.squashfs ] ; then +if [ -f "$BUILD_OUTPUT"/live/grml.squashfs -a -z "$UPDATE" ] ; then log "$BUILD_OUTPUT/live exists already, skipping stage 'squashfs'" ewarn "$BUILD_OUTPUT/live exists already, skipping stage 'squashfs'" ; eend 0 else - mkdir "$BUILD_OUTPUT"/live + [ -d "$BUILD_OUTPUT"/live ] || mkdir "$BUILD_OUTPUT"/live mksquashfs $CHROOT_OUTPUT/* $BUILD_OUTPUT/live/grml.squashfs -noappend log "Finished execution of stage 'squashfs' [$(date)]" einfo "Finished execution of stage 'squashfs'" ; eend 0 @@ -448,7 +487,7 @@ elif [ "$BOOT_METHOD" = "grub" ] ; then BOOT_FILE="boot/grub/stage2_eltorito" fi -if [ -f "${ISO_OUTPUT}/${ISO_NAME}" ] ; then +if [ -f "${ISO_OUTPUT}/${ISO_NAME}" -a -z "$UPDATE" ] ; then log "$ISO_OUTPUT exists already, skipping stage 'iso build'" ewarn "$ISO_OUTPUT exists already, skipping stage 'iso build'" ; eend 0 else @@ -475,7 +514,6 @@ fi [ -n "$start_seconds" ] && SECONDS="$[$(cut -d . -f 1 /proc/uptime)-$start_seconds]" || SECONDS="unknown" einfo "Sucessfully finished execution of $PN [running ${SECONDS} seconds]" ; eend 0 log "Sucessfully finished execution of $PN [running ${SECONDS} seconds]" -log "------------------------------------------------------------------------------" bailout 0 # }}}