X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lbuild-nightly.sh;h=9991abe2ff2145c4fd29c7d01534197b521aa663;hb=refs%2Fheads%2Fmaster;hp=8f59ca0fc0eac17cb243b50670671da74ae11802;hpb=c8b5e59557c902508c3e4a2db69702fe7d313b39;p=build.git diff --git a/lbuild-nightly.sh b/lbuild-nightly.sh index 8f59ca0f..9991abe2 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@" @@ -57,13 +57,38 @@ function logfile () { # 1st version was relying on virsh net-dhcp-leases # however this was too fragile, would not work for fedora14 containers # WARNING: this code is duplicated in lbuild-initvm.sh +function guest_ipv4_old() { + lxc=$1; shift + + mac=$(virsh -c lxc:/// domiflist $lxc | grep -E 'network|bridge' | awk '{print $5;}') + [ -z "$mac" ] && { echo 1>&2 guest_ipv4_old 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_old cannot find ip; return 1; } + echo $ip +} + 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;}' + # this gives us the libvirt_lxc pid for the container + local lxc_pid=$(virsh -c lxc:/// dominfo $lxc | grep '^Id:' | awk '{print $2;}' | sed -e "s|-||g") + [[ -z "$lxc_pid" ]] && { echo 1>&2 guest_ipv4 cannot find lxc pid; return 1; } + # but we need the systemd (pid=1) instance for the container + local systemd_pid=$(pgrep -P $lxc_pid systemd) + [[ -z "$systemd_pid" ]] && { echo 1>&2 guest_ipv4 cannot systemd pid; return 1; } + # from there we can inspect the network interfaces + local domip=$(nsenter -t $systemd_pid -n ip -br addr show eth0 \ + | awk '{print $3}' \ + | cut -d/ -f1 \ + ) + [ -z "$domip" ] && { echo 1>&2 guest_ipv4 cannot find ip; return 1; } + echo $domip } # wrap a quick summary of suspicious stuff @@ -135,17 +160,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 +201,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 +229,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 +358,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 +389,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 +797,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