X-Git-Url: https://git.grml.org/?p=grml-live.git;a=blobdiff_plain;f=grml-live;h=b98658bac9801853a3a6951da7cc123fdd181845;hp=d4e27c782f5a899bda8bfd1ba98f0657777fd99c;hb=3abf94382ad75a47579a339e084634171ea74532;hpb=ef51d0c8f7f9fcfa8faf0fa800b4a865517666a2 diff --git a/grml-live b/grml-live index d4e27c7..b98658b 100755 --- a/grml-live +++ b/grml-live @@ -46,6 +46,7 @@ Usage: $PN [options, see as follows] -C configuration file for grml-live -d use specified date instead of build time as date of release -D use specified configuration directory instead of /etc/grml/fai + -e extract ISO and squashfs contents from iso_name -F force execution without prompting -g set the grml flavour name -h display short usage information and exit @@ -60,7 +61,6 @@ Usage: $PN [options, see as follows] -r release name -s Debian suite; values: etch, lenny, squeeze, sid -t place of the templates - -T unpack chroot tar archive before starting -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 @@ -120,6 +120,7 @@ BUILD_ONLY='' BUILD_DIRTY='' BOOTSTRAP_ONLY='' HOSTNAME='' +USERNAME='' CONFIGDUMP='' # don't use colors/escape sequences @@ -147,6 +148,7 @@ LIVE_CONF=/etc/grml/grml-live.conf # umount all directories {{{ umount_all() { # make sure we don't leave any mounts - FAI doesn't remove them always + umount $CHROOT_OUTPUT/proc/sys/fs/binfmt_misc 2>/dev/null || /bin/true umount $CHROOT_OUTPUT/proc 2>/dev/null || /bin/true umount $CHROOT_OUTPUT/sys 2>/dev/null || /bin/true umount $CHROOT_OUTPUT/dev/pts 2>/dev/null || /bin/true @@ -288,7 +290,7 @@ copy_addon_file() { # }}} # command line parsing {{{ -while getopts "a:C:c:d:D:g:i:I:o:r:s:t:T:U:v:AbBFnNqQuVz" opt; do +while getopts "a:C:c:d:D:e:g:i:I:o:r:s:t:U:v:AbBFnNqQuVz" opt; do case "$opt" in a) ARCH="$OPTARG" ;; A) PACK_ARTIFACTS=1 ;; @@ -298,6 +300,7 @@ while getopts "a:C:c:d:D:g:i:I:o:r:s:t:T:U:v:AbBFnNqQuVz" opt; do C) LOCAL_CONFIG="$(readlink -f $OPTARG)" ;; d) DATE="$OPTARG" ;; D) GRML_FAI_CONFIG="$(readlink -f $OPTARG)" ;; + e) EXTRACT_ISO_NAME="$(readlink -f $OPTARG)" ;; g) GRML_NAME="$OPTARG" ;; i) ISO_NAME="$OPTARG" ;; I) CHROOT_INSTALL="$OPTARG" ;; @@ -309,7 +312,6 @@ while getopts "a:C:c:d:D:g:i:I:o:r:s:t:T:U:v:AbBFnNqQuVz" opt; do r) RELEASENAME="$OPTARG" ;; s) SUITE="$OPTARG" ;; t) TEMPLATE_DIRECTORY="$OPTARG";; - T) UNPACK_CHROOT="$(readlink -f $OPTARG)" ;; v) VERSION="$OPTARG" ;; F) FORCE=1 ;; u) UPDATE=1 ;; @@ -413,7 +415,7 @@ if [ -z "$FORCE" ] ; then [ -n "$LOCAL_CONFIG" ] && echo " Configuration: $LOCAL_CONFIG" [ -n "$GRML_FAI_CONFIG" ] && echo " Config directory: $GRML_FAI_CONFIG" echo " main directory: $OUTPUT" - [ -n "$UNPACK_CHROOT" ] && echo " Chroot from: $UNPACK_CHROOT" + [ -n "$EXTRACT_ISO_NAME" ] && echo " Extract ISO: $EXTRACT_ISO_NAME" [ -n "$CHROOT_OUTPUT" ] && echo " Chroot target: $CHROOT_OUTPUT" [ -n "$BUILD_OUTPUT" ] && echo " Build target: $BUILD_OUTPUT" [ -n "$ISO_OUTPUT" ] && echo " ISO target: $ISO_OUTPUT" @@ -526,23 +528,37 @@ set | egrep \ > ${CONFIGDUMP} # }}} -# unpack chroot {{{ -if [ -n "${UNPACK_CHROOT}" ]; then - log "Unpacking chroot from ${UNPACK_CHROOT}" - einfo "Unpacking chroot from ${UNPACK_CHROOT}" - [ -d "$CHROOT_OUTPUT" ] || mkdir -p "${CHROOT_OUTPUT}" - tar -xf "${UNPACK_CHROOT}" -C "${CHROOT_OUTPUT}/" --strip-components 1 ; RC=$? - if [ "$RC" != 0 ] ; then +# unpack iso/squashfs {{{ +extract_iso() { +if [ -n "$EXTRACT_ISO_NAME" ]; then + log "Unpacking ISO from ${EXTRACT_ISO_NAME}" + einfo "Unpacking ISO from ${EXTRACT_ISO_NAME}" + local mountpoint=$(mktemp -d) + local rc=0 + mount -o loop "${EXTRACT_ISO_NAME}" "$mountpoint" ; rc=$? + if [ "$rc" != 0 ]; then + rmdir "$mountpoint" + log "mount failed" + eerror "mount failed" + eend 1 + bailout 1 + fi + unsquashfs -d "${CHROOT_OUTPUT}" "${mountpoint}"/live/*.squashfs ; rc=$? + umount "$mountpoint" + rmdir "$mountpoint" + if [ "$rc" != 0 ]; then + log "unsquashfs failed" + eerror "unsquashfs failed" eend 1 bailout 1 fi - eend 0 fi +} +extract_iso # }}} # cleanup CHROOT_ARCHIVE now {{{ if [ -n "${PACK_ARTIFACTS}" ]; then - # can't do this earlier, as UNPACK_CHROOT might point to CHROOT_ARCHIVE [ -n "${CHROOT_ARCHIVE}" -a -f "${CHROOT_ARCHIVE}" ] && rm "${CHROOT_ARCHIVE}" fi # }}} @@ -654,24 +670,6 @@ else log "Error: critical error while executing fai [exit code ${RC}]. Exiting." eerror "Error: critical error while executing fai [exit code ${RC}]. Exiting." ; eend 1 bailout 1 - else - einfo "Setting /etc/grml_version to $GRML_NAME $VERSION Release Codename $RELEASENAME [$DATE]" - log "Setting /etc/grml_version to $GRML_NAME $VERSION Release Codename $RELEASENAME [$DATE]" - echo "$GRML_NAME $VERSION Release Codename $RELEASENAME [$DATE]" > $CHROOT_OUTPUT/etc/grml_version - chmod 644 $CHROOT_OUTPUT/etc/grml_version - einfo "Rebuilding initramfs" - # make sure new /etc/grml_version reaches initramfs, iterate over all - # present kernel versions (note: we can't really handle more than one - # kernel version anyway right now) - # chroot $CHROOT_OUTPUT update-initramfs -u -t => might break when using kernel-package :( - for initrd in "$(basename $CHROOT_OUTPUT/boot/vmlinuz-*)" ; do - if ! chroot $CHROOT_OUTPUT update-initramfs -k "${initrd##vmlinuz-}" -c ; then - einfo "Creating fresh initrd did not work, trying update instead:" - log "Creating fresh initrd did not work, trying update instead:" - chroot $CHROOT_OUTPUT update-initramfs -k "${initrd##vmlinuz-}" -u - fi - done - eend $? fi # move fai logs into grml_logs directory @@ -1397,6 +1395,7 @@ create_netbootpackage() { mkdir -p "${WORKING_DIR}/pxelinux.cfg" if tar -C "$OUTPUTDIR" -jcf "${OUTPUT_FILE}" "grml_netboot_package_${GRML_NAME}_${VERSION}" ; then + sha1sum "${OUTPUT_FILE}" > "${OUTPUT_FILE}.sha1" einfo "Generated netboot package ${OUTPUT_FILE}" ; eend 0 rm -rf "${OUTPUTDIR}" else