Hi!
On Thu, 2020-09-03 at 11:43:02 -0400, David Rayna wrote:
> Package: dpkg
> Version: 1.18.25
> 1st loop in /etc/cron.daily/dpkg treats missing file as a reason to backup.
> 2nd loop does handle missing files okay.
>
> Result is without any arch file, unchanged files are backed up daily which
> can be critical when the storage medium has limited life.
Hmm, I'm not sure I understand the problem here, because the arch file
is supposed to only exist when it has content. Which means there
should not be an empty backup for that one. Do you really have an
empty arch backup?
Perhaps what you are seeing is that the file has backups even though
it has not changed? If so that'd be explained in the comment in the
cron file, and the intention would be to have all sequence numbers
match the same state.
In any case I think I'll merge the following patch to make the code more
robust, and actually honor the above mentioned property which seems to
have been broken along the way:
diff --git i/debian/dpkg.cron.daily w/debian/dpkg.cron.daily
index 0a135f729..11124f7dd 100644
--- i/debian/dpkg.cron.daily
+++ w/debian/dpkg.cron.daily
@@ -9,15 +9,21 @@ if cd /var/backups ; then
dbchanged=no
dbfiles="arch status diversions statoverride"
for db in $dbfiles ; do
- if ! cmp -s "dpkg.${db}.0" "$dbdir/$db"; then
+ if ! [ -s "dpkg.${db}.0" ] && ! [ -s "$dbdir/$db" ]; then
+ # Special case the files not existing or being empty as being equal.
+ continue
+ elif ! cmp -s "dpkg.${db}.0" "$dbdir/$db"; then
dbchanged=yes
break
fi
done
if [ "$dbchanged" = "yes" ] ; then
for db in $dbfiles ; do
- [ -e "$dbdir/$db" ] || continue
- cp -p "$dbdir/$db" "dpkg.$db"
+ if [ -e "$dbdir/$db" ]; then
+ cp -p "$dbdir/$db" "dpkg.$db"
+ else
+ touch "dpkg.$db"
+ fi
savelog -c 7 "dpkg.$db" >/dev/null
done
fi
Thanks,
Guillem