]>
Commit | Line | Data |
---|---|---|
663996b3 MS |
1 | systemd System and Service Manager |
2 | ||
663996b3 | 3 | WEB SITE: |
a80b52fd | 4 | https://systemd.io |
663996b3 MS |
5 | |
6 | GIT: | |
86f210e9 | 7 | git@github.com:systemd/systemd.git |
86f210e9 | 8 | https://github.com/systemd/systemd |
663996b3 MS |
9 | |
10 | MAILING LIST: | |
2897b343 | 11 | https://lists.freedesktop.org/mailman/listinfo/systemd-devel |
663996b3 MS |
12 | |
13 | IRC: | |
8b3d4ff0 | 14 | #systemd on irc.libera.chat |
663996b3 MS |
15 | |
16 | BUG REPORTS: | |
86f210e9 | 17 | https://github.com/systemd/systemd/issues |
663996b3 | 18 | |
a80b52fd | 19 | OLDER DOCUMENTATION: |
a80b52fd MB |
20 | http://0pointer.de/blog/projects/systemd.html |
21 | https://www.freedesktop.org/wiki/Software/systemd | |
22 | ||
663996b3 MS |
23 | AUTHOR: |
24 | Lennart Poettering | |
25 | Kay Sievers | |
26 | ...and many others | |
27 | ||
28 | LICENSE: | |
ea0999c9 | 29 | LGPL-2.1-or-later for all code, exceptions noted in LICENSES/README.md |
663996b3 MS |
30 | |
31 | REQUIREMENTS: | |
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 | 272 | POLICY 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 | 291 | USERS 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 | 317 | GLIBC 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 |
345 | SYSV 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 | 356 | WARNINGS 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 | 399 | VALGRIND: |
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 | 407 | STABLE 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. |