#!/bin/bash # # Makedist automatic media build script # Copyright (c) 2007-2022 by Silvan Calarco # # Usage: # # To overwrite already existing images # FORCE_OVERWRITE=1 ./20-makedist-autobuild # # To commit a new release (relies on snapshot images): # RELEASE=1.0pre3 ./20-makedist-autobuild # . /etc/sysconfig/makedist . /usr/share/makedist/functions.inc.sh # DO_RECORDVM=1 ALLMEDIASLAST=`expr ${#MEDIA_NAME[*]} - 1` [ "$MAKEDIST_CRON_ENABLE" = "1" -o "$FORCE" ] || exit 0 ME=`basename $0` [ "$$" == "`pidof -x $ME`" ] || { echo "Warning: makedist-autobuild script already running; exiting." exit 0 } [ "`uname -m`" = "x86_64" ] && HOST_IS_X86_64=1 SOURCEDIR=/var/makedist [ "$MAKEDIST_FORCE" ] || MAKEDIST_FORCE=1 [ "$TODAYDATE" ] || TODAYDATE=`date +%Y%m%d` [ "$WEEKDAY" ] || WEEKDAY=`date +%u` [ "$MONTHDAY" ] || MONTHDAY=`date +%-d` [ "$DISTVERSION" ] || { echo "Error: DISTVERSION is not set, check configuration file; aborting." exit 1 } # 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 \ DESTVARIANT DESTPRODUCTNAME DESTDIR DESTIMG DESTMD5 DESTTORRENT DESTMILESTONE DESTTARGET DESTFILENAME=$1 DESTNAME=$2 DESTLANGUAGE=$3 DESTPLATFORM=$4 DESTSUBPLATFORM=$5 DESTVARIANT=$6 DESTPRODUCTNAME=$7 DESTARCH=$8 DESTMILESTONE=$9 DESTTARGET=${10} 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 if [ "${DESTMILESTONE}" = "devel" -o "${DESTMILESTONE}" = "main" ]; then MAKEDIST_TARGET=${DESTTARGET} else MAKEDIST_TARGET=${DESTTARGET}-${DESTMILESTONE} fi [ "$CRON_DEBUG" = "1" ] && \ echo "-> makedist $MAKEDIST_TARGET PLATFORM=${DESTPLATFORM} SUBPLATFORM=${DESTSUBPLATFORM} \ VARIANT=${DESTVARIANT} LANGUAGE=${DESTLANGUAGE} ARCH=${DESTARCH} FORCE=${MAKEDIST_FORCE}" makedist $MAKEDIST_TARGET PLATFORM=${DESTPLATFORM} SUBPLATFORM=${DESTSUBPLATFORM} \ VARIANT=${DESTVARIANT} LANGUAGE=${DESTLANGUAGE} ARCH=${DESTARCH} FORCE=${MAKEDIST_FORCE} || { echo "Error building ${DESTPRODUCTNAME} medium; skipping." return 255 } 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 [ "${DO_RECORDVM}" -a "${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 [ "${DO_RECORDVM}" -a "${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 [ "${TORRENTURL}" ]; then 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 "${DESTTARGET} $RELEASE ${DESTPRODUCTNAME} ${DESTLANGUAGE}-${DESTARCH} from ${PROJECT_URL}" \ --tracker_name "${DESTTARGET} BitTorrent tracker" \ --language ${DESTLANGUAGE} \ $TORRENTURL \ $DESTNAME --target $DESTTORRENT >/dev/null else cd $DESTDIR maketorrent-console \ --comment "${DESTTARGET} snapshot $SNAPDATE ${DESTPRODUCTNAME} ${DESTLANGUAGE}-${DESTARCH} from ${PROJECT_URL}" \ --tracker_name "${DESTTARGET} BitTorrent tracker" \ --language ${DESTLANGUAGE} \ $TORRENTURL \ $DESTNAME --target $DESTTORRENT >/dev/null fi fi fi 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 MEDIUMVARIANT \ m l MEDIUMMILESTONE MEDIUMTARGET local tempfile2=`mktemp 2>/dev/null` || tempfile2=/tmp/makedist_tmpfile2 MEDIUMSUFFIX=$1 MEDIUMTAG=$2 MEDIUMPLATFORM=$3 MEDIUMSUBPLATFORM=$4 MEDIUMVARIANT=$5 HTMLLANG=$6 PRODNAME=$7 m=$8 MEDIUMMILESTONE=${MEDIA_MILESTONE[$m]} MEDIUMTARGET=${MEDIA_TARGET[$m]} [ "${MEDIUMMILESTONE}" ] || { echo "Error: do_makedist_and_html: invalid number of parameters; aborting." exit 1 } if [ "${MEDIUMMILESTONE}" != "devel" -a "${MEDIUMMILESTONE}" != "main" ]; then SOURCEIMGFILEPREFIX="${MEDIUMTARGET}-${MEDIUMMILESTONE}" DESTIMGFILEPREFIX="${MEDIUMTARGET}-${MEDIUMMILESTONE}" else SOURCEIMGFILEPREFIX="${MEDIUMTARGET}" DESTIMGFILEPREFIX="${MEDIUMTARGET}" fi 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 checked="" if [ "${l}" = "${HTMLLANG}" ]; then checked="checked" fi 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 if [ "$MEDIUMMILESTONE" != "devel" -a "$MEDIUMMILESTONE" != "main" ]; then #temporary makedist-announcement --rebuild-announcement --send-test-email -y ${MEDIUMMILESTONE} $PRODNAME else makedist-announcement --rebuild-announcement --send-email -y ${MEDIUMMILESTONE} $PRODNAME fi elif [ "$RELEASEPLATFORM" = "$MEDIUMPLATFORM" -a \ "$RELEASESUBPLATFORM" = "$MEDIUMSUBPLATFORM" -a "$HTMLLANG" = "en" ]; then # stable makedist-announcement --rebuild-announcement --send-test-email -y ${MEDIUMMILESTONE} $PRODNAME fi return $DIST_CREATED } 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]} VARIANT=${MEDIA_VARIANT[i]} DESTBASEDIR=${REPODIR_LOCAL}/${MEDIA_MILESTONE[i]}/media DESTBASEURL=${REPODIR_URL}/${MEDIA_MILESTONE[i]}/media unset PRODUCT_NAME unset PRODUCT_NAME_OVERRIDE [ $SUBPLATFORM ] && . ${SOURCEDIR}/targets/${MEDIA_TARGET[i]}/platforms/$SUBPLATFORM/settings.inc . ${SOURCEDIR}/targets/${MEDIA_TARGET[i]}/platforms/$PLATFORM/settings.inc [ "$SUBPLATFORM" ] && \ medium_name=`arch=_SPLIT_ VARIANT=$VARIANT PLATFORM=$SUBPLATFORM media_name` || medium_name=`arch=_SPLIT_ VARIANT=$VARIANT media_name` medium_suffix=${medium_name/*_SPLIT_\./} [ $PRODUCT_NAME ] || PRODUCT_NAME=${MEDIA_NAME[i]} [ "$PRODUCT_NAME_OVERRIDE" ] && PRODUCT_NAME=$PRODUCT_NAME_OVERRIDE unset latest [ "${CRON_DEBUG}" ] && echo "PLATFORM=$PLATFORM SUBPLATFORM=$SUBPLATFORM MEDIA_SUFFIX=$media_suffix MEDIA_WEEKDAY=${MEDIA_WEEKDAY[i]}" if [ "$RELEASE" ]; then echo "Releasing $PRODUCT_NAME media (${PLATFORM}/${SUBPLATFORM} $RELEASETAG)" SIMULATE=1 elif [ "$WEEKDAY" = "${MEDIA_WEEKDAY[i]}" -o \ "${MEDIA_WEEKDAY[i]}" = "ANY" -o \ "$FORCEBUILD" = "$PRODUCT_NAME" ]; then echo "Building $PRODUCT_NAME media" unset SIMULATE elif [ "$MONTHDAY" = "${MEDIA_MONTHDAY[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-${MEDIA_MILESTONE[i]}-*.txt 2>/dev/null| sed "s/.*latest-is-${MEDIA_MILESTONE[i]}-\(.*\)\.txt/\1/"` if [ "$RELEASEPLATFORM" = "$PLATFORM" -a \ "$RELEASESUBPLATFORM" = "$SUBPLATFORM" ]; then RELEASETAG=${MEDIA_MILESTONE[i]}-$RELEASE else RELEASETAG=${MEDIA_MILESTONE[i]}-$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" "$VARIANT" ${l} $PRODUCT_NAME ${i} [ $? -eq 255 ] && break } 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