]> git.ipfire.org Git - thirdparty/systemd.git/blob - docs/ENVIRONMENT.md
Merge pull request #29308 from aafeijoo-suse/dissect-fix
[thirdparty/systemd.git] / docs / ENVIRONMENT.md
1 ---
2 title: Known Environment Variables
3 category: Interfaces
4 layout: default
5 SPDX-License-Identifier: LGPL-2.1-or-later
6 ---
7
8 # Known Environment Variables
9
10 A number of systemd components take additional runtime parameters via
11 environment variables. Many of these environment variables are not supported at
12 the same level as command line switches and other interfaces are: we don't
13 document them in the man pages and we make no stability guarantees for
14 them. While they generally are unlikely to be dropped any time soon again, we
15 do not want to guarantee that they stay around for good either.
16
17 Below is an (incomprehensive) list of the environment variables understood by
18 the various tools. Note that this list only covers environment variables not
19 documented in the proper man pages.
20
21 All tools:
22
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
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()`.
30
31 * `$SYSTEMD_IGNORE_CHROOT=1` — if set, don't check whether being invoked in a
32 `chroot()` environment. This is particularly relevant for systemctl, as it
33 will not alter its behaviour for `chroot()` environments if set. Normally it
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
36 consider setting `$SYSTEMD_OFFLINE=1`.
37
38 * `$SYSTEMD_FIRST_BOOT=0|1` — if set, assume "first boot" condition to be false
39 or true, instead of checking the flag file created by PID 1.
40
41 * `$SD_EVENT_PROFILE_DELAYS=1` — if set, the sd-event event loop implementation
42 will print latency information at runtime.
43
44 * `$SYSTEMD_PROC_CMDLINE` — if set, the contents are used as the kernel command
45 line instead of the actual one in `/proc/cmdline`. This is useful for
46 debugging, in order to test generators and other code against specific kernel
47 command lines.
48
49 * `$SYSTEMD_OS_RELEASE` — if set, use this path instead of `/etc/os-release` or
50 `/usr/lib/os-release`. When operating under some root (e.g. `systemctl
51 --root=…`), the path is prefixed with the root. Only useful for debugging.
52
53 * `$SYSTEMD_FSTAB` — if set, use this path instead of `/etc/fstab`. Only useful
54 for debugging.
55
56 * `$SYSTEMD_SYSROOT_FSTAB` — if set, use this path instead of
57 `/sysroot/etc/fstab`. Only useful for debugging `systemd-fstab-generator`.
58
59 * `$SYSTEMD_SYSFS_CHECK` — takes a boolean. If set, overrides sysfs container
60 detection that ignores `/dev/` entries in fstab. Only useful for debugging
61 `systemd-fstab-generator`.
62
63 * `$SYSTEMD_CRYPTTAB` — if set, use this path instead of `/etc/crypttab`. Only
64 useful for debugging. Currently only supported by
65 `systemd-cryptsetup-generator`.
66
67 * `$SYSTEMD_INTEGRITYTAB` — if set, use this path instead of
68 `/etc/integritytab`. Only useful for debugging. Currently only supported by
69 `systemd-integritysetup-generator`.
70
71 * `$SYSTEMD_VERITYTAB` — if set, use this path instead of
72 `/etc/veritytab`. Only useful for debugging. Currently only supported by
73 `systemd-veritysetup-generator`.
74
75 * `$SYSTEMD_EFI_OPTIONS` — if set, used instead of the string in the
76 `SystemdOptions` EFI variable. Analogous to `$SYSTEMD_PROC_CMDLINE`.
77
78 * `$SYSTEMD_DEFAULT_HOSTNAME` — override the compiled-in fallback hostname
79 (relevant in particular for the system manager and `systemd-hostnamed`).
80 Must be a valid hostname (either a single label or a FQDN).
81
82 * `$SYSTEMD_IN_INITRD` — takes a boolean. If set, overrides initrd detection.
83 This is useful for debugging and testing initrd-only programs in the main
84 system.
85
86 * `$SYSTEMD_BUS_TIMEOUT=SECS` — specifies the maximum time to wait for method call
87 completion. If no time unit is specified, assumes seconds. The usual other units
88 are understood, too (us, ms, s, min, h, d, w, month, y). If it is not set or set
89 to 0, then the built-in default is used.
90
91 * `$SYSTEMD_MEMPOOL=0` — if set, the internal memory caching logic employed by
92 hash tables is turned off, and libc `malloc()` is used for all allocations.
93
94 * `$SYSTEMD_UTF8=` — takes a boolean value, and overrides whether to generate
95 non-ASCII special glyphs at various places (i.e. "→" instead of
96 "->"). Usually this is determined automatically, based on `$LC_CTYPE`, but in
97 scenarios where locale definitions are not installed it might make sense to
98 override this check explicitly.
99
100 * `$SYSTEMD_EMOJI=0` — if set, tools such as `systemd-analyze security` will
101 not output graphical smiley emojis, but ASCII alternatives instead. Note that
102 this only controls use of Unicode emoji glyphs, and has no effect on other
103 Unicode glyphs.
104
105 * `$RUNTIME_DIRECTORY` — various tools use this variable to locate the
106 appropriate path under `/run/`. This variable is also set by the manager when
107 `RuntimeDirectory=` is used, see systemd.exec(5).
108
109 * `$SYSTEMD_CRYPT_PREFIX` — if set configures the hash method prefix to use for
110 UNIX `crypt()` when generating passwords. By default the system's "preferred
111 method" is used, but this can be overridden with this environment variable.
112 Takes a prefix such as `$6$` or `$y$`. (Note that this is only honoured on
113 systems built with libxcrypt and is ignored on systems using glibc's
114 original, internal `crypt()` implementation.)
115
116 * `$SYSTEMD_SECCOMP=0` — if set, seccomp filters will not be enforced, even if
117 support for it is compiled in and available in the kernel.
118
119 * `$SYSTEMD_LOG_SECCOMP=1` — if set, system calls blocked by seccomp filtering,
120 for example in `systemd-nspawn`, will be logged to the audit log, if the
121 kernel supports this.
122
123 * `$SYSTEMD_ENABLE_LOG_CONTEXT` — if set, extra fields will always be logged to
124 the journal instead of only when logging in debug mode.
125
126 `systemctl`:
127
128 * `$SYSTEMCTL_FORCE_BUS=1` — if set, do not connect to PID 1's private D-Bus
129 listener, and instead always connect through the dbus-daemon D-bus broker.
130
131 * `$SYSTEMCTL_INSTALL_CLIENT_SIDE=1` — if set, enable or disable unit files on
132 the client side, instead of asking PID 1 to do this.
133
134 * `$SYSTEMCTL_SKIP_SYSV=1` — if set, do not call SysV compatibility hooks.
135
136 `systemd-nspawn`:
137
138 * `$SYSTEMD_NSPAWN_UNIFIED_HIERARCHY=1` — if set, force `systemd-nspawn` into
139 unified cgroup hierarchy mode.
140
141 * `$SYSTEMD_NSPAWN_API_VFS_WRITABLE=1` — if set, make `/sys/`, `/proc/sys/`,
142 and friends writable in the container. If set to "network", leave only
143 `/proc/sys/net/` writable.
144
145 * `$SYSTEMD_NSPAWN_CONTAINER_SERVICE=…` — override the "service" name nspawn
146 uses to register with machined. If unset defaults to "nspawn", but with this
147 variable may be set to any other value.
148
149 * `$SYSTEMD_NSPAWN_USE_CGNS=0` — if set, do not use cgroup namespacing, even if
150 it is available.
151
152 * `$SYSTEMD_NSPAWN_LOCK=0` — if set, do not lock container images when running.
153
154 * `$SYSTEMD_NSPAWN_TMPFS_TMP=0` — if set, do not overmount `/tmp/` in the
155 container with a tmpfs, but leave the directory from the image in place.
156
157 * `$SYSTEMD_SUPPRESS_SYNC=1` — if set, all disk synchronization syscalls are
158 blocked to the container payload (e.g. `sync()`, `fsync()`, `syncfs()`, …)
159 and the `O_SYNC`/`O_DSYNC` flags are made unavailable to `open()` and
160 friends. This is equivalent to passing `--suppress-sync=yes` on the
161 `systemd-nspawn` command line.
162
163 `systemd-logind`:
164
165 * `$SYSTEMD_BYPASS_HIBERNATION_MEMORY_CHECK=1` — if set, report that
166 hibernation is available even if the swap devices do not provide enough room
167 for it.
168
169 * `$SYSTEMD_REBOOT_TO_FIRMWARE_SETUP` — if set, overrides `systemd-logind`'s
170 built-in EFI logic of requesting a reboot into the firmware. Takes a boolean.
171 If set to false, the functionality is turned off entirely. If set to true,
172 instead of requesting a reboot into the firmware setup UI through EFI a file,
173 `/run/systemd/reboot-to-firmware-setup` is created whenever this is
174 requested. This file may be checked for by services run during system
175 shutdown in order to request the appropriate operation from the firmware in
176 an alternative fashion.
177
178 * `$SYSTEMD_REBOOT_TO_BOOT_LOADER_MENU` — similar to the above, allows
179 overriding of `systemd-logind`'s built-in EFI logic of requesting a reboot
180 into the boot loader menu. Takes a boolean. If set to false, the
181 functionality is turned off entirely. If set to true, instead of requesting a
182 reboot into the boot loader menu through EFI, the file
183 `/run/systemd/reboot-to-boot-loader-menu` is created whenever this is
184 requested. The file contains the requested boot loader menu timeout in µs,
185 formatted in ASCII decimals, or zero in case no timeout is requested. This
186 file may be checked for by services run during system shutdown in order to
187 request the appropriate operation from the boot loader in an alternative
188 fashion.
189
190 * `$SYSTEMD_REBOOT_TO_BOOT_LOADER_ENTRY` — similar to the above, allows
191 overriding of `systemd-logind`'s built-in EFI logic of requesting a reboot
192 into a specific boot loader entry. Takes a boolean. If set to false, the
193 functionality is turned off entirely. If set to true, instead of requesting a
194 reboot into a specific boot loader entry through EFI, the file
195 `/run/systemd/reboot-to-boot-loader-entry` is created whenever this is
196 requested. The file contains the requested boot loader entry identifier. This
197 file may be checked for by services run during system shutdown in order to
198 request the appropriate operation from the boot loader in an alternative
199 fashion. Note that by default only boot loader entries which follow the
200 [Boot Loader Specification](https://uapi-group.org/specifications/specs/boot_loader_specification)
201 and are placed in the ESP or the Extended Boot Loader partition may be
202 selected this way. However, if a directory `/run/boot-loader-entries/`
203 exists, the entries are loaded from there instead. The directory should
204 contain the usual directory hierarchy mandated by the Boot Loader
205 Specification, i.e. the entry drop-ins should be placed in
206 `/run/boot-loader-entries/loader/entries/*.conf`, and the files referenced by
207 the drop-ins (including the kernels and initrds) somewhere else below
208 `/run/boot-loader-entries/`. Note that all these files may be (and are
209 supposed to be) symlinks. `systemd-logind` will load these files on-demand,
210 these files can hence be updated (ideally atomically) whenever the boot
211 loader configuration changes. A foreign boot loader installer script should
212 hence synthesize drop-in snippets and symlinks for all boot entries at boot
213 or whenever they change if it wants to integrate with `systemd-logind`'s
214 APIs.
215
216 `systemd-udevd` and sd-device library:
217
218 * `$NET_NAMING_SCHEME=` — if set, takes a network naming scheme (i.e. one of
219 "v238", "v239", "v240"…, or the special value "latest") as parameter. If
220 specified udev's `net_id` builtin will follow the specified naming scheme
221 when determining stable network interface names. This may be used to revert
222 to naming schemes of older udev versions, in order to provide more stable
223 naming across updates. This environment variable takes precedence over the
224 kernel command line option `net.naming-scheme=`, except if the value is
225 prefixed with `:` in which case the kernel command line option takes
226 precedence, if it is specified as well.
227
228 * `$SYSTEMD_DEVICE_VERIFY_SYSFS` — if set to "0", disables verification that
229 devices sysfs path are actually backed by sysfs. Relaxing this verification
230 is useful for testing purposes.
231
232 `nss-systemd`:
233
234 * `$SYSTEMD_NSS_BYPASS_SYNTHETIC=1` — if set, `nss-systemd` won't synthesize
235 user/group records for the `root` and `nobody` users if they are missing from
236 `/etc/passwd`.
237
238 * `$SYSTEMD_NSS_DYNAMIC_BYPASS=1` — if set, `nss-systemd` won't return
239 user/group records for dynamically registered service users (i.e. users
240 registered through `DynamicUser=1`).
241
242 `systemd-timedated`:
243
244 * `$SYSTEMD_TIMEDATED_NTP_SERVICES=…` — colon-separated list of unit names of
245 NTP client services. If set, `timedatectl set-ntp on` enables and starts the
246 first existing unit listed in the environment variable, and
247 `timedatectl set-ntp off` disables and stops all listed units.
248
249 `systemd-sulogin-shell`:
250
251 * `$SYSTEMD_SULOGIN_FORCE=1` — This skips asking for the root password if the
252 root password is not available (such as when the root account is locked).
253 See `sulogin(8)` for more details.
254
255 `bootctl` and other tools that access the EFI System Partition (ESP):
256
257 * `$SYSTEMD_RELAX_ESP_CHECKS=1` — if set, the ESP validation checks are
258 relaxed. Specifically, validation checks that ensure the specified ESP path
259 is a FAT file system are turned off, as are checks that the path is located
260 on a GPT partition with the correct type UUID.
261
262 * `$SYSTEMD_ESP_PATH=…` — override the path to the EFI System Partition. This
263 may be used to override ESP path auto detection, and redirect any accesses to
264 the ESP to the specified directory. Note that unlike with `bootctl`'s
265 `--path=` switch only very superficial validation of the specified path is
266 done when this environment variable is used.
267
268 * `$KERNEL_INSTALL_CONF_ROOT=…` — override the built in default configuration
269 directory /etc/kernel/ to read files like entry-token and install.conf from.
270
271 `systemd` itself:
272
273 * `$SYSTEMD_ACTIVATION_UNIT` — set for all NSS and PAM module invocations that
274 are done by the service manager on behalf of a specific unit, in child
275 processes that are later (after execve()) going to become unit
276 processes. Contains the full unit name (e.g. "foobar.service"). NSS and PAM
277 modules can use this information to determine in which context and on whose
278 behalf they are being called, which may be useful to avoid deadlocks, for
279 example to bypass IPC calls to the very service that is about to be
280 started. Note that NSS and PAM modules should be careful to only rely on this
281 data when invoked privileged, or possibly only when getppid() returns 1, as
282 setting environment variables is of course possible in any even unprivileged
283 contexts.
284
285 * `$SYSTEMD_ACTIVATION_SCOPE` — closely related to `$SYSTEMD_ACTIVATION_UNIT`,
286 it is either set to `system` or `user` depending on whether the NSS/PAM
287 module is called by systemd in `--system` or `--user` mode.
288
289 * `$SYSTEMD_SUPPORT_DEVICE`, `$SYSTEMD_SUPPORT_MOUNT`, `$SYSTEMD_SUPPORT_SWAP` -
290 can be set to `0` to mark respective unit type as unsupported. Generally,
291 having less units saves system resources so these options might be useful
292 for cases where we don't need to track given unit type, e.g. `--user` manager
293 often doesn't need to deal with device or swap units because they are
294 handled by the `--system` manager (PID 1). Note that setting certain unit
295 type as unsupported may not prevent loading some units of that type if they
296 are referenced by other units of another supported type.
297
298 * `$SYSTEMD_DEFAULT_MOUNT_RATE_LIMIT_BURST` — can be set to override the mount
299 units burst rate limit for parsing `/proc/self/mountinfo`. On a system with
300 few resources but many mounts the rate limit may be hit, which will cause the
301 processing of mount units to stall. The burst limit may be adjusted when the
302 default is not appropriate for a given system. Defaults to `5`, accepts
303 positive integers.
304
305 `systemd-remount-fs`:
306
307 * `$SYSTEMD_REMOUNT_ROOT_RW=1` — if set and no entry for the root directory
308 exists in `/etc/fstab` (this file always takes precedence), then the root
309 directory is remounted writable. This is primarily used by
310 `systemd-gpt-auto-generator` to ensure the root partition is mounted writable
311 in accordance to the GPT partition flags.
312
313 `systemd-firstboot` and `localectl`:
314
315 * `$SYSTEMD_LIST_NON_UTF8_LOCALES=1` — if set, non-UTF-8 locales are listed among
316 the installed ones. By default non-UTF-8 locales are suppressed from the
317 selection, since we are living in the 21st century.
318
319 `systemd-resolved`:
320
321 * `$SYSTEMD_RESOLVED_SYNTHESIZE_HOSTNAME` — if set to "0", `systemd-resolved`
322 won't synthesize system hostname on both regular and reverse lookups.
323
324 `systemd-sysext`:
325
326 * `$SYSTEMD_SYSEXT_HIERARCHIES` — this variable may be used to override which
327 hierarchies are managed by `systemd-sysext`. By default only `/usr/` and
328 `/opt/` are managed, and directories may be added or removed to that list by
329 setting this environment variable to a colon-separated list of absolute
330 paths. Only "real" file systems and directories that only contain "real" file
331 systems as submounts should be used. Do not specify API file systems such as
332 `/proc/` or `/sys/` here, or hierarchies that have them as submounts. In
333 particular, do not specify the root directory `/` here. Similarly,
334 `$SYSTEMD_CONFEXT_HIERARCHIES` works for confext images and supports the
335 systemd-confext multi-call functionality of sysext.
336
337 `systemd-tmpfiles`:
338
339 * `$SYSTEMD_TMPFILES_FORCE_SUBVOL` — if unset, `v`/`q`/`Q` lines will create
340 subvolumes only if the OS itself is installed into a subvolume. If set to `1`
341 (or another value interpreted as true), these lines will always create
342 subvolumes if the backing filesystem supports them. If set to `0`, these
343 lines will always create directories.
344
345 `systemd-sysusers`
346
347 * `$SOURCE_DATE_EPOCH` — if unset, the field of the date of last password change
348 in `/etc/shadow` will be the number of days from Jan 1, 1970 00:00 UTC until
349 today. If `$SOURCE_DATE_EPOCH` is set to a valid UNIX epoch value in seconds,
350 then the field will be the number of days until that time instead. This is to
351 support creating bit-by-bit reproducible system images by choosing a
352 reproducible value for the field of the date of last password change in
353 `/etc/shadow`. See: https://reproducible-builds.org/specs/source-date-epoch/
354
355 `systemd-sysv-generator`:
356
357 * `$SYSTEMD_SYSVINIT_PATH` — Controls where `systemd-sysv-generator` looks for
358 SysV init scripts.
359
360 * `$SYSTEMD_SYSVRCND_PATH` — Controls where `systemd-sysv-generator` looks for
361 SysV init script runlevel link farms.
362
363 systemd tests:
364
365 * `$SYSTEMD_TEST_DATA` — override the location of test data. This is useful if
366 a test executable is moved to an arbitrary location.
367
368 * `$SYSTEMD_TEST_NSS_BUFSIZE` — size of scratch buffers for "reentrant"
369 functions exported by the nss modules.
370
371 * `$TESTFUNCS` – takes a colon separated list of test functions to invoke,
372 causes all non-matching test functions to be skipped. Only applies to tests
373 using our regular test boilerplate.
374
375 fuzzers:
376
377 * `$SYSTEMD_FUZZ_OUTPUT` — A boolean that specifies whether to write output to
378 stdout. Setting to true is useful in manual invocations, since all output is
379 suppressed by default.
380
381 * `$SYSTEMD_FUZZ_RUNS` — The number of times execution should be repeated in
382 manual invocations.
383
384 Note that it may be also useful to set `$SYSTEMD_LOG_LEVEL`, since all logging
385 is suppressed by default.
386
387 `systemd-importd`:
388
389 * `$SYSTEMD_IMPORT_BTRFS_SUBVOL` — takes a boolean, which controls whether to
390 prefer creating btrfs subvolumes over plain directories for machine
391 images. Has no effect on non-btrfs file systems where subvolumes are not
392 available anyway. If not set, defaults to true.
393
394 * `$SYSTEMD_IMPORT_BTRFS_QUOTA` — takes a boolean, which controls whether to set
395 up quota automatically for created btrfs subvolumes for machine images. If
396 not set, defaults to true. Has no effect if machines are placed in regular
397 directories, because btrfs subvolumes are not supported or disabled. If
398 enabled, the quota group of the subvolume is automatically added to a
399 combined quota group for all such machine subvolumes.
400
401 * `$SYSTEMD_IMPORT_SYNC` — takes a boolean, which controls whether to
402 synchronize images to disk after installing them, before completing the
403 operation. If not set, defaults to true. If disabled installation of images
404 will be quicker, but not as safe.
405
406 `systemd-dissect`, `systemd-nspawn` and all other tools that may operate on
407 disk images with `--image=` or similar:
408
409 * `$SYSTEMD_DISSECT_VERITY_SIDECAR` — takes a boolean, which controls whether to
410 load "sidecar" Verity metadata files. If enabled (which is the default),
411 whenever a disk image is used, a set of files with the `.roothash`,
412 `.usrhash`, `.roothash.p7s`, `.usrhash.p7s`, `.verity` suffixes are searched
413 adjacent to disk image file, containing the Verity root hashes, their
414 signatures or the Verity data itself. If disabled this automatic discovery of
415 Verity metadata files is turned off.
416
417 * `$SYSTEMD_DISSECT_VERITY_EMBEDDED` — takes a boolean, which controls whether
418 to load the embedded Verity signature data. If enabled (which is the
419 default), Verity root hash information and a suitable signature is
420 automatically acquired from a signature partition, following the
421 [Discoverable Partitions Specification](https://uapi-group.org/specifications/specs/discoverable_partitions_specification).
422 If disabled any such partition is ignored. Note that this only disables
423 discovery of the root hash and its signature, the Verity data partition
424 itself is still searched in the GPT image.
425
426 * `$SYSTEMD_DISSECT_VERITY_SIGNATURE` — takes a boolean, which controls whether
427 to validate the signature of the Verity root hash if available. If enabled
428 (which is the default), the signature of suitable disk images is validated
429 against any of the certificates in `/etc/verity.d/*.crt` (and similar
430 directories in `/usr/lib/`, `/run`, …) or passed to the kernel for validation
431 against its built-in certificates.
432
433 * `$SYSTEMD_DISSECT_VERITY_TIMEOUT_SEC=sec` — takes a timespan, which controls
434 the timeout waiting for the image to be configured. Defaults to 100 msec.
435
436 * `$SYSTEMD_DISSECT_FILE_SYSTEMS=` — takes a colon-separated list of file
437 systems that may be mounted for automatically dissected disk images. If not
438 specified defaults to something like: `ext4:btrfs:xfs:vfat:erofs:squashfs`
439
440 * `$SYSTEMD_LOOP_DIRECT_IO` – takes a boolean, which controls whether to enable
441 `LO_FLAGS_DIRECT_IO` (i.e. direct IO + asynchronous IO) on loopback block
442 devices when opening them. Defaults to on, set this to "0" to disable this
443 feature.
444
445 `systemd-cryptsetup`:
446
447 * `$SYSTEMD_CRYPTSETUP_USE_TOKEN_MODULE` – takes a boolean, which controls
448 whether to use the libcryptsetup "token" plugin module logic even when
449 activating via FIDO2, PKCS#11, TPM2, i.e. mechanisms natively supported by
450 `systemd-cryptsetup`. Defaults to enabled.
451
452 Various tools that read passwords from the TTY, such as `systemd-cryptenroll`
453 and `homectl`:
454
455 * `$PASSWORD` — takes a string: the literal password to use. If this
456 environment variable is set it is used as password instead of prompting the
457 user interactively. This exists primarily for debugging and testing
458 purposes. Do not use this for production code paths, since environment
459 variables are typically inherited down the process tree without restrictions
460 and should thus not be used for secrets.
461
462 * `$NEWPASSWORD` — similar to `$PASSWORD` above, but is used when both a
463 current and a future password are required, for example if the password is to
464 be changed. In that case `$PASSWORD` shall carry the current (i.e. old)
465 password and `$NEWPASSWORD` the new.
466
467 `systemd-homed`:
468
469 * `$SYSTEMD_HOME_ROOT` – defines an absolute path where to look for home
470 directories/images. When unspecified defaults to `/home/`. This is useful for
471 debugging purposes in order to run a secondary `systemd-homed` instance that
472 operates on a different directory where home directories/images are placed.
473
474 * `$SYSTEMD_HOME_RECORD_DIR` – defines an absolute path where to look for
475 fixated home records kept on the host. When unspecified defaults to
476 `/var/lib/systemd/home/`. Similar to `$SYSTEMD_HOME_ROOT` this is useful for
477 debugging purposes, in order to run a secondary `systemd-homed` instance that
478 operates on a record database entirely separate from the host's.
479
480 * `$SYSTEMD_HOME_DEBUG_SUFFIX` – takes a short string that is suffixed to
481 `systemd-homed`'s D-Bus and Varlink service names/sockets. This is also
482 understood by `homectl`. This too is useful for running an additional copy of
483 `systemd-homed` that doesn't interfere with the host's main one.
484
485 * `$SYSTEMD_HOMEWORK_PATH` – configures the path to the `systemd-homework`
486 binary to invoke. If not specified defaults to
487 `/usr/lib/systemd/systemd-homework`.
488
489 Combining these four environment variables is pretty useful when
490 debugging/developing `systemd-homed`:
491 ```sh
492 SYSTEMD_HOME_DEBUG_SUFFIX=foo \
493 SYSTEMD_HOMEWORK_PATH=/home/lennart/projects/systemd/build/systemd-homework \
494 SYSTEMD_HOME_ROOT=/home.foo/ \
495 SYSTEMD_HOME_RECORD_DIR=/var/lib/systemd/home.foo/ \
496 /home/lennart/projects/systemd/build/systemd-homed
497 ```
498
499 * `$SYSTEMD_HOME_MOUNT_OPTIONS_BTRFS`, `$SYSTEMD_HOME_MOUNT_OPTIONS_EXT4`,
500 `$SYSTEMD_HOME_MOUNT_OPTIONS_XFS` – configure the default mount options to
501 use for LUKS home directories, overriding the built-in default mount
502 options. There's one variable for each of the supported file systems for the
503 LUKS home directory backend.
504
505 * `$SYSTEMD_HOME_MKFS_OPTIONS_BTRFS`, `$SYSTEMD_HOME_MKFS_OPTIONS_EXT4`,
506 `$SYSTEMD_HOME_MKFS_OPTIONS_XFS` – configure additional arguments to use for
507 `mkfs` when formatting LUKS home directories. There's one variable for each
508 of the supported file systems for the LUKS home directory backend.
509
510 `kernel-install`:
511
512 * `$KERNEL_INSTALL_BYPASS` – If set to "1", execution of kernel-install is skipped
513 when kernel-install is invoked. This can be useful if kernel-install is invoked
514 unconditionally as a child process by another tool, such as package managers
515 running kernel-install in a postinstall script.
516
517 `systemd-journald`, `journalctl`:
518
519 * `$SYSTEMD_JOURNAL_COMPACT` – Takes a boolean. If enabled, journal files are written
520 in a more compact format that reduces the amount of disk space required by the
521 journal. Note that journal files in compact mode are limited to 4G to allow use of
522 32-bit offsets. Enabled by default.
523
524 * `$SYSTEMD_JOURNAL_COMPRESS` – Takes a boolean, or one of the compression
525 algorithms "XZ", "LZ4", and "ZSTD". If enabled, the default compression
526 algorithm set at compile time will be used when opening a new journal file.
527 If disabled, the journal file compression will be disabled. Note that the
528 compression mode of existing journal files are not changed. To make the
529 specified algorithm takes an effect immediately, you need to explicitly run
530 `journalctl --rotate`.
531
532 * `$SYSTEMD_CATALOG` – path to the compiled catalog database file to use for
533 `journalctl -x`, `journalctl --update-catalog`, `journalctl --list-catalog`
534 and related calls.
535
536 * `$SYSTEMD_CATALOG_SOURCES` – path to the catalog database input source
537 directory to use for `journalctl --update-catalog`.
538
539 `systemd-pcrextend`, `systemd-cryptsetup`:
540
541 * `$SYSTEMD_FORCE_MEASURE=1` — If set, force measuring of resources (which are
542 marked for measurement) even if not booted on a kernel equipped with
543 systemd-stub. Normally, requested measurement of resources is conditionalized
544 on kernels that have booted with `systemd-stub`. With this environment
545 variable the test for that my be bypassed, for testing purposes.
546
547 `systemd-repart`:
548
549 * `$SYSTEMD_REPART_MKFS_OPTIONS_<FSTYPE>` – configure additional arguments to use for
550 `mkfs` when formatting partition file systems. There's one variable for each
551 of the supported file systems.