#!/bin/bash # # Makedist automatic build script # Copyright (c) 2007-2012 by Silvan Calarco # # Usage: # # To overwrite already existing images # FORCE_OVERWRITE=1 ./20-openmamba-makedist # # To commit a new release (relies on snapshot images): # RELEASE=1.0pre3 ./20-openmamba-makedist # . /etc/sysconfig/makedist . /usr/share/makedist/functions.inc.sh [ "$MAKEDIST_CRON_ENABLE" = "1" ] || exit 0 ME=`basename $0` [ "$$" == "`pidof -x $ME`" ] || { echo "Warning: script already running; exiting." exit 0 } [ "`uname -m`" = "x86_64" ] && HOST_IS_X86_64=1 TORRENTURL=http://torrent.mambasoft.it:8080/announce DISTRONAME=openmamba MAKEDIST_TARGET=openmamba arch=i586 SOURCEDIR=/var/makedist [ "$MAKEDIST_FORCE" ] || MAKEDIST_FORCE=1 [ "$TODAYDATE" ] || TODAYDATE=`date +%Y%m%d` [ "$WEEKDAY" ] || WEEKDAY=`date +%u` [ "$DISTVERSION" ] || { echo "Error: DISTVERSION is not set, check configuration file; aborting." exit 1 } if [ "$RELEASE" ]; then DESTLATESTFILENAME=latest-$RELEASE.inc.js SOURCEIMGFILEPREFIX="openmamba-$DISTVERSION" else DESTLATESTFILENAME=latest.inc.js SOURCEIMGFILEPREFIX="openmamba" fi DESTBASEDIR=/var/ftp/pub/openmamba/$DISTVERSION/media DESTIMGFILEPREFIX="openmamba" ALLMEDIASLAST=`expr ${#MEDIA_NAME[*]} - 1` DESTBASEURL=/pub/openmamba/$DISTVERSION/media # do_makedist() # # Parameters; # # $1: dist filename # $2: dest filename # $3: language # $4: platform # $5: subplatform # $6: product_name # $7: architecture function do_makedist() { local DIST_CREATED=0 SOURCEIMG DESTFILENAME DESTNAME DESTLANGUAGE DESTPLATFORM DESTSUBPLATFORM DESTARCH \ DESTPRODUCTNAME DESTDIR DESTIMG DESTMD5 DESTTORRENT DESTFILENAME=$1 DESTNAME=$2 DESTLANGUAGE=$3 DESTPLATFORM=$4 DESTSUBPLATFORM=$5 DESTPRODUCTNAME=$6 DESTARCH=$7 SOURCEIMG=$SOURCEDIR/${DESTFILENAME} DESTDIR=$DESTBASEDIR/${DESTPRODUCTNAME}/${DESTLANGUAGE} DESTIMG=$DESTDIR/$DESTNAME DESTMD5=$DESTDIR/$DESTNAME.MD5.txt DESTTORRENT=$DESTDIR/$DESTNAME.torrent [ "$DESTARCH" ] || { echo "Error: do_makedist: invalid number of parameters; aborting." exit 1 } if [ "$RELEASE" ]; then [ "$RELEASEPLATFORM" = "$MEDIUMPLATFORM" -a \ "$RELEASESUBPLATFORM" = "$MEDIUMSUBPLATFORM" ] || return 0 fi [ "$RELEASE" ] && \ DESTLATEST=$DESTDIR/latest-is-$RELEASETAG.txt || \ DESTLATEST=$DESTDIR/latest-is-$SNAPDATE.txt if [ ! -f $DESTIMG -o "$FORCE_OVERWRITE" = "1" ]; then if [ ! "$SIMULATE" ]; then if [ "$HOST_IS_X86_64" -a "${DESTARCH}" != "x86_64" ]; then CMD_PREFIX=linux32 else CMD_PREFIX= fi [ "$CRON_DEBUG" = "1" ] && \ echo "-> makedist openmamba PLATFORM=${DESTPLATFORM} SUBPLATFORM=${DESTSUBPLATFORM} \ LANGUAGE=${DESTLANGUAGE} ARCH=${DESTARCH} FORCE=${MAKEDIST_FORCE}" makedist openmamba PLATFORM=${DESTPLATFORM} SUBPLATFORM=${DESTSUBPLATFORM} \ LANGUAGE=${DESTLANGUAGE} ARCH=${DESTARCH} FORCE=${MAKEDIST_FORCE} || { echo "Error building openmamba ${DESTPRODUCTNAME} medium; aborting." exit 1 } DIST_CREATED=1 fi if [ "$RELEASE" ]; then [ -e $DESTDIR ] || mkdir -p $DESTDIR cp $SOURCEIMG $DESTIMG cp $SOURCEDIR/.${DESTFILENAME}.inc.html $DESTDIR/buildinfo-$RELEASE.inc.html [ "$RELEASE/pre" != "$RELEASE" ] && ln -sf buildinfo-$RELEASE.inc.html $DESTDIR/buildinfo-pre.inc.html cd $DESTDIR md5sum $DESTNAME > $DESTMD5 rm -f $DESTDIR/latest-is-*.txt > $DESTLATEST if [ "${DESTIMG/.iso}" != "$DESTIMG" ]; then # ISO image, create video preview [ ! -e $DESTDIR/preview/$DESTNAME.ogv -o $SOURCEIMG -nt $DESTDIR/preview/$DESTNAME.ogv ] && makedist-recordvm $DESTIMG fi else [ -e $DESTDIR ] || mkdir -p $DESTDIR cp $SOURCEIMG $DESTIMG cp $SOURCEDIR/.${DESTFILENAME}.inc.html $DESTDIR/buildinfo.inc.html cd $DESTDIR md5sum $DESTNAME > $DESTMD5 rm -f $DESTDIR/latest-is-*.txt > $DESTLATEST if [ "${DESTIMG/.iso}" != "$DESTIMG" ]; then # ISO image, create video preview [ ! -e $DESTDIR/preview/$DESTNAME.ogv -o $SOURCEIMG -nt $DESTDIR/preview/$DESTNAME.ogv ] && makedist-recordvm $DESTIMG fi fi fi if [ "$DIST_CREATED" = "1" -o $DESTIMG -nt $DESTTORRENT -o \ "$FORCE_OVERWRITE" = "1" -o "$FORCE_OVERWRITE_TORRENT" = "1" ]; then # Generate TORRENT if [ "$RELEASE" ]; then cd $DESTDIR maketorrent-console \ --comment "openmamba $RELEASE ${DESTPRODUCTNAME} ${DESTLANGUAGE}-${DESTARCH} from http://www.openmamba.org" \ --tracker_name "mambaSoft BitTorrent tracker" \ --language ${DESTLANGUAGE} \ $TORRENTURL \ $DESTNAME --target $DESTTORRENT >/dev/null else cd $DESTDIR maketorrent-console \ --comment "openmamba snapshot $SNAPDATE ${DESTPRODUCTNAME} ${DESTLANGUAGE}-${DESTARCH} from http://www.openmamba.org" \ --tracker_name "mambaSoft BitTorrent tracker" \ --language ${DESTLANGUAGE} \ $TORRENTURL \ $DESTNAME --target $DESTTORRENT >/dev/null fi fi DESTSIZE=`du $DESTIMG -h | gawk '{ print $1 }'` DESTMD5=`cat $DESTMD5 | gawk '{ print $1 }'` DESTBUILDDATE=`stat -c %y $SOURCEIMG` cat > $DESTDIR/$DESTLATESTFILENAME << _EOF nameArray['$DESTPRODUCTNAME-$RELEASETAG-$DESTLANGUAGE-$DESTARCH']='$DESTNAME'; pathArray['$DESTPRODUCTNAME-$RELEASETAG-$DESTLANGUAGE-$DESTARCH']='/download.html?file=$DESTBASEURL/$DESTPRODUCTNAME/$DESTLANGUAGE/'; sizeArray['$DESTPRODUCTNAME-$RELEASETAG-$DESTLANGUAGE-$DESTARCH']='$DESTSIZE'; md5Array['$DESTPRODUCTNAME-$RELEASETAG-$DESTLANGUAGE-$DESTARCH']='$DESTMD5'; builddateArray['$DESTPRODUCTNAME-$RELEASETAG-$DESTLANGUAGE-$DESTARCH']='$DESTBUILDDATE'; _EOF return $DIST_CREATED } # do_all_langs_makedist() # # Parameters; # # $1: medium suffix # $2: medium release tag # $3: platform # $4: subplatform # $5: html language # $6: product name # $7: medium idx function do_makedist_and_html() { local DIST_LINE DIST_CREATED DIST_DWD HTMLLANG MEDIA_ARCH PRODNAME \ MEDIUMFILENAME MEDIUMNAME MEDIUMPLATFORM MEDIUMSUBPLATFORM m l local tempfile2=`tempfile 2>/dev/null` || tempfile2=/tmp/makedist_tmpfile2 MEDIUMSUFFIX=$1 MEDIUMTAG=$2 MEDIUMPLATFORM=$3 MEDIUMSUBPLATFORM=$4 HTMLLANG=$5 PRODNAME=$6 m=$7 [ "${m}" ] || { echo "Error: do_makedist_and_html: invalid number of parameters; aborting." exit 1 } cat > $tempfile2 << _EOF
_EOF case ${HTMLLANG} in it) echo -n "Lingua: " >> $tempfile2; selecttext="Scarica..."; fortext="per" ;; *) echo -n "Language: " >> $tempfile2; selecttext="Download..."; fortext="for" ;; esac for l in ${MEDIA_LANGUAGES[$m]}; do [ "$l" = "${HTMLLANG}" ] && { checked="checked" } || checked="" case $l in it) langname="italiano" ;; es) langname="español" ;; en) langname="english" ;; *) langname="unknown" ;; esac echo "$langname" >> $tempfile2 done case ${HTMLLANG} in it) echo -n "
Architettura: " >> $tempfile2;; *) echo -n "
Architecture: " >> $tempfile2;; esac checked="checked" for a in ${MEDIA_ARCHS[$m]}; do echo "$a" >> $tempfile2 checked="" done cat >> $tempfile2 << _EOF
_EOF if [ "$RELEASE" ]; then DESTHTML=$DESTBASEDIR/$PRODNAME/index.inc.${HTMLLANG}.$latest.html ln -sf index.inc.${HTMLLANG}.$latest.html $DESTBASEDIR/$PRODNAME/index.inc.${HTMLLANG}.html ln -sf index.inc.${HTMLLANG}.html $DESTBASEDIR/$PRODNAME/index.inc.${HTMLLANG}.pre.html else DESTHTML=$DESTBASEDIR/$PRODNAME/index.inc.${HTMLLANG}.html fi mv $tempfile2 $DESTHTML chmod +r $DESTHTML if [ "$DIST_CREATED" = "1" ]; then # snapshots makedist-announcement --send-email $DISTVERSION $PRODNAME elif [ "$RELEASEPLATFORM" = "$MEDIUMPLATFORM" -a \ "$RELEASESUBPLATFORM" = "$MEDIUMSUBPLATFORM" ]; then # stable makedist-announcement --send-test-email $DISTVERSION $PRODNAME fi } releasetempfile=`tempfile 2>/dev/null` || releasetempfile=/tmp/makedist_tmpfile for l in ${HTML_LANGS}; do echo "" > $releasetempfile.$l done for i in `seq 0 $ALLMEDIASLAST`; do PLATFORM=${MEDIA_PLATFORM[i]} SUBPLATFORM=${MEDIA_SUBPLATFORM[i]} unset PRODUCT_NAME unset PRODUCT_NAME_OVERRIDE [ $SUBPLATFORM ] && . /var/makedist/targets/$MAKEDIST_TARGET/platforms/$SUBPLATFORM/settings.inc . /var/makedist/targets/$MAKEDIST_TARGET/platforms/$PLATFORM/settings.inc [ "$SUBPLATFORM" ] && \ medium_name=`arch=_SPLIT_ PLATFORM=$SUBPLATFORM media_name` || medium_name=`arch=_SPLIT_ media_name` medium_suffix=${medium_name/*_SPLIT_\./} [ $PRODUCT_NAME ] || PRODUCT_NAME=${MEDIA_NAME[i]} [ "$PRODUCT_NAME_OVERRIDE" ] && PRODUCT_NAME=$PRODUCT_NAME_OVERRIDE unset latest #echo "PLATFORM=$PLATFORM SUBPLATFORM=$SUBPLATFORM MEDIA_SUFFIX=$media_suffix" if [ "$RELEASE" ]; then echo "Releasing $PRODUCT_NAME media (${PLATFORM}/${SUBPLATFORM} $RELEASETAG)" SIMULATE=1 elif [ "$WEEKDAY" = "${MEDIA_BUILDDAY[i]}" -o \ "$FORCEBUILD" = "$PRODUCT_NAME" ]; then echo "Building $PRODUCT_NAME media" unset SIMULATE else SIMULATE=1 fi if [ "$RELEASE" ]; then latest=`ls $DESTBASEDIR/$PRODUCT_NAME/en/latest-is-$DISTVERSION-*.txt 2>/dev/null| sed "s/.*latest-is-$DISTVERSION-\(.*\)\.txt/\1/"` if [ "$RELEASEPLATFORM" = "$PLATFORM" -a \ "$RELEASESUBPLATFORM" = "$SUBPLATFORM" ]; then RELEASETAG=$DISTVERSION-$RELEASE else RELEASETAG=$DISTVERSION-$latest fi SNAPDATE=$RELEASETAG else latest=`ls $DESTBASEDIR/$PRODUCT_NAME/en/latest-is-*.txt 2>/dev/null| sed "s/.*latest-is-\(.*\)\.txt/\1/"` [ "$latest" -a "$SIMULATE" ] && SNAPDATE=$latest || SNAPDATE=$TODAYDATE RELEASETAG=snapshot-$SNAPDATE fi for l in ${HTML_LANGS}; do for ml in ${MEDIA_LANGUAGES[i]}; do if [ ! -e $DESTBASEDIR/$PRODUCT_NAME/$ml ]; then mkdir -p $DESTBASEDIR/$PRODUCT_NAME/$ml || { echo "Error: cannot create directory $DESTBASEDIR/$PRODUCT_NAME/$ml; aborting" exit 1 } fi done # build all media and create html page of language ${l} [ "$latest" -o ! "$SIMULATE" -o "$RELEASE" ] && do_makedist_and_html \ $medium_suffix $RELEASETAG \ $PLATFORM "$SUBPLATFORM" ${l} $PRODUCT_NAME ${i} done done for l in ${HTML_LANGS}; do echo "
" >> $releasetempfile.$l # if [ "$RELEASE" ]; then # cat $releasetempfile.$l > $DESTBASEDIR/downloads-$RELEASE.inc.$l # [ "${RELEASE/pre}" != "$RELEASE" ] && ln -sf downloads-$RELEASE.inc.$l $DESTBASEDIR/downloads-pre.inc.$l # else rm -f $DESTBASEDIR/downloads.inc.$l cat $releasetempfile.$l > $DESTBASEDIR/downloads.inc.$l # fi rm -f $releasetempfile.$l done exit 0