Since systemd-pull now understands "provider:[/path/to/socket]/name"
URLs, allow them in the Path= setting of url-file and url-tar sources,
wherever HTTP/HTTPS URLs are accepted. Manifests and payloads are then
acquired from the specified io.systemd.ResourceProvider service, with
the same verification as for web servers. Document the scheme, and how
component providers can use it to serve their own resources.
Fixes: #33351
Describe the io.systemd.SysUpdate.Provider interface, the socket
directory, the precedence rules and the resulting restrictions in
sysupdate.components(5), and reference it from the other sysupdate man
pages..
Allow the version bounds and protected versions to be specified once for
a whole component in its .component file. The effective settings of a
component are determined by component_min_version(),
component_max_version() and component_version_is_protected(), which
combine the component's own settings with those of all its enabled
transfers: the more restrictive bound wins, and a version is protected
if the component or any of its enabled transfers lists it.
The two parsers are moved to sysupdate-config.c so both the transfer and
the component tables can share them.
This allows configuring what to do if updating a component failed while
updating all components in one go. "continue" (the default) logs the
failure and proceeds with the next component (and further update
iterations if --loop= is used), but the first error is returned at the
very end. "fail" aborts the update logic immediately.
Previously, a failing component would not stop the remaining components
from being updated in the current iteration, but would prevent any
further iterations.
This allows configuring what to do after a component has been updated
successfully while updating all components in one go. "continue" (the
default) proceeds with the next component, as before. "restart" finishes
the current update iteration early, so that the next iteration starts
from the beginning. This is useful for components that make new transfer
files available, which should be fully processed before any other
components are updated.
The feature JSON payload switched to `id`, `isEnabled`, and `appstream`,
and made `documentation` an array of URLs.
`updatectl` still parsed legacy table-derived names and a single URL.
This broke feature JSON parsing and made output inconsistent.
Features without documentation could also cause a null dereference.
Align `updatectl` with the current schema and preserve all
documentation URLs across sysupdate, D-Bus, and Varlink payloads.
Propagate condition evaluation errors through `condition_test_list()`
and `feature_is_suggested()`, with consistent JSON error handling and
tests.
The `suggested` field is now optional and always a boolean when
present; it is omitted rather than set to an error string when
SuggestOn*= conditions cannot be evaluated.
Add `suggested` metadata and document the field transition.
Follow-up for 3e34ccf6df.
Follow-up for 75a247d4de.
Follow-up for 40e727c93b.
Fixes#43603