[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1061248: refining DEP17 patches for glibc and base-files



Hi Aurelien and Santiago,

my DEP17 work on moving essential files has been uploaded to Ubuntu
noble by Julian Andres Klode and we gain some insights there. As a
result, I've been refining the patches and published my testing
infrastructure. You can find it all (though maybe not in an easily
consumable way) at
https://salsa.debian.org/helmutg/bootstrap-usrmerge-demo.

One thing we noticed on the Ubuntu side is that as long as there are
packages installing into aliased locations, the protective diversions
(DEP17 M4) that I propose for base-files cause surprises for users. We
divert e.g. /bin to /bin.usr-is-merged and this becomes a real
directory. I've reconsidered this and concluded that there is no benefit
in diverting /bin, /lib and /sbin. All that we have to do to avoid their
accidental deletion is to ensure that they are installed by some package
at all times. In bookworm and older, these are directories installed by
base-files. In trixie, these will be symlinks provided by base-files.
dpkg will resolve symlink vs directory conflicts in our favour.

For /lib64 (on amd64 and some others), the story is more nuanced. This
is not installed by base-files in bookworm. Therefore upgrading
libc6:amd64 (whose bookworm version contains /lib64) before upgrading
base-files is prone to loosing this symlink. Therefore, we need the
protective diversion from libc6.preinst until base-files.postinst. On
the final installation, /lib64 will not be diverted on amd64.

For other multilib links, I discussed the matter with some members of
#debian-devel and there were some conclusions. In general, we want to
avoid the presence of unnecessary multilib symlinks (which is what the
trigger approach in base-files is supposed to ensure). However, that
means that there can be no package containing them and hence we really
need to divert them for longer (in a finished trixie installation). This
is what the previous patches already did, but I'm reconfirming that we
really need this.

The trigger-interest I previously added for base-files was broken and
not actually activating. This is also fixed.

As a further measure to reduce annoyed user reports, I'm changing the
diversion targets for aliasing links from /$orig.usr-is-merged to
/.$orig.usr-is-merged hoping that the leading dot will prevent the empty
directories from being listed to users. Note that we cannot delete them,
because that would cause dpkg --verify to report them as missing.
They'll automatically disappear once no installed package installs any
files into an aliased location.

Niels Thykier made me aware of dh_installdeb -D. Using it avoids the
need for a pile of .in files in base-files. I hope you like this
refactoring. Let me know if not.

I hope the coding style now fully meets base-files.

Regarding the repository mentioned above, most of the changes are on the
main branch, but the avoidance of diversions for /bin, /lib and /sbin as
well as the change in diversion target are currently on a separate
branch fewer-m4-diversions to ease comparing the approaches.

This is mostly a report of what I've been doing and not something
actionable to you except that I appreciate reviews of this work (e.g.
commenting on the choices and rationale given above or actually looking
into the changes).

I still don't have a proposed upload date as the time64 transition
unfolds and also breaks debootstrap currently. I hope we get this done
by the end of March.

Helmut


Reply to: