X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lbuild-nightly.sh;h=f7144e52fb73d8c234954d8838279967804aeeb5;hb=ae04d055cb95f6a059979e2ea832eb85ef84b9a6;hp=8f59ca0fc0eac17cb243b50670671da74ae11802;hpb=c8b5e59557c902508c3e4a2db69702fe7d313b39;p=build.git diff --git a/lbuild-nightly.sh b/lbuild-nightly.sh index 8f59ca0f..f7144e52 100755 --- a/lbuild-nightly.sh +++ b/lbuild-nightly.sh @@ -11,10 +11,10 @@ COMMAND=$(basename $0) export PATH=$PATH:/bin:/sbin # default values, tunable with command-line options -DEFAULT_FCDISTRO=f29 +DEFAULT_FCDISTRO=f39 DEFAULT_PLDISTRO=lxc DEFAULT_PERSONALITY=linux64 -DEFAULT_MAILDEST="build at onelab.eu" +DEFAULT_MAILDEST="thierry.parmentelat at inria.fr" DEFAULT_BUILD_SCM_URL="git://git.onelab.eu/build" DEFAULT_BASE="@DATE@--@PLDISTRO@-@FCDISTRO@-@PERSONALITY@" @@ -60,10 +60,17 @@ function logfile () { function guest_ipv4() { lxc=$1; shift - mac=$(virsh -c lxc:/// domiflist $lxc | egrep 'network|bridge' | awk '{print $5;}') - # sanity check - [ -z "$mac" ] && return 0 - arp -en | grep "$mac" | awk '{print $1;}' + mac=$(virsh -c lxc:/// domiflist $lxc | grep -E 'network|bridge' | awk '{print $5;}') + [ -z "$mac" ] && { echo 1>&2 guest_ipv4 cannot find mac; return 1; } + ip=$(arp -en | grep "$mac" | awk '{print $1;}') + # if not known: run a ping and try again + if [ -z $ip ]; then + ping -c1 -w1 -W1 $lxc >& /dev/null + ping -c1 -w1 -W1 $lxc.pl.sophia.inria.fr >& /dev/null + ip=$(arp -en | grep "$mac" | awk '{print $1;}') + fi + [ -z "$ip" ] && { echo 1>&2 guest_ipv4 cannot find ip; return 1; } + echo $ip } # wrap a quick summary of suspicious stuff @@ -135,17 +142,24 @@ EOF ### we might build on a box other than the actual web server # utilities for handling the pushed material (rpms, logfiles, ...) -function webpublish_misses_dir () { ssh root@${WEBHOST} "bash -c \"test \! -d $1\"" ; } -function webpublish () { ssh root@${WEBHOST} "$@" ; } -function webpublish_cp_local_to_remote () { scp $1 root@${WEBHOST}:$2 ; } -function webpublish_cp_stdin_to_file () { ssh root@${WEBHOST} cat \> $1; } -function webpublish_append_stdin_to_file () { ssh root@${WEBHOST} cat \>\> $1; } -# provide remote dir as first argument, so any number of local files can be passed next -function webpublish_rsync_dir () { rsync --archive --delete $VERBOSE $2 root@${WEBHOST}:$1 ; } -function webpublish_rsync_files () { - remote="$1"; shift - rsync --archive $VERBOSE "$@" root@${WEBHOST}:"$remote" ; +function webpublish_misses_dir () { + ssh root@${WEBHOST} "bash -c \"test \! -d $1\"" +} +function webpublish () { + ssh root@${WEBHOST} "$@" +} +function webpublish_cp_stdin_to_file () { + ssh root@${WEBHOST} cat \> $1 \; chmod g+r,o+r $1 +} +function webpublish_append_stdin_to_file () { + ssh root@${WEBHOST} cat \>\> $1 \; chmod g+r,o+r $1 } +# provide remote dir as first argument, +# so any number of local files can be passed next +function webpublish_rsync () { + local remote="$1"; shift + rsync --archive --delete $VERBOSE "$@" root@${WEBHOST}:"$remote" + } function pretty_duration () { total_seconds=$1; shift @@ -169,7 +183,7 @@ function failure() { WEBLOG=/tmp/lbuild-early-$(date +%Y-%m-%d).log.txt fi webpublish mkdir -p $WEBBASE ||: - webpublish_cp_local_to_remote $LOG $WEBLOG ||: + webpublish_rsync $WEBLOG $LOG ||: summary $LOG | webpublish_append_stdin_to_file $WEBLOG ||: (echo -n "============================== $COMMAND: failure at " ; date ; \ webpublish tail --lines=1000 $WEBLOG) | \ @@ -197,7 +211,7 @@ function success () { WEBLOG=/tmp/lbuild-early-$(date +%Y-%m-%d).log.txt fi webpublish mkdir -p $WEBBASE - webpublish_cp_local_to_remote $LOG $WEBLOG + webpublish_rsync $WEBLOG $LOG summary $LOG | webpublish_append_stdin_to_file $WEBLOG if [ -n "$DO_TEST" ] ; then short_message="PASS" @@ -326,7 +340,8 @@ function run_log () { ssh -n ${testmaster_ssh} rm -rf ${testdir} ${testdir}.git # check it out in the build - run_in_build_guest $BASE make -C /build tests-module ${MAKEVARS[@]} + # as well as build that might not be here esp. in a short build + run_in_build_guest $BASE make -C /build tests-module build-module ${MAKEVARS[@]} # push it onto the testmaster - just the 'system' subdir is enough rsync --verbose --archive $(rootdir $BASE)/build/MODULES/tests/system/ ${testmaster_ssh}:${BASE} @@ -356,7 +371,7 @@ function run_log () { rsync --verbose --archive ${testmaster_ssh}:$BASE/logs/ $(rootdir $BASE)/build/testlogs # push them to the build web chmod -R a+r $(rootdir $BASE)/build/testlogs/ - webpublish_rsync_dir $WEBPATH/$BASE/testlogs/ $(rootdir $BASE)/build/testlogs/ + webpublish_rsync $WEBPATH/$BASE/testlogs/ $(rootdir $BASE)/build/testlogs/ echo "============================== END $COMMAND:run_log on $(date)" @@ -764,23 +779,26 @@ function main () { # publish to the web so run_log can find them set +e trap - ERR INT - webpublish rm -rf $WEBPATH/$BASE +# webpublish rm -rf $WEBPATH/$BASE # guess if we've been doing any debian-related build if [ ! -f $(rootdir $BASE)/etc/debian_version ] ; then webpublish mkdir -p $WEBPATH/$BASE/{RPMS,SRPMS} - webpublish_rsync_dir $WEBPATH/$BASE/RPMS/ $(rootdir $BASE)/build/RPMS/ - [[ -n "$PUBLISH_SRPMS" ]] && webpublish_rsync_dir $WEBPATH/$BASE/SRPMS/ $(rootdir $BASE)/build/SRPMS/ + # after moving to f29, we see this dir created as 700 + # as remote umask is 077 + webpublish chmod 755 $WEBPATH/$BASE + webpublish_rsync $WEBPATH/$BASE/RPMS/ $(rootdir $BASE)/build/RPMS/ + [[ -n "$PUBLISH_SRPMS" ]] && webpublish_rsync $WEBPATH/$BASE/SRPMS/ $(rootdir $BASE)/build/SRPMS/ else # run scanpackages so we can use apt-get on this # (not needed on fedora b/c this is done by the regular build already) run_in_build_guest $BASE "(cd /build ; dpkg-scanpackages DEBIAN/ | gzip -9c > Packages.gz)" webpublish mkdir -p $WEBPATH/$BASE/DEBIAN - webpublish_rsync_files $WEBPATH/$BASE/DEBIAN/ $(rootdir $BASE)/build/DEBIAN/*.deb - webpublish_rsync_files $WEBPATH/$BASE/ $(rootdir $BASE)/build/Packages.gz + webpublish_rsync $WEBPATH/$BASE/DEBIAN/ $(rootdir $BASE)/build/DEBIAN/*.deb + webpublish_rsync $WEBPATH/$BASE/ $(rootdir $BASE)/build/Packages.gz fi # publish myplc-release if this exists release=$(rootdir $BASE)/build/myplc-release - [ -f $release ] && webpublish_rsync_files $WEBPATH/$BASE $release + [ -f $release ] && webpublish_rsync $WEBPATH/$BASE $release set -e trap failure ERR INT