summaryrefslogtreecommitdiffstats
path: root/units (follow)
Commit message (Collapse)AuthorAgeFilesLines
...
* | battery-check: allow to skip by passing systemd.battery-check=0Yu Watanabe2023-07-141-0/+1
|/
* unit: also condition out systemd-backlight in initrdYu Watanabe2023-07-051-0/+2
| | | | | | | Follow-up for 9173d31dfea5c2b05ff08480972c499cb7aac940. The systemd-backlight@.service also save/restore state but the data is in /var/.
* units: condition out a few services in the initrdLennart Poettering2023-07-055-0/+7
| | | | | | | | | | | | | | | | Let's make our units more robust to being added to an initrd: 1. systemd-boot-update only makes sense if sd-boot is available in /usr/ to copy into the ESP. This is generally not the case in initrds, and even if it was, we shouldn't update the ESP from the initrd, but from the host instead. 2. The rfkill services save/restore rfkill state, but that information is only available once /var/ is mounted, which generally happens after the initrd transition. 3. utmp management is partly in /var/, and legacy anyway, hence don't bother with it in the initrd.
* units: skip systemd-battery-check in environments where it doesn't make senseLennart Poettering2023-07-031-1/+3
| | | | | | Let's condition the service so that it doesn't run where we aren't directly run on baremetal, or where no power sources are discovered at all.
* battery-check: rework unitLennart Poettering2023-06-302-3/+5
| | | | | | | | | | | | | | Let's rename the unit to systemd-battery-check.service. We usually want to name our own unit files like our tools they wrap, in particular if they are entirely defined by us (i.e. not just wrappers of foreign concepts) While we are at it, also hook this in from initrd.target, and order it against initrd-root-device.target so that it runs before the root device is possibly written to (i.e. mounted or fsck'ed). This is heavily inspired by @aafeijoo-suse's PR #28208, but quite different ;-)
* battery-check: several follow-upsYu Watanabe2023-06-291-1/+1
| | | | | | | | | | | | | | | | | | Follow-ups for e3d4148d50909119c4e9327e6ad96d3ca7f4661a. - add reference to initrd-battery-check.service in man page, and move its section from 1 to 8, - add link to man page in help message, - introduce ERRNO_IS_NO_PLYMOUTH(), - propagate error in battery_check_send_plymouth_message(), - rename battery_check_send_plymouth_message() -> plymouth_send_message(), - return earlier when the first battery level check passed to reduce indentation, - fix potential use of invalid fd on battery restored, - do not use emoji for /dev/console, - add simple test (mostly for coverity), etc, etc...
* PID1: detect battery level in initrd and if low refuse continuing to boot, ↵OMOJOLA JOSHUA2023-06-282-0/+25
| | | | print message and shut down.
* hibernate-resume: rework to follow the logic of sleep.c and useMike Yuan2023-06-232-26/+0
| | | | | | main-func.h Preparation for #27247
* tree-wide: use https for the 0pointer.de doc linksFrantisek Sumsal2023-06-234-4/+4
|
* meson: merge two similar loops for unit filesYu Watanabe2023-06-221-306/+660
| | | | | | | | This also merges two arrays units and in_units, and uses dictionary for declaring units. This also fixes the condition handling, that previously only two conditions were handled and rests were ignored.
* units: Use built-in halt and kexec features instead of systemctlDaan De Meyer2023-06-222-8/+2
|
* units: Use ImportCredential= where applicableDaan De Meyer2023-06-088-26/+19
|
* units: change TimeoutSec=0 to TimeoutSec=infinityLennart Poettering2023-06-066-6/+6
| | | | | | | Follow-up for #27936 Let's also update a bunch of static unit files, matching what we just did for the generators.
* pid1: add "soft-reboot" reboot methodLennart Poettering2023-06-023-0/+36
| | | | | | | | | | | | | | | This adds a new mechanism for rebooting, a form of "userspace reboot" hereby dubbed "soft-reboot". It will stop all services as in a usual shutdown, possibly transition into a new root fs and then issue a fresh initial transaction. The kernel is not replaced. File descriptors can be passed over, thus opening the door for leaving certain resources around between such reboots. Usecase: this is an extremely quick way to reset userspace fully when updating image based systems, without going through a full hardware/firmware/boot loader/kernel/initrd cycle. It minimizes "grayout time" for OS updates. (In particular when combined with kernel live patching)
* units: don't stop blockdev@.target unit at shutdownLennart Poettering2023-06-011-0/+1
| | | | | | | | | | | We want that cryptsetup/veritysetup devices can stick around until the very end, as well as the users of them which might depend on blockdev@.target for the devices. Hence leave the targets around till the very end. Note that their runtime is managed via StopWhenUnneeded= anyway, hence unless their are volumes that actually survive still the very end they target units will still be stopped.
* units: set DefaultDependencies=no for veritysetup sliceLennart Poettering2023-06-013-1/+15
| | | | | | | | | | | This mimics what we already have for cryptsetup services: the slice they are placed in (they have their own slice since that's what we do by default for instantiated services) shouldn't conflict with shutdown.target, so that veritysetup services can stay around until the very end (which is what we want for the root and usr verity volumes). It's literally just a copy of the same unit we already have for cryptsetup, just with an updated description string.
* units: pull in local-fs-pre.target from systemd-tmpfiles-setup-dev.serviceZbigniew Jędrzejewski-Szmek2023-05-311-0/+1
| | | | | | | | | local-fs-pre.target is a passive unit, which means that it is supposed to be pulled in by everything that is ordered before it. We had Before=local-fs-pre.target, so add Wants= too. I don't expect this to change anything. Instead, just make things follow the docs so it's easier to reason about the dependency set.
* Merge pull request #27787 from keszybz/firstboot-synchronous-restartMike Yuan2023-05-261-2/+2
|\ | | | | firstboot: make restart of vconsole-setup synchronuous
| * units: order systemd-firstboot after systemd-tmpfiles-setupZbigniew Jędrzejewski-Szmek2023-05-261-1/+1
| | | | | | | | | | | | | | | | | | We may copy files from factory to /etc. The default mkosi config has factory/etc/vconsole.conf. systemd-firstboot would race with tmpfiles-setup, and sometimes ask for the keymap, and sometimes not. I guess that if there are files in factory, we shouldn't ask the user for the same configuration.
| * firstboot: synchronously wait for systemd-vconsole-setup.service/restart jobZbigniew Jędrzejewski-Szmek2023-05-261-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | Requested in https://github.com/systemd/systemd/pull/27755#pullrequestreview-1443489520. I dropped the info message about the job being requested, because we get fairly verbose logs from starting the unit, and the additional message isn't useful. In the unit, the ordering before systemd-vconsole-setup.service is dropped, because now it needs to happen in parallel, while systemd-firstboot.service is running. This means that we may potentially execute vconsole-setup twice, but it's fairly quick, so this doesn't matter much.
* | units: Shut down networkd and resolved on switch-rootDaan De Meyer2023-05-262-4/+4
|/ | | | | | | | | | Let's explicitly order these against initrd-switch-root.target, so that they are properly shut down before we switch root. Otherwise, there's a race condition where networkd might only shut down after switching root and after we've already we've loaded the unit graph, meaning it won't be restarted in the rootfs. Fixes #27718
* firstboot: process the root account after sysusers created itZbigniew Jędrzejewski-Szmek2023-05-231-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We would create root account from sysusers or from firstboot, depending on which one ran earlier. Since firstboot offers more options, in particular can set the root password, we needed to order it earlier. This created an ugly ordering requirement: systemd-sysusers.service > systemd-firstboot.service > ... > systemd-remount-fs.service > systemd-tmpfiles-setup-dev.service > systemd-sysusers.service We want sysusers.service to create basic users, so we can create nodes in dev, so we can operate on block devices and such, so that we can resize and remount things. But at the same time, systemd-firstboot.service can only work if it is run early, before systemd-sysusers.service has created /etc/passwd. We can't have it both ways: the units that want to have a fully writable root file system cannot be ordered before units which are required to do file system preparation. Instead of trying to order firstboot very early, let's let it do its thing even if it is started later. Instead of refusing to create to the root account if /etc/passwd and /etc/shadow exist, actually check if the account is configured. Now sysusers writes root account with password PASSWORD_UNPROVISIONED ("!unprovisioned"), and then firstboot checks for this, and will configure root in this case. This allows sysusers to be executed earlier (or accounts to be set up earlier in another way). This effectively reverts b825ab1a99b69956057c79838faaf7b44afee474.
* units: create /dev with --graceful first, allow sysusers to run laterZbigniew Jędrzejewski-Szmek2023-05-232-3/+2
| | | | | | | | | | | | | | | | | We want to call systemd-tmpfiles-setup-dev.service to create /dev/fuse and other device nodes so that module probing will work. But it is possible that when we're in first boot, some users or groups need to be created by systemd-sysusers first. But it is also possible that systemd-sysusers cannot actually execute configuration because the root partition is not fully writable yet. So let systemd-tmpfiles-setup-dev.service run earlier, possibly without all users and groups in place. Since systemd-tmpfiles-setup-dev.service writes to /dev only, it doesn't care how the root partition is mounted. In this early run, some some nodes might be created with default permissions (i.e. not accessible to non-root users or groups). This should be OK for the early boot phase. Afterwards, we let systemd-tmpfiles-setup.service execute full configuration. We will configure any files in /dev twice, but considering that there's only a few of them and that the second run should only adjust ownership and permissions, this should be OK. This way, we avoid the dependency loop.
* units: make sure proc-sys-binfmt_misc.automount is actually stoppedZbigniew Jędrzejewski-Szmek2023-05-231-0/+1
| | | | | | | As with other units, stopping of the automount requires actual work, and without the ordering dependency systemd might not execute the stop job before shutdown.target is reached and units ordered after that are executed.
* units/systemd-repart: stop pretending that root config is executed in the initrdZbigniew Jędrzejewski-Szmek2023-05-231-5/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I have a system with /usr/lib/repart.d/50-root.conf with GrowFileSystem=yes. The partition wouldn't be resized in the initrd, because ConditionDirectoryNotEmpty=|/sysusr/usr/lib/repart.d was evaluated very early, before /sysroot was mounted. There was no ordering dependency between systemd-repart.service and sysroot.mount. (There was After=initrd-usr-fs.target, but it seems to be only referred to by systemd-fstab-generator, which in my case doesn't even run, because there's no fstab.) But in fact, we neeed to run systemd-repart in the initrd only in limited circumstances: when we need to create the root device based on config under sysusr.mount. If there is config on the root device, it can be executed in the host system, early during boot. Thus, let's remove the condition on /sysroot/…. Without an ordering dependency on sysroot.mount, it was subject to a race condition anyway. (A race condition with a low probability of "winning", because systemd-repart.service has no dependencies, but sysroot.mount requires a device to be detected and the mount to happen.) The other problem was that systemd-repart.service didn't have the ordering wrt. initrd-switch-root.target, so it was subject to the same race condition that was fixed for other units in 7c0e2b555968d70ac563a37e32a6931ee90961a6. (If the systemd-repart.service/stop job is slow, we could end up not restarting systemd-repart.service in the host system.) With the changes here, I see systemd-repart.service/start running twice: in the initrd it is skipped because the conditions fail, and then in the host system it runs normally. Note: support for /sysroot is retained in systemd-repart code. I don't see a strong reason to remove it, since it may still be useful to people invoking repart in the initrd in other circumstances.
* units: do more reordering of ordering configZbigniew Jędrzejewski-Szmek2023-05-2318-45/+80
| | | | | | | | | | | | | No functional change, just a cleanup to make the subsequent changes easier to see. This is a continuation of 9810e419425263bde86787bc21251f1ad3c35628 > The block is reordered and split to have: > 1. description + documentation > 2. (optionally) conditions > 3. all the dependencies The dependencies for shutdown.target are listed separately because they are the other deps are for startup, and shutdown.target only matter much later.
* units: order sysinit.target, debug-shell.service after systemd-vconsole-setupZbigniew Jędrzejewski-Szmek2023-05-192-0/+2
| | | | | | | | | | | | | | Previous patch to add an implicit dependency effectively orders various getty services after systemd-vconsole-setup.service. But I think it's cleaner to also order the service before sysinit.target, like it was before 8125e8d38e3aa099c7dce8b0161997b8842aebdc. There might be units which don't do use TTYVHangup= but would like to have the console fully initialized. Also, add a manual ordering to debug-shell.service, because it has ImplicitDependencies=no. This might delay debug-shell.service a bit, but systemd-vconsole-setup.service has no dependencies and should be very quick, so this should not be noticable in practice. Without the ordering, the terminal might not have a key map loaded, making debug-shell.service hard to use.
* units: order getty units after getty-pre.target unconditionallyZbigniew Jędrzejewski-Szmek2023-05-192-4/+4
| | | | | | | Those two units had this ordering conditionalized on HAVE_SYSV_COMPAT. This seems strange. 45e27532971ac84e835a2879df510a581f933fcd added the ordering differently for those two files without any comment, and I think it was just pasted or scripted erroneously.
* unit: add conditions and deps to make oomd.socket and .service consistentYu Watanabe2023-05-191-1/+7
| | | | Fixes #27690.
* Revert "units: Add missing dependencies on initrd-switch-root.target"Daan De Meyer2023-05-158-16/+16
| | | | This reverts commit f0ad3e6b9652fe785245934ff8604cc897d3b8f4.
* units: Add missing dependencies on initrd-switch-root.targetDaan De Meyer2023-05-128-16/+16
| | | | | | | These are all services that valid to be run in the initrd, so let's make sure they have the appropriate dependencies on initrd-switch-root.target so that they are stopped when we're about to switch root.
* units: Add CAP_NET_ADMIN condition to systemd-networkd-wait-online@.service ↵Daan De Meyer2023-05-091-0/+1
| | | | | | | as well It was added to CAP_NET_ADMIN but we forgot to add it to the template service as well.
* units: add/fix Documentation= about bus interfaceYu Watanabe2023-05-084-1/+4
|
* core/systemctl: when switching root default to /sysroot/Lennart Poettering2023-04-291-1/+1
| | | | | | | | | We hardcode the path the initrd uses to prepare the final mount point at so many places, let's also imply it in "systemctl switch-root" if not specified. This adds the fallback both to systemctl and to PID 1 (this is because both to — different – checks on the path).
* nspawn: port over to /supervisor/ subcgroup being delegated to nspawnLennart Poettering2023-04-271-0/+1
| | | | | | Let's make use of the new DelegateSubgroup= feature and delegate the /supervisor/ subcgroup already to nspawn, so that moving the supervisor process there is unnecessary.
* udev: port to DelegateSubgroup=Lennart Poettering2023-04-271-0/+1
|
* units: make system service manager create init.scope subcgroup for user ↵Lennart Poettering2023-04-271-0/+1
| | | | | | | | service manager This one is basically for free, since the service manager is already prepared for being invoked in init.scope. Hence let's start it in the right cgroup right-away.
* units: restrict hugepages fs a bitLennart Poettering2023-04-271-0/+1
| | | | | | | | | | suid binaries and device nodes should not be placed there, hence forbid it. Of all the API VFS we mount from PID 1 or via a unit file this one is the only one where we didn't add MS_NODEV/MS_NOSUID. Let's address that, since there's really no reason why device nodes or suid binaries would be placed in hugetlbfs.
* Support /etc/system-update for OSTree systemsEric Curtin2023-04-251-1/+3
| | | | | | This is required when / is immutable and cannot be written at runtime. Co-authored-by: Richard Hughes <richard@hughsie.com>
* Merge pull request #25608 from poettering/dissect-moarLennart Poettering2023-04-121-0/+1
|\ | | | | dissect: add dissection policies
| * discover-image: automaticaly pick up sysext images from /.extra/sysextLennart Poettering2023-04-051-0/+1
| |
* | systemd-sysext/confext.service: Refresh on start/reloadKai Lueke2023-04-062-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When adding a sysext image to the system and manuall merging it, a later "systemctl (re)start systemd-sysext" won't work because "merge" refuses to work when something is merged already. Another problem with "merge" at start plus "unmerge" at stop is that a service restart can't make use of the new MOVE_MOUNT_BENEATH in the future even which would only be available in "refresh". It also prepares us for setting up the merged overlay for the sysroot from the initrd already, which also would lead to the mentioned start problem of the service (One optimization could be to skip the loading but only if we are sure that all images were loaded and weren't modified since - this assumption is hard because early services could want to inject a sysext, too). Use "refresh" on service start to fix the problem that the service can't start as soon as a manual merge was done. Also add a reload action that allows to issue "systemctl reload systemd-sysext" and it will make use of MOVE_MOUNT_BENEATH once we implement this in systemd-sysext refresh (and it's available from the kernel).
* | confext: add the systemd-confext.service filemaanyagoenka2023-04-052-0/+34
|/
* sysext: stop storing under /usr/lib[/local]/extensions/Luca Boccassi2023-03-301-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | sysexts are meant to extend /usr. All extension images and directories are opened and merged in a single, read-only overlayfs layer, mounted on /usr. So far, we had fallback storage directories in /usr/lib/extensions and /usr/local/lib/extensions. This is problematic for three reasons. Firstly, technically, for directory-based extensions the kernel will reject creating such an overlay, as there is a recursion problem. It actively validates that a lowerdir is not a child of another lowerdir, and fails with -ELOOP if it is. So having a sysext /usr/lib/extensions/myextdir/ would result in an overlayfs config lowerdir=/usr/lib/extensions/myextdir/usr/:/usr which is not allowed, as indicated by Christian the kernel performs this check: /* * Check if this layer root is a descendant of: * - another layer of this overlayfs instance * - upper/work dir of any overlayfs instance */ <...> /* Walk back ancestors to root (inclusive) looking for traps */ while (!err && parent != next) { if (is_lower && ovl_lookup_trap_inode(sb, parent)) { err = -ELOOP; pr_err("overlapping %s path\n", name); Secondly, there's a confusing aspect to this recursive storage. If you have /usr/lib/extensions/myext.raw which contains /usr/lib/extensions/mynested.raw 'systemd-sysext merge' will only pick up the first one, but both will appear in the merged root under /usr/lib/extensions/. So you have two extension images, both appear in your merged filesystem, but only one is actually in use. Finally, there's a conceptual aspect: the idea behind sysexts and hermetic /usr is that the /usr tree is not modified locally, but owned by the vendor. Dropping extensions in /usr thus goes contrary to this foundational concept.
* units: let's establish the coredump socket before writting core_pattern sysctlLennart Poettering2023-03-301-1/+1
| | | | | | | | | | | | | | | | It's a bit nicer if we only write the sysctl core_pattern once the coredump socket is established, since it's the backend for the handler. Given the systemd-coredump.socket basically has no dependencies that run before it this should not really make things slower or so, it just removes the tiny window where core pattern is in effect that wants to connect to the backend socket but cannot. The status quo isn't terrible, and not too different in effect: either way, until the socket unit is up we won't process coredumps. It's mostly what kind of behaviour you get then: an error due to /bin/false being invoked, or an error because systemd-coredump can't connect to its socket. After this patch we'll exclusively see the former.
* unit: sysext: update unit name for sd-tmpfiles-setupMike Yuan2023-03-181-1/+1
| | | | Fixes #26882
* units: Order user@.service after systemd-oomd.serviceDaan De Meyer2023-03-181-1/+1
| | | | | | | | | | | | The user manager connects to oomd over varlink. Currently, during shutdown, if oomd is stopped before any user manager, the user manager will try to reconnect to the socket, leading to a warning from pid 1 about a conflicting transaction. Let's fix this by ordering user@.service after systemd-oomd.service, so that user sessions are stopped before systemd-oomd is stopped, which makes sure that the user sessions won't try to start oomd via its socket after systemd-oomd is stopped.
* journald-console: Add colors when forwarding to consoleDaan De Meyer2023-03-161-0/+1
| | | | | | Let's color output when we're forwarding to the console. To make this work, we inherit TERM from pid 1 and use it to decide whether we should output colors or not.
* tree-wide: Drop gnu-efiJan Janssen2023-03-101-9/+9
| | | | | | | This drops all mentions of gnu-efi and its manual build machinery. A future commit will bring bootloader builds back. A new bootloader meson option is now used to control whether to build sd-boot and its userspace tooling.
* doc: correct wrong use "'s" contractionsJan Engelhardt2023-03-071-1/+1
|