#!/bin/bash # Copyright 2014-2015 Holger Levsen # released under the GPLv=2 DEBUG=true . /srv/jenkins/bin/common-functions.sh common_init "$@" # common code defining db access . /srv/jenkins/bin/reproducible_common.sh cleanup_tmpdirs() { set +e cd $RSSH "sudo chflags -R noschg $TMPDIR" $RSSH "rm -r $TMPDIR" || true rm $TMPDIR -r $RSSH 'sudo rm -rf /usr/src' } create_results_dirs() { mkdir -p $BASE/freebsd/dbd } save_freebsd_results(){ local RUN=$1 echo "=============================================================================" echo "$(date -u) - Saving FreeBSD (branch $FREEBSD_TARGET at ${FREEBSD_VERSION}) build results for $RUN run." echo "=============================================================================" mkdir -p $TMPDIR/$RUN/ # copy results over DUMMY_DATE="$(date -u +'%Y-%m-%d')T00:00:00Z" $RSSH "sudo find $TMPDIR -newer $TMPDIR -exec touch -d '$DUMMY_DATE' {} \;" $RSSH "sudo find $TMPDIR -print0 | LC_ALL=C sort -z | sudo tar --null -T - --no-recursion -cJf $TMPDIR.tar.xz" $RSCP:$TMPDIR.tar.xz $TMPDIR/$RUN/$TARGET_NAME.tar.xz $RSSH "sudo chflags -R noschg $TMPDIR ; sudo rm -r $TMPDIR $TMPDIR.tar.xz ; mkdir $TMPDIR" } # # main # FREEBSD_TARGETS="master stable/10 release/10.2.0" # arrays to save results declare -A ALL_FILES declare -A GOOD_FILES declare -A GOOD_PERCENT declare -A FREEBSD declare -A FILES_HTML for FREEBSD_TARGET in ${FREEBSD_TARGETS} ;do set -e RSSH="ssh freebsd-jenkins.debian.net" RSCP="scp -r freebsd-jenkins.debian.net" TMPBUILDDIR=/usr/src $RSSH 'sudo rm -rf /usr/src ; sudo mkdir /usr/src ; sudo chown jenkins /usr/src' ### this is tmpfs on linux, we should move this to tmpfs on FreeBSD too TMPDIR=$($RSSH 'TMPDIR=/srv/reproducible-results mktemp -d') # used to compare results DATE=$(date -u +'%Y-%m-%d') START=$(date +'%s') trap cleanup_tmpdirs INT TERM EXIT echo "=============================================================================" echo "$(date -u) - FreeBSD host info" echo "=============================================================================" $RSSH freebsd-version echo "=============================================================================" echo "$(date -u) - Cloning FreeBSD git repository." echo "=============================================================================" $RSSH git clone --depth 1 --branch $FREEBSD_TARGET https://github.com/freebsd/freebsd.git $TMPBUILDDIR FREEBSD[$FREEBSD_TARGET]=$($RSSH "cd $TMPBUILDDIR ; git log -1") FREEBSD_VERSION=$($RSSH "cd $TMPBUILDDIR ; git describe --always") echo "This is FreeBSD branch $FREEBSD_TARGET at ${FREEBSD_VERSION}." echo $RSSH "cd $TMPBUILDDIR ; git log -1" TARGET_NAME=$(echo "freebsd_${FREEBSD_TARGET}_git${FREEBSD_VERSION}" | sed "s#/#-#g") echo "=============================================================================" echo "$(date -u) - Building FreeBSD (branch $FREEBSD_TARGET at ${FREEBSD_VERSION}) - first build run." echo "=============================================================================" export TZ="/usr/share/zoneinfo/Etc/GMT+12" export LANG="en_GB.UTF-8" NUM_CPU=4 # if someone could tell me how to determine this on FreeBSD, this would be neat # actually build everything set +e $RSSH "cd $TMPBUILDDIR ; TZ=$TZ LANG=$LANG sudo make -j $NUM_CPU buildworld" && \ $RSSH "cd $TMPBUILDDIR ; TZ=$TZ LANG=$LANG sudo make -j $NUM_CPU buildkernel" && \ $RSSH "cd $TMPBUILDDIR ; TZ=$TZ LANG=$LANG DESTDIR=$TMPDIR sudo make -j $NUM_CPU installworld" && \ $RSSH "cd $TMPBUILDDIR ; TZ=$TZ LANG=$LANG DESTDIR=$TMPDIR sudo make -j $NUM_CPU installkernel" && \ $RSSH "cd $TMPBUILDDIR ; TZ=$TZ LANG=$LANG DESTDIR=$TMPDIR sudo make -j $NUM_CPU distribution" && \ save_freebsd_results b1 || \ ( cleanup_tmpdirs ; echo "$(date -u ) - failed to build FreeBSD (branch $FREEBSD_TARGET at ${FREEBSD_VERSION}) in the first run, stopping" ; break ) set -e # set time forward 398 days #$RSSH "sudo service ntpd stop ; sudo date --set='+398 days' ; date" #echo "$(date) - system is running in the future now." echo "=============================================================================" echo "$(date -u) - Building FreeBSD (branch $FREEBSD_TARGET at ${FREEBSD_VERSION}) - 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="$PATH:/i/capture/the/path" ###umask 0002 # use allmost all cores for second build NEW_NUM_CPU=$(echo $NUM_CPU-1|bc) # actually build everything set +e $RSSH "cd $TMPBUILDDIR ; TZ=$TZ LANG=$LANG LC_ALL=$LC_ALL sudo make -j $NEW_NUM_CPU buildworld" $RSSH "cd $TMPBUILDDIR ; TZ=$TZ LANG=$LANG LC_ALL=$LC_ALL sudo make -j $NEW_NUM_CPU buildkernel" $RSSH "cd $TMPBUILDDIR ; TZ=$TZ LANG=$LANG LC_ALL=$LC_ALL DESTDIR=$TMPDIR sudo make -j $NEW_NUM_CPU installworld" $RSSH "cd $TMPBUILDDIR ; TZ=$TZ LANG=$LANG LC_ALL=$LC_ALL DESTDIR=$TMPDIR sudo make -j $NEW_NUM_CPU installkernel" $RSSH "cd $TMPBUILDDIR ; TZ=$TZ LANG=$LANG LC_ALL=$LC_ALL DESTDIR=$TMPDIR sudo make -j $NEW_NUM_CPU distribution" set -e # save results in b2 save_freebsd_results b2 # set time back to today #$RSSH "sudo ntpdate -b pool.ntp.org ; sudo service ntpd start ; sudo service ntpd status ; date" #echo "$(date) - system is running at the current date now." # 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 # run diffoscope on the results TIMEOUT="30m" DIFFOSCOPE="$(schroot --directory /tmp -c source:jenkins-reproducible-${DBDSUITE}-diffoscope diffoscope -- --version 2>&1)" echo "=============================================================================" echo "$(date -u) - Running $DIFFOSCOPE on FreeBSD (branch $FREEBSD_TARGET at ${FREEBSD_VERSION}) build results." echo "=============================================================================" FILES_HTML[$FREEBSD_TARGET]=$(mktemp --tmpdir=$TMPDIR) echo "