Commit Graph
9757 Commits
Author SHA1 Message Date
Mike Yuan 0064290a54 core/unit: introduce unit_set_freezer_state, make logging consistent
Also, emit PropertiesChanged signal for FreezerState too.

Fixes #31115
2024-07-17 18:14:32 +02:00
Mike Yuan a9dc196179 core/cgroup: skip freezer action wholly if current == objective 2024-07-17 18:14:31 +02:00
Mike Yuan 27344f9acf core/cgroup: replace hardcoded state set with freezer_state_finish()
This makes code simpler and more readable.
2024-07-17 18:14:31 +02:00
Mike Yuan 54e1f676a2 core/unit: rename a few more vars for unit_next_freezer_state() 2024-07-17 18:14:31 +02:00
Mike Yuan aba5e4660f core/unit: use switch for unit_next_freezer_state 2024-07-17 17:25:23 +02:00
Mike Yuan f27f461b01 core/unit: rename freezer "target" to "objective" 2024-07-17 17:25:23 +02:00
Mike Yuan f375a9686f core/slice: simplify slice_freezer_action a bit 2024-07-17 17:25:23 +02:00
Mike Yuan b21bebbe70 core: make unit_can_freeze take const Unit* 2024-07-17 17:25:22 +02:00
Mike Yuan 21fed6eaec core,unit-def: use our usual way of asserting enums 2024-07-17 17:25:22 +02:00
Mike Yuan e2f81f8d40 core/unit: drop pointless unit_freezer_state wrapper 2024-07-17 17:25:22 +02:00
Mike Yuan 4e8b11ca16 core/dbus-unit: use UNIT_IS_LOAD_ERROR where appropriate 2024-07-17 17:25:20 +02:00
Matteo Croce b22befa9f5 use O_PATH to obtain cgroupfs fd
We get a fd to cgroupfs just to avoid it being umounted, O_PATH
is enough, use it instead of O_RDONLY.
2024-07-16 15:03:37 +02:00
Matteo Croce 572e163ef5 use O_PATH when getting cgroup fd
O_PATH mode is enough to attach a bpf program to a cgroup, use it
instead of O_RDONLY
2024-07-16 15:03:37 +02:00
Lennart Poettering 25ff515b39 sd-varlink: make our internal Varlink API public as sd-varlink.[ch]
It's time. sd-json was already done earlier in this cycle, let's now
make sd-varlink public too.

This is mostly just a search/replace job of epical proportions.

I left some functions internal (mostly IDL handling), and I turned some
static inline calls into regular calls.
2024-07-16 11:57:32 +02:00
Mike Yuan 87c4f0f824 core/main: refuse to run if /usr/ is not populated
The support for split-usr has been dropped in v255.
So, rather than emitting a warning, let's refuse
such unsupported setups completely.
2024-07-13 22:58:24 +02:00
Mike Yuan 2bff236e70 core/main: move capability_ambient_set_apply() to initialize_runtime()
This is preparation for (user) manager, and we apply capability
settings for the system manager in initialize_runtime() too.
2024-07-13 22:58:24 +02:00
Mike Yuan 9100325690 core/main: respect skip_setup for RUNTIME_SCOPE_USER too 2024-07-13 22:58:24 +02:00
Mike Yuan 0acf4dfef5 core/main: merge second RUNTIME_SCOPE_SYSTEM block into switch above 2024-07-13 22:58:23 +02:00
Mike Yuan 20817cd272 core/main: modernize setup_os_release() a bit 2024-07-13 22:58:23 +02:00
Mike Yuan 0c7a2a5542 core/main: cast ignored retval of machine_id_setup() to void 2024-07-13 22:58:23 +02:00
Mike Yuan efa7a5cfe4 core/import-creds: use proc_cmdline_get_bool() 2024-07-13 22:58:23 +02:00
Mike Yuan 497b17bbad core/import-creds: use FOREACH_ARRAY and RET_GATHER where appropriate 2024-07-13 22:58:23 +02:00
Merlin Jehli 274a38c79a machine-id: Add cmdline argument to use VM behaviour on bare metal (#32086)
Closes #30707
2024-07-13 18:00:16 +02:00
Luca Boccassi e21333611a Merge pull request #33711 from dtardon/masked-unit-NeedDaemonReload
Fix `NeedDaemonReload=` for masked units with drop-ins
2024-07-13 14:22:05 +02:00
Mike Yuan 3addeada79 core/execute-serialize: fix deserialization for apparmor_profile_ignore
Follow-up for 99a1cdc951
2024-07-13 00:15:12 +02:00
Mike Yuan 11b3775f51 core/unit: ignore dropins for masked units completely when checking need_reload
Follow-up for 19a44dfe45

If a drop-in is set from upper level, e.g. global unit_type.d/,
even if a unit is masked, its dropin_paths would still be partially
populated. However, unit_need_daemon_reload() would always
compare u->dropin_paths with empty strv in case of masked units,
resulting in it always returning true. Instead, let's ignore
dropins entirely here.

Fixes #33672
2024-07-12 15:59:36 +02:00
Lennart Poettering 0bd7217634 signal-util: use common definitions for ignore + default "struct sigaction"
We use this at various places, let's unify this in one global constant.

This changes flags in crash-handler.c in a tiny irrelevant way: we ask
syscalls to be continued on signal arrival, which we previously didn't.
But that shouldn't change anything, the only thing we'll do in the
relevant process is call raise(), and that's it, hence there definitely
are no syscalls to restart or not to restart.
2024-07-12 08:26:15 +02:00
Lennart Poettering 7eedec7307 manager: move is-system check into manager_enable_special_signals()
It's usually how we do this: make the functions robust to be called in
any context, and validate the context in the functions themselves early,
instead of in the caller.
2024-07-12 04:47:19 +02:00
Lennart Poettering 5202ee42d5 import-creds: when we hit ENOENT on SMBIOS 11 do not even debug log
We'll *always* hit ENEOENT when iterating through SMBIOS type #11
fields, on the last one. it's very confusing to debug log about that,
let's just not do it.
2024-07-12 04:45:29 +02:00
Mike Yuan 99a1cdc951 core/execute-serialize: drop duplicate serialization of _ignore flags
These are indicated by the leading '-' in corresponding
label fields already.
2024-07-11 23:36:39 +02:00
Mike Yuan a4eb462fa1 core/meson.build: move various -setup sources out of libcore
They're only used in main.c, i.e. pid1.
2024-07-11 23:34:07 +02:00
Zbigniew Jędrzejewski-Szmek c80c5c20d4 Merge pull request #33599 from keszybz/link-executor-statically
Link executor statically
2024-07-08 12:46:41 +02:00
Ronan Pigott 8bf8c7d83d path: drop IN_ATTRIB from parent directory watches
When watching a given pathspec, systemd unconditionally installs
IN_ATTRIB watches to track the link count of the resolved file. This
way, we are notified if the watched path disappears, even if the
resolved file inode is not removed.

Similarly, systemd installs inotify watches on each parent directory, to
be notified when the specified path appears. However, for these watches
IN_ATTRIB is an unnecessary addition to the mask. In inotify, IN_ATTRIB
on a directory is emitted whenever the attributes of any child changes,
which, for many paths, has the potential to cause a high number of
spurious wakeups in systemd. Let's remove IN_ATTRIB from the mask when
installing watches on the parent directories of the specified path.
2024-07-08 11:58:15 +02:00
Topi Miettinen e81025970f load-fragment: allow MountImages= with paths starting with /dev
For MountImages=, if the source is a block device, it will most likely reside
in /dev. It should be also possible to mount a static device file system in
place of (or part of) /dev. So let's allow paths starting with /dev as an
exception for MountImages=.
2024-07-04 09:36:04 +00:00
Daan De Meyer a7856c8182 load-fragment: Remove faulty assertion
Followup for 453cb5d01e

Fixes the following assertion:

"""
x86 130 ~/systemd ❯❯❯ meson compile -C build
ninja: Entering directory `/home/tfleig/systemd/build'
[2/5] Generating export-dbus-interfaces with a custom command
FAILED: interfaces
/home/tfleig/systemd/tools/dbus_exporter.py interfaces /home/tfleig/systemd/build/systemd /home/tfleig/systemd/build/systemd-homed /home/tfleig/systemd/build/systemd-hostnamed /home/tfleig/systemd/build/systemd-importd /home/tfleig/systemd/build/systemd-localed /home/tfleig/systemd/build/systemd-logind /home/tfleig/systemd/build/systemd-machined /home/tfleig/systemd/build/systemd-networkd /home/tfleig/systemd/build/systemd-oomd /home/tfleig/systemd/build/systemd-portabled /home/tfleig/systemd/build/systemd-resolved /home/tfleig/systemd/build/systemd-timedated
Assertion '__unique_prefix__expr_91' failed at src/core/load-fragment.c:3912, function config_parse_tasks_max(). Aborting.
Traceback (most recent call last):
  File "/home/tfleig/systemd/tools/dbus_exporter.py", line 45, in <module>
    main()
  File "/home/tfleig/systemd/tools/dbus_exporter.py", line 42, in main
    extract_interfaces_xml(args.output, exe)
  File "/home/tfleig/systemd/tools/dbus_exporter.py", line 9, in extract_interfaces_xml
    proc = run(
  File "/usr/lib64/python3.9/subprocess.py", line 528, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '[PosixPath('/home/tfleig/systemd/build/systemd'), '--bus-introspect', 'list']' died with <Signals.SIGABRT: 6>.
[4/5] Generating man/systemd.index.xml with a custom command
ninja: build stopped: subcommand failed.
"""
2024-07-03 20:49:44 +02:00
Zbigniew Jędrzejewski-Szmek d59cae6ceb meson: add option to build systemd-executor "statically"
The new link-executor-shared option is similar to the existing
link-udev-shared: when set to false, we link to the static versions of our
internal libraries.

The resulting exuctor binary is fairly large, about as large as libsystemd-core
(14 MB without lto, 8 with lto).

This is intended as a workaround for the fuckup with the pinned executor
binary:
when an upgrade is performed, the package manager will install new version of
the libraries and new version of the code, and some time later reexecute the
managers. This creates a window when the pinned executor binary will fail to
execute. There are two factors which make the issue easier to hit:

- when the distribution uses a finely-grained shared-lib-tag. E.g. Fedora
  uses version-release as the tag, which means that the issue occurs on
  every package upgrade. This is the right thing to do, because the
  ABI of our internal libraries is not stable at all, so replacing the
  library from a different version in place creates a window where our
  programs may crash or misbehave.

- when the distribution doesn't immediately reexec all the managers after
  upgrade. In early versions of systemd, we used to hammer the machine during
  upgrade, doing daemon-reexecs repeatedly. This works, but is ugly and
  wasteful. Doing the reexecs while the upgrade is in progres also creates a
  window where a mix of old and new configs or both is loaded. Users are
  particularly annoyed by those reloads if there is some issue in the
  configuration causing us to emit warnings on every reexec. Doing the
  reexecs once after the new configuration and libraries have been put
  in place is nicer.

The pinning of the executor binary breaks upgrades and in particular
it penalizes the distributions which make use of the features which
were previously added to avoid bugs and inefficiency during upgrades.

When the executor is linked statically, there is a smaller chance that it'll
fail to load libraries. The issue can still occur because other libraries, not
our own, are linked dynamically.
2024-07-03 17:25:26 +02:00
Zbigniew Jędrzejewski-Szmek d0689ee5fb meson: build libsystemd-core via an intermediate static library
By itself, this is not useful. I'm making this a separate commit to
make debugging easier. It turns out that meson does static libraries
using references, so the "static library" a tiny stub stub that refers
to the object files on disk and this has negligible cost:
$ ls -lhd build/src/core/libsystemd-core-257.{a,so}
-rw-r--r-- 1 zbyszek zbyszek  36K Jul  3 16:54 build/src/core/libsystemd-core-257.a
-rwxr-xr-x 1 zbyszek zbyszek 6.1M Jul  3 16:54 build/src/core/libsystemd-core-257.so
2024-07-03 17:25:26 +02:00
Mike Yuan 33a06bbc74 core/main: add an assertion to ensure user managers won't initiate destructive/system-wide operation 2024-07-03 10:12:53 +02:00
Mike Yuan 6851abe403 core/manager: invoke special targets on signal only for system manager 2024-07-03 10:11:25 +02:00
Mike Yuan 236cd48546 core/dbus-manager: refuse SoftReboot() for user managers
Otherwise, busctl --user call ... SoftReboot results in
user manager broadcasting signal and initiating soft-reboot...
2024-07-03 10:11:24 +02:00
Mike Yuan 541aadff97 core/dbus-manager: check for runtime scope first for system-wide operations
It's pointless to do selinux or /run/ space checks
for user managers.
2024-07-03 10:11:24 +02:00
Mike Yuan a85fe612d7 core/dbus-manager: use sd_bus_error_set() rather than _setf() where appropriate
Also, there can only be one system manager.
2024-07-03 10:11:24 +02:00
Mike Yuan b80ae4bcfd core/dbus-manager: use path_simplify_alloc() for root and init paths 2024-07-03 10:11:24 +02:00
Mike Yuan ff21827fee core/dbus-manager: use PidRef for log_caller()
This is only for logging, but since we lookup for the unit
here, let's try to be accurate.
2024-07-03 10:11:21 +02:00
Luca Boccassi c3f0f6f8bd core: try again bind mounting if the destination was already created
If the destination mount point is on a shared filesystem and is
missing on the first attempt, we try to create it, but then
fail with -EEXIST if something else created it in the meanwhile.
Enter the retry logic on EEXIST, as we can just use the mount
point if it was already created.

Fixes https://github.com/systemd/systemd/issues/29690
2024-06-30 00:44:03 +02:00
Mike Yuan 7fee3dd4c6 Merge pull request #33258 from YHNdnzj/cg-runtime-accounting
core/cgroup: various fixes for accounting
2024-06-29 16:11:44 +02:00
Luca Boccassi 2e1203ddbe Merge pull request #30360 from keszybz/nscd-drop
Drop support for nscd
2024-06-29 10:36:16 +02:00
Luca Boccassi 317b0255ed Merge pull request #33536 from teknoraver/hashmap_ensure_replace
Hashmap ensure replace
2024-06-29 10:31:11 +02:00
Mike Yuan 740cd1e0f2 core/unit: follow merged units before updating SourcePath= timestamp too
Currently, we only follow merged units for unit_load_dropin() call.
But if the unit is an alias, we should always perform operations
on the "canonical" unit.
2024-06-28 21:10:16 +02:00
Matteo Croce e1226a9b48 Use hashmap_ensure_replace()
Use the new function `hashmap_ensure_replace()` where we're using
`hashmap_ensure_allocated()` and `hashmap_ensure_replace()`.

Signed-off-by: Matteo Croce <teknoraver@meta.com>
2024-06-28 19:07:24 +02:00