Hi!

On Tue, 2025-08-12 at 11:35:21 +0200, Ferenc Wágner wrote:
> What I miss here is when dpkg sets the DPKG_ROOT variable to something
> non-empty.  From the text I understand that dpkg sets DPKG_ROOT to the
> empty string when --root and --instdir are not set (so "normally").
> Furthermore, dpkg also sets DPKG_ROOT to the empty string when --root or
> --instdir is set, *unless* --force-script-chrootless is also specified
> (because the maintainer scripts are run in a chroot then).  So it would
> seem sensible if dpkg set DPKG_ROOT to the value of --instdir (or
> --root) if either of them is specified, *and* --force-script-chrootless
> is also specified.  But the text does not say that, instead it contrasts
> DPKG_ROOT being empty with instdir being non-empty.  This is unexpected,
> and I don't even understand instdir in the "Internal environment"
> context where this paragraph resides.
> 
> I'm not sure I managed to express my difficulty any better now...

Ah! I think I see what you mean now. Would the attached patch fix the
confusing text?

(I also noticed that there's no documentation for dpkg honoring
DPKG_ROOT and DPKG_ADMINDIR being set when it runs, which was a
recentish behavior change, will document that too.)

Thanks,
Guillem
diff --git i/man/dpkg.pod w/man/dpkg.pod
index 8349f0afd..001373b75 100644
--- i/man/dpkg.pod
+++ w/man/dpkg.pod
@@ -1438,8 +1438,8 @@ During normal operation, this variable is empty.
 When installing packages into a different B<instdir>, B<dpkg>
 normally invokes maintainer scripts using L<chroot(2)> and leaves
 this variable empty, but if B<--force-script-chrootless> is
-specified then the L<chroot(2)> call is skipped and B<instdir>
-is non-empty.
+specified then the L<chroot(2)> call is skipped and
+this variable is set to B<instdir> (which will be non-empty).
 
 =item B<DPKG_ADMINDIR>
 

Reply via email to