#!/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 [ -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 ." break fi done } # Version 1.21.0 had bogus handling of DPKG_ADMINDIR in update-alternatives, # and misplaced them, fix them up. fixup_misplaced_alternatives() ( admindir=${DPKG_ADMINDIR:-/var/lib/dpkg} cd "$admindir" for file in *; do if ! [ -f "$file" ]; then # Ignore anything that is not a file. continue fi # Check whether this is a known file we do not want to act on. case "$file" in arch|\ available|available-old|\ cmethopt|methlock|\ diversions|diversions-old|\ lock|lock-frontend|\ statoverride|statoverride-old|\ status|status-old) # Ignore known files just to make sure. continue ;; *) esac # Check whether the file looks like an alternative state file. mode="$(head -1 "$file")" case "$mode" in auto|manual) # Looks like a state file, we will handle this one. echo "Moving misplaced alternative state file $admindir/$file..." mv "$file" "alternatives/$file" ;; *) warning "unknown dpkg database file $admindir/$file is not a misplaced alternative state... leaving as is" continue ;; esac done ) case "$1" in configure) fixup_misplaced_alternatives ;; abort-upgrade|abort-deconfigure|abort-remove) ;; *) error "called with unknown argument '$1'" ;; esac #DEBHELPER# exit 0