blob: 391e1427dd1dc420bd1cf7bc410536b9037e94ec [file] [log] [blame]
#!/bin/bash
# Run this script manually from the zones machine ala:
#
# sudo -u updatesd ./update-rules 3.2
#
# You will have wanted to already validate that the files in the branch have
# no lint problems, etc. This script simply takes the branch data and creates
# the update for you.
#
# WARNING: this is 3.1 and 3.2 only!
shopt -s nullglob
if [ "$USER" != "updatesd" ]; then
echo "Need to be updatesd!" >&2
exit 2
fi
# sudo doesn't necessarily do this for us ...
HOME=`awk -F: '/^updatesd:/ { print $6 }' /etc/passwd`
export HOME
VERS=$1
if [ -z "$VERS" ]; then
echo "Usage: $0 <VERSION (3.1, 3.2, 3.3, ...)>" >&2
exit 1
fi
DIR=/tmp/upd-$$
rm -rf $DIR || exit 1
if [ "$VERS" = "3.1" -o "$VERS" = "3.2" ] ; then
SOURCE=svn.apache.org/repos/asf/spamassassin/branches/rules/$VERS
else
echo "ERROR: this script produces broken updates for 3.3; see bug 6311. exiting"
exit 99
# SOURCE=svn.apache.org/repos/asf/spamassassin/branches/$VERS/rules
fi
tagstamp=`date "+%Y%m%d%H%M%S"`
DEST=svn.apache.org/repos/asf/spamassassin/tags/sa-update_${VERS}_${tagstamp}
svn cp --username jm --non-interactive -m "tagging latest update release for $VERS" https://$SOURCE https://$DEST || exit 1
svn -q co https://$DEST $DIR || exit 1
#V=`svn info $DIR | awk '/^Last Changed Rev:/ { print $4 }'`
V=`svnversion $DIR`
cd $DIR
tar cf /tmp/$V.tar *.pre *.cf || exit 1
cd /tmp
rm -rf $DIR
gzip -9 $V.tar || exit 1
cd /var/www/buildbot.spamassassin.org/updatestage
rm -f $V.tar.gz*
mv /tmp/$V.tar.gz .
/local/gnupg-1.4.2/bin/gpg --batch --homedir /home/updatesd/key -bas $V.tar.gz
shasum -a 1 $V.tar.gz > $V.tar.gz.sha1
shasum -a 256 $V.tar.gz > $V.tar.gz.sha256
shasum -a 512 $V.tar.gz > $V.tar.gz.sha512
chmod 0444 $V.tar.*
if [ $VERS = 3.1 ]; then
echo '0.1.3 A 127.0.0.1' > /var/named/updates.spamassassin.org.d/3.1.0
else
cat /dev/null > /var/named/updates.spamassassin.org.d/${VERS}.0
fi
REVVERS=`echo $VERS | awk -F. '{print $2 "." $1}'`
echo '*.'$REVVERS' TXT "'$V'"' >> /var/named/updates.spamassassin.org.d/${VERS}.0
# use the at queue to give the mirrors time to get the new update so that
# sa-update clients don't get a 404 from all of the mirrors
while true;
do
JOBID=`at -q n -l | perl -e 'readline(STDIN) =~ /^(\d+\..)/; print $1'`
if [ "$JOBID" != '' ]; then
echo "Removing job from at queue: $JOBID"
at -r $JOBID
else
break
fi
done
echo '/home/updatesd/svn/spamassassin/build/mkupdates/tick_zone_serial' | at -q n now + 15 minutes
if [ "`at -q n -l`" != '' ]; then
echo 'DNS zone reload scheduled'
else
echo 'FAILED to schedule reload of DNS zone'
fi