diff options
-rw-r--r-- | docs/ENVIRONMENT.md | 14 | ||||
-rw-r--r-- | src/basic/virt.c | 7 | ||||
-rw-r--r-- | test/test-systemctl-enable.sh | 2 | ||||
-rwxr-xr-x | test/units/TEST-74-AUX-UTILS.detect-virt.sh | 7 |
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) |