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.
This commit is contained in:
Hans de Goede 2018-06-19 10:50:41 +02:00 committed by Zbigniew Jędrzejewski-Szmek
parent c0373eb019
commit 520741d08e
4 changed files with 19 additions and 0 deletions

View File

@ -136,6 +136,7 @@
<listitem> <listitem>
<para>The update service should declare <varname>DefaultDependencies=false</varname>, <para>The update service should declare <varname>DefaultDependencies=false</varname>,
<varname>Requires=sysinit.target</varname>, <varname>After=sysinit.target</varname>, <varname>Requires=sysinit.target</varname>, <varname>After=sysinit.target</varname>,
<varname>After=system-update-pre.target</varname>
and explicitly pull in any other services it requires.</para> and explicitly pull in any other services it requires.</para>
</listitem> </listitem>
</orderedlist> </orderedlist>

View File

@ -77,6 +77,7 @@ units = [
['sysinit.target', ''], ['sysinit.target', ''],
['syslog.socket', ''], ['syslog.socket', ''],
['system-update.target', ''], ['system-update.target', ''],
['system-update-pre.target', ''],
['system-update-cleanup.service', ''], ['system-update-cleanup.service', ''],
['systemd-ask-password-console.path', '', ['systemd-ask-password-console.path', '',
'sysinit.target.wants/'], 'sysinit.target.wants/'],

View File

@ -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

View File

@ -14,4 +14,5 @@ Documentation=man:systemd.special(7) man:systemd-system-update-generator(8)
Requires=sysinit.target Requires=sysinit.target
After=sysinit.target After=sysinit.target
AllowIsolate=yes AllowIsolate=yes
Wants=system-update-pre.target
Wants=system-update-cleanup.service Wants=system-update-cleanup.service