X-Git-Url: https://git.grml.org/?p=grml-live.git;a=blobdiff_plain;f=grml-live;h=ca23f83c0b83e64ed41c36378a9f1beb6df50373;hp=6a96ce49c6e4b00b3cf975abbf107f89115cbae3;hb=005cdc1ea39899e025f302f05e16fb93bb66fee9;hpb=773464378cb9b67c0fb7fc770efa2c816efd3b27 diff --git a/grml-live b/grml-live index 6a96ce4..ca23f83 100755 --- a/grml-live +++ b/grml-live @@ -24,7 +24,7 @@ fi # set -e # global variables -GRML_LIVE_VERSION='0.15.1' +GRML_LIVE_VERSION='0.16.1' PN="$(basename $0)" CMDLINE="$0 $@" ADDONS_LIST_FILE='/boot/isolinux/addons_list.cfg' @@ -160,13 +160,6 @@ trap bailout 1 2 3 3 6 9 14 15 trap umount_all EXIT # }}} -# log file stuff {{{ -[ -n "$LOGFILE" ] || LOGFILE=/var/log/grml-live.log -touch $LOGFILE -chown root:adm $LOGFILE -chmod 664 $LOGFILE -# }}} - # some important functions {{{ # log output: @@ -214,15 +207,54 @@ extend_string_end() { done echo -ne "\n" } + +# Copy addonfile $1 from either +# * the chroot (via $2, the system path), +# * or from TEMPLATE_DIRECTORY/compat (if exists), +# * or from the host system (again, using $2), +# or warn about the missing file. +# +# 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 +# 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. +copy_addon_file() { + DEST="${BUILD_OUTPUT}/boot/$3" + if [ ! -d "${DEST}/" ]; then + mkdir -p "${DEST}" + fi + if [ -e "$CHROOT_OUTPUT/$2/$1" ]; then + log "Copying $1 from chroot" + cp "$CHROOT_OUTPUT/$2/$1" "${DEST}/" + return $? + fi + if [ -e "${TEMPLATE_DIRECTORY}/compat/$3/$1" ]; then + log "Copying $1 from grml-live-compat" + cp "${TEMPLATE_DIRECTORY}/compat/$3/$1" "${DEST}/" + return $? + fi + if [ -e "$2/$1" ]; then + log "Copying $1 from system" + cp "$2/$1" "${DEST}/" + return $? + fi + + msg="Missing addon file: \"$1\"" + ewarn "$msg" ; eend 1 + log "copy_addon_file: $msg" +} # }}} # read local (non-packaged) configuration {{{ LOCAL_CONFIG=/etc/grml/grml-live.local if [ -r "$LOCAL_CONFIG" ] ; then - log "Sourcing $LOCAL_CONFIG" . $LOCAL_CONFIG else - log "No $LOCAL_CONFIG found, not sourcing it" LOCAL_CONFIG='' fi # }}} @@ -362,6 +394,14 @@ if [ -z "$FORCE" ] ; then fi # }}} +# create log file {{{ +[ -n "$LOGFILE" ] || LOGFILE=${OUTPUT}/grml_logs/grml-live.log +mkdir -p $(dirname "${LOGFILE}") +touch $LOGFILE +chown root:adm $LOGFILE +chmod 664 $LOGFILE +# }}} + # clean/zero/remove logfiles {{{ if [ -n "$PRESERVE_LOGFILE" ] ; then @@ -398,6 +438,9 @@ fi start_seconds=$(cut -d . -f 1 /proc/uptime) log "------------------------------------------------------------------------------" log "Starting grml-live [${GRML_LIVE_VERSION}] run on $(date)" +if [ -n "$LOCAL_CONFIG" ]; then + log "Using local config file: $LOCAL_CONFIG" +fi log "Executed grml-live command line:" log "$CMDLINE" @@ -579,11 +622,15 @@ else eend $? 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/* + rm -rf "$CHROOT_OUTPUT"/var/log/fai + # Remove all FAI logs from chroot if class RELEASE is used: - if [ -f "$CHROOT_OUTPUT"/etc/grml_fai_release ] ; then - rm -rf "$CHROOT_OUTPUT"/var/log/fai/* - rm -f "$CHROOT_OUTPUT"/var/log/install_packages.list - fi + rm -f "$CHROOT_OUTPUT"/var/log/install_packages.list umount_all @@ -658,21 +705,6 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then [ -d "$BUILD_OUTPUT"/boot/isolinux ] || mkdir -p "$BUILD_OUTPUT"/boot/isolinux [ -d "$BUILD_OUTPUT"/boot/"${SHORT_NAME}" ] || mkdir -p "$BUILD_OUTPUT"/boot/"${SHORT_NAME}" - if [ -z "$NO_ADDONS" ] ; then - [ -d "$BUILD_OUTPUT"/boot/addons ] || mkdir -p "$BUILD_OUTPUT"/boot/addons - if [ -r "$TEMPLATE_DIRECTORY"/boot/addons/memtest ] ; then - log "Installing $TEMPLATE_DIRECTORY/boot/addons/memtest" - cp "$TEMPLATE_DIRECTORY"/boot/addons/memtest "$BUILD_OUTPUT"/boot/addons/memtest - elif [ -r /boot/memtest86+.bin ] ; then - log "Installing /boot/memtest86+.bin" - cp /boot/memtest86+.bin "$BUILD_OUTPUT"/boot/addons/memtest - else - ewarn "No memtest binary found (either install package grml-live-addons or memtest86+), skipping." - log "No memtest binary found (either install package grml-live-addons or memtest86+), skipping." - eend 0 - fi - fi - # if we don't have an initrd we a) can't boot and b) there was an error # during build, so check for the file: INITRD="$(ls $CHROOT_OUTPUT/boot/initrd* 2>/dev/null| grep -v '.bak$' | sort -r | head -1)" @@ -701,8 +733,13 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then bailout 8 fi + # copy _required_ isolinux files + for file in ifcpu64.c32 isolinux.bin vesamenu.c32; do + copy_addon_file "${file}" /usr/lib/syslinux isolinux + done + # *always* copy files to output directory so the variables - # get adjusted according to the build + # get adjusted according to the build. cp ${TEMPLATE_DIRECTORY}/boot/isolinux/* "$BUILD_OUTPUT"/boot/isolinux/ if [ -n "$NO_ADDONS" ] ; then @@ -713,14 +750,18 @@ 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 Depended packages - cp -a /usr/lib/ipxe/ipxe.lkrn "${TEMPLATE_DIRECTORY}/boot/addons/" - cp -a /usr/share/misc/pci.ids "${TEMPLATE_DIRECTORY}/boot/addons/" - cp -a /boot/memtest86+.bin "${TEMPLATE_DIRECTORY}/boot/addons/memtest" + # copy addons from system packages or grml-live-compat + 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 for file in memdisk chain.c32 hdt.c32 menu.c32; do - cp -a "/usr/lib/syslinux/${file}" "${TEMPLATE_DIRECTORY}/boot/addons/" + copy_addon_file "${file}" /usr/lib/syslinux addons done + # make memtest filename FAT16/8.3 compatible + mv "${BUILD_OUTPUT}/boot/addons/memtest86+.bin" \ + "${BUILD_OUTPUT}/boot/addons/memtest" + # copy only files so we can handle bsd4grml on its own for file in ${TEMPLATE_DIRECTORY}/boot/addons/* ; do test -f $file && cp $file "$BUILD_OUTPUT"/boot/addons/ @@ -733,31 +774,39 @@ if [ "$ARCH" = i386 ] || [ "$ARCH" = amd64 ] ; then if [ -d "$TEMPLATE_DIRECTORY"/boot/addons/bsd4grml ] ; then cp -a ${TEMPLATE_DIRECTORY}/boot/addons/bsd4grml "$BUILD_OUTPUT"/boot/addons/ else - log "bsd4grml addon not found, skipping therefore." - ewarn "bsd4grml addon not found, skipping therefore." ; eend 0 + log "Missing addon file: bsd4grml" + ewarn "Missing addon file: bsd4grml" ; eend 0 fi fi fi # no "$TEMPLATE_DIRECTORY"/boot/addons fi # NO_ADDONS - if ! [ -d ${TEMPLATE_DIRECTORY}/boot/grub ] ; then - log "grub templates do not exist, skipping therefore." - ewarn "grub templates do not exist, skipping therefore." ; eend 0 - else - if ! [ -d "${BUILD_OUTPUT}/boot/grub" ] ; then - mkdir -p "${BUILD_OUTPUT}/boot/grub" - cp -a /usr/lib/grub/*-pc/*.mod "${BUILD_OUTPUT}/boot/grub" - cp -a /usr/lib/grub/*-pc/*.o "${BUILD_OUTPUT}/boot/grub" - cp -a /usr/lib/grub/*-pc/*.lst "${BUILD_OUTPUT}/boot/grub" - cp -a /usr/share/grub/ascii.pf2 "${BUILD_OUTPUT}/boot/grub" - /usr/bin/grub-mkimage -d /usr/lib/grub/*-pc -o \ - "${BUILD_OUTPUT}/boot/grub/core.img" biosdisk iso9660 --format=i386-pc - fi + if ! [ -d "${BUILD_OUTPUT}/boot/grub" ] ; then + mkdir -p "${BUILD_OUTPUT}/boot/grub" + fi + cp ${TEMPLATE_DIRECTORY}/boot/grub/* "$BUILD_OUTPUT"/boot/grub/ - # make sure we have recent template files available, otherwise updating - # the strings like $GRML_NAME and $VERSION might be out of date - cp ${TEMPLATE_DIRECTORY}/boot/grub/* "$BUILD_OUTPUT"/boot/grub/ + if [ -e ${TEMPLATE_DIRECTORY}/compat/grub/linux.mod ]; then + cp "${TEMPLATE_DIRECTORY}"/compat/grub/* "${BUILD_OUTPUT}"/boot/grub/ + else + if ! which "grub-mkimage" >/dev/null 2>&1 ; then + log "grub-mkimage not found, skipping Grub step therefore." ; eend 0 + ewarn "grub-mkimage not found, skipping Grub step therefore." + ewarn "Please install grub-pc-bin or grub-common >= 1.98+20100804-14." ; eend 0 + elif ! grub-mkimage --help | grep -q -- --format ; then + log "grub-mkimage does not support --format=i386-pc, skipping Grub step therefore." ; eend 0 + ewarn "grub-mkimage does not support --format=i386-pc, skipping Grub step therefore." + ewarn "Please install grub-common >= 1.98+20100804-14 or grub-pc-bin." ; eend 0 + else + # copy system grub files if grml-live-compat is not installed + cp -a /usr/lib/grub/*-pc/*.mod "${BUILD_OUTPUT}"/boot/grub/ + cp -a /usr/lib/grub/*-pc/*.o "${BUILD_OUTPUT}"/boot/grub/ + cp -a /usr/lib/grub/*-pc/*.lst "${BUILD_OUTPUT}"/boot/grub/ + cp -a /usr/share/grub/ascii.pf2 "${BUILD_OUTPUT}"/boot/grub/ + grub-mkimage -d /usr/lib/grub/*-pc -o \ + "${BUILD_OUTPUT}/boot/grub/core.img" biosdisk iso9660 --format=i386-pc + fi fi if ! [ -d "${TEMPLATE_DIRECTORY}"/GRML ] ; then