diff options
Diffstat (limited to 'debian/dpkg.postinst')
-rw-r--r-- | debian/dpkg.postinst | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/debian/dpkg.postinst b/debian/dpkg.postinst new file mode 100644 index 0000000..113c8d5 --- /dev/null +++ b/debian/dpkg.postinst @@ -0,0 +1,89 @@ +#!/bin/sh +# See deb-postinst(5). + +set -e + +PROGNAME=dpkg + +. /usr/share/dpkg/sh/dpkg-error.sh + +setup_colors + +get_vendor() +{ + local origin="$DPKG_ROOT/etc/dpkg/origins/default" + local vendor + + if [ -n "$DEB_VENDOR" ]; then + vendor="$DEB_VENDOR" + elif [ -e "$origin" ]; then + vendor=$(sed -ne 's/^Vendor: *\([^ ]\+\) */\1/p' "$origin" | tr A-Z a-z) + fi + + echo "${vendor:-default}" +} + +check_merged_usr_via_aliased_dirs() +{ + local vendor + + vendor=$(get_vendor) + + case "$vendor" in + debian) + # In Debian some people have gotten so offended by the following _warning_ + # that they have resorted to bullying and abuse. Life's too short, sorry. + return + ;; + ubuntu) + # Ubuntu does not seem interested in it. + return + ;; + esac + + for d in /bin /sbin /lib /lib32 /libo32 /libx32 /lib64; do + linkname="$(readlink $DPKG_ROOT$d || true)" + if [ "$linkname" = "usr$d" ] || [ "$linkname" = "/usr$d" ]; then + warning "This system uses merged-usr-via-aliased-dirs, going behind dpkg's" + warning "back, breaking its core assumptions. This can cause silent file" + warning "overwrites and disappearances, and its general tools misbehavior." + warning "See <https://wiki.debian.org/Teams/Dpkg/FAQ#broken-usrmerge>." + break + fi + done +} + +setup_aliases() +{ + local prog=start-stop-daemon + + # Add a backward compatibility symlink alias for s-s-d, which is now + # installed in its canonical location. + if [ ! -f "$DPKG_ROOT/sbin/$prog" ]; then + ln -s "/usr/sbin/$prog" "$DPKG_ROOT/sbin/$prog" + fi +} + +case "$1" in +configure) + check_merged_usr_via_aliased_dirs + setup_aliases + ;; +abort-upgrade|abort-deconfigure|abort-remove) + ;; +*) + error "called with unknown argument '$1'" + ;; +esac + +# Due to #932360 in debhelper we need to explicitly tell systemd to reload. +case "$1" in +configure|abort-upgrade|abort-deconfigure|abort-remove) + if [ -d /run/systemd/system ]; then + systemctl --system daemon-reload >/dev/null || true + fi + ;; +esac + +#DEBHELPER# +exit 0 |