Index: portbuild =================================================================== --- portbuild (revision 248467) +++ portbuild (working copy) @@ -44,6 +44,28 @@ fi } +log_start() +{ + local logfile=$1 + mkdir -p ${logfile%/*} + exec 3>&1 4>&2 + + [ ! -e ${logfile}.pipe ] && mkfifo ${logfile}.pipe + tee ${logfile} < ${logfile}.pipe >&3 & + export tpid=$! + exec > ${logfile}.pipe 2>&1 + rm -f ${logfile}.pipe +} + +log_stop() +{ + if [ -n "${tpid}" ]; then + exec 1>&3 3>&- 2>&4 4>&- + wait $tpid + unset tpid + fi +} + bailout() { jname=$1 @@ -55,6 +77,7 @@ echo -n "$pkgname failed unexpectedly on $(hostname) at " date + log_stop exit $error } @@ -147,6 +170,7 @@ pkgname=$(basename $7 ${pkg_sufx}) dirname=$8 shift 2 +log_start ${chroot}/tmp/${pkgname}.log echo $pkgname echo $dirname @@ -226,8 +250,8 @@ cd ${chroot}/tmp || bailout ${jname} ${clean} 255 ${pkgname} mkdir -p depends distfiles packages || bailout ${jname} ${clean} 255 ${pkgname} -echo "building ${pkgname} on $(hostname)" | tee ${chroot}/tmp/${pkgname}.log -echo "in directory ${chroot}" | tee -a ${chroot}/tmp/${pkgname}.log +echo "building ${pkgname} on $(hostname)" +echo "in directory ${chroot}" # intentionally set up ${PORTSDIR} with symlink to catch broken ports mkdir -p ${chroot}/a/ports @@ -317,7 +341,7 @@ # Test for copy failure and bail # XXX MCL more hard-coding if [ ! -f ${chroot}/tmp/depends/$1 ]; then - echo "ERROR: Couldn't copy $1" | tee -a ${chroot}/tmp/${pkgname}.log + echo "ERROR: Couldn't copy $1" bailout ${jname} ${clean} 255 ${pkgname} fi fi @@ -329,7 +353,7 @@ # phase 0, compile pnohang if necessary if [ ! -f /tmp/${buildid}/sources/pnohang ]; then cp -p /tmp/${buildid}/sources/pnohang.c ${chroot} - jexec -U root ${jname} /usr/bin/gcc -o /pnohang -Wall /pnohang.c 2>&1 | tee -a ${chroot}/tmp/${pkgname}.log + jexec -U root ${jname} /usr/bin/gcc -o /pnohang -Wall /pnohang.c 2>&1 if [ $? -ne 0 ]; then error=255 else @@ -348,7 +372,7 @@ jail -r ${jname} jail -c persist name=${jname} ip4=inherit ip6=inherit path=${chroot} \ host.hostname=${jname} allow.sysvipc allow.socket_af allow.raw_sockets allow.chflags - jexec -U root ${jname} /buildscript ${dirname} 1 "$ED" "$PD" "$FD" "$BD" "$RD" "$PKGD" 2>&1 | tee -a ${chroot}/tmp/${pkgname}.log + jexec -U root ${jname} /buildscript ${dirname} 1 "$ED" "$PD" "$FD" "$BD" "$RD" "$PKGD" 2>&1 jail -r ${jname} jail -c persist name=${jname} ip4.addr=127.0.0.1 ip6=disable path=${chroot} \ host.hostname=${jname} allow.sysvipc allow.socket_af allow.raw_sockets allow.chflags @@ -364,11 +388,8 @@ # phase 2, make package ln -sf ${pkgname}.log2 ${chroot}/tmp/make.log - jexec -U root ${jname} /usr/bin/nice -n ${nice} /buildscript ${dirname} 2 "$ED" "$PD" "$FD" "$BD" "$RD" "$PKGD" > ${chroot}/tmp/${pkgname}.log2 2>&1 + jexec -U root ${jname} /usr/bin/nice -n ${nice} /buildscript ${dirname} 2 "$ED" "$PD" "$FD" "$BD" "$RD" "$PKGD" - grep pnohang ${chroot}/tmp/${pkgname}.log2 - cat ${chroot}/tmp/${pkgname}.log2 >> ${chroot}/tmp/${pkgname}.log - rm ${chroot}/tmp/${pkgname}.log2 error=$(cat ${chroot}/tmp/status) fi @@ -378,4 +399,5 @@ # Record build completion time for ganglia echo "${arch} ${branch} ${buildid}" > ${buildroot}/stamp/${pkgname} +log_stop exit $error