#!/bin/sh -e is_merged() { local directories="/bin /sbin /lib" for dir in $directories; do [ -e "$DPKG_ROOT$dir" ] || continue [ "$(readlink -f "$DPKG_ROOT$dir")" = "$DPKG_ROOT/usr$dir" ] || return 1 done # Avoid an exact match, as the target might vary depending on the tool # building the image. For example, systemd-nspawn links /lib64 to # /usr/lib/aarch64-linux-gnu on arm64, while on amd64 debootstrap links it to # /usr/lib64 and doesn't create it at all on arm64. # See: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1019575 local arch_directories="/lib64 /lib32 /libo32 /libx32" for dir in $arch_directories; do [ -e "$DPKG_ROOT$dir" ] || continue case "$(readlink -f "$DPKG_ROOT$dir")" in "$DPKG_ROOT/usr/lib"*) ;; *) return 1;; esac done return 0 } fail_if_unmerged() { if is_merged; then return; fi # Ignore that buildds are not actually converted. # Note that such systems will be *UNSUPPORTED* in the future. if [ -e /etc/unsupported-skip-usrmerge-conversion ] && \ grep -q 'this system will not be supported in the future' \ /etc/unsupported-skip-usrmerge-conversion; then echo "W: /etc/unsupported-skip-usrmerge-conversion exists." >&2 return 0 fi cat << END ****************************************************************************** * * The usr-is-merged package cannot be installed because this system does * not have a merged /usr. * * Please install the usrmerge package to convert this system to merged-/usr. * * For more information please read https://wiki.debian.org/UsrMerge. * ****************************************************************************** END exit 1 } case "$1" in install|upgrade) fail_if_unmerged ;; esac