mirror of
https://github.com/systemd/systemd
synced 2025-10-04 11:14:45 +02:00
Compare commits
15 Commits
db1e099a7a
...
467ff7929f
Author | SHA1 | Date | |
---|---|---|---|
![]() |
467ff7929f | ||
![]() |
ce6bdb7969 | ||
![]() |
98b9f1c519 | ||
![]() |
bbc10f31ae | ||
![]() |
b68b9f8f7f | ||
![]() |
509f701ab3 | ||
![]() |
7a800a6656 | ||
![]() |
ec7e81ae3d | ||
![]() |
a83de23353 | ||
![]() |
57684a2554 | ||
![]() |
d0cd25fff6 | ||
![]() |
065941a92c | ||
![]() |
5ad6fe9850 | ||
![]() |
f48068a379 | ||
![]() |
454edd9e7a |
@ -353,12 +353,13 @@ All tools:
|
|||||||
default is not appropriate for a given system. Defaults to `5`, accepts
|
default is not appropriate for a given system. Defaults to `5`, accepts
|
||||||
positive integers.
|
positive integers.
|
||||||
|
|
||||||
* `$SYSTEMD_DEFAULT_MOUNT_RATE_LIMIT_INTERVAL_SEC` — can be set to override the mount
|
* `$SYSTEMD_DEFAULT_MOUNT_RATE_LIMIT_INTERVAL_SEC` — can be set to override the
|
||||||
units interval rate limit for parsing `/proc/self/mountinfo`. Similar to
|
mount units interval rate limit for parsing `/proc/self/mountinfo`. Similar
|
||||||
`$SYSTEMD_DEFAULT_MOUNT_RATE_LIMIT_BURST`, the interval limit maybe adjusted when
|
to `$SYSTEMD_DEFAULT_MOUNT_RATE_LIMIT_BURST`, the interval limit maybe
|
||||||
the default is not appropriate for a given system. The default value is 1 and the
|
adjusted when the default is not appropriate for a given system. The default
|
||||||
default application time unit is second, and the time unit can beoverriden as usual
|
value is 1, the default application time unit is second, and the time unit
|
||||||
by specifying it explicitly, see the systemd.time(7) man page.
|
can be overridden as usual by specifying it explicitly, see the
|
||||||
|
systemd.time(7) man page.
|
||||||
|
|
||||||
`systemd-remount-fs`:
|
`systemd-remount-fs`:
|
||||||
|
|
||||||
|
@ -21,47 +21,50 @@
|
|||||||
</refnamediv>
|
</refnamediv>
|
||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<para><filename><replaceable>ESP</replaceable>/loader/loader.conf</filename>,
|
<para><filename><replaceable>ESP</replaceable>/loader/loader.conf</filename></para>
|
||||||
<filename><replaceable>ESP</replaceable>/loader/entries/*.conf</filename>
|
|
||||||
<filename><replaceable>XBOOTLDR</replaceable>/loader/entries/*.conf</filename>
|
|
||||||
</para>
|
|
||||||
</refsynopsisdiv>
|
</refsynopsisdiv>
|
||||||
|
|
||||||
<refsect1>
|
<refsect1>
|
||||||
<title>Description</title>
|
<title>Description</title>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
<citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry> will
|
<citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry> reads
|
||||||
read <filename><replaceable>ESP</replaceable>/loader/loader.conf</filename>, and any files with the
|
<filename><replaceable>ESP</replaceable>/loader/loader.conf</filename>. This file configures whether the
|
||||||
<literal>.conf</literal> extension under
|
menu is shown and for how long, the font, audible beep, types of menu entries to show, the default
|
||||||
<filename><replaceable>ESP</replaceable>/loader/entries/</filename> on the EFI system partition (ESP),
|
choice, and some aspects of Secure Boot enrollment and firmware handling. See the list of available
|
||||||
and <filename><replaceable>XBOOTLDR</replaceable>/loader/entries/</filename> on the extended boot loader
|
options below.</para>
|
||||||
partition (XBOOTLDR) as defined by <ulink url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader
|
|
||||||
Specification</ulink>.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>Each of these configuration files must consist of series of newline (i.e. ASCII code 10) separated
|
<para>The file uses UTF-8 encoding and consists of series of lines separated by "line feed" (i.e. ASCII
|
||||||
lines, each consisting of an option name, followed by whitespace, and the option
|
code 10). Lines that are empty or start with the comment sign (<literal>#</literal>) are ignored. Other
|
||||||
value. <literal>#</literal> may be used to start a comment line. Empty and comment lines are ignored. The
|
lines consist of an option name, followed by whitespace, and the option value.
|
||||||
files use UTF-8 encoding.</para>
|
</para>
|
||||||
|
|
||||||
<para>Boolean arguments may be written as
|
<para>Boolean arguments may be written as
|
||||||
<literal>yes</literal>/<literal>y</literal>/<literal>true</literal>/<literal>t</literal>/<literal>on</literal>/<literal>1</literal> or
|
<literal>yes</literal>/<literal>y</literal>/<literal>true</literal>/<literal>t</literal>/<literal>on</literal>/<literal>1</literal>
|
||||||
|
or
|
||||||
<literal>no</literal>/<literal>n</literal>/<literal>false</literal>/<literal>f</literal>/<literal>off</literal>/<literal>0</literal>.
|
<literal>no</literal>/<literal>n</literal>/<literal>false</literal>/<literal>f</literal>/<literal>off</literal>/<literal>0</literal>.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
<para>Note: <command>systemd-boot</command> will also read boot loader entry files,
|
||||||
|
type #1 (<filename><replaceable>ESP</replaceable>/loader/entries/*.conf</filename> and
|
||||||
|
<filename><replaceable>XBOOTLDR</replaceable>/loader/entries/*.conf</filename>)
|
||||||
|
and type #2 (<filename><replaceable>ESP</replaceable>/EFI/Linux/*.uki</filename>
|
||||||
|
and <filename><replaceable>XBOOTLDR</replaceable>/EFI/Linux/*.uki</filename>).
|
||||||
|
Those files are described by the
|
||||||
|
<ulink url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader
|
||||||
|
Specification</ulink>.</para>
|
||||||
|
|
||||||
|
<para>Note: the behaviour of <command>systemd-boot</command> is also influenced by EFI variables. Some of
|
||||||
|
the settings specified in this file can be overridden by those, for example the default boot menu entry
|
||||||
|
or the menu timeouts. See
|
||||||
|
<citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
|
||||||
|
details.</para>
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
||||||
<refsect1>
|
<refsect1>
|
||||||
<title>Options</title>
|
<title>Options</title>
|
||||||
|
|
||||||
<para>The configuration options supported by
|
<para>The following configuration are supported in <filename>loader.conf</filename>:</para>
|
||||||
<filename><replaceable>ESP</replaceable>/loader/entries/*.conf</filename> and
|
|
||||||
<filename><replaceable>XBOOTLDR</replaceable>/loader/entries/*.conf</filename> files are defined as part
|
|
||||||
of the <ulink url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader
|
|
||||||
Specification</ulink>.</para>
|
|
||||||
|
|
||||||
<para>The following configuration are supported by the <filename>loader.conf</filename> configuration
|
|
||||||
file:</para>
|
|
||||||
|
|
||||||
<variablelist>
|
<variablelist>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
@ -254,8 +257,9 @@
|
|||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>beep</term>
|
<term>beep</term>
|
||||||
|
|
||||||
<listitem><para>Takes a boolean argument. If timeout enabled beep every second, otherwise beep n times when n-th entry in boot menu is selected (default disabled).
|
<listitem><para>Takes a boolean argument. If timeout enabled beep every second, otherwise beep n
|
||||||
Currently, only x86 is supported, where it uses the PC speaker.</para>
|
times when n-th entry in boot menu is selected (default disabled). Currently, only x86 is supported,
|
||||||
|
where it uses the PC speaker.</para>
|
||||||
|
|
||||||
<xi:include href="version-info.xml" xpointer="v251"/></listitem>
|
<xi:include href="version-info.xml" xpointer="v251"/></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
@ -402,8 +406,8 @@ sbvarsign --attr "${attr}" --key KEK.key --cert KEK.pem --output db.auth db db.e
|
|||||||
<listitem><para>Caveat: This feature is experimental, and is likely to be changed (or removed in its
|
<listitem><para>Caveat: This feature is experimental, and is likely to be changed (or removed in its
|
||||||
current form) in a future version of systemd.</para>
|
current form) in a future version of systemd.</para>
|
||||||
|
|
||||||
<para>Work around BitLocker requiring a recovery key when the boot loader was
|
<para>Work around BitLocker requiring a recovery key when the boot loader was updated (disabled by
|
||||||
updated (disabled by default).</para>
|
default).</para>
|
||||||
|
|
||||||
<para>Try to detect BitLocker encrypted drives along with an active TPM. If both are found and
|
<para>Try to detect BitLocker encrypted drives along with an active TPM. If both are found and
|
||||||
Windows Boot Manager is selected in the boot menu, set the <literal>BootNext</literal> EFI variable
|
Windows Boot Manager is selected in the boot menu, set the <literal>BootNext</literal> EFI variable
|
||||||
@ -442,8 +446,11 @@ sbvarsign --attr "${attr}" --key KEK.key --cert KEK.pem --output db.auth db db.e
|
|||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><option>auto</option></term>
|
<term><option>auto</option></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Perform the reboot if and only if boot counting is enabled for this entry and the tries left counter wasn't already at 0.</para>
|
<para>Perform the reboot if and only if boot counting is enabled for this entry and the tries
|
||||||
<para>This is the default, as it is typically a safe option, that ensures a clean measurement log on each boot attempt, but also does not risk an unbounded reboot loop.</para>
|
left counter wasn't already at 0.</para>
|
||||||
|
|
||||||
|
<para>This is the default, as it is typically a safe option, that ensures a clean measurement log
|
||||||
|
on each boot attempt, but also does not risk an unbounded reboot loop.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
@ -149,6 +149,8 @@
|
|||||||
<term><keycap>d</keycap></term>
|
<term><keycap>d</keycap></term>
|
||||||
<listitem><para>Make selected entry the default</para>
|
<listitem><para>Make selected entry the default</para>
|
||||||
|
|
||||||
|
<para>An EFI variable is set to allow this setting to persist.</para>
|
||||||
|
|
||||||
<xi:include href="version-info.xml" xpointer="v239"/></listitem>
|
<xi:include href="version-info.xml" xpointer="v239"/></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
@ -164,6 +166,8 @@
|
|||||||
<term><keycap>t</keycap></term>
|
<term><keycap>t</keycap></term>
|
||||||
<listitem><para>Increase the timeout before default entry is booted</para>
|
<listitem><para>Increase the timeout before default entry is booted</para>
|
||||||
|
|
||||||
|
<para>An EFI variable is set to allow this setting to persist.</para>
|
||||||
|
|
||||||
<xi:include href="version-info.xml" xpointer="v239"/></listitem>
|
<xi:include href="version-info.xml" xpointer="v239"/></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
@ -172,6 +176,8 @@
|
|||||||
<term><keycap>T</keycap></term>
|
<term><keycap>T</keycap></term>
|
||||||
<listitem><para>Decrease the timeout</para>
|
<listitem><para>Decrease the timeout</para>
|
||||||
|
|
||||||
|
<para>An EFI variable is set to allow this setting to persist.</para>
|
||||||
|
|
||||||
<xi:include href="version-info.xml" xpointer="v239"/></listitem>
|
<xi:include href="version-info.xml" xpointer="v239"/></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
@ -179,6 +185,8 @@
|
|||||||
<term><keycap>r</keycap></term>
|
<term><keycap>r</keycap></term>
|
||||||
<listitem><para>Change screen resolution, skipping any unsupported modes.</para>
|
<listitem><para>Change screen resolution, skipping any unsupported modes.</para>
|
||||||
|
|
||||||
|
<para>An EFI variable is set to allow this setting to persist.</para>
|
||||||
|
|
||||||
<xi:include href="version-info.xml" xpointer="v250"/></listitem>
|
<xi:include href="version-info.xml" xpointer="v250"/></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
@ -186,6 +194,8 @@
|
|||||||
<term><keycap>R</keycap></term>
|
<term><keycap>R</keycap></term>
|
||||||
<listitem><para>Reset screen resolution to firmware or configuration file default.</para>
|
<listitem><para>Reset screen resolution to firmware or configuration file default.</para>
|
||||||
|
|
||||||
|
<para>An EFI variable is set to allow this setting to persist.</para>
|
||||||
|
|
||||||
<xi:include href="version-info.xml" xpointer="v250"/></listitem>
|
<xi:include href="version-info.xml" xpointer="v250"/></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
@ -280,15 +290,15 @@
|
|||||||
</variablelist>
|
</variablelist>
|
||||||
|
|
||||||
<para>The boot menu is shown when a non-zero menu timeout has been configured. If the menu timeout has
|
<para>The boot menu is shown when a non-zero menu timeout has been configured. If the menu timeout has
|
||||||
been set to zero, it is sufficient to press any key — before the boot loader initializes — to bring up
|
been set to zero, hold down a key (<keycap>space</keycap> is recommended) before the boot loader
|
||||||
the boot menu, except for the keys listed immediately above as they directly boot into the selected boot
|
initializes to bring up the boot menu. Note that depending on the firmware implementation the time window
|
||||||
menu item. Note that depending on the firmware implementation the time window where key presses are
|
where key presses are accepted before the boot loader initializes might be short. If the window is
|
||||||
accepted before the boot loader initializes might be short. If the window is missed, reboot and try
|
missed, reboot and try again, possibly repeatedly pressing a suitable key; on most systems it should be
|
||||||
again, possibly pressing a suitable key (e.g. the space bar) continuously; on most systems it should be
|
possible to hit the time window after a few attempts. Keys other than the space bar may be used, except
|
||||||
possible to hit the time window after a few attempts. To avoid this problem, consider setting a non-zero
|
for the keys listed above. If showing the menu on demand doesn't work well, consider setting a non-zero
|
||||||
timeout, thus showing the boot menu unconditionally. Some desktop environments might offer an option to
|
timeout to show the boot menu unconditionally. Some desktop environments might offer an option to boot
|
||||||
directly boot into the boot menu, to avoid the problem altogether. Alternatively, use the command line
|
directly into the boot menu, which also avoids the problem altogether. Alternatively, use the command
|
||||||
<command>systemctl reboot --boot-loader-menu=0</command> from the shell.</para>
|
line <command>systemctl reboot --boot-loader-menu=</command> with a non-zero value from the shell.</para>
|
||||||
|
|
||||||
<para>In the editor, most keys simply insert themselves, but the following keys
|
<para>In the editor, most keys simply insert themselves, but the following keys
|
||||||
may be used to perform additional actions:</para>
|
may be used to perform additional actions:</para>
|
||||||
@ -389,16 +399,16 @@
|
|||||||
<refsect1>
|
<refsect1>
|
||||||
<title>EFI Variables</title>
|
<title>EFI Variables</title>
|
||||||
|
|
||||||
<para>The following EFI variables are defined, set and read by <command>systemd-boot</command>, under the
|
<para>The following EFI variables are defined, and may be set or read by <command>systemd-boot</command>
|
||||||
vendor UUID <literal>4a67b082-0a4c-41cf-b6c7-440b29bb8c4f</literal>, for communication between the boot
|
for communication between the boot loader and the OS. The vendor UUID
|
||||||
loader and the OS:</para>
|
<literal>4a67b082-0a4c-41cf-b6c7-440b29bb8c4f</literal> is used in all cases.</para>
|
||||||
|
|
||||||
<variablelist class='efi-variables'>
|
<variablelist class='efi-variables'>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>LoaderBootCountPath</varname></term>
|
<term><varname>LoaderBootCountPath</varname></term>
|
||||||
<listitem><para>If boot counting is enabled, contains the path to the file in whose name the boot counters are
|
<listitem><para>If boot counting is enabled, contains the path to the file in whose name the boot
|
||||||
encoded. Set by the boot
|
counters are encoded. Set by the boot loader.
|
||||||
loader. <citerefentry><refentrytitle>systemd-bless-boot.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
|
<citerefentry><refentrytitle>systemd-bless-boot.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
|
||||||
uses this information to mark a boot as successful as determined by the successful activation of the
|
uses this information to mark a boot as successful as determined by the successful activation of the
|
||||||
<filename>boot-complete.target</filename> target unit.</para>
|
<filename>boot-complete.target</filename> target unit.</para>
|
||||||
|
|
||||||
@ -465,13 +475,13 @@
|
|||||||
<term><varname>LoaderEntrySysFail</varname></term>
|
<term><varname>LoaderEntrySysFail</varname></term>
|
||||||
<term><varname>LoaderEntryOneShot</varname></term>
|
<term><varname>LoaderEntryOneShot</varname></term>
|
||||||
|
|
||||||
<listitem><para>The identifier of the default boot loader entry. Set primarily by the OS and read by the boot
|
<listitem><para>The identifier of the default boot loader entry. Can be set in the OS and the boot
|
||||||
loader. <varname>LoaderEntryOneShot</varname> sets the default entry for the next boot only, while
|
loader. <varname>LoaderEntryOneShot</varname> sets the default entry for the next boot only, while
|
||||||
<varname>LoaderEntryDefault</varname> sets it persistently for all future
|
<varname>LoaderEntryDefault</varname> sets it persistently for all future boots.
|
||||||
boots. <citerefentry><refentrytitle>bootctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
|
<citerefentry><refentrytitle>bootctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
|
||||||
<option>set-default</option> and <option>set-oneshot</option> commands make use of these variables. The boot
|
<option>set-default</option> and <option>set-oneshot</option> commands make use of these variables.
|
||||||
loader modifies <varname>LoaderEntryDefault</varname> on request, when the <keycap>d</keycap> key is used, see
|
The boot loader modifies <varname>LoaderEntryDefault</varname> on request, when the
|
||||||
above.</para>
|
<keycap>d</keycap> key is used, see above.</para>
|
||||||
|
|
||||||
<xi:include href="version-info.xml" xpointer="v240"/></listitem>
|
<xi:include href="version-info.xml" xpointer="v240"/></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
@ -83,6 +83,17 @@ static int status_entries(
|
|||||||
printf(", %s$BOOT%s", ansi_green(), ansi_normal());
|
printf(", %s$BOOT%s", ansi_green(), ansi_normal());
|
||||||
printf(")");
|
printf(")");
|
||||||
|
|
||||||
|
if (config->loader_conf_status != 0) {
|
||||||
|
assert(esp_path);
|
||||||
|
printf("\n config: %s%s/%s%s",
|
||||||
|
ansi_grey(), esp_path, ansi_normal(), "/loader/loader.conf");
|
||||||
|
if (config->loader_conf_status < 0)
|
||||||
|
printf(": %s%s%s",
|
||||||
|
config->loader_conf_status == -ENOENT ? ansi_grey() : ansi_highlight_yellow(),
|
||||||
|
STRERROR(config->loader_conf_status),
|
||||||
|
ansi_normal());
|
||||||
|
}
|
||||||
|
|
||||||
if (xbootldr_path) {
|
if (xbootldr_path) {
|
||||||
printf("\n XBOOTLDR: %s (", xbootldr_path);
|
printf("\n XBOOTLDR: %s (", xbootldr_path);
|
||||||
if (!sd_id128_is_null(xbootldr_partition_uuid))
|
if (!sd_id128_is_null(xbootldr_partition_uuid))
|
||||||
|
@ -156,12 +156,11 @@ static int access_init(sd_bus_error *error) {
|
|||||||
if (avc_open(NULL, 0) != 0) {
|
if (avc_open(NULL, 0) != 0) {
|
||||||
r = -errno; /* Save original errno for later */
|
r = -errno; /* Save original errno for later */
|
||||||
|
|
||||||
bool enforce = security_getenforce() != 0;
|
r = log_selinux_enforcing_errno(r, "Failed to open the SELinux AVC: %m");
|
||||||
log_full_errno(enforce ? LOG_ERR : LOG_WARNING, r, "Failed to open the SELinux AVC: %m");
|
if (r == 0)
|
||||||
|
/* log_selinux_enforcing_errno() can return 0 if the enforcement isn't on.
|
||||||
/* If enforcement isn't on, then let's suppress this error, and just don't do any AVC checks.
|
* In this case don't do any AVC checks.
|
||||||
* The warning we printed is hence all the admin will see. */
|
* The warning we printed is hence all the admin will see. */
|
||||||
if (!enforce)
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Return an access denied error based on the original errno, if we couldn't load the AVC but
|
/* Return an access denied error based on the original errno, if we couldn't load the AVC but
|
||||||
@ -347,14 +346,15 @@ int mac_selinux_access_check_varlink_internal(
|
|||||||
|
|
||||||
r = access_init(/* error= */ NULL);
|
r = access_init(/* error= */ NULL);
|
||||||
if (r <= 0)
|
if (r <= 0)
|
||||||
return log_debug_errno(r, "Failed to init SELinux: %m");
|
/* access_init() does log_selinux_enforcing_errno() */
|
||||||
|
return r;
|
||||||
|
|
||||||
/* delay call until we checked in `access_init()` if SELinux is actually enabled */
|
/* delay call until we checked in `access_init()` if SELinux is actually enabled */
|
||||||
bool enforce = mac_selinux_enforcing();
|
bool enforce = mac_selinux_enforcing();
|
||||||
|
|
||||||
int fd = sd_varlink_get_fd(link);
|
int fd = sd_varlink_get_fd(link);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
return log_debug_errno(fd, "Failed to get varlink peer fd: %m");
|
return log_selinux_enforcing_errno(fd, "Failed to get varlink peer fd: %m");
|
||||||
|
|
||||||
/* We should call mac_selinux_get_peer_label() here similarly to get_our_contexts().
|
/* We should call mac_selinux_get_peer_label() here similarly to get_our_contexts().
|
||||||
* See the explanation there why not. */
|
* See the explanation there why not. */
|
||||||
|
@ -16,4 +16,4 @@ int mac_selinux_access_check_varlink_internal(sd_varlink *link, const Unit *unit
|
|||||||
mac_selinux_access_check_varlink_internal((link), NULL, (permission), __func__)
|
mac_selinux_access_check_varlink_internal((link), NULL, (permission), __func__)
|
||||||
|
|
||||||
#define mac_selinux_unit_access_check_varlink(unit, link, permission) \
|
#define mac_selinux_unit_access_check_varlink(unit, link, permission) \
|
||||||
mac_selinux_access_check_bus_internal((link), (unit), (permission), __func__)
|
mac_selinux_access_check_varlink_internal((link), (unit), (permission), __func__)
|
||||||
|
@ -533,6 +533,7 @@ static int boot_loader_read_conf_path(BootConfig *config, const char *root, cons
|
|||||||
assert(path);
|
assert(path);
|
||||||
|
|
||||||
r = chase_and_fopen_unlocked(path, root, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS, "re", &full, &f);
|
r = chase_and_fopen_unlocked(path, root, CHASE_PREFIX_ROOT|CHASE_PROHIBIT_SYMLINKS, "re", &full, &f);
|
||||||
|
config->loader_conf_status = r < 0 ? r : true;
|
||||||
if (r == -ENOENT)
|
if (r == -ENOENT)
|
||||||
return 0;
|
return 0;
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
|
@ -67,6 +67,8 @@ typedef struct BootEntry {
|
|||||||
}
|
}
|
||||||
|
|
||||||
typedef struct BootConfig {
|
typedef struct BootConfig {
|
||||||
|
int loader_conf_status; /* 0 → before loading, 1 → loaded, negative → error. */
|
||||||
|
|
||||||
char *default_pattern;
|
char *default_pattern;
|
||||||
|
|
||||||
char *entry_oneshot;
|
char *entry_oneshot;
|
||||||
|
@ -17,25 +17,16 @@ systemctl daemon-reexec
|
|||||||
|
|
||||||
systemctl start --no-block hello-after-sleep.target
|
systemctl start --no-block hello-after-sleep.target
|
||||||
|
|
||||||
systemctl list-jobs >/root/list-jobs.txt
|
timeout 10 bash -c "until systemctl list-jobs | tee /root/list-jobs.txt | grep 'sleep\.service.*running'; do sleep .1; done"
|
||||||
until grep 'sleep\.service.*running' /root/list-jobs.txt; do
|
|
||||||
systemctl list-jobs >/root/list-jobs.txt
|
|
||||||
done
|
|
||||||
|
|
||||||
grep 'hello\.service.*waiting' /root/list-jobs.txt
|
grep 'hello\.service.*waiting' /root/list-jobs.txt
|
||||||
|
|
||||||
# This is supposed to finish quickly, not wait for sleep to finish.
|
# This is supposed to finish quickly, not wait for sleep to finish.
|
||||||
START_SEC=$(date -u '+%s')
|
timeout 10 systemctl start --job-mode=ignore-dependencies hello
|
||||||
systemctl start --job-mode=ignore-dependencies hello
|
|
||||||
END_SEC=$(date -u '+%s')
|
|
||||||
ELAPSED=$((END_SEC-START_SEC))
|
|
||||||
|
|
||||||
test "$ELAPSED" -lt 3
|
|
||||||
|
|
||||||
# sleep should still be running, hello not.
|
# sleep should still be running, hello not.
|
||||||
systemctl list-jobs >/root/list-jobs.txt
|
systemctl list-jobs >/root/list-jobs.txt
|
||||||
grep 'sleep\.service.*running' /root/list-jobs.txt
|
grep 'sleep\.service.*running' /root/list-jobs.txt
|
||||||
grep 'hello\.service' /root/list-jobs.txt && exit 1
|
(! grep 'hello\.service' /root/list-jobs.txt)
|
||||||
systemctl stop sleep.service hello-after-sleep.target
|
systemctl stop sleep.service hello-after-sleep.target
|
||||||
|
|
||||||
# Some basic testing that --show-transaction does something useful
|
# Some basic testing that --show-transaction does something useful
|
||||||
@ -62,13 +53,13 @@ ACTIVATING_ID_PRE=$(systemctl show -P InvocationID always-activating.service)
|
|||||||
systemctl -T start always-activating.socket # Wait for the socket to come up
|
systemctl -T start always-activating.socket # Wait for the socket to come up
|
||||||
systemctl -T restart always-activating.socket
|
systemctl -T restart always-activating.socket
|
||||||
ACTIVATING_ID_POST=$(systemctl show -P InvocationID always-activating.service)
|
ACTIVATING_ID_POST=$(systemctl show -P InvocationID always-activating.service)
|
||||||
[ "$ACTIVATING_ID_PRE" != "$ACTIVATING_ID_POST" ] || exit 1
|
[[ "$ACTIVATING_ID_PRE" != "$ACTIVATING_ID_POST" ]]
|
||||||
|
|
||||||
# Test for irreversible jobs
|
# Test for irreversible jobs
|
||||||
systemctl start unstoppable.service
|
systemctl start unstoppable.service
|
||||||
|
|
||||||
# This is expected to fail with 'job cancelled'
|
# This is expected to fail with 'job cancelled'
|
||||||
systemctl stop unstoppable.service && exit 1
|
(! systemctl stop unstoppable.service)
|
||||||
# But this should succeed
|
# But this should succeed
|
||||||
systemctl stop --job-mode=replace-irreversibly unstoppable.service
|
systemctl stop --job-mode=replace-irreversibly unstoppable.service
|
||||||
|
|
||||||
@ -93,27 +84,28 @@ EOF
|
|||||||
|
|
||||||
# wait2 succeeds
|
# wait2 succeeds
|
||||||
START_SEC=$(date -u '+%s')
|
START_SEC=$(date -u '+%s')
|
||||||
systemctl start --wait wait2.service
|
timeout 10 systemctl start --wait wait2.service
|
||||||
END_SEC=$(date -u '+%s')
|
END_SEC=$(date -u '+%s')
|
||||||
ELAPSED=$((END_SEC-START_SEC))
|
ELAPSED=$((END_SEC-START_SEC))
|
||||||
[[ "$ELAPSED" -ge 2 ]] && [[ "$ELAPSED" -le 4 ]] || exit 1
|
[[ "$ELAPSED" -ge 2 ]]
|
||||||
|
|
||||||
# wait5fail fails, so systemctl should fail
|
# wait5fail fails, so systemctl should fail
|
||||||
START_SEC=$(date -u '+%s')
|
START_SEC=$(date -u '+%s')
|
||||||
(! systemctl start --wait wait2.service wait5fail.service)
|
(! systemctl start --wait wait2.service wait5fail.service)
|
||||||
END_SEC=$(date -u '+%s')
|
END_SEC=$(date -u '+%s')
|
||||||
ELAPSED=$((END_SEC-START_SEC))
|
ELAPSED=$((END_SEC-START_SEC))
|
||||||
[[ "$ELAPSED" -ge 5 ]] && [[ "$ELAPSED" -le 7 ]] || exit 1
|
[[ "$ELAPSED" -ge 5 ]]
|
||||||
|
|
||||||
# Test time-limited scopes
|
# Test time-limited scopes
|
||||||
START_SEC=$(date -u '+%s')
|
START_SEC=$(date -u '+%s')
|
||||||
set +e
|
set +e
|
||||||
systemd-run --scope --property=RuntimeMaxSec=3s sleep 10
|
systemd-run --scope --property=RuntimeMaxSec=3s sleep 30
|
||||||
RESULT=$?
|
RESULT=$?
|
||||||
END_SEC=$(date -u '+%s')
|
END_SEC=$(date -u '+%s')
|
||||||
ELAPSED=$((END_SEC-START_SEC))
|
ELAPSED=$((END_SEC-START_SEC))
|
||||||
[[ "$ELAPSED" -ge 3 ]] && [[ "$ELAPSED" -le 5 ]] || exit 1
|
[[ "$ELAPSED" -ge 3 ]]
|
||||||
[[ "$RESULT" -ne 0 ]] || exit 1
|
[[ "$ELAPSED" -le 10 ]]
|
||||||
|
[[ "$RESULT" -ne 0 ]]
|
||||||
|
|
||||||
# Test transactions with cycles
|
# Test transactions with cycles
|
||||||
# Provides coverage for issues like https://github.com/systemd/systemd/issues/26872
|
# Provides coverage for issues like https://github.com/systemd/systemd/issues/26872
|
||||||
|
@ -6,9 +6,9 @@ set -eux
|
|||||||
set -o pipefail
|
set -o pipefail
|
||||||
|
|
||||||
# Check if homectl is installed, and if it isn't bail out early instead of failing
|
# Check if homectl is installed, and if it isn't bail out early instead of failing
|
||||||
if ! test -x /usr/bin/homectl ; then
|
if ! command -v homectl >/dev/null; then
|
||||||
echo "no homed" >/skipped
|
echo "no homed" >/skipped
|
||||||
exit 77
|
exit 77
|
||||||
fi
|
fi
|
||||||
|
|
||||||
inspect() {
|
inspect() {
|
||||||
@ -29,19 +29,11 @@ inspect() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
wait_for_exist() {
|
wait_for_exist() {
|
||||||
# 2min max
|
timeout 2m bash -c "until homectl inspect '${1:?}'; do sleep 2; done"
|
||||||
for i in {1..60}; do
|
|
||||||
(( i > 1 )) && sleep 2
|
|
||||||
homectl inspect "$1" && break
|
|
||||||
done
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_for_state() {
|
wait_for_state() {
|
||||||
# 2min max
|
timeout 2m bash -c "until homectl inspect '${1:?}' | grep -qF 'State: $2'; do sleep 2; done"
|
||||||
for i in {1..60}; do
|
|
||||||
(( i > 1 )) && sleep 2
|
|
||||||
homectl inspect "$1" | grep -qF "State: $2" && break
|
|
||||||
done
|
|
||||||
}
|
}
|
||||||
|
|
||||||
FSTYPE="$(stat --file-system --format "%T" /)"
|
FSTYPE="$(stat --file-system --format "%T" /)"
|
||||||
@ -123,32 +115,32 @@ inspect test-user
|
|||||||
# Do some keyring tests, but only on real kernels, since keyring access inside of containers will fail
|
# Do some keyring tests, but only on real kernels, since keyring access inside of containers will fail
|
||||||
# (See: https://github.com/systemd/systemd/issues/17606)
|
# (See: https://github.com/systemd/systemd/issues/17606)
|
||||||
if ! systemd-detect-virt -cq ; then
|
if ! systemd-detect-virt -cq ; then
|
||||||
PASSWORD=xEhErW0ndafV4s homectl activate test-user
|
PASSWORD=xEhErW0ndafV4s homectl activate test-user
|
||||||
inspect test-user
|
inspect test-user
|
||||||
|
|
||||||
# Key should now be in the keyring
|
# Key should now be in the keyring
|
||||||
homectl update test-user --real-name "Keyring Test"
|
homectl update test-user --real-name "Keyring Test"
|
||||||
inspect test-user
|
inspect test-user
|
||||||
|
|
||||||
# These commands shouldn't use the keyring
|
# These commands shouldn't use the keyring
|
||||||
(! timeout 5s homectl authenticate test-user )
|
(! timeout 5s homectl authenticate test-user )
|
||||||
(! NEWPASSWORD="foobar" timeout 5s homectl passwd test-user )
|
(! NEWPASSWORD="foobar" timeout 5s homectl passwd test-user )
|
||||||
|
|
||||||
homectl lock test-user
|
homectl lock test-user
|
||||||
inspect test-user
|
inspect test-user
|
||||||
|
|
||||||
# Key should be gone from keyring
|
# Key should be gone from keyring
|
||||||
(! timeout 5s homectl update test-user --real-name "Keyring Test 2" )
|
(! timeout 5s homectl update test-user --real-name "Keyring Test 2" )
|
||||||
|
|
||||||
PASSWORD=xEhErW0ndafV4s homectl unlock test-user
|
PASSWORD=xEhErW0ndafV4s homectl unlock test-user
|
||||||
inspect test-user
|
inspect test-user
|
||||||
|
|
||||||
# Key should have been re-instantiated into the keyring
|
# Key should have been re-instantiated into the keyring
|
||||||
homectl update test-user --real-name "Keyring Test 3"
|
homectl update test-user --real-name "Keyring Test 3"
|
||||||
inspect test-user
|
inspect test-user
|
||||||
|
|
||||||
homectl deactivate test-user
|
homectl deactivate test-user
|
||||||
inspect test-user
|
inspect test-user
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Do some resize tests, but only if we run on real kernels and are on btrfs, as quota inside of containers
|
# Do some resize tests, but only if we run on real kernels and are on btrfs, as quota inside of containers
|
||||||
@ -242,13 +234,13 @@ homectl remove test-user
|
|||||||
# blob directory tests
|
# blob directory tests
|
||||||
# See docs/USER_RECORD_BLOB_DIRS.md
|
# See docs/USER_RECORD_BLOB_DIRS.md
|
||||||
checkblob() {
|
checkblob() {
|
||||||
test -f "/var/cache/systemd/home/blob-user/$1"
|
test -f "/var/cache/systemd/home/blob-user/$1"
|
||||||
stat -c "%u %#a" "/var/cache/systemd/home/blob-user/$1" | grep "^0 0644"
|
stat -c "%u %#a" "/var/cache/systemd/home/blob-user/$1" | grep "^0 0644"
|
||||||
test -f "/home/blob-user/.identity-blob/$1"
|
test -f "/home/blob-user/.identity-blob/$1"
|
||||||
stat -c "%u %#a" "/home/blob-user/.identity-blob/$1" | grep "^12345 0644"
|
stat -c "%u %#a" "/home/blob-user/.identity-blob/$1" | grep "^12345 0644"
|
||||||
|
|
||||||
diff "/var/cache/systemd/home/blob-user/$1" "$2"
|
diff "/var/cache/systemd/home/blob-user/$1" "$2"
|
||||||
diff "/var/cache/systemd/home/blob-user/$1" "/home/blob-user/.identity-blob/$1"
|
diff "/var/cache/systemd/home/blob-user/$1" "/home/blob-user/.identity-blob/$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
mkdir /tmp/blob1 /tmp/blob2
|
mkdir /tmp/blob1 /tmp/blob2
|
||||||
@ -640,6 +632,7 @@ EOF
|
|||||||
homedsshtest@localhost env
|
homedsshtest@localhost env
|
||||||
|
|
||||||
wait_for_state homedsshtest inactive
|
wait_for_state homedsshtest inactive
|
||||||
|
homectl remove homedsshtest
|
||||||
fi
|
fi
|
||||||
|
|
||||||
NEWPASSWORD=hunter4711 homectl create aliastest --storage=directory --alias=aliastest2 --alias=aliastest3 --realm=myrealm
|
NEWPASSWORD=hunter4711 homectl create aliastest --storage=directory --alias=aliastest2 --alias=aliastest3 --realm=myrealm
|
||||||
@ -665,6 +658,8 @@ getent passwd aliastest@myrealm
|
|||||||
getent passwd aliastest2@myrealm
|
getent passwd aliastest2@myrealm
|
||||||
getent passwd aliastest3@myrealm
|
getent passwd aliastest3@myrealm
|
||||||
|
|
||||||
|
homectl remove aliastest
|
||||||
|
|
||||||
NEWPASSWORD=quux homectl create tmpfsquota --storage=subvolume --dev-shm-limit=50K --tmp-limit=50K -P
|
NEWPASSWORD=quux homectl create tmpfsquota --storage=subvolume --dev-shm-limit=50K --tmp-limit=50K -P
|
||||||
for p in /dev/shm /tmp; do
|
for p in /dev/shm /tmp; do
|
||||||
if findmnt -n -o options "$p" | grep -q usrquota; then
|
if findmnt -n -o options "$p" | grep -q usrquota; then
|
||||||
|
@ -1186,6 +1186,12 @@ EOF
|
|||||||
helper_check_device_units
|
helper_check_device_units
|
||||||
# Cleanup
|
# Cleanup
|
||||||
mdadm -v --stop "$raid_dev"
|
mdadm -v --stop "$raid_dev"
|
||||||
|
|
||||||
|
# Clear superblocks to make the MD device will not be restarted even if the VM is restarted.
|
||||||
|
# This is a workaround for issue #38240.
|
||||||
|
mdadm -v --zero-superblock --force "${devices[@]}"
|
||||||
|
udevadm settle --timeout=30
|
||||||
|
|
||||||
# Check if all expected symlinks were removed after the cleanup
|
# Check if all expected symlinks were removed after the cleanup
|
||||||
udevadm wait --settle --timeout=30 --removed "${expected_symlinks[@]}"
|
udevadm wait --settle --timeout=30 --removed "${expected_symlinks[@]}"
|
||||||
helper_check_device_units
|
helper_check_device_units
|
||||||
@ -1243,6 +1249,12 @@ testcase_mdadm_lvm() {
|
|||||||
# Cleanup
|
# Cleanup
|
||||||
lvm vgchange -an "$vgroup"
|
lvm vgchange -an "$vgroup"
|
||||||
mdadm -v --stop "$raid_dev"
|
mdadm -v --stop "$raid_dev"
|
||||||
|
|
||||||
|
# Clear superblocks to make the MD device will not be restarted even if the VM is restarted.
|
||||||
|
# This is a workaround for issue #38240.
|
||||||
|
mdadm -v --zero-superblock --force "${devices[@]}"
|
||||||
|
udevadm settle --timeout=30
|
||||||
|
|
||||||
# Check if all expected symlinks were removed after the cleanup
|
# Check if all expected symlinks were removed after the cleanup
|
||||||
udevadm wait --settle --timeout=30 --removed "${expected_symlinks[@]}"
|
udevadm wait --settle --timeout=30 --removed "${expected_symlinks[@]}"
|
||||||
helper_check_device_units
|
helper_check_device_units
|
||||||
|
Loading…
x
Reference in New Issue
Block a user