udev: String substitutions can be done in ENV, too
[systemd_ALT.git] / README
blob6f9a56c809acba2e8dc5f6503b04a32435a2282e
1 systemd System and Service Manager
3 WEB SITE:
4         https://systemd.io
6 GIT:
7         git@github.com:systemd/systemd.git
8         https://github.com/systemd/systemd
10 MAILING LIST:
11         https://lists.freedesktop.org/mailman/listinfo/systemd-devel
13 IRC:
14         #systemd on irc.libera.chat
16 BUG REPORTS:
17         https://github.com/systemd/systemd/issues
19 OLDER DOCUMENTATION:
20         https://0pointer.de/blog/projects/systemd.html
21         https://www.freedesktop.org/wiki/Software/systemd
23 AUTHOR:
24         Lennart Poettering
25         Kay Sievers
26         ...and many others
28 LICENSE:
29         LGPL-2.1-or-later for all code, exceptions noted in LICENSES/README.md
31 REQUIREMENTS:
32         Linux kernel ≥ 3.15
33                      ≥ 4.3 for ambient capabilities
34                      ≥ 4.5 for pids controller in cgroup v2
35                      ≥ 4.6 for cgroup namespaces
36                      ≥ 4.9 for RENAME_NOREPLACE support in vfat
37                      ≥ 4.10 for cgroup-bpf egress and ingress hooks
38                      ≥ 4.15 for cgroup-bpf device hook and cpu controller in cgroup v2
39                      ≥ 4.17 for cgroup-bpf socket address hooks
40                      ≥ 4.20 for PSI (used by systemd-oomd)
41                      ≥ 5.3 for bounded loops in BPF program
42                      ≥ 5.4 for signed Verity images
43                      ≥ 5.7 for BPF links and the BPF LSM hook
45         ⛔ Kernel versions below 3.15 ("minimum baseline") are not supported at
46         all, and are missing required functionality (e.g. CLOCK_BOOTTIME
47         support for timerfd_create()).
49         ⚠️ Kernel versions below 4.15 ("recommended baseline") have significant
50         gaps in functionality and are not recommended for use with this version
51         of systemd (e.g. lack sufficiently comprehensive and working cgroupv2
52         support). Taint flag 'old-kernel' will be set. systemd will most likely
53         still function, but upstream support and testing are limited.
55         Kernel Config Options:
56           CONFIG_DEVTMPFS
57           CONFIG_CGROUPS (it is OK to disable all controllers)
58           CONFIG_INOTIFY_USER
59           CONFIG_SIGNALFD
60           CONFIG_TIMERFD
61           CONFIG_EPOLL
62           CONFIG_UNIX (it requires CONFIG_NET, but every other flag in it is not necessary)
63           CONFIG_SYSFS
64           CONFIG_PROC_FS
65           CONFIG_FHANDLE (libudev, mount and bind mount handling)
67         udev will fail to work with the legacy sysfs layout:
68           CONFIG_SYSFS_DEPRECATED=n
70         Legacy hotplug slows down the system and confuses udev:
71           CONFIG_UEVENT_HELPER_PATH=""
73         Userspace firmware loading is not supported and should be disabled in
74         the kernel:
75           CONFIG_FW_LOADER_USER_HELPER=n
77         Some udev rules and virtualization detection relies on it:
78           CONFIG_DMIID
80         Support for some SCSI devices serial number retrieval, to create
81         additional symlinks in /dev/disk/ and /dev/tape:
82           CONFIG_BLK_DEV_BSG
84         Required for PrivateNetwork= in service units:
85           CONFIG_NET_NS
86         Note that systemd-localed.service and other systemd units use
87         PrivateNetwork so this is effectively required.
89         Required for PrivateUsers= in service units:
90           CONFIG_USER_NS
92         Optional but strongly recommended:
93           CONFIG_IPV6
94           CONFIG_AUTOFS_FS
95           CONFIG_TMPFS_XATTR
96           CONFIG_{TMPFS,EXT4_FS,XFS,BTRFS_FS,...}_POSIX_ACL
97           CONFIG_SECCOMP
98           CONFIG_SECCOMP_FILTER (required for seccomp support)
99           CONFIG_KCMP (for the kcmp() syscall, used to be under
100                        CONFIG_CHECKPOINT_RESTORE before ~5.12)
102         Required for CPUShares= in resource control unit settings:
103           CONFIG_CGROUP_SCHED
104           CONFIG_FAIR_GROUP_SCHED
106         Required for CPUQuota= in resource control unit settings:
107           CONFIG_CFS_BANDWIDTH
109         Required for IPAddressDeny=, IPAddressAllow=, IPIngressFilterPath=,
110         IPEgressFilterPath= in resource control unit settings unit settings:
111           CONFIG_BPF
112           CONFIG_BPF_SYSCALL
113           CONFIG_BPF_JIT
114           CONFIG_HAVE_EBPF_JIT
115           CONFIG_CGROUP_BPF
117         Required for SocketBind{Allow|Deny}=, RestrictNetworkInterfaces= in
118         resource control unit settings:
119           CONFIG_BPF
120           CONFIG_BPF_SYSCALL
121           CONFIG_BPF_JIT
122           CONFIG_HAVE_EBPF_JIT
123           CONFIG_CGROUP_BPF
125         For UEFI systems:
126           CONFIG_EFIVAR_FS
127           CONFIG_EFI_PARTITION
129         Required for signed Verity images support:
130           CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG
131         Required to verify signed Verity images using keys enrolled in the MoK
132         (Machine-Owner Key) keyring:
133           CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG_SECONDARY_KEYRING
134           CONFIG_IMA_ARCH_POLICY
135           CONFIG_INTEGRITY_MACHINE_KEYRING
137         Required for RestrictFileSystems= in service units:
138           CONFIG_BPF
139           CONFIG_BPF_SYSCALL
140           CONFIG_BPF_LSM
141           CONFIG_DEBUG_INFO_BTF
142           CONFIG_LSM="...,bpf" or kernel booted with lsm="...,bpf".
144         We recommend to turn off Real-Time group scheduling in the kernel when
145         using systemd. RT group scheduling effectively makes RT scheduling
146         unavailable for most userspace, since it requires explicit assignment of
147         RT budgets to each unit whose processes making use of RT. As there's no
148         sensible way to assign these budgets automatically this cannot really be
149         fixed, and it's best to disable group scheduling hence:
150            CONFIG_RT_GROUP_SCHED=n
152         It's a good idea to disable the implicit creation of networking bonding
153         devices by the kernel networking bonding module, so that the
154         automatically created "bond0" interface doesn't conflict with any such
155         device created by systemd-networkd (or other tools). Ideally there would
156         be a kernel compile-time option for this, but there currently isn't. The
157         next best thing is to make this change through a modprobe.d drop-in.
158         This is shipped by default, see modprobe.d/systemd.conf.
160         Required for systemd-nspawn:
161           CONFIG_DEVPTS_MULTIPLE_INSTANCES or Linux kernel >= 4.7
163         Required for systemd-oomd:
164           CONFIG_PSI
166         Note that kernel auditing is broken when used with systemd's container
167         code. When using systemd in conjunction with containers, please make
168         sure to either turn off auditing at runtime using the kernel command
169         line option "audit=0", or turn it off at kernel compile time using:
170           CONFIG_AUDIT=n
172         If systemd is compiled with libseccomp support on architectures which do
173         not use socketcall() and where seccomp is supported (this effectively
174         means x86-64 and ARM, but excludes 32-bit x86!), then nspawn will now
175         install a work-around seccomp filter that makes containers boot even
176         with audit being enabled. This works correctly only on kernels 3.14 and
177         newer though. TL;DR: turn audit off, still.
179         glibc >= 2.16
180         libcap
181         libmount >= 2.30 (from util-linux)
182                 (util-linux *must* be built without --enable-libmount-support-mtab)
183         libseccomp >= 2.3.1 (optional)
184         libblkid >= 2.24 (from util-linux) (optional)
185         libkmod >= 15 (optional)
186         PAM >= 1.1.2 (optional)
187         libcryptsetup (optional), >= 2.3.0 required for signed Verity images support
188         libaudit (optional)
189         libacl (optional)
190         libbpf >= 0.1.0 (optional)
191         libfdisk >= 2.32 (from util-linux) (optional)
192         libselinux (optional)
193         liblzma (optional)
194         liblz4 >= 1.3.0 / 130 (optional)
195         libzstd >= 1.4.0 (optional)
196         libgcrypt (optional)
197         libqrencode (optional)
198         libmicrohttpd (optional)
199         libidn2 or libidn (optional)
200         gnutls >= 3.1.4 (optional, >= 3.6.0 is required to support DNS-over-TLS with gnutls)
201         openssl >= 1.1.0 (optional, required to support DNS-over-TLS with openssl)
202         elfutils >= 158 (optional)
203         polkit (optional)
204         tzdata >= 2014f (optional)
205         pkg-config
206         gperf
207         docbook-xsl (optional, required for documentation)
208         xsltproc    (optional, required for documentation)
209         python >= 3.7 (required by meson too, >= 3.9 is required for ukify)
210         python-jinja2
211         python-pefile (optional, required for ukify)
212         python-lxml (optional, required to build the indices)
213         pyelftools (optional, required for systemd-boot)
214         meson >= 0.60.0
215         ninja
216         gcc >= 4.7
217         awk, sed, grep, and similar tools
218         clang >= 10.0, llvm >= 10.0 (optional, required to build BPF programs
219                 from source code in C)
221         During runtime, you need the following additional
222         dependencies:
224         util-linux >= v2.27.1 required (including but not limited to: mount,
225                                         umount, swapon, swapoff, sulogin,
226                                         agetty, fsck)
227         dbus >= 1.4.0 (strictly speaking optional, but recommended)
228                 NOTE: If using dbus < 1.9.18, you should override the default
229                 policy directory (--with-dbuspolicydir=/etc/dbus-1/system.d).
230         dracut (optional)
231         polkit (optional)
233         To build in directory build/:
234           meson setup build/ && ninja -C build/
236         Any configuration options can be specified as -Darg=value... arguments
237         to meson. After the build directory is initially configured, meson will
238         refuse to run again, and options must be changed with:
239           meson configure -Darg=value build/
240         meson configure without any arguments will print out available options and
241         their current values.
243         Useful commands:
244           ninja -C build -v some/target
245           meson test -C build/
246           sudo meson install -C build/ --no-rebuild
247           DESTDIR=... meson install -C build/
249         A tarball can be created with:
250           v=250 && git archive --prefix=systemd-$v/ v$v | zstd >systemd-$v.tar.zstd
252         When systemd-hostnamed is used, it is strongly recommended to install
253         nss-myhostname to ensure that, in a world of dynamically changing
254         hostnames, the hostname stays resolvable under all circumstances. In
255         fact, systemd-hostnamed will warn if nss-myhostname is not installed.
257         nss-systemd must be enabled on systemd systems, as that's required for
258         DynamicUser= to work. Note that we ship services out-of-the-box that
259         make use of DynamicUser= now, hence enabling nss-systemd is not
260         optional.
262         Note that the build prefix for systemd must be /usr. (Moreover, packages
263         systemd relies on — such as D-Bus — really should use the same prefix,
264         otherwise you are on your own.) -Dsplit-usr=false (which is the default
265         and does not need to be specified) is the recommended setting.
266         -Dsplit-usr=true can be used to give a semblance of support for systems
267         with programs installed split between / and /usr. Moving everything
268         under /usr is strongly encouraged.
270         Additional packages are necessary to run some tests:
271         - nc                 (used by test/TEST-12-ISSUE-3171)
272         - python             (test-udev which is installed is in python)
273         - python-pyparsing
274         - python-evdev       (used by hwdb parsing tests)
275         - strace             (used by test/test-functions)
276         - capsh              (optional, used by test-execute)
278 POLICY FOR SUPPORT OF DISTRIBUTIONS AND ARCHITECTURES:
279         systemd main branch and latest major or stable releases are generally
280         expected to compile on current versions of popular distributions (at
281         least all non-EOL versions of Fedora, Debian unstable/testing/stable,
282         latest Ubuntu LTS and non-LTS releases, openSUSE Tumbleweed/Leap,
283         CentOS Stream 8 and 9, up-to-date Arch, etc.)  We will generally
284         attempt to support also other non-EOL versions of various distros.
285         Features which would break compilation on slightly older distributions
286         will only be introduced if there are significant reasons for this
287         (i.e. supporting them interferes with development or requires too many
288         resources to support). In some cases backports of specific libraries or
289         tools might be required.
291         The policy is similar for architecture support. systemd is regularly
292         tested on popular architectures (currently amd64, i386, arm64, ppc64el,
293         and s390x), but should compile and work also on other architectures, for
294         which support has been added. systemd will emit warnings when
295         architecture-specific constants are not defined.
297 STATIC COMPILATION AND "STANDALONE" BINARIES:
298         systemd provides a public shared libraries libsystemd.so and
299         libudev.so. The latter is deprecated, and the sd-device APIs in
300         libsystemd should be used instead for new code. In addition, systemd is
301         built with a private shared library, libsystemd-shared-<suffix>.so,
302         that also includes the libsystemd code, and by default most systemd
303         binaries are linked to it. Using shared libraries saves disk space and
304         memory at runtime, because only one copy of the code is needed.
306         It is possible to build static versions of systemd public shared
307         libraries (via the configuration options '-Dstatic-libsystemd' and
308         '-Dstatic-libudev'). This allows the libsystemd and libudev code to be
309         linked statically into programs. Note that mixing & matching different
310         versions of libsystemd and systemd is generally not recommended, since
311         various of its APIs wrap internal state and protocols of systemd
312         (e.g. logind and udev databases), which are not considered
313         stable. Hence, using static libraries is not recommended since it
314         generally means that version of the static libsystemd linked into
315         applications and the host systemd are not in sync, and will thus create
316         compatibility problems.
318         In addition, it is possible to disable the use of
319         libsystemd-shared-<suffix>.so for various components (via the
320         configuration options '-Dlink-*-shared'). In this mode, the libsystemd
321         and libsystemd-shared code is linked statically into selected
322         binaries. This option is intended for systems where some of the
323         components are intended to be delivered independently of the main
324         systemd package. Finally, some binaries can be compiled in a second
325         version (via the configuration option '-Dstandalone-binaries'). The
326         version suffixed with ".standalone" has the libsystemd and
327         libsystemd-shared code linked statically. Those binaries are intended
328         as replacements to be used in limited installations where the full
329         systemd suite is not installed. Yet another option is to rebuild
330         systemd with a different '-Dshared-lib-tag' setting, allowing different
331         systemd binaries to be linked to instances of the private shared
332         library that can be installed in parallel.
334         Again: Using the default shared linking is recommended, building static
335         or "standalone" versions is not. Mixing versions of systemd components
336         that would normally be built and used together (in particular various
337         daemons and the manager) is not recommended: we do not test such
338         combinations upstream and cannot provide support. Distributors making
339         use of those options are responsible if things do not work as expected.
341 USERS AND GROUPS:
342         Default udev rules use the following standard system group names, which
343         need to be resolvable by getgrnam() at any time, even in the very early
344         boot stages, where no other databases and network are available:
346         audio, cdrom, dialout, disk, input, kmem, kvm, lp, render, tape, tty, video
348         During runtime, the journal daemon requires the "systemd-journal" system
349         group to exist. New journal files will be readable by this group (but
350         not writable), which may be used to grant specific users read access. In
351         addition, system groups "wheel" and "adm" will be given read-only access
352         to journal files using systemd-tmpfiles-setup.service.
354         The journal remote daemon requires the "systemd-journal-remote" system
355         user and group to exist. During execution this network facing service
356         will drop privileges and assume this uid/gid for security reasons.
358         Similarly, the network management daemon requires the "systemd-network"
359         system user and group to exist.
361         Similarly, the name resolution daemon requires the "systemd-resolve"
362         system user and group to exist.
364         Similarly, the coredump support requires the "systemd-coredump" system
365         user and group to exist.
367 GLIBC NSS:
368         systemd ships with four glibc NSS modules:
370         nss-myhostname resolves the local hostname to locally configured IP
371         addresses, as well as "localhost" to 127.0.0.1/::1.
373         nss-resolve enables DNS resolution via the systemd-resolved DNS/LLMNR
374         caching stub resolver "systemd-resolved".
376         nss-mymachines enables resolution of all local containers registered
377         with machined to their respective IP addresses.
379         nss-systemd enables resolution of users/group registered via the
380         User/Group Record Lookup API (https://systemd.io/USER_GROUP_API),
381         including all dynamically allocated service users. (See the
382         DynamicUser= setting in unit files.)
384         To make use of these NSS modules, please add them to the "hosts:",
385         "passwd:" and "group:" lines in /etc/nsswitch.conf. The "resolve" module
386         should replace the glibc "dns" module in this file (and don't worry, it
387         chain-loads the "dns" module if it can't talk to resolved).
389         The four modules should be used in the following order:
391                 passwd: compat systemd
392                 group: compat systemd
393                 hosts: files mymachines resolve [!UNAVAIL=return] dns myhostname
395 SYSV INIT.D SCRIPTS:
396         When calling "systemctl enable/disable/is-enabled" on a unit which is a
397         SysV init.d script, it calls /usr/lib/systemd/systemd-sysv-install;
398         this needs to translate the action into the distribution specific
399         mechanism such as chkconfig or update-rc.d. Packagers need to provide
400         this script if you need this functionality (you don't if you disabled
401         SysV init support).
403         Please see src/systemctl/systemd-sysv-install.SKELETON for how this
404         needs to look like, and provide an implementation at the marked places.
406 WARNINGS and TAINT FLAGS:
407         systemd will warn during early boot if /usr is not already mounted at
408         this point (that means: either located on the same file system as / or
409         already mounted in the initrd). While in systemd itself very little
410         will break if /usr is on a separate late-mounted partition, many of its
411         dependencies very likely will break sooner or later in one form or
412         another. For example, udev rules tend to refer to binaries in /usr,
413         binaries that link to libraries in /usr, or binaries that refer to data
414         files in /usr. Since these breakages are not always directly visible,
415         systemd will warn about this. Such setups are not really supported by
416         the basic set of Linux OS components. Taint flag 'split-usr' will be
417         set when this condition is detected.
419         For more information on this issue consult
420         https://www.freedesktop.org/wiki/Software/systemd/separate-usr-is-broken
422         systemd will warn if the filesystem is not usr-merged (i.e.: /bin, /sbin
423         and /lib* are not symlinks to their counterparts under /usr). Taint flag
424         'unmerged-usr' will be set when this condition is detected.
426         For more information on this issue consult
427         https://www.freedesktop.org/wiki/Software/systemd/TheCaseForTheUsrMerge
429         systemd requires that the /run mount point exists. systemd also
430         requires that /var/run is a symlink to /run. Taint flag 'var-run-bad'
431         will be set when this condition is detected.
433         Systemd will also warn when the cgroup support is unavailable in the
434         kernel (taint flag 'cgroups-missing'), the system is using the old
435         cgroup hierarchy (taint flag 'cgroupsv1'), the hardware clock is
436         running in non-UTC mode (taint flag 'local-hwclock'), the kernel
437         overflow UID or GID are not 65534 (taint flags 'overflowuid-not-65534'
438         and 'overflowgid-not-65534'), the UID or GID range assigned to the
439         running systemd instance covers less than 0…65534 (taint flags
440         'short-uid-range' and 'short-gid-range').
442         Taint conditions are logged during boot, but may also be checked at any
443         time with:
445           busctl get-property org.freedesktop.systemd1 /org/freedesktop/systemd1 org.freedesktop.systemd1.Manager Tainted
447         See org.freedesktop.systemd1(5) for more information.
449 VALGRIND:
450         To run systemd under valgrind, compile systemd with the valgrind
451         development headers available (i.e. valgrind-devel or equivalent).
452         Otherwise, false positives will be triggered by code which violates
453         some rules but is actually safe. Note that valgrind generates nice
454         output only on exit(), hence on shutdown we don't execve()
455         systemd-shutdown.
457 STABLE BRANCHES AND BACKPORTS:
458         Stable branches with backported patches are available in the
459         systemd-stable repo at https://github.com/systemd/systemd-stable.
461         Stable branches are started for certain releases of systemd and named
462         after them, e.g. v238-stable. Stable branches are managed by
463         distribution maintainers on an as needed basis. See
464         https://www.freedesktop.org/wiki/Software/systemd/Backports for some
465         more information and examples.