#1140305 debhelper: misc:Depends pulls systemd on chroots

Package:
debhelper
Source:
debhelper
Submitter:
Guillem Jover
Date:
2026-07-12 20:07:02 UTC
Severity:
normal
Tags:
#1140305#5
Date:
2026-06-17 22:06:46 UTC
From:
To:
Hi!

I was updating a chroot, and I got systemd pulled in automatically due
to the dh_installtmpfiles misc:Depends values.

The order seems wrong, because if the system already uses systemd then
the systemd dependency does not need to be first, but if the system does
not use it (or does not need any init system at all), having it first
will pull it in, which in case of chroots, that's a significant size
and dependency increase.

So the small implementations should go first, and the last one should
be systemd.

This applies as well to dh_installsysusers.

Thanks,
Guillem

#1140305#10
Date:
2026-06-18 06:42:45 UTC
From:
To:
Guillem Jover:

Those who cannot remember the past are condemned to repeat it. And I
forgot #1017441 - that is on me.

Since there  are virtual dependencies involved, the best I can do:

    `systemd-standalone-tmpfiles | systemd | systemd-tmpfiles`

Which means only one of the small implementations comes first anyway.


But even then, I think the main problem here is that we are trying to
express different defaults for different cases via the dependency
system. The dependency system is not built for that, so no matter what I
do, the order will be wrong for some case. Namely, we are trying to solve:

  * The `systemd` is the default implementation for any Debian bootable
    system that support `systemd`

  * We generally want `systemd-standalone-tmpfiles | systemd-tmpfiles`
    for other systems (chroots, containers, etc.)


Which means the choice must be resolved outside `debhelper`'s dependency
clause. That falls on tools like `debootstrap` and `mmdebootstrap`
(which is why I am CC'ing josch). As I recall, `mmdebootstrap` just
pulls the first option and no order can solve both cases at the same time.


I have a feeling there is no "one size fits all" here. If I use the
current order, some are unhappy and if I swap someone else will be unhappy.

This is not were I want to spend my volunteer energy, so if we conclude
there is indeed no "one size fits all" I will hand it over to the
tech-ctte to make the call.
   In my view, it would clearly fit the bill of being a technical issue
that affects multiple packages with no clear "owner" of the problem. It
would also allow me to reduce this to a regular agreed dependency - even
if it is agreed by authority rather than organically grown.


Best regards,
Niels

#1140305#15
Date:
2026-06-18 07:57:03 UTC
From:
To:
* Niels Thykier <niels@thykier.net> [260618 08:45]:

I think in the past it was always concluded that the orders and
defaults that get expressed in packages and control files are for
the "default installation" (whatever that is, but supposedly a
single user unix machine possibly with a graphical desktop), and
everyone else has to make local adjustments.

I don't like this, but that seems to be the general consensus.

Ideally we could tell installation-like tools what the intended
usecase of the Debian installation is, but outside of d-i I'm not
aware of anything there. Ideally this approach could be shared
between different tools, so not each and every tool has to reinvent
the wheel.

Maybe some metapackages would be a first step. They could pick/force
the tmpfiles and sysusers providers.

Chris

#1140305#20
Date:
2026-06-18 10:11:32 UTC
From:
To:
Hi!

I'm not sure why the virtual package is a concern when not being the
first alternative, as that's what usually trips over some tools.

I don't really see the problem here, as we already have such selection
mechanism in place. This is done via the init metapackage, which
correctly pulls in systemd-sysv as the default init system (in contrast
to just systemd). And AFAICT, whether to include or not an init system
is also already supported by the various bootstrappers, via their
"variant" support or similar.

I think there's a big difference between an init system or any other
component that is expected to be already in place for the relevant
kinds of systems (init for bootable ones), versus a random service or
specific functionality provider where we have multiple alternative
implementations but have decided on a default one. In the latter case
I agree that we should express the default via the dependency system
because if you need that service and it's not going to be already
installed something needs to select it.

But for something like an init system the default is either already
installed or if is not (because no init system makes sense here or
another one has been selected) then I don't think it makes sense to
pull one in.

And in addition this seems to be conflating what init system to default
to, with a specific tooling implementation that can be fulfilled by
systemd in particular (which is not enough to provide an init system
anyway). So this concern seems a bit weird to me.

Thanks,
Guillem

#1140305#25
Date:
2026-07-05 08:17:52 UTC
From:
To:
Niels Thykier:
Coming back to this bug again, I believe I exceeded my limit on this top
even before I sent my previous email, and that is entirely on me.
Apologies for that. I am done with this topic, and mostly just want to
never come back to this again. However, in the interest in failing in a
"somewhat" constructive manner, I will offer the following option:

I will take **one patch** (or, at your option, an MR) that spells out
the dependencies as you (general sense, "you") believe them to be
correct. I will merge it as long as it is a valid patch that updates all
cases of the dependency - with no questions asked to order.
   It will be a patch or MR, so there is *no* interpretation of the
desired change on my side. Interpretation would require more than
minimal energy and I am not offering that.

If it lands any kind of controversy on the topic of the order, either
the patch provider deals with it or the tech-ctte deals with it. Patch
provider's call, defaulting to tech-ctte unless otherwise stated.
   If it is controversy is all in my head, the patch will unblock us and
no further action is necessary from anyone. If there is a controversy,
it will be flushed out and will delegated to someone that is not me,
which is what I would need in that situation.

That is what I am willing to offer at this point on this topic. I am
literally exhausted with `systemd` dependency discussions in `debhelper`.

On a closing note, I would like to stress that this is all about the
topic and nothing about the involved parties nor our relationship.

Best regards,
Niels

#1140305#30
Date:
2026-07-10 08:57:09 UTC
From:
To:
Control: severity -1 serious
Control: tags -1 ftbfs
Control: affects -1 src:restorecond src:selinux-python src:mcstrans src:gimp src:kig
Control: notfound -1 14.1
Control: found -1 14.2
Control: block 1130323 by -1

The relevant change was in 14.2, if 14.1 was intentional please say so.

I am raising the severity due to the following:

https://buildd.debian.org/status/logs.php?pkg=gimp&ver=3.2.4-3

...
Unpacking libtss2-tcti-cmd0t64:amd64 (4.1.3-6) ...
dpkg: dependency problems prevent configuration of libtss2-tcti-cmd0t64:amd64:
 libtss2-tcti-cmd0t64:amd64 depends on tpm-udev (>= 4.1.3-6); however:
  Package tpm-udev is not configured yet.
 libtss2-tcti-cmd0t64:amd64 depends on libtss2-mu-4.0.1-0t64 (>= 3.0.1); however:
  Package libtss2-mu-4.0.1-0t64:amd64 is not configured yet.

dpkg: error processing package libtss2-tcti-cmd0t64:amd64 (--configure):
...


What happened is that libselinux got recompiled with the new debhelper
  Depends: systemd | systemd-standalone-tmpfiles | systemd-tmpfiles,...
resulting in a circular dependency
  libselinux1 -> systemd -> libmount1 -> libselinux1


cu
Adrian

#1140305#49
Date:
2026-07-10 15:17:09 UTC
From:
To:
CCing the libselinux maintainer, since one option that's separate from
the wider debhelper question might be for it to sed that dependency out
of misc:Depends.  After all, it apparently didn't have any such
dependency before this change, and libselinux1 is special due to being
pseudo-Essential, so this is a little different from the general
question of what order the alternatives ought to go in.

Thanks to Jochen Sprickerhof, here's an easy local reproducer:

   mmdebstrap --variant=apt --chrooted-customize-hook="sed -i 's/testing/unstable/' /etc/apt/sources.list; apt -Uy upgrade" testing /dev/null

#1140305#54
Date:
2026-07-10 15:36:01 UTC
From:
To:
The postinst didn't call systemd-tmpfiles unconditionally before.

See #1140654 for background why your suggestion is not an option.

cu
Adrian

#1140305#59
Date:
2026-07-10 16:01:47 UTC
From:
To:
Maybe not exactly as I wrote it, but there are clearly other options
that the libselinux maintainer could potentially use to unblock testing
→ unstable upgrades.  For example, since it's pseudo-Essential, it might
be reasonable for libselinux1 to avoid using dh_installtmpfiles and
instead copy the previous dh_installtmpfiles postinst code into its
postinst and install the tmpfiles.d snippet manually.

#1140305#64
Date:
2026-07-10 16:20:30 UTC
From:
To:
The status quo ante bellum was that for many years no dependency was
emitted by debhelper, and the postinsts checked for systemd-tmpfiles
before calling it.

If we need a short-term workaround because better solution is not
available, then reverting debhelper to that state is much better
than asking maintainers to workaround it.

cu
Adrian

#1140305#69
Date:
2026-07-10 19:51:09 UTC
From:
To:
unstable chroots (both cowbuilder and sbuild) can't be upgraded.


Cheers,
gregor

#1140305#74
Date:
2026-07-10 22:57:59 UTC
From:
To:
#v+
autopkgtest [00:51:16]: test autodep8-perl-build-deps: preparing testbed
Reading package lists...
Building dependency tree...
Reading state information...
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
  libtss2-esys-3.0.2-0t64 : Depends: libtss2-tcti-device0t64 but it is not going to be installed
                            Depends: libtss2-tcti-mssim0t64 but it is not going to be installed
                            Depends: libtss2-tcti-swtpm0t64 but it is not going to be installed
                            Depends: libtss2-sys1t64 (>= 4.0.1) but it is not going to be installed
  systemd-tpm : Depends: libtss2-rc0t64 but it is not going to be installed
                Depends: libtss2-tcti-device0t64 but it is not going to be installed
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).
autopkgtest [00:51:17]: ERROR: "sh -ec
   if ! type apt-ftparchive >/dev/null 2>&1; then
     # if there is nothing in the cache, we have to update first before we can
     # install anything
     [ -n "$(apt-get indextargets 2>/dev/null)" ] || apt-get update 2>&1
     DEBIAN_FRONTEND=noninteractive apt-get install -y apt-utils 2>&1
   fi
   (cd /tmp/autopkgtest.dLDORL/binaries; apt-ftparchive packages . > Packages; apt-ftparchive release . > Release)
   printf 'Package: *\nPin: origin ""\nPin-Priority: 1002\n' > /etc/apt/preferences.d/90autopkgtest
   echo "deb [ trusted=yes ] file:///tmp/autopkgtest.dLDORL/binaries /" >/etc/apt/sources.list.d/autopkgtest.list
   if [ "x`ls /var/lib/dpkg/updates`" != x ]; then
     echo >&2 "/var/lib/dpkg/updates contains some files, aargh"; exit 1
   fi
   apt-get --quiet --no-list-cleanup -o Dir::Etc::sourcelist=/etc/apt/sources.list.d/autopkgtest.list -o Dir::Etc::sourceparts=/dev/null update 2>&1
   cp /var/lib/dpkg/status /tmp/autopkgtest.dLDORL/1-apt-update.out
   " failed with status 100
autopkgtest: failed (20).
#v-


Cheers,gregor

#1140305#79
Date:
2026-07-11 08:35:32 UTC
From:
To:
#1140305#84
Date:
2026-07-11 10:45:47 UTC
From:
To:
We believe that the bug you reported is fixed in the latest version of
libselinux, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 1140305@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Christian Göttsche <cgzones@googlemail.com> (supplier of updated libselinux package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmaster@ftp-master.debian.org)
Format: 1.8
Date: Sat, 11 Jul 2026 11:58:50 +0200
Source: libselinux
Architecture: source
Version: 3.11-2
Distribution: unstable
Urgency: medium
Maintainer: Debian SELinux maintainers <selinux-devel@lists.alioth.debian.org>
Changed-By: Christian Göttsche <cgzones@googlemail.com>
Closes: 1140305
Changes:
 libselinux (3.11-2) unstable; urgency=medium
 .
   [ Luca Boccassi ]
   * Move tmpfiles.d from libselinux1 to selinux-utils (Closes: #1140305)
 .
   [ Christian Göttsche ]
   * d/patches: add patches to please non-release architectures
Checksums-Sha1:
 8e27d063a5339e6191c910a5176d246cdeccd970 3130 libselinux_3.11-2.dsc
 c08e8b7effa1462e523db10849b3ca39554fbceb 52512 libselinux_3.11-2.debian.tar.xz
 172da6d0c6c2d5c25e8a0975a39d7a309f217aca 8636 libselinux_3.11-2_source.buildinfo
Checksums-Sha256:
 1b6bde259f663809baab233921422a847ade43abaf1bee2b0a330ea03ab99ba7 3130 libselinux_3.11-2.dsc
 af4785e669854701a30895fca896dbcdb89c228bd562cab21f338785a4a83542 52512 libselinux_3.11-2.debian.tar.xz
 adc7544a4febca8d9e5b0975ac5839db721ceb3aa84f552404f7e2a91acff0db 8636 libselinux_3.11-2_source.buildinfo
Files:
 99d0066fae0d2976942754a8278a0e55 3130 libs optional libselinux_3.11-2.dsc
 b0af2fa4a91b19bc3a3901b35070004e 52512 libs optional libselinux_3.11-2.debian.tar.xz
 b12a2dde721757b0e7a11e716b1aee86 8636 libs optional libselinux_3.11-2_source.buildinfo
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEErCSqx93EIPGOymuRKGv37813JB4FAmpSGXAACgkQKGv37813
JB4+ag//fSaip4Wrt1Qyh+fYRcxP48ToGUB6MMlK50ve57WzC4kK0C2PZ5Lu6mCo
nFR3WfYvina6Px+Mqsg1jw8m/8+xraghcLxZcI4jlhgJRKmDq/Ukk5bPgJJHlDHN
RDu62njQHCjUCZhLLqML3yW1VlEHPJhspK8UGnY6YQjtAHBvw3n0Sp5q1J9p4HxY
KUDpJmd5puI3hfoot9vSJdu+p9CGrIPcfLh7ah1cMPlKCfeFe6jZ3E/DQbeFF6U/
pxnUPox052JEyJENJvPZW9DlM3UTF8hp7okXqs48OOPQhj3/KvfIHimJnXH/WGs0
qs6AhVgLRjL+VQEfkESOwBe8VmTgdU++i67QlxdBKl3iMGn9PxIrLXCgduuWwn3Y
+aA4hlosK+ikbqxjwrxXMP7Uftv2e0tjhHXI7EVK4IbjYylrA33D+Pg/qlXDDjdA
v/QSGMyVZjg40z4waE4ji99sVe6Wo2g4kJBS9jmOpRiEvh0im5MylFYaIc+xCy+x
R6nOY62nshwttTmZEotodpIzTmXz/wtribp9GefAZo6l3zXMVicXH4aRTj/IAnFn
DeLru3ZQ6hhbitasngGo6wmhit1MR87Ulzqi/ABWalVKLUg0BV8/I3OBFtkcvWHO
8nY84FiCKiezWnWQC6YiRi9jZWzrki372WFHmzZ8DpOWgtbx2vE=
=cjiN
-----END PGP SIGNATURE-----

#1140305#89
Date:
2026-07-11 15:16:02 UTC
From:
To:
Control: reopen -1
Control: severity -1 important

This bug cannot be fixed from within libselinux.

Thanks,
Guillem

#1140305#100
Date:
2026-07-11 20:35:45 UTC
From:
To:
Debian's dependency system is indeed too weak to express most
interesting and useful combinations of packages in non-standard setups.

Because Debian's dependency system is unlikely to change soon, anybody
who does something "non standard" will have to specify their additional
needs to the tool they use to build (and update) systems.

(For the sake of discussion, let's define "standard" = "what debootstrap
does without extra configuration".)

For example, if mmdebstrap is used to create init-less container images
(a possible and useful, but non-standard, kind of system) then the user
really should specify `--include=init-` or `--include=init-,systemd-` to
make their needs explicit, rather than hoping that the dependency chain
that happens to be calculated by apt that day will not include systemd.

One could argue (but I'm not sure if I'm ready to take this position)
that by making adjustments to the stated dependency order we are not
really helping users, just papering over issues that they will need to
address one day or another (i.e., they need to tell their tools what
non-standard configuration they really want).

Regards,

#1140305#105
Date:
2026-07-12 10:56:00 UTC
From:
To:
Hi!

[ Just to make sure, I wrote the initial report as someone who cares
  deeply about the Debian dependency system, the size of chroots,
  minimal installations in general, and has systems with systemd as init,
  sysvinit as init, init-less chroots, and also systems where systemd is
  not even available. ]

While there are scenarios where feature additions to the dependency
system would make sense, this is not one of them. The generated
dependencies are just wrong, as already explained in
<https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1140305#20>, because
for some weird reason, they are trying to convey completely orthogonal
things (best general systemd-sysusers/tmpfiles implementations and
default init system), which makes no sense whatsoever.

This is the equivalent of trying to shoehorn the fact that GNOME is the
default graphic desktop in Debian with selecting a terminal emulator
matching that, with something like this:

  gnome | gnome-terminal | x-terminal-emulator

Err, no? As also mentioned before, the way to create such thing would
be to use --variant=minbase or --variant=buildd for example. The
proposed command-line options are just a workaround for the currently
broken dependencies, which I'm surprised are even being proposed. :/

I strongly disagree with this premise and notion, as covered above.


In any case, I reopened this report, because the change in libselinux is
just a fix partially stemming from the root problem with the generated
dependencies, and the bug closure was thus bogus. But besides these
replies, I've got very little energy to deal with this report, less so
when the tech-ctte is preemptively being invoked, as this has already
become one of these draining and demotivating ones (which I guess it's
unfortunately not surprising). Instead I think it's going to be way more
productive, motivating and fun, to work on just making these commands
irrelevant, so that then when we do not need them, the dependencies will
simply disappear. Which I think it's what I'm going to be focusing my
energy on.

Thanks,
Guillem

#1140305#112
Date:
2026-07-12 20:04:30 UTC
From:
To:
Hi, my point was that Debian should accept that the current dependency
system is too weak to describe the desired outcome in many scenarios,
and thus it should stop shoehorning meaning where meaning should not be
found (like the order of the dependency lists or the primacy of the
first alternative). Practically speaking: let's write all dependency
lists in alphabetical order! :)

Under that understanding, the example dependency list you proposed
should (technically speaking) be totally fine. (I understand why it is
_in fact_ not, but please bear with me while I argue this position.)

If somebody does not want a specific package they should inform their
image-building tool about their preferences. They cannot rely on 1) the
fact that all package maintainer will get the order of dependency right
(sometime it is just not possible to make everybody happy) and 2) that
apt (or any other resolver) will choose the right set of packages to
install.

To the best of my understanding, `--variant=` in debootstrap and
mmdebstrap only changes the base set of packages to install; it does not
influence the negative set of packages that should not be installed, not
even as transitional dependencies (I don't think deboostrap even have
the concept of negative set of packages, but that is another story).

In other words, `--variant=minbase` may still pull in systemd (or any
other init system) as soon as one of the packages to be installed have
it in its (optional/alternative) dependencies.

(Here "init system" is just a placeholder for "any dependency that is
undesirable for the task at hand".)

Agreed. But shouldn't this be discussed on d-devel@ or a separate bug
report?

Regards,