Re: Bug#759492: File conflicts between /bin and /usr/bin
On 27/08/14 17:59, Russ Allbery wrote:
> Some other distributions have merged /bin, /sbin, and /lib into /usr
> via the symlinks:
>
> /bin -> /usr/bin
> /sbin -> /usr/sbin
> /lib -> /usr/lib
> /lib64 -> /usr/lib64
Other merges worth considering if you're in a "kill all the directories"
mood:
bin + sbin -> bin
bin + games -> bin (but at the moment Lintian actively discourages
putting games in /usr/bin)
> While Debian has not decided to do the same thing at this time, it's
> desirable, and not particularly difficult, to support this configuration
> if the local administrator wants to adopt it.
If I remember correctly, the hurd-i386 port briefly tried to do this
(except possibly the other way round, putting everything in /bin), and
gave up on that idea, because file conflicts between /bin and /usr/bin
are common, and it wasn't "the battle they wanted to be fighting".
> I wanted to open this discussion, but it's not clear whether we're ready
> yet to actually merge this patch.
On the contrary, I think it's clear that we're not ready.
> On my local system, I have the
> following conflicts, all of which are symlinks and therefore don't pose
> a functionality problem:
>
> lrwxrwxrwx 1 root root 10 May 20 2013 chacl -> /bin/chacl*
(etc.)
Some executables need to exist in both /bin and /usr/bin for backwards
compatibility. If a distribution or administrator *has* done the "/usr
merge", then /bin *is* /usr/bin and there's no problem; but if not, the
transitional state is broken.
I believe distributions that have done the /usr merge have typically
done so as a "flag day" sort of thing, with quite a lot of transitional
breakage. If they can't get it right with a forced transition, I don't
think we can get it right with a (more complex) optional transition.
The only way I can think of to make this work without a flag day that
switches from "separate /bin is mandatory" to "separate /bin is
forbidden" (which, as you noted, we actively do not want) would be to
have some magic in dpkg like this:
If a package contains two files $ub/foo and $b/foo with the same
basename, and $ub/foo would be a symlink to $b/foo if the package was
unpacked into an empty root, and $b is a symlink to $ub in the actual
root, then unpack the real file $b/foo to $ub/foo in the real root, and
ignore $ub/foo.
(Read "$ub" and "$b" as "/usr/bin" and "/bin" in this case.)
That seems ... subtle. Worth it? Stupid? Better ideas?
S
Reply to: