From c72d4247a66a764b0f06fe62d661ced415538ae2 Mon Sep 17 00:00:00 2001 From: Red Bear OS Date: Thu, 23 Jul 2026 17:51:44 +0900 Subject: [PATCH] =?UTF-8?q?init:=20cutover=20=E2=80=94=20driver-manager=20?= =?UTF-8?q?owns=20the=20boot=20path,=20pcid-spawner=20gated=20as=20fallbac?= =?UTF-8?q?k?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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. --- init.d/00_driver-manager.service | 5 +++-- init.d/00_pcid-spawner.service | 5 +++++ init.initfs.d/40_driver-manager-initfs.service | 8 ++++---- init.initfs.d/40_pcid-spawner-initfs.service | 3 +++ 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/init.d/00_driver-manager.service b/init.d/00_driver-manager.service index fae8661059..c366c59845 100644 --- a/init.d/00_driver-manager.service +++ b/init.d/00_driver-manager.service @@ -18,8 +18,9 @@ description = "Driver manager (post-switchroot /usr spawner)" [service] cmd = "driver-manager" -args = ["--rootfs"] -# oneshot so a hypothetical bind handle error doesn't loop the manager +# Resident daemon: initial enumeration, then the hotplug loop forever. +args = ["--hotplug"] +# oneshot_async so init does not block on the manager's readiness. type = "oneshot_async" # Operator must explicitly enable this service: # touch /etc/driver-manager.d/disabled # force fallback to pcid-spawner diff --git a/init.d/00_pcid-spawner.service b/init.d/00_pcid-spawner.service index 1eb911c186..84bd7092bd 100644 --- a/init.d/00_pcid-spawner.service +++ b/init.d/00_pcid-spawner.service @@ -3,6 +3,11 @@ description = "PCI driver spawner" [service] 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. # 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 diff --git a/init.initfs.d/40_driver-manager-initfs.service b/init.initfs.d/40_driver-manager-initfs.service index 6357efc579..1fb55876aa 100644 --- a/init.initfs.d/40_driver-manager-initfs.service +++ b/init.initfs.d/40_driver-manager-initfs.service @@ -15,7 +15,7 @@ requires_weak = ["10_inputd.service", "20_graphics.target", "40_pcid.service"] cmd = "driver-manager" args = ["--initfs"] type = "oneshot" -# Operator must explicitly enable this service by removing the -# ConditionPathExists flag (C2 wiring). Until then, pcid-spawner -# initfs continues to operate. -ConditionPathExists = "/etc/driver-manager.d/initfs-active" +# Active by default since the cutover. Operator falls back to the legacy +# pcid-spawner initfs path with: +# touch /etc/driver-manager.d/disabled +ConditionPathExists = "!/etc/driver-manager.d/disabled" diff --git a/init.initfs.d/40_pcid-spawner-initfs.service b/init.initfs.d/40_pcid-spawner-initfs.service index 2d36c9d512..43ae9dc8ae 100644 --- a/init.initfs.d/40_pcid-spawner-initfs.service +++ b/init.initfs.d/40_pcid-spawner-initfs.service @@ -5,4 +5,7 @@ requires_weak = ["10_inputd.service", "20_graphics.target", "40_pcid.service"] [service] cmd = "pcid-spawner" 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"