systemd.v(7) — Linux manual page

NAME | DESCRIPTION | FILTERING AND SORTING | EXAMPLE | SEE ALSO | NOTES | COLOPHON

SYSTEMD.V(7)                    systemd.v                   SYSTEMD.V(7)

NAME         top

       systemd.v - Directory with Versioned Resources

DESCRIPTION         top

       In various places systemd components accept paths whose trailing
       components have the ".v/" suffix, pointing to a directory. These
       components will then automatically look for suitable files inside
       the directory, do a version comparison and open the newest file
       found (by version). Available since version v256. Specifically,
       two expressions are supported:

       •   When looking for files with a suffix .SUFFIX, and a path
           ...PATH/NAME.SUFFIX.v/ is specified, then all files
           ...PATH/NAME.SUFFIX.v/NAME_*.SUFFIX are enumerated, filtered,
           sorted and the newest file used. The primary sorting key is
           the variable part, here indicated by the wildcard "*".

       •   When a path ...PATH.v/NAME___.SUFFIX is specified (i.e. the
           penultimate component of the path ends in ".v" and the final
           component contains a triple underscore), then all files
           ...PATH.v/NAME_*.SUFFIX are enumerated, filtered, sorted and
           the newest file used (again, by the variable part, here
           indicated by the wildcard "*").

       To illustrate this in an example, consider a directory
       /var/lib/machines/mymachine.raw.v/, which is populated with three
       files:

       •   mymachine_7.5.13.raw

       •   mymachine_7.5.14.raw

       •   mymachine_7.6.0.raw

       Invoke a tool such as systemd-nspawn(1) with a command line like
       the following:

           # systemd-nspawn --image=/var/lib/machines/mymachine.raw.v --boot

       Then this would automatically be resolved to the equivalent of:

           # systemd-nspawn --image=/var/lib/machines/mymachine.raw.v/mymachine_7.6.0.raw --boot

       Much of systemd's functionality that expects a path to a disk
       image or OS directory hierarchy support the ".v/" versioned
       directory mechanism, for example systemd-nspawn(1),
       systemd-dissect(1) or the RootDirectory=/RootImage= settings of
       service files (see systemd.exec(5)).

       Use the systemd-vpick(1) tool to resolve ".v/" paths from the
       command line, for example for usage in shell scripts.

FILTERING AND SORTING         top

       The variable part of the filenames in the ".v/" directories are
       filtered and compared primarily with a version comparison,
       implementing Version Format Specification[1]. However, additional
       rules apply:

       •   If the variable part is suffixed by one or two integer values
           ("tries left" and "tries done") in the formats +LEFT or
           +LEFT-DONE, then these indicate usage attempt counters. The
           idea is that each time before a file is attempted to be used,
           its "tries left" counter is decreased, and the "tries done"
           counter increased (simply by renaming the file). When the
           file is successfully used (which for example could mean for
           an OS image: successfully booted) the counters are removed
           from the file name, indicating that the file has been
           validated to work correctly. This mechanism mirrors the boot
           assessment counters defined by Automatic Boot Assessment[2].
           Any filenames with no boot counters or with a non-zero "tries
           left" counter are sorted before filenames with a zero "tries
           left" counter.

       •   Preceding the use counters (if they are specified), an
           optional CPU architecture identifier may be specified in the
           filename (separated from the version with an underscore), as
           defined in the architecture vocabulary of the
           ConditionArchitecture= unit file setting, as documented in
           systemd.unit(5). Files whose name indicates an architecture
           not supported locally are filtered and not considered for the
           version comparison.

       •   The rest of the variable part is the version string.

       Or in other words, the files in the ".v/" directories should
       follow one of these naming structures:

       •   NAME_VERSION.SUFFIXNAME_VERSION_ARCHITECTURE.SUFFIXNAME_VERSION+LEFT.SUFFIXNAME_VERSION+LEFT-DONE.SUFFIXNAME_VERSION_ARCHITECTURE+LEFT.SUFFIXNAME_VERSION_ARCHITECTURE+LEFT-DONE.SUFFIX

EXAMPLE         top

       Here's a more comprehensive example, further extending the one
       described above. Consider a directory
       /var/lib/machines/mymachine.raw.v/, which is populated with the
       following files:

       •   mymachine_7.5.13.raw

       •   mymachine_7.5.14_x86-64.raw

       •   mymachine_7.6.0_arm64.raw

       •   mymachine_7.7.0_x86-64+0-5.raw

       Now invoke the following command on an x86-64 machine:

           $ systemd-vpick --suffix=.raw /var/lib/machines/mymachine.raw.v/

       This would resolve the specified path to
       /var/lib/machines/mymachine.raw.v/mymachine_7.5.14_x86-64.raw.
       Explanation: even though mymachine_7.7.0_x86-64+0-5.raw has the
       newest version, it is not preferred because its tries left
       counter is zero. And even though mymachine_7.6.0_arm64.raw has
       the second newest version it is also not considered, in this case
       because we operate on an x86_64 system and the image is intended
       for arm64 CPUs. Finally, the mymachine_7.5.13.raw image is not
       considered because it is older than mymachine_7.5.14_x86-64.raw.

SEE ALSO         top

       systemd(1), systemd-vpick(1), systemd-nspawn(1),
       systemd-dissect(1), systemd.exec(5), systemd-sysupdate(1)

NOTES         top

        1. Version Format Specification
           https://uapi-group.org/specifications/specs/version_format_specification/

        2. Automatic Boot Assessment
           https://systemd.io/AUTOMATIC_BOOT_ASSESSMENT/

COLOPHON         top

       This page is part of the systemd (systemd system and service
       manager) project.  Information about the project can be found at
       ⟨http://www.freedesktop.org/wiki/Software/systemd⟩.  If you have
       a bug report for this manual page, see
       ⟨http://www.freedesktop.org/wiki/Software/systemd/#bugreports⟩.
       This page was obtained from the project's upstream Git repository
       ⟨https://github.com/systemd/systemd.git⟩ on 2024-06-14.  (At that
       time, the date of the most recent commit that was found in the
       repository was 2024-06-13.)  If you discover any rendering
       problems in this HTML version of the page, or you believe there
       is a better or more up-to-date source for the page, or you have
       corrections or improvements to the information in this COLOPHON
       (which is not part of the original manual page), send a mail to
       man-pages@man7.org

systemd 257~devel                                           SYSTEMD.V(7)

Pages that refer to this page: portablectl(1)systemd-dissect(1)systemd-nspawn(1)systemd-vpick(1)org.freedesktop.portable1(5)systemd.exec(5)systemd.directives(7)systemd.index(7)