]> git.proxmox.com Git - systemd.git/blame - README
New upstream version 252.6
[systemd.git] / README
CommitLineData
663996b3
MS
1systemd System and Service Manager
2
663996b3 3WEB SITE:
a80b52fd 4 https://systemd.io
663996b3
MS
5
6GIT:
86f210e9 7 git@github.com:systemd/systemd.git
86f210e9 8 https://github.com/systemd/systemd
663996b3
MS
9
10MAILING LIST:
2897b343 11 https://lists.freedesktop.org/mailman/listinfo/systemd-devel
663996b3
MS
12
13IRC:
8b3d4ff0 14 #systemd on irc.libera.chat
663996b3
MS
15
16BUG REPORTS:
86f210e9 17 https://github.com/systemd/systemd/issues
663996b3 18
a80b52fd 19OLDER DOCUMENTATION:
a80b52fd
MB
20 http://0pointer.de/blog/projects/systemd.html
21 https://www.freedesktop.org/wiki/Software/systemd
22
663996b3
MS
23AUTHOR:
24 Lennart Poettering
25 Kay Sievers
26 ...and many others
27
28LICENSE:
ea0999c9 29 LGPL-2.1-or-later for all code, exceptions noted in LICENSES/README.md
663996b3
MS
30
31REQUIREMENTS:
8f232108 32 Linux kernel ≥ 3.15
b3e21333 33 ≥ 4.3 for ambient capabilities
8f232108
MB
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
44
086111aa
LB
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()).
48
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.
60f067b4
JS
54
55 Kernel Config Options:
663996b3 56 CONFIG_DEVTMPFS
60f067b4 57 CONFIG_CGROUPS (it is OK to disable all controllers)
663996b3
MS
58 CONFIG_INOTIFY_USER
59 CONFIG_SIGNALFD
60 CONFIG_TIMERFD
61 CONFIG_EPOLL
3a6ce677 62 CONFIG_UNIX (it requires CONFIG_NET, but every other flag in it is not necessary)
663996b3 63 CONFIG_SYSFS
60f067b4
JS
64 CONFIG_PROC_FS
65 CONFIG_FHANDLE (libudev, mount and bind mount handling)
663996b3 66
5eef597e 67 udev will fail to work with the legacy sysfs layout:
663996b3
MS
68 CONFIG_SYSFS_DEPRECATED=n
69
70 Legacy hotplug slows down the system and confuses udev:
71 CONFIG_UEVENT_HELPER_PATH=""
72
aff6a67f
LB
73 Userspace firmware loading is not supported and should be disabled in
74 the kernel:
663996b3
MS
75 CONFIG_FW_LOADER_USER_HELPER=n
76
77 Some udev rules and virtualization detection relies on it:
78 CONFIG_DMIID
79
aff6a67f
LB
80 Support for some SCSI devices serial number retrieval, to create
81 additional symlinks in /dev/disk/ and /dev/tape:
14228c0d
MB
82 CONFIG_BLK_DEV_BSG
83
1d42b86d 84 Required for PrivateNetwork= in service units:
60f067b4 85 CONFIG_NET_NS
e735f4d4 86 Note that systemd-localed.service and other systemd units use
1d42b86d 87 PrivateNetwork so this is effectively required.
60f067b4 88
2897b343
MP
89 Required for PrivateUsers= in service units:
90 CONFIG_USER_NS
91
663996b3
MS
92 Optional but strongly recommended:
93 CONFIG_IPV6
626cb2db 94 CONFIG_AUTOFS_FS
663996b3 95 CONFIG_TMPFS_XATTR
1d42b86d 96 CONFIG_{TMPFS,EXT4_FS,XFS,BTRFS_FS,...}_POSIX_ACL
663996b3 97 CONFIG_SECCOMP
8a584da2 98 CONFIG_SECCOMP_FILTER (required for seccomp support)
aff6a67f
LB
99 CONFIG_KCMP (for the kcmp() syscall, used to be under
100 CONFIG_CHECKPOINT_RESTORE before ~5.12)
663996b3 101
aff6a67f 102 Required for CPUShares= in resource control unit settings:
60f067b4
JS
103 CONFIG_CGROUP_SCHED
104 CONFIG_FAIR_GROUP_SCHED
105
aff6a67f 106 Required for CPUQuota= in resource control unit settings:
f47781d8
MP
107 CONFIG_CFS_BANDWIDTH
108
8b3d4ff0 109 Required for IPAddressDeny=, IPAddressAllow=, IPIngressFilterPath=,
aff6a67f 110 IPEgressFilterPath= in resource control unit settings unit settings:
8b3d4ff0
MB
111 CONFIG_BPF
112 CONFIG_BPF_SYSCALL
113 CONFIG_BPF_JIT
114 CONFIG_HAVE_EBPF_JIT
115 CONFIG_CGROUP_BPF
116
ea0999c9 117 Required for SocketBind{Allow|Deny}=, RestrictNetworkInterfaces= in
aff6a67f 118 resource control unit settings:
8b3d4ff0
MB
119 CONFIG_BPF
120 CONFIG_BPF_SYSCALL
121 CONFIG_BPF_JIT
122 CONFIG_HAVE_EBPF_JIT
52ad194e
MB
123 CONFIG_CGROUP_BPF
124
663996b3 125 For UEFI systems:
60f067b4 126 CONFIG_EFIVAR_FS
663996b3
MS
127 CONFIG_EFI_PARTITION
128
a10f5d05
MB
129 Required for signed Verity images support:
130 CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG
131
ea0999c9
MB
132 Required for RestrictFileSystems= in service units:
133 CONFIG_BPF
134 CONFIG_BPF_SYSCALL
135 CONFIG_BPF_LSM
136 CONFIG_DEBUG_INFO_BTF
137 CONFIG_LSM="...,bpf" or kernel booted with lsm="...,bpf".
138
aff6a67f
LB
139 We recommend to turn off Real-Time group scheduling in the kernel when
140 using systemd. RT group scheduling effectively makes RT scheduling
141 unavailable for most userspace, since it requires explicit assignment of
142 RT budgets to each unit whose processes making use of RT. As there's no
143 sensible way to assign these budgets automatically this cannot really be
144 fixed, and it's best to disable group scheduling hence:
7035cd9e
MP
145 CONFIG_RT_GROUP_SCHED=n
146
f5e65279
MB
147 It's a good idea to disable the implicit creation of networking bonding
148 devices by the kernel networking bonding module, so that the
149 automatically created "bond0" interface doesn't conflict with any such
aff6a67f
LB
150 device created by systemd-networkd (or other tools). Ideally there would
151 be a kernel compile-time option for this, but there currently isn't. The
152 next best thing is to make this change through a modprobe.d drop-in.
153 This is shipped by default, see modprobe.d/systemd.conf.
f5e65279 154
1d42b86d
MB
155 Required for systemd-nspawn:
156 CONFIG_DEVPTS_MULTIPLE_INSTANCES or Linux kernel >= 4.7
157
3a6ce677
BR
158 Required for systemd-oomd:
159 CONFIG_PSI
160
aff6a67f
LB
161 Note that kernel auditing is broken when used with systemd's container
162 code. When using systemd in conjunction with containers, please make
163 sure to either turn off auditing at runtime using the kernel command
164 line option "audit=0", or turn it off at kernel compile time using:
14228c0d 165 CONFIG_AUDIT=n
aff6a67f
LB
166 If systemd is compiled with libseccomp support on architectures which do
167 not use socketcall() and where seccomp is supported (this effectively
168 means x86-64 and ARM, but excludes 32-bit x86!), then nspawn will now
169 install a work-around seccomp filter that makes containers boot even
170 with audit being enabled. This works correctly only on kernels 3.14 and
171 newer though. TL;DR: turn audit off, still.
60f067b4 172
e3bff60a 173 glibc >= 2.16
663996b3 174 libcap
f5e65279
MB
175 libmount >= 2.30 (from util-linux)
176 (util-linux *must* be built without --enable-libmount-support-mtab)
8a584da2 177 libseccomp >= 2.3.1 (optional)
e735f4d4 178 libblkid >= 2.24 (from util-linux) (optional)
60f067b4 179 libkmod >= 15 (optional)
663996b3 180 PAM >= 1.1.2 (optional)
a10f5d05 181 libcryptsetup (optional), >= 2.3.0 required for signed Verity images support
663996b3
MS
182 libaudit (optional)
183 libacl (optional)
086111aa 184 libbpf >= 0.1.0 (optional)
9cde670f 185 libfdisk >= 2.32 (from util-linux) (optional)
663996b3
MS
186 libselinux (optional)
187 liblzma (optional)
6e866b33 188 liblz4 >= 1.3.0 / 130 (optional)
a10f5d05 189 libzstd >= 1.4.0 (optional)
663996b3
MS
190 libgcrypt (optional)
191 libqrencode (optional)
192 libmicrohttpd (optional)
193 libpython (optional)
81c58355 194 libidn2 or libidn (optional)
e1f67bc7 195 gnutls >= 3.1.4 (optional, >= 3.6.0 is required to support DNS-over-TLS with gnutls)
6e866b33 196 openssl >= 1.1.0 (optional, required to support DNS-over-TLS with openssl)
e842803a 197 elfutils >= 158 (optional)
52ad194e 198 polkit (optional)
bb4f798a 199 tzdata >= 2014f (optional)
f5e65279
MB
200 pkg-config
201 gperf
202 docbook-xsl (optional, required for documentation)
203 xsltproc (optional, required for documentation)
8b3d4ff0 204 python-jinja2
f5e65279 205 python-lxml (optional, required to build the indices)
7c20daf6 206 python >= 3.5
8f232108 207 meson >= 0.53.2
7c20daf6 208 ninja
086111aa
LB
209 gcc >= 4.7
210 awk, sed, grep, and similar tools
8b3d4ff0
MB
211 clang >= 10.0, llvm >= 10.0 (optional, required to build BPF programs
212 from source code in C)
ea0999c9 213 gnu-efi >= 3.0.5 (optional, required for systemd-boot)
663996b3 214
60f067b4
JS
215 During runtime, you need the following additional
216 dependencies:
663996b3 217
82126c13
LB
218 util-linux >= v2.27.1 required (including but not limited to: mount,
219 umount, swapon, swapoff, sulogin,
220 agetty, fsck)
97e5042f
MB
221 dbus >= 1.4.0 (strictly speaking optional, but recommended)
222 NOTE: If using dbus < 1.9.18, you should override the default
223 policy directory (--with-dbuspolicydir=/etc/dbus-1/system.d).
663996b3 224 dracut (optional)
6e866b33 225 polkit (optional)
663996b3 226
81c58355 227 To build in directory build/:
8f232108 228 meson setup build/ && ninja -C build/
81c58355 229
f2dec872 230 Any configuration options can be specified as -Darg=value... arguments
81c58355
MB
231 to meson. After the build directory is initially configured, meson will
232 refuse to run again, and options must be changed with:
1ce460ce
MB
233 meson configure -Darg=value build/
234 meson configure without any arguments will print out available options and
81c58355
MB
235 their current values.
236
237 Useful commands:
8f232108 238 ninja -C build -v some/target
3a6ce677 239 meson test -C build/
aff6a67f 240 sudo meson install -C build/ --no-rebuild
3a6ce677 241 DESTDIR=... meson install -C build/
81c58355 242
f5e65279 243 A tarball can be created with:
8f232108 244 v=250 && git archive --prefix=systemd-$v/ v$v | zstd >systemd-$v.tar.zstd
fb183854 245
aff6a67f
LB
246 When systemd-hostnamed is used, it is strongly recommended to install
247 nss-myhostname to ensure that, in a world of dynamically changing
248 hostnames, the hostname stays resolvable under all circumstances. In
249 fact, systemd-hostnamed will warn if nss-myhostname is not installed.
663996b3 250
52ad194e
MB
251 nss-systemd must be enabled on systemd systems, as that's required for
252 DynamicUser= to work. Note that we ship services out-of-the-box that
253 make use of DynamicUser= now, hence enabling nss-systemd is not
254 optional.
255
aff6a67f
LB
256 Note that the build prefix for systemd must be /usr. (Moreover, packages
257 systemd relies on — such as D-Bus — really should use the same prefix,
258 otherwise you are on your own.) -Dsplit-usr=false (which is the default
259 and does not need to be specified) is the recommended setting.
3a6ce677
BR
260 -Dsplit-usr=true can be used to give a semblance of support for systems
261 with programs installed split between / and /usr. Moving everything
262 under /usr is strongly encouraged.
52ad194e 263
8a584da2
MP
264 Additional packages are necessary to run some tests:
265 - busybox (used by test/TEST-13-NSPAWN-SMOKE)
266 - nc (used by test/TEST-12-ISSUE-3171)
267 - python3-pyparsing
268 - python3-evdev (used by hwdb parsing tests)
269 - strace (used by test/test-functions)
2897b343 270 - capsh (optional, used by test-execute)
8a584da2 271
aff6a67f 272POLICY FOR SUPPORT OF DISTRIBUTIONS AND ARCHITECTURES:
aff6a67f
LB
273 systemd main branch and latest major or stable releases are generally
274 expected to compile on current versions of popular distributions (at
275 least all non-EOL versions of Fedora, Debian unstable/testing/stable,
276 latest Ubuntu LTS and non-LTS releases, openSUSE Tumbleweed/Leap,
277 CentOS Stream 8 and 9, up-to-date Arch, etc.) We will generally
278 attempt to support also other non-EOL versions of various distros.
279 Features which would break compilation on slightly-older distributions
280 will only be introduced if there are significant reasons for this
281 (i.e. supporting them interferes with development or requires too many
282 resources to support). In some cases backports of specific libraries or
283 tools might be required.
284
285 The policy is similar wrt. architecture support. systemd is regularly
286 tested on popular architectures (currently amd64, i386, arm64, ppc64el,
287 and s390x), but should compile and work also on other architectures, for
288 which support has been added. systemd will emit warnings when
289 architecture-specific constants are not defined.
290
663996b3 291USERS AND GROUPS:
aff6a67f
LB
292 Default udev rules use the following standard system group names, which
293 need to be resolvable by getgrnam() at any time, even in the very early
294 boot stages, where no other databases and network are available:
663996b3 295
52ad194e 296 audio, cdrom, dialout, disk, input, kmem, kvm, lp, render, tape, tty, video
663996b3 297
aff6a67f
LB
298 During runtime, the journal daemon requires the "systemd-journal" system
299 group to exist. New journal files will be readable by this group (but
300 not writable), which may be used to grant specific users read access. In
301 addition, system groups "wheel" and "adm" will be given read-only access
302 to journal files using systemd-tmpfiles.service.
663996b3 303
aff6a67f
LB
304 The journal remote daemon requires the "systemd-journal-remote" system
305 user and group to exist. During execution this network facing service
306 will drop privileges and assume this uid/gid for security reasons.
663996b3 307
aff6a67f
LB
308 Similarly, the network management daemon requires the "systemd-network"
309 system user and group to exist.
60f067b4 310
aff6a67f
LB
311 Similarly, the name resolution daemon requires the "systemd-resolve"
312 system user and group to exist.
60f067b4 313
aff6a67f
LB
314 Similarly, the coredump support requires the "systemd-coredump" system
315 user and group to exist.
4c89c718 316
086111aa 317GLIBC NSS:
8a584da2 318 systemd ships with four glibc NSS modules:
5eef597e 319
a10f5d05
MB
320 nss-myhostname resolves the local hostname to locally configured IP
321 addresses, as well as "localhost" to 127.0.0.1/::1.
5eef597e 322
a10f5d05
MB
323 nss-resolve enables DNS resolution via the systemd-resolved DNS/LLMNR
324 caching stub resolver "systemd-resolved".
5eef597e 325
8a584da2 326 nss-mymachines enables resolution of all local containers registered
a10f5d05 327 with machined to their respective IP addresses.
8a584da2 328
a10f5d05 329 nss-systemd enables resolution of users/group registered via the
3a6ce677 330 User/Group Record Lookup API (https://systemd.io/USER_GROUP_API),
a10f5d05
MB
331 including all dynamically allocated service users. (See the
332 DynamicUser= setting in unit files.)
5eef597e 333
8a584da2 334 To make use of these NSS modules, please add them to the "hosts:",
aff6a67f
LB
335 "passwd:" and "group:" lines in /etc/nsswitch.conf. The "resolve" module
336 should replace the glibc "dns" module in this file (and don't worry, it
337 chain-loads the "dns" module if it can't talk to resolved).
5eef597e 338
8a584da2 339 The four modules should be used in the following order:
5eef597e 340
a10f5d05
MB
341 passwd: compat systemd
342 group: compat systemd
b012e921 343 hosts: files mymachines resolve [!UNAVAIL=return] dns myhostname
5eef597e 344
86f210e9
MP
345SYSV INIT.D SCRIPTS:
346 When calling "systemctl enable/disable/is-enabled" on a unit which is a
347 SysV init.d script, it calls /usr/lib/systemd/systemd-sysv-install;
348 this needs to translate the action into the distribution specific
349 mechanism such as chkconfig or update-rc.d. Packagers need to provide
350 this script if you need this functionality (you don't if you disabled
351 SysV init support).
352
353 Please see src/systemctl/systemd-sysv-install.SKELETON for how this
354 needs to look like, and provide an implementation at the marked places.
355
8f232108 356WARNINGS and TAINT FLAGS:
52ad194e
MB
357 systemd will warn during early boot if /usr is not already mounted at
358 this point (that means: either located on the same file system as / or
359 already mounted in the initrd). While in systemd itself very little
8f232108
MB
360 will break if /usr is on a separate late-mounted partition, many of its
361 dependencies very likely will break sooner or later in one form or
52ad194e 362 another. For example, udev rules tend to refer to binaries in /usr,
086111aa 363 binaries that link to libraries in /usr, or binaries that refer to data
52ad194e 364 files in /usr. Since these breakages are not always directly visible,
8f232108
MB
365 systemd will warn about this. Such setups are not really supported by
366 the basic set of Linux OS components. Taint flag 'split-usr' will be
367 set when this condition is detected.
60f067b4 368
663996b3 369 For more information on this issue consult
2897b343 370 https://www.freedesktop.org/wiki/Software/systemd/separate-usr-is-broken
663996b3 371
8f232108
MB
372 systemd will warn if the filesystem is not usr-merged (i.e.: /bin, /sbin
373 and /lib* are not symlinks to their counterparts under /usr). Taint flag
374 'unmerged-usr' will be set when this condition is detected.
375
376 For more information on this issue consult
377 https://www.freedesktop.org/wiki/Software/systemd/TheCaseForTheUsrMerge
378
379 systemd requires that the /run mount point exists. systemd also
380 requires that /var/run is a symlink to /run. Taint flag 'var-run-bad'
381 will be set when this condition is detected.
382
383 Systemd will also warn when the cgroup support is unavailable in the
384 kernel (taint flag 'cgroups-missing'), the system is using the old
385 cgroup hierarchy (taint flag 'cgroupsv1'), the hardware clock is
386 running in non-UTC mode (taint flag 'local-hwclock'), the kernel
387 overflow UID or GID are not 65534 (taint flags 'overflowuid-not-65534'
388 and 'overflowgid-not-65534'), the UID or GID range assigned to the
389 running systemd instance covers less than 0…65534 (taint flags
390 'short-uid-range' and 'short-gid-range').
391
392 Taint conditions are logged during boot, but may also be checked at any
393 time with:
394
395 busctl get-property org.freedesktop.systemd1 /org/freedesktop/systemd1 org.freedesktop.systemd1.Manager Tainted
396
086111aa
LB
397 See org.freedesktop.systemd1(5) for more information.
398
8f232108 399VALGRIND:
b012e921
MB
400 To run systemd under valgrind, compile with meson option
401 -Dvalgrind=true and have valgrind development headers installed
402 (i.e. valgrind-devel or equivalent). Otherwise, false positives will be
403 triggered by code which violates some rules but is actually safe. Note
404 that valgrind generates nice output only on exit(), hence on shutdown
405 we don't execve() systemd-shutdown.
406
bb4f798a 407STABLE BRANCHES AND BACKPORTS:
a032b68d
MB
408 Stable branches with backported patches are available in the
409 systemd-stable repo at https://github.com/systemd/systemd-stable.
410
411 Stable branches are started for certain releases of systemd and named
412 after them, e.g. v238-stable. Stable branches are managed by
413 distribution maintainers on an as needed basis. See
086111aa 414 https://www.freedesktop.org/wiki/Software/systemd/Backports for some
a032b68d 415 more information and examples.