rootfs: Eliminate circular dependency between systemd units

rpi-reconfigure-raspi-firmware.service requires /boot/firmware to be
mounted, but mounting local filesystems requires local-fs-pre.target,
so trying to run rpi-reconfigure-raspi-firmware.service before
local-fs-pre.target results in a cyclic order dependency. systemd
breaks the cycle in an arbitrary place, and the result is unlikely to be
what we want.

Instead, delay reconfiguration of config.txt until after local
filesystems are mounted, but before sysinit.target. This breaks the cycle
(image-specs#49).

This still orders it before all non-early-boot services, because
sysinit.target is part of the DefaultDependencies; so in particular
it will finish before rpi-generate-ssh-host-keys.service starts, which
avoids the two services fighting over the dpkg lock (image-specs#45).

Resolves: image-specs#45
Resolves: image-specs#49
Signed-off-by: Simon McVittie <smcv@debian.org>
This commit is contained in:
Simon McVittie 2021-04-24 23:14:42 +01:00
parent 09805aa49b
commit 44b845e83f
1 changed files with 2 additions and 2 deletions

View File

@ -1,6 +1,6 @@
[Unit] [Unit]
Description=Reconfigure raspi-firmware to regenerate config.txt matching actual hardware Description=Reconfigure raspi-firmware to regenerate config.txt matching actual hardware
Before=local-fs-pre.target Before=sysinit.target
DefaultDependencies=no DefaultDependencies=no
RequiresMountsFor=/boot/firmware RequiresMountsFor=/boot/firmware
@ -11,4 +11,4 @@ ExecStart=/usr/sbin/dpkg-reconfigure raspi-firmware
ExecStart=/bin/systemctl --no-reload disable %n ExecStart=/bin/systemctl --no-reload disable %n
[Install] [Install]
RequiredBy=local-fs-pre.target RequiredBy=sysinit.target