X-Git-Url: https://git.grml.org/?p=grml-live.git;a=blobdiff_plain;f=grml-live;h=1cfafc048dd1cf2e04cfe7ae20e4233533f10eed;hp=c7f48c17930bd2dc959b25819d5f72e270d41354;hb=f5df323425e4f1e41d660c747b5ed95c14100de4;hpb=f9fdf13a9a60e4a9b4f7859a0fe38266dff24abf diff --git a/grml-live b/grml-live index c7f48c1..1cfafc0 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 15:26:10 CET 2007 [mika] +# Latest change: Die Okt 30 00:09:42 CET 2007 [mika] ################################################################################ # read configuration files, set some misc variables {{{ @@ -31,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 @@ -148,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: @@ -170,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" ;; @@ -187,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 @@ -221,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 @@ -290,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 @@ -299,10 +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_versio + 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}" @@ -312,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 @@ -340,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 @@ -358,11 +383,11 @@ 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/ + 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/ [ -n "$TEMPLATE_DIRECTORY" ] || TEMPLATE_DIRECTORY='/usr/share/grml-live/templates' if ! [ -d "${TEMPLATE_DIRECTORY}"/boot ] ; then @@ -370,15 +395,20 @@ 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/ @@ -403,17 +433,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 @@ -428,11 +461,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 @@ -453,7 +486,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