init: cutover — driver-manager owns the boot path, pcid-spawner gated as fallback

- 00_driver-manager.service: resident daemon args (--hotplug); runs
  unless /etc/driver-manager.d/disabled exists.
- 40_driver-manager-initfs.service: gate flipped from opt-in
  (initfs-active) to default-on (!/etc/driver-manager.d/disabled).
- 00_pcid-spawner.service + 40_pcid-spawner-initfs.service: gated to
  start only when /etc/driver-manager.d/disabled exists — the legacy
  spawner remains staged as the operator fallback, never deleted.
This commit is contained in:
Red Bear OS
2026-07-23 17:51:44 +09:00
parent e30f24997c
commit c72d4247a6
4 changed files with 15 additions and 6 deletions
+3 -2
View File
@@ -18,8 +18,9 @@ description = "Driver manager (post-switchroot /usr spawner)"
[service] [service]
cmd = "driver-manager" cmd = "driver-manager"
args = ["--rootfs"] # Resident daemon: initial enumeration, then the hotplug loop forever.
# oneshot so a hypothetical bind handle error doesn't loop the manager args = ["--hotplug"]
# oneshot_async so init does not block on the manager's readiness.
type = "oneshot_async" type = "oneshot_async"
# Operator must explicitly enable this service: # Operator must explicitly enable this service:
# touch /etc/driver-manager.d/disabled # force fallback to pcid-spawner # touch /etc/driver-manager.d/disabled # force fallback to pcid-spawner
+5
View File
@@ -3,6 +3,11 @@ description = "PCI driver spawner"
[service] [service]
cmd = "pcid-spawner" cmd = "pcid-spawner"
# Fallback-only since the driver-manager cutover: this service starts only
# when the operator forces the legacy spawner back on with
# touch /etc/driver-manager.d/disabled
# Otherwise driver-manager (00_driver-manager.service) owns the boot path.
ConditionPathExists = "/etc/driver-manager.d/disabled"
# oneshot_async, NOT oneshot: this is the post-switchroot /usr driver-manager. # oneshot_async, NOT oneshot: this is the post-switchroot /usr driver-manager.
# As a blocking oneshot, init waits for pcid-spawner to enumerate PCI and bring # As a blocking oneshot, init waits for pcid-spawner to enumerate PCI and bring
# every matched driver to readiness (daemon::Daemon::spawn blocks on each # every matched driver to readiness (daemon::Daemon::spawn blocks on each
@@ -15,7 +15,7 @@ requires_weak = ["10_inputd.service", "20_graphics.target", "40_pcid.service"]
cmd = "driver-manager" cmd = "driver-manager"
args = ["--initfs"] args = ["--initfs"]
type = "oneshot" type = "oneshot"
# Operator must explicitly enable this service by removing the # Active by default since the cutover. Operator falls back to the legacy
# ConditionPathExists flag (C2 wiring). Until then, pcid-spawner # pcid-spawner initfs path with:
# initfs continues to operate. # touch /etc/driver-manager.d/disabled
ConditionPathExists = "/etc/driver-manager.d/initfs-active" ConditionPathExists = "!/etc/driver-manager.d/disabled"
@@ -5,4 +5,7 @@ requires_weak = ["10_inputd.service", "20_graphics.target", "40_pcid.service"]
[service] [service]
cmd = "pcid-spawner" cmd = "pcid-spawner"
args = ["--initfs"] args = ["--initfs"]
# Fallback-only since the driver-manager cutover: starts only when the
# operator forces the legacy spawner with /etc/driver-manager.d/disabled.
ConditionPathExists = "/etc/driver-manager.d/disabled"
type = "oneshot" type = "oneshot"