X-Git-Url: http://git.grml.org/?p=grml-live.git;a=blobdiff_plain;f=grml-live;h=168f6feaca4398341fa763d65f4abc2b40885e2e;hp=18248ec4702195e76507c8e6dc17f04ebe908f92;hb=6245469bddd43050bd1c205a4d7b4dc45c2e1b59;hpb=8c79da9bfaadb9ebcce5471ca35880dccb692ffa diff --git a/grml-live b/grml-live index 18248ec..168f6fe 100755 --- a/grml-live +++ b/grml-live @@ -60,6 +60,7 @@ Usage: $PN [options, see as follows] -s Debian suite; values: etch, lenny, squeeze, sid -t place of the templates -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 -V increase verbosity in the build process -z use ZLIB instead of LZMA/XZ compression @@ -67,10 +68,9 @@ Usage: $PN [options, see as follows] Usage examples: $PN - $PN -c GRMLBASE,GRML_MEDIUM,I386 -o /dev/shm/grml - $PN -c GRMLBASE,GRML_SMALL,REMOVE_DOCS,I386 -g grml-small -v 1.0 - $PN -c GRMLBASE,GRML_FULL,I386 -i grml_0.0-1.iso -v 0.0-1 - $PN -c GRMLBASE,GRML_FULL,I386 -s sid -V -r 'grml-live rocks' + $PN -c GRMLBASE,GRML_FULL,AMD64 -o /dev/shm/grml + $PN -c GRMLBASE,GRML_FULL,AMD64 -i grml_0.0-1.iso -v 0.0-1 + $PN -c GRMLBASE,GRML_FULL,AMD64 -s sid -V -r 'grml-live rocks' More details: man grml-live + /usr/share/doc/grml-live/grml-live.html http://grml.org/grml-live/ @@ -148,6 +148,13 @@ umount_all() { umount $CHROOT_OUTPUT/sys 2>/dev/null || /bin/true umount $CHROOT_OUTPUT/dev/pts 2>/dev/null || /bin/true umount $CHROOT_OUTPUT/dev 2>/dev/null || /bin/true + + # certain FAI versions sadly leave a ramdisk behind, so better safe than sorry + if [ -x /usr/lib/fai/mkramdisk ] ; then + /usr/lib/fai/mkramdisk -u "$(readlink -f ${CHROOT_OUTPUT}/var/lib/dpkg)" >/dev/null 2>&1 || /bin/true + fi + + umount "${CHROOT_OUTPUT}/grml-live/sources/" 2>/dev/null || /bin/true [ -n "$MIRROR_DIRECTORY" ] && umount "${CHROOT_OUTPUT}/${MIRROR_DIRECTORY}" } # }}} @@ -163,8 +170,19 @@ bailout() { if [ -n "$PACK_ARTIFACTS" ]; then log "Cleaning up" einfo "Cleaning up" - [ -n "${CHROOT_OUTPUT}" -a -d "${CHROOT_OUTPUT}" ] && rm -r "${CHROOT_OUTPUT}" [ -n "${BUILD_OUTPUT}" -a -d "${BUILD_OUTPUT}" ] && rm -r "${BUILD_OUTPUT}" + [ -n "${CHROOT_OUTPUT}" -a -d "${CHROOT_OUTPUT}" ] && rm -r "${CHROOT_OUTPUT}" + eend 0 + fi + if [ -n "$CHOWN_USER" ]; then + log "Setting ownership" + einfo "Setting ownership" + [ -n "${OUTPUT}" -a -d "${OUTPUT}" ] && chown -R "${CHOWN_USER}:" "${OUTPUT}" + [ -n "${BUILD_OUTPUT}" -a -d "${BUILD_OUTPUT}" ] && chown -R "${CHOWN_USER}:" "${BUILD_OUTPUT}" + [ -n "${CHROOT_OUTPUT}" -a -d "${CHROOT_OUTPUT}" ] && chown -R "${CHOWN_USER}:" "${CHROOT_OUTPUT}" + [ -n "${ISO_OUTPUT}" -a -d "${ISO_OUTPUT}" ] && chown -R "${CHOWN_USER}:" "${ISO_OUTPUT}" + [ -n "${LOG_OUTPUT}" -a -d "${LOG_OUTPUT}" ] && chown -R "${CHOWN_USER}:" "${LOG_OUTPUT}" + [ -n "${CHROOT_ARCHIVE}" -a -f "${CHROOT_ARCHIVE}" ] && chown -R "${CHOWN_USER}:" "${CHROOT_ARCHIVE}" eend 0 fi log "------------------------------------------------------------------------------" @@ -271,10 +289,16 @@ if [ -r "$LOCAL_CONFIG" ] ; then else LOCAL_CONFIG='' fi + +if [ -n "${GRML_LIVE_SOURCES:-}" ] ; then + eerror "Config variable \$GRML_LIVE_SOURCES is set. This variable has been deprecated." + ewarn "Please set up ${GRML_FAI_CONFIG}/config/files/etc/apt/sources.list.d/* instead." + bailout 1 +fi # }}} # command line parsing {{{ -while getopts "a:C:c:d:D:g:i:I:o:r:s:t:v:AbBFnNquVz" opt; do +while getopts "a:C:c:d:D:g:i:I:o:r:s:t:U:v:AbBFnNquVz" opt; do case "$opt" in a) ARCH="$OPTARG" ;; A) PACK_ARTIFACTS=1 ;; @@ -297,6 +321,7 @@ while getopts "a:C:c:d:D:g:i:I:o:r:s:t:v:AbBFnNquVz" opt; do v) VERSION="$OPTARG" ;; F) FORCE=1 ;; u) UPDATE=1 ;; + U) CHOWN_USER="$OPTARG" ;; V) VERBOSE="-v" ;; z) SQUASHFS_ZLIB=1 ;; ?) echo "invalid option -$OPTARG" >&2; bailout 1 ;; @@ -308,7 +333,7 @@ shift $(($OPTIND - 1)) # set ARGV to the first not parsed commandline parameter # assume sane defaults (if not set already) {{{ [ -n "$ARCH" ] || ARCH="$(dpkg --print-architecture)" [ -n "$BOOT_METHOD" ] || BOOT_METHOD='isolinux' -[ -n "$CLASSES" ] || CLASSES="GRMLBASE,GRML_MEDIUM,I386" +[ -n "$CLASSES" ] || CLASSES="GRMLBASE,GRML_FULL,$(echo ${ARCH} | tr 'a-z' 'A-Z')" [ -n "$DATE" ] || DATE="$(date +%Y-%m-%d)" [ -n "$DISTRI_INFO" ] || DISTRI_INFO='Grml - Live Linux for system administrators ' [ -n "$DISTRI_NAME" ] || DISTRI_NAME="grml" @@ -320,7 +345,6 @@ shift $(($OPTIND - 1)) # set ARGV to the first not parsed commandline parameter [ -n "$HYBRID_METHOD" ] || HYBRID_METHOD='manifold' [ -n "$NFSROOT_CONF" ] || NFSROOT_CONF="${GRML_FAI_CONFIG}/make-fai-nfsroot.conf" [ -n "$RELEASENAME" ] || RELEASENAME='grml-live rocks' -[ -n "$SOURCES_LIST_OUTPUT" ] || SOURCES_LIST_OUTPUT="${GRML_FAI_CONFIG}/config/files/etc/apt/sources.list/GRML_LIVE_SOURCES_LIST" [ -n "$SQUASHFS_EXCLUDES_FILE" ] || SQUASHFS_EXCLUDES_FILE="${GRML_FAI_CONFIG}/config/grml/squashfs-excludes" [ -n "$SUITE" ] || SUITE='squeeze' [ -n "$TEMPLATE_DIRECTORY" ] || TEMPLATE_DIRECTORY='/usr/share/grml-live/templates' @@ -386,6 +410,7 @@ if [ -z "$FORCE" ] ; then [ -n "$CHROOT_INSTALL" ] && echo " Install files from directory to chroot: $CHROOT_INSTALL" [ -n "$BOOTID" ] && echo " Boot identifier: $BOOTID" [ -n "$NO_BOOTID" ] && echo " Skipping bootid feature." + [ -n "$CHOWN_USER" ] && echo " Output owner: $CHOWN_USER" [ -n "$DEFAULT_BOOTOPTIONS" ] && echo " Adding default bootoptions: \"$DEFAULT_BOOTOPTIONS\"" [ -n "$FAI_ARGS" ] && echo " Additional arguments for FAI: $FAI_ARGS" [ -n "$LOGFILE" ] && echo " Logging to file: $LOGFILE" @@ -416,10 +441,10 @@ fi if [ -n "${PACK_ARTIFACTS}" ]; then echo "Wiping old artifacts" [ -n "${CHROOT_OUTPUT}" -a -d "${CHROOT_OUTPUT}" ] && rm -r "${CHROOT_OUTPUT}" - [ -n "${CHROOT_ARCHIVE}" -a -d "${CHROOT_ARCHIVE}" ] && rm -r "${CHROOT_ARCHIVE}" [ -n "${BUILD_OUTPUT}" -a -d "${BUILD_OUTPUT}" ] && rm -r "${BUILD_OUTPUT}" [ -n "${ISO_OUTPUT}" -a -d "${ISO_OUTPUT}" ] && rm -r "${ISO_OUTPUT}" [ -n "${LOG_OUTPUT}" -a -d "${LOG_OUTPUT}" ] && rm -r "${LOG_OUTPUT}" + [ -n "${CHROOT_ARCHIVE}" -a -f "${CHROOT_ARCHIVE}" ] && rm "${CHROOT_ARCHIVE}" fi # }}} @@ -477,23 +502,6 @@ einfo "Logging actions to logfile $LOGFILE" # }}} # on-the-fly configuration {{{ -mkdir -p "$(dirname $SOURCES_LIST_OUTPUT)" # might not be present in -D config space - -cat > "$SOURCES_LIST_OUTPUT" << EOF -# NOTE: This file is *NOT* meant for manual customisation! This file is -# installed temporarily only by grml-live and will be overriden in the -# installation and configuration process then. -EOF - -if [ -n "$MIRROR_DIRECTORY" ] ; then - if ! [ -d "$MIRROR_DIRECTORY/debian" ] ; then - log "Error: $MIRROR_DIRECTORY/debian does not seem to exist. Exiting. [$(date)]" - eerror "Error: $MIRROR_DIRECTORY/debian does not seem to exist. Exiting." ; eend 1 - bailout 1 - fi - echo "$MIRROR_SOURCES" >> "$SOURCES_LIST_OUTPUT" -fi - if [ -n "$FAI_DEBOOTSTRAP" ] ; then sed "s#^FAI_DEBOOTSTRAP=.*#FAI_DEBOOTSTRAP=\"$FAI_DEBOOTSTRAP\"#" "$NFSROOT_CONF" | sponge "$NFSROOT_CONF" fi @@ -501,45 +509,11 @@ fi # does this suck? YES! # /usr/share/debootstrap/scripts/unstable does not exist, instead use 'sid': case $SUITE in - unstable) SUITE='sid' ;; - # make sure that we *NEVER* write any broken suite name to sources.list, - # otherwise we won't be able to adjust it one next (correct) execution - stable) ;; - testing) ;; - etch) ;; - lenny) ;; - squeeze) ;; - wheezy) ;; - sid) ;; - *) echo "Sorry, $SUITE is not a valid Debian suite, exiting.">&2; bailout 1 ;; + unstable) SUITE='sid' ; CLASSES="DEBIAN_UNSTABLE,$CLASSES" ;; + *) CLASSES="DEBIAN_$(echo $SUITE | tr 'a-z' 'A-Z'),$CLASSES";; esac export SUITE # make sure it's available in FAI scripts -if [ -n "${GRML_LIVE_SOURCES:-}" ] ; then - DIST=" etch\| stable\| lenny\| squeeze\| wheezy\| testing\| sid\| unstable" - echo "# generated based on \$GRML_LIVE_SOURCES by grml-live -$GRML_LIVE_SOURCES" | \ - sed -e "s/\(^deb .\+\)\([ \t]*\)\($DIST\)\([ \t]*\)\(main \)/\1 \2$SUITE\4\5/; - s/\(^deb-src .\+\)\([ \t]*\)\($DIST\)\([ \t]*\)\(main \)/\1 \2$SUITE\4\5/" >> "$SOURCES_LIST_OUTPUT" -else - cat >> "$SOURCES_LIST_OUTPUT" << EOF -# generated by grml-live -deb http://deb.grml.org/ grml-stable main -deb http://deb.grml.org/ grml-testing main -deb http://cdn.debian.net/debian $SUITE main contrib non-free -EOF -fi - -# notice: activate grml-live pool when building against unstable or testing: -if grep -qwe unstable -qwe sid -qwe testing -qwe wheezy "$SOURCES_LIST_OUTPUT" ; then - grep -q 'grml-live.*main' "$SOURCES_LIST_OUTPUT" || \ - grep grml-stable "$SOURCES_LIST_OUTPUT" | \ - sed 's/grml-stable/grml-live/' >> "$SOURCES_LIST_OUTPUT" -else - grep -q 'grml-live.*main' "$SOURCES_LIST_OUTPUT" && \ - sed -i 's/.*grml-live.*main/# removed grml-live repository/' "$SOURCES_LIST_OUTPUT" -fi - for file in "$LIVE_CONF" "$CONFIG" "$LOCAL_CONFIG" "$NFSROOT_CONF" ; do if [ -n "$file" ] ; then sed "s|^FAI_DEBOOTSTRAP=\"[a-z]* |FAI_DEBOOTSTRAP=\"$SUITE |" "$file" | sponge "$file" @@ -612,6 +586,9 @@ else mount --bind "${MIRROR_DIRECTORY}" "${CHROOT_OUTPUT}/${MIRROR_DIRECTORY}" fi + mkdir -p "${OUTPUT}/grml_sources/" "${CHROOT_OUTPUT}/grml-live/sources/" + mount --bind "${OUTPUT}/grml_sources/" "${CHROOT_OUTPUT}/grml-live/sources/" + # tell dpkg to use "unsafe io" during the build [ -d "$CHROOT_OUTPUT/etc/dpkg/dpkg.cfg.d" ] || mkdir -p "$CHROOT_OUTPUT/etc/dpkg/dpkg.cfg.d" echo force-unsafe-io > "$CHROOT_OUTPUT/etc/dpkg/dpkg.cfg.d/unsafe-io"