Only add --allow-releaseinfo-change if apt is new enough
[apt-update.git] / apt-update
1 #!/bin/sh
2 #
3 # apt-update
4 #
5 # Simple wrapper script for cron to use - check for updated packages
6 # and mail admin with any recommended upgrades.
7
8 # Assumes that apt is configured correctly before we start...
9 #
10 # Copyright 2001-2019 Steve McIntyre <steve@einval.com>
11 # GPL-2+
12
13 unset LANGUAGE
14 unset LANG
15 unset LC_ALL
16
17 TMPFILE=/etc/apt/update.tmp
18
19 . /etc/apt/update.conf
20
21 for CHROOT in $CHROOTS
22 do
23     case $CHROOT in
24         /)
25             CHR="";;
26         /*)
27             CHR="chroot $CHROOT";;
28         *)
29             CHR="schroot -c $CHROOT --";;
30     esac
31
32     # Work out a simple version number for comparisons, using the major
33     # and minor versions. Ignore the third component, as we might see
34     # things like "1.8.0~rc3"
35     APT_VER=$($CHR apt-get --version | awk \
36               '/^apt/ {
37                   FULL=$2
38                   split(FULL, VERS, ".")
39                   printf("%d\n", VERS[1]*100 + VERS[2]*1);
40               }')
41
42     APT_OPTIONS=""
43     if [ $APT_VER -gt 105 ]; then
44         APT_OPTIONS="--allow-releaseinfo-change"
45     fi
46
47     $CHR apt-get update $APT_OPTIONS > $TMPFILE 2>&1
48     error=$?
49     if [ $error -ne 0 ] ; then
50         echo $CHR update failed with error $error
51         echo
52     fi
53     # And also check for warnings:
54     grep -q ^W $TMPFILE
55     if [ $? -eq 0 ] ; then
56         echo "$CHR update gave the following warnings:"
57         grep ^W $TMPFILE
58     fi
59     rm -f $TMPFILE
60
61     THIS_LIST=`$CHR apt-get -s -u dist-upgrade | awk '/^Inst/ {print $2}'`
62     if [ "$THIS_LIST"x != ""x ] ; then
63         UPDATE_LIST="$UPDATE_LIST\n$CHROOT:\n"
64         for PKG in $THIS_LIST
65         do
66             UPDATE_LIST="$UPDATE_LIST $PKG\n"
67         done
68         CHROOT_UPDATED="$CHROOT_UPDATED $CHROOT"
69     fi
70 done
71
72 if [ "$UPDATE_LIST"x != ""x ] ; then
73     # If we've been configured to download packages, grab them now
74     # before we finish
75     if [ "$DOWNLOAD_DEBS"x = "yes"x ] ; then
76         for CHROOT in $CHROOT_UPDATED
77         do
78             case $CHROOT in
79                 /)
80                     CHR="";;
81                 /*)
82                     CHR="chroot $CHROOT";;
83                 *)
84                     CHR="schroot -c $CHROOT --";;
85             esac
86             $CHR apt-get -d -y dist-upgrade > /dev/null
87             error=$?
88             if [ $error -ne 0 ] ; then
89                 echo $CHR package download failed with error $error
90             fi
91         done
92         UPDATE_LIST="$UPDATE_LIST\n\nPackage(s) downloaded and ready to install\n"
93     fi
94
95     printf "$UPDATE_LIST\n"
96 fi
97