#!/bin/bash # # testingcds (c) 2005 Santiago Garcia Mantinan # # Updates since then by: # Joey Hess # Steve McIntyre # # GPL v2 # # See cronjob.weekly and cronjob.daily for examples of how to call this script #set -x if [ "$CONF"x = ""x ] ; then CONF=~/build.${CODENAME}/CONF.sh fi export CF=$CONF if [ "$DCD_DIR"x = ""x ] ; then DCD_DIR=~/build.${CODENAME}/debian-cd fi now () { date -u +%F:%H:%M:%S } # Set up and cleaning if [ $# -lt 1 ] ; then echo $0 \$ARCH echo "variables: PUBDIR[ISO|JIG]" exit 1 fi if [ ! "$DATE_BUILD" ] ; then DATE_BUILD=`/bin/date -u +%Y%m%d` fi export ARCH="$1" NUM_ARCHES=`echo $ARCH | wc -w` if [ ! "$JIGDOFALLBACKURLS" ] ; then export JIGDOFALLBACKURLS="Debian=http://us.cdimage.debian.org/cdimage/snapshot/Debian/" fi # $DI is used to set DI_CODENAME and also to specify the directory for images if [ "$DI" ] ; then export DI_CODENAME="$DI" fi export LOG="`pwd`/log/" if [ "$NUM_ARCHES"x = "1"x ] ; then export OUTARCH=$ARCH else export OUTARCH="multi-arch" fi export RUN="$INSTALLER_CD$DI$OUTARCH$LOGAPPEND" export LOGFILE="$LOG/$RUN" case "$INSTALLER_CD" in 1) export DISKTYPE=BC;; 2|7|8|C|F|G|H) export DISKTYPE=NETINST;; 3|6|I|J) export OUT_TYPE=dvd export DISKTYPE=DVD;; 4) export DISKTYPE=kde-CD;; 5) export DISKTYPE=xfce-CD;; A) export DISKTYPE=lxde-CD;; B) export DISKTYPE=xfce+lxde-CD;; 9|K|L) export OUT_TYPE=bd export DISKTYPE=BD;; D) export OUT_TYPE=dlbd export DISKTYPE=DLBD;; E) export DISKTYPE=gnome-CD;; M|N) export OUT_TYPE=16G export DISKTYPE=STICK16GB;; *) export DISKTYPE=CD;; esac if [ "$DEBIAN_EDU"x = "1"x ] ; then # Different logo for the debian-edu images export LOGOPNG="$DCD_DIR/data/$DI_CODENAME/debian-edu-installer-logo.png" export SPLASHPNG="$DCD_DIR/data/$DI_CODENAME/splash-skolelinux.png" fi if [ "$OUT_TYPE"x = ""x ] ; then OUT_TYPE=cd fi export IMAGETARGET=official_images cd $DCD_DIR && . $CONF if [ "$OUT"x = ""x ] ; then echo Config error exit 1 fi if [ "$BUILDNAME"x = ""x ] ; then BUILDNAME="$OUT_TYPE" fi TRACEFILE="$BUILDNAME-trace" echo " Making $ARCH ${DISKTYPE} (${BUILDNAME}) in $OUT" if [ "$INSTALLER_CD" = "1" ] ; then export OFFICIAL="Official BusinessCard Snapshot" elif [ "$INSTALLER_CD" = "2" ] ; then export OFFICIAL="Official NetInst Snapshot" elif [ "$INSTALLER_CD" = "4" ]; then export OFFICIAL="Official KDE CD Snapshot" elif [ "$INSTALLER_CD" = "5" ]; then export OFFICIAL="Official Xfce CD Snapshot" elif [ "$INSTALLER_CD" = "A" ]; then export OFFICIAL="Official LXDE CD Snapshot" elif [ "$INSTALLER_CD" = "B" ]; then export OFFICIAL="Official Xfce/LXDE CD Snapshot" elif [ "$INSTALLER_CD" = "6" ]; then export OFFICIAL="Official Multi-Arch DVD" elif [ "$INSTALLER_CD" = "7" ]; then export OFFICIAL="Official Multi-Arch Netinst" elif [ "$INSTALLER_CD" = "8" ]; then export OFFICIAL="Official Multi-Arch Netinst" elif [ "$INSTALLER_CD" = "C" ]; then export OFFICIAL="Unofficial Netinst including firmware" elif [ "$INSTALLER_CD" = "E" ]; then export OFFICIAL="Official Gnome CD Snapshot" elif [ "$INSTALLER_CD" = "F" ]; then export OFFICIAL="Official Mac Netinst" elif [ "$INSTALLER_CD" = "G" ]; then export OFFICIAL="Official Debian-Edu Netinst" elif [ "$INSTALLER_CD" = "H" ]; then export OFFICIAL="Unofficial Debian-Edu Netinst including firmware" elif [ "$INSTALLER_CD" = "I" ]; then export OFFICIAL="Unofficial DVD including firmware" elif [ "$INSTALLER_CD" = "J" ]; then export OFFICIAL="Unofficial Multi-Arch DVD including firmware" elif [ "$INSTALLER_CD" = "K" ]; then export OFFICIAL="Debian-Edu Full USB image" elif [ "$INSTALLER_CD" = "L" ]; then export OFFICIAL="Unofficial Debian-Edu Full USB image including firmware" elif [ "$INSTALLER_CD" = "M" ]; then export OFFICIAL="Official 16G USB image" elif [ "$INSTALLER_CD" = "N" ]; then export OFFICIAL="Unofficial 16G USB image including firmware" fi rm -rf "$OUT" mkdir -p "$OUT" rm -f "$PUBDIRJIG"/$OUTARCH/$TRACEFILE #mkdir -p "$LOG" overview_log="$LOG/overview" overview () { if [ -e $overview_log ]; then grep -v " $1 " $overview_log > $overview_log.new mv $overview_log.new $overview_log fi LANG=C echo "$(dpkg --print-architecture) ($(date)) $(whoami)@$(hostname | cut -d . -f 1) $1 $2" >> $overview_log } > $LOGFILE # Make sure we have an extension for all builds, so we don't have # multiple processes tripping over each other when generating checksum # files if [ "$INSTALLER_CD" = ""x ] ; then SUMS_EXTENSION=".cd" else SUMS_EXTENSION=".${INSTALLER_CD}" fi if [ "$FORCE_FIRMWARE"x = "1"x ] ; then if [ "${DI}" = "sid" ] ; then ARCHDIR=$OUT_FW_SID/$OUTARCH else ARCHDIR=$OUT_FW_TST/$OUTARCH fi else # non-FW build if [ "${DI}" = "sid" ] ; then ARCHDIR=$OUT_FREE_SID/$OUTARCH else ARCHDIR=$OUT_FREE_TST/$OUTARCH fi fi # Do the actual building START=`now` if ./build.sh "$ARCH" >>"$LOGFILE" 2>&1 ; then # if it went ok get things ready for publishing # we treat the daily netinst images in a different way if [ "$DISKTYPE" = "NETINST" ] || \ [ "$DISKTYPE" = "BC" ] ; then ################################## # NETINST STUFF ################################## mkdir -p $ARCHDIR/list-cd $ARCHDIR/jigdo-cd $ARCHDIR/iso-cd # put the isos and jigdos in their place for i in "$OUT"/*-1.iso; do BASE=`basename $i .iso` NETINSTNAME=`echo $BASE | sed 's/-BC-1/-businesscard/g;s/-NETINST-1/-netinst/g'` mv $OUT/$BASE.iso $ARCHDIR/iso-cd/$NETINSTNAME.iso cat $OUT/$BASE.jigdo | \ sed 's/-BC-1/-businesscard/g;s/-NETINST-1/-netinst/g' | \ pigz -9nm > $ARCHDIR/jigdo-cd/$NETINSTNAME.jigdo rm $OUT/$BASE.jigdo mv $OUT/$BASE.template $ARCHDIR/jigdo-cd/$NETINSTNAME.template # Make sure that the ISO is as new/newer than the jigdo file; #587774 touch $ARCHDIR/iso-cd/$NETINSTNAME.iso mv $OUT/$BASE.list.gz $ARCHDIR/list-cd/$NETINSTNAME.list.gz done rm -f "$OUT"/* END=`now` mkdir -p "$PUBDIRJIG"/$OUTARCH echo -e "start=$START\nend=$END\nerror=0\nlogfile=$RUN\n" > "$PUBDIRJIG"/$OUTARCH/$TRACEFILE else ####################################### # NORMAL STUFF - full builds (weekly) ####################################### # finish up the jigdos (compress & move them) pigz -9nm "$OUT"/*.jigdo for i in "$OUT"/*.jigdo.gz; do mv $i ${i%.gz} done # Make sure that the ISOs are as new/newer than the jigdo files; #587774 for file in "$OUT"/*.iso; do if [ -e $file ] ; then touch $file fi done mkdir -p $ARCHDIR/jigdo-${OUT_TYPE} mv "$OUT"/*.template $ARCHDIR/jigdo-${OUT_TYPE} mv "$OUT"/*.jigdo $ARCHDIR/jigdo-${OUT_TYPE} mkdir -p $ARCHDIR/iso-${OUT_TYPE} for file in "$OUT"/*.iso; do if [ -e $file ] ; then mv $file $ARCHDIR/iso-${OUT_TYPE} fi done mkdir -p $ARCHDIR/list-${OUT_TYPE} mv "$OUT"/*list*gz $ARCHDIR/list-${OUT_TYPE} END=`now` echo -e "start=$START\nend=$END\nerror=0\nlogfile=$RUN\n" > "$PUBDIRJIG"/$OUTARCH/$TRACEFILE fi touch $TDIR/$CODENAME/1.pkgs_extracted # so we don't get errors below for file in `cat $TDIR/$CODENAME/*.pkgs_extracted | sort | uniq`; do basefile=`basename $file` if [ ! -e $EXTRACTED_SOURCES/$file ] ; then cp -a $MIRROR/$file $EXTRACTED_SOURCES fi done # Mail the sizes of the images if [ -e "../.debian-cd.mail" ] ; then MYEMAIL=`grep -v "^#" "../.debian-cd.mail"` else MYEMAIL=`whoami` fi for i in $MYEMAIL do grep -e "extents written" -e "Written to medi." "$LOGFILE"|mail -s "$RELEASE_BUILD testingcds $RUN ($OUTARCH $BUILDNAME) went ok" "$i" done overview "$RUN" success else # Run failed if [ -e "../.debian-cd.mail" ] ; then MYEMAIL=`grep -v "^#" "../.debian-cd.mail"` else MYEMAIL=`whoami` fi for i in $MYEMAIL do (echo Error when trying to create cds for $RUN ; cat $LOGFILE) | \ mail -s "$RELEASE_BUILD testingcds $RUN ($OUTARCH $BUILDNAME) has failed; log included" "$i" done overview "$RUN" failed END=`now` mkdir -p "$PUBDIRJIG"/$OUTARCH echo -e "start=$START\nend=$END\nerror=1\nlogfile=$RUN\n" > "$PUBDIRJIG"/$OUTARCH/$TRACEFILE exit 1 fi