From ae23139f6b833b49a353115ce185f6ede2c8b099 Mon Sep 17 00:00:00 2001 From: Silvan Calarco Date: Mon, 12 Mar 2012 15:38:29 +0100 Subject: [PATCH] 20-openmamba-autobuild-makedist: multilanguage+multiarch targets supports and may fixes and improvements --- .../20-openmamba-autobuild-makedist | 273 +++++++++++------- 1 file changed, 175 insertions(+), 98 deletions(-) diff --git a/etc/cron.daily/20-openmamba-autobuild-makedist b/etc/cron.daily/20-openmamba-autobuild-makedist index d6baa2c..6512cec 100755 --- a/etc/cron.daily/20-openmamba-autobuild-makedist +++ b/etc/cron.daily/20-openmamba-autobuild-makedist @@ -1,7 +1,7 @@ #!/bin/bash # # Makedist automatic build script -# Copyright (c) 2007-2009 by Silvan Calarco +# Copyright (c) 2007-2012 by Silvan Calarco # # Usage: # @@ -14,6 +14,13 @@ . /etc/sysconfig/makedist . /usr/share/makedist/functions.inc.sh +ME=`basename $0` +[ "$$" == "`pidof -x $ME`" ] || { + echo "Warning: script already running; exiting." + exit 0 +} + +TORRENTURL=http://torrent.mambasoft.it:8080/announce DISTRONAME=openmamba MAKEDIST_TARGET=openmamba arch=i586 @@ -22,26 +29,22 @@ SOURCEDIR=/var/makedist [ "$TODAYDATE" ] || TODAYDATE=`date +%Y%m%d` [ "$WEEKDAY" ] || WEEKDAY=`date +%u` -# DAY: 1=monday ... 7=sunday +[ "$DISTVERSION" ] || { + echo "Error: DISTVERSION is not set, check configuration file; aborting." + exit 1 +} + if [ "$RELEASE" ]; then - DISTVERSION=milestone1 - DESTBASEDIR=/var/ftp/pub/openmamba/$DISTVERSION/media - ALLMEDIAS=(livecd/livecd-root livecd/livestudio-root installdvd/livecd-root bootusb) - ALLMEDIASDAY=(8 8 8 8) -# DOWNLOADSFILEPREFIX=$DESTBASEDIR/downloads DESTLATESTFILENAME=latest-$RELEASE.inc.js SOURCEIMGFILEPREFIX="openmamba-$DISTVERSION" else - DISTVERSION=devel - DESTBASEDIR=/var/ftp/pub/openmamba/$DISTVERSION/media - ALLMEDIAS=(livecd/livecd-root livedvd/livedvd-root livecd/livegames-root livecd/testcd-root flash-1GB bootcd bootusb) - ALLMEDIASDAY=(5 2 6 4 7 7 5) -# DOWNLOADSFILEPREFIX=$DESTBASEDIR/downloads.inc DESTLATESTFILENAME=latest.inc.js SOURCEIMGFILEPREFIX="openmamba" fi + +DESTBASEDIR=/var/ftp/pub/openmamba/$DISTVERSION/media DESTIMGFILEPREFIX="openmamba" -ALLMEDIASLAST=`expr ${#ALLMEDIAS[*]} - 1` +ALLMEDIASLAST=`expr ${#MEDIA_NAME[*]} - 1` DESTBASEURL=/pub/openmamba/$DISTVERSION/media # do_makedist() @@ -53,62 +56,101 @@ DESTBASEURL=/pub/openmamba/$DISTVERSION/media # $3: language # $4: platform # $5: subplatform -# $6 product_name +# $6: product_name +# $7: architecture function do_makedist() { - local DIST_CREATED=0 - SOURCEIMG=$SOURCEDIR/$1 + local DIST_CREATED=0 SOURCEIMG DESTFILENAME DESTNAME DESTLANGUAGE DESTPLATFORM DESTSUBPLATFORM DESTARCH \ + DESTPRODUCTNAME DESTDIR DESTIMG DESTMD5 DESTTORRENT + DESTFILENAME=$1 DESTNAME=$2 - DESTDIR=$DESTBASEDIR/$6/$3 + 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 + } [ "$RELEASE" ] && \ DESTLATEST=$DESTDIR/latest-is-$RELEASETAG.txt || \ DESTLATEST=$DESTDIR/latest-is-$SNAPDATE.txt if [ ! -f $DESTIMG -o "$FORCE_OVERWRITE" = "1" ]; then - [ ! "$SIMULATE" ] && { - makedist openmamba PLATFORM=$4 SUBPLATFORM=$5 FORCE=1 LANGUAGE=$3 || { - echo "Error building openmamba $6 platform; aborting." + if [ ! "$SIMULATE" ]; then + [ "$CRON_DEBUG" = "1" ] && \ + echo "-> makedist openmamba PLATFORM=${DESTPLATFORM} SUBPLATFORM=${DESTSUBPLATFORM} \ +LANGUAGE=${DESTLANGUAGE} ARCH=${DESTARCH} FORCE=1" + makedist openmamba PLATFORM=${DESTPLATFORM} SUBPLATFORM=${DESTSUBPLATFORM} \ +LANGUAGE=${DESTLANGUAGE} ARCH=${DESTARCH} FORCE=1 || { + 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/.$1.inc.html $DESTDIR/buildinfo-$RELEASE.inc.html + 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 - maketorrent-console --title "openmamba $RELEASE $6 $3" --tracker_name "mambaSoft BitTorrent tracker" \ - http://www.mambasoft.it:8080/announce $DESTNAME --target $DESTTORRENT - rm -f $DESTDIR/latest-is-*.txt + if [ "${DESTIMG/.iso}" != "$DESTIMG" ]; then + # ISO image, create video preview + [ ! -e $DESTDIR/preview/$DESTNAME.ogv -o $SOURCEIMG -nt $DESTDIR/preview/$DESTNAME.ogv ] && openmamba-recordvm $DESTIMG + fi + rm -f $DESTDIR/latest-is-*.txt > $DESTLATEST else [ -e $DESTDIR ] || mkdir -p $DESTDIR cp $SOURCEIMG $DESTIMG - cp $SOURCEDIR/.$1.inc.html $DESTDIR/buildinfo.inc.html - cd $DESTDIR + cp $SOURCEDIR/.${DESTFILENAME}.inc.html $DESTDIR/buildinfo.inc.html + cd $DESTDIR md5sum $DESTNAME > $DESTMD5 - maketorrent-console \ - --comment "openmamba snapshot $SNAPDATE $6 $3 from http://www.openmamba.org" \ - --tracker_name "mambaSoft BitTorrent tracker" \ - --language $3 \ - http://www.mambasoft.it:8080/announce \ - $DESTNAME --target $DESTTORRENT + if [ "${DESTIMG/.iso}" != "$DESTIMG" ]; then + # ISO image, create video preview + [ ! -e $DESTDIR/preview/$DESTNAME.ogv -o $SOURCEIMG -nt $DESTDIR/preview/$DESTNAME.ogv ] && openmamba-recordvm $DESTIMG + fi rm -f $DESTDIR/latest-is-*.txt > $DESTLATEST 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['$6-$RELEASETAG-$3']='$DESTNAME'; -pathArray['$6-$RELEASETAG-$3']='/download.html?file=$DESTBASEURL/$6/$3/'; -sizeArray['$6-$RELEASETAG-$3']='$DESTSIZE'; -md5Array['$6-$RELEASETAG-$3']='$DESTMD5'; +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 @@ -118,34 +160,44 @@ _EOF # # Parameters; # -# $1: dist filename -# $2: dest filename +# $1: medium suffix +# $2: medium release tag # $3: platform # $4: subplatform -# $5: html output language +# $5: html language # $6: product name +# $7: medium idx function do_makedist_and_html() { - local DIST_LINE DIST_CREATED DIST_DWD + local DIST_LINE DIST_CREATED DIST_DWD HTMLLANG MEDIA_ARCH PRODNAME \ + MEDIUMFILENAME MEDIUMNAME MEDIUMPLATFORM MEDIUMSUBPLATFORM m l local tempfile2=`tempfile 2>/dev/null` || tempfile=/tmp/makedist_tmpfile2 + MEDIUMSUFFIX=$1 + MEDIUMTAG=$2 + MEDIUMPLATFORM=$3 + MEDIUMSUBPLATFORM=$4 + HTMLLANG=$5 PRODNAME=$6 - [ $PRODNAME ] || PRODNAME=$PLATFORM - + m=$7 + [ "${m}" ] || { + echo "Error: do_makedist_and_html: invalid number of parameters; aborting." + exit 1 + } + cat > $tempfile2 << _EOF
-
+ _EOF - case $5 in - it) echo -n "Lingua: " >> $tempfile2 ;; - *) echo -n "Language: " >> $tempfile2 ;; + case ${HTMLLANG} in + it) echo -n "Lingua: " >> $tempfile2; selecttext="Scarica..."; fortext="per" ;; + *) echo -n "Language: " >> $tempfile2; selecttext="Download..."; fortext="for" ;; esac - - for l in $LANGS; do - [ "$l" = "$5" ] && { - checked="checked" + for l in ${MEDIA_LANGUAGES[$m]}; do + [ "$l" = "${HTMLLANG}" ] && { + checked="checked" } || checked="" case $l in it) langname="italiano" ;; @@ -153,64 +205,89 @@ _EOF en) langname="english" ;; *) langname="unknown" ;; esac - echo "$langname" >> $tempfile2 + 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.$5.$RELEASE.html - ln -sf index.inc.$5.$RELEASE.html $DESTBASEDIR/$PRODNAME/index.inc.$5.pre.html + DESTHTML=$DESTBASEDIR/$PRODNAME/index.inc.${HTMLLANG}.$RELEASE.html + ln -sf index.inc.${HTMLLANG}.$RELEASE.html $DESTBASEDIR/$PRODNAME/index.inc.${HTMLLANG}.pre.html else - DESTHTML=$DESTBASEDIR/$PRODNAME/index.inc.$5.html + DESTHTML=$DESTBASEDIR/$PRODNAME/index.inc.${HTMLLANG}.html fi mv $tempfile2 $DESTHTML chmod +r $DESTHTML } -LANGUAGE=_SPLIT_ - tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/makedist_tmpfile -for l in $LANGS; do - echo "" > $tempfile.$l +for l in ${HTML_LANGS}; do + echo "
" > $tempfile.$l done for i in `seq 0 $ALLMEDIASLAST`; do - PLATFORM=${ALLMEDIAS[i]/\/*/} - SUBPLATFORM=${ALLMEDIAS[i]/*\//} + 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" ] && \ - media_name=`PLATFORM=$SUBPLATFORM media_name` || - media_name=`media_name` - media_suffix=${media_name/*_SPLIT_\./} - + medium_name=`arch=_SPLIT_ PLATFORM=$SUBPLATFORM media_name` || + medium_name=`arch=_SPLIT_ media_name` + medium_suffix=${medium_name/*_SPLIT_\./} [ $PRODUCT_NAME ] || PRODUCT_NAME=$PLATFORM [ "$PRODUCT_NAME_OVERRIDE" ] && PRODUCT_NAME=$PRODUCT_NAME_OVERRIDE @@ -219,7 +296,7 @@ for i in `seq 0 $ALLMEDIASLAST`; do if [ "$RELEASE" ]; then echo "Releasing $PRODUCT_NAME media (${PLATFORM}/${SUBPLATFORM})" SIMULATE=1 - elif [ "$WEEKDAY" = "${ALLMEDIASDAY[i]}" -o \ + elif [ "$WEEKDAY" = "${MEDIA_BUILDDAY[i]}" -o \ "$FORCEBUILD" = "$PRODUCT_NAME" ]; then echo "Building $PRODUCT_NAME media" unset SIMULATE @@ -227,31 +304,31 @@ for i in `seq 0 $ALLMEDIASLAST`; do SIMULATE=1 fi - if [ -e $DESTBASEDIR/$PRODUCT_NAME/en ]; then - unset latest - 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 - [ "$RELEASE" ] && RELEASETAG=milestone1-$RELEASE || RELEASETAG=snapshot-$SNAPDATE + for l in ${HTML_LANGS}; do - for l in $LANGS; do - # build specific language version - [ "$latest" -o ! "$SIMULATE" -o "$RELEASE" ] && - do_makedist_and_html \ - $media_suffix $RELEASETAG.$media_suffix \ - $PLATFORM "$SUBPLATFORM" $l $PRODUCT_NAME + 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 english version -# [ "$latest" -o ! "$SIMULATE" -o "$RELEASE" ] && -# do_makedist_and_html \ -# $media_suffix $RELEASETAG.$media_suffix \ -# $PLATFORM "$SUBPLATFORM" en $PRODUCT_NAME - else - echo "Warning: missing directory $DESTBASEDIR/$PRODUCT_NAME/en; skipping" - fi + unset latest + latest=`ls $DESTBASEDIR/$PRODUCT_NAME/$ml/latest-is-*.txt 2>/dev/null| sed "s/.*latest-is-\(.*\)\.txt/\1/"` + [ "$latest" -a "$SIMULATE" ] && SNAPDATE=$latest || SNAPDATE=$TODAYDATE + [ "$RELEASE" ] && RELEASETAG=$DISTVERSION-$RELEASE || RELEASETAG=snapshot-$SNAPDATE + + # 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 $LANGS; do +for l in ${HTML_LANGS}; do echo "
" >> $tempfile.$l if [ "$RELEASE" ]; then cat $tempfile.$l > $DESTBASEDIR/downloads-$RELEASE.inc.$l