summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/ENVIRONMENT.md14
-rw-r--r--src/basic/virt.c7
-rw-r--r--test/test-systemctl-enable.sh2
-rwxr-xr-xtest/units/TEST-74-AUX-UTILS.detect-virt.sh7
4 files changed, 22 insertions, 8 deletions
diff --git a/docs/ENVIRONMENT.md b/docs/ENVIRONMENT.md
index 5848c0fd80..c416370440 100644
--- a/docs/ENVIRONMENT.md
+++ b/docs/ENVIRONMENT.md
@@ -23,17 +23,17 @@ All tools:
* `$SYSTEMD_OFFLINE=[0|1]` — if set to `1`, then `systemctl` will refrain from
talking to PID 1; this has the same effect as the historical detection of
`chroot()`. Setting this variable to `0` instead has a similar effect as
- `$SYSTEMD_IGNORE_CHROOT=1`; i.e. tools will try to communicate with PID 1
+ `$SYSTEMD_IN_CHROOT=0`; i.e. tools will try to communicate with PID 1
even if a `chroot()` environment is detected. You almost certainly want to
set this to `1` if you maintain a package build system or similar and are
trying to use a modern container system and not plain `chroot()`.
-* `$SYSTEMD_IGNORE_CHROOT=1` — if set, don't check whether being invoked in a
- `chroot()` environment. This is particularly relevant for systemctl, as it
- will not alter its behaviour for `chroot()` environments if set. Normally it
- refrains from talking to PID 1 in such a case; turning most operations such
- as `start` into no-ops. If that's what's explicitly desired, you might
- consider setting `$SYSTEMD_OFFLINE=1`.
+* `$SYSTEMD_IN_CHROOT=0|1` — takes a boolean. If set, overrides chroot detection.
+ This is particularly relevant for systemctl, as it will not alter its behaviour
+ for `chroot()` environments if `SYSTEMD_IN_CHROOT=0`. Normally it refrains from
+ talking to PID 1 in such a case; turning most operations such as `start` into
+ no-ops. If that's what's explicitly desired, you might consider setting
+ `$SYSTEMD_OFFLINE=1`.
* `$SYSTEMD_FIRST_BOOT=0|1` — if set, assume "first boot" condition to be false
or true, instead of checking the flag file created by PID 1.
diff --git a/src/basic/virt.c b/src/basic/virt.c
index 09703506f9..2cb3a08393 100644
--- a/src/basic/virt.c
+++ b/src/basic/virt.c
@@ -896,6 +896,13 @@ int running_in_chroot(void) {
* mount /proc, so all other programs can assume that if /proc is *not* available, we're in some
* chroot. */
+ r = getenv_bool("SYSTEMD_IN_CHROOT");
+ if (r >= 0)
+ return r > 0;
+ if (r != -ENXIO)
+ log_debug_errno(r, "Failed to parse $SYSTEMD_IN_CHROOT, ignoring: %m");
+
+ /* Deprecated but kept for backwards compatibility. */
if (getenv_bool("SYSTEMD_IGNORE_CHROOT") > 0)
return 0;
diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
index 5615c900f4..3fc59f6f9e 100644
--- a/test/test-systemctl-enable.sh
+++ b/test/test-systemctl-enable.sh
@@ -3,7 +3,7 @@
set -ex
# Silence warning from running_in_chroot_or_offline()
-export SYSTEMD_IGNORE_CHROOT=1
+export SYSTEMD_IN_CHROOT=0
systemctl=${1:-systemctl}
systemd_id128=${2:-systemd-id128}
diff --git a/test/units/TEST-74-AUX-UTILS.detect-virt.sh b/test/units/TEST-74-AUX-UTILS.detect-virt.sh
new file mode 100755
index 0000000000..fe1db4d2aa
--- /dev/null
+++ b/test/units/TEST-74-AUX-UTILS.detect-virt.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+# SPDX-License-Identifier: LGPL-2.1-or-later
+set -eux
+set -o pipefail
+
+SYSTEMD_IN_CHROOT=1 systemd-detect-virt --chroot
+(! SYSTEMD_IN_CHROOT=0 systemd-detect-virt --chroot)