Add support for using schroot
authorSteve McIntyre <steve@einval.com>
Fri, 7 Jun 2019 18:09:19 +0000 (19:09 +0100)
committerSteve McIntyre <steve@einval.com>
Fri, 7 Jun 2019 18:13:50 +0000 (19:13 +0100)
chroot is ok, but doesn't work well with chroots that might need /proc
or /sys bind-mounting to be able to upgrades. schroot deals with this
for us.

java packages have started complaining about missing /proc during
upgrade runs.

apt-dist-upgrade
apt-update
update.conf

index fd11ce2..7413c3f 100755 (executable)
@@ -21,12 +21,17 @@ export LANGUAGE LANG LC_ALL LC_CTYPE
 
 for CHROOT in $CHROOTS
 do
-  if [ $CHROOT = / ] ; then
-      CHR=""
-  else
-      CHR="chroot $CHROOT"
-  fi
-  echo "Running apt-get dist-upgrade in $CHROOT"
-  $CHR apt-get $@ dist-upgrade
-  $CHR apt-get clean
+    case $CHROOT in
+       /)
+           CHR="";;
+       /*)
+           CHR="chroot $CHROOT";;
+       *)
+           CHR="schroot -c $CHROOT --";;
+    esac
+    echo "Running apt-get dist-upgrade in $CHROOT"
+    $CHR apt-get $@ dist-upgrade
+    $CHR apt-get clean
+    echo "Finished dist-upgrade in $CHROOT"
+    echo "======================================"
 done
index 433ce09..2fe1a65 100755 (executable)
@@ -20,34 +20,37 @@ TMPFILE=/etc/apt/update.tmp
 
 for CHROOT in $CHROOTS
 do
-  if [ $CHROOT = / ] ; then
-      CHR=""
-  else
-      CHR="chroot $CHROOT"
-  fi
-  $CHR apt-get update > $TMPFILE 2>&1
-  error=$?
-  if [ $error -ne 0 ] ; then
-      echo $CHR update failed with error $error
-      echo
-  fi
-  # And also check for warnings:
-  grep -q ^W $TMPFILE
-  if [ $? -eq 0 ] ; then
-      echo "$CHR update gave the following warnings:"
-      grep ^W $TMPFILE
-  fi
-  rm -f $TMPFILE
+    case $CHROOT in
+       /)
+           CHR="";;
+       /*)
+           CHR="chroot $CHROOT";;
+       *)
+           CHR="schroot -c $CHROOT --";;
+    esac
+    $CHR apt-get update > $TMPFILE 2>&1
+    error=$?
+    if [ $error -ne 0 ] ; then
+       echo $CHR update failed with error $error
+       echo
+    fi
+    # And also check for warnings:
+    grep -q ^W $TMPFILE
+    if [ $? -eq 0 ] ; then
+       echo "$CHR update gave the following warnings:"
+       grep ^W $TMPFILE
+    fi
+    rm -f $TMPFILE
 
-  THIS_LIST=`$CHR apt-get -s -u dist-upgrade | awk '/^Inst/ {print $2}'`
-  if [ "$THIS_LIST"x != ""x ] ; then
-      UPDATE_LIST="$UPDATE_LIST\n$CHROOT:\n"
-      for PKG in $THIS_LIST
-      do
-          UPDATE_LIST="$UPDATE_LIST $PKG\n"
-      done
-      CHROOT_UPDATED="$CHROOT_UPDATED $CHROOT"
-  fi
+    THIS_LIST=`$CHR apt-get -s -u dist-upgrade | awk '/^Inst/ {print $2}'`
+    if [ "$THIS_LIST"x != ""x ] ; then
+       UPDATE_LIST="$UPDATE_LIST\n$CHROOT:\n"
+       for PKG in $THIS_LIST
+       do
+            UPDATE_LIST="$UPDATE_LIST $PKG\n"
+       done
+       CHROOT_UPDATED="$CHROOT_UPDATED $CHROOT"
+    fi
 done
 
 if [ "$UPDATE_LIST"x != ""x ] ; then
@@ -55,12 +58,15 @@ if [ "$UPDATE_LIST"x != ""x ] ; then
     # before we finish
     if [ "$DOWNLOAD_DEBS"x = "yes"x ] ; then
         for CHROOT in $CHROOT_UPDATED
-            do
-            if [ $CHROOT = / ] ; then
-                CHR=""
-            else
-                CHR="chroot $CHROOT"
-            fi
+        do
+           case $CHROOT in
+               /)
+                   CHR="";;
+               /*)
+                   CHR="chroot $CHROOT";;
+               *)
+                   CHR="schroot -c $CHROOT --";;
+           esac
             $CHR apt-get -d -y dist-upgrade > /dev/null
             error=$?
             if [ $error -ne 0 ] ; then
index af9350d..53670bb 100644 (file)
@@ -1,3 +1,18 @@
+# List the different chroots here, space-separated
+#
+# "/" means the normal root fs
+#
+# "/foo/bar" will chroot into /foo/bar for its updates and
+# dist-upgrades
+#
+# "foobar" will use "schroot -c foobar" for its updates and
+# dist-upgrades
+# These can be mixed and matched as desired
 CHROOTS="/"
+
+# Should the system download the debs needed for the upgrades
+# automatically? Will save waiting for a download later.
 DOWNLOAD_DEBS="yes"
+
+# If there are updates needed, who should be told?
 MAILTO="postmaster"