summaryrefslogtreecommitdiffstats
path: root/debian/postinst
diff options
context:
space:
mode:
Diffstat (limited to 'debian/postinst')
-rw-r--r--debian/postinst101
1 files changed, 101 insertions, 0 deletions
diff --git a/debian/postinst b/debian/postinst
new file mode 100644
index 0000000..4ea6a18
--- /dev/null
+++ b/debian/postinst
@@ -0,0 +1,101 @@
+#!/bin/sh
+set -e
+
+catdir=/var/cache/man
+
+ensure_catdir () {
+ if [ ! -d $catdir ]; then
+ # Make sure the cat directory exists.
+ install -d -o man -g man -m 0755 $catdir
+ fi
+}
+
+run_mandb () {
+ if [ ! -e /var/lib/man-db/auto-update ]; then
+ echo "Not building database; man-db/auto-update is not 'true'." >&2
+ return 0
+ fi
+ # shellcheck disable=SC3043
+ local message="$1"
+ shift
+ [ "$message" ] && echo "$message" >&2
+ # start-stop-daemon isn't available when running from debootstrap.
+ if command -v setpriv >/dev/null; then
+ setpriv --reuid man --regid man --init-groups -- /usr/bin/mandb "$@" || true
+ else
+ # runuser isn't ideal here, because it starts a PAM session.
+ # However, setpriv is only available on Linux.
+ runuser -u man -- /usr/bin/mandb "$@" || true
+ fi
+}
+
+if [ "$1" = triggered ]; then
+ ensure_catdir
+ # We don't print a status message here, as dpkg already said
+ # "Processing triggers for man-db ...".
+ run_mandb "" -pq
+ exit 0
+fi
+
+# shellcheck disable=SC1091
+. /usr/share/debconf/confmodule
+db_version 2.0
+
+[ "$1" = configure ] || exit 0
+
+maybesetuid='man mandb'
+
+db_get man-db/install-setuid
+
+if [ "$RET" = true ]; then
+ # man and mandb are to be installed setuid man.
+ owner=man:man
+ mode=6755
+else
+ # man and mandb are not to be installed setuid.
+ owner=root:root
+ mode=0755
+fi
+
+for x in $maybesetuid; do
+ # No statoverrides available or none exist for us ...
+ if ! dpkg-statoverride --list "/usr/bin/$x" >/dev/null; then
+ chown $owner "/usr/bin/$x" || true
+ chmod $mode "/usr/bin/$x"
+ fi
+done
+
+ensure_catdir
+
+# debconf forms the interface used to suppress man-db updates during
+# automatic package builds (see https://bugs.debian.org/554914), but we
+# cache that value in the file system to avoid having to use debconf when
+# processing triggers.
+db_get man-db/auto-update
+if [ "$RET" = true ]; then
+ touch /var/lib/man-db/auto-update
+else
+ rm -f /var/lib/man-db/auto-update
+fi
+
+build_db=0
+
+if [ ! -f $catdir/index.db ]; then
+ # Build the database from scratch on fresh installs.
+ build_db=1
+fi
+
+if [ $build_db -eq 1 ]; then
+ # Chances are we're being run from debootstrap, which will have problems
+ # if mandb runs backgrounded for too long (bug #100616).
+ run_mandb "Building database of manual pages ..." -cq
+else
+ # Otherwise, just update the database in the foreground. It's unlikely
+ # to take very long, and configuration needs to cover everything that
+ # happens when we're triggered.
+ run_mandb "Updating database of manual pages ..." -pq
+fi
+
+#DEBHELPER#
+
+exit 0