1
0
mirror of https://github.com/systemd/systemd synced 2026-03-24 07:44:52 +01:00

Compare commits

..

No commits in common. "463aef23a73d7850e0208cf4e96fd448693a755a" and "8f876748d3f89d822b1167214ed4fb66146dc3df" have entirely different histories.

54 changed files with 486 additions and 545 deletions

2
TODO
View File

@ -83,8 +83,6 @@ Janitorial Clean-ups:
Features: Features:
* use credentials logic/TPM2 logic to store homed signing key
* New udev block device symlink names: * New udev block device symlink names:
/dev/disk/by-parttypelabel/<pttype>/<ptlabel>. Use case: if pt label is used /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 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:* sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:pnVostro5581:*
ACCEL_LOCATION=base ACCEL_LOCATION=base
sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:sku0A3E:* sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:pnLatitude9520:*:ct10:*
ACCEL_LOCATION=base ACCEL_LOCATION=base
sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:sku0B0B:* sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:pnLatitude7420:*
ACCEL_LOCATION=base ACCEL_LOCATION=base
# Dell Venue 8 Pro 3845 # Dell Venue 8 Pro 3845

View File

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

View File

@ -240,8 +240,8 @@
<varlistentry> <varlistentry>
<term><option>--make-machine-id-directory=yes|no|auto</option></term> <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 <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 the system containing boot loader entries (i.e. beneath the file system returned by
<option>--print-boot-path</option> option, see above) during <option>install</option> and <option>--print-boot-path</option> above) during <option>install</option> and
<option>remove</option>, respectively. <literal>auto</literal> is equivalent to <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 <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 tmpfs and <literal>no</literal> otherwise (in the latter case the machine ID is likely transient and

View File

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

View File

@ -162,7 +162,7 @@
<term><option>-1</option></term> <term><option>-1</option></term>
<listitem><para>Show information of the most recent core dump only, instead of listing all known core <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>
<varlistentry> <varlistentry>

View File

@ -37,7 +37,7 @@ man_pages = []
html_pages = [] html_pages = []
source_xml_files = [] source_xml_files = []
dbus_docs = [] dbus_docs = []
foreach tuple : manpages foreach tuple : xsltproc.found() ? manpages : []
stem = tuple[0] stem = tuple[0]
section = tuple[1] section = tuple[1]
aliases = tuple[2] aliases = tuple[2]
@ -54,15 +54,9 @@ foreach tuple : manpages
htmlaliases += alias + '.html' htmlaliases += alias + '.html'
endforeach endforeach
mandirn = get_option('mandir') / ('man' + section) mandirn = join_paths(get_option('mandir'), 'man' + section)
if condition == '' or conf.get(condition) == 1 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( p1 = custom_target(
man, man,
input : xml, input : xml,
@ -80,7 +74,7 @@ foreach tuple : manpages
output : htmlalias, output : htmlalias,
command : [ln, '-fs', html, '@OUTPUT@']) command : [ln, '-fs', html, '@OUTPUT@'])
if want_html if want_html
dst = docdir / 'html' / htmlalias dst = join_paths(docdir, 'html', htmlalias)
cmd = 'ln -fs @0@ $DESTDIR@1@'.format(html, dst) cmd = 'ln -fs @0@ $DESTDIR@1@'.format(html, dst)
meson.add_install_script('sh', '-c', cmd) meson.add_install_script('sh', '-c', cmd)
p2 += link p2 += link
@ -95,8 +89,13 @@ foreach tuple : manpages
command : xslt_cmd + [custom_html_xsl, '@INPUT@'], command : xslt_cmd + [custom_html_xsl, '@INPUT@'],
depends : [custom_entities_ent, p2], depends : [custom_entities_ent, p2],
install : want_html, install : want_html,
install_dir : docdir / 'html') install_dir : join_paths(docdir, 'html'))
html_pages += p3 html_pages += p3
file = files(tuple[0] + '.xml')
source_xml_files += file
if tuple[0].startswith('org.freedesktop.')
dbus_docs += file
endif endif
else else
message('Skipping @0@.@1@ because @2@ is false'.format(stem, section, condition)) message('Skipping @0@.@1@ because @2@ is false'.format(stem, section, condition))
@ -133,7 +132,7 @@ foreach tuple : xsltproc.found() ? [['systemd.directives', '7', systemd_directiv
html = stem + '.html' html = stem + '.html'
man = stem + '.' + section man = stem + '.' + section
mandirn = get_option('mandir') / ('man' + section) mandirn = join_paths(get_option('mandir'), 'man' + section)
p1 = custom_target( p1 = custom_target(
man, man,
@ -153,7 +152,7 @@ foreach tuple : xsltproc.found() ? [['systemd.directives', '7', systemd_directiv
output : htmlalias, output : htmlalias,
command : [ln, '-fs', html, '@OUTPUT@']) command : [ln, '-fs', html, '@OUTPUT@'])
if want_html if want_html
dst = docdir / 'html' / htmlalias dst = join_paths(docdir, 'html', htmlalias)
cmd = 'ln -fs @0@ $DESTDIR@1@'.format(html, dst) cmd = 'ln -fs @0@ $DESTDIR@1@'.format(html, dst)
meson.add_install_script('sh', '-c', cmd) meson.add_install_script('sh', '-c', cmd)
p2 += link p2 += link
@ -168,7 +167,7 @@ foreach tuple : xsltproc.found() ? [['systemd.directives', '7', systemd_directiv
command : xslt_cmd + [custom_html_xsl, '@INPUT@'], command : xslt_cmd + [custom_html_xsl, '@INPUT@'],
depends : [custom_entities_ent, p2], depends : [custom_entities_ent, p2],
install : want_html and have_lxml, install : want_html and have_lxml,
install_dir : docdir / 'html') install_dir : join_paths(docdir, 'html'))
html_pages += p3 html_pages += p3
endforeach endforeach
@ -214,26 +213,3 @@ configure_file(
input : 'html.in', input : 'html.in',
output : 'html', output : 'html',
configuration : buildroot_substs) 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 <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 user records should be defined in the format described by the <ulink
url="https://systemd.io/USER_RECORD">JSON User Records</ulink> specification and be placed in one of the url="https://systemd.io/USER_RECORD">JSON User Record</ulink> specification and be placed in one of the
aforementioned directories under a file name composed of the user name suffixed with 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 <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 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, <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 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>) <citerefentry><refentrytitle>systemd-sysext</refentrytitle><manvolnum>8</manvolnum></citerefentry>)
for more information.</para> for more information.</para>

View File

@ -33,7 +33,7 @@
and hence the systemd control group hierarchy.</para> and hence the systemd control group hierarchy.</para>
<para>The module also applies various resource management and runtime parameters to the new session, as <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 Records</ulink> of the user, when configured in the <ulink url="https://systemd.io/USER_RECORD">JSON User Record</ulink> of the user, when
one is defined.</para> one is defined.</para>
<para>On login, this module — in conjunction with <filename>systemd-logind.service</filename> — ensures the <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 <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 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 <option>--image=</option> — if used). A partition that matches both the configured partition type (as
declared with <varname>Type=</varname> described above), and the currently mounted directory declared with <varname>Type=</varname> above), and the currently mounted directory appropriate for
appropriate for that partition type is determined. For example, if the partition type is set to 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 <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 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 declared type is <literal>usr</literal> the partition backing <filename>/usr/</filename> is used as
@ -529,7 +529,7 @@
<varlistentry> <varlistentry>
<term><varname>MakeDirectories=</varname></term> <term><varname>MakeDirectories=</varname></term>
<listitem><para>Takes one or more absolute paths, separated by whitespace, each declaring a directory <listitem><para>akes 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 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 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 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> 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 <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 <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 superblock, configurable with the <option>--key-file=</option> switch to
<command>systemd-repart</command>. If <literal>tpm2</literal> or <literal>key-file+tpm2</literal> is <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 with the <option>--tpm2-device=</option> and <option>--tpm2-pcrs=</option> options to
<command>systemd-repart</command>.</para> <command>systemd-repart</command>.</para>
@ -623,7 +623,7 @@
has no effect on explicit mounts, such as those done via <citerefentry has no effect on explicit mounts, such as those done via <citerefentry
project='man-pages'><refentrytitle>mount</refentrytitle><manvolnum>8</manvolnum></citerefentry> or project='man-pages'><refentrytitle>mount</refentrytitle><manvolnum>8</manvolnum></citerefentry> or
<citerefentry <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 <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 marked for file system growing) the latter is typically without effect: the read-only flag takes

View File

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

View File

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

View File

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

View File

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

View File

@ -35,8 +35,8 @@
<para>Most of <command>systemd-portabled</command>'s functionality is accessible through the <para>Most of <command>systemd-portabled</command>'s functionality is accessible through the
<citerefentry><refentrytitle>portablectl</refentrytitle><manvolnum>1</manvolnum></citerefentry> command.</para> <citerefentry><refentrytitle>portablectl</refentrytitle><manvolnum>1</manvolnum></citerefentry> command.</para>
<para>See <ulink url="https://systemd.io/PORTABLE_SERVICES">Portable Services</ulink> for details about <para>See the <ulink url="https://systemd.io/PORTABLE_SERVICES">Portable
the concepts this service implements.</para> Services Documentation</ulink> for details about the concepts this service implements.</para>
</refsect1> </refsect1>
<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 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 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 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 <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 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 operating system tree. When one or more system extension images are activated, their
<filename>/usr/</filename> and <filename>/opt/</filename> hierarchies are combined via <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 <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 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 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 <filename>/usr/</filename> and <filename>/opt/</filename> hierarchies as if they were included in the
@ -71,7 +71,7 @@
<orderedlist> <orderedlist>
<listitem><para>Plain directories or btrfs subvolumes containing the OS tree</para></listitem> <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 <listitem><para>Disk images with a GPT disk label, following the <ulink
url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partitions Specification</ulink></para></listitem> url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partition 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> <listitem><para>Disk images lacking a partition table, with a naked Linux file system (e.g. squashfs or ext4)</para></listitem>
</orderedlist> </orderedlist>
@ -127,15 +127,13 @@
<title>Uses</title> <title>Uses</title>
<para>The primary use case for system images are immutable environments where debugging and development <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. tools shall optionally be made available, but not included in the immutable base OS image itself
<citerefentry project='man-pages'><refentrytitle>strace</refentrytitle><manvolnum>1</manvolnum></citerefentry> (e.g. <filename>strace</filename> and <filename>gdb</filename> shall be an optionally installable
and addition in order to make debugging/development easier). System extension images should not be
<citerefentry project='man-pages'><refentrytitle>gdb</refentrytitle><manvolnum>1</manvolnum></citerefentry> misunderstood as a generic software packaging framework, as no dependency scheme is available: system
shall be an optionally installable addition in order to make debugging/development easier). System extensions should carry all files they need themselves, except for those already shipped in the
extension images should not be misunderstood as a generic software packaging framework, as no dependency underlying host system image. Typically, system extension images are built at the same time as the base
scheme is available: system extensions should carry all files they need themselves, except for those OS image — within the same build system.</para>
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 <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 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 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 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 Logging Service</literal>). If <option>combined</option>, the system manager will use both unit names
and descriptions in status messages (e.g. <literal>systemd-journald.service - Journal Logging and descriptions in status messages (e.g. <literal>systemdmd-jouranld.service - Journal Logging
Service</literal>).</para> Service</literal>).</para>
<para>See <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 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 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>/etc/userdb/</filename>, <filename>/run/userdb/</filename>,
<filename>/run/host/userdb/</filename> and <filename>/usr/lib/userdb/</filename>.</para> <filename>/run/host/userdb/</filename> and <filename>/use/lib/userdb/</filename>.</para>
<para>Most of <command>systemd-userdbd</command>'s functionality is accessible through the <para>Most of <command>systemd-userdbd</command>'s functionality is accessible through the
<citerefentry><refentrytitle>userdbctl</refentrytitle><manvolnum>1</manvolnum></citerefentry> <citerefentry><refentrytitle>userdbctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
command.</para> command.</para>
<para>The user and group records this service provides access to follow the <ulink <para>The user and group records this service provides access to follow the <ulink
url="https://systemd.io/USER_RECORD">JSON User Records</ulink> and <ulink url="https://systemd.io/USER_RECORD">JSON User Record</ulink> and <ulink
url="https://systemd.io/GROUP_RECORD">JSON Group Record</ulink> definitions. This service implements the 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 <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 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 <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 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 root file system and matching Verity data in the same image, implementing the <ulink
url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partitions Specification</ulink>.</para> url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partition Specification</ulink>.</para>
<xi:include href="system-only.xml" xpointer="singular"/></listitem> <xi:include href="system-only.xml" xpointer="singular"/></listitem>
</varlistentry> </varlistentry>
@ -402,15 +402,14 @@
<term><varname>ExtensionImages=</varname></term> <term><varname>ExtensionImages=</varname></term>
<listitem><para>This setting is similar to <varname>MountImages=</varname> in that it mounts a file <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 system hierarchy from a block device node or loopback file, but instead of providing a destination path,
path, an overlay will be set up. This option expects a whitespace separated list of mount an overlay will be set up. This option expects a whitespace separated list of mount definitions. Each
definitions. Each definition consists of a source path, optionally followed by a colon and a list of definition consists of a source path, optionally followed by a colon and a list of mount options.</para>
mount options.</para>
<para>A read-only OverlayFS will be set up on top of <filename>/usr/</filename> and <para>A read-only OverlayFS will be set up on top of <filename>/usr/</filename> and
<filename>/opt/</filename> hierarchies. The order in which the images are listed will determine the <filename>/opt/</filename> hierarchies from the root. The order in which the images are listed
order in which the overlay is laid down: images specified first to last will result in overlayfs will determine the order in which the overlay is laid down: images specified first to last will result
layers bottom to top.</para> 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 <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 will be implicitly applied to the root partition on the image, or a series of colon-separated tuples
@ -2305,7 +2304,7 @@ SystemCallErrorNumber=EPERM</programlisting>
<listitem><para>Sets environment variables for executed processes. Each line is unquoted using the <listitem><para>Sets environment variables for executed processes. Each line is unquoted using the
rules described in "Quoting" section in rules described in "Quoting" section in
<citerefentry><refentrytitle>systemd.syntax</refentrytitle><manvolnum>7</manvolnum></citerefentry> <citerefentry><refentrytitle>systemd.syntax</refentrytitle><manvolnum>5</manvolnum></citerefentry>
and becomes a list of variable assignments. If you need to assign a value containing spaces or the 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 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 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> <term><varname>MTUBytes=</varname></term>
<listitem> <listitem>
<para>The maximum transmission unit in bytes to set for the <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> understood to the base of 1024.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
@ -465,7 +465,7 @@
<term><varname>BitsPerSecond=</varname></term> <term><varname>BitsPerSecond=</varname></term>
<listitem> <listitem>
<para>The speed to set for the device, the value is rounded <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> supported and are understood to the base of 1000.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
@ -788,7 +788,7 @@
<term><varname>GenericSegmentOffloadMaxBytes=</varname></term> <term><varname>GenericSegmentOffloadMaxBytes=</varname></term>
<listitem> <listitem>
<para>Specifies the maximum size of a Generic Segment Offload (GSO) packet the <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. understood to the base of 1024. An unsigned integer in the range 1…65536.
Defaults to unset.</para> Defaults to unset.</para>
</listitem> </listitem>
@ -796,7 +796,7 @@
<varlistentry> <varlistentry>
<term><varname>GenericSegmentOffloadMaxSegments=</varname></term> <term><varname>GenericSegmentOffloadMaxSegments=</varname></term>
<listitem> <listitem>
<para>Specifies the maximum number of Generic Segment Offload (GSO) segments the device should <para>Specifies the maximum number of a Generic Segment Offload (GSO) segments the device should
accept. An unsigned integer in the range 1…65535. Defaults to unset.</para> accept. An unsigned integer in the range 1…65535. Defaults to unset.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>

View File

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

View File

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

View File

@ -202,7 +202,7 @@
capabilities (see capabilities (see
<citerefentry project='man-pages'><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry> <citerefentry project='man-pages'><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>
for details). The <varname>AmbientCapability=</varname> setting for details). The <varname>AmbientCapability=</varname> setting
specifies capability which will be passed to the started program specifies capability which will be passed to to started program
in the inheritable and ambient capability sets. This will grant in the inheritable and ambient capability sets. This will grant
these capabilities to this process. This setting correspond to these capabilities to this process. This setting correspond to
the <option>--ambient-capability=</option> command line switch. 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> <citerefentry><refentrytitle>systemd-delta</refentrytitle><manvolnum>1</manvolnum></citerefentry>
</para> </para>
<para><citerefentry><refentrytitle>daemon</refentrytitle><manvolnum>7</manvolnum></citerefentry> <para><citerefentry><refentrytitle>daemon</refentrytitle><manvolnum>8</manvolnum></citerefentry>
has a discussion of packaging scriptlets.</para> has a discussion of packaging scriptlets.</para>
<para>Fedora page introducing the use of presets: <para>Fedora page introducing the use of presets:

View File

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

View File

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

View File

@ -585,17 +585,6 @@
for --user instances).</para></listitem> for --user instances).</para></listitem>
</varlistentry> </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> <varlistentry>
<term><constant>SIGRTMIN+26</constant></term> <term><constant>SIGRTMIN+26</constant></term>

View File

@ -550,7 +550,6 @@ w- /proc/sys/vm/swappiness - - - - 10</programlisting></para>
<refsect2> <refsect2>
<title>Age</title> <title>Age</title>
<para>The date field, when set, is used to decide what files to <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 delete when cleaning. If a file or directory is older than the
current time minus the age field, it is deleted. The field current time minus the age field, it is deleted. The field
@ -583,9 +582,10 @@ w- /proc/sys/vm/swappiness - - - - 10</programlisting></para>
and <varname>X</varname>. If omitted or set to and <varname>X</varname>. If omitted or set to
<literal>-</literal>, no automatic clean-up is done.</para> <literal>-</literal>, no automatic clean-up is done.</para>
<para>If the age field starts with a tilde character <literal>~</literal>, clean-up is only applied to <para>If the age field starts with a tilde character
files and directories one level inside the directory specified, but not the files and directories <literal>~</literal>, the clean-up is only applied to files and
immediately inside it.</para> 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 <para>The age of a file system entry is determined from its last
modification timestamp (mtime), its last access timestamp (atime), modification timestamp (mtime), its last access timestamp (atime),
@ -595,25 +595,30 @@ w- /proc/sys/vm/swappiness - - - - 10</programlisting></para>
the age field. To restrict the deletion based on particular type the age field. To restrict the deletion based on particular type
of file timestamps, the age-by argument can be used.</para> of file timestamps, the age-by argument can be used.</para>
<para>The age-by argument overrides the timestamp types to be used for the age check. It can be <para>The age-by argument, when (optionally) specified along
specified by prefixing the age argument with a sequence of characters to specify the timestamp types with age will check if the file system entry has aged by the
and a colon (<literal>:</literal>): type of file timestamp(s) provided. It can be specified by
<literal><replaceable>age-by</replaceable>...:<replaceable>cleanup-age</replaceable></literal>. The prefixing the age argument with a set of file timestamp types
argument can consist of <constant>a</constant> (<constant>A</constant> for directories), followed by a colon character <literal>:</literal>, i.e.,
<constant>b</constant> (<constant>B</constant> for directories), <constant>c</constant> <literal><replaceable>age-by</replaceable>:<replaceable>cleanup-age</replaceable></literal>.
(<constant>C</constant> for directories), or <constant>m</constant> (<constant>M</constant> for The argument can be a set of:
directories). Those respectively indicate access, creation, last status change, and last modification <constant>a</constant> (<constant>A</constant> for directories),
time of a file system entry. The lower-case letter signifies that the given timestamp type should be <constant>b</constant> (<constant>B</constant> for directories),
considered for files, while the upper-case letter signifies that the given timestamp type should be <constant>c</constant> (<constant>C</constant> for directories; ignored by default), or
considered for directories. See <citerefentry <constant>m</constant> (<constant>M</constant> for directories),
project='man-pages'><refentrytitle>statx</refentrytitle><manvolnum>2</manvolnum></citerefentry> file indicating access, creation, last status change, and last
timestamp fields for more details about timestamp types.</para> 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>If not specified, the age-by field defaults to <constant>abcmABM</constant>, i.e. by default all <para>If unspecified, the age-by field defaults to
file timestamps are taken into consideration, with the exception of the last status change timestamp <constant>abcmABM</constant>,
(ctime) for directories. This is because the aging logic itself will alter the ctime whenever it i.e., by default all file timestamps are taken into consideration,
deletes a file inside it. To ensure that running the aging logic does not feed back into the next with the exception of the last status change timestamp (ctime) for
iteration of itself, ctime for directories is ignored by default.</para> 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>For example:<programlisting> <para>For example:<programlisting>
# Files created and modified, and directories accessed more than # 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 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>, pick up drop-in JSON user and group records from <filename>/etc/userdb/</filename>,
<filename>/run/userdb/</filename>, <filename>/run/host/userdb/</filename>, <filename>/run/userdb/</filename>, <filename>/run/host/userdb/</filename>,
<filename>/usr/lib/userdb/</filename>.</para> <filename>/use/lib/userdb/</filename>.</para>
</refsect1> </refsect1>
<refsect1> <refsect1>
@ -104,7 +104,7 @@
<listitem><para>Controls whether to include user/group lookups in the output that are defined using <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>, drop-in files in <filename>/etc/userdb/</filename>, <filename>/run/userdb/</filename>,
<filename>/run/host/userdb/</filename>, <filename>/usr/lib/userdb/</filename>. If <filename>/run/host/userdb/</filename>, <filename>/use/lib/userdb/</filename>. If
<option>--with-dropin=no</option> is used these records are suppressed. 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 <option>--with-dropin=yes</option> is specified such users/groups are included in the output (which
is the default).</para></listitem> is the default).</para></listitem>
@ -260,7 +260,7 @@
<citerefentry><refentrytitle>systemd-userdbd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> <citerefentry><refentrytitle>systemd-userdbd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
and picks up JSON user/group records from <filename>/etc/userdb/</filename>, and picks up JSON user/group records from <filename>/etc/userdb/</filename>,
<filename>/run/userdb/</filename>, <filename>/run/host/userdb/</filename>, <filename>/run/userdb/</filename>, <filename>/run/host/userdb/</filename>,
<filename>/usr/lib/userdb/</filename>.</para></listitem> <filename>/use/lib/userdb/</filename>.</para></listitem>
</varlistentry> </varlistentry>
</variablelist> </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.set10('BUMP_PROC_SYS_FS_NR_OPEN', get_option('bump-proc-sys-fs-nr-open'))
conf.set('HIGH_RLIMIT_NOFILE', 512*1024) conf.set('HIGH_RLIMIT_NOFILE', 512*1024)
# Meson ignores the preceding arguments when joining paths if an absolute # join_paths ignores the preceding arguments if an absolute component is
# component is encountered, so this should canonicalize various paths when they # encountered, so this should canonicalize various paths when they are
# are absolute or relative. # absolute or relative.
prefixdir = get_option('prefix') prefixdir = get_option('prefix')
if not prefixdir.startswith('/') if not prefixdir.startswith('/')
error('Prefix is not absolute: "@0@"'.format(prefixdir)) error('Prefix is not absolute: "@0@"'.format(prefixdir))
@ -113,105 +113,105 @@ if prefixdir != rootprefixdir and rootprefixdir != '/' and not prefixdir.strip('
rootprefixdir, prefixdir)) rootprefixdir, prefixdir))
endif endif
bindir = prefixdir / get_option('bindir') bindir = join_paths(prefixdir, get_option('bindir'))
libdir = prefixdir / get_option('libdir') libdir = join_paths(prefixdir, get_option('libdir'))
sysconfdir = prefixdir / get_option('sysconfdir') sysconfdir = join_paths(prefixdir, get_option('sysconfdir'))
includedir = prefixdir / get_option('includedir') includedir = join_paths(prefixdir, get_option('includedir'))
datadir = prefixdir / get_option('datadir') datadir = join_paths(prefixdir, get_option('datadir'))
localstatedir = '/' / get_option('localstatedir') localstatedir = join_paths('/', get_option('localstatedir'))
rootbindir = rootprefixdir / 'bin' rootbindir = join_paths(rootprefixdir, 'bin')
rootsbindir = rootprefixdir / (split_bin ? 'sbin' : 'bin') rootsbindir = join_paths(rootprefixdir, split_bin ? 'sbin' : 'bin')
rootlibexecdir = rootprefixdir / 'lib/systemd' rootlibexecdir = join_paths(rootprefixdir, 'lib/systemd')
rootlibdir = get_option('rootlibdir') rootlibdir = get_option('rootlibdir')
if rootlibdir == '' if rootlibdir == ''
rootlibdir = rootprefixdir / libdir.split('/')[-1] rootlibdir = join_paths(rootprefixdir, libdir.split('/')[-1])
endif endif
install_sysconfdir = get_option('install-sysconfdir') != 'false' install_sysconfdir = get_option('install-sysconfdir') != 'false'
install_sysconfdir_samples = get_option('install-sysconfdir') == 'true' install_sysconfdir_samples = get_option('install-sysconfdir') == 'true'
# Dirs of external packages # Dirs of external packages
pkgconfigdatadir = get_option('pkgconfigdatadir') != '' ? get_option('pkgconfigdatadir') : datadir / 'pkgconfig' pkgconfigdatadir = get_option('pkgconfigdatadir') == '' ? join_paths(datadir, 'pkgconfig') : get_option('pkgconfigdatadir')
pkgconfiglibdir = get_option('pkgconfiglibdir') != '' ? get_option('pkgconfiglibdir') : libdir / 'pkgconfig' pkgconfiglibdir = get_option('pkgconfiglibdir') == '' ? join_paths(libdir, 'pkgconfig') : get_option('pkgconfiglibdir')
polkitpolicydir = datadir / 'polkit-1/actions' polkitpolicydir = join_paths(datadir, 'polkit-1/actions')
polkitrulesdir = datadir / 'polkit-1/rules.d' polkitrulesdir = join_paths(datadir, 'polkit-1/rules.d')
polkitpkladir = localstatedir / 'lib/polkit-1/localauthority/10-vendor.d' polkitpkladir = join_paths(localstatedir, 'lib/polkit-1/localauthority/10-vendor.d')
xinitrcdir = get_option('xinitrcdir') != '' ? get_option('xinitrcdir') : sysconfdir / 'X11/xinit/xinitrc.d' xinitrcdir = get_option('xinitrcdir') == '' ? join_paths(sysconfdir, 'X11/xinit/xinitrc.d') : get_option('xinitrcdir')
rpmmacrosdir = get_option('rpmmacrosdir') rpmmacrosdir = get_option('rpmmacrosdir')
if rpmmacrosdir != 'no' if rpmmacrosdir != 'no'
rpmmacrosdir = prefixdir / rpmmacrosdir rpmmacrosdir = join_paths(prefixdir, rpmmacrosdir)
endif endif
modprobedir = rootprefixdir / 'lib/modprobe.d' modprobedir = join_paths(rootprefixdir, 'lib/modprobe.d')
# Our own paths # Our own paths
pkgdatadir = datadir / 'systemd' pkgdatadir = join_paths(datadir, 'systemd')
environmentdir = prefixdir / 'lib/environment.d' environmentdir = join_paths(prefixdir, 'lib/environment.d')
pkgsysconfdir = sysconfdir / 'systemd' pkgsysconfdir = join_paths(sysconfdir, 'systemd')
userunitdir = prefixdir / 'lib/systemd/user' userunitdir = join_paths(prefixdir, 'lib/systemd/user')
userpresetdir = prefixdir / 'lib/systemd/user-preset' userpresetdir = join_paths(prefixdir, 'lib/systemd/user-preset')
tmpfilesdir = prefixdir / 'lib/tmpfiles.d' tmpfilesdir = join_paths(prefixdir, 'lib/tmpfiles.d')
sysusersdir = prefixdir / 'lib/sysusers.d' sysusersdir = join_paths(prefixdir, 'lib/sysusers.d')
sysctldir = prefixdir / 'lib/sysctl.d' sysctldir = join_paths(prefixdir, 'lib/sysctl.d')
binfmtdir = prefixdir / 'lib/binfmt.d' binfmtdir = join_paths(prefixdir, 'lib/binfmt.d')
modulesloaddir = prefixdir / 'lib/modules-load.d' modulesloaddir = join_paths(prefixdir, 'lib/modules-load.d')
networkdir = rootprefixdir / 'lib/systemd/network' networkdir = join_paths(rootprefixdir, 'lib/systemd/network')
pkgincludedir = includedir / 'systemd' pkgincludedir = join_paths(includedir, 'systemd')
systemgeneratordir = rootlibexecdir / 'system-generators' systemgeneratordir = join_paths(rootlibexecdir, 'system-generators')
usergeneratordir = prefixdir / 'lib/systemd/user-generators' usergeneratordir = join_paths(prefixdir, 'lib/systemd/user-generators')
systemenvgeneratordir = prefixdir / 'lib/systemd/system-environment-generators' systemenvgeneratordir = join_paths(prefixdir, 'lib/systemd/system-environment-generators')
userenvgeneratordir = prefixdir / 'lib/systemd/user-environment-generators' userenvgeneratordir = join_paths(prefixdir, 'lib/systemd/user-environment-generators')
systemshutdowndir = rootlibexecdir / 'system-shutdown' systemshutdowndir = join_paths(rootlibexecdir, 'system-shutdown')
systemsleepdir = rootlibexecdir / 'system-sleep' systemsleepdir = join_paths(rootlibexecdir, 'system-sleep')
systemunitdir = rootprefixdir / 'lib/systemd/system' systemunitdir = join_paths(rootprefixdir, 'lib/systemd/system')
systempresetdir = rootprefixdir / 'lib/systemd/system-preset' systempresetdir = join_paths(rootprefixdir, 'lib/systemd/system-preset')
udevlibexecdir = rootprefixdir / 'lib/udev' udevlibexecdir = join_paths(rootprefixdir, 'lib/udev')
udevrulesdir = udevlibexecdir / 'rules.d' udevrulesdir = join_paths(udevlibexecdir, 'rules.d')
udevhwdbdir = udevlibexecdir / 'hwdb.d' udevhwdbdir = join_paths(udevlibexecdir, 'hwdb.d')
catalogdir = prefixdir / 'lib/systemd/catalog' catalogdir = join_paths(prefixdir, 'lib/systemd/catalog')
kernelinstalldir = prefixdir / 'lib/kernel/install.d' kernelinstalldir = join_paths(prefixdir, 'lib/kernel/install.d')
factorydir = datadir / 'factory' factorydir = join_paths(datadir, 'factory')
bootlibdir = prefixdir / 'lib/systemd/boot/efi' bootlibdir = join_paths(prefixdir, 'lib/systemd/boot/efi')
testsdir = prefixdir / 'lib/systemd/tests' testsdir = join_paths(prefixdir, 'lib/systemd/tests')
systemdstatedir = localstatedir / 'lib/systemd' systemdstatedir = join_paths(localstatedir, 'lib/systemd')
catalogstatedir = systemdstatedir / 'catalog' catalogstatedir = join_paths(systemdstatedir, 'catalog')
randomseeddir = localstatedir / 'lib/systemd' randomseeddir = join_paths(localstatedir, 'lib/systemd')
profiledir = rootlibexecdir / 'portable' / 'profile' profiledir = join_paths(rootlibexecdir, 'portable', 'profile')
ntpservicelistdir = rootprefixdir / 'lib/systemd/ntp-units.d' ntpservicelistdir = join_paths(rootprefixdir, 'lib/systemd/ntp-units.d')
docdir = get_option('docdir') docdir = get_option('docdir')
if docdir == '' if docdir == ''
docdir = datadir / 'doc/systemd' docdir = join_paths(datadir, 'doc/systemd')
endif endif
dbuspolicydir = get_option('dbuspolicydir') dbuspolicydir = get_option('dbuspolicydir')
if dbuspolicydir == '' if dbuspolicydir == ''
dbuspolicydir = datadir / 'dbus-1/system.d' dbuspolicydir = join_paths(datadir, 'dbus-1/system.d')
endif endif
dbussessionservicedir = get_option('dbussessionservicedir') dbussessionservicedir = get_option('dbussessionservicedir')
if dbussessionservicedir == '' if dbussessionservicedir == ''
dbussessionservicedir = datadir / 'dbus-1/services' dbussessionservicedir = join_paths(datadir, 'dbus-1/services')
endif endif
dbussystemservicedir = get_option('dbussystemservicedir') dbussystemservicedir = get_option('dbussystemservicedir')
if dbussystemservicedir == '' if dbussystemservicedir == ''
dbussystemservicedir = datadir / 'dbus-1/system-services' dbussystemservicedir = join_paths(datadir, 'dbus-1/system-services')
endif endif
pamlibdir = get_option('pamlibdir') pamlibdir = get_option('pamlibdir')
if pamlibdir == '' if pamlibdir == ''
pamlibdir = rootlibdir / 'security' pamlibdir = join_paths(rootlibdir, 'security')
endif endif
pamconfdir = get_option('pamconfdir') pamconfdir = get_option('pamconfdir')
if pamconfdir == '' if pamconfdir == ''
pamconfdir = prefixdir / 'lib/pam.d' pamconfdir = join_paths(prefixdir, 'lib/pam.d')
endif endif
libcryptsetup_plugins_dir = get_option('libcryptsetup-plugins-dir') libcryptsetup_plugins_dir = get_option('libcryptsetup-plugins-dir')
if libcryptsetup_plugins_dir == '' if libcryptsetup_plugins_dir == ''
libcryptsetup_plugins_dir = rootlibdir / 'cryptsetup' libcryptsetup_plugins_dir = join_paths(rootlibdir, 'cryptsetup')
endif endif
memory_accounting_default = get_option('memory-accounting-default') 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('BINFMT_DIR', binfmtdir)
conf.set_quoted('BOOTLIBDIR', bootlibdir) conf.set_quoted('BOOTLIBDIR', bootlibdir)
conf.set_quoted('CATALOG_DATABASE', catalogstatedir / 'database') conf.set_quoted('CATALOG_DATABASE', join_paths(catalogstatedir, 'database'))
conf.set_quoted('CERTIFICATE_ROOT', get_option('certificate-root')) conf.set_quoted('CERTIFICATE_ROOT', get_option('certificate-root'))
conf.set_quoted('DOC_DIR', docdir) conf.set_quoted('DOC_DIR', docdir)
conf.set_quoted('DOCUMENT_ROOT', pkgdatadir / 'gatewayd') conf.set_quoted('DOCUMENT_ROOT', join_paths(pkgdatadir, 'gatewayd'))
conf.set_quoted('ENVIRONMENT_DIR', environmentdir) conf.set_quoted('ENVIRONMENT_DIR', environmentdir)
conf.set_quoted('INCLUDE_DIR', includedir) conf.set_quoted('INCLUDE_DIR', includedir)
conf.set_quoted('LIBDIR', libdir) conf.set_quoted('LIBDIR', libdir)
conf.set_quoted('MODPROBE_DIR', modprobedir) conf.set_quoted('MODPROBE_DIR', modprobedir)
conf.set_quoted('MODULESLOAD_DIR', modulesloaddir) conf.set_quoted('MODULESLOAD_DIR', modulesloaddir)
conf.set_quoted('PKGSYSCONFDIR', pkgsysconfdir) conf.set_quoted('PKGSYSCONFDIR', pkgsysconfdir)
conf.set_quoted('POLKIT_AGENT_BINARY_PATH', bindir / 'pkttyagent') conf.set_quoted('POLKIT_AGENT_BINARY_PATH', join_paths(bindir, 'pkttyagent'))
conf.set_quoted('PREFIX', prefixdir) conf.set_quoted('PREFIX', prefixdir)
conf.set_quoted('RANDOM_SEED', randomseeddir / 'random-seed') conf.set_quoted('RANDOM_SEED', join_paths(randomseeddir, 'random-seed'))
conf.set_quoted('RANDOM_SEED_DIR', randomseeddir) conf.set_quoted('RANDOM_SEED_DIR', randomseeddir)
conf.set_quoted('RC_LOCAL_PATH', get_option('rc-local')) conf.set_quoted('RC_LOCAL_PATH', get_option('rc-local'))
conf.set_quoted('ROOTBINDIR', rootbindir) conf.set_quoted('ROOTBINDIR', rootbindir)
@ -241,29 +241,29 @@ conf.set_quoted('ROOTPREFIX', rootprefixdir)
conf.set_quoted('ROOTPREFIX_NOSLASH', rootprefixdir_noslash) conf.set_quoted('ROOTPREFIX_NOSLASH', rootprefixdir_noslash)
conf.set_quoted('SYSCONF_DIR', sysconfdir) conf.set_quoted('SYSCONF_DIR', sysconfdir)
conf.set_quoted('SYSCTL_DIR', sysctldir) conf.set_quoted('SYSCTL_DIR', sysctldir)
conf.set_quoted('SYSTEMCTL_BINARY_PATH', rootbindir / 'systemctl') conf.set_quoted('SYSTEMCTL_BINARY_PATH', join_paths(rootbindir, 'systemctl'))
conf.set_quoted('SYSTEMD_BINARY_PATH', rootlibexecdir / 'systemd') conf.set_quoted('SYSTEMD_BINARY_PATH', join_paths(rootlibexecdir, 'systemd'))
conf.set_quoted('SYSTEMD_CATALOG_DIR', catalogdir) conf.set_quoted('SYSTEMD_CATALOG_DIR', catalogdir)
conf.set_quoted('SYSTEMD_CGROUPS_AGENT_PATH', rootlibexecdir / 'systemd-cgroups-agent') conf.set_quoted('SYSTEMD_CGROUPS_AGENT_PATH', join_paths(rootlibexecdir, 'systemd-cgroups-agent'))
conf.set_quoted('SYSTEMD_CRYPTSETUP_PATH', rootlibexecdir / 'systemd-cryptsetup') conf.set_quoted('SYSTEMD_CRYPTSETUP_PATH', join_paths(rootlibexecdir, 'systemd-cryptsetup'))
conf.set_quoted('SYSTEMD_EXPORT_PATH', rootlibexecdir / 'systemd-export') conf.set_quoted('SYSTEMD_EXPORT_PATH', join_paths(rootlibexecdir, 'systemd-export'))
conf.set_quoted('SYSTEMD_FSCK_PATH', rootlibexecdir / 'systemd-fsck') conf.set_quoted('SYSTEMD_FSCK_PATH', join_paths(rootlibexecdir, 'systemd-fsck'))
conf.set_quoted('SYSTEMD_GROWFS_PATH', rootlibexecdir / 'systemd-growfs') conf.set_quoted('SYSTEMD_GROWFS_PATH', join_paths(rootlibexecdir, 'systemd-growfs'))
conf.set_quoted('SYSTEMD_HOMEWORK_PATH', rootlibexecdir / 'systemd-homework') conf.set_quoted('SYSTEMD_HOMEWORK_PATH', join_paths(rootlibexecdir, 'systemd-homework'))
conf.set_quoted('SYSTEMD_IMPORT_FS_PATH', rootlibexecdir / 'systemd-import-fs') conf.set_quoted('SYSTEMD_IMPORT_FS_PATH', join_paths(rootlibexecdir, 'systemd-import-fs'))
conf.set_quoted('SYSTEMD_IMPORT_PATH', rootlibexecdir / 'systemd-import') conf.set_quoted('SYSTEMD_IMPORT_PATH', join_paths(rootlibexecdir, 'systemd-import'))
conf.set_quoted('SYSTEMD_KBD_MODEL_MAP', pkgdatadir / 'kbd-model-map') conf.set_quoted('SYSTEMD_KBD_MODEL_MAP', join_paths(pkgdatadir, 'kbd-model-map'))
conf.set_quoted('SYSTEMD_LANGUAGE_FALLBACK_MAP', pkgdatadir / 'language-fallback-map') conf.set_quoted('SYSTEMD_LANGUAGE_FALLBACK_MAP', join_paths(pkgdatadir, 'language-fallback-map'))
conf.set_quoted('SYSTEMD_MAKEFS_PATH', rootlibexecdir / 'systemd-makefs') conf.set_quoted('SYSTEMD_MAKEFS_PATH', join_paths(rootlibexecdir, 'systemd-makefs'))
conf.set_quoted('SYSTEMD_PULL_PATH', rootlibexecdir / 'systemd-pull') conf.set_quoted('SYSTEMD_PULL_PATH', join_paths(rootlibexecdir, 'systemd-pull'))
conf.set_quoted('SYSTEMD_SHUTDOWN_BINARY_PATH', rootlibexecdir / 'systemd-shutdown') conf.set_quoted('SYSTEMD_SHUTDOWN_BINARY_PATH', join_paths(rootlibexecdir, 'systemd-shutdown'))
conf.set_quoted('SYSTEMD_STDIO_BRIDGE_BINARY_PATH', bindir / 'systemd-stdio-bridge') conf.set_quoted('SYSTEMD_STDIO_BRIDGE_BINARY_PATH', join_paths(bindir, 'systemd-stdio-bridge'))
conf.set_quoted('SYSTEMD_TEST_DATA', testsdir / 'testdata') conf.set_quoted('SYSTEMD_TEST_DATA', join_paths(testsdir, 'testdata'))
conf.set_quoted('SYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH', rootbindir / 'systemd-tty-ask-password-agent') 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', rootlibexecdir / 'systemd-update-helper') conf.set_quoted('SYSTEMD_UPDATE_HELPER_PATH', join_paths(rootlibexecdir, 'systemd-update-helper'))
conf.set_quoted('SYSTEMD_USERWORK_PATH', rootlibexecdir / 'systemd-userwork') conf.set_quoted('SYSTEMD_USERWORK_PATH', join_paths(rootlibexecdir, 'systemd-userwork'))
conf.set_quoted('SYSTEMD_VERITYSETUP_PATH', rootlibexecdir / 'systemd-veritysetup') conf.set_quoted('SYSTEMD_VERITYSETUP_PATH', join_paths(rootlibexecdir, 'systemd-veritysetup'))
conf.set_quoted('SYSTEM_CONFIG_UNIT_DIR', pkgsysconfdir / 'system') conf.set_quoted('SYSTEM_CONFIG_UNIT_DIR', join_paths(pkgsysconfdir, 'system'))
conf.set_quoted('SYSTEM_DATA_UNIT_DIR', systemunitdir) conf.set_quoted('SYSTEM_DATA_UNIT_DIR', systemunitdir)
conf.set_quoted('SYSTEM_ENV_GENERATOR_DIR', systemenvgeneratordir) conf.set_quoted('SYSTEM_ENV_GENERATOR_DIR', systemenvgeneratordir)
conf.set_quoted('SYSTEM_GENERATOR_DIR', systemgeneratordir) 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_HWDB_DIR', udevhwdbdir)
conf.set_quoted('UDEV_RULES_DIR', udevrulesdir) conf.set_quoted('UDEV_RULES_DIR', udevrulesdir)
conf.set_quoted('UPDATE_HELPER_USER_TIMEOUT', get_option('update-helper-user-timeout')) conf.set_quoted('UPDATE_HELPER_USER_TIMEOUT', get_option('update-helper-user-timeout'))
conf.set_quoted('USER_CONFIG_UNIT_DIR', pkgsysconfdir / 'user') conf.set_quoted('USER_CONFIG_UNIT_DIR', join_paths(pkgsysconfdir, 'user'))
conf.set_quoted('USER_DATA_UNIT_DIR', userunitdir) conf.set_quoted('USER_DATA_UNIT_DIR', userunitdir)
conf.set_quoted('USER_ENV_GENERATOR_DIR', userenvgeneratordir) conf.set_quoted('USER_ENV_GENERATOR_DIR', userenvgeneratordir)
conf.set_quoted('USER_GENERATOR_DIR', usergeneratordir) conf.set_quoted('USER_GENERATOR_DIR', usergeneratordir)
conf.set_quoted('USER_KEYRING_PATH', pkgsysconfdir / 'import-pubring.gpg') conf.set_quoted('USER_KEYRING_PATH', join_paths(pkgsysconfdir, 'import-pubring.gpg'))
conf.set_quoted('USER_PRESET_DIR', userpresetdir) conf.set_quoted('USER_PRESET_DIR', userpresetdir)
conf.set_quoted('VENDOR_KEYRING_PATH', rootlibexecdir / 'import-pubring.gpg') conf.set_quoted('VENDOR_KEYRING_PATH', join_paths(rootlibexecdir, 'import-pubring.gpg'))
conf.set('ANSI_OK_COLOR', 'ANSI_' + get_option('ok-color').underscorify().to_upper()) conf.set('ANSI_OK_COLOR', 'ANSI_' + get_option('ok-color').underscorify().to_upper())
conf.set10('ENABLE_URLIFY', get_option('urlify')) conf.set10('ENABLE_URLIFY', get_option('urlify'))
@ -1857,7 +1857,7 @@ foreach tuple : [['myhostname', 'ENABLE_NSS_MYHOSTNAME'],
module = tuple[0] module = tuple[0]
sym = 'src/nss-@0@/nss-@0@.sym'.format(module) sym = 'src/nss-@0@/nss-@0@.sym'.format(module)
version_script_arg = project_source_root / sym version_script_arg = join_paths(project_source_root, sym)
sources = ['src/nss-@0@/nss-@0@.c'.format(module)] sources = ['src/nss-@0@/nss-@0@.c'.format(module)]
if tuple.length() > 2 if tuple.length() > 2
@ -1922,8 +1922,8 @@ executable(
install_dir : rootlibexecdir) install_dir : rootlibexecdir)
meson.add_install_script(meson_make_symlink, meson.add_install_script(meson_make_symlink,
rootlibexecdir / 'systemd', join_paths(rootlibexecdir, 'systemd'),
rootsbindir / 'init') join_paths(rootsbindir, 'init'))
public_programs += executable( public_programs += executable(
'systemd-analyze', 'systemd-analyze',
@ -2028,8 +2028,8 @@ if conf.get('ENABLE_ENVIRONMENT_D') == 1
install_dir : userenvgeneratordir) install_dir : userenvgeneratordir)
meson.add_install_script(meson_make_symlink, meson.add_install_script(meson_make_symlink,
sysconfdir / 'environment', join_paths(sysconfdir, 'environment'),
environmentdir / '99-environment.conf') join_paths(environmentdir, '99-environment.conf'))
endif endif
if conf.get('ENABLE_HIBERNATE') == 1 if conf.get('ENABLE_HIBERNATE') == 1
@ -2100,12 +2100,12 @@ if conf.get('ENABLE_RESOLVE') == 1
install : true) install : true)
meson.add_install_script(meson_make_symlink, meson.add_install_script(meson_make_symlink,
bindir / 'resolvectl', join_paths(bindir, 'resolvectl'),
rootsbindir / 'resolvconf') join_paths(rootsbindir, 'resolvconf'))
meson.add_install_script(meson_make_symlink, meson.add_install_script(meson_make_symlink,
bindir / 'resolvectl', join_paths(bindir, 'resolvectl'),
bindir / 'systemd-resolve') join_paths(bindir, 'systemd-resolve'))
endif endif
if conf.get('ENABLE_LOGIND') == 1 if conf.get('ENABLE_LOGIND') == 1
@ -2144,7 +2144,7 @@ if conf.get('ENABLE_LOGIND') == 1
install_dir : rootbindir) install_dir : rootbindir)
if conf.get('HAVE_PAM') == 1 if conf.get('HAVE_PAM') == 1
version_script_arg = project_source_root / pam_systemd_sym version_script_arg = join_paths(project_source_root, pam_systemd_sym)
pam_systemd = shared_library( pam_systemd = shared_library(
'pam_systemd', 'pam_systemd',
pam_systemd_c, pam_systemd_c,
@ -2362,7 +2362,7 @@ if conf.get('ENABLE_HOMED') == 1
install_dir : rootbindir) install_dir : rootbindir)
if conf.get('HAVE_PAM') == 1 if conf.get('HAVE_PAM') == 1
version_script_arg = project_source_root / pam_systemd_home_sym version_script_arg = join_paths(project_source_root, pam_systemd_home_sym)
pam_systemd = shared_library( pam_systemd = shared_library(
'pam_systemd_home', 'pam_systemd_home',
pam_systemd_home_c, pam_systemd_home_c,
@ -2385,13 +2385,13 @@ endif
foreach alias : (['halt', 'poweroff', 'reboot', 'shutdown'] + foreach alias : (['halt', 'poweroff', 'reboot', 'shutdown'] +
(conf.get('HAVE_SYSV_COMPAT') == 1 ? ['runlevel', 'telinit'] : [])) (conf.get('HAVE_SYSV_COMPAT') == 1 ? ['runlevel', 'telinit'] : []))
meson.add_install_script(meson_make_symlink, meson.add_install_script(meson_make_symlink,
rootbindir / 'systemctl', join_paths(rootbindir, 'systemctl'),
rootsbindir / alias) join_paths(rootsbindir, alias))
endforeach endforeach
meson.add_install_script(meson_make_symlink, meson.add_install_script(meson_make_symlink,
rootbindir / 'udevadm', join_paths(rootbindir, 'udevadm'),
rootlibexecdir / 'systemd-udevd') join_paths(rootlibexecdir, 'systemd-udevd'))
if conf.get('ENABLE_BACKLIGHT') == 1 if conf.get('ENABLE_BACKLIGHT') == 1
executable( executable(
@ -2828,7 +2828,7 @@ if conf.get('ENABLE_BINFMT') == 1
mkdir_p.format(binfmtdir)) mkdir_p.format(binfmtdir))
if install_sysconfdir if install_sysconfdir
meson.add_install_script('sh', '-c', meson.add_install_script('sh', '-c',
mkdir_p.format(sysconfdir / 'binfmt.d')) mkdir_p.format(join_paths(sysconfdir, 'binfmt.d')))
endif endif
endif endif
@ -3105,7 +3105,7 @@ public_programs += executable(
install : true) install : true)
meson.add_install_script(meson_make_symlink, meson.add_install_script(meson_make_symlink,
'systemd-mount', bindir / 'systemd-umount') 'systemd-mount', join_paths(bindir, 'systemd-umount'))
public_programs += executable( public_programs += executable(
'systemd-run', 'systemd-run',
@ -3307,7 +3307,7 @@ if conf.get('HAVE_KMOD') == 1
mkdir_p.format(modulesloaddir)) mkdir_p.format(modulesloaddir))
if install_sysconfdir if install_sysconfdir
meson.add_install_script('sh', '-c', meson.add_install_script('sh', '-c',
mkdir_p.format(sysconfdir / 'modules-load.d')) mkdir_p.format(join_paths(sysconfdir, 'modules-load.d')))
endif endif
endif endif
@ -3387,8 +3387,8 @@ custom_target(
output : 'systemd-runtest.env', output : 'systemd-runtest.env',
command : [sh, '-c', command : [sh, '-c',
'{ echo SYSTEMD_TEST_DATA=@0@; echo SYSTEMD_CATALOG_DIR=@1@; } >@OUTPUT@'.format( '{ echo SYSTEMD_TEST_DATA=@0@; echo SYSTEMD_CATALOG_DIR=@1@; } >@OUTPUT@'.format(
project_source_root / 'test', join_paths(project_source_root, 'test'),
project_build_root / 'catalog')], join_paths(project_build_root, 'catalog'))],
build_by_default : true) build_by_default : true)
test_cflags = ['-DTEST_CODE=1'] test_cflags = ['-DTEST_CODE=1']
@ -3430,7 +3430,7 @@ foreach tuple : tests
build_by_default : want_tests != 'false', build_by_default : want_tests != 'false',
install_rpath : rootlibexecdir, install_rpath : rootlibexecdir,
install : install_tests, install : install_tests,
install_dir : testsdir / type) install_dir : join_paths(testsdir, type))
if type == 'manual' if type == 'manual'
message('@0@ is a manual test'.format(name)) message('@0@ is a manual test'.format(name))
@ -3546,13 +3546,16 @@ foreach tuple : fuzzers
if b == name if b == name
test('@0@_@1@'.format(b, c), test('@0@_@1@'.format(b, c),
exe, exe,
args : [project_source_root / p]) args : [join_paths(project_source_root, p)])
endif endif
endforeach endforeach
endif endif
endforeach endforeach
alias_target('fuzzers', fuzzer_exes) run_target(
'fuzzers',
depends : fuzzer_exes,
command : ['true'])
############################################################ ############################################################
@ -3605,8 +3608,8 @@ if get_option('mode') == 'developer' and want_tests != 'false' and jekyll.found(
test('github-pages', test('github-pages',
jekyll, jekyll,
args : ['build', args : ['build',
'--source', project_source_root / 'docs', '--source', join_paths(project_source_root, 'docs'),
'--destination', project_build_root / '_site']) '--destination', join_paths(project_build_root, '_site')])
endif endif
############################################################ ############################################################
@ -3656,7 +3659,7 @@ foreach tuple : sanitizers
output : name, output : name,
depends : build, depends : build,
command : [ln, '-fs', command : [ln, '-fs',
build.full_path() / b, join_paths(build.full_path(), b),
'@OUTPUT@'], '@OUTPUT@'],
build_by_default : true) build_by_default : true)
else else
@ -3671,7 +3674,7 @@ foreach tuple : sanitizers
env : ['UBSAN_OPTIONS=print_stacktrace=1:print_summary=1:halt_on_error=1'], env : ['UBSAN_OPTIONS=print_stacktrace=1:print_summary=1:halt_on_error=1'],
timeout : 60, timeout : 60,
args : [exe.full_path(), args : [exe.full_path(),
project_source_root / p]) join_paths(project_source_root, p)])
endif endif
endforeach endforeach
endif endif
@ -3731,67 +3734,101 @@ run_target(
depends : [man, libsystemd, libudev], depends : [man, libsystemd, libudev],
command : [check_api_docs_sh, libsystemd.full_path(), libudev.full_path()]) command : [check_api_docs_sh, libsystemd.full_path(), libudev.full_path()])
alias_target('update-dbus-docs', update_dbus_docs) ############################################################
alias_target('update-man-rules', update_man_rules)
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)
############################################################ ############################################################
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', alt_time_epoch = run_command('date', '-Is', '-u', '-d',
'@@0@'.format(time_epoch)).stdout().strip() '@@0@'.format(time_epoch)).stdout().strip()
status += [
summary({ 'time epoch: @0@ (@1@)'.format(time_epoch, alt_time_epoch)]
'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: # TODO:
# CFLAGS: ${OUR_CFLAGS} ${CFLAGS} # CFLAGS: ${OUR_CFLAGS} ${CFLAGS}
@ -3799,17 +3836,15 @@ summary({
# LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS} # LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
if conf.get('ENABLE_EFI') == 1 if conf.get('ENABLE_EFI') == 1
summary({'efi arch' : efi_arch}, status += 'efi arch: @0@'.format(efi_arch)
section : 'Extensible Firmware Interface')
if have_gnu_efi if have_gnu_efi
summary({ status += [
'EFI machine type' : EFI_MACHINE_TYPE_NAME, 'EFI machine type: @0@'.format(EFI_MACHINE_TYPE_NAME),
'EFI CC' : '@0@'.format(' '.join(efi_cc)), 'EFI CC @0@'.format(' '.join(efi_cc)),
'EFI lds' : efi_lds, 'EFI lds: @0@'.format(efi_lds),
'EFI crt0' : efi_crt0, 'EFI crt0: @0@'.format(efi_crt0),
'EFI include directory' : efi_incdir}, 'EFI include directory: @0@'.format(efi_incdir)]
section : 'Extensible Firmware Interface')
endif endif
endif endif
@ -3964,10 +3999,13 @@ else
missing += 'DNS-over-TLS' missing += 'DNS-over-TLS'
endif endif
summary({ status += [
'enabled' : ', '.join(found), '',
'disabled' : ', '.join(missing)}, 'enabled features: @0@'.format(', '.join(found)),
section : 'Features') '',
'disabled features: @0@'.format(', '.join(missing)),
'']
message('\n '.join(status))
if rootprefixdir != rootprefix_default if rootprefixdir != rootprefix_default
warning('\n' + warning('\n' +

View File

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

View File

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

View File

@ -2,7 +2,7 @@
zshcompletiondir = get_option('zshcompletiondir') zshcompletiondir = get_option('zshcompletiondir')
if zshcompletiondir == '' if zshcompletiondir == ''
zshcompletiondir = datadir / 'zsh/site-functions' zshcompletiondir = join_paths(datadir, 'zsh/site-functions')
endif endif
custom_target( 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') efi_libdir = get_option('efi-libdir')
if efi_libdir == '' if efi_libdir == ''
# New location first introduced with gnu-efi 3.0.11 # New location first introduced with gnu-efi 3.0.11
efi_libdir = '/usr/lib/gnuefi' / EFI_MACHINE_TYPE_NAME efi_libdir = join_paths('/usr/lib/gnuefi', EFI_MACHINE_TYPE_NAME)
cmd = run_command(test, '-e', efi_libdir) cmd = run_command(test, '-e', efi_libdir)
if cmd.returncode() != 0 if cmd.returncode() != 0
# Fall back to the old approach # Fall back to the old approach
cmd = run_command(efi_cc + ['-print-multi-os-directory']) cmd = run_command(efi_cc + ['-print-multi-os-directory'])
if cmd.returncode() == 0 if cmd.returncode() == 0
path = '/usr/lib' / cmd.stdout().strip() path = join_paths('/usr/lib', cmd.stdout().strip())
cmd = run_command(env, 'realpath', '-e', path) cmd = run_command(env, 'realpath', '-e', path)
if cmd.returncode() == 0 if cmd.returncode() == 0
efi_libdir = cmd.stdout().strip() efi_libdir = cmd.stdout().strip()
@ -148,13 +148,13 @@ if have_gnu_efi
efi_location_map = [ efi_location_map = [
# New locations first introduced with gnu-efi 3.0.11 # New locations first introduced with gnu-efi 3.0.11
[efi_libdir / 'efi.lds', [join_paths(efi_libdir, 'efi.lds'),
efi_libdir / 'crt0.o'], join_paths(efi_libdir, 'crt0.o')],
# Older locations... # Older locations...
[efi_libdir / 'gnuefi' / 'elf_@0@_efi.lds'.format(gnu_efi_path_arch), [join_paths(efi_libdir, 'gnuefi', 'elf_@0@_efi.lds'.format(gnu_efi_path_arch)),
efi_libdir / 'gnuefi' / 'crt0-efi-@0@.o'.format(gnu_efi_path_arch)], join_paths(efi_libdir, 'gnuefi', 'crt0-efi-@0@.o'.format(gnu_efi_path_arch))],
[efi_libdir / 'elf_@0@_efi.lds'.format(gnu_efi_path_arch), [join_paths(efi_libdir, 'elf_@0@_efi.lds'.format(gnu_efi_path_arch)),
efi_libdir / 'crt0-efi-@0@.o'.format(gnu_efi_path_arch)]] join_paths(efi_libdir, 'crt0-efi-@0@.o'.format(gnu_efi_path_arch))]]
efi_lds = '' efi_lds = ''
foreach location : efi_location_map foreach location : efi_location_map
if efi_lds == '' if efi_lds == ''
@ -191,7 +191,7 @@ if have_gnu_efi
'-nostdlib', '-nostdlib',
'-std=gnu99', '-std=gnu99',
'-isystem', efi_incdir, '-isystem', efi_incdir,
'-isystem', efi_incdir / gnu_efi_path_arch, '-isystem', join_paths(efi_incdir, gnu_efi_path_arch),
'-I', fundamental_path, '-I', fundamental_path,
'-DSD_BOOT', '-DSD_BOOT',
'-include', efi_config_h, '-include', efi_config_h,

View File

@ -578,7 +578,8 @@ static int manager_setup_signals(Manager *m) {
SIGRTMIN+22, /* systemd: set log level to LOG_DEBUG */ SIGRTMIN+22, /* systemd: set log level to LOG_DEBUG */
SIGRTMIN+23, /* systemd: set log level to LOG_INFO */ SIGRTMIN+23, /* systemd: set log level to LOG_INFO */
SIGRTMIN+24, /* systemd: Immediate exit (--user only) */ SIGRTMIN+24, /* systemd: Immediate exit (--user only) */
SIGRTMIN+25, /* systemd: reexecute manager */
/* .. one free signal here ... */
/* Apparently Linux on hppa had fewer RT signals until v3.18, /* Apparently Linux on hppa had fewer RT signals until v3.18,
* SIGRTMAX was SIGRTMIN+25, and then SIGRTMIN was lowered, * SIGRTMAX was SIGRTMIN+25, and then SIGRTMIN was lowered,
@ -2845,10 +2846,6 @@ static int manager_dispatch_signal_fd(sd_event_source *source, int fd, uint32_t
/* This is a nop on init */ /* This is a nop on init */
break; break;
case 25:
m->objective = MANAGER_REEXECUTE;
break;
case 26: case 26:
case 29: /* compatibility: used to be mapped to LOG_TARGET_SYSLOG_OR_KMSG */ case 29: /* compatibility: used to be mapped to LOG_TARGET_SYSLOG_OR_KMSG */
manager_restore_original_log_target(m); 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)) meson.add_install_script('sh', '-c', mkdir_p.format(usergeneratordir))
if install_sysconfdir if install_sysconfdir
meson.add_install_script('sh', '-c', mkdir_p.format(pkgsysconfdir / 'system')) meson.add_install_script('sh', '-c', mkdir_p.format(join_paths(pkgsysconfdir, 'system')))
meson.add_install_script('sh', '-c', mkdir_p.format(pkgsysconfdir / 'user')) meson.add_install_script('sh', '-c', mkdir_p.format(join_paths(pkgsysconfdir, 'user')))
meson.add_install_script('sh', '-c', mkdir_p.format(sysconfdir / 'xdg/systemd')) meson.add_install_script('sh', '-c', mkdir_p.format(join_paths(sysconfdir, 'xdg/systemd')))
endif endif
############################################################ ############################################################

View File

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

View File

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

View File

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

View File

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

View File

@ -171,7 +171,7 @@ libsystemd_static = static_library(
c_args : libsystemd_c_args) c_args : libsystemd_c_args)
libsystemd_sym = files('libsystemd.sym') libsystemd_sym = files('libsystemd.sym')
libsystemd_sym_path = meson.current_source_dir() / 'libsystemd.sym' libsystemd_sym_path = join_paths(meson.current_source_dir(), 'libsystemd.sym')
static_libsystemd = get_option('static-libsystemd') static_libsystemd = get_option('static-libsystemd')
static_libsystemd_pic = static_libsystemd == 'true' or static_libsystemd == 'pic' 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_includes = [includes, include_directories('.')]
libudev_sym = files('libudev.sym') libudev_sym = files('libudev.sym')
libudev_sym_path = meson.current_source_dir() / 'libudev.sym' libudev_sym_path = join_paths(meson.current_source_dir(), 'libudev.sym')
install_headers('libudev.h') install_headers('libudev.h')
libudev_h_path = meson.current_source_dir() / 'libudev.h' libudev_h_path = join_paths(meson.current_source_dir(), 'libudev.h')
libudev_basic = static_library( libudev_basic = static_library(
'udev-basic', 'udev-basic',

View File

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

View File

@ -279,28 +279,12 @@ static int button_dispatch(sd_event_source *s, int fd, uint32_t revents, void *u
} }
} else if (ev.type == EV_KEY && ev.value == 0) { } else if (ev.type == EV_KEY && ev.value == 0) {
if (ev.code == KEY_RESTART) {
switch (ev.code) { if (b->manager->reboot_key_long_press_event_source) {
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 /* Long press event timer is still pending and key release
event happened. This means that key press duration was event happened. This means that key press duration was
insufficient to trigger a long press event 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_struct(LOG_INFO,
LOG_MESSAGE("Reboot key pressed short."), LOG_MESSAGE("Reboot key pressed short."),
"MESSAGE_ID=" SD_MESSAGE_REBOOT_KEY_STR); "MESSAGE_ID=" SD_MESSAGE_REBOOT_KEY_STR);
@ -309,30 +293,6 @@ 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); 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) { } 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_data('org.freedesktop.portable1.policy',
install_dir : polkitpolicydir) install_dir : polkitpolicydir)
install_data('profile/default/service.conf', install_dir : profiledir / 'default') install_data('profile/default/service.conf', install_dir : join_paths(profiledir, 'default'))
install_data('profile/nonetwork/service.conf', install_dir : profiledir / 'nonetwork') install_data('profile/nonetwork/service.conf', install_dir : join_paths(profiledir, 'nonetwork'))
install_data('profile/strict/service.conf', install_dir : profiledir / 'strict') install_data('profile/strict/service.conf', install_dir : join_paths(profiledir, 'strict'))
install_data('profile/trusted/service.conf', install_dir : profiledir / 'trusted') install_data('profile/trusted/service.conf', install_dir : join_paths(profiledir, 'trusted'))
endif endif

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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