summaryrefslogtreecommitdiffstats
path: root/etc/sbuild-debian-developer-setup-update-all
diff options
context:
space:
mode:
Diffstat (limited to 'etc/sbuild-debian-developer-setup-update-all')
-rwxr-xr-xetc/sbuild-debian-developer-setup-update-all106
1 files changed, 106 insertions, 0 deletions
diff --git a/etc/sbuild-debian-developer-setup-update-all b/etc/sbuild-debian-developer-setup-update-all
new file mode 100755
index 0000000..9605e45
--- /dev/null
+++ b/etc/sbuild-debian-developer-setup-update-all
@@ -0,0 +1,106 @@
+#!/bin/sh
+# Example script for automatically updating sbuild chroots
+#
+# Simply create a crontab /etc/cron.d/sbuild-update-all and specify the
+# schedule that you want to use. The behaviour of this script can be influenced
+# by the following evironment variables:
+#
+# PATTERN glob pattern to match the chroot config name against, in
+# directory /etc/schroot/chroot.d/.
+#
+# Default: *-sbuild
+#
+# UPDATEARGS The arguments with which sbuild-update will be invoked.
+#
+# Default: --update --dist-upgrade --autoclean --autoremove
+#
+# LOGFILE Log file to write to. These files are not rotated, you must set
+# this up yourself. See logrotate(8)
+#
+# Default: /var/log/sbuild-update-all.log
+#
+# This script will refuse to run if another instance of it is running. In fact,
+# it will refuse to run if there is an active chroot session (regardless of
+# whether it is related to the matched patterns or not). Care for this must be
+# taken when scheduling cron jobs, as crontabs are processed sequentially (with
+# regards to variable assignment), but jobs are executed in parallel.
+#
+# Examples
+# ========
+#
+# 1. Update all sbuild chroots four times a day (at 00:15/06:15/12:15/18:15):
+#
+# 15 */6 * * * root /usr/share/doc/sbuild/examples/sbuild-debian-developer-setup-update-all
+#
+# 2. Update all sid sbuild chroots daily, and all jessie sbuild chroots weekly,
+# and log the latter to a separate file:
+#
+# PATTERN = sid-*-sbuild
+# @daily root /usr/share/doc/sbuild/examples/sbuild-debian-developer-setup-update-all
+#
+# PATTERN = jessie-*-sbuild
+# LOGFILE = /var/log/wheezy-chroot-update.log
+# @weekly root /usr/share/doc/sbuild/examples/sbuild-debian-developer-setup-update-all
+#
+# The following will NOT work. Both of these jobs are executed at 00:15, so
+# the second one will refuse to run:
+#
+# PATTERN = foo-*
+# 15 0 * * * root /usr/share/doc/sbuild/examples/sbuild-debian-developer-setup-update-all
+#
+# PATTERN = bar-*
+# 15 0 * * * root /usr/share/doc/sbuild/examples/sbuild-debian-developer-setup-update-all
+
+
+# Output of sbuild-update invocations will be written to this file
+LOGFILE=${LOGFILE:-/var/log/sbuild-update-all.log}
+
+# Arguments passed to sbuild-update
+UPDATEARGS=${UPDATEARGS:-"--update --dist-upgrade --autoclean --autoremove"}
+
+# chroot config names are identified by this pattern
+PATTERN=${PATTERN:-*-sbuild-*}
+
+
+# Open logfile for output, make sure we're the only instance active
+exec 8>>$LOGFILE
+if ! flock -x -n 8
+then
+ echo "$0: another instance is already running"
+ exit 1
+fi
+# Redirect stdout to logfile
+exec 9>&1
+exec 1>&8
+
+if ! ls /etc/schroot/chroot.d/$PATTERN >/dev/null 2>&1
+then
+ echo "No chroots defined"
+ exit 0
+fi
+
+for fullname in /etc/schroot/chroot.d/$PATTERN
+do
+ confname=`basename $fullname | sed -e "s/-sbuild-.*//"`
+
+ # Check for *any* active session and skip if there is one.
+ # chroots can share common factors, for example an LVM volume, so it's
+ # better to be safe than sorry.
+ if [ -n "`schroot -l --all-sessions`" ]
+ then
+ echo "Active schroot session, will not continue"
+ break
+ fi
+
+ echo "****** `date` ******"
+ echo "Action: sbuild-update $UPDATEARGS $confname"
+
+ if ! sbuild-update $UPDATEARGS $confname
+ then
+ echo "ERROR: failed to update $confname"
+ continue
+ fi
+done
+
+# Release lock and undo redirections
+exec 8>&- 1>&9 9>&-