Pavel Hrdina [Wed, 25 Nov 2020 08:05:36 +0000 (09:05 +0100)]
cgroup: Also set blkio.bfq.weight
Commit [1] added a workaround when unified cgroups are used but missed
legacy cgroups where there is the same issue.
[1] <https://github.com/systemd/systemd/commit/
2dbc45aea747f25cc1c3848fded2ec0062f96bcf>
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
(cherry picked from commit
35e7a62ca32a30169a94693b831e53c832251984)
Resolves: #
1657810
David Tardon [Fri, 11 Dec 2020 08:34:19 +0000 (09:34 +0100)]
use link to RHEL-8 docs
RHEL-only
Related: #
1623116
Lennart Poettering [Thu, 8 Nov 2018 08:33:31 +0000 (09:33 +0100)]
unit: make UNIT() cast function deal with NULL pointers
Fixes: #10681
(cherry picked from commit
bbf11206230d1b089118971f98a047151cb5c4fa)
Related: #
1871827
Frantisek Sumsal [Fri, 15 Jan 2021 14:13:53 +0000 (15:13 +0100)]
ci: move jobs from Travis CI to GH Actions
The OSS version of Travis CI is going to be merged with the commercial
one soon, essentially dropping the free tier, so let's move the CI jobs
to GitHub Actions to keep them up.
rhel-only
Related: #
1871827
Frantisek Sumsal [Fri, 15 Jan 2021 12:00:33 +0000 (13:00 +0100)]
ci: use quay.io instead of Docker Hub to avoid rate limits
Docker Hub introduced rate limits for anonymous users (100 requests per
six hours), which break our CI in the busier periods. Let's try to use
the quay.io CentOS image to mitigate this.
rhel-only
Related: #
1871827
Frantisek Sumsal [Fri, 15 Jan 2021 11:51:02 +0000 (12:51 +0100)]
ci: PowerTools repo was renamed to powertools in RHEL 8.3
See: https://wiki.centos.org/Manuals/ReleaseNotes/CentOS8.2011#Yum_repo_file_and_repoid_changes
rhel-only
Related: #
1871827
Lennart Poettering [Wed, 27 May 2020 17:38:38 +0000 (19:38 +0200)]
resolved: tweak cmsg calculation
We ask for the TTL, then have enough space for it.
We probably can drop the extra cmsg space now, but let's figure that out
another time, since the extra cmsg space is used elsewhere in resolved
as well.
(cherry picked from commit
08ab18618ec59022582f1513c0718ba369f5ba85)
Related: #
1887181
Lennart Poettering [Wed, 27 May 2020 17:36:56 +0000 (19:36 +0200)]
core: add new PassPacketInfo= socket unit property
(cherry picked from commit
a3d19f5d99c44940831a33df8b5bece4aaf749f7)
Resolves: #
1887181
Lennart Poettering [Wed, 27 May 2020 17:27:51 +0000 (19:27 +0200)]
socket-util: add generic socket_pass_pktinfo() helper
The helper turns on the protocol specific "packet info" structure cmsg
for three relevant protocols we know.
(cherry picked from commit
35a3eb9bdc95d1e6ba25bc65c78959ea104e45a1)
Related: #
1887181
Lennart Poettering [Thu, 18 Oct 2018 17:48:18 +0000 (19:48 +0200)]
introduce setsockopt_int() helper
As suggested by @heftig:
https://github.com/systemd/systemd/commit/
6d5e65f6454212cd400d0ebda34978a9f20cc26a#commitcomment-
30938667
(cherry picked from commit
2ff48e981e6cd1ccbfae49943274d9c8319a5e5d)
Related: #
1887181
Zbigniew Jędrzejewski-Szmek [Sat, 22 Aug 2020 09:58:15 +0000 (11:58 +0200)]
shared/install: fix preset operations for non-service instantiated units
Fixes https://github.com/coreos/ignition/issues/1064.
(cherry picked from commit
47ab95fe4315b3f7ee5a3694460a744bb88c52fd)
Related: #
1812972
Joerg Behrmann [Tue, 10 Mar 2020 15:34:13 +0000 (16:34 +0100)]
docs: Add syntax for templated units to systemd.preset man page
This documents the syntax
enable template@.service foo bar baz
that was introduced in #9901 to preset templated units.
(cherry picked from commit
1f667d8a7cff4355cd23ebebeb4d7179e3498eb8)
Related: #
1812972
Yu Watanabe [Wed, 29 Aug 2018 14:27:42 +0000 (23:27 +0900)]
test: fix a memleak
Follow-up for #9901.
Fixes #9968.
(cherry picked from commit
efa146369398fdb73f1cd177eb2522822ebf559c)
Related: #
1812972
Ruixin Bao [Sun, 26 Aug 2018 20:00:03 +0000 (20:00 +0000)]
install: small refactor to combine two function calls into one function
Combine consecutive function calls of install_info_discover and
install_info_may_process into one short helper function.
(cherry picked from commit
1e475a0ab4c46eb07f3df3fb24f5a7c3e1fa20b1)
Related: #
1812972
Ruixin Bao [Tue, 21 Aug 2018 20:40:56 +0000 (20:40 +0000)]
install: allow instantiated units to be enabled via presets
This patch implements https://github.com/systemd/systemd/issues/9421.
The .preset file now is able to take a rule in the format of:(e.g)
enable foo@.service bar0 bar1 bar2
In the above example, when preset-all is called, all three instances of
foo@bar0.service, foo@bar1.service and foo@bar2.service will be enabled.
When preset is called on a single service(e.g: foo@bar1.service), only
the mentioned one(foo@bar1.service) will be enabled.
Tests are added for future regression.
(cherry picked from commit
4c9565eea534cd233a913c8c21f7920dba229743)
Resolves: #
1812972
Lennart Poettering [Thu, 30 Apr 2020 16:32:44 +0000 (18:32 +0200)]
tree-wide: port various bits over to locale_is_installed()
(cherry picked from commit
a00a78b84e2ab352b3144bfae8bc578d172303be)
Resolves: #
1755287
Lennart Poettering [Thu, 30 Apr 2020 16:32:55 +0000 (18:32 +0200)]
test: add test case for locale_is_installed()
(cherry picked from commit
b45b0a69bb7ef3e6e66d443eae366b6d1c387cab)
Related: #
1755287
Lennart Poettering [Thu, 30 Apr 2020 16:30:56 +0000 (18:30 +0200)]
locale-util: add new helper locale_is_installed()
This new helper checks whether the specified locale is installed. It's
distinct from locale_is_valid() which just superficially checks if a
string looks like something that could be a valid locale.
Heavily inspired by @jsynacek's #13964.
Replaces: #13964
(cherry picked from commit
23fa786ca67ed3a32930ff1a7b175ac823db187c)
Related: #
1755287
Daan De Meyer [Wed, 10 Jun 2020 18:19:41 +0000 (20:19 +0200)]
log: Prefer logging to CLI unless JOURNAL_STREAM is set
(cherry picked from commit
bc694c06e60505efeb09e5278a7b22cdfa23975e)
Resolves: #
1865840
David Tardon [Mon, 9 Nov 2020 08:27:02 +0000 (09:27 +0100)]
remove references of non-existent man pages
This is a follow-up to commit
8ad89170001c9aba8849630ddb5da81d9e24a1bc,
which introduced the man page change.
Resolves: #
1876807
David Tardon [Fri, 6 Nov 2020 09:13:19 +0000 (10:13 +0100)]
fix typo in ProtectSystem= option
This was introduced by commit
d9ae3222cfbd5d2a48e6dbade6617085cc76f1c1 .
Resolves: #
1871139
Michal Sekletár [Mon, 19 Oct 2020 09:10:31 +0000 (11:10 +0200)]
udev/net_id: don't generate slot based names if multiple devices might claim the same slot
(cherry picked from commit
2c8ec0095e6fd2e72879d4915ff8a9e5c0664d0b)
Resolves: #
1827462
Michal Sekletár [Mon, 19 Oct 2020 08:56:11 +0000 (10:56 +0200)]
udev/net_id: parse _SUN ACPI index as a signed integer
Negative value means there is no match between a PCI device and any of
the slots. In the following commit we will extend this and value of 0
will indicate that there is a match between some slot and PCI device,
but that device is a PCI bridge.
(cherry picked from commit
3e545ae5abcf258791eacbee60c829c100a33274)
Related: #
1827462
Zbigniew Jędrzejewski-Szmek [Thu, 9 May 2019 10:34:30 +0000 (12:34 +0200)]
man: describe naming schemes in a new man page
I decided to make this a separate man page because it is freakin' long.
This content could equally well go in systemd-udevd.service(8), systemd.link(5),
or a new man page for the net_id builtin.
v2:
- rename to systemd.net-naming-scheme
- add udevadm test-builtin net_id example
(cherry picked from commit
0b1e5b6ed8c6b9a2bc53709eb75e381d360f05bf)
Related: #
1827462
[msekleta: I've removed parts that describe features which are not
available in RHEL-8]
Zbigniew Jędrzejewski-Szmek [Tue, 11 Dec 2018 22:28:29 +0000 (23:28 +0100)]
meson: make net.naming-scheme= default configurable
This is useful for distributions, where the stability of interface names should
be preseved after an upgrade of systemd. So when some specific release of the
distro is made available, systemd defaults to the latest & greatest naming
scheme, and subsequent updates set the same default. This default may still
be overriden through the kernel and env var options.
A special value "latest" is also allowed. Without a specific name, it is harder
to verride from meson. In case of 'combo' options, meson reads the default
during the initial configuration, and "remembers" this choice. When systemd is
updated, old build/ directories could keep the old default, which would be
annoying. Hence, "latest" is introduced to make it explicit, yet follow the
upstream. This is actually useful for the user too, because it may be used
as an override, without having to actually specify a version.
(cherry picked from commit
06da5c63dd697ea4087e76c6d809b60b5780b87c)
Related: #
1827462
[msekleta: note that our default is not latest but rhel-8.0]
Michal Sekletár [Wed, 14 Oct 2020 14:57:44 +0000 (16:57 +0200)]
udev: introduce udev net_id "naming schemes"
With this we can stabilize how naming works for network interfaces. A
user can request through a kernel cmdline option or an env var which
scheme to follow. The idea is that installers use this to set into stone
(a very soft stone though) the scheme used during installation so that
interface naming doesn't change afterwards anymore.
Why use env vars and kernel cmdline options, and not a config file of
its own?
Well, first of all there's no obvious existing one to use. But more
importantly: I have the feeling that this logic is kind of an incomplete
hack, and I simply don't want to do advertise this as a perfectly
working solution. So far we used env vars for the non-so-official
options and proper config files for the official stuff. Given how
incomplete this logic is (i.e. the big variable for naming remains the
kernel, which might expose sysfs attributes in newer versions that we
check for and didn't exist in older versions — and other problems like
this), I am simply not confident in giving this first-class exposure in
a primary configuration file.
Fixes: #10448
(cherry-picked from commit
f7e81fd96fdfe0ac6dcdb72de43f7cb4720e363a)
Related: #
1827462
[msekleta: note that we are introducing our own naming schemes based on
RHEL-8 minor versions. Also we are not backporting all naming scheme
features that appeared in the original commit. We are backporting only
features relevant for v239 while original commit also converted
changes introduced in v240 into naming scheme flags.]
Lukas Nykryn [Thu, 28 Aug 2014 13:12:10 +0000 (15:12 +0200)]
man: mention System Administrator's Guide in systemctl manpage
(cherry picked from commit
d4582346f47064de24470b5f92e418966004925f)
Resolves: #
1623116
Lennart Poettering [Sat, 4 Apr 2020 10:23:02 +0000 (12:23 +0200)]
user-util: rework how we validate user names
This reworks the user validation infrastructure. There are now two
modes. In regular mode we are strict and test against a strict set of
valid chars. And in "relaxed" mode we just filter out some really
obvious, dangerous stuff. i.e. strict is whitelisting what is OK, but
"relaxed" is blacklisting what is really not OK.
The idea is that we use strict mode whenver we allocate a new user
(i.e. in sysusers.d or homed), while "relaxed" mode is when we process
users registered elsewhere, (i.e. userdb, logind, …)
The requirements on user name validity vary wildly. SSSD thinks its fine
to embedd "@" for example, while the suggested NAME_REGEX field on
Debian does not even allow uppercase chars…
This effectively liberaralizes a lot what we expect from usernames.
The code that warns about questionnable user names is now optional and
only used at places such as unit file parsing, so that it doesn't show
up on every userdb query, but only when processing configuration files
that know better.
Fixes: #15149 #15090
(cherry picked from commit
7a8867abfab10e5bbca10590ec2aa40c5b27d8fb)
Resolves: #
1848373
Lennart Poettering [Mon, 30 Mar 2020 19:46:01 +0000 (21:46 +0200)]
user-util: switch order of checks in valid_user_group_name_or_id_full()
When we are supposed to accept numeric UIDs formatted as string, then
let's check that first, before passing things on to
valid_user_group_name_full(), since that might log about, and not the
other way round.
See: #15201
Follow-up for:
93c23c9297e48e594785e0bb9c51504aae5fbe3e
(cherry picked from commit
a85daa0dfb3eb03be9845760e90e54b9af8fb00e)
Related: #
1848373
Zbigniew Jędrzejewski-Szmek [Thu, 1 Aug 2019 08:02:14 +0000 (10:02 +0200)]
shared/user-util: allow usernames with dots in specific fields
People do have usernames with dots, and it makes them very unhappy that systemd
doesn't like their that. It seems that there is no actual problem with allowing
dots in the username. In particular chown declares ":" as the official
separator, and internally in systemd we never rely on "." as the seperator
between user and group (nor do we call chown directly). Using dots in the name
is probably not a very good idea, but we don't need to care. Debian tools
(adduser) do not allow users with dots to be created.
This patch allows *existing* names with dots to be used in User, Group,
SupplementaryGroups, SocketUser, SocketGroup fields, both in unit files and on
the command line. DynamicUsers and sysusers still follow the strict policy.
user@.service and tmpfiles already allowed arbitrary user names, and this
remains unchanged.
Fixes #12754.
(cherry picked from commit
ae480f0b09aec815b64579bb1828ea935d8ee236)
Related: #
1848373
Balint Reczey [Wed, 18 Mar 2020 17:29:02 +0000 (18:29 +0100)]
user-util: Allow names starting with a digit
In
1a29610f5fa1bcb2eeb37d2c6b79d8d1a6dbb865 the change inadvertedly
disabled names with digit as the first character. This follow-up change
allows a digit as the first character in compat mode.
Fixes: #15141
(cherry picked from commit
93c23c9297e48e594785e0bb9c51504aae5fbe3e)
Related: #
1848373
Zbigniew Jędrzejewski-Szmek [Wed, 28 Aug 2019 10:05:52 +0000 (12:05 +0200)]
shared/user-util: emit a warning on names with dots
(cherry picked from commit
88e2ed0b5bf6f08f5a2d4d64b1fefdc7192b9aac)
Related: #
1848373
David Tardon [Tue, 27 Oct 2020 09:31:05 +0000 (10:31 +0100)]
shared/user-util: add compat forms of user name checking functions
New functions are called valid_user_group_name_compat() and
valid_user_group_name_or_id_compat() and accept dots in the user
or group name. No functional change except the tests.
(cherry picked from commit
1a29610f5fa1bcb2eeb37d2c6b79d8d1a6dbb865)
This completes previous partial cherry-pick of the same commit (commit
76176de0889c3e8b9b3a176da24e4f8dbbd380a3).
Related: #
1848373
Lennart Poettering [Mon, 1 Jun 2020 15:48:41 +0000 (17:48 +0200)]
tests: beef up integer parsing tests
(cherry picked from commit
53c6db99fa4b52f97e19977f21d3133f8ceb3dcd)
Related: #
1848373
Lennart Poettering [Mon, 1 Jun 2020 15:31:51 +0000 (17:31 +0200)]
parse-util: also parse integers prefixed with 0b and 0o
Let's adopt Python 3 style 0b and 0x syntaxes, because it makes a ton of
sense, in particular in bitmask settings.
(cherry picked from commit
fc80cabcf584a8b486bdff5be0c074fec4059cdc)
Related: #
1848373
Lennart Poettering [Fri, 23 Nov 2018 15:27:15 +0000 (16:27 +0100)]
strv: add new macro STARTSWITH_SET()
This is to startswith() what PATH_STARTSWITH_SET() is to
path_startswith().
Or in other words, checks if the specified string has any of the listed
prefixes, and if so, returns the remainder of the string.
(cherry picked from commit
52f1552073047195d51901f7e5a5a4fa3189034e)
Related: #
1848373
Lennart Poettering [Mon, 1 Jun 2020 15:16:46 +0000 (17:16 +0200)]
user-util: be stricter in parse_uid()
Let's refuse "+" and "-" prefixed UIDs. Let's refuse whitespace-prefixed
UIDS, Let's refuse zero-prefixed UIDs. Let's be safe than sorry.
(cherry picked from commit
f5979b63cc305ba217dfd174b1bf0583bcf75a73)
Related: #
1848373
Lennart Poettering [Mon, 1 Jun 2020 15:16:04 +0000 (17:16 +0200)]
parse-util: rewrite parse_mode() on top of safe_atou_full()
Parsing is hard, hence let's use our own careful wrappers wherever
possible.
(cherry picked from commit
c44702a8bd8cc8b7f2f1df21db9308d9af7dda5b)
Related: #
1848373
Lennart Poettering [Mon, 1 Jun 2020 15:10:27 +0000 (17:10 +0200)]
parse-util: make return parameter optional in safe_atou16_full()
All other safe_atoXYZ_full() functions have the parameter optional,
let's make it optoinal here, too.
(cherry picked from commit
aa85e4d3cef8ca8436e480bce9fa4ce72876b636)
Related: #
1848373
Lennart Poettering [Mon, 1 Jun 2020 15:08:38 +0000 (17:08 +0200)]
parse-util: allow '-0' as alternative to '0' and '+0'
Let's allow "-0" as alternative to "+0" and "0" when parsing integers,
unless the new SAFE_ATO_REFUSE_PLUS_MINUS flag is specified.
In cases where allowing the +/- syntax shall not be allowed
SAFE_ATO_REFUSE_PLUS_MINUS is the right flag to use, but this also means
that -0 as only negative integer that fits into an unsigned value should
be acceptable if the flag is not specified.
(cherry picked from commit
c78eefc13562a8fc0c22c00a6d3001af89860258)
Related: #
1848373
Lennart Poettering [Mon, 1 Jun 2020 15:06:19 +0000 (17:06 +0200)]
parse-util: allow tweaking how to parse integers
This allows disabling a few alternative ways to decode integers
formatted as strings, for safety reasons.
See: #15991
(cherry picked from commit
707e93aff8f358f8a62117e54b857530d6594e4b)
Related: #
1848373
Zbigniew Jędrzejewski-Szmek [Thu, 9 Apr 2020 09:18:26 +0000 (11:18 +0200)]
basic/parse-util: add safe_atoux64()
(cherry picked from commit
ce51632a357d347737bf40d3817df331cd8874cb)
Related: #
1848373
Lennart Poettering [Thu, 14 Nov 2019 13:49:40 +0000 (14:49 +0100)]
parse-util: sometimes it is useful to check if a string is a valid integer, but not actually parse it
(cherry picked from commit
22810041c2200fe72b0e0c985d0e404f8b80f9e2)
Related: #
1848373
Zbigniew Jędrzejewski-Szmek [Sun, 31 May 2020 16:21:09 +0000 (18:21 +0200)]
basic/user-util: always use base 10 for user/group numbers
We would parse numbers with base prefixes as user identifiers. For example,
"0x2b3bfa0" would be interpreted as UID==
45334432 and "01750" would be
interpreted as UID==1000. This parsing was used also in cases where either a
user/group name or number may be specified. This means that names like
0x2b3bfa0 would be ambiguous: they are a valid user name according to our
documented relaxed rules, but they would also be parsed as numeric uids.
This behaviour is definitely not expected by users, since tools generally only
accept decimal numbers (e.g. id, getent passwd), while other tools only accept
user names and thus will interpret such strings as user names without even
attempting to convert them to numbers (su, ssh). So let's follow suit and only
accept numbers in decimal notation. Effectively this means that we will reject
such strings as a username/uid/groupname/gid where strict mode is used, and try
to look up a user/group with such a name in relaxed mode.
Since the function changed is fairly low-level and fairly widely used, this
affects multiple tools: loginctl show-user/enable-linger/disable-linger foo',
the third argument in sysusers.d, fourth and fifth arguments in tmpfiles.d,
etc.
Fixes #15985.
(cherry picked from commit
156a5fd297b61bce31630d7a52c15614bf784843)
Resolves: #
1848373
Michal Sekletár [Mon, 17 Feb 2020 12:50:31 +0000 (13:50 +0100)]
core: add support for setting CPUAffinity= to special "numa" value
systemd will automatically derive CPU affinity mask from NUMA node
mask.
Fixes #13248
(cherry picked from commit
e2b2fb7f566d13a3de61952b5356cd4d2eaee917)
Resolves: #
1740657
Michal Sekletar [Fri, 31 May 2019 13:23:23 +0000 (15:23 +0200)]
dbus-execute: make transfer of CPUAffinity endian safe (#12711)
We store the affinity mask in the native endian. However, over D-Bus we
must transfer the mask in little endian byte order.
This is the second part of
c367f996f5f091a63f812f0140b304c649be77fc.
(cherry picked from commit
75e40119a471454516ad0acc96f6f4094e7fb652)
Related: #
1740657
Wen Yang [Tue, 30 Jun 2020 20:45:33 +0000 (04:45 +0800)]
mount-setup: fix segfault in mount_cgroup_controllers when using gcc9 compiler
According to the documentation:
https://gcc.gnu.org/gcc-9/porting_to.html#complit
The 'join_controllers' that relied on the extended lifetime needs
to be fixed, move the compound literals to the function scope it
need to accessible in.
Resolves: #
1868877
Alan Jenkins [Thu, 21 Jun 2018 13:12:30 +0000 (14:12 +0100)]
core: remove support for API bus "started outside our own logic"
Looking at a recent Bad Day, my log contains over 100 lines of
systemd[23895]: Failed to connect to API bus: Connection refused
It is due to "systemd --user" retrying to connect to an API bus.[*] I
would prefer to avoid spamming the logs. I don't think it is good for us
to retry so much like this.
systemd was mislead by something setting DBUS_SESSION_BUS_ADDRESS. My best
guess is an unfortunate series of events caused gdm to set this. gdm has
code to start a session dbus if there is not a bus available already (and
in this case it exports the environment variable). I believe it does not
normally do this when running under systemd, because "systemd --user" and
hence "dbus.service" would already have been started by pam_systemd.
I see two possibilities
1. Rip out the check for DBUS_SESSION_BUS_ADDRESS entirely.
2. Only check for DBUS_SESSION_BUS_ADDRESS on startup. Not in the
"recheck" logic.
The justification for 2), is that the recheck is called from unit_notify(),
this is used to check whether the service just started (or stopped) was
"dbus.service". This reason for rechecking does not apply if we think
the session bus was started outside our logic.
But I think we can justify 1). dbus-daemon ships a statically-enabled
/usr/lib/systemd/user/dbus.service, which would conflict with an attempt to
use an external dbus. Also "systemd --user" is started from user@.service;
if you try to start it manually so that it inherits an environment
variable, it will conflict if user@.service was started by pam_systemd
(or loginctl enable-linger).
(cherry picked from commit
d3243f55ca9b5f305306ba4105ab29768e372a78)
Resolves: #
1764282
Renaud Métrich [Thu, 20 Aug 2020 11:00:37 +0000 (13:00 +0200)]
socket: New option 'FlushPending' (boolean) to flush socket before entering listening state
Disabled by default. When Enabled, before listening on the socket, flush the content.
Applies when Accept=no only.
(cherry picked from commit
3e5f04bf6468fcb79c080f02b0eab08f258bff0c)
Resolves: #
1870638
Lennart Poettering [Tue, 26 Mar 2019 17:02:49 +0000 (18:02 +0100)]
man: document the new systemctl --show-transaction option
(cherry picked from commit
df4a7cb7323c8cf00553d766913312c5b7ccd508)
Related: #846319
Lennart Poettering [Tue, 26 Mar 2019 16:39:36 +0000 (17:39 +0100)]
test: add some basic testing that "systemctl start -T" does something
(cherry picked from commit
f087c7e072bb338d5c7c0781c9fbc900612efd18)
Related: #846319
Lennart Poettering [Fri, 22 Mar 2019 19:58:13 +0000 (20:58 +0100)]
systemctl: add new --show-transaction switch
This new switch uses the new method call EnqueueUnitJob() for enqueuing
a job and showing the jobs it enqueued.
Fixes: #2297
(cherry picked from commit
85d9b5981ba6b7ee3955f95fa6cf3bb8cdf3444d)
Resolves: #846319
Lennart Poettering [Tue, 26 Mar 2019 15:19:35 +0000 (16:19 +0100)]
systemctl: split out extra args generation into helper function of its own
(cherry picked from commit
94369fc0663255bbd327f97dba288ececf51a514)
Related: #846319
Lennart Poettering [Sat, 13 Oct 2018 12:38:46 +0000 (14:38 +0200)]
systemctl: clean up start_unit_one() error handling
Let's split exit code handling in two: "r" is only used for errno-style
errors, and "ret" is used for exit() codes. Then, let's use EXIT_SUCCESS
for checking whether the latter is already used.
This way it should always be clear what kind of error we are processing,
and when we propaate one into the other.
Moreover this allows us to drop "q" form all inner loops, avoiding
confusion when to use "q" and when "r" to store received errors.
Fixes: #9704
(cherry picked from commit
0e8d9c0c4d7e71487c486f626c59853cfb031d16)
Related: #846319
Filipe Brandenburger [Fri, 20 Jul 2018 18:32:55 +0000 (11:32 -0700)]
systemctl: Only wait when there's something to wait for.
Tested:
- `systemctl --wait start i-do-not-exist.service` does not wait.
- `systemctl --wait start i-do-not-exist.service valid-unit.service` does.
(cherry picked from commit
46f2579c2ac9f6780d5afec1000764defc6b581e)
Related: #846319
Lennart Poettering [Tue, 26 Mar 2019 14:49:52 +0000 (15:49 +0100)]
systemctl: reindent table
(cherry picked from commit
5fd77930ad9980af5257f9f871556d6973db736c)
Related: #846319
Lennart Poettering [Tue, 26 Mar 2019 14:20:26 +0000 (15:20 +0100)]
systemctl: replace switch statement by table of structures
(cherry picked from commit
c45e5fb877033c9e3f9b79121644ed71032af379)
Related: #846319
Lennart Poettering [Fri, 22 Mar 2019 19:57:30 +0000 (20:57 +0100)]
core: add new API for enqueing a job with returning the transaction data
(cherry picked from commit
50cbaba4fe5a32850998682699322d012e597e4a)
Related: #846319
Zbigniew Jędrzejewski-Szmek [Wed, 14 Oct 2020 12:03:13 +0000 (14:03 +0200)]
sd-bus: break the loop in bus_ensure_running() if the bus is not connecting
This might fix #17025:
> the call trace is
> bus_ensure_running -> sd_bus_process -> bus_process_internal -> process_closeing --> sd_bus_close
> |
> \-> process_match
We ended doing callouts to the Disconnected matches from bus_ensure_running()
and shouldn't. bus_ensure_running() should never do callouts. This change
should fix this however: once we notice that the connection is going down we
will now fail instantly with ENOTOCONN instead of calling any callbacks.
(cherry picked from commit
93a59b1ae5d3bcb0ec1488ebc13d0d1ff4d1729a)
Resolves: #
1885553
Lennart Poettering [Mon, 29 Apr 2019 14:10:51 +0000 (16:10 +0200)]
units: drop reference to sushell man page
sushell was a Fedoraism, and has been removed since. Hence our upstream
unit files shouldn't reference it either.
(cherry picked from commit
6dc14d73664390682d47d7e5bcbdbb362d04f623)
Resolves: #
1871827
Michael Biebl [Thu, 7 Mar 2019 11:02:53 +0000 (12:02 +0100)]
units: fix systemd.special man page reference in system-update-cleanup.service
(cherry picked from commit
faab72d16b310c17be4b908cfe15eca122d16ae4)
Resolves: #
1871827
Franck Bui [Thu, 16 Jul 2020 19:22:37 +0000 (21:22 +0200)]
vconsole-setup: downgrade log message when setting font fails on dummy console
Since commit
883eb9be985fd86d9cabe967eeeab91cdd396a81, vconsole-setup might be
called again to operate on dummy console where font operations are not
supported but where it's still important to have the correct keymap set [0][1].
vconsole-setup is mainly called by udev but can also be run via a dependency of
an early service. Both cases might end up calling vconsole-setup on the dummy
console.
The first case can happen during early boot even on systems that use (instead
of the dummy console) a "simple" video console driver supporting font
operations (such as vgacon) until a more specific driver (such as i915) takes
the console over. While this is happening vgacon is deactivated and temporarly
replaced by the dummy console [2].
There are also other cases where systemd-vconsole-setup might be called on
dummy console especially during (very) early boot. Indeed
systemd-vconsole-setup.service might be pulled in by early interactive services
such as 'dracut-cmdline-ask.service` which is run before udev.
If that happens on platforms with no grapical HWs (such as embedded ARM) or
with dummy console initially installed until a driver takes over (like Xen and
xen-fbfront) then setting font will fail.
Therefore this patch downgrades the log message emitted when setting font fails
to LOG_DEBUG and when font operations is not implemented like it's the case for
the dummy console.
Fixes: #16406.
[0] https://github.com/systemd/systemd/issues/10826
[1] https://bugzilla.redhat.com/show_bug.cgi?id=
1652473
[2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/gpu/vga/vgaarb.c?h=v5.7#n204
(cherry picked from commit
0ef1adf51274960358e852d3bc36ae6c288a70d9)
Resolves: #
1889996
Zbigniew Jędrzejewski-Szmek [Wed, 3 Apr 2019 11:11:00 +0000 (13:11 +0200)]
seccomp: rework how the S[UG]ID filter is installed
If we know that a syscall is undefined on the given architecture, don't
even try to add it.
Try to install the filter even if some syscalls fail. Also use a helper
function to make the whole a bit less magic.
This allows the S[UG]ID test to pass on arm64.
(cherry picked from commit
da4dc9a6748797e804b6bc92ad513d509abf581c)
Resolves: #
1860374
Zbigniew Jędrzejewski-Szmek [Fri, 26 Apr 2019 11:37:31 +0000 (13:37 +0200)]
basic/virt: try the /proc/1/sched hack also for PID1
If a container manager does not set $container, we could end up
in a strange situation when detect-virt returns container-other when
run as non-pid-1 and none when run as pid-1.
(cherry picked from commit
342bed02084c4396dd2f1054bd559bfb2699cfcb)
Resolves: #
1868877
Jan Synacek [Mon, 17 Aug 2020 12:29:04 +0000 (14:29 +0200)]
build: use simple project version in pkgconfig files
Loosely based on commit
a67c318df8800ba98d7361308937ed276dc73982.
Resolves: #
1862714
Michal Sekletar [Fri, 22 Feb 2019 14:50:55 +0000 (15:50 +0100)]
logind: don't print warning when user@.service template is masked
User instance of systemd is optional feature and if user@.service
template is masked then administrator most likely doesn't want --user
instances of systemd for logged in users. We don't need to be verbose
about it.
(cherry picked from commit
03b6fa0c5b51b0d39334ff6ba183a3391443bcf6)
Resolves: #
1880270
Michal Sekletár [Tue, 8 Sep 2020 12:51:39 +0000 (14:51 +0200)]
cgroup: freezer action must be NOP when cgroup v2 freezer is not available
Low-level cgroup freezer state manipulation is invoked directly from the
job engine when we are about to execute the job in order to make sure
the unit is not frozen and job execution is not blocked because of
that.
Currently with cgroup v1 we would needlessly do a bunch of work in the
function and even falsely update the freezer state. Don't do any of this
and skip the function silently when v2 freezer is not available.
Following bug is fixed by this commit,
$ systemd-run --unit foo.service /bin/sleep infinity
$ systemctl restart foo.service
$ systemctl show -p FreezerState foo.service
Before (cgroup v1, i.e. full "legacy" mode):
FreezerState=thawing
After:
FreezerState=running
(cherry picked from commit
9a1e90aee556b7a30d87553a891a4175ae77ed68)
Resolves: #
1868831
Lennart Poettering [Wed, 22 Apr 2020 18:34:02 +0000 (20:34 +0200)]
core: make sure to restore the control command id, too
Fixes: #15356
(cherry picked from commit
e9da62b18af647bfa73807e1c7fc3bfa4bb4b2ac)
Resolves: #
1829867
Lennart Poettering [Mon, 25 Jun 2018 15:21:34 +0000 (17:21 +0200)]
man: document new "boot-complete.target" unit
(cherry picked from commit
82ea38258c0f4964c2f3ad3691c6e4554c4f0bb0)
Related: #
1872243
Lennart Poettering [Fri, 22 Jun 2018 10:52:28 +0000 (12:52 +0200)]
units: add generic boot-complete.target
(cherry picked from commit
329d20db3cb02d789473b8f7e4a59526fcbf5728)
Resolves: #
1872243
Michal Sekletár [Thu, 26 Mar 2020 12:35:11 +0000 (13:35 +0100)]
device: don't emit PropetiesChanged needlessly
Functions called from device_setup_unit() already make sure that unit is
enqueued in case it is a new unit or properties exported on the bus have
changed.
This should prevent unnecessary DBus wakeups and associated DBus traffic
when device_setup_unit() was called while reparsing /proc/self/mountinfo
due to the mountinfo notifications. Note that we parse
/proc/self/mountinfo quite often on the busy systems (e.g. k8s container
hosts) but majority of the time mounts didn't change, only some mount
got added. Thus we don't need to generate PropertiesChanged for devices
associated with the mounts that didn't change.
Thanks to Renaud Métrich <rmetrich@redhat.com> for debugging the
problem and providing draft version of the patch.
(cherry picked from commit
2e129d5d6bd6bd8be4b5359e81a880cbf72a44b8)
Resolves: #
1793533
Michal Sekletár [Thu, 26 Mar 2020 12:34:20 +0000 (13:34 +0100)]
device: make sure we emit PropertiesChanged signal once we set sysfs
(cherry picked from commit
7c4d139485139eae95b17a1d54cb51ae958abd70)
Related: #
1793533
Michal Sekletár [Fri, 5 Jun 2020 09:35:01 +0000 (11:35 +0200)]
tests: sleep a bit and give kernel time to perform the action after manual freeze/thaw
Fixes: #16050
(cherry picked from commit
a0d79df8e59c6bb6dc0382d71e835dec869a7df4)
Related: #
1848421
David Tardon [Tue, 23 Jun 2020 11:58:21 +0000 (13:58 +0200)]
fix mis-merge
Resolves: #
1848421
Michal Sekletár [Fri, 3 Apr 2020 07:13:51 +0000 (09:13 +0200)]
test: add test for cgroup v2 freezer support
(cherry picked from commit
d446ae89c0168f17eed7135ac06df3b294b3fcc6)
Related: #
1830861
Michal Sekletár [Fri, 5 Jun 2020 13:23:12 +0000 (15:23 +0200)]
core: fix the return value in order to make sure we don't dipatch method return too early
Actually, it is the same kind of problem as in
d910f4c . Basically, we
need to return 1 on success code path in slice_freezer_action().
Otherwise we dispatch DBus return message too soon.
Fixes: #16050
(cherry picked from commit
2884836e3c26fa76718319cdc6d13136bbc1354d)
Related: #
1830861
Michal Sekletar [Thu, 7 May 2020 15:23:30 +0000 (17:23 +0200)]
core/cgroup: fix return value of unit_cgorup_freezer_action()
We should return 0 only if current freezer state, as reported by the
kernel, is already the desired state. Otherwise, we would dispatch
return dbus message prematurely in bus_unit_method_freezer_generic().
Thanks to Frantisek Sumsal for reporting the issue.
(cherry picked from commit
d910f4c2b2542544d7b187a09605da7a0f220837)
Related: #
1830861
Michal Sekletár [Wed, 29 Apr 2020 15:53:43 +0000 (17:53 +0200)]
core: introduce support for cgroup freezer
With cgroup v2 the cgroup freezer is implemented as a cgroup
attribute called cgroup.freeze. cgroup can be frozen by writing "1"
to the file and kernel will send us a notification through
"cgroup.events" after the operation is finished and processes in the
cgroup entered quiescent state, i.e. they are not scheduled to
run. Writing "0" to the attribute file does the inverse and process
execution is resumed.
This commit exposes above low-level functionality through systemd's DBus
API. Each unit type must provide specialized implementation for these
methods, otherwise, we return an error. So far only service, scope, and
slice unit types provide the support. It is possible to check if a
given unit has the support using CanFreeze() DBus property.
Note that DBus API has a synchronous behavior and we dispatch the reply
to freeze/thaw requests only after the kernel has notified us that
requested operation was completed.
(cherry picked from commit
d9e45bc3abb8adf5a1cb20816ba8f2d2aa65b17e)
Resolves: #
1830861
Zbigniew Jędrzejewski-Szmek [Thu, 23 Apr 2020 12:53:54 +0000 (14:53 +0200)]
shared: add NULL callback check in one more place
Follow-up for
9f65637308.
(cherry picked from commit
d3d53e5cd143bf96d1eb0e254f16fa8d458d38ce)
Related: #
1830861
Balint Reczey [Wed, 22 Apr 2020 07:51:53 +0000 (09:51 +0200)]
shared: Don't try calling NULL callback in bus_wait_for_units_clear
BugLink: https://bugs.launchpad.net/bugs/1870930
(cherry picked from commit
9f656373082cb13542b877b4f5cb917ef5ff329c)
Related: #
1830861
Zbigniew Jędrzejewski-Szmek [Wed, 17 Jul 2019 07:39:39 +0000 (09:39 +0200)]
shared: fix assert call
Fixup for
3572d3df8f8. Coverity CID#
1403013.
(cherry picked from commit
60b17d6fcd988c9995b7d1476d3aba1c4cbbfddd)
Related: #
1830861
Lennart Poettering [Mon, 1 Apr 2019 16:54:59 +0000 (18:54 +0200)]
shared: add generic logic for waiting for a unit to enter some state
This is a generic implementation of a client-side logic of waiting until
a unit enters or leaves some state.
This is a more generic implementation of the WaitContext logic currently
in systemctl.c, and is supposed to replace it (a later commit does
this). It's similar to bus-wait-for-jobs.c and we probably should fold
that one into it later on.
This code is more powerful and cleaner than the WaitContext logic
however. In addition to waiting for a unit to exit this also allows us
to wait for a unit to leave the "maintainance" state.
This commit only implements the generic logic, and adds no users of it
yet.
(cherry picked from commit
3572d3df8f822d4cf1601428401a837f723771cf)
Related: #
1830861
Michal Sekletár [Wed, 29 Apr 2020 15:40:22 +0000 (17:40 +0200)]
basic/cgroup-util: introduce cg_get_keyed_attribute_full()
Callers of cg_get_keyed_attribute_full() can now specify via the flag whether the
missing keyes in cgroup attribute file are OK or not. Also the wrappers for both
strict and graceful version are provided.
(cherry picked from commit
25a1f04c682260bb9b96e25bdf33665d6172db98)
Related: #
1830861
Michal Sekletár [Fri, 3 Apr 2020 07:13:59 +0000 (09:13 +0200)]
selinux: do preprocessor check only in selinux-access.c
This has the advantage that mac_selinux_access_check() can be used as a
function in all contexts. For example, parameters passed to it won't be
reported as unused if the "function" call is replaced with 0 on SELinux
disabled builds.
(cherry picked from commit
08deac6e3e9119aeb966375f94695e4aa14ffb1c)
Related: #
1830861
Anita Zhang [Wed, 10 Jun 2020 08:18:00 +0000 (01:18 -0700)]
core: don't consider SERVICE_SKIP_CONDITION for abnormal or failure restarts
Fixes: #16115
(cherry picked from commit
bb9244781c6fc7608f7cac910269f8987b8adc01)
Related: #
1737283
Jan Synacek [Wed, 19 Feb 2020 14:36:13 +0000 (15:36 +0100)]
meson: allow setting the version string during configuration
Very loosely based on upstream commits
e1ca734edd17a90a325d5b566a4ea96e66c206e5
and
681bd2c524ed71ac04045c90884ba8d55eee7b66.
Resolves: #
1804252
Chris Down [Mon, 30 Sep 2019 17:36:13 +0000 (18:36 +0100)]
cgroup: Mark memory protections as explicitly set in transient units
A later version of the DefaultMemory{Low,Min} patch changed these to
require explicitly setting memory_foo_set, but we only set that in
load-fragment, not dbus-cgroup.
Without these, we may fall back to either DefaultMemoryFoo or
CGROUP_LIMIT_MIN when we really shouldn't.
(cherry picked from commit
184e989d7da4648bd36511ffa28a9f2b469589d1)
Related: #
1763435
Chris Down [Mon, 30 Sep 2019 17:25:09 +0000 (18:25 +0100)]
cgroup: Respect DefaultMemoryMin when setting memory.min
This is an oversight from https://github.com/systemd/systemd/pull/12332.
Sadly the tests didn't catch it since it requires a real cgroup
hierarchy to see, and it wasn't seen in prod since we're only currently
using DefaultMemoryLow, not DefaultMemoryMin. :-(
(cherry picked from commit
64fe532e90b3e99bf7821ded8a1107c239099e40)
Related: #
1763435
Chris Down [Mon, 30 Sep 2019 17:24:26 +0000 (18:24 +0100)]
cgroup: Check ancestor memory min for unified memory config
Otherwise we might not enable it when we should, ie. DefaultMemoryMin is
set in a parent, but not MemoryMin in the current unit.
(cherry picked from commit
7c9d2b79935d413389a603918a711df75acd3f48)
Related: #
1763435
Chris Down [Fri, 3 May 2019 12:40:11 +0000 (08:40 -0400)]
cgroup: Test that it's possible to set memory protection to 0 again
The previous commit fixes this up, and this should prevent it
regressing.
(cherry picked from commit
465ace74d9820824968ab5e82c81e42c2f1894b0)
Related: #
1763435
Chris Down [Fri, 3 May 2019 12:32:41 +0000 (08:32 -0400)]
cgroup: Support 0-value for memory protection directives
These make sense to be explicitly set at 0 (which has a different effect
than the default, since it can affect processing of `DefaultMemoryXXX`).
Without this, it's not easily possible to relinquish memory protection
for a subtree, which is not great.
(cherry picked from commit
22bf131be278b95a4a204514d37a4344cf6365c6)
Related: #
1763435
Chris Down [Fri, 3 May 2019 12:19:05 +0000 (08:19 -0400)]
cgroup: Readd some plumbing for DefaultMemoryMin
Somehow these got lost in the previous PR, rendering DefaultMemoryMin
not very useful.
(cherry picked from commit
7e7223b3d57c950b399352a92e1d817f7c463602)
Related: #
1763435
Chris Down [Tue, 30 Apr 2019 18:22:04 +0000 (14:22 -0400)]
cgroup: Polish hierarchically aware protection docs a bit
I missed adding a section in `systemd.resource-control` about
DefaultMemoryMin in #12332.
Also, add a NEWS entry going over the general concept.
(cherry picked from commit
acdb4b5236f38bbefbcc4a47fdbb9cd558b4b5c5)
Related: #
1763435
Chris Down [Tue, 16 Apr 2019 17:44:05 +0000 (18:44 +0100)]
unit: Add DefaultMemoryMin
(cherry picked from commit
7ad5439e0663e39e36619957fa37eefe8026bcab)
Related: #
1763435
Chris Down [Tue, 16 Apr 2019 17:14:09 +0000 (18:14 +0100)]
cgroup: Create UNIT_DEFINE_ANCESTOR_MEMORY_LOOKUP
This is in preparation for creating unit_get_ancestor_memory_min.
(cherry picked from commit
6264b85e92aeddb74b8d8808a08c9eae8390a6a5)
Related: #
1763435
Chris Down [Thu, 28 Mar 2019 12:50:50 +0000 (12:50 +0000)]
cgroup: Implement default propagation of MemoryLow with DefaultMemoryLow
In cgroup v2 we have protection tunables -- currently MemoryLow and
MemoryMin (there will be more in future for other resources, too). The
design of these protection tunables requires not only intermediate
cgroups to propagate protections, but also the units at the leaf of that
resource's operation to accept it (by setting MemoryLow or MemoryMin).
This makes sense from an low-level API design perspective, but it's a
good idea to also have a higher-level abstraction that can, by default,
propagate these resources to children recursively. In this patch, this
happens by having descendants set memory.low to N if their ancestor has
DefaultMemoryLow=N -- assuming they don't set a separate MemoryLow
value.
Any affected unit can opt out of this propagation by manually setting
`MemoryLow` to some value in its unit configuration. A unit can also
stop further propagation by setting `DefaultMemoryLow=` with no
argument. This removes further propagation in the subtree, but has no
effect on the unit itself (for that, use `MemoryLow=0`).
Our use case in production is simplifying the configuration of machines
which heavily rely on memory protection tunables, but currently require
tweaking a huge number of unit files to make that a reality. This
directive makes that significantly less fragile, and decreases the risk
of misconfiguration.
After this patch is merged, I will implement DefaultMemoryMin= using the
same principles.
(cherry picked from commit
c52db42b78f6fbeb7792cc4eca27e2767a48b6ca)
Related: #
1763435
Filipe Brandenburger [Wed, 12 Sep 2018 06:15:09 +0000 (23:15 -0700)]
test: remove support for suffix in get_testdata_dir()
Instead, use path_join() in callers wherever needed.
(cherry picked from commit
55890a40c3ec0c061c04d1395a38c26313132d12)
Related: #
1763435
Yu Watanabe [Mon, 6 Aug 2018 04:42:14 +0000 (13:42 +0900)]
core: introduce cgroup_add_device_allow()
(cherry picked from commit
fd870bac25c2dd36affaed0251b5a7023f635306)
Related: #
1763435
Tejun Heo [Sat, 9 Jun 2018 00:33:14 +0000 (17:33 -0700)]
core: add MemoryMin
The kernel added support for a new cgroup memory controller knob memory.min in
bf8d5d52ffe8 ("memcg: introduce memory.min") which was merged during v4.18
merge window.
Add MemoryMin to support memory.min.
(cherry picked from commit
484226357789991de0b3363beb69258be06b4c92)
Resolves: #
1763435
David Rheinsberg [Thu, 14 Mar 2019 12:34:13 +0000 (13:34 +0100)]
sd-bus: skip sending formatted UIDs via SASL
The dbus external authentication takes as optional argument the UID the
sender wants to authenticate as. This uid is purely optional. The
AF_UNIX socket already conveys the same information through the
auxiliary socket data, so we really don't have to provide that
information.
Unfortunately, there is no way to send empty arguments, since they are
interpreted as "missing argument", which has a different meaning. The
SASL negotiation thus changes from:
AUTH EXTERNAL <uid>
NEGOTIATE_UNIX_FD (optional)
BEGIN
to:
AUTH EXTERNAL
DATA
NEGOTIATE_UNIX_FD (optional)
BEGIN
And thus the replies we expect as a client change from:
OK <server-id>
AGREE_UNIX_FD (optional)
to:
DATA
OK <server-id>
AGREE_UNIX_FD (optional)
Since the old sd-bus server implementation used the wrong reply for
"AUTH" requests that do not carry the arguments inlined, we decided to
make sd-bus clients accept this as well. Hence, sd-bus now allows
"OK <server-id>\r\n" replies instead of "DATA\r\n" replies.
Signed-off-by: David Rheinsberg <david.rheinsberg@gmail.com>
(cherry picked from commit
1ed4723d38cd0d1423c8fe650f90fa86007ddf55)
Resolves: #
1838081