attempt_update () {
rsync -a build@jack:build-config/ /etc/
- chown -R root: /etc/schroot/chroot.d/
+ install -m 755 -o root -g root /etc/schroot/local-chroot.d/* /etc/schroot/chroot.d/
rsync -a --delete build@jack:chroots/ /chroot/rebuildd/chroots/
- apt-get update
+ apt-get update > /dev/null 2>&1
MY_MD5=$(md5sum $0 | awk '{print $1}')
JACK_MD5=$(ssh build@jack md5sum $JACK_SCRIPT | awk '{print $1}')
fi
echo 1 > /proc/sys/abi/swp || true
+ echo 1 > /proc/sys/abi/cp15_barrier || true
-# PBUILD_TAR=${PBUILD_CACHE}/unstable-${ARCH}.tgz
-# pbuilder build \
-# --buildresult /chroot/rebuildd/out-$PKG \
-# --bindmounts "/sys /proc /dev /dev/pts" \
-# --basetgz ${PBUILD_TAR} \
-# --timeout 4h \
-# *.dsc
-
sudo -u sbuild sbuild \
--host=$ARCH --build=$ARCH -A -d sid \
--apt-update --apt-distupgrade -n \
return 0
}
+NO_JOBS_SLOW_SLEEP=20
+SLEEP_NO_JOB_DEFAULT=10
+SLEEP_NO_JOB_SLOW=600
+SLEEP_TIME=$SLEEP_NO_JOB_DEFAULT
+
+START_TIME=$(date +'%s')
+
+# How many times in a row have we asked for a job and not got
+# anything? If this gets high, back off
+NO_JOBS_COUNT=0
+
while true; do
if [ -f /chroot/rebuildd/EXIT ]; then
echo "Found EXIT file, stopping here"
# Should we update ourselves?
attempt_update
+ SCRIPT_TIME=$(stat -c %Y $0)
+ if [ $SCRIPT_TIME -gt $START_TIME ]; then
+ echo "$0 updated under me, need to restart"
+ exec $0 $@
+ fi
+
# Ask jack for a package to build
BNUM_PKG_VER_ARCH=$(ssh build@jack ./bin/get_package $HOSTNAME)
BNUM=$(echo $BNUM_PKG_VER_ARCH | cut -d " " -f1)
PKG_VER_ARCH=$(echo $BNUM_PKG_VER_ARCH | cut -d " " -f2)
+
+ # If we didn't get a job, sleep for a while
if [ "$PKG_VER_ARCH" = "NOPACKAGE" ]; then
- echo "Nothing to do, wait..."
- sleep 10
+ DATE=$(date)
+ NO_JOBS_COUNT=$(($NO_JOBS_COUNT + 1))
+ echo "$DATE: Nothing to do ($NO_JOBS_COUNT times), wait..."
+ if [ $NO_JOBS_COUNT -eq $NO_JOBS_SLOW_SLEEP ]; then
+ echo "$DATE: No work for $NO_JOBS_SLOW_SLEEP, slowing down"
+ SLEEP_TIME=$SLEEP_NO_JOB_SLOW # Back off
+ fi
+ sleep $SLEEP_TIME
continue
+ else
+ NO_JOBS_COUNT=0
+ SLEEP_TIME=$SLEEP_NO_JOB_DEFAULT
fi
PKG=$(echo $PKG_VER_ARCH | cut -d _ -f1)
DATE=$(date)
echo "$DATE: starting build $BNUM: ${PKG} version ${VER} for ${ARCH}"
- rm -rf build-$PKG out-$PKG
- mkdir build-$PKG out-$PKG
- cd build-$PKG
+ BUILDDIR="build-$PKG-$ARCH"
+ OUTDIR="out-$PKG-$ARCH"
+ rm -rf $BUILDDIR $OUTDIR
+ mkdir $BUILDDIR $OUTDIR
+ chown -R sbuild: $BUILDDIR $OUTDIR
+ cd $BUILDDIR
(grab_and_build $BNUM $PKG $VER $ARCH >${LOGDIR}/${PKG_VER_ARCH}.log 2>&1)
RESULT=$(tail -10 ${LOGDIR}/${PKG_VER_ARCH}.log | awk '/^Status:/ {print $2}')
DATE=$(date)
echo " $DATE: returned $RESULT"
cd ..
- rm -rf build-$PKG
+ rm -rf $BUILDDIR
case $RESULT in
successful)
rsync ${LOGDIR}/${PKG_VER_ARCH}.log build@jack:logs/${ARCH}/PASS/${PKG_VER_ARCH}.log
;;
esac
rm ${LOGDIR}/${PKG_VER_ARCH}.log
- rsync -a /chroot/rebuildd/out-$PKG/ build@jack:out/
- rm -rf /chroot/rebuildd/out-$PKG
+ rsync -a /chroot/rebuildd/$OUTDIR/ build@jack:out/
+ rm -rf /chroot/rebuildd/$OUTDIR/
ssh build@jack ./bin/report_build_result $HOSTNAME $BNUM $PKG_VER_ARCH $RESULT
BUILDS_DONE=$(($BUILDS_DONE + 1))
if [ $MAX_BUILDS -gt 0 ] && [ $BUILDS_DONE -ge $MAX_BUILDS ]; then