1
0
mirror of https://github.com/systemd/systemd synced 2026-03-23 23:34:52 +01:00

Compare commits

...

14 Commits

Author SHA1 Message Date
Franck Bui
463aef23a7 manager: reexecute on SIGRTMIN+25, user instances only
Before this patch, there was no way to request all running user instances for
reexecuting. However this can be useful especially during package updates
otherwise user instances are never updated and keep running a potentially very
old version of the binaries.

Now assuming that we have enough priviledge, it's possible to request
reexecution of all user instances:

  systemctl kill --signal=SIGRTMIN+25 "user@*.service"

Note that this request is obviously asynchronous as it relies on a
signal. Keeping "systemctl kill" as the only interface should be good enough to
make this obvious and that's the reason why another interface, such as
"systemctl --global daemon-reexec" has not been considered.

PID1 already uses SIGTERM for reexecuting hence sending it SIGRTMIN+25 is a
nop.
2021-07-28 18:50:30 +02:00
Lennart Poettering
fac5588944 update TODO 2021-07-28 18:39:17 +02:00
Yegor Alexeyev
caf8c6ea3f added missing handling of button release events 2021-07-28 17:34:31 +02:00
Yao Wei
f238549b5a Use SKU to identify Dell clamshell models for accelerometer properties
As per request from Dell, we need to use sku property of modalias that
is patched into linux 5.13 for model identification:

  https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e26f023e01ef26b4138bc1099af309bdc4523d23
2021-07-28 17:10:22 +02:00
Luca Boccassi
a8d1a8e96d
Merge pull request #20326 from keszybz/meson-0.53.2
Use some more new meson features
2021-07-28 13:30:37 +01:00
Luca Boccassi
8d5b391b19
Merge pull request #20311 from keszybz/manpage-l10n-report
Man pages cleanups
2021-07-28 12:37:39 +01:00
Zbigniew Jędrzejewski-Szmek
e04eae5e1c man/systemctl: rework descriptions of bind and mount-image
The text used "unit's view" to mean mount namespace. But we talk about
mount namespaces in the later part of the paragraph anyway, so trying to
use an "approachable term" only makes the whole thing harder to understand.
Let's use the precise term.

Some paragraph-breaking and re-indentation is done too.
2021-07-28 10:21:21 +02:00
Zbigniew Jędrzejewski-Szmek
12085ebb40 meson: use meson's summary()
The output is similar to our hand-crafted status message, but it's nice to use
the built-in functionality. After all, it was amended during development to
support our use case.
2021-07-28 10:04:06 +02:00
Zbigniew Jędrzejewski-Szmek
f12c5d36a9 meson: use alias_target for doc update commands
This undoes part of 4c890ad3cc7b3445683d7b52bc00e4a58bef5e94: the
implementations of update-dbus-docs and update-man-rules are moved back to
man/meson.build, and alias_target() is used to keep the visible target names
unchanged.

The rules for man pages are reworked so that it's possible to invoke the
targets even if xstlproc is not available. After all, xsltproc is only needed
for the final formatted output, and not other processing.
2021-07-27 20:34:40 +02:00
Zbigniew Jędrzejewski-Szmek
6839ce3318 meson: use alias_target in one place
It was added in meson 0.52.0, and fits very nicely here.
See https://mesonbuild.com/Release-notes-for-0-52-0.html#alias_target.
2021-07-27 19:58:55 +02:00
Zbigniew Jędrzejewski-Szmek
fce9abb227 meson: use a/b instead of join_paths(a,b)
It is nicer and shorter.
2021-07-27 19:32:35 +02:00
Zbigniew Jędrzejewski-Szmek
dab1fe1a8e man/tmpfiles.d: rewrite the description of age-by 2021-07-27 09:43:29 +02:00
Zbigniew Jędrzejewski-Szmek
d6029680df man: use title of docs/ pages when referring to them
There is some inconsistency, partially caused by the awkward naming
of the docs/ pages. But let's be consistent and use the "official" title.
If we ever change plural↔singular, we should use the same form everywhere.
2021-07-27 09:43:29 +02:00
Zbigniew Jędrzejewski-Szmek
be0d27ee0c man: fix assorted issues reported by the manpage-l10n project
Fixes #20297.
2021-07-27 09:43:29 +02:00
54 changed files with 545 additions and 486 deletions

2
TODO
View File

@ -83,6 +83,8 @@ Janitorial Clean-ups:
Features:
* use credentials logic/TPM2 logic to store homed signing key
* New udev block device symlink names:
/dev/disk/by-parttypelabel/<pttype>/<ptlabel>. Use case: if pt label is used
as partition image version string, this is a safe way to reference a specific

View File

@ -289,10 +289,10 @@ sensor:modalias:acpi:*KIOX000A*:dmi:*svn*CytrixTechnology:*pn*Complex11t:*
sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:pnVostro5581:*
ACCEL_LOCATION=base
sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:pnLatitude9520:*:ct10:*
sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:sku0A3E:*
ACCEL_LOCATION=base
sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:pnLatitude7420:*
sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:sku0B0B:*
ACCEL_LOCATION=base
# Dell Venue 8 Pro 3845

View File

@ -49,7 +49,7 @@ if conf.get('ENABLE_HWDB') == 1
if install_sysconfdir
meson.add_install_script('sh', '-c',
mkdir_p.format(join_paths(sysconfdir, 'udev/hwdb.d')))
mkdir_p.format(sysconfdir / 'udev/hwdb.d'))
meson.add_install_script('sh', '-c',
'test -n "$DESTDIR" || @0@/systemd-hwdb update'.format(rootbindir))

View File

@ -240,8 +240,8 @@
<varlistentry>
<term><option>--make-machine-id-directory=yes|no|auto</option></term>
<listitem><para>Control creation and deletion of the top-level machine ID directory on the file
system containing boot loader entries (i.e. beneath the file system returned by
<option>--print-boot-path</option> above) during <option>install</option> and
system containing boot loader entries (i.e. beneath the file system returned by the
<option>--print-boot-path</option> option, see above) during <option>install</option> and
<option>remove</option>, respectively. <literal>auto</literal> is equivalent to
<literal>yes</literal> if <filename>/etc/machine-id</filename> resides on a filesystem other than
tmpfs and <literal>no</literal> otherwise (in the latter case the machine ID is likely transient and

View File

@ -83,12 +83,9 @@
<varlistentry>
<term><varname>ProcessSizeMax=</varname></term>
<listitem><para>The maximum size in bytes of a core
which will be processed. Core dumps exceeding this size
may be stored, but the backtrace will not be generated.
Like other sizes in this same config file, the usual
suffixes to the base of 1024 are allowed (B, K, M,
G, T, P, and E.)</para>
<listitem><para>The maximum size in bytes of a core which will be processed. Core dumps exceeding
this size may be stored, but the backtrace will not be generated. Like other sizes in this same
config file, the usual suffixes to the base of 1024 are allowed (B, K, M, G, T, P, and E).</para>
<para>Setting <varname>Storage=none</varname> and <varname>ProcessSizeMax=0</varname>
disables all coredump handling except for a log entry.</para>
@ -99,9 +96,8 @@
<term><varname>ExternalSizeMax=</varname></term>
<term><varname>JournalSizeMax=</varname></term>
<listitem><para>The maximum (compressed or uncompressed) size in bytes of a
core to be saved. Unit suffixes are allowed just as in
<option>ProcessSizeMax=</option></para></listitem>.
<listitem><para>The maximum (compressed or uncompressed) size in bytes of a core to be saved. Unit
suffixes are allowed just as in <option>ProcessSizeMax=</option>.</para></listitem>
</varlistentry>
<varlistentry>
@ -120,9 +116,8 @@
by core dumps might temporarily exceed these limits while
core dumps are processed. Note that old core dumps are also
removed based on time via
<citerefentry><refentrytitle>systemd-tmpfiles</refentrytitle><manvolnum>8</manvolnum></citerefentry>. Set
either value to 0 to turn off size-based
clean-up.</para></listitem>
<citerefentry><refentrytitle>systemd-tmpfiles</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
Set either value to 0 to turn off size-based cleanup.</para></listitem>
</varlistentry>
</variablelist>

View File

@ -162,7 +162,7 @@
<term><option>-1</option></term>
<listitem><para>Show information of the most recent core dump only, instead of listing all known core
dumps. (Equivalent to <option>--reverse -n 1</option></para></listitem>
dumps. Equivalent to <option>--reverse -n 1</option>.</para></listitem>
</varlistentry>
<varlistentry>

View File

@ -37,7 +37,7 @@ man_pages = []
html_pages = []
source_xml_files = []
dbus_docs = []
foreach tuple : xsltproc.found() ? manpages : []
foreach tuple : manpages
stem = tuple[0]
section = tuple[1]
aliases = tuple[2]
@ -54,9 +54,15 @@ foreach tuple : xsltproc.found() ? manpages : []
htmlaliases += alias + '.html'
endforeach
mandirn = join_paths(get_option('mandir'), 'man' + section)
mandirn = get_option('mandir') / ('man' + section)
if condition == '' or conf.get(condition) == 1
file = files(tuple[0] + '.xml')
if tuple[0].startswith('org.freedesktop.')
dbus_docs += file
endif
if xsltproc.found()
p1 = custom_target(
man,
input : xml,
@ -74,7 +80,7 @@ foreach tuple : xsltproc.found() ? manpages : []
output : htmlalias,
command : [ln, '-fs', html, '@OUTPUT@'])
if want_html
dst = join_paths(docdir, 'html', htmlalias)
dst = docdir / 'html' / htmlalias
cmd = 'ln -fs @0@ $DESTDIR@1@'.format(html, dst)
meson.add_install_script('sh', '-c', cmd)
p2 += link
@ -89,13 +95,8 @@ foreach tuple : xsltproc.found() ? manpages : []
command : xslt_cmd + [custom_html_xsl, '@INPUT@'],
depends : [custom_entities_ent, p2],
install : want_html,
install_dir : join_paths(docdir, 'html'))
install_dir : docdir / 'html')
html_pages += p3
file = files(tuple[0] + '.xml')
source_xml_files += file
if tuple[0].startswith('org.freedesktop.')
dbus_docs += file
endif
else
message('Skipping @0@.@1@ because @2@ is false'.format(stem, section, condition))
@ -132,7 +133,7 @@ foreach tuple : xsltproc.found() ? [['systemd.directives', '7', systemd_directiv
html = stem + '.html'
man = stem + '.' + section
mandirn = join_paths(get_option('mandir'), 'man' + section)
mandirn = get_option('mandir') / ('man' + section)
p1 = custom_target(
man,
@ -152,7 +153,7 @@ foreach tuple : xsltproc.found() ? [['systemd.directives', '7', systemd_directiv
output : htmlalias,
command : [ln, '-fs', html, '@OUTPUT@'])
if want_html
dst = join_paths(docdir, 'html', htmlalias)
dst = docdir / 'html' / htmlalias
cmd = 'ln -fs @0@ $DESTDIR@1@'.format(html, dst)
meson.add_install_script('sh', '-c', cmd)
p2 += link
@ -167,7 +168,7 @@ foreach tuple : xsltproc.found() ? [['systemd.directives', '7', systemd_directiv
command : xslt_cmd + [custom_html_xsl, '@INPUT@'],
depends : [custom_entities_ent, p2],
install : want_html and have_lxml,
install_dir : join_paths(docdir, 'html'))
install_dir : docdir / 'html')
html_pages += p3
endforeach
@ -213,3 +214,26 @@ configure_file(
input : 'html.in',
output : 'html',
configuration : buildroot_substs)
############################################################
update_dbus_docs = custom_target(
'update-dbus-docs',
output : 'update-dbus-docs',
command : [update_dbus_docs_py, '--build-dir', project_build_root, '@INPUT@'],
input : dbus_docs)
if conf.get('BUILD_MODE_DEVELOPER') == 1
test('dbus-docs-fresh',
update_dbus_docs_py,
args : ['--build-dir', project_build_root, '--test', dbus_docs])
endif
update_man_rules = custom_target(
'update-man-rules',
output : 'update-man-rules',
command : [sh, '-c',
'cd @0@ && '.format(project_build_root) +
'python3 @0@/tools/update-man-rules.py $(find @0@ -wholename "*/man/*.xml") >t && '.format(project_source_root) +
'mv t @0@/rules/meson.build'.format(meson.current_source_dir())],
depends : custom_entities_ent)

View File

@ -67,7 +67,7 @@
<para>This is a simple mechanism to provide static user and group records via JSON drop-in files. Such
user records should be defined in the format described by the <ulink
url="https://systemd.io/USER_RECORD">JSON User Record</ulink> specification and be placed in one of the
url="https://systemd.io/USER_RECORD">JSON User Records</ulink> specification and be placed in one of the
aforementioned directories under a file name composed of the user name suffixed with
<filename>.user</filename>, with a world-readable access mode. A symlink named after the user record's
UID formatted in decimal and suffixed with <filename>.user</filename> pointing to the primary record file

View File

@ -373,7 +373,7 @@
<listitem><para>A lower-case string (mostly numeric, no spaces or other characters outside of 09,
az, ".", "_" and "-") identifying the operating system extensions support level, to indicate which
extension images are supported. See:
extension images are supported. See
<citerefentry><refentrytitle>systemd-sysext</refentrytitle><manvolnum>8</manvolnum></citerefentry>)
for more information.</para>

View File

@ -33,7 +33,7 @@
and hence the systemd control group hierarchy.</para>
<para>The module also applies various resource management and runtime parameters to the new session, as
configured in the <ulink url="https://systemd.io/USER_RECORD">JSON User Record</ulink> of the user, when
configured in the <ulink url="https://systemd.io/USER_RECORD">JSON User Records</ulink> of the user, when
one is defined.</para>
<para>On login, this module — in conjunction with <filename>systemd-logind.service</filename> — ensures the

View File

@ -452,8 +452,8 @@
<para>If the special value <literal>auto</literal> is specified, the source to copy from is
automatically picked up from the running system (or the image specified with
<option>--image=</option> — if used). A partition that matches both the configured partition type (as
declared with <varname>Type=</varname> above), and the currently mounted directory appropriate for
that partition type is determined. For example, if the partition type is set to
declared with <varname>Type=</varname> described above), and the currently mounted directory
appropriate for that partition type is determined. For example, if the partition type is set to
<literal>root</literal> the partition backing the root directory (<filename>/</filename>) is used as
source to copy from — if its partition type is set to <literal>root</literal> as well. If the
declared type is <literal>usr</literal> the partition backing <filename>/usr/</filename> is used as
@ -529,7 +529,7 @@
<varlistentry>
<term><varname>MakeDirectories=</varname></term>
<listitem><para>akes one or more absolute paths, separated by whitespace, each declaring a directory
<listitem><para>Takes one or more absolute paths, separated by whitespace, each declaring a directory
to create within the new file system. Behaviour is similar to <varname>CopyFiles=</varname>, but
instead of copying in a set of files this just creates the specified directories with the default
mode of 0755 owned by the root user and group, plus all their parent directories (with the same
@ -564,10 +564,10 @@
are copied in or the file system configured with <varname>Format=</varname> is created.</para>
<para>The LUKS2 UUID is automatically derived from the partition UUID in a stable fashion. If
<literal>key-file</literal> or <literal>key-file+tpm2</literal> is used a key is added to the LUKS2
superblock, configurable with the <option>--key-file=</option> switch to
<literal>key-file</literal> or <literal>key-file+tpm2</literal> is used, a key is added to the LUKS2
superblock, configurable with the <option>--key-file=</option> option to
<command>systemd-repart</command>. If <literal>tpm2</literal> or <literal>key-file+tpm2</literal> is
used a key is added to the LUKS2 superblock that is enrolled to the local TPM2 chip, as configured
used, a key is added to the LUKS2 superblock that is enrolled to the local TPM2 chip, as configured
with the <option>--tpm2-device=</option> and <option>--tpm2-pcrs=</option> options to
<command>systemd-repart</command>.</para>
@ -623,7 +623,7 @@
has no effect on explicit mounts, such as those done via <citerefentry
project='man-pages'><refentrytitle>mount</refentrytitle><manvolnum>8</manvolnum></citerefentry> or
<citerefentry
project='man-pages'><refentrytitle>fstab</refentrytitle><manvolnum>5</manvolnum></citerefentry></para>
project='man-pages'><refentrytitle>fstab</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
<para>If both bit 50 and 59 are set for a partition (i.e. the partition is marked both read-only and
marked for file system growing) the latter is typically without effect: the read-only flag takes

View File

@ -552,38 +552,62 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err
</varlistentry>
<varlistentry>
<term><command>bind</command> <replaceable>UNIT</replaceable> <replaceable>PATH</replaceable> [<replaceable>PATH</replaceable>]</term>
<term>
<command>bind</command>
<replaceable>UNIT</replaceable>
<replaceable>PATH</replaceable>
[<replaceable>PATH</replaceable>]
</term>
<listitem><para>Bind mounts a file or directory from the host into the specified unit's view. The first path
argument is the source file or directory on the host, the second path argument is the destination file or
directory in the unit's view. When the latter is omitted, the destination path in the unit's view is the same as
the source path on the host. When combined with the <option>--read-only</option> switch, a ready-only bind
mount is created. When combined with the <option>--mkdir</option> switch, the destination path is first created
before the mount is applied. Note that this option is currently only supported for units that run within a mount
namespace (e.g.: with <option>RootImage=</option>, <option>PrivateMounts=</option>, etc.). This command supports bind
mounting directories, regular files, device nodes, <constant>AF_UNIX</constant> socket nodes, as well as FIFOs.
The bind mount is ephemeral, and it is undone as soon as the current unit process exists.
Note that the namespace mentioned here, where the bind mount will be added to, is the one where the main service
process runs, as other processes run in distinct namespaces (e.g.: <option>ExecReload=</option>,
<option>ExecStartPre=</option>, etc.) </para></listitem>
<listitem><para>Bind-mounts a file or directory from the host into the specified unit's mount
namespace. The first path argument is the source file or directory on the host, the second path
argument is the destination file or directory in the unit's mount namespace. When the latter is
omitted, the destination path in the unit's mount namespace is the same as the source path on the
host. When combined with the <option>--read-only</option> switch, a ready-only bind mount is
created. When combined with the <option>--mkdir</option> switch, the destination path is first
created before the mount is applied.</para>
<para>Note that this option is currently only supported for units that run within a mount namespace
(e.g.: with <option>RootImage=</option>, <option>PrivateMounts=</option>, etc.). This command
supports bind-mounting directories, regular files, device nodes, <constant>AF_UNIX</constant>
socket nodes, as well as FIFOs. The bind mount is ephemeral, and it is undone as soon as the
current unit process exists. Note that the namespace mentioned here, where the bind mount will be
added to, is the one where the main service process runs. Other processes (those exececuted by
<option>ExecReload=</option>, <option>ExecStartPre=</option>, etc.) run in distinct namespaces.
</para></listitem>
</varlistentry>
<varlistentry>
<term><command>mount-image</command> <replaceable>UNIT</replaceable> <replaceable>IMAGE</replaceable> [<replaceable>PATH</replaceable> [<replaceable>PARTITION_NAME</replaceable>:<replaceable>MOUNT_OPTIONS</replaceable>]]</term>
<term>
<command>mount-image</command>
<replaceable>UNIT</replaceable>
<replaceable>IMAGE</replaceable>
[<replaceable>PATH</replaceable>
[<replaceable>PARTITION_NAME</replaceable>:<replaceable>MOUNT_OPTIONS</replaceable>]]
</term>
<listitem><para>Mounts an image from the host into the specified unit's view. The first path argument is the source
image on the host, the second path argument is the destination directory in the unit's view (ie: inside
<option>RootImage=</option>/<option>RootDirectory=</option>). Any following argument is interpreted as a
colon-separated tuple of partition name and comma-separated list of mount options for that partition. The format is the
same as the service <option>MountImages=</option> setting. When combined with the <option>--read-only</option> switch, a
ready-only mount is created. When combined with the <option>--mkdir</option> switch, the destination path is first
created before the mount is applied. Note that this option is currently only supported for units that run within a mount
namespace (e.g.: with <option>RootImage=</option>, <option>PrivateMounts=</option>, etc.).
Note that the namespace mentioned here, where the image mount will be added to, is the one where the main service
process runs, as other processes run in distinct namespaces (e.g.: <option>ExecReload=</option>,
<option>ExecStartPre=</option>, etc.). Example:
<listitem><para>Mounts an image from the host into the specified unit's mount namespace. The first
path argument is the source image on the host, the second path argument is the destination
directory in the unit's mount namespace (i.e. inside
<option>RootImage=</option>/<option>RootDirectory=</option>). The following argument, if any, is
interpreted as a colon-separated tuple of partition name and comma-separated list of mount options
for that partition. The format is the same as the service <option>MountImages=</option>
setting. When combined with the <option>--read-only</option> switch, a ready-only mount is
created. When combined with the <option>--mkdir</option> switch, the destination path is first
created before the mount is applied.</para>
<para>Note that this option is currently only supported for units that run within a mount namespace
(i.e. with <option>RootImage=</option>, <option>PrivateMounts=</option>, etc.). Note that the
namespace mentioned here where the image mount will be added to, is the one where the main service
process runs. Note that the namespace mentioned here, where the bind mount will be
added to, is the one where the main service process runs. Other processes (those exececuted by
<option>ExecReload=</option>, <option>ExecStartPre=</option>, etc.) run in distinct namespaces.
</para>
<para>Example:
<programlisting>systemctl mount-image foo.service /tmp/img.raw /var/lib/image root:ro,nosuid</programlisting>
<programlisting>systemctl mount-image --mkdir bar.service /tmp/img.raw /var/lib/baz/img</programlisting></para></listitem>
<programlisting>systemctl mount-image --mkdir bar.service /tmp/img.raw /var/lib/baz/img</programlisting>
</para></listitem>
</varlistentry>
<varlistentry>
@ -2185,9 +2209,9 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err
<term><option>--lines=</option></term>
<listitem>
<para>When used with <command>status</command>, controls the number of journal lines to show, counting from
the most recent ones. Takes a positive integer argument, or 0 to disable journal output. Defaults to
10.</para>
<para>When used with <command>status</command>, controls the number of journal lines to show,
counting from the most recent ones. Takes a positive integer argument, or 0 to disable journal
output. Defaults to 10.</para>
</listitem>
</varlistentry>
@ -2208,8 +2232,9 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err
<term><option>--firmware-setup</option></term>
<listitem>
<para>When used with the <command>reboot</command> command, indicate to the system's firmware to reboot into
the firmware setup interface. Note that this functionality is not available on all systems.</para>
<para>When used with the <command>reboot</command> command, indicate to the system's firmware to
reboot into the firmware setup interface. Note that this functionality is not available on all
systems.</para>
</listitem>
</varlistentry>
@ -2217,10 +2242,10 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err
<term><option>--boot-loader-menu=</option></term>
<listitem>
<para>When used with the <command>reboot</command> command, indicate to the system's boot loader to show the
boot loader menu on the following boot. Takes a time value as parameter — indicating the menu timeout. Pass
zero in order to disable the menu timeout. Note that not all boot loaders support this
functionality.</para>
<para>When used with the <command>reboot</command> command, indicate to the system's boot loader to
show the boot loader menu on the following boot. Takes a time value as parameter — indicating the
menu timeout. Pass zero in order to disable the menu timeout. Note that not all boot loaders
support this functionality.</para>
</listitem>
</varlistentry>
@ -2228,10 +2253,10 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err
<term><option>--boot-loader-entry=</option></term>
<listitem>
<para>When used with the <command>reboot</command> command, indicate to the system's boot loader to boot into
a specific boot loader entry on the following boot. Takes a boot loader entry identifier as argument, or
<literal>help</literal> in order to list available entries. Note that not all boot loaders support this
functionality.</para>
<para>When used with the <command>reboot</command> command, indicate to the system's boot loader to
boot into a specific boot loader entry on the following boot. Takes a boot loader entry identifier
as argument, or <literal>help</literal> in order to list available entries. Note that not all boot
loaders support this functionality.</para>
</listitem>
</varlistentry>

View File

@ -84,7 +84,7 @@
<term><option>--pkcs11-token-uri=</option><replaceable>URI</replaceable></term>
<listitem><para>Enroll a PKCS#11 security token or smartcard (e.g. a YubiKey). Expects a PKCS#11
smart card URI referring to the token. Alternatively the special value <literal>auto</literal> may
smartcard URI referring to the token. Alternatively the special value <literal>auto</literal> may
be specified, in order to automatically determine the URI of a currently plugged in security token
(of which there must be exactly one). The special value <literal>list</literal> may be used to
enumerate all suitable PKCS#11 tokens currently plugged in. The security token must contain an RSA

View File

@ -307,7 +307,7 @@
<varlistentry>
<term><literal>passwd.shell.root</literal></term>
<listitem><para>Specifies the shell binary to use for the specified account when creating it.
<listitem><para>Specifies the shell binary to use for the specified account.
Equivalent to the credential of the same name defined for the
<citerefentry><refentrytitle>systemd-sysusers.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
service.</para></listitem>

View File

@ -90,7 +90,7 @@
<varlistentry>
<term><option>--image=<replaceable>path</replaceable></option></term>
<listitem><para>Takes a path to a device node or refular file as argument. This is similar to
<listitem><para>Takes a path to a device node or regular file as argument. This is similar to
<option>--root=</option> as described above, but operates on a disk image instead of a directory
tree.</para></listitem>
</varlistentry>

View File

@ -1375,12 +1375,12 @@ After=sys-subsystem-net-devices-ens1.device</programlisting>
</orderedlist>
<para>The combination of the three operations above ensures that it is possible to log into the
host's user account inside the container as if it was local to the container. The user is only mapped
transiently, while the container is running and the mapping itself does not result in persistent
changes to the container (except maybe for generated log messages at login time, and similar). Note
that in particular the UID/GID assignment in the container is not made persistently. If the user is
mapped transiently, it is best to not allow the user to make persistent changes to the container. If
the user leaves files or directories owned by the user, and those UIDs/GIDs are recycled during later
container using the same account information as on the host. The user is only mapped transiently,
while the container is running, and the mapping itself does not result in persistent changes to the
container (except maybe for log messages generated at login time, and similar). Note that in
particular the UID/GID assignment in the container is not made persistently. If the user is mapped
transiently, it is best to not allow the user to make persistent changes to the container. If the
user leaves files or directories owned by the user, and those UIDs/GIDs are reused during later
container invocations (possibly with a different <option>--bind-user=</option> mapping), those files
and directories will be accessible to the "new" user.</para>
@ -1581,9 +1581,9 @@ After=sys-subsystem-net-devices-ens1.device</programlisting>
-b</programlisting>
<para>The above command line will invoke the specified image file <filename>image.raw</filename> in
volatile mode, i.e with an empty <filename>/etc/</filename> and <filename>/var/</filename>, so that
the container's payload recognizes this as first boot condition, and will invoke
<filename>systemd-firstboot.service</filename>, which then read the two passed credentials to
volatile mode, i.e. with empty <filename>/etc/</filename> and <filename>/var/</filename>. The
container payload will recognize this as a first boot, and will invoke
<filename>systemd-firstboot.service</filename>, which then reads the two passed credentials to
configure the system's initial locale and root password.</para>
</listitem>
</varlistentry>

View File

@ -35,8 +35,8 @@
<para>Most of <command>systemd-portabled</command>'s functionality is accessible through the
<citerefentry><refentrytitle>portablectl</refentrytitle><manvolnum>1</manvolnum></citerefentry> command.</para>
<para>See the <ulink url="https://systemd.io/PORTABLE_SERVICES">Portable
Services Documentation</ulink> for details about the concepts this service implements.</para>
<para>See <ulink url="https://systemd.io/PORTABLE_SERVICES">Portable Services</ulink> for details about
the concepts this service implements.</para>
</refsect1>
<refsect1>

View File

@ -275,7 +275,7 @@ search foobar.com barbar.com
fragility in both directions: a valid global name could be obscured by a local name, and resolution of
a relative local name could suddenly break when a new top-level domain is created, or when a new
subdomain of a top-level domain in registered. Resolving any given name as either relative or absolute
avoids this ambiguity.)</para></footnote></para></listitem>
avoids this ambiguity.</para></footnote></para></listitem>
<listitem><para>This resolver has a notion of the special <literal>.local</literal> domain used for
MulticastDNS, and will not route queries with that suffix to unicast DNS servers unless explicitly

View File

@ -46,7 +46,7 @@
operating system tree. When one or more system extension images are activated, their
<filename>/usr/</filename> and <filename>/opt/</filename> hierarchies are combined via
<literal>overlayfs</literal> with the same hierarchies of the host OS, and the host
<filename>/usr/</filename> and <filename>/opt</filename> overmounted with it ("merging"). When they are
<filename>/usr/</filename> and <filename>/opt/</filename> overmounted with it ("merging"). When they are
deactivated, the mount point is disassembled — again revealing the unmodified original host version of
the hierarchy ("unmerging"). Merging thus makes the extension's resources suddenly appear below the
<filename>/usr/</filename> and <filename>/opt/</filename> hierarchies as if they were included in the
@ -71,7 +71,7 @@
<orderedlist>
<listitem><para>Plain directories or btrfs subvolumes containing the OS tree</para></listitem>
<listitem><para>Disk images with a GPT disk label, following the <ulink
url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partition Specification</ulink></para></listitem>
url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partitions Specification</ulink></para></listitem>
<listitem><para>Disk images lacking a partition table, with a naked Linux file system (e.g. squashfs or ext4)</para></listitem>
</orderedlist>
@ -127,13 +127,15 @@
<title>Uses</title>
<para>The primary use case for system images are immutable environments where debugging and development
tools shall optionally be made available, but not included in the immutable base OS image itself
(e.g. <filename>strace</filename> and <filename>gdb</filename> shall be an optionally installable
addition in order to make debugging/development easier). System extension images should not be
misunderstood as a generic software packaging framework, as no dependency scheme is available: system
extensions should carry all files they need themselves, except for those already shipped in the
underlying host system image. Typically, system extension images are built at the same time as the base
OS image — within the same build system.</para>
tools shall optionally be made available, but not included in the immutable base OS image itself (e.g.
<citerefentry project='man-pages'><refentrytitle>strace</refentrytitle><manvolnum>1</manvolnum></citerefentry>
and
<citerefentry project='man-pages'><refentrytitle>gdb</refentrytitle><manvolnum>1</manvolnum></citerefentry>
shall be an optionally installable addition in order to make debugging/development easier). System
extension images should not be misunderstood as a generic software packaging framework, as no dependency
scheme is available: system extensions should carry all files they need themselves, except for those
already shipped in the underlying host system image. Typically, system extension images are built at the
same time as the base OS image — within the same build system.</para>
<para>Another use case for the system extension concept is temporarily overriding OS supplied resources
with newer ones, for example to install a locally compiled development version of some low-level

View File

@ -262,7 +262,7 @@
names in status messages (e.g. <literal>systemd-journald.service</literal>), instead of the longer
and more informative descriptions set with <varname>Description=</varname> (e.g. <literal>Journal
Logging Service</literal>). If <option>combined</option>, the system manager will use both unit names
and descriptions in status messages (e.g. <literal>systemdmd-jouranld.service - Journal Logging
and descriptions in status messages (e.g. <literal>systemd-journald.service - Journal Logging
Service</literal>).</para>
<para>See

View File

@ -34,14 +34,14 @@
JSON user/group records from classic UNIX/glibc NSS user/group records in order to provide full backwards
compatibility. It may also pick up statically defined JSON user/group records from drop-in files in
<filename>/etc/userdb/</filename>, <filename>/run/userdb/</filename>,
<filename>/run/host/userdb/</filename> and <filename>/use/lib/userdb/</filename>.</para>
<filename>/run/host/userdb/</filename> and <filename>/usr/lib/userdb/</filename>.</para>
<para>Most of <command>systemd-userdbd</command>'s functionality is accessible through the
<citerefentry><refentrytitle>userdbctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
command.</para>
<para>The user and group records this service provides access to follow the <ulink
url="https://systemd.io/USER_RECORD">JSON User Record</ulink> and <ulink
url="https://systemd.io/USER_RECORD">JSON User Records</ulink> and <ulink
url="https://systemd.io/GROUP_RECORD">JSON Group Record</ulink> definitions. This service implements the
<ulink url="https://systemd.io/USER_GROUP_API">User/Group Record Lookup API via Varlink</ulink>, and
multiplexes access other services implementing this API, too. It is thus both server and client of this

View File

@ -241,7 +241,7 @@
<para>This option is supported only for disk images that contain a single file system, without an
enveloping partition table. Images that contain a GPT partition table should instead include both
root file system and matching Verity data in the same image, implementing the <ulink
url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partition Specification</ulink>.</para>
url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partitions Specification</ulink>.</para>
<xi:include href="system-only.xml" xpointer="singular"/></listitem>
</varlistentry>
@ -402,14 +402,15 @@
<term><varname>ExtensionImages=</varname></term>
<listitem><para>This setting is similar to <varname>MountImages=</varname> in that it mounts a file
system hierarchy from a block device node or loopback file, but instead of providing a destination path,
an overlay will be set up. This option expects a whitespace separated list of mount definitions. Each
definition consists of a source path, optionally followed by a colon and a list of mount options.</para>
system hierarchy from a block device node or loopback file, but instead of providing a destination
path, an overlay will be set up. This option expects a whitespace separated list of mount
definitions. Each definition consists of a source path, optionally followed by a colon and a list of
mount options.</para>
<para>A read-only OverlayFS will be set up on top of <filename>/usr/</filename> and
<filename>/opt/</filename> hierarchies from the root. The order in which the images are listed
will determine the order in which the overlay is laid down: images specified first to last will result
in overlayfs layers bottom to top.</para>
<filename>/opt/</filename> hierarchies. The order in which the images are listed will determine the
order in which the overlay is laid down: images specified first to last will result in overlayfs
layers bottom to top.</para>
<para>Mount options may be defined as a single comma-separated list of options, in which case they
will be implicitly applied to the root partition on the image, or a series of colon-separated tuples
@ -2304,7 +2305,7 @@ SystemCallErrorNumber=EPERM</programlisting>
<listitem><para>Sets environment variables for executed processes. Each line is unquoted using the
rules described in "Quoting" section in
<citerefentry><refentrytitle>systemd.syntax</refentrytitle><manvolnum>5</manvolnum></citerefentry>
<citerefentry><refentrytitle>systemd.syntax</refentrytitle><manvolnum>7</manvolnum></citerefentry>
and becomes a list of variable assignments. If you need to assign a value containing spaces or the
equals sign to a variable, put quotes around the whole assignment. Variable expansion is not
performed inside the strings and the <literal>$</literal> character has no special meaning. Specifier

View File

@ -457,7 +457,7 @@
<term><varname>MTUBytes=</varname></term>
<listitem>
<para>The maximum transmission unit in bytes to set for the
device. The usual suffixes K, M, G, are supported and are
device. The usual suffixes K, M, G are supported and are
understood to the base of 1024.</para>
</listitem>
</varlistentry>
@ -465,7 +465,7 @@
<term><varname>BitsPerSecond=</varname></term>
<listitem>
<para>The speed to set for the device, the value is rounded
down to the nearest Mbps. The usual suffixes K, M, G, are
down to the nearest Mbps. The usual suffixes K, M, G are
supported and are understood to the base of 1000.</para>
</listitem>
</varlistentry>
@ -788,7 +788,7 @@
<term><varname>GenericSegmentOffloadMaxBytes=</varname></term>
<listitem>
<para>Specifies the maximum size of a Generic Segment Offload (GSO) packet the
device should accept. The usual suffixes K, M, G, are supported and are
device should accept. The usual suffixes K, M, G are supported and are
understood to the base of 1024. An unsigned integer in the range 1…65536.
Defaults to unset.</para>
</listitem>
@ -796,7 +796,7 @@
<varlistentry>
<term><varname>GenericSegmentOffloadMaxSegments=</varname></term>
<listitem>
<para>Specifies the maximum number of a Generic Segment Offload (GSO) segments the device should
<para>Specifies the maximum number of Generic Segment Offload (GSO) segments the device should
accept. An unsigned integer in the range 1…65535. Defaults to unset.</para>
</listitem>
</varlistentry>

View File

@ -390,7 +390,7 @@
<term><varname>DefaultPVID=</varname></term>
<listitem>
<para>This specifies the default port VLAN ID of a newly attached bridge port.
Set this to an integer in the range 14094 or <literal>none</literal> to disable the PVID.</para>
Set this to an integer in the range 14094 or <literal>none</literal> to disable the PVID.</para>
</listitem>
</varlistentry>
<varlistentry>
@ -460,7 +460,7 @@
<varlistentry>
<term><varname>Id=</varname></term>
<listitem>
<para>The VLAN ID to use. An integer in the range 04094.
<para>The VLAN ID to use. An integer in the range 04094.
This setting is compulsory.</para>
</listitem>
</varlistentry>
@ -654,7 +654,7 @@
<term><varname>TTL=</varname></term>
<listitem>
<para>A fixed Time To Live N on Virtual eXtensible Local Area Network packets.
Takes <literal>inherit</literal> or a number in the range 0255. 0 is a special
Takes <literal>inherit</literal> or a number in the range 0255. 0 is a special
value meaning inherit the inner protocol's TTL value. <literal>inherit</literal>
means that it will inherit the outer protocol's TTL value.</para>
</listitem>
@ -913,7 +913,7 @@
<varlistentry>
<term><varname>TunnelId=</varname></term>
<listitem>
<para>Specifies the tunnel identifier. Takes an number in the range 14294967295. The value used
<para>Specifies the tunnel identifier. Takes an number in the range 14294967295. The value used
must match the <literal>PeerTunnelId=</literal> value being used at the peer. This setting is
compulsory.</para>
</listitem>
@ -1002,7 +1002,7 @@
<varlistentry>
<term><varname>SessionId=</varname></term>
<listitem>
<para>Specifies the session identifier. Takes an number in the range 14294967295. The value used
<para>Specifies the session identifier. Takes an number in the range 14294967295. The value used
must match the <literal>SessionId=</literal> value being used at the peer. This setting is
compulsory.</para>
</listitem>
@ -1010,7 +1010,7 @@
<varlistentry>
<term><varname>PeerSessionId=</varname></term>
<listitem>
<para>Specifies the peer session identifier. Takes an number in the range 14294967295.
<para>Specifies the peer session identifier. Takes an number in the range 14294967295.
The value used must match the <literal>PeerSessionId=</literal> value being used at the peer.
This setting is compulsory.</para>
</listitem>
@ -1234,7 +1234,7 @@
<term><varname>TTL=</varname></term>
<listitem>
<para>A fixed Time To Live N on tunneled packets. N is a
number in the range 1255. 0 is a special value meaning that
number in the range 1255. 0 is a special value meaning that
packets inherit the TTL value. The default value for IPv4
tunnels is 0 (inherit). The default value for IPv6 tunnels is
64.</para>
@ -1256,7 +1256,7 @@
It is only used for IPv6 tunnels.
A flow label of zero is used to indicate packets that have
not been labeled.
It can be configured to a value in the range 00xFFFFF, or be
It can be configured to a value in the range 00xFFFFF, or be
set to <literal>inherit</literal>, in which case the original flowlabel is used.</para>
</listitem>
</varlistentry>
@ -1673,15 +1673,15 @@
<para>Sets a comma-separated list of IP (v4 or v6) addresses with CIDR masks
from which this peer is allowed to send incoming traffic and to
which outgoing traffic for this peer is directed.</para>
<para>The catch-all 0.0.0.0/0 may be specified for matching all IPv4 addresses,
and ::/0 may be specified for matching all IPv6 addresses.</para>
<para>Note that this only affects "routing inside the network interface itself",
as in, which wireguard peer packets with a specific destination address are sent to,
and what source addresses are accepted from which peer.</para>
<para>To cause packets to be sent via wireguard in first place, a route needs
to be added, as well - either in the <literal>[Routes]</literal> section on the
<literal>.network</literal> matching the wireguard interface, or outside of networkd.
</para>
<para>Note that this only affects <emphasis>routing inside the network interface itself</emphasis>,
i.e. the packets that pass through the tunnel itself. To cause packets to be sent via the tunnel in
the first place, an appropriate route needs to be added as well — either in the
<literal>[Routes]</literal> section on the <literal>.network</literal> matching the wireguard
interface, or externally to <filename>systemd-networkd</filename>.</para>
</listitem>
</varlistentry>
<varlistentry>
@ -1823,7 +1823,7 @@
<term><varname>AdUserPortKey=</varname></term>
<listitem>
<para>Specifies the 802.3ad user defined portion of the port key. Takes a number in the range
01023.</para>
01023.</para>
</listitem>
</varlistentry>
@ -2036,9 +2036,9 @@
<refsect1>
<title>[BatmanAdvanced] Section Options</title>
<para>The [BatmanAdvanced] section only applies for
netdevs of kind <literal>batadv</literal> and accepts the
following keys:</para>
<para>The [BatmanAdvanced] section only applies for netdevs of kind <literal>batadv</literal> and accepts
the following keys:</para>
<variablelist class='network-directives'>
<varlistentry>

View File

@ -1423,7 +1423,7 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
<term><varname>Metric=</varname></term>
<listitem>
<para>The metric of the route. Takes an unsigned integer in the range 0…4294967295.
Defaluts to unset, and the kernel's default will be used.</para>
Defaults to unset, and the kernel's default will be used.</para>
</listitem>
</varlistentry>
<varlistentry>
@ -1615,9 +1615,10 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
<term><varname>SendHostname=</varname></term>
<listitem>
<para>When true (the default), the machine's hostname (or the value specified with
<varname>Hostname=</varname> below) will be sent to the DHCP server. Note that the hostname must
consist only of 7-bit ASCII lower-case characters and no spaces or dots, and be formatted as a
valid DNS domain name. Otherwise, the hostname is not sent even if this option is true.</para>
<varname>Hostname=</varname>, described below) will be sent to the DHCP server. Note that the
hostname must consist only of 7-bit ASCII lower-case characters and no spaces or dots, and be
formatted as a valid DNS domain name. Otherwise, the hostname is not sent even if this option is
true.</para>
</listitem>
</varlistentry>
@ -1911,8 +1912,8 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
<term><varname>FallbackLeaseLifetimeSec=</varname></term>
<listitem>
<para>Allows to set DHCPv4 lease lifetime when DHCPv4 server does not send the lease lifetime.
Takes one of <literal>forever</literal> or <literal>infinity</literal> means that the address
never expires. Defaults to unset.</para>
Takes one of <literal>forever</literal> or <literal>infinity</literal>. The latter means that the
address never expires. Defaults to unset.</para>
</listitem>
</varlistentry>
@ -2339,9 +2340,9 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
<varlistentry>
<term><varname>ServerAddress=</varname></term>
<listitem><para>Specifies server address for the DHCP server. Takes an IPv4 address with prefix
length, e.g., <literal>192.168.0.1/24</literal>. This setting may be useful when the link which
DHCP server running on has multiple static addresses. When unset, one of static addresses in
the link will be automatically selected. Defaults to unset.</para></listitem>
length, for example <literal>192.168.0.1/24</literal>. This setting may be useful when the link on
which the DHCP server is running has multiple static addresses. When unset, one of static addresses
in the link will be automatically selected. Defaults to unset.</para></listitem>
</varlistentry>
<varlistentry>
@ -2521,23 +2522,22 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
<refsect1>
<title>[DHCPServerStaticLease] Section Options</title>
<para>The <literal>[DHCPServerStaticLease]</literal> section configures a static DHCP lease to
assign a pre-set IPv4 address to a specific device based on its MAC address. This section can be
specified multiple times.</para>
<para>The <literal>[DHCPServerStaticLease]</literal> section configures a static DHCP lease to assign a
fixed IPv4 address to a specific device based on its MAC address. This section can be specified multiple
times.</para>
<variablelist class='network-directives'>
<varlistentry>
<term><varname>MACAddress=</varname></term>
<listitem><para>The hardware address of a device which should be assigned IPv4 address
specified in <varname>Address=</varname>. This key is mandatory.</para></listitem>
<listitem><para>The hardware address of a device to match. This key is mandatory.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>Address=</varname></term>
<listitem><para>IPv4 address that should be assigned to a device with a hardware address
specified in <varname>MACAddress=</varname>. This key is mandatory.</para></listitem>
<listitem><para>The IPv4 address that should be assigned to the device that was matched with
<varname>MACAddress=</varname>. This key is mandatory.</para></listitem>
</varlistentry>
</variablelist>
</refsect1>

View File

@ -202,7 +202,7 @@
capabilities (see
<citerefentry project='man-pages'><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>
for details). The <varname>AmbientCapability=</varname> setting
specifies capability which will be passed to to started program
specifies capability which will be passed to the started program
in the inheritable and ambient capability sets. This will grant
these capabilities to this process. This setting correspond to
the <option>--ambient-capability=</option> command line switch.

View File

@ -207,7 +207,7 @@ disable *</programlisting>
<citerefentry><refentrytitle>systemd-delta</refentrytitle><manvolnum>1</manvolnum></citerefentry>
</para>
<para><citerefentry><refentrytitle>daemon</refentrytitle><manvolnum>8</manvolnum></citerefentry>
<para><citerefentry><refentrytitle>daemon</refentrytitle><manvolnum>7</manvolnum></citerefentry>
has a discussion of packaging scriptlets.</para>
<para>Fedora page introducing the use of presets:

View File

@ -1134,7 +1134,7 @@
<literal>\;</literal>.</para>
<para>Each command line is unquoted using the rules described in "Quoting" section in
<citerefentry><refentrytitle>systemd.syntax</refentrytitle><manvolnum>5</manvolnum></citerefentry>. The
<citerefentry><refentrytitle>systemd.syntax</refentrytitle><manvolnum>7</manvolnum></citerefentry>. The
first item becomes the command to execute, and the subsequent items the arguments.</para>
<para>This syntax is inspired by shell syntax, but only the meta-characters and expansions

View File

@ -1535,7 +1535,7 @@
<varlistentry>
<term><varname>ConditionControlGroupController=</varname></term>
<listitem><para>Check whether given cgroup controllers (eg. <literal>cpu</literal>) are available
<listitem><para>Check whether given cgroup controllers (e.g. <literal>cpu</literal>) are available
for use on the system or whether the legacy v1 cgroup or the modern v2 cgroup hierarchy is used.
</para>

View File

@ -585,6 +585,17 @@
for --user instances).</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>SIGRTMIN+25</constant></term>
<listitem><para>Upon receiving this signal the systemd manager will reexecute itself. This
is mostly equivalent to <command>systemctl daemon-reexec</command> except that it will be
done asynchronously.</para>
<para>The systemd system manager treats this signal the same way as
<constant>SIGTERM</constant>.</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>SIGRTMIN+26</constant></term>

View File

@ -550,6 +550,7 @@ w- /proc/sys/vm/swappiness - - - - 10</programlisting></para>
<refsect2>
<title>Age</title>
<para>The date field, when set, is used to decide what files to
delete when cleaning. If a file or directory is older than the
current time minus the age field, it is deleted. The field
@ -582,10 +583,9 @@ w- /proc/sys/vm/swappiness - - - - 10</programlisting></para>
and <varname>X</varname>. If omitted or set to
<literal>-</literal>, no automatic clean-up is done.</para>
<para>If the age field starts with a tilde character
<literal>~</literal>, the clean-up is only applied to files and
directories one level inside the directory specified, but not
the files and directories immediately inside it.</para>
<para>If the age field starts with a tilde character <literal>~</literal>, clean-up is only applied to
files and directories one level inside the directory specified, but not the files and directories
immediately inside it.</para>
<para>The age of a file system entry is determined from its last
modification timestamp (mtime), its last access timestamp (atime),
@ -595,30 +595,25 @@ w- /proc/sys/vm/swappiness - - - - 10</programlisting></para>
the age field. To restrict the deletion based on particular type
of file timestamps, the age-by argument can be used.</para>
<para>The age-by argument, when (optionally) specified along
with age will check if the file system entry has aged by the
type of file timestamp(s) provided. It can be specified by
prefixing the age argument with a set of file timestamp types
followed by a colon character <literal>:</literal>, i.e.,
<literal><replaceable>age-by</replaceable>:<replaceable>cleanup-age</replaceable></literal>.
The argument can be a set of:
<constant>a</constant> (<constant>A</constant> for directories),
<constant>b</constant> (<constant>B</constant> for directories),
<constant>c</constant> (<constant>C</constant> for directories; ignored by default), or
<constant>m</constant> (<constant>M</constant> for directories),
indicating access, creation, last status change, and last
modification times of a file system entry respectively. See
<citerefentry project='man-pages'><refentrytitle>statx</refentrytitle><manvolnum>2</manvolnum></citerefentry>
file timestamp fields for more details.</para>
<para>The age-by argument overrides the timestamp types to be used for the age check. It can be
specified by prefixing the age argument with a sequence of characters to specify the timestamp types
and a colon (<literal>:</literal>):
<literal><replaceable>age-by</replaceable>...:<replaceable>cleanup-age</replaceable></literal>. The
argument can consist of <constant>a</constant> (<constant>A</constant> for directories),
<constant>b</constant> (<constant>B</constant> for directories), <constant>c</constant>
(<constant>C</constant> for directories), or <constant>m</constant> (<constant>M</constant> for
directories). Those respectively indicate access, creation, last status change, and last modification
time of a file system entry. The lower-case letter signifies that the given timestamp type should be
considered for files, while the upper-case letter signifies that the given timestamp type should be
considered for directories. See <citerefentry
project='man-pages'><refentrytitle>statx</refentrytitle><manvolnum>2</manvolnum></citerefentry> file
timestamp fields for more details about timestamp types.</para>
<para>If unspecified, the age-by field defaults to
<constant>abcmABM</constant>,
i.e., by default all file timestamps are taken into consideration,
with the exception of the last status change timestamp (ctime) for
directories. This is because the aging logic itself will alter the
ctime whenever it deletes a file inside it. To ensure that running
the aging logic does not feed back into the next iteration of it,
ctime for directories is ignored by default.</para>
<para>If not specified, the age-by field defaults to <constant>abcmABM</constant>, i.e. by default all
file timestamps are taken into consideration, with the exception of the last status change timestamp
(ctime) for directories. This is because the aging logic itself will alter the ctime whenever it
deletes a file inside it. To ensure that running the aging logic does not feed back into the next
iteration of itself, ctime for directories is ignored by default.</para>
<para>For example:<programlisting>
# Files created and modified, and directories accessed more than

View File

@ -42,7 +42,7 @@
url="https://systemd.io/USER_GROUP_API">User/Group Record Lookup API via Varlink</ulink>, and may also
pick up drop-in JSON user and group records from <filename>/etc/userdb/</filename>,
<filename>/run/userdb/</filename>, <filename>/run/host/userdb/</filename>,
<filename>/use/lib/userdb/</filename>.</para>
<filename>/usr/lib/userdb/</filename>.</para>
</refsect1>
<refsect1>
@ -104,7 +104,7 @@
<listitem><para>Controls whether to include user/group lookups in the output that are defined using
drop-in files in <filename>/etc/userdb/</filename>, <filename>/run/userdb/</filename>,
<filename>/run/host/userdb/</filename>, <filename>/use/lib/userdb/</filename>. If
<filename>/run/host/userdb/</filename>, <filename>/usr/lib/userdb/</filename>. If
<option>--with-dropin=no</option> is used these records are suppressed. If
<option>--with-dropin=yes</option> is specified such users/groups are included in the output (which
is the default).</para></listitem>
@ -260,7 +260,7 @@
<citerefentry><refentrytitle>systemd-userdbd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
and picks up JSON user/group records from <filename>/etc/userdb/</filename>,
<filename>/run/userdb/</filename>, <filename>/run/host/userdb/</filename>,
<filename>/use/lib/userdb/</filename>.</para></listitem>
<filename>/usr/lib/userdb/</filename>.</para></listitem>
</varlistentry>
</variablelist>

View File

@ -101,9 +101,9 @@ conf.set10('BUMP_PROC_SYS_FS_FILE_MAX', get_option('bump-proc-sys-fs-file-max'))
conf.set10('BUMP_PROC_SYS_FS_NR_OPEN', get_option('bump-proc-sys-fs-nr-open'))
conf.set('HIGH_RLIMIT_NOFILE', 512*1024)
# join_paths ignores the preceding arguments if an absolute component is
# encountered, so this should canonicalize various paths when they are
# absolute or relative.
# Meson ignores the preceding arguments when joining paths if an absolute
# component is encountered, so this should canonicalize various paths when they
# are absolute or relative.
prefixdir = get_option('prefix')
if not prefixdir.startswith('/')
error('Prefix is not absolute: "@0@"'.format(prefixdir))
@ -113,105 +113,105 @@ if prefixdir != rootprefixdir and rootprefixdir != '/' and not prefixdir.strip('
rootprefixdir, prefixdir))
endif
bindir = join_paths(prefixdir, get_option('bindir'))
libdir = join_paths(prefixdir, get_option('libdir'))
sysconfdir = join_paths(prefixdir, get_option('sysconfdir'))
includedir = join_paths(prefixdir, get_option('includedir'))
datadir = join_paths(prefixdir, get_option('datadir'))
localstatedir = join_paths('/', get_option('localstatedir'))
bindir = prefixdir / get_option('bindir')
libdir = prefixdir / get_option('libdir')
sysconfdir = prefixdir / get_option('sysconfdir')
includedir = prefixdir / get_option('includedir')
datadir = prefixdir / get_option('datadir')
localstatedir = '/' / get_option('localstatedir')
rootbindir = join_paths(rootprefixdir, 'bin')
rootsbindir = join_paths(rootprefixdir, split_bin ? 'sbin' : 'bin')
rootlibexecdir = join_paths(rootprefixdir, 'lib/systemd')
rootbindir = rootprefixdir / 'bin'
rootsbindir = rootprefixdir / (split_bin ? 'sbin' : 'bin')
rootlibexecdir = rootprefixdir / 'lib/systemd'
rootlibdir = get_option('rootlibdir')
if rootlibdir == ''
rootlibdir = join_paths(rootprefixdir, libdir.split('/')[-1])
rootlibdir = rootprefixdir / libdir.split('/')[-1]
endif
install_sysconfdir = get_option('install-sysconfdir') != 'false'
install_sysconfdir_samples = get_option('install-sysconfdir') == 'true'
# Dirs of external packages
pkgconfigdatadir = get_option('pkgconfigdatadir') == '' ? join_paths(datadir, 'pkgconfig') : get_option('pkgconfigdatadir')
pkgconfiglibdir = get_option('pkgconfiglibdir') == '' ? join_paths(libdir, 'pkgconfig') : get_option('pkgconfiglibdir')
polkitpolicydir = join_paths(datadir, 'polkit-1/actions')
polkitrulesdir = join_paths(datadir, 'polkit-1/rules.d')
polkitpkladir = join_paths(localstatedir, 'lib/polkit-1/localauthority/10-vendor.d')
xinitrcdir = get_option('xinitrcdir') == '' ? join_paths(sysconfdir, 'X11/xinit/xinitrc.d') : get_option('xinitrcdir')
pkgconfigdatadir = get_option('pkgconfigdatadir') != '' ? get_option('pkgconfigdatadir') : datadir / 'pkgconfig'
pkgconfiglibdir = get_option('pkgconfiglibdir') != '' ? get_option('pkgconfiglibdir') : libdir / 'pkgconfig'
polkitpolicydir = datadir / 'polkit-1/actions'
polkitrulesdir = datadir / 'polkit-1/rules.d'
polkitpkladir = localstatedir / 'lib/polkit-1/localauthority/10-vendor.d'
xinitrcdir = get_option('xinitrcdir') != '' ? get_option('xinitrcdir') : sysconfdir / 'X11/xinit/xinitrc.d'
rpmmacrosdir = get_option('rpmmacrosdir')
if rpmmacrosdir != 'no'
rpmmacrosdir = join_paths(prefixdir, rpmmacrosdir)
rpmmacrosdir = prefixdir / rpmmacrosdir
endif
modprobedir = join_paths(rootprefixdir, 'lib/modprobe.d')
modprobedir = rootprefixdir / 'lib/modprobe.d'
# Our own paths
pkgdatadir = join_paths(datadir, 'systemd')
environmentdir = join_paths(prefixdir, 'lib/environment.d')
pkgsysconfdir = join_paths(sysconfdir, 'systemd')
userunitdir = join_paths(prefixdir, 'lib/systemd/user')
userpresetdir = join_paths(prefixdir, 'lib/systemd/user-preset')
tmpfilesdir = join_paths(prefixdir, 'lib/tmpfiles.d')
sysusersdir = join_paths(prefixdir, 'lib/sysusers.d')
sysctldir = join_paths(prefixdir, 'lib/sysctl.d')
binfmtdir = join_paths(prefixdir, 'lib/binfmt.d')
modulesloaddir = join_paths(prefixdir, 'lib/modules-load.d')
networkdir = join_paths(rootprefixdir, 'lib/systemd/network')
pkgincludedir = join_paths(includedir, 'systemd')
systemgeneratordir = join_paths(rootlibexecdir, 'system-generators')
usergeneratordir = join_paths(prefixdir, 'lib/systemd/user-generators')
systemenvgeneratordir = join_paths(prefixdir, 'lib/systemd/system-environment-generators')
userenvgeneratordir = join_paths(prefixdir, 'lib/systemd/user-environment-generators')
systemshutdowndir = join_paths(rootlibexecdir, 'system-shutdown')
systemsleepdir = join_paths(rootlibexecdir, 'system-sleep')
systemunitdir = join_paths(rootprefixdir, 'lib/systemd/system')
systempresetdir = join_paths(rootprefixdir, 'lib/systemd/system-preset')
udevlibexecdir = join_paths(rootprefixdir, 'lib/udev')
udevrulesdir = join_paths(udevlibexecdir, 'rules.d')
udevhwdbdir = join_paths(udevlibexecdir, 'hwdb.d')
catalogdir = join_paths(prefixdir, 'lib/systemd/catalog')
kernelinstalldir = join_paths(prefixdir, 'lib/kernel/install.d')
factorydir = join_paths(datadir, 'factory')
bootlibdir = join_paths(prefixdir, 'lib/systemd/boot/efi')
testsdir = join_paths(prefixdir, 'lib/systemd/tests')
systemdstatedir = join_paths(localstatedir, 'lib/systemd')
catalogstatedir = join_paths(systemdstatedir, 'catalog')
randomseeddir = join_paths(localstatedir, 'lib/systemd')
profiledir = join_paths(rootlibexecdir, 'portable', 'profile')
ntpservicelistdir = join_paths(rootprefixdir, 'lib/systemd/ntp-units.d')
pkgdatadir = datadir / 'systemd'
environmentdir = prefixdir / 'lib/environment.d'
pkgsysconfdir = sysconfdir / 'systemd'
userunitdir = prefixdir / 'lib/systemd/user'
userpresetdir = prefixdir / 'lib/systemd/user-preset'
tmpfilesdir = prefixdir / 'lib/tmpfiles.d'
sysusersdir = prefixdir / 'lib/sysusers.d'
sysctldir = prefixdir / 'lib/sysctl.d'
binfmtdir = prefixdir / 'lib/binfmt.d'
modulesloaddir = prefixdir / 'lib/modules-load.d'
networkdir = rootprefixdir / 'lib/systemd/network'
pkgincludedir = includedir / 'systemd'
systemgeneratordir = rootlibexecdir / 'system-generators'
usergeneratordir = prefixdir / 'lib/systemd/user-generators'
systemenvgeneratordir = prefixdir / 'lib/systemd/system-environment-generators'
userenvgeneratordir = prefixdir / 'lib/systemd/user-environment-generators'
systemshutdowndir = rootlibexecdir / 'system-shutdown'
systemsleepdir = rootlibexecdir / 'system-sleep'
systemunitdir = rootprefixdir / 'lib/systemd/system'
systempresetdir = rootprefixdir / 'lib/systemd/system-preset'
udevlibexecdir = rootprefixdir / 'lib/udev'
udevrulesdir = udevlibexecdir / 'rules.d'
udevhwdbdir = udevlibexecdir / 'hwdb.d'
catalogdir = prefixdir / 'lib/systemd/catalog'
kernelinstalldir = prefixdir / 'lib/kernel/install.d'
factorydir = datadir / 'factory'
bootlibdir = prefixdir / 'lib/systemd/boot/efi'
testsdir = prefixdir / 'lib/systemd/tests'
systemdstatedir = localstatedir / 'lib/systemd'
catalogstatedir = systemdstatedir / 'catalog'
randomseeddir = localstatedir / 'lib/systemd'
profiledir = rootlibexecdir / 'portable' / 'profile'
ntpservicelistdir = rootprefixdir / 'lib/systemd/ntp-units.d'
docdir = get_option('docdir')
if docdir == ''
docdir = join_paths(datadir, 'doc/systemd')
docdir = datadir / 'doc/systemd'
endif
dbuspolicydir = get_option('dbuspolicydir')
if dbuspolicydir == ''
dbuspolicydir = join_paths(datadir, 'dbus-1/system.d')
dbuspolicydir = datadir / 'dbus-1/system.d'
endif
dbussessionservicedir = get_option('dbussessionservicedir')
if dbussessionservicedir == ''
dbussessionservicedir = join_paths(datadir, 'dbus-1/services')
dbussessionservicedir = datadir / 'dbus-1/services'
endif
dbussystemservicedir = get_option('dbussystemservicedir')
if dbussystemservicedir == ''
dbussystemservicedir = join_paths(datadir, 'dbus-1/system-services')
dbussystemservicedir = datadir / 'dbus-1/system-services'
endif
pamlibdir = get_option('pamlibdir')
if pamlibdir == ''
pamlibdir = join_paths(rootlibdir, 'security')
pamlibdir = rootlibdir / 'security'
endif
pamconfdir = get_option('pamconfdir')
if pamconfdir == ''
pamconfdir = join_paths(prefixdir, 'lib/pam.d')
pamconfdir = prefixdir / 'lib/pam.d'
endif
libcryptsetup_plugins_dir = get_option('libcryptsetup-plugins-dir')
if libcryptsetup_plugins_dir == ''
libcryptsetup_plugins_dir = join_paths(rootlibdir, 'cryptsetup')
libcryptsetup_plugins_dir = rootlibdir / 'cryptsetup'
endif
memory_accounting_default = get_option('memory-accounting-default')
@ -219,19 +219,19 @@ status_unit_format_default = get_option('status-unit-format-default')
conf.set_quoted('BINFMT_DIR', binfmtdir)
conf.set_quoted('BOOTLIBDIR', bootlibdir)
conf.set_quoted('CATALOG_DATABASE', join_paths(catalogstatedir, 'database'))
conf.set_quoted('CATALOG_DATABASE', catalogstatedir / 'database')
conf.set_quoted('CERTIFICATE_ROOT', get_option('certificate-root'))
conf.set_quoted('DOC_DIR', docdir)
conf.set_quoted('DOCUMENT_ROOT', join_paths(pkgdatadir, 'gatewayd'))
conf.set_quoted('DOCUMENT_ROOT', pkgdatadir / 'gatewayd')
conf.set_quoted('ENVIRONMENT_DIR', environmentdir)
conf.set_quoted('INCLUDE_DIR', includedir)
conf.set_quoted('LIBDIR', libdir)
conf.set_quoted('MODPROBE_DIR', modprobedir)
conf.set_quoted('MODULESLOAD_DIR', modulesloaddir)
conf.set_quoted('PKGSYSCONFDIR', pkgsysconfdir)
conf.set_quoted('POLKIT_AGENT_BINARY_PATH', join_paths(bindir, 'pkttyagent'))
conf.set_quoted('POLKIT_AGENT_BINARY_PATH', bindir / 'pkttyagent')
conf.set_quoted('PREFIX', prefixdir)
conf.set_quoted('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
conf.set_quoted('RANDOM_SEED', randomseeddir / 'random-seed')
conf.set_quoted('RANDOM_SEED_DIR', randomseeddir)
conf.set_quoted('RC_LOCAL_PATH', get_option('rc-local'))
conf.set_quoted('ROOTBINDIR', rootbindir)
@ -241,29 +241,29 @@ conf.set_quoted('ROOTPREFIX', rootprefixdir)
conf.set_quoted('ROOTPREFIX_NOSLASH', rootprefixdir_noslash)
conf.set_quoted('SYSCONF_DIR', sysconfdir)
conf.set_quoted('SYSCTL_DIR', sysctldir)
conf.set_quoted('SYSTEMCTL_BINARY_PATH', join_paths(rootbindir, 'systemctl'))
conf.set_quoted('SYSTEMD_BINARY_PATH', join_paths(rootlibexecdir, 'systemd'))
conf.set_quoted('SYSTEMCTL_BINARY_PATH', rootbindir / 'systemctl')
conf.set_quoted('SYSTEMD_BINARY_PATH', rootlibexecdir / 'systemd')
conf.set_quoted('SYSTEMD_CATALOG_DIR', catalogdir)
conf.set_quoted('SYSTEMD_CGROUPS_AGENT_PATH', join_paths(rootlibexecdir, 'systemd-cgroups-agent'))
conf.set_quoted('SYSTEMD_CRYPTSETUP_PATH', join_paths(rootlibexecdir, 'systemd-cryptsetup'))
conf.set_quoted('SYSTEMD_EXPORT_PATH', join_paths(rootlibexecdir, 'systemd-export'))
conf.set_quoted('SYSTEMD_FSCK_PATH', join_paths(rootlibexecdir, 'systemd-fsck'))
conf.set_quoted('SYSTEMD_GROWFS_PATH', join_paths(rootlibexecdir, 'systemd-growfs'))
conf.set_quoted('SYSTEMD_HOMEWORK_PATH', join_paths(rootlibexecdir, 'systemd-homework'))
conf.set_quoted('SYSTEMD_IMPORT_FS_PATH', join_paths(rootlibexecdir, 'systemd-import-fs'))
conf.set_quoted('SYSTEMD_IMPORT_PATH', join_paths(rootlibexecdir, 'systemd-import'))
conf.set_quoted('SYSTEMD_KBD_MODEL_MAP', join_paths(pkgdatadir, 'kbd-model-map'))
conf.set_quoted('SYSTEMD_LANGUAGE_FALLBACK_MAP', join_paths(pkgdatadir, 'language-fallback-map'))
conf.set_quoted('SYSTEMD_MAKEFS_PATH', join_paths(rootlibexecdir, 'systemd-makefs'))
conf.set_quoted('SYSTEMD_PULL_PATH', join_paths(rootlibexecdir, 'systemd-pull'))
conf.set_quoted('SYSTEMD_SHUTDOWN_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-shutdown'))
conf.set_quoted('SYSTEMD_STDIO_BRIDGE_BINARY_PATH', join_paths(bindir, 'systemd-stdio-bridge'))
conf.set_quoted('SYSTEMD_TEST_DATA', join_paths(testsdir, 'testdata'))
conf.set_quoted('SYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH', join_paths(rootbindir, 'systemd-tty-ask-password-agent'))
conf.set_quoted('SYSTEMD_UPDATE_HELPER_PATH', join_paths(rootlibexecdir, 'systemd-update-helper'))
conf.set_quoted('SYSTEMD_USERWORK_PATH', join_paths(rootlibexecdir, 'systemd-userwork'))
conf.set_quoted('SYSTEMD_VERITYSETUP_PATH', join_paths(rootlibexecdir, 'systemd-veritysetup'))
conf.set_quoted('SYSTEM_CONFIG_UNIT_DIR', join_paths(pkgsysconfdir, 'system'))
conf.set_quoted('SYSTEMD_CGROUPS_AGENT_PATH', rootlibexecdir / 'systemd-cgroups-agent')
conf.set_quoted('SYSTEMD_CRYPTSETUP_PATH', rootlibexecdir / 'systemd-cryptsetup')
conf.set_quoted('SYSTEMD_EXPORT_PATH', rootlibexecdir / 'systemd-export')
conf.set_quoted('SYSTEMD_FSCK_PATH', rootlibexecdir / 'systemd-fsck')
conf.set_quoted('SYSTEMD_GROWFS_PATH', rootlibexecdir / 'systemd-growfs')
conf.set_quoted('SYSTEMD_HOMEWORK_PATH', rootlibexecdir / 'systemd-homework')
conf.set_quoted('SYSTEMD_IMPORT_FS_PATH', rootlibexecdir / 'systemd-import-fs')
conf.set_quoted('SYSTEMD_IMPORT_PATH', rootlibexecdir / 'systemd-import')
conf.set_quoted('SYSTEMD_KBD_MODEL_MAP', pkgdatadir / 'kbd-model-map')
conf.set_quoted('SYSTEMD_LANGUAGE_FALLBACK_MAP', pkgdatadir / 'language-fallback-map')
conf.set_quoted('SYSTEMD_MAKEFS_PATH', rootlibexecdir / 'systemd-makefs')
conf.set_quoted('SYSTEMD_PULL_PATH', rootlibexecdir / 'systemd-pull')
conf.set_quoted('SYSTEMD_SHUTDOWN_BINARY_PATH', rootlibexecdir / 'systemd-shutdown')
conf.set_quoted('SYSTEMD_STDIO_BRIDGE_BINARY_PATH', bindir / 'systemd-stdio-bridge')
conf.set_quoted('SYSTEMD_TEST_DATA', testsdir / 'testdata')
conf.set_quoted('SYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH', rootbindir / 'systemd-tty-ask-password-agent')
conf.set_quoted('SYSTEMD_UPDATE_HELPER_PATH', rootlibexecdir / 'systemd-update-helper')
conf.set_quoted('SYSTEMD_USERWORK_PATH', rootlibexecdir / 'systemd-userwork')
conf.set_quoted('SYSTEMD_VERITYSETUP_PATH', rootlibexecdir / 'systemd-veritysetup')
conf.set_quoted('SYSTEM_CONFIG_UNIT_DIR', pkgsysconfdir / 'system')
conf.set_quoted('SYSTEM_DATA_UNIT_DIR', systemunitdir)
conf.set_quoted('SYSTEM_ENV_GENERATOR_DIR', systemenvgeneratordir)
conf.set_quoted('SYSTEM_GENERATOR_DIR', systemgeneratordir)
@ -278,13 +278,13 @@ conf.set_quoted('UDEVLIBEXECDIR', udevlibexecdir)
conf.set_quoted('UDEV_HWDB_DIR', udevhwdbdir)
conf.set_quoted('UDEV_RULES_DIR', udevrulesdir)
conf.set_quoted('UPDATE_HELPER_USER_TIMEOUT', get_option('update-helper-user-timeout'))
conf.set_quoted('USER_CONFIG_UNIT_DIR', join_paths(pkgsysconfdir, 'user'))
conf.set_quoted('USER_CONFIG_UNIT_DIR', pkgsysconfdir / 'user')
conf.set_quoted('USER_DATA_UNIT_DIR', userunitdir)
conf.set_quoted('USER_ENV_GENERATOR_DIR', userenvgeneratordir)
conf.set_quoted('USER_GENERATOR_DIR', usergeneratordir)
conf.set_quoted('USER_KEYRING_PATH', join_paths(pkgsysconfdir, 'import-pubring.gpg'))
conf.set_quoted('USER_KEYRING_PATH', pkgsysconfdir / 'import-pubring.gpg')
conf.set_quoted('USER_PRESET_DIR', userpresetdir)
conf.set_quoted('VENDOR_KEYRING_PATH', join_paths(rootlibexecdir, 'import-pubring.gpg'))
conf.set_quoted('VENDOR_KEYRING_PATH', rootlibexecdir / 'import-pubring.gpg')
conf.set('ANSI_OK_COLOR', 'ANSI_' + get_option('ok-color').underscorify().to_upper())
conf.set10('ENABLE_URLIFY', get_option('urlify'))
@ -1857,7 +1857,7 @@ foreach tuple : [['myhostname', 'ENABLE_NSS_MYHOSTNAME'],
module = tuple[0]
sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
version_script_arg = join_paths(project_source_root, sym)
version_script_arg = project_source_root / sym
sources = ['src/nss-@0@/nss-@0@.c'.format(module)]
if tuple.length() > 2
@ -1922,8 +1922,8 @@ executable(
install_dir : rootlibexecdir)
meson.add_install_script(meson_make_symlink,
join_paths(rootlibexecdir, 'systemd'),
join_paths(rootsbindir, 'init'))
rootlibexecdir / 'systemd',
rootsbindir / 'init')
public_programs += executable(
'systemd-analyze',
@ -2028,8 +2028,8 @@ if conf.get('ENABLE_ENVIRONMENT_D') == 1
install_dir : userenvgeneratordir)
meson.add_install_script(meson_make_symlink,
join_paths(sysconfdir, 'environment'),
join_paths(environmentdir, '99-environment.conf'))
sysconfdir / 'environment',
environmentdir / '99-environment.conf')
endif
if conf.get('ENABLE_HIBERNATE') == 1
@ -2100,12 +2100,12 @@ if conf.get('ENABLE_RESOLVE') == 1
install : true)
meson.add_install_script(meson_make_symlink,
join_paths(bindir, 'resolvectl'),
join_paths(rootsbindir, 'resolvconf'))
bindir / 'resolvectl',
rootsbindir / 'resolvconf')
meson.add_install_script(meson_make_symlink,
join_paths(bindir, 'resolvectl'),
join_paths(bindir, 'systemd-resolve'))
bindir / 'resolvectl',
bindir / 'systemd-resolve')
endif
if conf.get('ENABLE_LOGIND') == 1
@ -2144,7 +2144,7 @@ if conf.get('ENABLE_LOGIND') == 1
install_dir : rootbindir)
if conf.get('HAVE_PAM') == 1
version_script_arg = join_paths(project_source_root, pam_systemd_sym)
version_script_arg = project_source_root / pam_systemd_sym
pam_systemd = shared_library(
'pam_systemd',
pam_systemd_c,
@ -2362,7 +2362,7 @@ if conf.get('ENABLE_HOMED') == 1
install_dir : rootbindir)
if conf.get('HAVE_PAM') == 1
version_script_arg = join_paths(project_source_root, pam_systemd_home_sym)
version_script_arg = project_source_root / pam_systemd_home_sym
pam_systemd = shared_library(
'pam_systemd_home',
pam_systemd_home_c,
@ -2385,13 +2385,13 @@ endif
foreach alias : (['halt', 'poweroff', 'reboot', 'shutdown'] +
(conf.get('HAVE_SYSV_COMPAT') == 1 ? ['runlevel', 'telinit'] : []))
meson.add_install_script(meson_make_symlink,
join_paths(rootbindir, 'systemctl'),
join_paths(rootsbindir, alias))
rootbindir / 'systemctl',
rootsbindir / alias)
endforeach
meson.add_install_script(meson_make_symlink,
join_paths(rootbindir, 'udevadm'),
join_paths(rootlibexecdir, 'systemd-udevd'))
rootbindir / 'udevadm',
rootlibexecdir / 'systemd-udevd')
if conf.get('ENABLE_BACKLIGHT') == 1
executable(
@ -2828,7 +2828,7 @@ if conf.get('ENABLE_BINFMT') == 1
mkdir_p.format(binfmtdir))
if install_sysconfdir
meson.add_install_script('sh', '-c',
mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
mkdir_p.format(sysconfdir / 'binfmt.d'))
endif
endif
@ -3105,7 +3105,7 @@ public_programs += executable(
install : true)
meson.add_install_script(meson_make_symlink,
'systemd-mount', join_paths(bindir, 'systemd-umount'))
'systemd-mount', bindir / 'systemd-umount')
public_programs += executable(
'systemd-run',
@ -3307,7 +3307,7 @@ if conf.get('HAVE_KMOD') == 1
mkdir_p.format(modulesloaddir))
if install_sysconfdir
meson.add_install_script('sh', '-c',
mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
mkdir_p.format(sysconfdir / 'modules-load.d'))
endif
endif
@ -3387,8 +3387,8 @@ custom_target(
output : 'systemd-runtest.env',
command : [sh, '-c',
'{ echo SYSTEMD_TEST_DATA=@0@; echo SYSTEMD_CATALOG_DIR=@1@; } >@OUTPUT@'.format(
join_paths(project_source_root, 'test'),
join_paths(project_build_root, 'catalog'))],
project_source_root / 'test',
project_build_root / 'catalog')],
build_by_default : true)
test_cflags = ['-DTEST_CODE=1']
@ -3430,7 +3430,7 @@ foreach tuple : tests
build_by_default : want_tests != 'false',
install_rpath : rootlibexecdir,
install : install_tests,
install_dir : join_paths(testsdir, type))
install_dir : testsdir / type)
if type == 'manual'
message('@0@ is a manual test'.format(name))
@ -3546,16 +3546,13 @@ foreach tuple : fuzzers
if b == name
test('@0@_@1@'.format(b, c),
exe,
args : [join_paths(project_source_root, p)])
args : [project_source_root / p])
endif
endforeach
endif
endforeach
run_target(
'fuzzers',
depends : fuzzer_exes,
command : ['true'])
alias_target('fuzzers', fuzzer_exes)
############################################################
@ -3608,8 +3605,8 @@ if get_option('mode') == 'developer' and want_tests != 'false' and jekyll.found(
test('github-pages',
jekyll,
args : ['build',
'--source', join_paths(project_source_root, 'docs'),
'--destination', join_paths(project_build_root, '_site')])
'--source', project_source_root / 'docs',
'--destination', project_build_root / '_site'])
endif
############################################################
@ -3659,7 +3656,7 @@ foreach tuple : sanitizers
output : name,
depends : build,
command : [ln, '-fs',
join_paths(build.full_path(), b),
build.full_path() / b,
'@OUTPUT@'],
build_by_default : true)
else
@ -3674,7 +3671,7 @@ foreach tuple : sanitizers
env : ['UBSAN_OPTIONS=print_stacktrace=1:print_summary=1:halt_on_error=1'],
timeout : 60,
args : [exe.full_path(),
join_paths(project_source_root, p)])
project_source_root / p])
endif
endforeach
endif
@ -3734,101 +3731,67 @@ run_target(
depends : [man, libsystemd, libudev],
command : [check_api_docs_sh, libsystemd.full_path(), libudev.full_path()])
############################################################
if dbus_docs.length() > 0
custom_target(
'update-dbus-docs',
output : 'update-dbus-docs',
command : [update_dbus_docs_py,
'--build-dir=@0@'.format(project_build_root),
'@INPUT@'],
input : dbus_docs)
if conf.get('BUILD_MODE_DEVELOPER') == 1
test('dbus-docs-fresh',
update_dbus_docs_py,
args : ['--build-dir=@0@'.format(project_build_root),
'--test'] + dbus_docs)
endif
endif
custom_target(
'update-man-rules',
output : 'update-man-rules',
command : [sh, '-c',
'cd @0@ && '.format(meson.build_root()) +
'python3 @0@/tools/update-man-rules.py $(find @0@ -wholename "*/man/*.xml") >t && '.format(project_source_root) +
'mv t @0@/man/rules/meson.build'.format(meson.current_source_dir())],
depends : custom_entities_ent)
alias_target('update-dbus-docs', update_dbus_docs)
alias_target('update-man-rules', update_man_rules)
############################################################
watchdog_opt = service_watchdog == '' ? 'disabled' : service_watchdog
status = [
'@0@ @1@'.format(meson.project_name(), meson.project_version()),
'build mode: @0@'.format(get_option('mode')),
'split /usr: @0@'.format(split_usr),
'split bin-sbin: @0@'.format(split_bin),
'prefix directory: @0@'.format(prefixdir),
'rootprefix directory: @0@'.format(rootprefixdir),
'sysconf directory: @0@'.format(sysconfdir),
'include directory: @0@'.format(includedir),
'lib directory: @0@'.format(libdir),
'rootlib directory: @0@'.format(rootlibdir),
'SysV init scripts: @0@'.format(sysvinit_path),
'SysV rc?.d directories: @0@'.format(sysvrcnd_path),
'PAM modules directory: @0@'.format(pamlibdir),
'PAM configuration directory: @0@'.format(pamconfdir),
'libcryptsetup plugins directory: @0@'.format(libcryptsetup_plugins_dir),
'RPM macros directory: @0@'.format(rpmmacrosdir),
'modprobe.d directory: @0@'.format(modprobedir),
'D-Bus policy directory: @0@'.format(dbuspolicydir),
'D-Bus session directory: @0@'.format(dbussessionservicedir),
'D-Bus system directory: @0@'.format(dbussystemservicedir),
'bash completions directory: @0@'.format(bashcompletiondir),
'zsh completions directory: @0@'.format(zshcompletiondir),
'extra start script: @0@'.format(get_option('rc-local')),
'debug shell: @0@ @ @1@'.format(get_option('debug-shell'),
get_option('debug-tty')),
'system UIDs: <=@0@ (alloc >=@1@)'.format(conf.get('SYSTEM_UID_MAX'),
conf.get('SYSTEM_ALLOC_UID_MIN')),
'system GIDs: <=@0@ (alloc >=@1@)'.format(conf.get('SYSTEM_GID_MAX'),
conf.get('SYSTEM_ALLOC_GID_MIN')),
'dynamic UIDs: @0@…@1@'.format(dynamic_uid_min, dynamic_uid_max),
'container UID bases: @0@…@1@'.format(container_uid_base_min, container_uid_base_max),
'static UID/GID allocations: @0@'.format(' '.join(static_ugids)),
'/dev/kvm access mode: @0@'.format(get_option('dev-kvm-mode')),
'render group access mode: @0@'.format(get_option('group-render-mode')),
'certificate root directory: @0@'.format(get_option('certificate-root')),
'support URL: @0@'.format(support_url),
'nobody user name: @0@'.format(nobody_user),
'nobody group name: @0@'.format(nobody_group),
'fallback hostname: @0@'.format(get_option('fallback-hostname')),
'default DNSSEC mode: @0@'.format(default_dnssec),
'default DNS-over-TLS mode: @0@'.format(default_dns_over_tls),
'default mDNS mode: @0@'.format(default_mdns),
'default LLMNR mode: @0@'.format(default_llmnr),
'default cgroup hierarchy: @0@'.format(default_hierarchy),
'default net.naming-scheme setting: @0@'.format(default_net_naming_scheme),
'default KillUserProcesses setting: @0@'.format(kill_user_processes),
'default locale: @0@'.format(default_locale),
'default user $PATH: @0@'.format(
default_user_path != '' ? default_user_path : '(same as system services)'),
'systemd service watchdog: @0@'.format(watchdog_opt)]
alt_dns_servers = '\n '.join(dns_servers.split(' '))
alt_ntp_servers = '\n '.join(ntp_servers.split(' '))
status += [
'default DNS servers: @0@'.format(alt_dns_servers),
'default NTP servers: @0@'.format(alt_ntp_servers)]
alt_time_epoch = run_command('date', '-Is', '-u', '-d',
'@@0@'.format(time_epoch)).stdout().strip()
status += [
'time epoch: @0@ (@1@)'.format(time_epoch, alt_time_epoch)]
summary({
'build mode' : get_option('mode'),
'split /usr' : split_usr,
'split bin-sbin' : split_bin,
'prefix directory' : prefixdir,
'rootprefix directory' : rootprefixdir,
'sysconf directory' : sysconfdir,
'include directory' : includedir,
'lib directory' : libdir,
'rootlib directory' : rootlibdir,
'SysV init scripts' : sysvinit_path,
'SysV rc?.d directories' : sysvrcnd_path,
'PAM modules directory' : pamlibdir,
'PAM configuration directory' : pamconfdir,
'libcryptsetup plugins directory' : libcryptsetup_plugins_dir,
'RPM macros directory' : rpmmacrosdir,
'modprobe.d directory' : modprobedir,
'D-Bus policy directory' : dbuspolicydir,
'D-Bus session directory' : dbussessionservicedir,
'D-Bus system directory' : dbussystemservicedir,
'bash completions directory' : bashcompletiondir,
'zsh completions directory' : zshcompletiondir,
'extra start script' : get_option('rc-local'),
'debug shell' : '@0@ @ @1@'.format(get_option('debug-shell'),
get_option('debug-tty')),
'system UIDs' : '<=@0@ (alloc >=@1@)'.format(conf.get('SYSTEM_UID_MAX'),
conf.get('SYSTEM_ALLOC_UID_MIN')),
'system GIDs' : '<=@0@ (alloc >=@1@)'.format(conf.get('SYSTEM_GID_MAX'),
conf.get('SYSTEM_ALLOC_GID_MIN')),
'dynamic UIDs' : '@0@…@1@'.format(dynamic_uid_min, dynamic_uid_max),
'container UID bases' : '@0@…@1@'.format(container_uid_base_min, container_uid_base_max),
'static UID/GID allocations' : ' '.join(static_ugids),
'/dev/kvm access mode' : get_option('dev-kvm-mode'),
'render group access mode' : get_option('group-render-mode'),
'certificate root directory' : get_option('certificate-root'),
'support URL' : support_url,
'nobody user name' : nobody_user,
'nobody group name' : nobody_group,
'fallback hostname' : get_option('fallback-hostname'),
'default DNSSEC mode' : default_dnssec,
'default DNS-over-TLS mode' : default_dns_over_tls,
'default mDNS mode' : default_mdns,
'default LLMNR mode' : default_llmnr,
'default DNS servers' : dns_servers.split(' '),
'default NTP servers' : ntp_servers.split(' '),
'default cgroup hierarchy' : default_hierarchy,
'default net.naming-scheme value' : default_net_naming_scheme,
'default KillUserProcesses value' : kill_user_processes,
'default locale' : default_locale,
'default user $PATH' :
default_user_path != '' ? default_user_path : '(same as system services)',
'systemd service watchdog' : service_watchdog == '' ? 'disabled' : service_watchdog,
'time epoch' : '@0@ (@1@)'.format(time_epoch, alt_time_epoch)})
# TODO:
# CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
@ -3836,15 +3799,17 @@ status += [
# LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
if conf.get('ENABLE_EFI') == 1
status += 'efi arch: @0@'.format(efi_arch)
summary({'efi arch' : efi_arch},
section : 'Extensible Firmware Interface')
if have_gnu_efi
status += [
'EFI machine type: @0@'.format(EFI_MACHINE_TYPE_NAME),
'EFI CC @0@'.format(' '.join(efi_cc)),
'EFI lds: @0@'.format(efi_lds),
'EFI crt0: @0@'.format(efi_crt0),
'EFI include directory: @0@'.format(efi_incdir)]
summary({
'EFI machine type' : EFI_MACHINE_TYPE_NAME,
'EFI CC' : '@0@'.format(' '.join(efi_cc)),
'EFI lds' : efi_lds,
'EFI crt0' : efi_crt0,
'EFI include directory' : efi_incdir},
section : 'Extensible Firmware Interface')
endif
endif
@ -3999,13 +3964,10 @@ else
missing += 'DNS-over-TLS'
endif
status += [
'',
'enabled features: @0@'.format(', '.join(found)),
'',
'disabled features: @0@'.format(', '.join(missing)),
'']
message('\n '.join(status))
summary({
'enabled' : ', '.join(found),
'disabled' : ', '.join(missing)},
section : 'Features')
if rootprefixdir != rootprefix_default
warning('\n' +

View File

@ -12,7 +12,7 @@ if conf.get('ENABLE_NETWORKD') == 1
if install_sysconfdir
meson.add_install_script('sh', '-c',
mkdir_p.format(join_paths(sysconfdir, 'systemd/network')))
mkdir_p.format(sysconfdir / 'systemd/network'))
endif
endif

View File

@ -6,7 +6,7 @@ if bashcompletiondir == ''
if bash_completion.found()
bashcompletiondir = bash_completion.get_pkgconfig_variable('completionsdir')
else
bashcompletiondir = join_paths(datadir, 'bash-completion/completions')
bashcompletiondir = datadir / 'bash-completion/completions'
endif
endif

View File

@ -2,7 +2,7 @@
zshcompletiondir = get_option('zshcompletiondir')
if zshcompletiondir == ''
zshcompletiondir = join_paths(datadir, 'zsh/site-functions')
zshcompletiondir = datadir / 'zsh/site-functions'
endif
custom_target(

View File

@ -71,14 +71,14 @@ if conf.get('ENABLE_EFI') == 1 and get_option('gnu-efi') != 'false'
efi_libdir = get_option('efi-libdir')
if efi_libdir == ''
# New location first introduced with gnu-efi 3.0.11
efi_libdir = join_paths('/usr/lib/gnuefi', EFI_MACHINE_TYPE_NAME)
efi_libdir = '/usr/lib/gnuefi' / EFI_MACHINE_TYPE_NAME
cmd = run_command(test, '-e', efi_libdir)
if cmd.returncode() != 0
# Fall back to the old approach
cmd = run_command(efi_cc + ['-print-multi-os-directory'])
if cmd.returncode() == 0
path = join_paths('/usr/lib', cmd.stdout().strip())
path = '/usr/lib' / cmd.stdout().strip()
cmd = run_command(env, 'realpath', '-e', path)
if cmd.returncode() == 0
efi_libdir = cmd.stdout().strip()
@ -148,13 +148,13 @@ if have_gnu_efi
efi_location_map = [
# New locations first introduced with gnu-efi 3.0.11
[join_paths(efi_libdir, 'efi.lds'),
join_paths(efi_libdir, 'crt0.o')],
[efi_libdir / 'efi.lds',
efi_libdir / 'crt0.o'],
# Older locations...
[join_paths(efi_libdir, 'gnuefi', 'elf_@0@_efi.lds'.format(gnu_efi_path_arch)),
join_paths(efi_libdir, 'gnuefi', 'crt0-efi-@0@.o'.format(gnu_efi_path_arch))],
[join_paths(efi_libdir, 'elf_@0@_efi.lds'.format(gnu_efi_path_arch)),
join_paths(efi_libdir, 'crt0-efi-@0@.o'.format(gnu_efi_path_arch))]]
[efi_libdir / 'gnuefi' / 'elf_@0@_efi.lds'.format(gnu_efi_path_arch),
efi_libdir / 'gnuefi' / 'crt0-efi-@0@.o'.format(gnu_efi_path_arch)],
[efi_libdir / 'elf_@0@_efi.lds'.format(gnu_efi_path_arch),
efi_libdir / 'crt0-efi-@0@.o'.format(gnu_efi_path_arch)]]
efi_lds = ''
foreach location : efi_location_map
if efi_lds == ''
@ -191,7 +191,7 @@ if have_gnu_efi
'-nostdlib',
'-std=gnu99',
'-isystem', efi_incdir,
'-isystem', join_paths(efi_incdir, gnu_efi_path_arch),
'-isystem', efi_incdir / gnu_efi_path_arch,
'-I', fundamental_path,
'-DSD_BOOT',
'-include', efi_config_h,

View File

@ -578,8 +578,7 @@ static int manager_setup_signals(Manager *m) {
SIGRTMIN+22, /* systemd: set log level to LOG_DEBUG */
SIGRTMIN+23, /* systemd: set log level to LOG_INFO */
SIGRTMIN+24, /* systemd: Immediate exit (--user only) */
/* .. one free signal here ... */
SIGRTMIN+25, /* systemd: reexecute manager */
/* Apparently Linux on hppa had fewer RT signals until v3.18,
* SIGRTMAX was SIGRTMIN+25, and then SIGRTMIN was lowered,
@ -2846,6 +2845,10 @@ static int manager_dispatch_signal_fd(sd_event_source *source, int fd, uint32_t
/* This is a nop on init */
break;
case 25:
m->objective = MANAGER_REEXECUTE;
break;
case 26:
case 29: /* compatibility: used to be mapped to LOG_TARGET_SYSLOG_OR_KMSG */
manager_restore_original_log_target(m);

View File

@ -210,9 +210,9 @@ meson.add_install_script('sh', '-c', mkdir_p.format(systemgeneratordir))
meson.add_install_script('sh', '-c', mkdir_p.format(usergeneratordir))
if install_sysconfdir
meson.add_install_script('sh', '-c', mkdir_p.format(join_paths(pkgsysconfdir, 'system')))
meson.add_install_script('sh', '-c', mkdir_p.format(join_paths(pkgsysconfdir, 'user')))
meson.add_install_script('sh', '-c', mkdir_p.format(join_paths(sysconfdir, 'xdg/systemd')))
meson.add_install_script('sh', '-c', mkdir_p.format(pkgsysconfdir / 'system'))
meson.add_install_script('sh', '-c', mkdir_p.format(pkgsysconfdir / 'user'))
meson.add_install_script('sh', '-c', mkdir_p.format(sysconfdir / 'xdg/systemd'))
endif
############################################################

View File

@ -5,7 +5,7 @@ if conf.get('HAVE_LIBCRYPTSETUP_PLUGINS') == 1
cryptsetup_token_c_args = ['-fvisibility=hidden']
cryptsetup_token_sym = files('cryptsetup-token.sym')
cryptsetup_token_sym_path = join_paths(meson.current_source_dir(), 'cryptsetup-token.sym')
cryptsetup_token_sym_path = meson.current_source_dir() / 'cryptsetup-token.sym'
if conf.get('HAVE_TPM2') == 1
cryptsetup_token_systemd_tpm2_sources = files('''

View File

@ -14,8 +14,8 @@ sources = '''
# for sd-boot
fundamental_source_paths = []
foreach s : sources
fundamental_source_paths += join_paths(meson.current_source_dir(), s)
foreach source : sources
fundamental_source_paths += meson.current_source_dir() / source
endforeach
# for libbasic

View File

@ -62,7 +62,7 @@ endforeach
if conf.get('ENABLE_REMOTE') == 1 and conf.get('HAVE_MICROHTTPD') == 1
install_data('browse.html',
install_dir : join_paths(pkgdatadir, 'gatewayd'))
install_dir : pkgdatadir / 'gatewayd')
if get_option('create-log-dirs')
meson.add_install_script('sh', '-c',

View File

@ -15,7 +15,7 @@ if want_kernel_install
if install_sysconfdir
meson.add_install_script('sh', '-c',
mkdir_p.format(join_paths(sysconfdir, 'kernel/install.d')))
mkdir_p.format(sysconfdir / 'kernel/install.d'))
endif
endif

View File

@ -171,7 +171,7 @@ libsystemd_static = static_library(
c_args : libsystemd_c_args)
libsystemd_sym = files('libsystemd.sym')
libsystemd_sym_path = join_paths(meson.current_source_dir(), 'libsystemd.sym')
libsystemd_sym_path = meson.current_source_dir() / 'libsystemd.sym'
static_libsystemd = get_option('static-libsystemd')
static_libsystemd_pic = static_libsystemd == 'true' or static_libsystemd == 'pic'

View File

@ -19,10 +19,10 @@ libudev_sources = files(
libudev_includes = [includes, include_directories('.')]
libudev_sym = files('libudev.sym')
libudev_sym_path = join_paths(meson.current_source_dir(), 'libudev.sym')
libudev_sym_path = meson.current_source_dir() / 'libudev.sym'
install_headers('libudev.h')
libudev_h_path = join_paths(meson.current_source_dir(), 'libudev.h')
libudev_h_path = meson.current_source_dir() / 'libudev.h'
libudev_basic = static_library(
'udev-basic',

View File

@ -20,8 +20,8 @@ endif
# If you know a way that allows the same variables to be used
# in sources list and concatenated to a string for test_env,
# let me know.
kbd_model_map = join_paths(meson.current_source_dir(), 'kbd-model-map')
language_fallback_map = join_paths(meson.current_source_dir(), 'language-fallback-map')
kbd_model_map = meson.current_source_dir() / 'kbd-model-map'
language_fallback_map = meson.current_source_dir() / 'language-fallback-map'
if conf.get('ENABLE_LOCALED') == 1
install_data('kbd-model-map',

View File

@ -279,12 +279,28 @@ static int button_dispatch(sd_event_source *s, int fd, uint32_t revents, void *u
}
} else if (ev.type == EV_KEY && ev.value == 0) {
if (ev.code == KEY_RESTART) {
if (b->manager->reboot_key_long_press_event_source) {
switch (ev.code) {
case KEY_POWER:
case KEY_POWER2:
if (b->manager->power_key_long_press_event_source) {
/* Long press event timer is still pending and key release
event happened. This means that key press duration was
insufficient to trigger a long press event
*/
log_struct(LOG_INFO,
LOG_MESSAGE("Power key pressed short."),
"MESSAGE_ID=" SD_MESSAGE_POWER_KEY_STR);
b->manager->power_key_long_press_event_source = sd_event_source_unref(b->manager->power_key_long_press_event_source);
manager_handle_action(b->manager, INHIBIT_HANDLE_POWER_KEY, b->manager->handle_power_key, b->manager->power_key_ignore_inhibited, true);
}
break;
case KEY_RESTART:
if (b->manager->reboot_key_long_press_event_source) {
log_struct(LOG_INFO,
LOG_MESSAGE("Reboot key pressed short."),
"MESSAGE_ID=" SD_MESSAGE_REBOOT_KEY_STR);
@ -293,6 +309,30 @@ static int button_dispatch(sd_event_source *s, int fd, uint32_t revents, void *u
manager_handle_action(b->manager, INHIBIT_HANDLE_REBOOT_KEY, b->manager->handle_reboot_key, b->manager->reboot_key_ignore_inhibited, true);
}
break;
case KEY_SLEEP:
if (b->manager->suspend_key_long_press_event_source) {
log_struct(LOG_INFO,
LOG_MESSAGE("Suspend key pressed short."),
"MESSAGE_ID=" SD_MESSAGE_SUSPEND_KEY_STR);
b->manager->suspend_key_long_press_event_source = sd_event_source_unref(b->manager->suspend_key_long_press_event_source);
manager_handle_action(b->manager, INHIBIT_HANDLE_SUSPEND_KEY, b->manager->handle_suspend_key, b->manager->suspend_key_ignore_inhibited, true);
}
break;
case KEY_SUSPEND:
if (b->manager->hibernate_key_long_press_event_source) {
log_struct(LOG_INFO,
LOG_MESSAGE("Hibernate key pressed short."),
"MESSAGE_ID=" SD_MESSAGE_HIBERNATE_KEY_STR);
b->manager->hibernate_key_long_press_event_source = sd_event_source_unref(b->manager->hibernate_key_long_press_event_source);
manager_handle_action(b->manager, INHIBIT_HANDLE_HIBERNATE_KEY, b->manager->handle_hibernate_key, b->manager->hibernate_key_ignore_inhibited, true);
}
break;
}
} else if (ev.type == EV_SW && ev.value > 0) {

View File

@ -22,8 +22,8 @@ if conf.get('ENABLE_PORTABLED') == 1
install_data('org.freedesktop.portable1.policy',
install_dir : polkitpolicydir)
install_data('profile/default/service.conf', install_dir : join_paths(profiledir, 'default'))
install_data('profile/nonetwork/service.conf', install_dir : join_paths(profiledir, 'nonetwork'))
install_data('profile/strict/service.conf', install_dir : join_paths(profiledir, 'strict'))
install_data('profile/trusted/service.conf', install_dir : join_paths(profiledir, 'trusted'))
install_data('profile/default/service.conf', install_dir : profiledir / 'default')
install_data('profile/nonetwork/service.conf', install_dir : profiledir / 'nonetwork')
install_data('profile/strict/service.conf', install_dir : profiledir / 'strict')
install_data('profile/trusted/service.conf', install_dir : profiledir / 'trusted')
endif

View File

@ -77,7 +77,7 @@ foreach header : _systemd_headers + _not_installed_headers + [libudev_h_path]
check_compilation_sh,
args : cc.cmd_array() + ['-c', '-x'] + opt +
['-Werror', '-include',
join_paths(meson.current_source_dir(), header)])
meson.current_source_dir() / header])
endif
endforeach
endforeach

View File

@ -153,7 +153,7 @@ endforeach
if install_sysconfdir_samples
install_data('udev.conf',
install_dir : join_paths(sysconfdir, 'udev'))
install_dir : sysconfdir / 'udev')
endif
custom_target(
@ -167,7 +167,7 @@ custom_target(
if install_sysconfdir
meson.add_install_script('sh', '-c',
mkdir_p.format(join_paths(sysconfdir, 'udev/rules.d')))
mkdir_p.format(sysconfdir / 'udev/rules.d'))
endif
fuzzers += [

View File

@ -23,5 +23,5 @@ custom_target(
if install_sysconfdir
meson.add_install_script('sh', '-c',
mkdir_p.format(join_paths(sysconfdir, 'sysctl.d')))
mkdir_p.format(sysconfdir / 'sysctl.d'))
endif

View File

@ -140,7 +140,7 @@ if want_tests != 'false' and dmi_arches.contains(host_machine.cpu_family())
endif
foreach p : out.stdout().split()
source = join_paths(project_source_root, p)
source = project_source_root / p
name = 'dmidecode_' + p.split('/')[-1].split('.')[0]
test(name,

View File

@ -52,6 +52,5 @@ endforeach
if enable_tmpfiles and install_sysconfdir
meson.add_install_script(
'sh', '-c',
mkdir_p.format(join_paths(sysconfdir, 'tmpfiles.d')))
'sh', '-c', mkdir_p.format(sysconfdir / 'tmpfiles.d'))
endif

View File

@ -307,17 +307,17 @@ install_data('user-.slice.d/10-defaults.conf',
if install_sysconfdir
meson.add_install_script(meson_make_symlink,
join_paths(pkgsysconfdir, 'user'),
join_paths(sysconfdir, 'xdg/systemd/user'))
pkgsysconfdir / 'user',
sysconfdir / 'xdg/systemd/user')
endif
meson.add_install_script(meson_make_symlink,
join_paths(dbussystemservicedir, 'org.freedesktop.systemd1.service'),
join_paths(dbussessionservicedir, 'org.freedesktop.systemd1.service'))
dbussystemservicedir / 'org.freedesktop.systemd1.service',
dbussessionservicedir / 'org.freedesktop.systemd1.service')
if conf.get('HAVE_SYSV_COMPAT') == 1
foreach i : [1, 2, 3, 4, 5]
meson.add_install_script(
'sh', '-c',
mkdir_p.format(join_paths(systemunitdir, 'runlevel@0@.target.wants'.format(i))))
mkdir_p.format(systemunitdir / 'runlevel@0@.target.wants'.format(i)))
endforeach
endif