From 520741d08eb223703421df0b082bbbe522992f20 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 19 Jun 2018 10:50:41 +0200 Subject: [PATCH] units: Add new system-update-pre.target systemd offline-updates allows dropping multiple system update units to be added to system-update.target.wants. As documented in systemd.offline-updates(7) only 1 of these units should actually be active (based on the /system-update symlink) and when that unit is done it should reboot the system. In some cases it is desirable to run a unit whenever booting in offline-updates mode indepedent of which update unit is going to handle the update. One example of this is integration with bootloader code which checks if the previous boot was succesful. Since the active unit will reboot the system when it is done, there is no guarantee that adding such a unit to system-update.target.wants will get it executed always. This commit adds a system-update-pre.target which can be used for units which should always run when booting in offline-updates mode. --- man/systemd.offline-updates.xml | 1 + units/meson.build | 1 + units/system-update-pre.target | 16 ++++++++++++++++ units/system-update.target | 1 + 4 files changed, 19 insertions(+) create mode 100644 units/system-update-pre.target diff --git a/man/systemd.offline-updates.xml b/man/systemd.offline-updates.xml index 258d4467845..c11004c8822 100644 --- a/man/systemd.offline-updates.xml +++ b/man/systemd.offline-updates.xml @@ -136,6 +136,7 @@ The update service should declare DefaultDependencies=false, Requires=sysinit.target, After=sysinit.target, + After=system-update-pre.target and explicitly pull in any other services it requires. diff --git a/units/meson.build b/units/meson.build index 77d52c10830..e4ac6ced643 100644 --- a/units/meson.build +++ b/units/meson.build @@ -77,6 +77,7 @@ units = [ ['sysinit.target', ''], ['syslog.socket', ''], ['system-update.target', ''], + ['system-update-pre.target', ''], ['system-update-cleanup.service', ''], ['systemd-ask-password-console.path', '', 'sysinit.target.wants/'], diff --git a/units/system-update-pre.target b/units/system-update-pre.target new file mode 100644 index 00000000000..dbd9ad92ec5 --- /dev/null +++ b/units/system-update-pre.target @@ -0,0 +1,16 @@ +# SPDX-License-Identifier: LGPL-2.1+ +# +# 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=Offline System Update (Pre) +Documentation=man:systemd.offline-updates(7) +Documentation=man:systemd.special(7) man:systemd-system-update-generator(8) +RefuseManualStart=yes +After=sysinit.target +Before=system-update.target diff --git a/units/system-update.target b/units/system-update.target index c46bfe754a9..b52a494892a 100644 --- a/units/system-update.target +++ b/units/system-update.target @@ -14,4 +14,5 @@ Documentation=man:systemd.special(7) man:systemd-system-update-generator(8) Requires=sysinit.target After=sysinit.target AllowIsolate=yes +Wants=system-update-pre.target Wants=system-update-cleanup.service -- 2.47.3