I want to ask a potentially stupid question. As I understand things, the problem is that in a usrmerge'd file system where we have the top-level symlinks /{bin,lib,sbin} which point at /usr/{bin,lib,sbin}, the problem is if we have a package which contains the file in /sbin/blart, it gets installed in /usr/sbin/blart thanks to the symlink, but the dpkg database has an entry for /sbin/blart, and that is the conflict which is the problem.
So.... in theory, if we had a program which looked for the top-level symlinks /{bin,lib,sbin} -> /usr/{bin,lib,sbin}, and if they exist, scans dpkg database is scanned looking for of the form /{bin,lib,sbin}/$1, and updates them with /usr/{bin,lib,sbin}/$1, and then in the future, if dpkg sees the top-level symlink, canonicalizes any files referenced in the packages to /usr/{bin,lib,sbin}/$1, with a fallback searching for /{bin,lib,sbin}/$1 in the file system, this would solve the problem. Let's ignore how we would deploy this helper program and the update dpkg from a stable upgrade perspective, but in terms of preventing potential problems during the testing window, getting an update to dpkg which included the database fixup program and which ran from the maintainer script would be a potential solution path. Furthermore, if dpkg knew to always canonicalize filenames from /{bin,lib,sbin}/XXX to /usr/{bin,lib,sbin}XXX when adding to the database, and when it looked for files in the file system looked first in /usr/{bin,lib,sbin}/XXX, with a fallback to /usr/{bin,lib,sbin}/XXX the file names in the package would not need to change all, since all of the magic fixup work would be happening inside dpkg. Is this a viable path forward, or am I missing something? Thanks, - Ted