Hi Sam,

On Mon, Nov 13, 2023 at 09:16:33AM -0700, Sam Hartman wrote:
>     Bastian> Your suggestion splitting out and removing after one
>     Bastian> release would be fine for me.
> 
> 
> Helmut, I was hoping for a sanity check.

thanks for reaching out.

> Bastian wants to split out some code from pam.
> He wants to move pam_userdb.so into its own package to remove db5.3 from
> the pseudo-essential set.

In general terms, I welcome this change. Thanks for working on it.

I note that db5.3 also is required for building perl and python, so
while it may become possible to remove it from the pseudo-essential set,
it will likely remain in the bootstrap set.

> I've said that I'd be fine with that if we had libpam-modules depend on
> the new package for a release. (It might be okay to do something else,
> but that would require surveying users or detecting breakage in ways
> that require more thought than I would like to spend).

I concur. In essence, we'd first add a new binary and source package to
the pseudo-essential set and later aim for reducing the dependency and
eventually remove that package (and its functionality) from the
pseudo-essential set.

> Complications:
> 
> * pam is ppseudo-essential
> * usrmerge transition (pam libdir is currently /lib)

I confirm. Since we are about to move functionality from one package to
another and from /lib to /usr/lib, this triggers a DEP17 P1 scenario.

> So ignoring essential and usrmerge, I think the new package  would
> replace/breaks libpam-modules << the split point.

I concur. The canonical mitigation is replacing Breaks with Conflicts
(dubbed DEP17 M7). You'll quickly figure that this is going to end badly
for pseudo-essential packages, because pam will have to Pre-Depends on
the new package. Therefore, we may use DEP17 M8. While I am quite
convinced that M8 works, I have not implemented it beyond a PoC stage,
so pam would be the first package doing. Let me quote the relevant
paragraph:

| A package that is at risk of loosing files as in P1 can set up a
| protective diversion for each affected location in the aliased form. The
| replacing preinst script has to set up these temporary diversions. When
| the replacing postinst is run, the replaced package is already upgraded
| or removed (due to associated Breaks) and it can therefore remove the
| protective diversions. These diversions only exist during an upgrade,
| but writing the maintainer scripts can be difficult to get right.
| Therefore, M7 should be preferred when applicable.

So let's say a new libpam-userdb package installs
/usr/lib/x86_64-linux-gnu/security/pam_userdb.so, it's preinst will add
a diversion for /lib/x86_64-linux-gnu/security/pam_userdb.so and its
postinst will remove this diversion. Likewise for any other file that is
taken over and also moved from / to /usr.

> Do you have advice on what we want to do given usrmerge and essential?

I very much want /usr-merge to not impact your work. It definitely will,
but let's try to keep that to a minimum. Please prepare your changes in
experimental without paying much attention to /usr-merge and then get
back to me. You may also attempt to implement M8. I'll be happy to help
and/or review.

Helmut

Reply via email to