From 611630dba33c82665a4ad798514fb11249f191d5 Mon Sep 17 00:00:00 2001 From: Holger Levsen Date: Thu, 16 Jul 2015 13:46:39 +0200 Subject: reproducible freebsd: start hacking on the script, phase 1, testing with remote ssh calls --- bin/reproducible_freebsd.sh | 211 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100755 bin/reproducible_freebsd.sh (limited to 'bin') diff --git a/bin/reproducible_freebsd.sh b/bin/reproducible_freebsd.sh new file mode 100755 index 00000000..d5a8fd82 --- /dev/null +++ b/bin/reproducible_freebsd.sh @@ -0,0 +1,211 @@ +#!/bin/bash + +# Copyright 2014-2015 Holger Levsen +# © 2015 Mattia Rizzolo +# released under the GPLv=2 + +DEBUG=false +. /srv/jenkins/bin/common-functions.sh +common_init "$@" + +# common code defining db access +. /srv/jenkins/bin/reproducible_common.sh + +set -e + +# build for these architectures +MACHINES="sparc64 amd64" + +cleanup_tmpdirs() { + cd + rm -r $TMPDIR + rm -r $TMPBUILDDIR +} + +create_results_dirs() { + mkdir -p $BASE/freebsd/dbd +} + +save_freebsd_results(){ + local RUN=$1 + local MACHINE=$2 + mkdir -p $TMPDIR/$RUN/${MACHINE} + cp -pr obj/releasedir/${MACHINE} $TMPDIR/$RUN/ + find $TMPDIR/$RUN/ -name MD5 -o -name SHA512 -exec rm {} \; +} + +# +# main +# +RSSH="ssh freebsd-jenkins.debian.net" +TMPBUILDDIR=$($RSSH mktemp --tmpdir=/srv/workspace/chroots/ -d -t freebsd-XXXXXXXX) # used to build on tmpfs +TMPDIR=$($RSSH mktemp --tmpdir=/srv/reproducible-results -d) # accessable in schroots, used to compare results +DATE=$(date -u +'%Y-%m-%d') +START=$(date +'%s') +trap cleanup_tmpdirs INT TERM EXIT + + +echo "=============================================================================" +echo "$(date -u) - Cloning the freebsd git repository (which is autosynced with their CVS repository)" +echo "=============================================================================" +$RSSH git clone https://github.com/freebsd/freebsd.git $TMPBUILDDIR/freebsd +FREEBSD="$($RSSH 'cd $TMPBUILDDIR/freebsd ; git log -1')" +FREEBSD_VERSION=$($RSSH 'cd $TMPBUILDDIR/freebsd ; git describe --always') +echo "This is freebsd $FREEBSD_VERSION." +echo +$RSSH 'cd $TMPBUILDDIR/freebsd ; git log -1' + + +echo "so far so good, to be continued..." +echo +exit 1 + +echo "=============================================================================" +echo "$(date -u) - Building freebsd ${FREEBSD_VERSION} - first build run." +echo "=============================================================================" +export TZ="/usr/share/zoneinfo/Etc/GMT+12" +# actually build everything +for MACHINE in $MACHINES ; do + ionice -c 3 nice \ + ./build.sh -j $NUM_CPU -U -u -m ${MACHINE} release + # save results in b1 + save_freebsd_results b1 ${MACHINE} + # cleanup and explicitly delete old tooldir to force re-creation for the next $MACHINE type + ./build.sh -U -m ${MACHINE} cleandir + rm obj/tooldir.* -rf + echo "${MACHINE} done, first time." +done + +echo "=============================================================================" +echo "$(date -u) - Building freebsd ${FREEBSD_VERSION} - cleaning up between builds." +echo "=============================================================================" +rm obj/releasedir -r +rm obj/destdir.* -r +# we keep the toolchain(s) + +echo "=============================================================================" +echo "$(date -u) - Building freebsd - second build run." +echo "=============================================================================" +export TZ="/usr/share/zoneinfo/Etc/GMT-14" +export LANG="fr_CH.UTF-8" +export LC_ALL="fr_CH.UTF-8" +export PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" +export CAPTURE_ENVIRONMENT="I capture the environment" +umask 0002 +# use allmost all cores for second build +NEW_NUM_CPU=$(echo $NUM_CPU-1|bc) +for MACHINE in $MACHINES ; do + ionice -c 3 nice \ + linux64 --uname-2.6 \ + ./build.sh -j $NEW_NUM_CPU -U -u -m ${MACHINE} release + # save results in b2 + save_freebsd_results b2 ${MACHINE} + # cleanup and explicitly delete old tooldir to force re-creation for the next $MACHINE type + ./build.sh -U -m ${MACHINE} cleandir + rm obj/tooldir.* -r + echo "${MACHINE} done, second time." +done + +# reset environment to default values again +export LANG="en_GB.UTF-8" +unset LC_ALL +export TZ="/usr/share/zoneinfo/UTC" +export PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:" +umask 0022 + +# clean up builddir to save space on tmpfs +rm -r $TMPBUILDDIR/freebsd + +# run debbindiff on the results +TIMEOUT="30m" +DBDSUITE="unstable" +DBDVERSION="$(schroot --directory /tmp -c source:jenkins-reproducible-${DBDSUITE}-debbindiff debbindiff -- --version 2>&1)" +echo "=============================================================================" +echo "$(date -u) - Running $DBDVERSION on freebsd..." +echo "=============================================================================" +FILES_HTML=$(mktemp --tmpdir=$TMPDIR) +echo "
    " > $FILES_HTML +GOOD_FILES=0 +ALL_FILES=0 +SIZE="" +create_results_dirs +cd $TMPDIR/b1 +tree . +for i in * ; do + cd $i + echo " " >> $FILES_HTML + for j in $(find * -type f |sort -u ) ; do + let ALL_FILES+=1 + call_debbindiff $i $j + get_filesize $j + if [ -f $TMPDIR/$i/$j.html ] ; then + mkdir -p $BASE/freebsd/dbd/$i/$(dirname $j) + mv $TMPDIR/$i/$j.html $BASE/freebsd/dbd/$i/$j.html + echo " " >> $FILES_HTML + else + SHASUM=$(sha256sum $j|cut -d " " -f1) + echo " " >> $FILES_HTML + let GOOD_FILES+=1 + rm -f $BASE/freebsd/dbd/$i/$j.html # cleanup from previous (unreproducible) tests - if needed + fi + done + cd .. + echo "
    Release files for $i
    \"unreproducible $j ($SIZE) is unreproducible.
    \"reproducible $j ($SHASUM, $SIZE) is reproducible.
    " >> $FILES_HTML +done +GOOD_PERCENT=$(echo "scale=1 ; ($GOOD_FILES*100/$ALL_FILES)" | bc) +# are we there yet? +if [ "$GOOD_PERCENT" = "100.0" ] ; then + MAGIC_SIGN="!" +else + MAGIC_SIGN="?" +fi + +# +# finally create the webpage +# +cd $TMPDIR ; mkdir freebsd +PAGE=freebsd/freebsd.html +cat > $PAGE <<- EOF + + + + + + Reproducible FreeBSD $MAGIC_SIGN + + + + +
    +
    +EOF +write_page_intro FreeBSD +write_page "

    $GOOD_FILES ($GOOD_PERCENT%) out of $ALL_FILES built freebsd files were reproducible in our test setup" +if [ "$GOOD_PERCENT" = "100.0" ] ; then + write_page "!" +else + write_page "." +fi +write_page " These tests were last run on $DATE for version ${FREEBSD_VERSION} using ${DBDVERSION}.

    " +write_explaination_table FreeBSD +cat $FILES_HTML >> $PAGE +write_page "

    "
    +echo -n "$FREEBSD" >> $PAGE
    +write_page "     

    " +write_page "
    " +write_page_footer FreeBSD +publish_page +rm -f $FILES_HTML + +# the end +calculate_build_duration +print_out_duration +irc_message "$REPRODUCIBLE_URL/freebsd/ has been updated. ($GOOD_PERCENT% reproducible)" +echo "=============================================================================" + +# remove everything, we don't need it anymore... +cleanup_tmpdirs +trap - INT TERM EXIT -- cgit v1.2.3-54-g00ecf