]> git.ipfire.org Git - thirdparty/systemd.git/blame - docs/ENVIRONMENT.md
Merge pull request #20905 from medhefgo/boot-cleanup
[thirdparty/systemd.git] / docs / ENVIRONMENT.md
CommitLineData
c3e270f4
FB
1---
2title: Known Environment Variables
4cdca0af 3category: Interfaces
b41a3f66 4layout: default
0aff7b75 5SPDX-License-Identifier: LGPL-2.1-or-later
c3e270f4
FB
6---
7
4549fcdb
LP
8# Known Environment Variables
9
10A number of systemd components take additional runtime parameters via
11environment variables. Many of these environment variables are not supported at
12the same level as command line switches and other interfaces are: we don't
13document them in the man pages and we make no stability guarantees for
14them. While they generally are unlikely to be dropped any time soon again, we
15do not want to guarantee that they stay around for good either.
16
17Below is an (incomprehensive) list of the environment variables understood by
18the various tools. Note that this list only covers environment variables not
19documented in the proper man pages.
20
21All tools:
22
e7b86e48
ZJS
23* `$SYSTEMD_OFFLINE=[0|1]` — if set to `1`, then `systemctl` will refrain from
24 talking to PID 1; this has the same effect as the historical detection of
25 `chroot()`. Setting this variable to `0` instead has a similar effect as
54dcf847
LP
26 `$SYSTEMD_IGNORE_CHROOT=1`; i.e. tools will try to communicate with PID 1
27 even if a `chroot()` environment is detected. You almost certainly want to
28 set this to `1` if you maintain a package build system or similar and are
29 trying to use a modern container system and not plain `chroot()`.
f38951a6 30
4549fcdb 31* `$SYSTEMD_IGNORE_CHROOT=1` — if set, don't check whether being invoked in a
f38951a6 32 `chroot()` environment. This is particularly relevant for systemctl, as it
e7b86e48 33 will not alter its behaviour for `chroot()` environments if set. Normally it
f38951a6
CW
34 refrains from talking to PID 1 in such a case; turning most operations such
35 as `start` into no-ops. If that's what's explicitly desired, you might
54dcf847 36 consider setting `$SYSTEMD_OFFLINE=1`.
4549fcdb
LP
37
38* `$SD_EVENT_PROFILE_DELAYS=1` — if set, the sd-event event loop implementation
39 will print latency information at runtime.
40
53aa0d02 41* `$SYSTEMD_PROC_CMDLINE` — if set, the contents are used as the kernel command
e7b86e48 42 line instead of the actual one in `/proc/cmdline`. This is useful for
53aa0d02
ZJS
43 debugging, in order to test generators and other code against specific kernel
44 command lines.
45
e7b86e48 46* `$SYSTEMD_FSTAB` — if set, use this path instead of `/etc/fstab`. Only useful
ed4ad488
ZJS
47 for debugging.
48
e7b86e48
ZJS
49* `$SYSTEMD_CRYPTTAB` — if set, use this path instead of `/etc/crypttab`. Only
50 useful for debugging. Currently only supported by
51 `systemd-cryptsetup-generator`.
a6c57e74 52
1f1a2243
TA
53* `$SYSTEMD_INTEGRITYTAB` — if set, use this path instead of
54 `/etc/integritytab`. Only useful for debugging. Currently only supported by
55 `systemd-integritysetup-generator`.
56
e7b86e48
ZJS
57* `$SYSTEMD_VERITYTAB` — if set, use this path instead of
58 `/etc/veritytab`. Only useful for debugging. Currently only supported by
59 `systemd-veritysetup-generator`.
08b04ec7 60
2536752d 61* `$SYSTEMD_EFI_OPTIONS` — if set, used instead of the string in the
e7b86e48 62 `SystemdOptions` EFI variable. Analogous to `$SYSTEMD_PROC_CMDLINE`.
2467cc55 63
05c6f341
ZJS
64* `$SYSTEMD_DEFAULT_HOSTNAME` — override the compiled-in fallback hostname
65 (relevant in particular for the system manager and `systemd-hostnamed`).
66 Must be a valid hostname (either a single label or a FQDN).
67
1f22621b
KS
68* `$SYSTEMD_IN_INITRD=[auto|lenient|0|1]` — if set, specifies initrd detection
69 method. Defaults to `auto`. Behavior is defined as follows:
70 `auto`: Checks if `/etc/initrd-release` exists, and a temporary fs is mounted
71 on `/`. If both conditions meet, then it's in initrd.
38f3e0a5 72 `lenient`: Similar to `auto`, but the rootfs check is skipped.
1f22621b
KS
73 `0|1`: Simply overrides initrd detection. This is useful for debugging and
74 testing initrd-only programs in the main system.
0307ea49 75
385b2eb2
YW
76* `$SYSTEMD_BUS_TIMEOUT=SECS` — specifies the maximum time to wait for method call
77 completion. If no time unit is specified, assumes seconds. The usual other units
78 are understood, too (us, ms, s, min, h, d, w, month, y). If it is not set or set
79 to 0, then the built-in default is used.
80
5f1b0cc6 81* `$SYSTEMD_MEMPOOL=0` — if set, the internal memory caching logic employed by
e7b86e48 82 hash tables is turned off, and libc `malloc()` is used for all allocations.
b4f60743 83
e7b86e48 84* `$SYSTEMD_EMOJI=0` — if set, tools such as `systemd-analyze security` will
5f1b0cc6
LP
85 not output graphical smiley emojis, but ASCII alternatives instead. Note that
86 this only controls use of Unicode emoji glyphs, and has no effect on other
87 Unicode glyphs.
88
3f5ac303 89* `$RUNTIME_DIRECTORY` — various tools use this variable to locate the
e7b86e48
ZJS
90 appropriate path under `/run/`. This variable is also set by the manager when
91 `RuntimeDirectory=` is used, see systemd.exec(5).
3f5ac303 92
42f3b2f9 93* `$SYSTEMD_CRYPT_PREFIX` — if set configures the hash method prefix to use for
e7b86e48
ZJS
94 UNIX `crypt()` when generating passwords. By default the system's "preferred
95 method" is used, but this can be overridden with this environment variable.
96 Takes a prefix such as `$6$` or `$y$`. (Note that this is only honoured on
97 systems built with libxcrypt and is ignored on systems using glibc's
98 original, internal `crypt()` implementation.)
42f3b2f9 99
fbccb980
KH
100* `$SYSTEMD_RDRAND=0` — if set, the RDRAND instruction will never be used,
101 even if the CPU supports it.
102
54dcf847 103* `$SYSTEMD_SECCOMP=0` — if set, seccomp filters will not be enforced, even if
ce8f6d47
LP
104 support for it is compiled in and available in the kernel.
105
106* `$SYSTEMD_LOG_SECCOMP=1` — if set, system calls blocked by seccomp filtering,
e7b86e48
ZJS
107 for example in `systemd-nspawn`, will be logged to the audit log, if the
108 kernel supports this.
ce8f6d47 109
e7b86e48 110`systemctl`:
4549fcdb
LP
111
112* `$SYSTEMCTL_FORCE_BUS=1` — if set, do not connect to PID1's private D-Bus
113 listener, and instead always connect through the dbus-daemon D-bus broker.
114
115* `$SYSTEMCTL_INSTALL_CLIENT_SIDE=1` — if set, enable or disable unit files on
116 the client side, instead of asking PID 1 to do this.
117
e7b86e48 118* `$SYSTEMCTL_SKIP_SYSV=1` — if set, do not call SysV compatibility hooks.
4549fcdb 119
e7b86e48 120`systemd-nspawn`:
4549fcdb 121
e7b86e48
ZJS
122* `$SYSTEMD_NSPAWN_UNIFIED_HIERARCHY=1` — if set, force `systemd-nspawn` into
123 unified cgroup hierarchy mode.
4549fcdb 124
e7b86e48
ZJS
125* `$SYSTEMD_NSPAWN_API_VFS_WRITABLE=1` — if set, make `/sys/`, `/proc/sys/`,
126 and friends writable in the container. If set to "network", leave only
127 `/proc/sys/net/` writable.
4549fcdb
LP
128
129* `$SYSTEMD_NSPAWN_CONTAINER_SERVICE=…` — override the "service" name nspawn
130 uses to register with machined. If unset defaults to "nspawn", but with this
131 variable may be set to any other value.
132
133* `$SYSTEMD_NSPAWN_USE_CGNS=0` — if set, do not use cgroup namespacing, even if
134 it is available.
135
136* `$SYSTEMD_NSPAWN_LOCK=0` — if set, do not lock container images when running.
137
e7b86e48 138* `$SYSTEMD_NSPAWN_TMPFS_TMP=0` — if set, do not overmount `/tmp/` in the
1099ceeb
LP
139 container with a tmpfs, but leave the directory from the image in place.
140
e7b86e48 141`systemd-logind`:
4549fcdb
LP
142
143* `$SYSTEMD_BYPASS_HIBERNATION_MEMORY_CHECK=1` — if set, report that
144 hibernation is available even if the swap devices do not provide enough room
145 for it.
94fa1497 146
e7b86e48
ZJS
147* `$SYSTEMD_REBOOT_TO_FIRMWARE_SETUP` — if set, overrides `systemd-logind`'s
148 built-in EFI logic of requesting a reboot into the firmware. Takes a boolean.
149 If set to false, the functionality is turned off entirely. If set to true,
150 instead of requesting a reboot into the firmware setup UI through EFI a file,
151 `/run/systemd/reboot-to-firmware-setup` is created whenever this is
e86c7a3a
LP
152 requested. This file may be checked for by services run during system
153 shutdown in order to request the appropriate operation from the firmware in
154 an alternative fashion.
155
156* `$SYSTEMD_REBOOT_TO_BOOT_LOADER_MENU` — similar to the above, allows
e7b86e48
ZJS
157 overriding of `systemd-logind`'s built-in EFI logic of requesting a reboot
158 into the boot loader menu. Takes a boolean. If set to false, the
159 functionality is turned off entirely. If set to true, instead of requesting a
160 reboot into the boot loader menu through EFI, the file
161 `/run/systemd/reboot-to-boot-loader-menu` is created whenever this is
162 requested. The file contains the requested boot loader menu timeout in µs,
163 formatted in ASCII decimals, or zero in case no timeout is requested. This
164 file may be checked for by services run during system shutdown in order to
165 request the appropriate operation from the boot loader in an alternative
166 fashion.
e86c7a3a
LP
167
168* `$SYSTEMD_REBOOT_TO_BOOT_LOADER_ENTRY` — similar to the above, allows
e7b86e48
ZJS
169 overriding of `systemd-logind`'s built-in EFI logic of requesting a reboot
170 into a specific boot loader entry. Takes a boolean. If set to false, the
171 functionality is turned off entirely. If set to true, instead of requesting a
172 reboot into a specific boot loader entry through EFI, the file
e86c7a3a
LP
173 `/run/systemd/reboot-to-boot-loader-entry` is created whenever this is
174 requested. The file contains the requested boot loader entry identifier. This
175 file may be checked for by services run during system shutdown in order to
176 request the appropriate operation from the boot loader in an alternative
177 fashion. Note that by default only boot loader entries which follow the [Boot
178 Loader Specification](https://systemd.io/BOOT_LOADER_SPECIFICATION) and are
179 placed in the ESP or the Extended Boot Loader partition may be selected this
180 way. However, if a directory `/run/boot-loader-entries/` exists, the entries
181 are loaded from there instead. The directory should contain the usual
182 directory hierarchy mandated by the Boot Loader Specification, i.e. the entry
183 drop-ins should be placed in
184 `/run/boot-loader-entries/loader/entries/*.conf`, and the files referenced by
185 the drop-ins (including the kernels and initrds) somewhere else below
186 `/run/boot-loader-entries/`. Note that all these files may be (and are
e7b86e48 187 supposed to be) symlinks. `systemd-logind` will load these files on-demand,
e86c7a3a
LP
188 these files can hence be updated (ideally atomically) whenever the boot
189 loader configuration changes. A foreign boot loader installer script should
190 hence synthesize drop-in snippets and symlinks for all boot entries at boot
e7b86e48
ZJS
191 or whenever they change if it wants to integrate with `systemd-logind`'s
192 APIs.
e86c7a3a 193
e7b86e48 194`systemd-udevd`:
679dab6a 195
54dcf847 196* `$NET_NAMING_SCHEME=` — if set, takes a network naming scheme (i.e. one of
679dab6a 197 "v238", "v239", "v240"…, or the special value "latest") as parameter. If
e7b86e48
ZJS
198 specified udev's `net_id` builtin will follow the specified naming scheme
199 when determining stable network interface names. This may be used to revert
200 to naming schemes of older udev versions, in order to provide more stable
201 naming across updates. This environment variable takes precedence over the
202 kernel command line option `net.naming-scheme=`, except if the value is
203 prefixed with `:` in which case the kernel command line option takes
204 precedence, if it is specified as well.
679dab6a 205
e7b86e48 206`nss-systemd`:
dba1bd43
LP
207
208* `$SYSTEMD_NSS_BYPASS_SYNTHETIC=1` — if set, `nss-systemd` won't synthesize
209 user/group records for the `root` and `nobody` users if they are missing from
210 `/etc/passwd`.
211
212* `$SYSTEMD_NSS_DYNAMIC_BYPASS=1` — if set, `nss-systemd` won't return
213 user/group records for dynamically registered service users (i.e. users
214 registered through `DynamicUser=1`).
215
216* `$SYSTEMD_NSS_BYPASS_BUS=1` — if set, `nss-systemd` won't use D-Bus to do
217 dynamic user lookups. This is primarily useful to make `nss-systemd` work
218 safely from within `dbus-daemon`.
41d0da0f 219
e7b86e48 220`systemd-timedated`:
41d0da0f
YW
221
222* `$SYSTEMD_TIMEDATED_NTP_SERVICES=…` — colon-separated list of unit names of
223 NTP client services. If set, `timedatectl set-ntp on` enables and starts the
224 first existing unit listed in the environment variable, and
225 `timedatectl set-ntp off` disables and stops all listed units.
39922217 226
e7b86e48 227`systemd-sulogin-shell`:
33eb44fe
AH
228
229* `$SYSTEMD_SULOGIN_FORCE=1` — This skips asking for the root password if the
230 root password is not available (such as when the root account is locked).
231 See `sulogin(8)` for more details.
232
e7b86e48 233`bootctl` and other tools that access the EFI System Partition (ESP):
8cbb7d87
LP
234
235* `$SYSTEMD_RELAX_ESP_CHECKS=1` — if set, the ESP validation checks are
236 relaxed. Specifically, validation checks that ensure the specified ESP path
237 is a FAT file system are turned off, as are checks that the path is located
238 on a GPT partition with the correct type UUID.
239
cc7a0bfa
LP
240* `$SYSTEMD_ESP_PATH=…` — override the path to the EFI System Partition. This
241 may be used to override ESP path auto detection, and redirect any accesses to
e7b86e48
ZJS
242 the ESP to the specified directory. Note that unlike with `bootctl`'s
243 `--path=` switch only very superficial validation of the specified path is
244 done when this environment variable is used.
cc7a0bfa 245
e7b86e48 246`systemd` itself:
39922217
LP
247
248* `$SYSTEMD_ACTIVATION_UNIT` — set for all NSS and PAM module invocations that
249 are done by the service manager on behalf of a specific unit, in child
250 processes that are later (after execve()) going to become unit
251 processes. Contains the full unit name (e.g. "foobar.service"). NSS and PAM
252 modules can use this information to determine in which context and on whose
253 behalf they are being called, which may be useful to avoid deadlocks, for
254 example to bypass IPC calls to the very service that is about to be
255 started. Note that NSS and PAM modules should be careful to only rely on this
256 data when invoked privileged, or possibly only when getppid() returns 1, as
257 setting environment variables is of course possible in any even unprivileged
258 contexts.
259
260* `$SYSTEMD_ACTIVATION_SCOPE` — closely related to `$SYSTEMD_ACTIVATION_UNIT`,
261 it is either set to `system` or `user` depending on whether the NSS/PAM
262 module is called by systemd in `--system` or `--user` mode.
59f13dd6 263
e7b86e48 264`systemd-remount-fs`:
59f13dd6 265
d238709c 266* `$SYSTEMD_REMOUNT_ROOT_RW=1` — if set and no entry for the root directory
e7b86e48 267 exists in `/etc/fstab` (this file always takes precedence), then the root
59f13dd6 268 directory is remounted writable. This is primarily used by
e7b86e48 269 `systemd-gpt-auto-generator` to ensure the root partition is mounted writable
59f13dd6 270 in accordance to the GPT partition flags.
a7d9fccd 271
e7b86e48 272`systemd-firstboot` and `localectl`:
a7d9fccd 273
54dcf847 274* `$SYSTEMD_LIST_NON_UTF8_LOCALES=1` — if set, non-UTF-8 locales are listed among
a7d9fccd
LP
275 the installed ones. By default non-UTF-8 locales are suppressed from the
276 selection, since we are living in the 21st century.
7a87fb61 277
e7b86e48 278`systemd-sysext`:
7a87fb61 279
54dcf847 280* `$SYSTEMD_SYSEXT_HIERARCHIES` — this variable may be used to override which
e7b86e48
ZJS
281 hierarchies are managed by `systemd-sysext`. By default only `/usr/` and
282 `/opt/` are managed, and directories may be added or removed to that list by
283 setting this environment variable to a colon-separated list of absolute
284 paths. Only "real" file systems and directories that only contain "real" file
285 systems as submounts should be used. Do not specify API file systems such as
286 `/proc/` or `/sys/` here, or hierarchies that have them as submounts. In
287 particular, do not specify the root directory `/` here.
4368c60c 288
e7b86e48 289`systemd-tmpfiles`:
4368c60c 290
54dcf847 291* `$SYSTEMD_TMPFILES_FORCE_SUBVOL` — if unset, `v`/`q`/`Q` lines will create
e7b86e48
ZJS
292 subvolumes only if the OS itself is installed into a subvolume. If set to `1`
293 (or another value interpreted as true), these lines will always create
294 subvolumes if the backing filesystem supports them. If set to `0`, these
295 lines will always create directories.
07dc08c2
ZJS
296
297`systemd-sysv-generator`:
298
299* `$SYSTEMD_SYSVINIT_PATH` — Controls where `systemd-sysv-generator` looks for
300 SysV init scripts.
301
302* `$SYSTEMD_SYSVRCND_PATH` — Controls where `systemd-sysv-generator` looks for
303 SysV init script runlevel link farms.
48eb2af6 304
f0cb09bb
ZJS
305systemd tests:
306
307* `$SYSTEMD_TEST_DATA` — override the location of test data. This is useful if
308 a test executable is moved to an arbitrary location.
309
310* `$SYSTEMD_TEST_NSS_BUFSIZE` — size of scratch buffers for "reentrant"
311 functions exported by the nss modules.
312
48eb2af6
ZJS
313fuzzers:
314
315* `$SYSTEMD_FUZZ_OUTPUT` — A boolean that specifies whether to write output to
316 stdout. Setting to true is useful in manual invocations, since all output is
317 suppressed by default.
318
319* `$SYSTEMD_FUZZ_RUNS` — The number of times execution should be repeated in
320 manual invocations.
321
322Note that is may be also useful to set `$SYSTEMD_LOG_LEVEL`, since all logging
323is suppressed by default.
23851640 324
54dcf847 325`systemd-importd`:
23851640 326
54dcf847 327* `$SYSTEMD_IMPORT_BTRFS_SUBVOL` — takes a boolean, which controls whether to
23851640
LP
328 prefer creating btrfs subvolumes over plain directories for machine
329 images. Has no effect on non-btrfs file systems where subvolumes are not
330 available anyway. If not set, defaults to true.
331
54dcf847 332* `$SYSTEMD_IMPORT_BTRFS_QUOTA` — takes a boolean, which controls whether to set
23851640
LP
333 up quota automatically for created btrfs subvolumes for machine images. If
334 not set, defaults to true. Has no effect if machines are placed in regular
335 directories, because btrfs subvolumes are not supported or disabled. If
336 enabled, the quota group of the subvolume is automatically added to a
337 combined quota group for all such machine subvolumes.
338
54dcf847 339* `$SYSTEMD_IMPORT_SYNC` — takes a boolean, which controls whether to
23851640
LP
340 synchronize images to disk after installing them, before completing the
341 operation. If not set, defaults to true. If disabled installation of images
342 will be quicker, but not as safe.
54dcf847
LP
343
344`systemd-dissect`, `systemd-nspawn` and all other tools that may operate on
345disk images with `--image=` or similar:
346
347* `$SYSTEMD_DISSECT_VERITY_SIDECAR` — takes a boolean, which controls whether to
348 load "sidecar" Verity metadata files. If enabled (which is the default),
349 whenever a disk image is used, a set of files with the `.roothash`,
350 `.usrhash`, `.roothash.p7s`, `.usrhash.p7s`, `.verity` suffixes are searched
351 adjacent to disk image file, containing the Verity root hashes, their
352 signatures or the Verity data itself. If disabled this automatic discovery of
353 Verity metadata files is turned off.
354
355* `$SYSTEMD_DISSECT_VERITY_EMBEDDED` — takes a boolean, which controls whether
356 to load the embedded Verity signature data. If enabled (which is the
357 default), Verity root hash information and a suitable signature is
358 automatically acquired from a signature partition, following the
359 [Discoverable Partitions
360 Specification](https://systemd.io/DISCOVERABLE_PARTITIONS). If disabled any
361 such partition is ignored. Note that this only disables discovery of the root
362 hash and its signature, the Verity data partition itself is still searched in
363 the GPT image.
364
365* `$SYSTEMD_DISSECT_VERITY_SIGNATURE` — takes a boolean, which controls whether
366 to validate the signature of the Verity root hash if available. If enabled
367 (which is the default), the signature of suitable disk images is validated
368 against any of the certificates in `/etc/verity.d/*.crt` (and similar
369 directores in `/usr/lib/`, `/run`, …) or passed to the kernel for validation
370 against its built-in certificates.
ccd25f41
LP
371
372`systemd-cryptsetup`:
373
374* `$SYSTEMD_CRYPTSETUP_USE_TOKEN_MODULE` – takes a boolean, which controls
375 whether to use the libcryptsetup "token" plugin module logic even when
376 activating via FIDO2, PKCS#11, TPM2, i.e. mechanisms natively supported by
377 `systemd-cryptsetup`. Defaults to enabled.