Files
systemd/man/systemd-update-done.service.xml
Zbigniew Jędrzejewski-Szmek 2ff40c758e update-done: add --root= arg
The idea is to use this when building an image to mark the image as not
needing updates after the reboot. In general it is impossible to say if
any of the early boot update services can be safely skipped, except when
the creator of the image knows all the contents there and has made sure
that all the updates have been processed. (This is in fact what happens
in a typical package-based installation: the packages have scriptlets which
implement the changes during or after the installation process.)

With this patch, the image build process can do 'systemd-update-done --root=…'
at the appropriate point to avoid triggering of ldconfig.service,
systemd-hwdb-update.service, etc.

I didn't write --image=, because it doesn't seem immediately useful. The
approach with --root is most useful when we're building the image "offline",
which means that we have a directory we're working on.
2025-03-20 15:57:14 +01:00

95 lines
4.2 KiB
XML

<?xml version="1.0"?>
<!--*-nxml-*-->
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
<refentry id="systemd-update-done.service" xmlns:xi="http://www.w3.org/2001/XInclude">
<refentryinfo>
<title>systemd-update-done.service</title>
<productname>systemd</productname>
</refentryinfo>
<refmeta>
<refentrytitle>systemd-update-done.service</refentrytitle>
<manvolnum>8</manvolnum>
</refmeta>
<refnamediv>
<refname>systemd-update-done.service</refname>
<refname>systemd-update-done</refname>
<refpurpose>Mark <filename>/etc/</filename> and <filename>/var/</filename> as fully updated</refpurpose>
</refnamediv>
<refsynopsisdiv>
<para><filename>systemd-update-done.service</filename></para>
<para><filename>/usr/lib/systemd/systemd-update-done</filename></para>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
<para><filename>systemd-update-done.service</filename> is a
service that is invoked as part of the first boot after the vendor
operating system resources in <filename>/usr/</filename> have been
updated. This is useful to implement offline updates of
<filename>/usr/</filename> which might require updates to
<filename>/etc/</filename> or <filename>/var/</filename> on the
following boot.</para>
<para><filename>systemd-update-done.service</filename> updates the file modification time (mtime) stored
in and "on" the files <filename>/etc/.updated</filename> and <filename>/var/.updated</filename> to the
modification time of the <filename>/usr/</filename> directory, unless the stamp files are already newer.
(The timestamp is stored as the mtime field on the file, but also <emphasis>in</emphasis> the file
to support filesystems that do not store full timestamp precision.)</para>
<para>Services that shall run after offline upgrades of
<filename>/usr/</filename> should order themselves before
<filename>systemd-update-done.service</filename>, and use the
<varname>ConditionNeedsUpdate=</varname> (see
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>)
condition to make sure to run when <filename>/etc/</filename> or
<filename>/var/</filename> are older than <filename>/usr/</filename>
according to the modification times of the files described above.
This requires that updates to <filename>/usr/</filename> are always
followed by an update of the modification time of
<filename>/usr/</filename>, for example by invoking
<citerefentry project='man-pages'><refentrytitle>touch</refentrytitle><manvolnum>1</manvolnum></citerefentry>
on it.</para>
<para>Note that if the <varname>systemd.condition_needs_update=</varname> kernel command line option is
used it overrides the <varname>ConditionNeedsUpdate=</varname> unit condition checks. In that case
<filename>systemd-update-done.service</filename> will not reset the condition state until a follow-up
reboot where the kernel switch is not specified anymore.</para>
</refsect1>
<refsect1>
<title>Options</title>
<para>The following options are understood:</para>
<variablelist>
<varlistentry>
<term><option>--root=<replaceable>root</replaceable></option></term>
<listitem><para>Takes a directory path as an argument. The program
will operate on paths below the specified root directory.
</para>
<xi:include href="version-info.xml" xpointer="v258"/></listitem>
</varlistentry>
<xi:include href="standard-options.xml" xpointer="help" />
</variablelist>
</refsect1>
<refsect1>
<title>See Also</title>
<para><simplelist type="inline">
<member><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></member>
<member><citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry></member>
<member><citerefentry project='man-pages'><refentrytitle>touch</refentrytitle><manvolnum>1</manvolnum></citerefentry></member>
</simplelist></para>
</refsect1>
</refentry>