]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sysext: add initrd-specific unit 35426/head
authorLuca Boccassi <luca.boccassi@gmail.com>
Sat, 30 Nov 2024 13:01:48 +0000 (13:01 +0000)
committerLuca Boccassi <luca.boccassi@gmail.com>
Sun, 1 Dec 2024 12:17:21 +0000 (12:17 +0000)
In the initrd we want to run as early as possible, before
any of the filesystems are set up, so that users can use
sysexts to customize kernel modules, firmware, 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.

man/rules/meson.build
man/systemd-sysext.xml
units/meson.build
units/systemd-sysext-initrd.service [new file with mode: 0644]
units/systemd-sysext.service

index 74613987206bdb3aaf29dcdd912c58d01c1e870b..df4af1e543a835c36080ee9cdbab532d87d5d03e 100644 (file)
@@ -1096,6 +1096,7 @@ manpages = [
   ['systemd-confext',
    'systemd-confext-initrd.service',
    'systemd-confext.service',
+   'systemd-sysext-initrd.service',
    'systemd-sysext.service'],
   'ENABLE_SYSEXT'],
  ['systemd-system-update-generator', '8', [], ''],
index 9f78b3b214fc1a485e1c01c2b5e65f779a23a911..bf47e7ca55965cb7e9376e7cc9fa94ae4d112602 100644 (file)
@@ -19,6 +19,7 @@
   <refnamediv>
     <refname>systemd-sysext</refname>
     <refname>systemd-sysext.service</refname>
+    <refname>systemd-sysext-initrd.service</refname>
     <refname>systemd-confext</refname>
     <refname>systemd-confext.service</refname>
     <refname>systemd-confext-initrd.service</refname>
index bc71c726868fcac980d3e0e87ef8b337eca57d57..792c4250c0ebf72c32aeacabe048bf079177e0c5 100644 (file)
@@ -624,6 +624,11 @@ units = [
           'file' : 'systemd-sysext.service',
           'conditions' : ['ENABLE_SYSEXT'],
         },
+        {
+          'file' : 'systemd-sysext-initrd.service',
+          'conditions' : ['ENABLE_INITRD', 'ENABLE_SYSEXT'],
+          'symlinks' : ['initrd.target.wants/'],
+        },
         {
           'file' : 'systemd-sysext.socket',
           'conditions' : ['ENABLE_SYSEXT'],
diff --git a/units/systemd-sysext-initrd.service b/units/systemd-sysext-initrd.service
new file mode 100644 (file)
index 0000000..4f0b8ff
--- /dev/null
@@ -0,0 +1,34 @@
+#  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 Extension Images into /usr/ and /opt/
+Documentation=man:systemd-sysext-initrd.service(8)
+
+ConditionCapability=CAP_SYS_ADMIN
+ConditionDirectoryNotEmpty=|/etc/extensions
+ConditionDirectoryNotEmpty=|/run/extensions
+ConditionDirectoryNotEmpty=|/var/lib/extensions
+ConditionDirectoryNotEmpty=|/.extra/sysext
+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-sysext refresh
+ExecReload=systemd-sysext refresh
+ExecStop=systemd-sysext unmerge
index 5c11eba7c974d3d2cf0657c421d3f2d669244f95..672faa946ffceb2844c786e246eff24064f0c399 100644 (file)
@@ -15,13 +15,13 @@ ConditionCapability=CAP_SYS_ADMIN
 ConditionDirectoryNotEmpty=|/etc/extensions
 ConditionDirectoryNotEmpty=|/run/extensions
 ConditionDirectoryNotEmpty=|/var/lib/extensions
-ConditionDirectoryNotEmpty=|/.extra/sysext
+ConditionPathExists=!/etc/initrd-release
 
 DefaultDependencies=no
 After=local-fs.target
 Before=sysinit.target systemd-tmpfiles-setup.service
-Conflicts=shutdown.target initrd-switch-root.target
-Before=shutdown.target initrd-switch-root.target
+Conflicts=shutdown.target
+Before=shutdown.target
 
 [Service]
 Type=oneshot