summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
Diffstat (limited to 'bin')
-rwxr-xr-xbin/reproducible_build_arch_pkg.sh143
1 files changed, 143 insertions, 0 deletions
diff --git a/bin/reproducible_build_arch_pkg.sh b/bin/reproducible_build_arch_pkg.sh
new file mode 100755
index 00000000..57cb4266
--- /dev/null
+++ b/bin/reproducible_build_arch_pkg.sh
@@ -0,0 +1,143 @@
+#!/bin/bash
+
+# Copyright 2015 Holger Levsen <holger@layer-acht.org>
+# released under the GPLv=2
+
+DEBUG=false
+. /srv/jenkins/bin/common-functions.sh
+common_init "$@"
+
+set -e
+
+cleanup_all() {
+ rm $TMPDIR -r
+ echo "$(date -u) - $TMPDIR deleted."
+}
+
+handle_remote_error() {
+ MESSAGE="${BUILD_URL}console got remote error $1"
+ echo "$(date -u ) - $MESSAGE" | tee -a /var/log/jenkins/reproducible-remote-error.log
+ echo "Sleeping 5m before aborting the job."
+ sleep 5m
+ exec /srv/jenkins/bin/abort.sh
+ exit 0
+}
+
+first_build() {
+ echo "============================================================================="
+ echo "Building ${SRCPACKAGE} for Archlinux on $(hostname -f) now."
+ echo "Date: $(date)"
+ echo "Date UTC: $(date -u)"
+ echo "============================================================================="
+ set -x
+ schroot --begin-session --session-name=$SRCPACKAGE -c jenkins-reproducible-arch
+ schroot --run-session -c $SRCPACKAGE --directory /tmp -- cp -r /var/abs/core/$PKG /tmp
+ schroot --run-session -c $SRCPACKAGE --directory /tmp/$PKG -- makepkg --skippgpcheck
+ schroot --end-session -c $SRCPACKAGE
+ if ! "$DEBUG" ; then set +x ; fi
+}
+
+second_build() {
+ echo "============================================================================="
+ echo "Re-Building ${SRCPACKAGE} for Archlinux on $(hostname -f) now."
+ echo "Date: $(date)"
+ echo "Date UTC: $(date -u)"
+ echo "============================================================================="
+ set -x
+ schroot --begin-session --session-name=$SRCPACKAGE -c jenkins-reproducible-arch
+ schroot --run-session -c $SRCPACKAGE --directory /tmp -- cp -r /var/abs/core/$PKG /tmp
+ schroot --run-session -c $SRCPACKAGE --directory /tmp/$PKG -- makepkg --skippgpcheck
+ schroot --end-session -c $SRCPACKAGE
+ if ! "$DEBUG" ; then set +x ; fi
+}
+
+remote_build() {
+ local BUILDNR=$1
+ local NODE=profitbricks-build3-amd64.debian.net
+ local PORT=22
+ set +e
+ ssh -p $PORT $NODE /bin/true
+ RESULT=$?
+ # abort job if host is down
+ if [ $RESULT -ne 0 ] ; then
+ SLEEPTIME=$(echo "$BUILDNR*$BUILDNR*5"|bc)
+ echo "$(date -u) - $NODE seems to be down, sleeping ${SLEEPTIME}min before aborting this job."
+ sleep ${SLEEPTIME}m
+ exec /srv/jenkins/bin/abort.sh
+ fi
+ ssh -p $PORT $NODE /srv/jenkins/bin/reproducible_build_arch_pkg.sh $BUILDNR ${SRCPACKAGE} ${TMPDIR}
+ RESULT=$?
+ if [ $RESULT -ne 0 ] ; then
+ handle_remote_error "with exit code $RESULT from $NODE for build #$BUILDNR for ${SRCPACKAGE}"
+ fi
+ rsync -e "ssh -p $PORT" -r $NODE:$TMPDIR/b$BUILDNR $TMPDIR/
+ RESULT=$?
+ if [ $RESULT -ne 0 ] ; then
+ echo "$(date -u ) - rsync from $NODE failed, sleeping 2m before re-trying..."
+ sleep 2m
+ rsync -e "ssh -p $PORT" -r $NODE:$TMPDIR/b$BUILDNR $TMPDIR/
+ RESULT=$?
+ if [ $RESULT -ne 0 ] ; then
+ handle_remote_error "when rsyncing remote build #$BUILDNR results from $NODE"
+ fi
+ fi
+ ls -R $TMPDIR
+ ssh -p $PORT $NODE "rm -r $TMPDIR"
+ set -e
+}
+
+build_rebuild() {
+ mkdir b1 b2
+ remote_build 1
+ remote_build 2
+}
+
+#
+# below is what controls the world
+#
+
+TMPDIR=$(mktemp --tmpdir=/srv/reproducible-results -d) # where everything actually happens
+trap cleanup_all INT TERM EXIT
+cd $TMPDIR
+
+DATE=$(date -u +'%Y-%m-%d %H:%M')
+START=$(date +'%s')
+RBUILDLOG=$(mktemp --tmpdir=$TMPDIR)
+BUILDER="${JOB_NAME#reproducible_builder_}/${BUILD_ID}"
+
+#
+# determine mode
+#
+if [ "$1" = "" ] ; then
+ echo "Error, needs at least one parameter."
+ exit 1
+elif [ "$1" = "1" ] || [ "$1" = "2" ] ; then
+ MODE="$1"
+ SRCPACKAGE="$2"
+ TMPDIR="$3"
+ [ -d $TMPDIR ] || mkdir -p $TMPDIR
+ cd $TMPDIR
+ mkdir b$MODE
+ if [ "$MODE" = "1" ] ; then
+ first_build
+ else
+ second_build
+ fi
+ mv -v /tmp/$PKG $TMPDIR/b$mode
+ echo "$(date -u) - build #$MODE for $SRCPACKAGE on $HOSTNAME done."
+ exit 0
+elif [ "$2" != "" ] ; then
+ MODE="master"
+fi
+
+#
+# main - only used in master-mode
+#
+SRCPACKAGE=sudo
+build_rebuild
+#call_diffoscope
+
+cd ..
+cleanup_all
+trap - INT TERM EXIT
+