confext: add initrd-specific unit

In the initrd we want to run as early as possible, before
any of the filesystems are set up, so that users can use
confexts to customize fstab/veritytab/crypttab/etc. But
in the root fs it needs to run after /var/ has been set
up. Split the unit, and have an initrd-specific one that
runs very early.
This commit is contained in:
Luca Boccassi
2024-11-30 12:50:41 +00:00
parent 144d291f18
commit e813252378
5 changed files with 48 additions and 4 deletions

View File

@@ -1093,7 +1093,10 @@ manpages = [
['systemd-sysctl.service', '8', ['systemd-sysctl'], ''], ['systemd-sysctl.service', '8', ['systemd-sysctl'], ''],
['systemd-sysext', ['systemd-sysext',
'8', '8',
['systemd-confext', 'systemd-confext.service', 'systemd-sysext.service'], ['systemd-confext',
'systemd-confext-initrd.service',
'systemd-confext.service',
'systemd-sysext.service'],
'ENABLE_SYSEXT'], 'ENABLE_SYSEXT'],
['systemd-system-update-generator', '8', [], ''], ['systemd-system-update-generator', '8', [], ''],
['systemd-system.conf', ['systemd-system.conf',

View File

@@ -21,6 +21,7 @@
<refname>systemd-sysext.service</refname> <refname>systemd-sysext.service</refname>
<refname>systemd-confext</refname> <refname>systemd-confext</refname>
<refname>systemd-confext.service</refname> <refname>systemd-confext.service</refname>
<refname>systemd-confext-initrd.service</refname>
<refpurpose>Activates System Extension Images</refpurpose> <refpurpose>Activates System Extension Images</refpurpose>
</refnamediv> </refnamediv>

View File

@@ -287,6 +287,11 @@ units = [
'file' : 'systemd-confext.service', 'file' : 'systemd-confext.service',
'conditions' : ['ENABLE_SYSEXT'], 'conditions' : ['ENABLE_SYSEXT'],
}, },
{
'file' : 'systemd-confext-initrd.service',
'conditions' : ['ENABLE_INITRD', 'ENABLE_SYSEXT'],
'symlinks' : ['initrd.target.wants/'],
},
{ {
'file' : 'systemd-coredump.socket', 'file' : 'systemd-coredump.socket',
'conditions' : ['ENABLE_COREDUMP'], 'conditions' : ['ENABLE_COREDUMP'],

View File

@@ -0,0 +1,35 @@
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
[Unit]
Description=Merge System Configuration Images into /etc/
Documentation=man:systemd-confext-initrd.service(8)
ConditionCapability=CAP_SYS_ADMIN
ConditionDirectoryNotEmpty=|/run/confexts
ConditionDirectoryNotEmpty=|/var/lib/confexts
ConditionDirectoryNotEmpty=|/usr/local/lib/confexts
ConditionDirectoryNotEmpty=|/usr/lib/confexts
ConditionDirectoryNotEmpty=|/.extra/confext
ConditionPathExists=/etc/initrd-release
DefaultDependencies=no
Before=local-fs-pre.target cryptsetup-pre.target systemd-tmpfiles-setup.service
Wants=local-fs-pre.target cryptsetup-pre.target
Conflicts=initrd-switch-root.target
Before=initrd-switch-root.target
Wants=modprobe@loop.service modprobe@dm_mod.service modprobe@squashfs.service modprobe@erofs.service
After=modprobe@loop.service modprobe@dm_mod.service modprobe@squashfs.service modprobe@erofs.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=systemd-confext refresh
ExecReload=systemd-confext refresh
ExecStop=systemd-confext unmerge

View File

@@ -16,13 +16,13 @@ ConditionDirectoryNotEmpty=|/run/confexts
ConditionDirectoryNotEmpty=|/var/lib/confexts ConditionDirectoryNotEmpty=|/var/lib/confexts
ConditionDirectoryNotEmpty=|/usr/local/lib/confexts ConditionDirectoryNotEmpty=|/usr/local/lib/confexts
ConditionDirectoryNotEmpty=|/usr/lib/confexts ConditionDirectoryNotEmpty=|/usr/lib/confexts
ConditionDirectoryNotEmpty=|/.extra/confext ConditionPathExists=!/etc/initrd-release
DefaultDependencies=no DefaultDependencies=no
After=local-fs.target After=local-fs.target
Before=sysinit.target systemd-tmpfiles-setup.service Before=sysinit.target systemd-tmpfiles-setup.service
Conflicts=shutdown.target initrd-switch-root.target Conflicts=shutdown.target
Before=shutdown.target initrd-switch-root.target Before=shutdown.target
[Service] [Service]
Type=oneshot Type=oneshot