1
0
mirror of https://github.com/systemd/systemd synced 2025-11-20 17:24:45 +01:00

Compare commits

...

4 Commits

Author SHA1 Message Date
Zbigniew Jędrzejewski-Szmek
53ff5b361f
core: Delete redundant log_parse_environment(), v2 (#39278)
Reworked version of #39175.
2025-10-15 17:50:59 +02:00
huyubiao
8f2c5dea63 core: delete redundant log_parse_environment()
Fixes https://github.com/systemd/systemd/issues/38895.

Fix the confusing behavior where when an incorrect configuration item such as
'ManagerEnvironment=SYSTEMD_LOG_LEVEL=' is set, the first daemon-reload uses
old environment variables while the second daemon-reload uses LogLevel=.

Co-authored-by: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>

The difference in behaviour is that the operations that were done between the
first log_parse_environment() and the second one might not be logged now, e.g.
if the environment enabled debug logging. That is unfortunate, but parsing the
environment twice and not having the explicit configuration take effect until a
second daemon-reload is confusing. We will always have some window where the
configuration for logging does not apply, in particular this must be true when
parsing the logging configuration. To make that window smaller, move operations
that could log after the call to log_parse_environment() as far as possible.
2025-10-15 14:00:45 +02:00
Zbigniew Jędrzejewski-Szmek
938f7fea7c man/systemd-systemd.conf: describe DefaultEnvironment= and ManagerEnvironment= better
The description of ME= said "see above", but it was actually above the other
one. So change the order. But while reading this, I found it very hard to
understand. So reword things, hopefully in a way that is easier to understand.
The current behaviour is rather complex and unintuitive, but this description
just tries to describe it truthfully.
2025-10-15 14:00:40 +02:00
Zbigniew Jędrzejewski-Szmek
5a8a6d471e man/crypttab: avoid using jargon spelling 2025-10-10 18:49:37 +02:00
3 changed files with 38 additions and 36 deletions

View File

@ -353,7 +353,7 @@
particular, if the device is used for a mount point, the mount point itself also needs to
have the <option>nofail</option> option, or the boot will fail if the device is not unlocked
successfully. If a keyfile and/or a <option>header</option> are specified, the dependencies on
their respective directories will also not be fatal, so that umounting said directories will
their respective directories will also not be fatal, so that unmounting said directories will
not cause the generated cryptset unit to be deactivated.</para>
<xi:include href="version-info.xml" xpointer="v186"/></listitem>

View File

@ -640,35 +640,15 @@
<title>Environment</title>
<variablelist class='config-directives'>
<varlistentry>
<term><varname>ManagerEnvironment=</varname></term>
<listitem><para>Takes the same arguments as <varname>DefaultEnvironment=</varname>, see above. Sets
environment variables for the manager process itself. These variables are inherited by processes
spawned by user managers, but not the system manager - use <varname>DefaultEnvironment=</varname>
for that. Note that these variables are merged into the existing environment block. In particular, in
case of the system manager, this includes variables set by the kernel based on the kernel command line.
As with <varname>DefaultEnvironment=</varname>, this environment block is internal, and changes are not
reflected in the manager's <filename>/proc/PID/environ</filename>.</para>
<para>Setting environment variables for the manager process may be useful to modify its behaviour.
See <ulink url="https://systemd.io/ENVIRONMENT">Known Environment Variables</ulink> for a
descriptions of some variables understood by <command>systemd</command>.</para>
<para>Simple <literal>%</literal>-specifier expansion is supported, see below for a list of supported
specifiers.</para>
<xi:include href="version-info.xml" xpointer="v248"/>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>DefaultEnvironment=</varname></term>
<listitem><para>Configures environment variables passed to all executed processes. Takes a
space-separated list of variable assignments. See <citerefentry
project='man-pages'><refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
details about environment variables.</para>
details about environment variables. This environment block is internal, and changes are not
reflected in the manager's <filename>/proc/PID/environ</filename>.
</para>
<para>Simple <literal>%</literal>-specifier expansion is supported, see below for a list of supported
specifiers.</para>
@ -684,6 +664,30 @@
<xi:include href="version-info.xml" xpointer="v205"/></listitem>
</varlistentry>
<varlistentry>
<term><varname>ManagerEnvironment=</varname></term>
<listitem><para>Sets environment variables for the manager process itself. Takes a space-separated
list of variable assignment in the same format as <varname>DefaultEnvironment=</varname>, see above.
These variables are merged into the existing environment block of the manager process. In particular,
in case of the system manager, this block includes variables set by the kernel based on the kernel
command line, and in case of the user manager, the variables passed by the system manager. After
those variables have been merged, they will persist until overriden, even if the manager is reloaded
or reexecuted. In case of the user manager, these variables are also inherited by processes spawned
by the manager. As with <varname>DefaultEnvironment=</varname>, this environment block is internal,
and changes are not reflected in the manager's <filename>/proc/PID/environ</filename>.</para>
<para>Setting environment variables for the manager process may be useful to modify its behaviour.
See <ulink url="https://systemd.io/ENVIRONMENT">Known Environment Variables</ulink> for a description
of some variables understood by <command>systemd</command>.</para>
<para>Simple <literal>%</literal>-specifier expansion is supported, see below for a list of supported
specifiers.</para>
<xi:include href="version-info.xml" xpointer="v248"/>
</listitem>
</varlistentry>
</variablelist>
</refsect1>

View File

@ -2810,26 +2810,24 @@ static int parse_configuration(const struct rlimit *saved_rlimit_nofile,
log_warning_errno(r, "Failed to parse kernel command line, ignoring: %m");
}
/* Initialize some default rlimits for services if they haven't been configured */
fallback_rlimit_nofile(saved_rlimit_nofile);
fallback_rlimit_memlock(saved_rlimit_memlock);
/* Note that this also parses bits from the kernel command line, including "debug". */
log_parse_environment();
/* Initialize the show status setting if it hasn't been set explicitly yet */
/* Initialize the show status setting if it hasn't been explicitly set yet */
if (arg_show_status == _SHOW_STATUS_INVALID)
arg_show_status = SHOW_STATUS_YES;
/* Slightly raise the OOM score for our services if we are running for unprivileged users. */
determine_default_oom_score_adjust();
/* Push variables into the manager environment block */
setenv_manager_environment();
/* Parse log environment variables again to take into account any new environment variables. */
/* Parse log environment variables to take into account any new environment variables.
* Note that this also parses bits from the kernel command line, including "debug". */
log_parse_environment();
/* Initialize some default rlimits for services if they haven't been configured */
fallback_rlimit_nofile(saved_rlimit_nofile);
fallback_rlimit_memlock(saved_rlimit_memlock);
/* Slightly raise the OOM score for our services if we are running for unprivileged users. */
determine_default_oom_score_adjust();
return 0;
}