diff options
Diffstat (limited to '')
-rwxr-xr-x | etc/sbuild-debian-developer-setup-update-all | 106 |
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>&- |