+ # $SQUASHFS_BINARY is specified in the configuration:
+ if [ -n "$SQUASHFS_BINARY" ] ; then
+ if ! which "$SQUASHFS_BINARY" >/dev/null 2>&1 ; then
+ log "Error: specified mksquashfs binary ($SQUASHFS_BINARY) not found. Exiting."
+ eerror "Error: specified mksquashfs binary ($SQUASHFS_BINARY) not found. Exiting." ; eend 1
+ bailout
+ fi
+ else # no $SQUASHFS_BINARY configured, let's find the according binary:
+ # Note: this is ALL for backward compability and yes: it's serious PITA.
+ # We'll definitely drop this once people build >2.6.28-grml* only and
+ # the squashfs-tools vs. squashfs-lzma-tools + zlib vs. lzma situation
+ # is settling...
+
+ # assume the safe default if mksquashfs-lzma isn't present:
+ if ! which mksquashfs-lzma >/dev/null 2>&1 ; then
+ SQUASHFS_BINARY='mksquashfs'
+ else # mksquashfs-lzma is available since squashfs-lzma-tools 4.0:
+ # if the user wants to use zlib then don't use mksquashfs-lzma:
+ if echo "$SQUASHFS_OPTIONS" | grep -q -- "-nolzma" || [ -n "$SQUASHFS_ZLIB" ] ; then
+ SQUASHFS_BINARY='mksquashfs'
+ else # neither -nolzma nor -z and mksquashfs-lzma is available:
+ SQUASHFS_BINARY='mksquashfs-lzma'
+
+ # backwards compability: someone has squashfs-lzma-tools >=4 installed but
+ # 1) doesn't use -nolzma in $SQUASHFS_OPTIONS or the grml-live's -z option *and*
+ # 2) builds against kernel version <=2.6.28-grml[64]
+ if ls $CHROOT_OUTPUT/boot/vmlinuz* >/dev/null 2>&1 ; then
+ KERNEL_IMAGE="$(ls $CHROOT_OUTPUT/boot/vmlinuz* 2>/dev/null | sort -r | head -1)"
+
+ case $KERNEL_IMAGE in
+ *vmlinuz-2.6.28-grml*|*vmlinuz-2.6.26-grml*|*vmlinuz-2.6.23-grml*)
+ log "You seem to be building a system with squashfs file format 3 using squashfs-lzma-tools >=4."
+ ewarn "You seem to be building a system with squashfs file format 3 using squashfs-lzma-tools >=4."
+ ewarn "|-> Consider installing squashfs-lzma-tools 3.3-1 for support of file format version 3."
+ ewarn "|-> Trying the mksquashfs binary instead of mksquashfs-lzma (though this might fail)."
+ ewarn "\`-> Visit http://grml.org/grml-live/#current_state for further details if building fails."
+ eend 0
+ SQUASHFS_BINARY='mksquashfs'
+ ;;
+ esac
+ fi
+
+ # if we still want to use mksquashfs-lzma then let's choose
+ # blocksize 256k as this gives best result with regards to time + comopression
+ [[ "$SQUASHFS_BINARY" == "mksquashfs-lzma" ]] && SQUASHFS_OPTIONS="-b 256k -lzma"
+ fi
+
+ fi
+ fi
+
+ # make sure mksquashfs can handle the according option:
+ if [ -n "$SQUASHFS_ZLIB" ] ; then
+ $SQUASHFS_BINARY --help 2>&1 | grep -q -- "$SQUASHFS_ZLIB" || SQUASHFS_ZLIB=''
+ fi
+
+ # make sure to drop the -nolzma option if it's not available:
+ if echo "$SQUASHFS_OPTIONS" | grep -q -- "-nolzma" ; then
+ if ! $SQUASHFS_BINARY --help 2>&1 | grep -q -- '-nolzma' ; then
+ log "$SQUASHFS_BINARY does NOT support the nolzma option, dropping it and using default mode."
+ ewarn "$SQUASHFS_BINARY does NOT support the nolzma option, dropping it and using default mode."
+ SQUASHFS_OPTIONS="$(echo $SQUASHFS_OPTIONS | sed 's/-nolzma//g')"
+ eend 0
+ fi
+ fi
+
+ # make sure to drop the -lzma option if it's not available:
+ if echo "$SQUASHFS_OPTIONS" | grep -q -- "-lzma" ; then
+ if ! $SQUASHFS_BINARY --help 2>&1 | grep -q -- '-lzma' ; then
+ log "$SQUASHFS_BINARY does NOT support the lzma option, dropping it and using default mode."
+ ewarn "$SQUASHFS_BINARY does NOT support the lzma option, dropping it and using default mode."
+ SQUASHFS_OPTIONS="$(echo $SQUASHFS_OPTIONS | sed 's/-lzma//g')"
+ eend 0
+ fi
+ fi
+
+ # support exclusion of files via exclude-file:
+ if [ -n "$SQUASHFS_EXCLUDES_FILE" -a "$SQUASHFS_EXCLUDES_FILE" ] ; then
+ SQUASHFS_OPTIONS="$SQUASHFS_OPTIONS -ef $SQUASHFS_EXCLUDES_FILE"
+ fi
+
+ # get rid of unnecessary files when building grml-small for final release:
+ if echo "$CLASSES" | grep -q GRML_SMALL ; then
+ SQUASHFS_OPTIONS="$SQUASHFS_OPTIONS -e initrd.img* vmlinuz*"
+ fi
+
+ # check whether we have the according binary available:
+ if ! which $SQUASHFS_BINARY >/dev/null 2>&1 ; then
+ log "Error: mksquashfs binary (${SQUASHFS_BINARY}) could not be found. Exiting."
+ eerror "Error: mksquashfs binary (${SQUASHFS_BINARY}) could not be found. Exiting."
+ eerror "|-> Make sure to install either squashfs-tools and/or squashfs-lzma-tools."
+ eerror "\`-> Visit http://grml.org/grml-live/#current_state for further details."
+ eend 1
+ package
+ bailout
+ fi
+
+ SQUASHFS_STDERR="$(mktemp -t grml-live.XXXXXX)"
+
+ [ -n "$SQUASHFS_OPTIONS" ] && SQUASHFS_INFO_MSG="$SQUASHFS_OPTIONS"
+ [ -n "$SQUASHFS_ZLIB" ] && SQUASHFS_INFO_MSG="$SQUASHFS_INFO_MSG $SQUASHFS_ZLIB"
+ [ -n "$SQUASHFS_INFO_MSG" ] && SQUASHFS_INFO_MSG="using options: $SQUASHFS_INFO_MSG"
+ einfo "Squashfs build information: running binary $SQUASHFS_BINARY $SQUASHFS_INFO_MSG"
+
+ log "$SQUASHFS_BINARY $CHROOT_OUTPUT/* $BUILD_OUTPUT/live/${GRML_NAME}.squashfs -noappend $SQUASHFS_OPTIONS $SQUASHFS_ZLIB"
+
+ if $SQUASHFS_BINARY $CHROOT_OUTPUT/* $BUILD_OUTPUT/live/"${GRML_NAME}".squashfs \
+ -noappend $SQUASHFS_OPTIONS $SQUASHFS_ZLIB 2>"${SQUASHFS_STDERR}" ; then
+ echo "${GRML_NAME}.squashfs" > $BUILD_OUTPUT/live/filesystem.module
+ log "Finished execution of stage 'squashfs' [$(date)]"
+ einfo "Finished execution of stage 'squashfs'" ; eend 0