Package: knot
Severity: wishlist
Tags: patch
Hi,
knot fails to update or install if the items where statoverrides are
processed for in knot.postinst are not files, i.e. symlinks.
at least for /etc/knot/knot.conf as well as /var/lib/knot (containing
the zones by default), it's quite common to have these symlinked from
other paths (e.g. /srv).
Currently, upgrading knot when using symlinks will break and take the
daemon out until manually removed the symlink, dpkg --configure, and
re-instating the symlink.
I suggest to only do the statoverride if the files are not symlinks,
I've attached three patches (not knowing which one you prefer):
* check-for-symlinks.patch
- only run dpkg-statoverride if the item is not a symlink.
* check-for-file-or-directory.patch
- since the actual default permissions used suggest a specific type
(knot.conf being a file, the other two a directory), you could
also just be explicitly strict about it and check for the correct
type (file or directory).
* ignore-errors.patch
- or you might want to just ignore the errors (note that you'll need
to divert the output to /dev/null, otherwise one sees a red error
message on any install/upgrade/reconfigure when using symlinks).
Regards,
Danieldiff --git a/debian/knot.postinst b/debian/knot.postinst
index 9ed7222..03fc993 100644
--- a/debian/knot.postinst
+++ b/debian/knot.postinst
@@ -6,9 +6,9 @@ set -e
#DEBHELPER#
if [ "$1" = "configure" ]; then
- dpkg-statoverride --list /var/lib/knot >/dev/null 2>&1 || dpkg-statoverride --update --add root knot 0770 /var/lib/knot
- dpkg-statoverride --list /etc/knot/knot.conf >/dev/null 2>&1 || dpkg-statoverride --update --add root knot 0640 /etc/knot/knot.conf
- dpkg-statoverride --list /etc/knot >/dev/null 2>&1 || dpkg-statoverride --update --add root knot 0750 /etc/knot
+ dpkg-statoverride --list /var/lib/knot >/dev/null 2>&1 || dpkg-statoverride --update --add root knot 0770 /var/lib/knot > /dev/null 2>&1 || true
+ dpkg-statoverride --list /etc/knot/knot.conf >/dev/null 2>&1 || dpkg-statoverride --update --add root knot 0640 /etc/knot/knot.conf > /dev/null 2>&1 || true
+ dpkg-statoverride --list /etc/knot >/dev/null 2>&1 || dpkg-statoverride --update --add root knot 0750 /etc/knot > /dev/null 2>&1 || true
fi
exit 0
diff --git a/debian/knot.postinst b/debian/knot.postinst
index 9ed7222..56a064a 100644
--- a/debian/knot.postinst
+++ b/debian/knot.postinst
@@ -6,9 +6,17 @@ set -e
#DEBHELPER#
if [ "$1" = "configure" ]; then
- dpkg-statoverride --list /var/lib/knot >/dev/null 2>&1 || dpkg-statoverride --update --add root knot 0770 /var/lib/knot
- dpkg-statoverride --list /etc/knot/knot.conf >/dev/null 2>&1 || dpkg-statoverride --update --add root knot 0640 /etc/knot/knot.conf
- dpkg-statoverride --list /etc/knot >/dev/null 2>&1 || dpkg-statoverride --update --add root knot 0750 /etc/knot
+ if [ ! -L /var/lib/knot ]; then
+ dpkg-statoverride --list /var/lib/knot >/dev/null 2>&1 || dpkg-statoverride --update --add root knot 0770 /var/lib/knot
+ fi
+
+ if [ ! -L /etc/knot/knot.conf ]; then
+ dpkg-statoverride --list /etc/knot/knot.conf >/dev/null 2>&1 || dpkg-statoverride --update --add root knot 0640 /etc/knot/knot.conf
+ fi
+
+ if [ ! -L /etc/knot ]; then
+ dpkg-statoverride --list /etc/knot >/dev/null 2>&1 || dpkg-statoverride --update --add root knot 0750 /etc/knot
+ fi
fi
exit 0
diff --git a/debian/knot.postinst b/debian/knot.postinst
index 9ed7222..ef466ec 100644
--- a/debian/knot.postinst
+++ b/debian/knot.postinst
@@ -6,9 +6,17 @@ set -e
#DEBHELPER#
if [ "$1" = "configure" ]; then
- dpkg-statoverride --list /var/lib/knot >/dev/null 2>&1 || dpkg-statoverride --update --add root knot 0770 /var/lib/knot
- dpkg-statoverride --list /etc/knot/knot.conf >/dev/null 2>&1 || dpkg-statoverride --update --add root knot 0640 /etc/knot/knot.conf
- dpkg-statoverride --list /etc/knot >/dev/null 2>&1 || dpkg-statoverride --update --add root knot 0750 /etc/knot
+ if [ -d /var/lib/knot ]; then
+ dpkg-statoverride --list /var/lib/knot >/dev/null 2>&1 || dpkg-statoverride --update --add root knot 0770 /var/lib/knot
+ fi
+
+ if [ -f /etc/knot/knot.conf ]; then
+ dpkg-statoverride --list /etc/knot/knot.conf >/dev/null 2>&1 || dpkg-statoverride --update --add root knot 0640 /etc/knot/knot.conf
+ fi
+
+ if [ -d /etc/knot ]; then
+ dpkg-statoverride --list /etc/knot >/dev/null 2>&1 || dpkg-statoverride --update --add root knot 0750 /etc/knot
+ fi
fi
exit 0