<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>首页 on systemd中文文档</title><link>http://systemd.cn/</link><description>Recent content in 首页 on systemd中文文档</description><generator>Hugo</generator><language>zh</language><copyright>[© CC BY 4.0](https://creativecommons.org/licenses/by/4.0/legalcode)</copyright><atom:link href="http://systemd.cn/index.xml" rel="self" type="application/rss+xml"/><item><title>自动启动评估</title><link>http://systemd.cn/docs/Booting/AUTOMATIC_BOOT_ASSESSMENT/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/Booting/AUTOMATIC_BOOT_ASSESSMENT/</guid><description>&lt;h1 id="自动启动评估"&gt;自动启动评估&lt;a class="anchor" href="#%e8%87%aa%e5%8a%a8%e5%90%af%e5%8a%a8%e8%af%84%e4%bc%b0"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;systemd provides support for automatically reverting back to the previous
version of the OS or kernel in case the system consistently fails to boot. The
&lt;a href="https://uapi-group.org/specifications/specs/boot_loader_specification/#boot-counting"&gt;UAPI.1 Boot Loader Specification&lt;/a&gt;
describes how to annotate boot loader entries with a counter that specifies how
many attempts should be made to boot it. This document describes how systemd
implements this scheme.&lt;/p&gt;
&lt;p&gt;The many different components involved in the implementation may be used
independently and in combination with other software to, for example, support
other boot loaders or take actions outside of the boot loader.&lt;/p&gt;</description></item><item><title>启动组件和根文件系统探测</title><link>http://systemd.cn/docs/Booting/ROOTFS_DISCOVERY/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/Booting/ROOTFS_DISCOVERY/</guid><description>&lt;h1 id="启动组件和根文件系统探测"&gt;启动组件和根文件系统探测&lt;a class="anchor" href="#%e5%90%af%e5%8a%a8%e7%bb%84%e4%bb%b6%e5%92%8c%e6%a0%b9%e6%96%87%e4%bb%b6%e7%b3%bb%e7%bb%9f%e6%8e%a2%e6%b5%8b"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The recommended way to boot a &lt;a href="https://systemd.io/"&gt;&lt;code&gt;systemd&lt;/code&gt;&lt;/a&gt; based
&lt;a href="https://en.wikipedia.org/wiki/UEFI"&gt;UEFI&lt;/a&gt; system consists primarily of three
components:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;A boot loader,
i.e. &lt;a href="https://www.freedesktop.org/software/systemd/man/latest/systemd-boot.html"&gt;&lt;code&gt;systemd-boot&lt;/code&gt;&lt;/a&gt;
that provides interactive and programmatic control of what precisely to
boot. It takes care of enumerating all possible boot targets (implementing
the &lt;a href="https://uapi-group.org/specifications/specs/boot_loader_specification/"&gt;UAPI.1 Boot Loader
Specification&lt;/a&gt;),
potentially presenting it to the user in a menu, but otherwise picking an
item automatically, implementing boot counting and automatic rollback if
desired.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A &lt;a href="https://uapi-group.org/specifications/specs/unified_kernel_image/"&gt;UAPI.5 Unified Kernel Image
(&amp;ldquo;UKI&amp;rdquo;)&lt;/a&gt;,
i.e. an UEFI PE executable that combines
&lt;a href="https://www.freedesktop.org/software/systemd/man/latest/systemd-stub.html"&gt;&lt;code&gt;systemd-stub&lt;/code&gt;&lt;/a&gt;,
a Linux kernel, and an initial RAM disk (&amp;quot;&lt;code&gt;initrd&lt;/code&gt;&amp;quot;) into one. UKIs are
self-descriptive: the aforementioned boot loader enumerates these UKIs and
automatically extracts all information necessary to determine which menu
entries to generate for them. Within the UKI runtime (very early during
kernel initialization) the transition from the UEFI firmware code to the
Linux code takes place, i.e. it executes the fundamental
&lt;code&gt;ExitBootServices()&lt;/code&gt; UEFI call that ends PC firmware control,
and lets the Linux kernel take over.&lt;/p&gt;</description></item><item><title>引导加载程序接口</title><link>http://systemd.cn/docs/Booting/BOOT_LOADER_INTERFACE/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/Booting/BOOT_LOADER_INTERFACE/</guid><description>&lt;h1 id="引导加载程序接口"&gt;引导加载程序接口&lt;a class="anchor" href="#%e5%bc%95%e5%af%bc%e5%8a%a0%e8%bd%bd%e7%a8%8b%e5%ba%8f%e6%8e%a5%e5%8f%a3"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;systemd can interface with the boot loader
to receive performance data and other information,
and pass control information.
This is only supported on EFI systems.
Data is transferred between the boot loader and systemd in EFI variables.
All EFI variables use the vendor UUID &lt;code&gt;4a67b082-0a4c-41cf-b6c7-440b29bb8c4f&lt;/code&gt;.
Variables will be listed below using the Linux efivarfs naming,
&lt;code&gt;&amp;lt;name&amp;gt;-&amp;lt;vendoruuid&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The EFI Variable &lt;code&gt;LoaderTimeInitUSec-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f&lt;/code&gt;
contains the timestamp in microseconds when the loader was initialized.
This value is the time spent in the firmware for initialization.
It is formatted as numeric, NUL-terminated, decimal string, in UTF-16.&lt;/p&gt;</description></item><item><title>恢复出厂设置</title><link>http://systemd.cn/docs/Booting/FACTORY_RESET/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/Booting/FACTORY_RESET/</guid><description>&lt;h1 id="恢复出厂设置"&gt;恢复出厂设置&lt;a class="anchor" href="#%e6%81%a2%e5%a4%8d%e5%87%ba%e5%8e%82%e8%ae%be%e7%bd%ae"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In various scenarios it is important to be able to reset operating systems back
into a &amp;ldquo;factory state&amp;rdquo;, i.e. where all state, user data and configuration is
reset so that it resembles the system state when it was originally shipped.&lt;/p&gt;
&lt;p&gt;systemd natively supports a concept of factory reset, that can both act as a
specific implementation for UEFI based systems, as well as a series of hook
points and a template for implementations on other systems.&lt;/p&gt;</description></item><item><title>挂载点可用性要求</title><link>http://systemd.cn/docs/Booting/MOUNT_REQUIREMENTS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/Booting/MOUNT_REQUIREMENTS/</guid><description>&lt;h1 id="挂载点可用性要求"&gt;挂载点可用性要求&lt;a class="anchor" href="#%e6%8c%82%e8%bd%bd%e7%82%b9%e5%8f%af%e7%94%a8%e6%80%a7%e8%a6%81%e6%b1%82"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;This document describes the requirements placed by systemd
on the time when various parts of the file system hierarchy
must be available and mounted during boot.
This document should be read in conjunction with
&lt;a href="https://uapi-group.org/specifications/specs/linux_file_system_hierarchy/"&gt;UAPI.9 Linux File System Hierarchy&lt;/a&gt;,
which describes the role of the mount points discussed here.&lt;/p&gt;
&lt;p&gt;If the file system backing a mount point is located on external or remote media
that require special drivers, infrastructure or networking to be set up,
then this implies that this functionality must be started and running
at the point in the boot sequence when that mount point is required.&lt;/p&gt;</description></item><item><title>TPM2 PCR测量</title><link>http://systemd.cn/docs/Booting/TPM2_PCR_MEASUREMENTS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/Booting/TPM2_PCR_MEASUREMENTS/</guid><description>&lt;h1 id="tpm2-pcr测量"&gt;TPM2 PCR测量&lt;a class="anchor" href="#tpm2-pcr%e6%b5%8b%e9%87%8f"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Various systemd components issue TPM2 PCR measurements during the boot process,
both in UEFI mode and from userspace. The following lists all measurements
done, and describes (in case done before &lt;code&gt;ExitBootServices()&lt;/code&gt;) how they appear
in the TPM2 Event Log, maintained by the PC firmware. Note that the userspace
measurements listed below are (by default) only done if a system is booted with
&lt;code&gt;systemd-stub&lt;/code&gt; — or in other words: systemd&amp;rsquo;s userspace measurements are linked
to systemd&amp;rsquo;s UEFI-mode measurements, and if the latter are not done the former
aren&amp;rsquo;t made either.&lt;/p&gt;</description></item><item><title>Example Blog Post</title><link>http://systemd.cn/posts/example-post/</link><pubDate>Wed, 15 Jan 2025 00:00:00 +0000</pubDate><guid>http://systemd.cn/posts/example-post/</guid><description>&lt;p&gt;This is an example blog post demonstrating the Hugo Book blog layout.&lt;/p&gt;
&lt;h2 id="what-this-demonstrates"&gt;What This Demonstrates&lt;a class="anchor" href="#what-this-demonstrates"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Blog posts in Hugo Book support standard Hugo content features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Date display&lt;/strong&gt;: configured via &lt;code&gt;BookDateFormat&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tags and categories&lt;/strong&gt;: displayed as metadata&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pagination&lt;/strong&gt;: automatic when multiple posts exist&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prev/next navigation&lt;/strong&gt;: links between posts in the section&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="adding-your-own-posts"&gt;Adding Your Own Posts&lt;a class="anchor" href="#adding-your-own-posts"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Create markdown files under &lt;code&gt;content/posts/&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;content/
└── posts/
 ├── _index.md
 ├── first-post.md
 └── second-post.md&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Each post needs at minimum a &lt;code&gt;title&lt;/code&gt; and &lt;code&gt;date&lt;/code&gt; in frontmatter. See &lt;a href="http://systemd.cn/docs/content/blog/"&gt;Blog&lt;/a&gt; for full documentation.&lt;/p&gt;</description></item><item><title/><link>http://systemd.cn/docs/BOOT_LOADER_SPECIFICATION/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/BOOT_LOADER_SPECIFICATION/</guid><description>&lt;p&gt;&lt;a href="https://uapi-group.org/specifications/specs/boot_loader_specification/"&gt;This content has moved to the UAPI group website&lt;/a&gt;&lt;/p&gt;</description></item><item><title/><link>http://systemd.cn/docs/COREDUMP_PACKAGE_METADATA/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/COREDUMP_PACKAGE_METADATA/</guid><description/></item><item><title/><link>http://systemd.cn/docs/DISCOVERABLE_PARTITIONS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/DISCOVERABLE_PARTITIONS/</guid><description>&lt;p&gt;&lt;a href="https://uapi-group.org/specifications/specs/discoverable_partitions_specification/"&gt;This content has moved to the UAPI group website&lt;/a&gt;&lt;/p&gt;</description></item><item><title/><link>http://systemd.cn/docs/ELF_DLOPEN_METADATA/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/ELF_DLOPEN_METADATA/</guid><description>&lt;p&gt;&lt;a href="https://uapi-group.org/specifications/specs/elf_dlopen_metadata/"&gt;This content has moved to the UAPI group website&lt;/a&gt;&lt;/p&gt;</description></item><item><title/><link>http://systemd.cn/docs/ELF_PACKAGE_METADATA/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/ELF_PACKAGE_METADATA/</guid><description/></item><item><title/><link>http://systemd.cn/docs/MEMORY_PRESSURE/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/MEMORY_PRESSURE/</guid><description/></item><item><title/><link>http://systemd.cn/docs/OSC_CONTEXT/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/OSC_CONTEXT/</guid><description>&lt;p&gt;&lt;a href="https://uapi-group.org/specifications/specs/osc_context/"&gt;This content has moved to the UAPI group website&lt;/a&gt;&lt;/p&gt;</description></item><item><title/><link>http://systemd.cn/docs/PACKAGE_METADATA_FOR_EXECUTABLE_FILES/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/PACKAGE_METADATA_FOR_EXECUTABLE_FILES/</guid><description>&lt;p&gt;&lt;a href="https://uapi-group.org/specifications/specs/package_metadata_for_executable_files/"&gt;This content has moved to the UAPI group website&lt;/a&gt;&lt;/p&gt;</description></item><item><title>API File Systems</title><link>http://systemd.cn/docs/API_FILE_SYSTEMS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/API_FILE_SYSTEMS/</guid><description>&lt;h1 id="api-file-systems"&gt;API File Systems&lt;a class="anchor" href="#api-file-systems"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;So you are seeing all kinds of weird file systems in the output of mount(8) that are not listed in &lt;code&gt;/etc/fstab&lt;/code&gt;, and you wonder what those are, how you can get rid of them, or at least change their mount options.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The Linux kernel provides a number of different ways for userspace to communicate with it.
For many facilities there are system calls, others are hidden behind Netlink interfaces, and even others are exposed via virtual file systems such as &lt;code&gt;/proc&lt;/code&gt; or &lt;code&gt;/sys&lt;/code&gt;.
These file systems are programming interfaces, they are not actually backed by real, persistent storage.
They simply use the file system interface of the kernel as interface to various unrelated mechanisms.
Similarly, there are file systems that userspace uses for its own API purposes, to store shared memory segments, shared temporary files or sockets.
In this article we want to discuss all these kind of &lt;em&gt;API file systems&lt;/em&gt;.
More specifically, here&amp;rsquo;s a list of these file systems typical Linux systems currently have:&lt;/p&gt;</description></item><item><title>Appstream Bundle</title><link>http://systemd.cn/docs/APPSTREAM_BUNDLE/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/APPSTREAM_BUNDLE/</guid><description>&lt;h1 id="appstream-bundle"&gt;Appstream Bundle&lt;a class="anchor" href="#appstream-bundle"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;NOTE: This document is a work-in-progress.&lt;/p&gt;
&lt;p&gt;NOTE: This isn&amp;rsquo;t yet implemented in libappstream and the software centers.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.freedesktop.org/software/appstream/docs/chap-CatalogData.html"&gt;Appstream catalogs&lt;/a&gt;
are a standardized way to expose metadata about system components, apps, and updates to software
centers (i.e. GNOME Software and KDE Discover). The &lt;code&gt;&amp;lt;bundle/&amp;gt;&lt;/code&gt; tag links an appstream component
to a packaging format. This is used by the software centers to decide which code path (or plugin)
should handle the component. For instance: components with a &lt;code&gt;&amp;lt;bundle type=&amp;quot;package&amp;quot;&amp;gt;...&amp;lt;/bundle&amp;gt;&lt;/code&gt;
will be handled by &lt;a href="https://www.freedesktop.org/software/PackageKit/"&gt;PackageKit&lt;/a&gt;, and components
with a &lt;code&gt;&amp;lt;bundle type=&amp;quot;flatpak&amp;quot;&amp;gt;...&amp;lt;/bundle&amp;gt;&lt;/code&gt; will be handled by &lt;a href="https://docs.flatpak.org/"&gt;libflatpak&lt;/a&gt;.
This document will define how to format an appstream component&amp;rsquo;s &lt;code&gt;&amp;lt;bundle&amp;gt;&lt;/code&gt; tag such that software
centers will know to manage it using systemd. The following syntax will be supported:&lt;/p&gt;</description></item><item><title>Backports</title><link>http://systemd.cn/docs/BACKPORTS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/BACKPORTS/</guid><description>&lt;h1 id="backports"&gt;Backports&lt;a class="anchor" href="#backports"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The upstream systemd git repo at &lt;a href="https://github.com/systemd/systemd"&gt;https://github.com/systemd/systemd&lt;/a&gt;
contains the &lt;code&gt;main&lt;/code&gt; branch that progresses at a quick pace,
continuously bringing both bugfixes and new features.
New releases are tagged as &lt;code&gt;vNNN&lt;/code&gt; on this branch.&lt;/p&gt;
&lt;p&gt;In addition to the &lt;code&gt;main&lt;/code&gt; branch,
the repo contains a number of branches for stable point updates for a given release,
called &lt;code&gt;vNNN-stable&lt;/code&gt;.
Stable releases are tagged as &lt;code&gt;vNNN.X&lt;/code&gt; on those branches.
See &lt;a href="https://github.com/systemd/systemd/branches/all?query=-stable"&gt;list of branches&lt;/a&gt;
and &lt;a href="https://github.com/systemd/systemd/pulls?q=is%3Apr&amp;#43;is%3Aopen&amp;#43;label%3Astable-branch"&gt;pull requests for stable branches&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Booting Without /usr is Broken</title><link>http://systemd.cn/docs/SEPARATE_USR_IS_BROKEN/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/SEPARATE_USR_IS_BROKEN/</guid><description>&lt;h1 id="booting-without-usr-is-broken"&gt;Booting Without /usr is Broken&lt;a class="anchor" href="#booting-without-usr-is-broken"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;You probably discovered this page because your shiny new systemd system referred you here during boot time,
when it warned you that booting without &lt;code&gt;/usr&lt;/code&gt; pre-mounted wasn&amp;rsquo;t supported anymore.
And now you wonder what this all is about.
Here&amp;rsquo;s an attempt of an explanation:&lt;/p&gt;
&lt;p&gt;One thing in advance:
systemd itself is actually mostly fine with &lt;code&gt;/usr&lt;/code&gt; on a separate file system that is not pre-mounted at boot time.
However, the common basic set of OS components of modern Linux machines is not, and has not been in quite some time.
And it is unlikely that this is going to be fixed any time soon, or even ever.&lt;/p&gt;</description></item><item><title>Code Quality Tools</title><link>http://systemd.cn/docs/CODE_QUALITY/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/CODE_QUALITY/</guid><description>&lt;h1 id="code-quality-tools"&gt;Code Quality Tools&lt;a class="anchor" href="#code-quality-tools"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The systemd project has a number of code quality tools set up in the source
tree and on the github infrastructure. Here&amp;rsquo;s an incomprehensive list of the
available functionality:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;meson test -C build&lt;/code&gt; to run the unit tests. Some tests are skipped if
no privileges are available, hence consider also running them with &lt;code&gt;sudo meson test -C build&lt;/code&gt;. A couple of unit tests are considered &amp;ldquo;unsafe&amp;rdquo; (as
they change system state); to run those too, build with &lt;code&gt;meson setup -Dtests=unsafe&lt;/code&gt;. Finally, some unit tests are considered to be very slow,
build them too with &lt;code&gt;meson setup -Dslow-tests=true&lt;/code&gt;. (Note that there are a
couple of manual tests in addition to these unit tests.) (Also note: you can
change these flags for an already set up build tree, too, with &amp;ldquo;meson
configure -C build -D…&amp;rdquo;.)&lt;/p&gt;</description></item><item><title>Coding Style</title><link>http://systemd.cn/docs/CODING_STYLE/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/CODING_STYLE/</guid><description>&lt;h1 id="coding-style"&gt;Coding Style&lt;a class="anchor" href="#coding-style"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="formatting"&gt;Formatting&lt;a class="anchor" href="#formatting"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;8ch indent, no tabs, except for files in &lt;code&gt;man/&lt;/code&gt; which are 2ch indent, and
still no tabs, and shell scripts, which are 4ch indent, and no tabs either.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;We prefer &lt;code&gt;/* comments */&lt;/code&gt; over &lt;code&gt;// comments&lt;/code&gt; in code you commit,
please. This way &lt;code&gt;// comments&lt;/code&gt; are left for developers to use for local,
temporary commenting of code for debug purposes (i.e. uncommittable stuff),
making such comments easily discernible from explanatory, documenting code
comments (i.e. committable stuff).&lt;/p&gt;</description></item><item><title>Compatibility with SysV</title><link>http://systemd.cn/docs/INCOMPATIBILITIES/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/INCOMPATIBILITIES/</guid><description>&lt;h1 id="compatibility-with-sysv"&gt;Compatibility with SysV&lt;a class="anchor" href="#compatibility-with-sysv"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Since systemd v260, support for SysV functionality has been removed.
The documentation below is preserved for historical reference only.&lt;/p&gt;
&lt;p&gt;A few interfaces are optionally kept for backward compatibility.
When systemd is compiled with the &lt;code&gt;-Dcompat-sysv-interfaces=true&lt;/code&gt; setting,
legacy interfaces are provided,
e.g. the &lt;code&gt;runlevelX.target&lt;/code&gt; aliases,
and lock directories under &lt;code&gt;/var&lt;/code&gt; and &lt;code&gt;/run&lt;/code&gt;.
This option may be extended to cover other deprecated interfaces in the future.&lt;/p&gt;
&lt;h2 id="pre-v260-state"&gt;Pre v260 state&lt;a class="anchor" href="#pre-v260-state"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;systemd provides a fair degree of compatibility with the behavior exposed by the SysV init system as implemented by many distributions.
Compatibility is provided both for the user experience and the SysV scripting APIs.
However, there are some areas where compatibility is limited due to technical reasons or design decisions of systemd and the distributions.
All of the following applies to SysV init scripts handled by systemd, however a number of them matter only on specific distributions.
Many of the incompatibilities are specific to distribution-specific extensions of LSB/SysV init.&lt;/p&gt;</description></item><item><title>Container Interface</title><link>http://systemd.cn/docs/CONTAINER_INTERFACE/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/CONTAINER_INTERFACE/</guid><description>&lt;h1 id="the-container-interface"&gt;The Container Interface&lt;a class="anchor" href="#the-container-interface"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Also consult &lt;a href="http://systemd.cn/WRITING_VM_AND_CONTAINER_MANAGERS"&gt;Writing Virtual Machine or Container Managers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;systemd has a number of interfaces for interacting with container managers,
when systemd is used inside of an OS container. If you work on a container
manager, please consider supporting the following interfaces.&lt;/p&gt;
&lt;h2 id="execution-environment"&gt;Execution Environment&lt;a class="anchor" href="#execution-environment"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;If the container manager wants to control the hostname for a container
running systemd it may just set it before invoking systemd, and systemd will
leave it unmodified when there is no hostname configured in &lt;code&gt;/etc/hostname&lt;/code&gt;
(that file overrides whatever is pre-initialized by the container manager).&lt;/p&gt;</description></item><item><title>Contributing</title><link>http://systemd.cn/docs/CONTRIBUTING/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/CONTRIBUTING/</guid><description>&lt;h1 id="contributing"&gt;Contributing&lt;a class="anchor" href="#contributing"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;We welcome contributions from everyone. However, please follow these guidelines when posting a GitHub Pull Request or filing a GitHub Issue on the systemd project:&lt;/p&gt;
&lt;h2 id="filing-issues"&gt;Filing Issues&lt;a class="anchor" href="#filing-issues"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;We use &lt;a href="https://github.com/systemd/systemd/issues"&gt;GitHub Issues&lt;/a&gt; &lt;strong&gt;exclusively&lt;/strong&gt; for tracking &lt;strong&gt;bugs&lt;/strong&gt; and &lt;strong&gt;feature&lt;/strong&gt; &lt;strong&gt;requests&lt;/strong&gt; (RFEs) of systemd.
If you are looking for help, please try the forums of your distribution first, or &lt;a href="https://lists.freedesktop.org/mailman/listinfo/systemd-devel"&gt;systemd-devel mailing list&lt;/a&gt; for general questions about systemd.&lt;/li&gt;
&lt;li&gt;We only track bugs in the &lt;strong&gt;two&lt;/strong&gt; &lt;strong&gt;most&lt;/strong&gt; &lt;strong&gt;recently&lt;/strong&gt; &lt;strong&gt;released&lt;/strong&gt; (non-rc) &lt;strong&gt;versions&lt;/strong&gt; of systemd in the GitHub Issue tracker.
If you are using an older version of systemd, please contact your distribution&amp;rsquo;s bug tracker instead (see below).
See &lt;a href="https://github.com/systemd/systemd/releases"&gt;GitHub Release Page&lt;/a&gt; for the list of most recent releases.&lt;/li&gt;
&lt;li&gt;When filing a feature request issue (RFE), please always check first if the newest upstream version of systemd already implements the feature,
and whether there&amp;rsquo;s already an issue filed for your feature by someone else.&lt;/li&gt;
&lt;li&gt;When filing an issue, specify the &lt;strong&gt;systemd&lt;/strong&gt; &lt;strong&gt;version&lt;/strong&gt; you are experiencing the issue with. Also, indicate which &lt;strong&gt;distribution&lt;/strong&gt; you are using.&lt;/li&gt;
&lt;li&gt;Please include an explanation how to reproduce the issue you are pointing out.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Following these guidelines makes it easier for us to process your issue, and ensures we won&amp;rsquo;t close your issue right-away for being misfiled.&lt;/p&gt;</description></item><item><title>Control Group APIs and Delegation</title><link>http://systemd.cn/docs/CGROUP_DELEGATION/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/CGROUP_DELEGATION/</guid><description>&lt;h1 id="control-group-apis-and-delegation"&gt;Control Group APIs and Delegation&lt;a class="anchor" href="#control-group-apis-and-delegation"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Intended audience: hackers working on userspace subsystems that require direct
cgroup access, such as container managers and similar.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So you are wondering about resource management with systemd, you know Linux
control groups (cgroups) a bit and are trying to integrate your software with
what systemd has to offer there. Here&amp;rsquo;s a bit of documentation about the
concepts and interfaces involved with this.&lt;/p&gt;
&lt;p&gt;What&amp;rsquo;s described here has been part of systemd and documented since v205
times. However, it has been updated and improved substantially, even
though the concepts stayed mostly the same. This is an attempt to provide more
comprehensive up-to-date information about all this, particular in light of the
poor implementations of the components interfacing with systemd of current
container managers.&lt;/p&gt;</description></item><item><title>Converting Existing Users to systemd-homed</title><link>http://systemd.cn/docs/CONVERTING_TO_HOMED/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/CONVERTING_TO_HOMED/</guid><description>&lt;h1 id="converting-existing-users-to-systemd-homed-managed-users"&gt;Converting Existing Users to systemd-homed managed Users&lt;a class="anchor" href="#converting-existing-users-to-systemd-homed-managed-users"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Traditionally on most Linux distributions, regular (human) users are managed
via entries in &lt;code&gt;/etc/passwd&lt;/code&gt;, &lt;code&gt;/etc/shadow&lt;/code&gt;, &lt;code&gt;/etc/group&lt;/code&gt; and &lt;code&gt;/etc/gshadow&lt;/code&gt;.
With the advent of
&lt;a href="https://www.freedesktop.org/software/systemd/man/latest/systemd-homed.service.html"&gt;&lt;code&gt;systemd-homed&lt;/code&gt;&lt;/a&gt;
it might be desirable to convert an existing, traditional user account to a
&lt;code&gt;systemd-homed&lt;/code&gt; managed one.
Below is a brief guide how to do that.&lt;/p&gt;
&lt;p&gt;Before continuing, please read up on these basic concepts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://systemd.cn/HOME_DIRECTORY"&gt;Home Directories&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://systemd.cn/USER_RECORD"&gt;JSON User Records&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://systemd.cn/GROUP_RECORD"&gt;JSON Group Records&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://systemd.cn/USER_GROUP_API"&gt;User/Group Record Lookup API via Varlink&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="caveat"&gt;Caveat&lt;a class="anchor" href="#caveat"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This is a manual process, and possibly a bit fragile.
Hence, do this at your own risk, read up beforehand, and make a backup first.
You know what&amp;rsquo;s at stake: your own home directory, i.e. all your personal data.&lt;/p&gt;</description></item><item><title>Credentials</title><link>http://systemd.cn/docs/CREDENTIALS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/CREDENTIALS/</guid><description>&lt;h1 id="system-and-service-credentials"&gt;System and Service Credentials&lt;a class="anchor" href="#system-and-service-credentials"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The &lt;code&gt;systemd&lt;/code&gt; service manager supports a &amp;ldquo;credential&amp;rdquo; concept for securely
acquiring and passing credential data to systems and services. The precise
nature of the credential data is up to applications, but the concept is
intended to provide systems and services with potentially security sensitive
cryptographic keys, certificates, passwords, identity information and similar
types of information. It may also be used as generic infrastructure for
parameterizing systems and services.&lt;/p&gt;</description></item><item><title>Desktop Environment Integration</title><link>http://systemd.cn/docs/DESKTOP_ENVIRONMENTS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/DESKTOP_ENVIRONMENTS/</guid><description>&lt;h1 id="desktop-environments"&gt;Desktop Environments&lt;a class="anchor" href="#desktop-environments"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;NOTE: This document is a work-in-progress.&lt;/p&gt;
&lt;h2 id="single-graphical-session"&gt;Single Graphical Session&lt;a class="anchor" href="#single-graphical-session"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;systemd only supports running one graphical session per user at a time.
While this might not have always been the case historically, having multiple
sessions for one user running at the same time is problematic.
The DBus session bus is shared between all the logins, and services that are
started must be implicitly assigned to the user&amp;rsquo;s current graphical session.&lt;/p&gt;</description></item><item><title>Diagnosing Boot Problems</title><link>http://systemd.cn/docs/DEBUGGING/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/DEBUGGING/</guid><description>&lt;h1 id="diagnosing-boot-problems"&gt;Diagnosing Boot Problems&lt;a class="anchor" href="#diagnosing-boot-problems"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;If your machine gets stuck during boot, first check if the hang happens before or after control passes to systemd.&lt;/p&gt;
&lt;p&gt;Try to boot without &lt;code&gt;rhgb&lt;/code&gt; and &lt;code&gt;quiet&lt;/code&gt; on the kernel command line.
If you see some messages like these:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Welcome to Fedora &lt;em&gt;VERSION&lt;/em&gt; (&lt;em&gt;codename&lt;/em&gt;)!&amp;quot;&lt;/li&gt;
&lt;li&gt;Starting &lt;em&gt;name&lt;/em&gt;&amp;hellip;&lt;/li&gt;
&lt;li&gt;[ OK ] Started &lt;em&gt;name&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;then systemd is running.
(See an actual &lt;a href="../assets/f17boot.png"&gt;screenshot&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;Debugging always gets easier if you can get a shell.
If you do not get a login prompt, try switching to a different virtual terminal using CTRL+ALT+F__.
Problems with a display server startup may manifest themselves as a missing login on tty1, but other VTs working.&lt;/p&gt;</description></item><item><title>File Descriptor Store</title><link>http://systemd.cn/docs/FILE_DESCRIPTOR_STORE/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/FILE_DESCRIPTOR_STORE/</guid><description>&lt;h1 id="the-file-descriptor-store"&gt;The File Descriptor Store&lt;a class="anchor" href="#the-file-descriptor-store"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;TL;DR: The systemd service manager may optionally maintain a set of file
descriptors for each service. Those file descriptors are under control of the
service. Storing file descriptors in the manager makes is easier to restart
services without dropping connections or losing state.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Since its inception &lt;code&gt;systemd&lt;/code&gt; has supported the &lt;em&gt;socket&lt;/em&gt; &lt;em&gt;activation&lt;/em&gt;
mechanism: the service manager creates and listens on some sockets (and similar
UNIX file descriptors) on behalf of a service, and then passes them to the
service during activation of the service via UNIX file descriptor (short: &lt;em&gt;fd&lt;/em&gt;)
passing over &lt;code&gt;execve()&lt;/code&gt;. This is primarily exposed in the
&lt;a href="https://www.freedesktop.org/software/systemd/man/latest/systemd.socket.html"&gt;.socket&lt;/a&gt;
unit type.&lt;/p&gt;</description></item><item><title>Frequently Asked Questions</title><link>http://systemd.cn/docs/FAQ/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/FAQ/</guid><description>&lt;h1 id="frequently-asked-questions"&gt;Frequently Asked Questions&lt;a class="anchor" href="#frequently-asked-questions"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Also check out the &lt;a href="http://systemd.cn/TIPS_AND_TRICKS"&gt;Tips &amp;amp; Tricks&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q: How do I change the current runlevel?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A: The concept of runlevels is obsolete. A set of target units are exposed that carry similar semantics, e.g. runlevel 5 -&amp;gt; &lt;code&gt;graphical.target&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#78787e"&gt;# systemctl isolate graphical.target&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will only change the current runlevel, and has no effect on the next boot.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q: How do I change the default runlevel to boot into?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A: The symlink /etc/systemd/system/default.target controls where we boot into by default. Link it to the target unit of your choice. For example, like this:&lt;/p&gt;</description></item><item><title>Governance</title><link>http://systemd.cn/docs/GOVERNANCE/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/GOVERNANCE/</guid><description>&lt;p&gt;The systemd project is governed as a Free Software project, with the following rules:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Anyone is welcome to submit comments and reviews.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Every project maintainer has the right to merge changes, if they feel that
they hold the expertise in the specific area.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Except for trivial changes, an approval from at least one project maintainer
who is not the author is required before merging.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Regular contributors may be invited to join the project maintainers team.&lt;/p&gt;</description></item><item><title>Hacking on systemd</title><link>http://systemd.cn/docs/HACKING/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/HACKING/</guid><description>&lt;h1 id="hacking-on-systemd"&gt;Hacking on systemd&lt;a class="anchor" href="#hacking-on-systemd"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;We welcome all contributions to systemd. If you notice a bug or a missing
feature, please feel invited to fix it, and submit your work as a
&lt;a href="https://github.com/systemd/systemd/pull/new"&gt;GitHub Pull Request (PR)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Please make sure to follow our &lt;a href="http://systemd.cn/CODING_STYLE"&gt;Coding Style&lt;/a&gt; when submitting
patches. Also have a look at our &lt;a href="http://systemd.cn/CONTRIBUTING"&gt;Contribution Guidelines&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When adding new functionality, tests should be added. For shared functionality
(in &lt;code&gt;src/basic/&lt;/code&gt; and &lt;code&gt;src/shared/&lt;/code&gt;) unit tests should be sufficient. The general
policy is to keep tests in matching files underneath &lt;code&gt;src/test/&lt;/code&gt;, e.g.
&lt;code&gt;src/test/test-path-util.c&lt;/code&gt; contains tests for any functions in
&lt;code&gt;src/basic/path-util.c&lt;/code&gt;. If adding a new source file, consider adding a matching
test executable. For features at a higher level, tests in &lt;code&gt;src/test/&lt;/code&gt; are very
strongly recommended. If that is not possible, integration tests in &lt;code&gt;test/&lt;/code&gt; are
encouraged. Please always test your work before submitting a PR.&lt;/p&gt;</description></item><item><title>Home Directories</title><link>http://systemd.cn/docs/HOME_DIRECTORY/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/HOME_DIRECTORY/</guid><description>&lt;h1 id="home-directories"&gt;Home Directories&lt;a class="anchor" href="#home-directories"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://www.freedesktop.org/software/systemd/man/latest/systemd-homed.service.html"&gt;&lt;code&gt;systemd-homed.service(8)&lt;/code&gt;&lt;/a&gt;
manages home directories of regular (&amp;ldquo;human&amp;rdquo;) users.
Each directory it manages encapsulates both the data store and the user record of the user,
so that it comprehensively describes the user account, and is thus naturally portable
between systems without any further, external metadata.
This document describes the format used by these home directories, in the context of the storage
mechanism used.&lt;/p&gt;
&lt;h2 id="general-structure"&gt;General Structure&lt;a class="anchor" href="#general-structure"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Inside of the home directory a file &lt;code&gt;~/.identity&lt;/code&gt; contains the JSON formatted
user record of the user.
It follows the format defined in &lt;a href="http://systemd.cn/USER_RECORD"&gt;&lt;code&gt;JSON User Records&lt;/code&gt;&lt;/a&gt;.
It is recommended to bring the record into &amp;rsquo;normalized&amp;rsquo; form(i.e. all objects should contain their fields
sorted alphabetically by their key) before storing it there,
though this is not required nor enforced.
Since the user record is cryptographically signed, the user cannot make modifications to the file on their own
(at least not without corrupting it, or knowing the private key used for signing the record).
Note that user records are stored here without their &lt;code&gt;binding&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt; and
&lt;code&gt;secret&lt;/code&gt; sections, i.e. only with the sections included in the signature plus
the signature section itself.&lt;/p&gt;</description></item><item><title>Inhibitor Locks</title><link>http://systemd.cn/docs/INHIBITOR_LOCKS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/INHIBITOR_LOCKS/</guid><description>&lt;h1 id="inhibitor-locks"&gt;Inhibitor Locks&lt;a class="anchor" href="#inhibitor-locks"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;systemd 183 and newer include a logic to inhibit system shutdowns and sleep states. This is implemented as part of &lt;a href="https://www.freedesktop.org/software/systemd/man/latest/systemd-logind.service.html"&gt;systemd-logind.daemon(8)&lt;/a&gt; There are a couple of different use cases for this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A CD burning application wants to ensure that the system is not turned off or suspended while the burn process is in progress.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A package manager wants to ensure that the system is not turned off while a package upgrade is in progress.&lt;/p&gt;</description></item><item><title>Initrd Interface</title><link>http://systemd.cn/docs/INITRD_INTERFACE/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/INITRD_INTERFACE/</guid><description>&lt;h1 id="the-initrd-interface-of-systemd"&gt;The initrd Interface of systemd&lt;a class="anchor" href="#the-initrd-interface-of-systemd"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The Linux initrd mechanism (short for &amp;ldquo;initial RAM disk&amp;rdquo;, also known as
&amp;ldquo;initramfs&amp;rdquo;) refers to a small file system archive that is unpacked by the
kernel and contains the first userspace code that runs. It typically finds and
transitions into the actual root file system to use. systemd supports both
initrd and initrd-less boots. If an initrd is used, it is a good idea to pass a
few bits of runtime information from the initrd to systemd in order to avoid
duplicate work and to provide performance data to the administrator. In this
page we attempt to roughly describe the interfaces that exist between the
initrd and systemd. These interfaces are currently used by
&lt;a href="https://github.com/systemd/mkosi"&gt;mkosi&lt;/a&gt;-generated initrds, dracut and the
Arch Linux initrds.&lt;/p&gt;</description></item><item><title>Journal Export Formats</title><link>http://systemd.cn/docs/JOURNAL_EXPORT_FORMATS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/JOURNAL_EXPORT_FORMATS/</guid><description>&lt;h1 id="journal-export-formats"&gt;Journal Export Formats&lt;a class="anchor" href="#journal-export-formats"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="journal-export-format"&gt;Journal Export Format&lt;a class="anchor" href="#journal-export-format"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Note that this document describes the binary serialization format of journals only, as used for transfer across the network.
For interfacing with web technologies there&amp;rsquo;s the Journal JSON Format, described below.
The binary format on disk is documented as the &lt;a href="http://systemd.cn/JOURNAL_FILE_FORMAT"&gt;Journal File Format&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Before reading on, please make sure you are aware of the &lt;a href="https://www.freedesktop.org/software/systemd/man/latest/systemd.journal-fields.html"&gt;basic properties of journal entries&lt;/a&gt;, in particular realize that they may include binary non-text data (though usually don&amp;rsquo;t), and the same field might have multiple values assigned within the same entry (though usually hasn&amp;rsquo;t).&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Journal File Format</title><link>http://systemd.cn/docs/JOURNAL_FILE_FORMAT/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/JOURNAL_FILE_FORMAT/</guid><description>&lt;h1 id="journal-file-format"&gt;Journal File Format&lt;a class="anchor" href="#journal-file-format"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Note that this document describes the binary on-disk format of journals only.
For interfacing with web technologies there&amp;rsquo;s the &lt;a href="http://systemd.cn/docs/JOURNAL_EXPORT_FORMATS/#journal-json-format"&gt;Journal JSON Format&lt;/a&gt;.
For transfer of journal data across the network there&amp;rsquo;s the
&lt;a href="http://systemd.cn/docs/JOURNAL_EXPORT_FORMATS/#journal-export-format"&gt;Journal Export Format&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The systemd journal stores log data in a binary format with several features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fully indexed by all fields&lt;/li&gt;
&lt;li&gt;Can store binary data, up to 2^64-1 in size&lt;/li&gt;
&lt;li&gt;Seekable&lt;/li&gt;
&lt;li&gt;Primarily append-based, hence robust to corruption&lt;/li&gt;
&lt;li&gt;Support for in-line compression&lt;/li&gt;
&lt;li&gt;Support for in-line Forward Secure Sealing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This document explains the basic structure of the file format on disk.
We are making this available primarily to allow review and provide documentation.
Note that the actual implementation in the
&lt;a href="https://github.com/systemd/systemd/blob/main/src/libsystemd/sd-journal/"&gt;systemd codebase&lt;/a&gt;
is the only ultimately authoritative description of the format,
so if this document and the code disagree, the code is right.
That said we&amp;rsquo;ll of course try hard to keep this document up-to-date and accurate.&lt;/p&gt;</description></item><item><title>Journal Message Catalogs</title><link>http://systemd.cn/docs/CATALOG/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/CATALOG/</guid><description>&lt;h1 id="journal-message-catalogs"&gt;Journal Message Catalogs&lt;a class="anchor" href="#journal-message-catalogs"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Starting with 196 systemd includes a message catalog system which allows augmentation on display of journal log messages with short explanation texts, keyed off the MESSAGE_ID= field of the entry.
Many important log messages generated by systemd itself have message catalog entries.
External packages can easily provide catalog data for their own messages.&lt;/p&gt;
&lt;p&gt;The message catalog has a number of purposes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Provide the administrator, user or developer with further information about the issue at hand, beyond the actual message text&lt;/li&gt;
&lt;li&gt;Provide links to further documentation on the topic of the specific message&lt;/li&gt;
&lt;li&gt;Provide native language explanations for English language system messages&lt;/li&gt;
&lt;li&gt;Provide links for support forums, hotlines or other contacts&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="format"&gt;Format&lt;a class="anchor" href="#format"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Message catalog source files are simple text files that follow an RFC822 inspired format.
To get an understanding of the format &lt;a href="https://github.com/systemd/systemd/blob/main/catalog/systemd.catalog.in"&gt;here&amp;rsquo;s an example file&lt;/a&gt;, which includes entries for many important messages systemd itself generates.
On installation of a package that includes message catalogs all installed message catalog source files get compiled into a binary index, which is then used to look up catalog data.&lt;/p&gt;</description></item><item><title>JSON Group Records</title><link>http://systemd.cn/docs/GROUP_RECORD/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/GROUP_RECORD/</guid><description>&lt;h1 id="json-group-records"&gt;JSON Group Records&lt;a class="anchor" href="#json-group-records"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Long story short: JSON Group Records are to &lt;code&gt;struct group&lt;/code&gt; what
&lt;a href="http://systemd.cn/USER_RECORD"&gt;JSON User Records&lt;/a&gt; are to &lt;code&gt;struct passwd&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Conceptually, much of what applies to JSON user records also applies to JSON group records.
They also consist of seven sections, with similar properties and
they carry some identical (or at least very similar) fields.&lt;/p&gt;
&lt;h2 id="fields-in-the-regular-section"&gt;Fields in the &lt;code&gt;regular&lt;/code&gt; section&lt;a class="anchor" href="#fields-in-the-regular-section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;groupName&lt;/code&gt; → A string with the UNIX group name.
Matches the &lt;code&gt;gr_name&lt;/code&gt; field of UNIX/glibc NSS &lt;code&gt;struct group&lt;/code&gt;,
or the shadow structure &lt;code&gt;struct sgrp&lt;/code&gt;&amp;rsquo;s &lt;code&gt;sg_namp&lt;/code&gt; field.&lt;/p&gt;</description></item><item><title>JSON User Records</title><link>http://systemd.cn/docs/USER_RECORD/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/USER_RECORD/</guid><description>&lt;h1 id="json-user-records"&gt;JSON User Records&lt;a class="anchor" href="#json-user-records"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;systemd optionally processes user records that go beyond the classic UNIX (or glibc NSS) &lt;code&gt;struct passwd&lt;/code&gt;.
Various components of systemd are able to provide and consume records in a more extensible format of a dictionary of key/value
pairs, encoded as JSON.&lt;/p&gt;
&lt;p&gt;Specifically:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.freedesktop.org/software/systemd/man/latest/systemd-homed.service.html"&gt;&lt;code&gt;systemd-homed.service&lt;/code&gt;&lt;/a&gt;
manages &lt;code&gt;human&lt;/code&gt; user home directories and embeds these JSON records
directly in the home directory images
(see &lt;a href="http://systemd.cn/HOME_DIRECTORY"&gt;Home Directories&lt;/a&gt; for details).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.freedesktop.org/software/systemd/man/latest/pam_systemd.html"&gt;&lt;code&gt;pam_systemd&lt;/code&gt;&lt;/a&gt;
processes these JSON records for users that log in, and applies various
settings to the activated session, including environment variables, nice
levels and more.&lt;/p&gt;</description></item><item><title>Known Environment Variables</title><link>http://systemd.cn/docs/ENVIRONMENT/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/ENVIRONMENT/</guid><description>&lt;h1 id="known-environment-variables"&gt;Known Environment Variables&lt;a class="anchor" href="#known-environment-variables"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A number of systemd components take additional runtime parameters via
environment variables. Many of these environment variables are not supported at
the same level as command line switches and other interfaces are: we don&amp;rsquo;t
document them in the man pages and we make no stability guarantees for
them. While they generally are unlikely to be dropped any time soon again, we
do not want to guarantee that they stay around for good either.&lt;/p&gt;</description></item><item><title>Locking Block Device Access</title><link>http://systemd.cn/docs/BLOCK_DEVICE_LOCKING/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/BLOCK_DEVICE_LOCKING/</guid><description>&lt;h1 id="locking-block-device-access"&gt;Locking Block Device Access&lt;a class="anchor" href="#locking-block-device-access"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;TL;DR: Use BSD file locks
&lt;a href="https://man7.org/linux/man-pages/man2/flock.2.html"&gt;(&lt;code&gt;flock(2)&lt;/code&gt;)&lt;/a&gt; on block
device nodes to synchronize access for partitioning and file system formatting
tools.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;systemd-udevd&lt;/code&gt; probes all block devices showing up for file system superblock
and partition table information (utilizing &lt;code&gt;libblkid&lt;/code&gt;). If another program
concurrently modifies a superblock or partition table this probing might be
affected, which is bad in itself, but also might in turn result in undesired
effects in programs subscribing to &lt;code&gt;udev&lt;/code&gt; events.&lt;/p&gt;</description></item><item><title>Minimal Builds</title><link>http://systemd.cn/docs/MINIMAL_BUILDS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/MINIMAL_BUILDS/</guid><description>&lt;h1 id="minimal-builds"&gt;Minimal Builds&lt;a class="anchor" href="#minimal-builds"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;systemd includes a variety of components.
The core components are always built (which includes systemd itself, as well as udevd and journald).
Many of the other components can be disabled at compile time with configure switches.&lt;/p&gt;
&lt;p&gt;For some uses the configure switches do not provide sufficient modularity.
For example, they cannot be used to build only the man pages, or to build only the tmpfiles tool, only detect-virt or only udevd.&lt;/p&gt;</description></item><item><title>My Service Can't Get Realtime!</title><link>http://systemd.cn/docs/MY_SERVICE_CANT_GET_REALTIME/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/MY_SERVICE_CANT_GET_REALTIME/</guid><description>&lt;h1 id="my-service-cant-get-realtime"&gt;My Service Can&amp;rsquo;t Get Realtime!&lt;a class="anchor" href="#my-service-cant-get-realtime"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;So, you have a service that requires real-time scheduling.
When you run this service on your systemd system it is unable to acquire real-time scheduling,
even though it is full root and has all possible privileges.
And now you are wondering what is going on and what you can do about it?&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="what-is-going-on"&gt;What is Going on?&lt;a class="anchor" href="#what-is-going-on"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By default systemd places all system services into their own control groups in the &amp;ldquo;cpu&amp;rdquo; hierarchy.
This has the benefit that the CPU usage of services with many worker threads or processes
(think: Apache with all its gazillion CGIs and stuff)
gets roughly the same amount of CPU as a service with very few worker threads (think: MySQL).
Instead of evening out CPU &lt;em&gt;per process&lt;/em&gt; this will cause CPU to be evened out &lt;em&gt;per service&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>Native Journal Protocol</title><link>http://systemd.cn/docs/JOURNAL_NATIVE_PROTOCOL/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/JOURNAL_NATIVE_PROTOCOL/</guid><description>&lt;h1 id="native-journal-protocol"&gt;Native Journal Protocol&lt;a class="anchor" href="#native-journal-protocol"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;systemd-journald.service&lt;/code&gt; accepts log data via various protocols:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Classic RFC3164 BSD syslog via the &lt;code&gt;/dev/log&lt;/code&gt; socket&lt;/li&gt;
&lt;li&gt;STDOUT/STDERR of programs via &lt;code&gt;StandardOutput=journal&lt;/code&gt; + &lt;code&gt;StandardError=journal&lt;/code&gt; in service files (both of which are default settings)&lt;/li&gt;
&lt;li&gt;Kernel log messages via the &lt;code&gt;/dev/kmsg&lt;/code&gt; device node&lt;/li&gt;
&lt;li&gt;Audit records via the kernel&amp;rsquo;s audit subsystem&lt;/li&gt;
&lt;li&gt;Structured log messages via &lt;code&gt;journald&lt;/code&gt;&amp;rsquo;s native protocol&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The latter is what this document is about: if you are developing a program and
want to pass structured log data to &lt;code&gt;journald&lt;/code&gt;, it&amp;rsquo;s the Journal&amp;rsquo;s native
protocol that you want to use. The systemd project provides the
&lt;a href="https://www.freedesktop.org/software/systemd/man/latest/sd_journal_print.html"&gt;&lt;code&gt;sd_journal_print(3)&lt;/code&gt;&lt;/a&gt;
API that implements the client side of this protocol. This document explains
what this interface does behind the scenes, in case you&amp;rsquo;d like to implement a
client for it yourself, without linking to &lt;code&gt;libsystemd&lt;/code&gt; — for example because
you work in a programming language other than C or otherwise want to avoid the
dependency.&lt;/p&gt;</description></item><item><title>New Control Group Interfaces</title><link>http://systemd.cn/docs/CONTROL_GROUP_INTERFACE/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/CONTROL_GROUP_INTERFACE/</guid><description>&lt;h1 id="the-new-control-group-interfaces"&gt;The New Control Group Interfaces&lt;a class="anchor" href="#the-new-control-group-interfaces"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;em&gt;aka &amp;ldquo;I want to make use of kernel cgroups, how do I do this in the new world order?&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Starting with version 205 systemd provides a number of interfaces that may be used to create and manage labelled groups of processes for the purpose of monitoring and controlling them and their resource usage.
This is built on top of the Linux kernel Control Groups (&amp;ldquo;cgroups&amp;rdquo;) facility.&lt;/p&gt;</description></item><item><title>Notes for Translators</title><link>http://systemd.cn/docs/TRANSLATORS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/TRANSLATORS/</guid><description>&lt;h1 id="notes-for-translators"&gt;Notes for Translators&lt;a class="anchor" href="#notes-for-translators"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;systemd depends on the &lt;code&gt;gettext&lt;/code&gt; package for multilingual support.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll find the i18n files in the &lt;code&gt;po/&lt;/code&gt; directory.&lt;/p&gt;
&lt;p&gt;The build system (meson/ninja) can be used to generate a template (&lt;code&gt;*.pot&lt;/code&gt;),
which can be used to create new translations.&lt;/p&gt;
&lt;p&gt;It can also merge the template into the existing translations (&lt;code&gt;*.po&lt;/code&gt;), to pick
up new strings in need of translation.&lt;/p&gt;
&lt;p&gt;Finally, it is able to compile the translations (to &lt;code&gt;*.gmo&lt;/code&gt; files), so that
they can be used by systemd software. (This step is also useful to confirm the
syntax of the &lt;code&gt;*.po&lt;/code&gt; files is correct.)&lt;/p&gt;</description></item><item><title>Password Agents</title><link>http://systemd.cn/docs/PASSWORD_AGENTS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/PASSWORD_AGENTS/</guid><description>&lt;h1 id="password-agents"&gt;Password Agents&lt;a class="anchor" href="#password-agents"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;systemd 12 and newer support lightweight password agents which can be used to
query the user for system-level passwords or passphrases. These are
passphrases that are not related to a specific user, but to some kind of
hardware or service. This is used for encrypted hard-disk passphrases or to
query passphrases of SSL certificates at web server start-up time. The basic
idea is that a system component requesting a password entry can simply drop a
simple .ini-style file into &lt;code&gt;/run/systemd/ask-password/&lt;/code&gt; which multiple
different agents may watch via &lt;code&gt;inotify()&lt;/code&gt;, and query the user as necessary.
The answer is then sent back to the querier via an &lt;code&gt;AF_UNIX&lt;/code&gt;/&lt;code&gt;SOCK_DGRAM&lt;/code&gt;
socket. Multiple agents might be running at the same time in which case they
all should query the user and the agent which answers first wins. Right now
systemd ships with the following passphrase agents:&lt;/p&gt;</description></item><item><title>Pax Controla Groupiana</title><link>http://systemd.cn/docs/PAX_CONTROL_GROUPS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/PAX_CONTROL_GROUPS/</guid><description>&lt;h1 id="pax-controla-groupiana"&gt;Pax Controla Groupiana&lt;a class="anchor" href="#pax-controla-groupiana"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;aka &amp;ldquo;How to behave nicely in the cgroupfs trees&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Important Update: Please consult this document only as a historical reference.
It was written under the assumption that the cgroups tree was a shared resource.
However, after much discussion this concept has been deemed outdated.
The cgroups tree can no longer be considered a shared resource.
Instead, a management daemon of some kind needs to arbitrate access to it, and it needs to actively propagate changes between the entities it manages.
More specifically, on systemd systems this management daemon is systemd itself, accessible via a number of bus APIs.
This means instead of dealing directly with the low-level interfaces of the cgroup file system, please use systemd&amp;rsquo;s high-level APIs as a replacement, see the
&lt;a href="http://systemd.cn/CONTROL_GROUP_INTERFACE"&gt;New Control Group Interfaces&lt;/a&gt;
for details. They offer similar functionality.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Portability and Stability</title><link>http://systemd.cn/docs/PORTABILITY_AND_STABILITY/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/PORTABILITY_AND_STABILITY/</guid><description>&lt;h1 id="portability-and-stability-promise"&gt;Portability and Stability Promise&lt;a class="anchor" href="#portability-and-stability-promise"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;We try to keep backward compatibility for public interfaces,
and we try to avoid breaking them whenever possible, as described below.
We&amp;rsquo;ll try to fix any reported regressions.&lt;/p&gt;
&lt;p&gt;Occasionally we need to remove some interface or raise the minimum required version of a dependency.
In those cases, we&amp;rsquo;ll announce the deprecation and removal plan in NEWS for a future release.
The feedback from users and distributions will be taken into account.&lt;/p&gt;</description></item><item><title>Portable Services Introduction</title><link>http://systemd.cn/docs/PORTABLE_SERVICES/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/PORTABLE_SERVICES/</guid><description>&lt;h1 id="portable-services"&gt;Portable Services&lt;a class="anchor" href="#portable-services"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;systemd (since version 239) supports a concept of &amp;ldquo;Portable Services&amp;rdquo;.
&amp;ldquo;Portable Services&amp;rdquo; are a delivery method for services that uses
two specific features of container management:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Applications are bundled. I.e. multiple services, their binaries and all
their dependencies are packaged in an image, and are run directly from it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Stricter default security policies, i.e. sand-boxing of applications.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The primary tool for interacting with Portable Services is &lt;code&gt;portablectl&lt;/code&gt;,
and they are managed by the &lt;code&gt;systemd-portabled&lt;/code&gt; service. &lt;code&gt;systemd-portabled&lt;/code&gt; can
run as a system or a user service.&lt;/p&gt;</description></item><item><title>Porting systemd To New Distributions</title><link>http://systemd.cn/docs/DISTRO_PORTING/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/DISTRO_PORTING/</guid><description>&lt;h1 id="porting-systemd-to-new-distributions"&gt;Porting systemd To New Distributions&lt;a class="anchor" href="#porting-systemd-to-new-distributions"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="howto"&gt;HOWTO&lt;a class="anchor" href="#howto"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You need to make the follow changes to adapt systemd to your distribution:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Find the right configure parameters for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-Dloadkeys-path=&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-Dsetfont-path=&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-Dtty-gid=&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-Dntp-servers=&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-Ddns-servers=&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-Dsupport-url=&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Try it out.&lt;/p&gt;
&lt;p&gt;Play around (as an ordinary user) with
&lt;code&gt;/usr/lib/systemd/systemd --test --system&lt;/code&gt; for a test run of systemd without booting.
This will read the unit files and print the initial transaction it would execute during boot-up.
This will also inform you about ordering loops and suchlike.&lt;/p&gt;</description></item><item><title>Porting to New Architectures</title><link>http://systemd.cn/docs/PORTING_TO_NEW_ARCHITECTURES/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/PORTING_TO_NEW_ARCHITECTURES/</guid><description>&lt;h1 id="porting-systemd-to-new-architectures"&gt;Porting systemd to New Architectures&lt;a class="anchor" href="#porting-systemd-to-new-architectures"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Here&amp;rsquo;s a brief checklist of things to implement when porting systemd to a new
architecture.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Patch
&lt;a href="https://github.com/systemd/systemd/blob/main/src/basic/architecture.h"&gt;src/basic/architecture.h&lt;/a&gt;
and
&lt;a href="https://github.com/systemd/systemd/blob/main/src/basic/architecture.c"&gt;src/basic/architecture.c&lt;/a&gt;
to make your architecture known to systemd. Besides an &lt;code&gt;ARCHITECTURE_XYZ&lt;/code&gt;
enumeration entry you need to provide an implementation of
&lt;code&gt;native_architecture()&lt;/code&gt; and &lt;code&gt;uname_architecture()&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Patch
&lt;a href="https://github.com/systemd/systemd/blob/main/src/shared/gpt.h"&gt;src/shared/gpt.h&lt;/a&gt;
and
&lt;a href="https://github.com/systemd/systemd/blob/main/src/shared/gpt.c"&gt;src/shared/gpt.c&lt;/a&gt;
and define a new set of GPT partition type UUIDs for the root file system,
&lt;code&gt;/usr/&lt;/code&gt; file system, and the matching Verity and Verity signature
partitions. Use &lt;code&gt;systemd-id128 new -p&lt;/code&gt; to generate new suitable UUIDs you
can use for this. Make sure to register your new types in the various
functions in &lt;code&gt;gpt.c&lt;/code&gt;. Also make sure to update the tables in
&lt;a href="https://uapi-group.org/specifications/specs/discoverable_partitions_specification"&gt;UAPI.2 Discoverable Partitions Specification&lt;/a&gt;
and &lt;code&gt;man/systemd-gpt-auto-generator.xml&lt;/code&gt; accordingly.&lt;/p&gt;</description></item><item><title>Predictable Network Interface Names</title><link>http://systemd.cn/docs/PREDICTABLE_INTERFACE_NAMES/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/PREDICTABLE_INTERFACE_NAMES/</guid><description>&lt;h1 id="predictable-network-interface-names"&gt;Predictable Network Interface Names&lt;a class="anchor" href="#predictable-network-interface-names"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Starting with v197 systemd/udev will automatically assign predictable, stable network interface names for all local Ethernet, WLAN and WWAN interfaces.
This is a departure from the traditional interface naming scheme (&lt;code&gt;eth0&lt;/code&gt;, &lt;code&gt;eth1&lt;/code&gt;, &lt;code&gt;wlan0&lt;/code&gt;, &amp;hellip;), but should fix real problems.&lt;/p&gt;
&lt;h2 id="why"&gt;Why?&lt;a class="anchor" href="#why"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The classic naming scheme for network interfaces applied by the kernel is to simply assign names beginning with &lt;code&gt;eth0&lt;/code&gt;, &lt;code&gt;eth1&lt;/code&gt;, &amp;hellip; to all interfaces as they are probed by the drivers.
As the driver probing is generally not predictable for modern technology this means that as soon as multiple network interfaces are available the assignment of the names &lt;code&gt;eth0&lt;/code&gt;, &lt;code&gt;eth1&lt;/code&gt; and so on is generally not fixed anymore and it might very well happen that &lt;code&gt;eth0&lt;/code&gt; on one boot ends up being &lt;code&gt;eth1&lt;/code&gt; on the next.
This can have serious security implications, for example in firewall rules which are coded for certain naming schemes, and which are hence very sensitive to unpredictable changing names.&lt;/p&gt;</description></item><item><title>Presets</title><link>http://systemd.cn/docs/PRESET/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/PRESET/</guid><description>&lt;h1 id="presets"&gt;Presets&lt;a class="anchor" href="#presets"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="why"&gt;Why?&lt;a class="anchor" href="#why"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Different &lt;strong&gt;distributions&lt;/strong&gt; have different policies on which services shall be enabled by default when the package they are shipped in is installed.
On Fedora all services stay off by default, so that installing a package will not cause a service to be enabled (with some exceptions).
On Debian all services are immediately enabled by default, so that installing a package will cause its service(s) to be enabled right-away.&lt;/p&gt;</description></item><item><title>Project IDs for Disk Quotas on Exec Directories</title><link>http://systemd.cn/docs/DISK-QUOTAS-PROJECTIDS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/DISK-QUOTAS-PROJECTIDS/</guid><description>&lt;h1 id="project-ids-on-systemd-systems"&gt;Project IDs on systemd Systems&lt;a class="anchor" href="#project-ids-on-systemd-systems"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Project IDs are needed to enforce disk quotas for Exec Directories.
Project IDs are unsigned, 32-bit integers. For disk quota enforcement,
the range used is 2147483648 - 4294967294, which is the highest range
inspired from &lt;code&gt;UIDS-GUID.md&lt;/code&gt;. The range is defined through &lt;code&gt;PROJ_ID_MIN&lt;/code&gt;
and &lt;code&gt;PROJ_ID_MAX&lt;/code&gt; in &lt;code&gt;exec-invoke.c&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Random Seeds</title><link>http://systemd.cn/docs/RANDOM_SEEDS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/RANDOM_SEEDS/</guid><description>&lt;h1 id="random-seeds"&gt;Random Seeds&lt;a class="anchor" href="#random-seeds"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;systemd can help in a number of ways with providing reliable, high quality
random numbers from early boot on.&lt;/p&gt;
&lt;h2 id="linux-kernel-entropy-pool"&gt;Linux Kernel Entropy Pool&lt;a class="anchor" href="#linux-kernel-entropy-pool"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Today&amp;rsquo;s computer systems require random number generators for numerous cryptographic and other purposes.
On Linux systems, the kernel&amp;rsquo;s entropy pool is typically used as high-quality source of random numbers. The kernel&amp;rsquo;s entropy pool combines various entropy inputs together, mixes them and provides
an API to userspace as well as to internal kernel subsystems to retrieve it.&lt;/p&gt;</description></item><item><title>Reporting of Security Vulnerabilities</title><link>http://systemd.cn/docs/SECURITY/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/SECURITY/</guid><description>&lt;h1 id="reporting-of-security-vulnerabilities"&gt;Reporting of Security Vulnerabilities&lt;a class="anchor" href="#reporting-of-security-vulnerabilities"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;If you discover a security vulnerability, we&amp;rsquo;d appreciate a non-public disclosure.
systemd developers can be contacted privately by creating a new &lt;strong&gt;&lt;a href="https://github.com/systemd/systemd/security/advisories/new"&gt;Security Advisory on GitHub&lt;/a&gt;&lt;/strong&gt; (preferred)
or via the &lt;a href="mailto:systemd-security@redhat.com"&gt;systemd-security@redhat.com&lt;/a&gt; mailing list.
The disclosure will be coordinated with distributions.&lt;/p&gt;
&lt;p&gt;(The &lt;a href="https://github.com/systemd/systemd/issues"&gt;issue tracker&lt;/a&gt; and &lt;a href="https://lists.freedesktop.org/mailman/listinfo/systemd-devel"&gt;systemd-devel mailing list&lt;/a&gt; are fully public.)&lt;/p&gt;
&lt;p&gt;Subscription to the Security Advisories and/or systemd-security mailing list is open to &lt;strong&gt;regular systemd contributors and people working in the security teams of various distributions&lt;/strong&gt;.
Those conditions should be backed by publicly accessible information (ideally, a track of posts and commits from the mail address in question).
If you fall into one of those categories and wish to be subscribed,
contact the maintainers or submit a &lt;strong&gt;&lt;a href="https://www.redhat.com/mailman/listinfo/systemd-security"&gt;subscription request&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Resource Pressure Handling</title><link>http://systemd.cn/docs/PRESSURE/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/PRESSURE/</guid><description>&lt;h1 id="resource-pressure-handling-in-systemd"&gt;Resource Pressure Handling in systemd&lt;a class="anchor" href="#resource-pressure-handling-in-systemd"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;On Linux the &lt;a href="https://docs.kernel.org/accounting/psi.html"&gt;Pressure Stall Information
(PSI)&lt;/a&gt; Linux kernel interface
provides a way to monitor resource pressure — situations where tasks are
stalled waiting for a resource to become available. PSI covers three types of
resources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Memory pressure&lt;/strong&gt;: tasks are stalled because the system is low on memory
and the kernel is busy reclaiming it (e.g. writing out pages to swap or
flushing file-backed pages).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CPU pressure&lt;/strong&gt;: tasks are stalled waiting for CPU time because the CPU is
oversubscribed.&lt;/p&gt;</description></item><item><title>Running Services After the Network Is Up</title><link>http://systemd.cn/docs/NETWORK_ONLINE/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/NETWORK_ONLINE/</guid><description>&lt;h1 id="network-configuration-synchronization-points"&gt;Network Configuration Synchronization Points&lt;a class="anchor" href="#network-configuration-synchronization-points"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;systemd provides three target units related to network configuration:&lt;/p&gt;
&lt;h2 id="network-pre-configuration-network-pretarget"&gt;Network pre-configuration: &lt;code&gt;network-pre.target&lt;/code&gt;&lt;a class="anchor" href="#network-pre-configuration-network-pretarget"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;network-pre.target&lt;/code&gt; is used to order services before any network interfaces
start to be configured. Its primary purpose is for usage with firewall services
that want to establish a firewall &lt;em&gt;before&lt;/em&gt; any network interface is up.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;network-pre.target&lt;/code&gt; is a passive unit: it cannot be started directly and it is
not pulled in by the network management service, but instead a service that
wants to run before it must pull it in. Network management services hence
should set &lt;code&gt;After=network-pre.target&lt;/code&gt;, but not &lt;code&gt;Wants=network-pre.target&lt;/code&gt; or
&lt;code&gt;Requires=network-pre.target&lt;/code&gt;. Services that want to be run before the network
is configured should use &lt;code&gt;Before=network-pre.target&lt;/code&gt; and
&lt;code&gt;Wants=network-pre.target&lt;/code&gt;. This way, unless there&amp;rsquo;s actually a service that
needs to be ordered before the network is up, this target is not pulled in,
avoiding an unnecessary synchronization point.&lt;/p&gt;</description></item><item><title>Safely Building Images</title><link>http://systemd.cn/docs/BUILDING_IMAGES/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/BUILDING_IMAGES/</guid><description>&lt;h1 id="building-images-safely"&gt;Building Images Safely&lt;a class="anchor" href="#building-images-safely"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;In many scenarios OS installations are shipped as pre-built images, that
require no further installation process beyond simple &lt;code&gt;dd&lt;/code&gt;-ing the image to
disk and booting it up.
When building such &amp;ldquo;golden&amp;rdquo; OS images for
&lt;code&gt;systemd&lt;/code&gt;-based OSes a few points should be taken into account.&lt;/p&gt;
&lt;p&gt;Most of the points described here are implemented by the
&lt;a href="https://github.com/systemd/mkosi"&gt;&lt;code&gt;mkosi&lt;/code&gt;&lt;/a&gt; OS image builder developed and
maintained by the systemd project.
If you are using or working on another image
builder it&amp;rsquo;s recommended to keep the following concepts and recommendations in
mind.&lt;/p&gt;</description></item><item><title>Showcases</title><link>http://systemd.cn/showcases/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/showcases/</guid><description>&lt;div class="book-hero text-center"&gt;
&lt;h1 id="at-the-moment-this-page-is-empty"&gt;At the moment this page is empty&lt;a class="anchor" href="#at-the-moment-this-page-is-empty"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;div&gt;</description></item><item><title>Socket Activation with Popular Daemons</title><link>http://systemd.cn/docs/DAEMON_SOCKET_ACTIVATION/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/DAEMON_SOCKET_ACTIVATION/</guid><description>&lt;h2 id="nginx"&gt;nginx&lt;a class="anchor" href="#nginx"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;nginx includes an undocumented, internal socket-passing mechanism based on the &lt;code&gt;NGINX&lt;/code&gt; environmental variable.
It uses this to perform reloads without having to close and reopen its sockets, but it&amp;rsquo;s also useful for socket activation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;/etc/nginx/my-nginx.conf&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;http {
 server {
 listen [::]:80 ipv6only=on;
 listen 80;
 }
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;/etc/systemd/system/my-nginx.service&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[Service]
User=nginx
Group=nginx
Environment=NGINX=3:4;
ExecStart=/usr/sbin/nginx -c/etc/nginx/my-nginx.conf
PrivateNetwork=true&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;/etc/systemd/system/my-nginx.socket&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[Socket]
ListenStream=80
ListenStream=0.0.0.0:80
BindIPv6Only=ipv6-only

[Install]
WantedBy=sockets.target&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="php-fpm"&gt;PHP-FPM&lt;a class="anchor" href="#php-fpm"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Like nginx, PHP-FPM includes a socket-passing mechanism an environmental variable.
In PHP-FPM&amp;rsquo;s case, it&amp;rsquo;s &lt;code&gt;FPM_SOCKETS&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Steps to a Successful Release</title><link>http://systemd.cn/docs/RELEASE/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/RELEASE/</guid><description>&lt;h1 id="steps-to-a-successful-release"&gt;Steps to a Successful Release&lt;a class="anchor" href="#steps-to-a-successful-release"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;Add all items to NEWS&lt;/li&gt;
&lt;li&gt;Update the contributors list in NEWS (&lt;code&gt;ninja -C build git-contrib&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Update the time and place in NEWS&lt;/li&gt;
&lt;li&gt;Update hwdb (&lt;code&gt;ninja -C build update-hwdb&lt;/code&gt;, &lt;code&gt;ninja -C build update-hwdb-autosuspend&lt;/code&gt;, commit separately).&lt;/li&gt;
&lt;li&gt;Update syscall numbers (&lt;code&gt;ninja -C build update-syscall-tables update-syscall-header&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;[RC1] Update library numbers in &lt;code&gt;meson.build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;[RC1] Switch &lt;code&gt;versionrewrite-pattern&lt;/code&gt; and &lt;code&gt;versionrewrite-replacement&lt;/code&gt; to RC mode in &lt;a href="https://build.opensuse.org/projects/system:systemd/packages/systemd/files/_service?expand=1"&gt;https://build.opensuse.org/projects/system:systemd/packages/systemd/files/_service?expand=1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Update version number in &lt;code&gt;meson.version&lt;/code&gt; (e.g. from &lt;code&gt;256~devel&lt;/code&gt; to &lt;code&gt;256~rc1&lt;/code&gt; or from &lt;code&gt;256~rc3&lt;/code&gt; to &lt;code&gt;256&lt;/code&gt;). Note that this uses a tilde (~) instead of a hyphen (-) because tildes sort lower in version comparisons according to the &lt;a href="https://uapi-group.org/specifications/specs/version_format_specification/"&gt;UAPI.10 Version Format Specification&lt;/a&gt;, and we want &lt;code&gt;255~rc1&lt;/code&gt; to sort lower than &lt;code&gt;255&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Check dbus docs with &lt;code&gt;ninja -C build update-dbus-docs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Check manpages list with &lt;code&gt;ninja -C build update-man-rules&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Update translation strings (&lt;code&gt;ninja -C build systemd-pot&lt;/code&gt;, &lt;code&gt;ninja -C build systemd-update-po&lt;/code&gt;) - drop the header comments from &lt;code&gt;systemd.pot&lt;/code&gt; + re-add SPDX before committing. If the only change in a file is the &amp;lsquo;POT-Creation-Date&amp;rsquo; field, then ignore that file.&lt;/li&gt;
&lt;li&gt;Tag the release: &lt;code&gt;version=&amp;quot;v$(sed 's/~/-/g' meson.version)&amp;quot; &amp;amp;&amp;amp; git tag -s &amp;quot;${version}&amp;quot; -m &amp;quot;systemd ${version}&amp;quot;&lt;/code&gt; (tildes are replaced with hyphens, because git doesn&amp;rsquo;t accept the former).&lt;/li&gt;
&lt;li&gt;Do &lt;code&gt;ninja -C build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Make sure that the version string and package string match: &lt;code&gt;build/systemctl --version&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;[FINAL] Close the github milestone and open a new one (&lt;a href="https://github.com/systemd/systemd/milestones"&gt;https://github.com/systemd/systemd/milestones&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Draft&amp;rdquo; a new release on github (&lt;a href="https://github.com/systemd/systemd/releases/new%29"&gt;https://github.com/systemd/systemd/releases/new)&lt;/a&gt;, mark &amp;ldquo;This is a pre-release&amp;rdquo; if appropriate.&lt;/li&gt;
&lt;li&gt;Check that announcement to systemd-devel, with a copy&amp;amp;paste from NEWS, was sent. This should happen automatically.&lt;/li&gt;
&lt;li&gt;Update IRC topic (&lt;code&gt;/msg chanserv TOPIC #systemd Version NNN released | Online resources https://systemd.io/&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;[FINAL] Create an empty -stable branch: &lt;code&gt;git push systemd origin/main:refs/heads/v${version}-stable&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;[FINAL] Edit in the new -stable branch &lt;code&gt;.obs/workflows.yml&lt;/code&gt;, changing &lt;code&gt;project&lt;/code&gt; from &lt;code&gt;system:systemd&lt;/code&gt; to &lt;code&gt;system:systemd:stable&lt;/code&gt; and the branch from &lt;code&gt;main&lt;/code&gt; to &lt;code&gt;v${version}-stable&lt;/code&gt;. This should be backported to older active stable branches too.&lt;/li&gt;
&lt;li&gt;[FINAL] Build and upload the documentation (on the -stable branch): &lt;code&gt;ninja -C build doc-sync&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;[FINAL] Create a new &lt;code&gt;ci/v${version}-stable&lt;/code&gt; branch for deb package builds on &lt;a href="https://salsa.debian.org/systemd-team/systemd"&gt;https://salsa.debian.org/systemd-team/systemd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[FINAL] Switch &lt;code&gt;.semaphore/semaphore-runner.sh&lt;/code&gt; and &lt;code&gt;mkosi/mkosi.pkgenv/mkosi.conf.d/debian-ubuntu.conf&lt;/code&gt;
to the new &lt;code&gt;ci/v${version}-stable&lt;/code&gt; branch on the -stable branch&lt;/li&gt;
&lt;li&gt;[FINAL] Switch &lt;code&gt;versionrewrite-pattern&lt;/code&gt; and &lt;code&gt;versionrewrite-replacement&lt;/code&gt; to release mode in &lt;a href="https://build.opensuse.org/projects/system:systemd/packages/systemd/files/_service?expand=1"&gt;https://build.opensuse.org/projects/system:systemd/packages/systemd/files/_service?expand=1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[FINAL] Change the Github Pages branch to the newly created branch (&lt;a href="https://github.com/systemd/systemd/settings/pages"&gt;https://github.com/systemd/systemd/settings/pages&lt;/a&gt;) and set the &amp;lsquo;Custom domain&amp;rsquo; to &amp;lsquo;systemd.io&amp;rsquo;&lt;/li&gt;
&lt;li&gt;[FINAL] Update version number in &lt;code&gt;meson.version&lt;/code&gt; to the devel version of the next release (e.g. from &lt;code&gt;256&lt;/code&gt; to &lt;code&gt;257~devel&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;[FINAL] Build and upload the documentation (on the main branch): &lt;code&gt;ninja -C build doc-sync&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id="steps-to-a-successful-stable-release"&gt;Steps to a Successful Stable Release&lt;a class="anchor" href="#steps-to-a-successful-stable-release"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;Backport at least the commits from all PRs tagged with &lt;code&gt;needs-stable-backport&lt;/code&gt; on Github with &lt;code&gt;git cherry-pick -x&lt;/code&gt;. Any other commits that fix bugs, change documentation, tests, CI or mkosi can generally be backported as well. Since 256 the stable branches live &lt;a href="https://github.com/systemd/systemd/"&gt;here&lt;/a&gt;. Stable branches for older releases are available &lt;a href="https://github.com/systemd/systemd-stable/"&gt;here&lt;/a&gt;. Check each commit to see if it makes sense to backport and check the comments on the PR to see if the author indicated that only specific commits should be backported.&lt;/li&gt;
&lt;li&gt;Update the version number in &lt;code&gt;meson.version&lt;/code&gt; (e.g. from &lt;code&gt;256.2&lt;/code&gt; to &lt;code&gt;256.3&lt;/code&gt;) (only for 256-stable or newer)&lt;/li&gt;
&lt;li&gt;Tag the release: &lt;code&gt;version=&amp;quot;v$(cat meson.version)&amp;quot; &amp;amp;&amp;amp; git tag -s &amp;quot;${version}&amp;quot; -m &amp;quot;systemd-stable ${version}&amp;quot;&lt;/code&gt; (Fill in the version manually on releases older than 256)&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Storage Daemons for the Root File System</title><link>http://systemd.cn/docs/ROOT_STORAGE_DAEMONS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/ROOT_STORAGE_DAEMONS/</guid><description>&lt;h1 id="systemd-and-storage-daemons-for-the-root-file-system"&gt;systemd and Storage Daemons for the Root File System&lt;a class="anchor" href="#systemd-and-storage-daemons-for-the-root-file-system"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;a.k.a. &lt;em&gt;Pax Cellae pro Radix Arbor&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;(or something like that, my Latin is a bit rusty)&lt;/p&gt;
&lt;p&gt;A number of complex storage technologies on Linux (e.g. RAID, volume
management, networked storage) require user space services to run while the
storage is active and mountable. This requirement becomes tricky as soon as the
root file system of the Linux operating system is stored on such storage
technology. Previously no clear path to make this work was available. This text
tries to clear up the resulting confusion, and what is now supported and what
is not.&lt;/p&gt;</description></item><item><title>systemd Community Conduct Guidelines</title><link>http://systemd.cn/docs/CODE_OF_CONDUCT/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/CODE_OF_CONDUCT/</guid><description>&lt;h1 id="the-systemd-community-conduct-guidelines"&gt;The systemd Community Conduct Guidelines&lt;a class="anchor" href="#the-systemd-community-conduct-guidelines"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;This document provides community guidelines for a safe, respectful, productive, and collaborative place for any person who is willing to contribute to systemd.
It applies to all “collaborative spaces”, which is defined as community communications channels (such as mailing lists, submitted patches, commit comments, etc.).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Participants will be tolerant of opposing views.&lt;/li&gt;
&lt;li&gt;Participants must ensure that their language and actions are free of personal attacks and disparaging personal remarks.&lt;/li&gt;
&lt;li&gt;When interpreting the words and actions of others, participants should always assume good intentions.&lt;/li&gt;
&lt;li&gt;Behaviour which can be reasonably considered harassment will not be tolerated.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="enforcement"&gt;Enforcement&lt;a class="anchor" href="#enforcement"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at &lt;a href="mailto:systemd-conduct@googlegroups.com"&gt;systemd-conduct@googlegroups.com&lt;/a&gt;.
This team currently consists of David Strauss &amp;laquo;&lt;a href="mailto:systemd-conduct@davidstrauss.net"&gt;systemd-conduct@davidstrauss.net&lt;/a&gt;&amp;raquo;, Ekaterina Gerasimova (Kat) &amp;laquo;&lt;a href="mailto:Kittykat3756@gmail.com"&gt;Kittykat3756@gmail.com&lt;/a&gt;&amp;raquo;, and Zbigniew Jędrzejewski-Szmek &amp;laquo;&lt;a href="mailto:zbyszek@in.waw.pl"&gt;zbyszek@in.waw.pl&lt;/a&gt;&amp;raquo;.
In the unfortunate event that you wish to make a complaint against one of the members, you may instead contact any of the other members individually.&lt;/p&gt;</description></item><item><title>systemd Coredump Handling</title><link>http://systemd.cn/docs/COREDUMP/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/COREDUMP/</guid><description>&lt;h1 id="systemd-coredump-handling"&gt;systemd Coredump Handling&lt;a class="anchor" href="#systemd-coredump-handling"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="support-in-the-service-manager-pid-1"&gt;Support in the Service Manager (PID 1)&lt;a class="anchor" href="#support-in-the-service-manager-pid-1"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The systemd service manager natively provides coredump handling functionality,
as implemented by the Linux kernel.
Specifically, PID 1 provides the following functionality:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;During very early boot it will raise the
&lt;a href="https://man7.org/linux/man-pages/man2/getrlimit.2.html"&gt;&lt;code&gt;LIMIT_CORE&lt;/code&gt;&lt;/a&gt;
resource limit for itself to infinity (and thus implicitly also all its children).
This removes any limits on the size of generated coredumps,
for all invoked processes, from earliest boot on.
(The Linux kernel sets the limit to 0 by default.)&lt;/p&gt;</description></item><item><title>systemd File Hierarchy Requirements</title><link>http://systemd.cn/docs/SYSTEMD_FILE_HIERARCHY_REQUIREMENTS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/SYSTEMD_FILE_HIERARCHY_REQUIREMENTS/</guid><description>&lt;h1 id="systemd-file-hierarchy-requirements"&gt;systemd File Hierarchy Requirements&lt;a class="anchor" href="#systemd-file-hierarchy-requirements"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;There are various attempts to standardize the file system hierarchy of Linux systems.
In systemd we leave much of the file system layout open to the operating system, but here&amp;rsquo;s what systemd strictly requires:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;/&lt;/code&gt;, &lt;code&gt;/usr&lt;/code&gt;, &lt;code&gt;/etc&lt;/code&gt; must be mounted when the host systemd is first invoked.
This may be achieved either by using the kernel&amp;rsquo;s built-in root disk mounting (in which case &lt;code&gt;/&lt;/code&gt;, &lt;code&gt;/usr&lt;/code&gt; and &lt;code&gt;/etc&lt;/code&gt; need to be on the same file system), or via an initrd, which could mount the three directories from different sources.&lt;/p&gt;</description></item><item><title>systemd Optimizations</title><link>http://systemd.cn/docs/OPTIMIZATIONS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/OPTIMIZATIONS/</guid><description>&lt;h1 id="systemd-optimizations"&gt;systemd Optimizations&lt;a class="anchor" href="#systemd-optimizations"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;So you are working on a Linux distribution or appliance and need very fast boot-ups?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;systemd can already offer boot times of &amp;lt; 1s for the Core OS (userspace only, i.e. only the bits controlled by systemd) and &amp;lt; 2s for a complete up-to-date desktop environments on simpler (but modern, i.e. SSDs) laptops if configured properly (examples: &lt;a href="http://git.fenrus.org/tmp/bootchart-20120512-1036.svg"&gt;http://git.fenrus.org/tmp/bootchart-20120512-1036.svg&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;In this page we want to suggest a couple of ideas how to achieve that, and if the resulting boot times do not suffice where we believe room for improvements are that we&amp;rsquo;d like to see implemented sooner or later.&lt;/p&gt;</description></item><item><title>systemd Repository Architecture</title><link>http://systemd.cn/docs/ARCHITECTURE/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/ARCHITECTURE/</guid><description>&lt;h1 id="the-systemd-repository-architecture"&gt;The systemd Repository Architecture&lt;a class="anchor" href="#the-systemd-repository-architecture"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="code-map"&gt;Code Map&lt;a class="anchor" href="#code-map"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This document provides a high-level overview of the various components of the systemd repository.&lt;/p&gt;
&lt;h2 id="source-code"&gt;Source Code&lt;a class="anchor" href="#source-code"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Directories in &lt;code&gt;src/&lt;/code&gt; provide the implementation of all daemons, libraries and command-line tools shipped by the project.
There are many, and more are constantly added, so we will not enumerate them all here — the directory names are self-explanatory.&lt;/p&gt;
&lt;h3 id="shared-code"&gt;Shared Code&lt;a class="anchor" href="#shared-code"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The code that is shared between components is split into a few directories, each with a different purpose:&lt;/p&gt;</description></item><item><title>systemd-boot UEFI Boot Manager</title><link>http://systemd.cn/docs/BOOT/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/BOOT/</guid><description>&lt;h1 id="systemd-boot-uefi-boot-manager"&gt;systemd-boot UEFI Boot Manager&lt;a class="anchor" href="#systemd-boot-uefi-boot-manager"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;systemd-boot is a UEFI boot manager which executes configured EFI images. The default entry is selected by a configured pattern (glob) or an on-screen menu.&lt;/p&gt;
&lt;p&gt;systemd-boot operates on the EFI System Partition (ESP) only. Configuration file fragments, kernels, initrds, other EFI images need to reside on the ESP.&lt;/p&gt;
&lt;p&gt;Linux kernels need to be built with CONFIG_EFI_STUB to be able to be directly executed as an EFI image.&lt;/p&gt;</description></item><item><title>systemd-homed and JSON User/Group Record Support in Desktop Environments</title><link>http://systemd.cn/docs/USERDB_AND_DESKTOPS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/USERDB_AND_DESKTOPS/</guid><description>&lt;h1 id="systemd-homed-and-json-usergroup-record-support-in-desktop-environments"&gt;&lt;code&gt;systemd-homed&lt;/code&gt; and JSON User/Group Record Support in Desktop Environments&lt;a class="anchor" href="#systemd-homed-and-json-usergroup-record-support-in-desktop-environments"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Starting with version 245, systemd supports a new subsystem
&lt;a href="https://www.freedesktop.org/software/systemd/man/latest/systemd-homed.service.html"&gt;&lt;code&gt;systemd-homed.service&lt;/code&gt;&lt;/a&gt;
for managing regular (&amp;ldquo;human&amp;rdquo;) users and their home directories.
Along with it a new concept &lt;code&gt;userdb&lt;/code&gt; got merged that brings rich, extensible JSON user/group
records, extending the classic UNIX/glibc NSS &lt;code&gt;struct passwd&lt;/code&gt;/&lt;code&gt;struct group&lt;/code&gt; structures.
Both additions are added in a fully backwards compatible way, accessible through &lt;code&gt;getpwnam()&lt;/code&gt;/&lt;code&gt;getgrnam()&lt;/code&gt;/… (i.e. libc NSS) and PAM as
usual, meaning that for basic support no changes in the upper layers of the
stack (in particular desktop environments, such as GNOME or KDE) have to be made.
However, for better support a number of changes to desktop environments are recommended.
A few areas where that applies are discussed below.&lt;/p&gt;</description></item><item><title>systemd-resolved and VPNs</title><link>http://systemd.cn/docs/RESOLVED-VPNS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/RESOLVED-VPNS/</guid><description>&lt;h1 id="systemd-resolvedservice-and-vpns"&gt;&lt;code&gt;systemd-resolved.service&lt;/code&gt; and VPNs&lt;a class="anchor" href="#systemd-resolvedservice-and-vpns"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;systemd-resolved.service&lt;/code&gt; supports routing lookups for specific domains to specific
interfaces. This is useful for hooking up VPN software with systemd-resolved
and making sure the exact right lookups end up on the VPN and on the other
interfaces.&lt;/p&gt;
&lt;p&gt;For a verbose explanation of &lt;code&gt;systemd-resolved.service&lt;/code&gt;&amp;rsquo;s domain routing logic,
see its &lt;a href="https://www.freedesktop.org/software/systemd/man/latest/systemd-resolved.service.html"&gt;man
page&lt;/a&gt;. This
document is supposed to provide examples to use the concepts for the specific
purpose of managing VPN DNS configuration.&lt;/p&gt;</description></item><item><title>Testing systemd Using Sanitizers</title><link>http://systemd.cn/docs/TESTING_WITH_SANITIZERS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/TESTING_WITH_SANITIZERS/</guid><description>&lt;h1 id="testing-systemd-using-sanitizers"&gt;Testing systemd Using Sanitizers&lt;a class="anchor" href="#testing-systemd-using-sanitizers"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;To catch the &lt;em&gt;nastier&lt;/em&gt; kind of bugs, you can run your code with &lt;a href="https://clang.llvm.org/docs/AddressSanitizer.html"&gt;Address Sanitizer&lt;/a&gt;
and &lt;a href="https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html"&gt;Undefined Behavior Sanitizer&lt;/a&gt;.
This is mostly done automagically by various CI systems for each PR, but you may
want to do it locally as well. The process slightly varies depending on the
compiler you want to use and which part of the test suite you want to run.&lt;/p&gt;
&lt;h2 id="mkosi"&gt;mkosi&lt;a class="anchor" href="#mkosi"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;To build with sanitizers in mkosi, create a file &lt;code&gt;mkosi/mkosi.local.conf&lt;/code&gt; and add the following contents:&lt;/p&gt;</description></item><item><title>The Case for the /usr Merge</title><link>http://systemd.cn/docs/THE_CASE_FOR_THE_USR_MERGE/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/THE_CASE_FOR_THE_USR_MERGE/</guid><description>&lt;h1 id="the-case-for-the-usr-merge"&gt;The Case for the /usr Merge&lt;a class="anchor" href="#the-case-for-the-usr-merge"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Why the /usr Merge Makes Sense for Compatibility Reasons&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This is based on the &lt;a href="https://fedoraproject.org/wiki/Features/UsrMove"&gt;Fedora feature&lt;/a&gt; for the same topic, put together by Harald Hoyer and Kay Sievers. This feature has been implemented successfully in Fedora 17.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Note that this page discusses a topic that is actually independent of systemd. systemd supports both systems with split and with merged /usr, and the /usr merge also makes sense for systemd-less systems. That said we want to encourage distributions adopting systemd to also adopt the /usr merge.&lt;/p&gt;</description></item><item><title>Tips And Tricks</title><link>http://systemd.cn/docs/TIPS_AND_TRICKS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/TIPS_AND_TRICKS/</guid><description>&lt;h1 id="tips--tricks"&gt;Tips &amp;amp; Tricks&lt;a class="anchor" href="#tips--tricks"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Also check out the &lt;a href="http://systemd.cn/FAQ"&gt;Frequently Asked Questions&lt;/a&gt;!&lt;/p&gt;
&lt;h2 id="listing-running-services"&gt;Listing running services&lt;a class="anchor" href="#listing-running-services"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ systemctl
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;UNIT LOAD ACTIVE SUB JOB DESCRIPTION
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;accounts-daemon.service loaded active running Accounts Service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;atd.service loaded active running Job spooling tools
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;bluetooth.service loaded active running Bluetooth Manager
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;colord-sane.service loaded active running Daemon &lt;span style="color:#ff6ac1"&gt;for&lt;/span&gt; monitoring attached scanners and registering them with colord
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;colord.service loaded active running Manage, Install and Generate Color Profiles
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;crond.service loaded active running Command Scheduler
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cups.service loaded active running CUPS Printing Service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dbus.service loaded active running D-Bus System Message Bus
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="showing-runtime-status"&gt;Showing runtime status&lt;a class="anchor" href="#showing-runtime-status"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ systemctl status udisks2.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;udisks2.service - Storage Daemon
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Loaded: loaded &lt;span style="color:#ff6ac1"&gt;(&lt;/span&gt;/usr/lib/systemd/system/udisks2.service; static&lt;span style="color:#ff6ac1"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Active: active &lt;span style="color:#ff6ac1"&gt;(&lt;/span&gt;running&lt;span style="color:#ff6ac1"&gt;)&lt;/span&gt; since Wed, &lt;span style="color:#ff9f43"&gt;27&lt;/span&gt; Jun &lt;span style="color:#ff9f43"&gt;2012&lt;/span&gt; 20:49:25 +0200; &lt;span style="color:#ff9f43"&gt;1&lt;/span&gt; day and 1h ago
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Main PID: &lt;span style="color:#ff9f43"&gt;615&lt;/span&gt; &lt;span style="color:#ff6ac1"&gt;(&lt;/span&gt;udisksd&lt;span style="color:#ff6ac1"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CGroup: &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/system/udisks2.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; └ &lt;span style="color:#ff9f43"&gt;615&lt;/span&gt; /usr/lib/udisks2/udisksd --no-debug
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Jun &lt;span style="color:#ff9f43"&gt;27&lt;/span&gt; 20:49:25 epsilon udisksd&lt;span style="color:#ff6ac1"&gt;[&lt;/span&gt;615&lt;span style="color:#ff6ac1"&gt;]&lt;/span&gt;: udisks daemon version 1.94.0 starting
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Jun &lt;span style="color:#ff9f43"&gt;27&lt;/span&gt; 20:49:25 epsilon udisksd&lt;span style="color:#ff6ac1"&gt;[&lt;/span&gt;615&lt;span style="color:#ff6ac1"&gt;]&lt;/span&gt;: Acquired the name org.freedesktop.UDisks2 on the system message bus&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="cgroup-tree"&gt;cgroup tree&lt;a class="anchor" href="#cgroup-tree"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ systemd-cgls
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└ system
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ &lt;span style="color:#ff9f43"&gt;1&lt;/span&gt; /usr/lib/systemd/systemd --system --deserialize &lt;span style="color:#ff9f43"&gt;18&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ ntpd.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;8471&lt;/span&gt; /usr/sbin/ntpd -u ntp:ntp -g
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ upower.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;798&lt;/span&gt; /usr/libexec/upowerd
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ wpa_supplicant.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;751&lt;/span&gt; /usr/sbin/wpa_supplicant -u -f /var/log/wpa_supplicant.log -c /etc/wpa_supplicant/wpa_supplicant.conf -u -f /var/log/wpa_supplicant.log -P /var/run/wpa_supplicant.pid
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ nfs-idmap.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;731&lt;/span&gt; /usr/sbin/rpc.idmapd
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ nfs-rquotad.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;753&lt;/span&gt; /usr/sbin/rpc.rquotad
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ nfs-mountd.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;732&lt;/span&gt; /usr/sbin/rpc.mountd
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ nfs-lock.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;704&lt;/span&gt; /sbin/rpc.statd
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ rpcbind.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;680&lt;/span&gt; /sbin/rpcbind -w
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ postfix.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├ &lt;span style="color:#ff9f43"&gt;859&lt;/span&gt; /usr/libexec/postfix/master
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├ &lt;span style="color:#ff9f43"&gt;877&lt;/span&gt; qmgr -l -t fifo -u
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;32271&lt;/span&gt; pickup -l -t fifo -u
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ colord-sane.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;647&lt;/span&gt; /usr/libexec/colord-sane
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ udisks2.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;615&lt;/span&gt; /usr/lib/udisks2/udisksd --no-debug
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ colord.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;607&lt;/span&gt; /usr/libexec/colord
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ prefdm.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├ &lt;span style="color:#ff9f43"&gt;567&lt;/span&gt; /usr/sbin/gdm-binary -nodaemon
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├ &lt;span style="color:#ff9f43"&gt;602&lt;/span&gt; /usr/libexec/gdm-simple-slave --display-id /org/gnome/DisplayManager/Display1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├ &lt;span style="color:#ff9f43"&gt;612&lt;/span&gt; /usr/bin/Xorg :0 -br -verbose -auth /var/run/gdm/auth-for-gdm-O00GPA/database -seat seat0 -nolisten tcp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;905&lt;/span&gt; gdm-session-worker &lt;span style="color:#ff6ac1"&gt;[&lt;/span&gt;pam/gdm-password&lt;span style="color:#ff6ac1"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ systemd-ask-password-wall.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;645&lt;/span&gt; /usr/bin/systemd-tty-ask-password-agent --wall
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ atd.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;544&lt;/span&gt; /usr/sbin/atd -f
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ ksmtuned.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├ &lt;span style="color:#ff9f43"&gt;548&lt;/span&gt; /bin/bash /usr/sbin/ksmtuned
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;1092&lt;/span&gt; sleep &lt;span style="color:#ff9f43"&gt;60&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ dbus.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├ &lt;span style="color:#ff9f43"&gt;586&lt;/span&gt; /bin/dbus-daemon --system --address&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd: --nofork --systemd-activation
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├ &lt;span style="color:#ff9f43"&gt;601&lt;/span&gt; /usr/libexec/polkit-1/polkitd --no-debug
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;657&lt;/span&gt; /usr/sbin/modem-manager
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ cups.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;508&lt;/span&gt; /usr/sbin/cupsd -f
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ avahi-daemon.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├ &lt;span style="color:#ff9f43"&gt;506&lt;/span&gt; avahi-daemon: running &lt;span style="color:#ff6ac1"&gt;[&lt;/span&gt;epsilon.local&lt;span style="color:#ff6ac1"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;516&lt;/span&gt; avahi-daemon: chroot helper
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ system-setup-keyboard.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;504&lt;/span&gt; /usr/bin/system-setup-keyboard
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ accounts-daemon.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;502&lt;/span&gt; /usr/libexec/accounts-daemon
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ systemd-logind.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;498&lt;/span&gt; /usr/lib/systemd/systemd-logind
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ crond.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;486&lt;/span&gt; /usr/sbin/crond -n
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ NetworkManager.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├ &lt;span style="color:#ff9f43"&gt;484&lt;/span&gt; /usr/sbin/NetworkManager --no-daemon
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;8437&lt;/span&gt; /sbin/dhclient -d -4 -sf /usr/libexec/nm-dhcp-client.action -pf /var/run/dhclient-wlan0.pid -lf /var/lib/dhclient/dhclient-903b6f6aa7a1-46c8-82a9-7f637dfbb3e4-wlan0.lease -cf /var/run/nm-d...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ libvirtd.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├ &lt;span style="color:#ff9f43"&gt;480&lt;/span&gt; /usr/sbin/libvirtd
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;571&lt;/span&gt; /sbin/dnsmasq --strict-order --bind-interfaces --pid-file&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;/var/run/libvirt/network/default.pid --conf-file&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt; --except-interface lo --listenaddress 192.168.122.1 --dhcp-range 192.168.122.2,1...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ bluetooth.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;479&lt;/span&gt; /usr/sbin/bluetoothd -n
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├ systemd-udev.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └ &lt;span style="color:#ff9f43"&gt;287&lt;/span&gt; /usr/lib/systemd/systemd-udevd
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└ systemd-journald.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└ &lt;span style="color:#ff9f43"&gt;280&lt;/span&gt; /usr/lib/systemd/systemd-journald&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ps-with-cgroups"&gt;ps with cgroups&lt;a class="anchor" href="#ps-with-cgroups"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ &lt;span style="color:#ff5c57"&gt;alias&lt;/span&gt; &lt;span style="color:#ff5c57"&gt;psc&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;&lt;span style="color:#5af78e"&gt;&amp;#39;ps xawf -eo pid,user,cgroup,args&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ psc
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; PID USER CGROUP COMMAND
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;1&lt;/span&gt; root &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/systemd-1 /bin/systemd systemd.log_target&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;kmsg systemd.log_level&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;debug &lt;span style="color:#ff5c57"&gt;selinux&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;&lt;span style="color:#ff9f43"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;415&lt;/span&gt; root &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/systemd-1/sysinit.service /sbin/udevd -d
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;928&lt;/span&gt; root &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/systemd-1/atd.service /usr/sbin/atd -f
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;930&lt;/span&gt; root &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/systemd-1/ntpd.service /usr/sbin/ntpd -n
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;932&lt;/span&gt; root &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/systemd-1/crond.service /usr/sbin/crond -n
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;935&lt;/span&gt; root &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/systemd-1/auditd.service /sbin/auditd -n
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;943&lt;/span&gt; root &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/systemd-1/auditd.service &lt;span style="color:#5af78e"&gt;\_&lt;/span&gt; /sbin/audispd
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;964&lt;/span&gt; root &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/systemd-1/auditd.service &lt;span style="color:#5af78e"&gt;\_&lt;/span&gt; /usr/sbin/sedispatch
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;937&lt;/span&gt; root &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/systemd-1/acpid.service /usr/sbin/acpid -f
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;941&lt;/span&gt; rpc &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/systemd-1/rpcbind.service /sbin/rpcbind -f
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;944&lt;/span&gt; root &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/systemd-1/rsyslog.service /sbin/rsyslogd -n -c &lt;span style="color:#ff9f43"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;947&lt;/span&gt; root &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/systemd-1/systemd-logger.service /lib/systemd/systemd-logger
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;950&lt;/span&gt; root &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/systemd-1/cups.service /usr/sbin/cupsd -f
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;955&lt;/span&gt; dbus &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/systemd-1/messagebus.service /bin/dbus-daemon --system --address&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd: --nofork --systemd-activation
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;969&lt;/span&gt; root &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/systemd-1/getty@.service/tty6 /sbin/mingetty tty6
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;970&lt;/span&gt; root &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/systemd-1/getty@.service/tty5 /sbin/mingetty tty5
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;971&lt;/span&gt; root &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/systemd-1/getty@.service/tty1 /sbin/mingetty tty1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;973&lt;/span&gt; root &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/systemd-1/getty@.service/tty4 /sbin/mingetty tty4
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;974&lt;/span&gt; root &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/user/lennart/2 login -- lennart
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;1824&lt;/span&gt; lennart &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/user/lennart/2 &lt;span style="color:#5af78e"&gt;\_&lt;/span&gt; -bash
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;975&lt;/span&gt; root &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/systemd-1/getty@.service/tty3 /sbin/mingetty tty3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;988&lt;/span&gt; root &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/systemd-1/polkitd.service /usr/libexec/polkit-1/polkitd
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ff9f43"&gt;994&lt;/span&gt; rtkit &lt;span style="color:#ff5c57"&gt;name&lt;/span&gt;&lt;span style="color:#ff6ac1"&gt;=&lt;/span&gt;systemd:/systemd-1/rtkit-daemon.service /usr/libexec/rtkit-daemon
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="changing-the-default-boot-target"&gt;Changing the Default Boot Target&lt;a class="anchor" href="#changing-the-default-boot-target"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e2e4e5;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ln -sf /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This line makes the multi user target (i.e. full system, but no graphical UI) the default target to boot into.
This is kinda equivalent to setting runlevel 3 as the default runlevel on Fedora/sysvinit systems.&lt;/p&gt;</description></item><item><title>User Record Blob Directories</title><link>http://systemd.cn/docs/USER_RECORD_BLOB_DIRS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/USER_RECORD_BLOB_DIRS/</guid><description>&lt;h1 id="user-record-blob-directories"&gt;User Record Blob Directories&lt;a class="anchor" href="#user-record-blob-directories"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The blob directories are for storing binary or unstructured data that would
otherwise be stored in &lt;a href="http://systemd.cn/USER_RECORD"&gt;JSON User Records&lt;/a&gt;. For instance,
this includes image files such as the user&amp;rsquo;s avatar picture. This data,
like most of the user record, will be made publicly available to the
system.&lt;/p&gt;
&lt;p&gt;The JSON User Record specifies the location of the blob directory via the
&lt;code&gt;blobDirectory&lt;/code&gt; field. If the field is unset, then there is no blob directory
and thus no blob files to look for. Note that &lt;code&gt;blobDirectory&lt;/code&gt; can exist in the
&lt;code&gt;regular&lt;/code&gt;, &lt;code&gt;perMachine&lt;/code&gt;, and &lt;code&gt;status&lt;/code&gt; sections. The blob directory is completely
owned and managed by the service that owns the rest of the user record (as
specified in the &lt;code&gt;service&lt;/code&gt; field).&lt;/p&gt;</description></item><item><title>User/Group Name Syntax</title><link>http://systemd.cn/docs/USER_NAMES/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/USER_NAMES/</guid><description>&lt;h1 id="usergroup-name-syntax"&gt;User/Group Name Syntax&lt;a class="anchor" href="#usergroup-name-syntax"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The precise set of allowed user and group names on Linux systems is weakly defined.
Depending on the distribution a different set of requirements and
restrictions on the syntax of user/group names are enforced — on some
distributions the accepted syntax is even configurable by the administrator.
In the interest of interoperability systemd enforces different rules when
processing users/group defined by other subsystems and when defining users/groups
itself, following the principle of &amp;ldquo;Be conservative in what you send, be liberal in what you accept&amp;rdquo;.
Also in the interest of interoperability systemd will enforce the same rules everywhere and not make them configurable or distribution dependent.
The precise rules are described below.&lt;/p&gt;</description></item><item><title>User/Group Record Lookup API via Varlink</title><link>http://systemd.cn/docs/USER_GROUP_API/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/USER_GROUP_API/</guid><description>&lt;h1 id="usergroup-record-lookup-api-via-varlink"&gt;User/Group Record Lookup API via Varlink&lt;a class="anchor" href="#usergroup-record-lookup-api-via-varlink"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;JSON User/Group Records (as described in the &lt;a href="http://systemd.cn/USER_RECORD"&gt;JSON User Records&lt;/a&gt;
and &lt;a href="http://systemd.cn/GROUP_RECORD"&gt;JSON Group Records&lt;/a&gt; documents) that are defined on the
local system may be queried with a &lt;a href="https://varlink.org/"&gt;Varlink&lt;/a&gt; API.
This API takes both the role of what
&lt;a href="https://man7.org/linux/man-pages/man3/getpwnam.3.html"&gt;&lt;code&gt;getpwnam(3)&lt;/code&gt;&lt;/a&gt; and
related calls are for &lt;code&gt;struct passwd&lt;/code&gt;, as well as the interfaces modules
implementing the &lt;a href="https://www.gnu.org/software/libc/manual/html_node/Name-Service-Switch.html"&gt;glibc Name Service Switch
(NSS)&lt;/a&gt; expose.
Or in other words, it both allows applications to efficiently query
user/group records from local services, and allows local subsystems to provide
user/group records efficiently to local applications.&lt;/p&gt;</description></item><item><title>Users, Groups, UIDs and GIDs on systemd Systems</title><link>http://systemd.cn/docs/UIDS-GIDS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/UIDS-GIDS/</guid><description>&lt;h1 id="users-groups-uids-and-gids-on-systemd-systems"&gt;Users, Groups, UIDs and GIDs on systemd Systems&lt;a class="anchor" href="#users-groups-uids-and-gids-on-systemd-systems"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Here&amp;rsquo;s a summary of the requirements &lt;code&gt;systemd&lt;/code&gt; (and Linux) make on UID/GID
assignments and their ranges.&lt;/p&gt;
&lt;p&gt;Note that while in theory UIDs and GIDs are orthogonal concepts they really aren&amp;rsquo;t IRL.
With that in mind, when we discuss UIDs below it should be assumed
that whatever we say about UIDs applies to GIDs in mostly the same way,
and all the special assignments and ranges for UIDs always have mostly the same validity for GIDs too.&lt;/p&gt;</description></item><item><title>Using /tmp/ and /var/tmp/ Safely</title><link>http://systemd.cn/docs/TEMPORARY_DIRECTORIES/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/TEMPORARY_DIRECTORIES/</guid><description>&lt;h1 id="using-tmp-and-vartmp-safely"&gt;Using &lt;code&gt;/tmp/&lt;/code&gt; and &lt;code&gt;/var/tmp/&lt;/code&gt; Safely&lt;a class="anchor" href="#using-tmp-and-vartmp-safely"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;/tmp/&lt;/code&gt; and &lt;code&gt;/var/tmp/&lt;/code&gt; are two world-writable directories Linux systems
provide for temporary files. The former is typically on &lt;code&gt;tmpfs&lt;/code&gt; and thus
backed by RAM/swap, and flushed out on each reboot. The latter is typically a
proper, persistent file system, and thus backed by physical storage. This
means:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;/tmp/&lt;/code&gt; should be used for smaller, size-bounded files only; &lt;code&gt;/var/tmp/&lt;/code&gt;
should be used for everything else.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Data that shall survive a boot cycle shouldn&amp;rsquo;t be placed in &lt;code&gt;/tmp/&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Varlink API Style</title><link>http://systemd.cn/docs/VARLINK/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/VARLINK/</guid><description>&lt;h1 id="general-guideline"&gt;General guideline&lt;a class="anchor" href="#general-guideline"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Varlink field names should use camelCase. This guideline does not apply to
well-known and documented configuration options, such as those defined in
&lt;a href="https://www.freedesktop.org/software/systemd/man/latest/systemd.unit.html"&gt;systemd.unit&lt;/a&gt;,
where existing naming conventions should be preserved for
compatibility and clarity.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Every field and method should include meaningful documentation. It&amp;rsquo;s
acceptable to reference existing documentation where appropriate.
Documentation may be omitted only when the meaning is self-evident, even to
someone not already familiar with varlink interface/method.&lt;/p&gt;</description></item><item><title>VM Interface</title><link>http://systemd.cn/docs/VM_INTERFACE/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/VM_INTERFACE/</guid><description>&lt;h1 id="the-vm-interface"&gt;The VM Interface&lt;a class="anchor" href="#the-vm-interface"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Also consult &lt;a href="https://systemd.io/WRITING_VM_AND_CONTAINER_MANAGERS"&gt;Writing Virtual Machine or Container
Managers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;systemd has a number of interfaces for interacting with virtual machine
managers, when systemd is used inside of a VM. If you work on a VM manager,
please consider supporting the following interfaces.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;systemd supports passing immutable binary data blobs with limited size and
restricted access to services via the &lt;code&gt;ImportCredential=&lt;/code&gt;, &lt;code&gt;LoadCredential=&lt;/code&gt;
and &lt;code&gt;SetCredential=&lt;/code&gt; settings. These credentials may be passed into a system
via SMBIOS Type 11 vendor strings, see
&lt;a href="https://www.freedesktop.org/software/systemd/man/latest/systemd.html"&gt;systemd(1)&lt;/a&gt;
for details. This concept may be used to flexibly configure various facets
ot the guest system. See
&lt;a href="https://www.freedesktop.org/software/systemd/man/latest/systemd.system-credentials.html"&gt;systemd.system-credentials(7)&lt;/a&gt;
for a list of system credentials implemented by various systemd components.&lt;/p&gt;</description></item><item><title>What Settings Are Currently Available For Transient Units?</title><link>http://systemd.cn/docs/TRANSIENT-SETTINGS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/TRANSIENT-SETTINGS/</guid><description>&lt;h1 id="what-settings-are-currently-available-for-transient-units"&gt;What Settings Are Currently Available For Transient Units?&lt;a class="anchor" href="#what-settings-are-currently-available-for-transient-units"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Our intention is to make all settings that are available as unit file settings
also available for transient units, through the D-Bus API. At the moment,
device, swap, and target units are not supported at all as transient units, but
others are pretty well supported.&lt;/p&gt;
&lt;p&gt;The lists below contain all settings currently available in unit files. The
ones currently available in transient units are prefixed with &lt;code&gt;✓&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Writing Desktop Environments</title><link>http://systemd.cn/docs/WRITING_DESKTOP_ENVIRONMENTS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/WRITING_DESKTOP_ENVIRONMENTS/</guid><description>&lt;h1 id="writing-desktop-environments"&gt;Writing Desktop Environments&lt;a class="anchor" href="#writing-desktop-environments"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Or: how to hook up your favorite desktop environment with logind&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;systemd&amp;rsquo;s logind service obsoletes ConsoleKit which was previously widely used on Linux distributions.
This provides a number of new features, but also requires updating of the Desktop Environment running on it, in a few ways.&lt;/p&gt;
&lt;p&gt;This document should be read together with &lt;a href="http://systemd.cn/WRITING_DISPLAY_MANAGERS"&gt;Writing Display Managers&lt;/a&gt; which focuses on the porting work necessary for display managers.&lt;/p&gt;
&lt;p&gt;If required it is possible to implement ConsoleKit and systemd-logind support in the same desktop environment code, detecting at runtime which interface is needed.
The &lt;a href="https://www.freedesktop.org/software/systemd/man/latest/sd_booted.html"&gt;sd_booted()&lt;/a&gt; call may be used to determine at runtime whether systemd is used.&lt;/p&gt;</description></item><item><title>Writing Display Managers</title><link>http://systemd.cn/docs/WRITING_DISPLAY_MANAGERS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/WRITING_DISPLAY_MANAGERS/</guid><description>&lt;h1 id="writing-display-managers"&gt;Writing Display Managers&lt;a class="anchor" href="#writing-display-managers"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Or: How to hook up your favorite X11 display manager with systemd&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;systemd&amp;rsquo;s logind service obsoletes ConsoleKit which was previously widely used on Linux distributions.
For X11 display managers the switch to logind requires a minimal amount of porting, however brings a couple of new features:
true automatic multi-seat support, proper tracking of session processes, (optional) automatic killing of user processes on logout, a synchronous low-level C API and much simplification.&lt;/p&gt;</description></item><item><title>Writing Network Configuration Managers</title><link>http://systemd.cn/docs/WRITING_NETWORK_CONFIGURATION_MANAGERS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/WRITING_NETWORK_CONFIGURATION_MANAGERS/</guid><description>&lt;h1 id="writing-network-configuration-managers"&gt;Writing Network Configuration Managers&lt;a class="anchor" href="#writing-network-configuration-managers"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Or: How to hook up your favourite network configuration manager&amp;rsquo;s DNS logic with &lt;code&gt;systemd-resolved&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(This is a longer explanation how to use some parts of &lt;code&gt;systemd-resolved&lt;/code&gt; bus API. If you are just looking for an API reference, consult the &lt;a href="https://www.freedesktop.org/software/systemd/man/latest/org.freedesktop.resolve1.html"&gt;bus API documentation&lt;/a&gt; instead.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Since systemd 229 &lt;code&gt;systemd-resolved&lt;/code&gt; offers a powerful bus API that may be used by network configuration managers (e.g. NetworkManager, connman, …, but also lower level DHCP, VPN or PPP daemons managing specific interfaces) to pass DNS server and DNSSEC configuration directly to &lt;code&gt;systemd-resolved&lt;/code&gt;.
Note that &lt;code&gt;systemd-resolved&lt;/code&gt; also reads the DNS configuration data in &lt;code&gt;/etc/resolv.conf&lt;/code&gt;, for compatibility. However, by passing the DNS configuration directly to &lt;code&gt;systemd-resolved&lt;/code&gt; via the bus a couple of benefits are available:&lt;/p&gt;</description></item><item><title>Writing Resolver Clients</title><link>http://systemd.cn/docs/WRITING_RESOLVER_CLIENTS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/WRITING_RESOLVER_CLIENTS/</guid><description>&lt;h1 id="writing-resolver-clients"&gt;Writing Resolver Clients&lt;a class="anchor" href="#writing-resolver-clients"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Or: How to look up hostnames and arbitrary DNS Resource Records via&lt;/em&gt; &lt;code&gt;systemd-resolved&lt;/code&gt; &lt;em&gt;&amp;rsquo;s bus APIs&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(This is a longer explanation how to use some parts of&lt;/em&gt; &lt;code&gt;systemd-resolved&lt;/code&gt; &lt;em&gt;bus API. If you are just looking for an API reference, consult the &lt;a href="https://www.freedesktop.org/software/systemd/man/latest/org.freedesktop.resolve1.html"&gt;bus API documentation&lt;/a&gt; instead.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;code&gt;systemd-resolved&lt;/code&gt;&lt;/em&gt; provides a set of APIs on the bus for resolving DNS resource records. These are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;ResolveHostname()&lt;/em&gt; for resolving hostnames to acquire their IP addresses&lt;/li&gt;
&lt;li&gt;&lt;em&gt;ResolveAddress()&lt;/em&gt; for the reverse operation: acquire the hostname for an IP address&lt;/li&gt;
&lt;li&gt;&lt;em&gt;ResolveService()&lt;/em&gt; for resolving a DNS-SD or SRV service&lt;/li&gt;
&lt;li&gt;&lt;em&gt;ResolveRecord()&lt;/em&gt; for resolving arbitrary resource records.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Below you&amp;rsquo;ll find examples for two of these calls, to show how to use them.
Note that glibc offers similar (and more portable) calls in &lt;em&gt;getaddrinfo()&lt;/em&gt;, &lt;em&gt;getnameinfo()&lt;/em&gt; and &lt;em&gt;res_query()&lt;/em&gt;.
Of these &lt;em&gt;getaddrinfo()&lt;/em&gt; and &lt;em&gt;getnameinfo()&lt;/em&gt; are directed to the calls above via the &lt;em&gt;nss-resolve&lt;/em&gt; NSS module, but &lt;em&gt;req_query()&lt;/em&gt; is not.
There are a number of reasons why it might be preferable to invoke &lt;code&gt;systemd-resolved&lt;/code&gt;&amp;rsquo;s bus calls rather than the glibc APIs:&lt;/p&gt;</description></item><item><title>Writing syslog Daemons Which Cooperate Nicely With systemd</title><link>http://systemd.cn/docs/SYSLOG/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/SYSLOG/</guid><description>&lt;h1 id="writing-syslog-daemons-which-cooperate-nicely-with-systemd"&gt;Writing syslog Daemons Which Cooperate Nicely With systemd&lt;a class="anchor" href="#writing-syslog-daemons-which-cooperate-nicely-with-systemd"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Here are a few notes on things to keep in mind when you work on a classic BSD syslog daemon for Linux, to ensure that your syslog daemon works nicely together with systemd.
If your syslog implementation does not follow these rules, then it will not be compatible with systemd v38 and newer.&lt;/p&gt;
&lt;p&gt;A few notes in advance: systemd centralizes all log streams in the Journal daemon.
Messages coming in via /dev/log, via the native protocol, via STDOUT/STDERR of all services and via the kernel are received in the journal daemon.&lt;/p&gt;</description></item><item><title>Writing VM and Container Managers</title><link>http://systemd.cn/docs/WRITING_VM_AND_CONTAINER_MANAGERS/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://systemd.cn/docs/WRITING_VM_AND_CONTAINER_MANAGERS/</guid><description>&lt;h1 id="writing-vm-and-container-managers"&gt;Writing VM and Container Managers&lt;a class="anchor" href="#writing-vm-and-container-managers"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Or: How to hook up your favorite VM or container manager with systemd&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Nomenclature: a &lt;em&gt;Virtual Machine&lt;/em&gt; shall refer to a system running on virtualized hardware consisting of a full OS with its own kernel.
A &lt;em&gt;Container&lt;/em&gt; shall refer to a system running on the same shared kernel of the host, but running a mostly complete OS with its own init system.
Both kinds of virtualized systems shall collectively be called &amp;ldquo;machines&amp;rdquo;.&lt;/p&gt;</description></item></channel></rss>