Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package sysextmgr for openSUSE:Factory checked in at 2026-03-11 20:49:55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/sysextmgr (Old) and /work/SRC/openSUSE:Factory/.sysextmgr.new.8177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "sysextmgr" Wed Mar 11 20:49:55 2026 rev:8 rq:1337950 version:0.2.1+git20260310.385db9a Changes: -------- --- /work/SRC/openSUSE:Factory/sysextmgr/sysextmgr.changes 2026-03-05 17:14:07.196085385 +0100 +++ /work/SRC/openSUSE:Factory/.sysextmgr.new.8177/sysextmgr.changes 2026-03-11 20:50:06.561096684 +0100 @@ -1,0 +2,13 @@ +Tue Mar 10 09:54:19 UTC 2026 - Thorsten Kukuk <[email protected]> + +- Update to version 0.2.1+git20260310.385db9a: + * Release version 0.2.1 + * sysextmgrcli cleanup: fix quiet and return code + * CI: add docbook5 required packages + * Release version 0.2.0 + * Add sysextmgrcli and sysextmgrd manual pages + * sysextmgrcli: fix formating of help output + * Add sysextmgr.conf.5 manual page + * Update README about manifest and config files + +------------------------------------------------------------------- Old: ---- sysextmgr-0.1.0+git20260304.fc915b3.tar.xz New: ---- sysextmgr-0.2.1+git20260310.385db9a.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ sysextmgr.spec ++++++ --- /var/tmp/diff_new_pack.4S7H79/_old 2026-03-11 20:50:07.493134472 +0100 +++ /var/tmp/diff_new_pack.4S7H79/_new 2026-03-11 20:50:07.497134634 +0100 @@ -16,18 +16,19 @@ # Name: sysextmgr -Version: 0.1.0+git20260304.fc915b3 +Version: 0.2.1+git20260310.385db9a Release: 0 Summary: Tools to manage systemd-sysext images License: GPL-2.0-or-later URL: https://github.com/thkukuk/sysextmgr Source: %{name}-%{version}.tar.xz +BuildRequires: docbook5-xsl-stylesheets +BuildRequires: libzio-devel BuildRequires: meson BuildRequires: pkgconfig BuildRequires: pkgconfig(libeconf) BuildRequires: pkgconfig(libsystemd) >= 257 BuildRequires: pkgconfig(zlib) -BuildRequires: libzio-devel Requires: %{_bindir}/systemd-dissect #Requires: /usr/lib/systemd/systemd-pull Requires: systemd-container >= 257.6 @@ -43,6 +44,7 @@ %package -n sysextmgr-tukit-plugin Summary: Plugin for tukit to update sysexe images Requires: sysextmgr +BuildArch: noarch %description -n sysextmgr-tukit-plugin This package contains a plugin for tukit, so that transactional-update not only updates the packages of the host OS, but also the sysext images. @@ -85,6 +87,9 @@ %{_tmpfilesdir}/sysextmgr.conf %dir %{_datadir}/sysextmgr %{_datadir}/sysextmgr/sysextmgr.conf +%{_mandir}/man1/sysextmgrcli.1%{?ext_man} +%{_mandir}/man5/sysextmgr.conf.5%{?ext_man} +%{_mandir}/man8/sysextmgrd.8%{?ext_man} %files -n sysextmgr-tukit-plugin %dir %{_prefix}/lib/tukit ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.4S7H79/_old 2026-03-11 20:50:07.577137878 +0100 +++ /var/tmp/diff_new_pack.4S7H79/_new 2026-03-11 20:50:07.585138202 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/thkukuk/sysextmgr.git</param> -<param name="changesrevision">fc915b3bb0741a7798572c0e49a478f660eae244</param></service></servicedata> +<param name="changesrevision">385db9a0000961c34ca0402ba4ae35448b9f276e</param></service></servicedata> (No newline at EOF) ++++++ sysextmgr-0.1.0+git20260304.fc915b3.tar.xz -> sysextmgr-0.2.1+git20260310.385db9a.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sysextmgr-0.1.0+git20260304.fc915b3/.github/workflows/ci-opensuse.yml new/sysextmgr-0.2.1+git20260310.385db9a/.github/workflows/ci-opensuse.yml --- old/sysextmgr-0.1.0+git20260304.fc915b3/.github/workflows/ci-opensuse.yml 2026-03-04 17:30:50.000000000 +0100 +++ new/sysextmgr-0.2.1+git20260310.385db9a/.github/workflows/ci-opensuse.yml 2026-03-10 10:14:44.000000000 +0100 @@ -13,7 +13,7 @@ - name: Install devel packages run: | zypper ref - zypper --non-interactive in --no-recommends meson gcc libeconf-devel systemd-devel valgrind diffutils libzio-devel zlib-devel + zypper --non-interactive in --no-recommends meson gcc libeconf-devel systemd-devel valgrind diffutils libzio-devel zlib-devel docbook5-xsl-stylesheets libxslt-tools - name: Setup meson run: meson setup build --auto-features=enabled @@ -34,7 +34,7 @@ - name: Install devel packages run: | zypper ref - zypper --non-interactive in --no-recommends meson gcc libeconf-devel systemd-devel valgrind diffutils libzio-devel zlib-devel + zypper --non-interactive in --no-recommends meson gcc libeconf-devel systemd-devel valgrind diffutils libzio-devel zlib-devel docbook5-xsl-stylesheets libxslt-tools - name: Setup meson run: meson setup build --auto-features=enabled -Db_sanitize=address,undefined diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sysextmgr-0.1.0+git20260304.fc915b3/README.md new/sysextmgr-0.2.1+git20260310.385db9a/README.md --- old/sysextmgr-0.1.0+git20260304.fc915b3/README.md 2026-03-04 17:30:50.000000000 +0100 +++ new/sysextmgr-0.2.1+git20260310.385db9a/README.md 2026-03-10 10:14:44.000000000 +0100 @@ -36,7 +36,7 @@ * Download the json files for this entries. * Check if they are compatible with the OS. * Download the image. -* Create symlink to `/etc/extionsions` in the running snapshot. +* Create symlink to `/etc/extensions` in the running snapshot. ### Update image @@ -66,16 +66,23 @@ The dependencies of sysext images are stored in a file inside of the image. To get the dependencies of an image you need to download and loopback mount it, which can end in a huge amount of data to download. -The solution is to provide a `<image>.json` file with the following structure:´, which contains all data: +The solution is to provide a `<image>.manifest` file as created by [mkosi](https://manpages.opensuse.org/mkosi) with the following structure:´, which contains all data: ```json { - "image_name": "strace-29.1.x86-64.raw", - "sysext": { + "manifest_version": 1, + "config": { + [...] + }, + "packages": [ + [...] + ], + "extension": { "ID": "opensuse-microos", - "SYSEXT_LEVEL": "glibc-2.41", - "VERSION_ID": "20250329", - "SYSEXT_VERSION_ID": "29.1", + "SYSEXT_LEVEL": "glibc-2.42", + "VERSION_ID": "20260304", + "SYSEXT_ID": "debug", + "SYSEXT_VERSION_ID": "2.43", "SYSEXT_SCOPE": "system", "ARCHITECTURE": "x86-64" } @@ -96,11 +103,19 @@ /usr/share/sysextmgr/sysextmgr.conf.d/*.conf ``` -Supported groups: +### Supported groups: * *sysextmgrd* - the key/value pairs of this group are read by `sysextmgrd`. * *default* - this key/value pairs of this group are read by `sysextmgrd` and `sysextmgrcli` if they are not specific in a tool specific section. But they are not necessarly supported by both. -Example configuration file: +### Supported keys: + +* *verbose* - Boolean, Run `sysextmgrd` in verbose mode +* *verify_signature* - Boolean, verify signatures of downloaded images +* *url* - URL from where to get sysext images +* *sysext_store_dir* - Local directory where to store sysext images, default: `/var/lib/sysext-store` +* *extensions_dir* - Directory with symlinks pointing to sysext images which systemd-sysext will enable at startup, default: `/etc/extensions` + +### Example configuration file: ``` [default] url=https://download.opensuse.org/repositories/home:/kukuk:/sysext/mkosi/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sysextmgr-0.1.0+git20260304.fc915b3/man/custom-man.xsl new/sysextmgr-0.2.1+git20260310.385db9a/man/custom-man.xsl --- old/sysextmgr-0.1.0+git20260304.fc915b3/man/custom-man.xsl 1970-01-01 01:00:00.000000000 +0100 +++ new/sysextmgr-0.2.1+git20260310.385db9a/man/custom-man.xsl 2026-03-10 10:14:44.000000000 +0100 @@ -0,0 +1,8 @@ +<?xml version='1.0'?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ss="http://docbook.sf.net/xmlns/string.subst/1.0" version="1.0"> + <xsl:import href="http://docbook.sourceforge.net/release/xsl-ns/current/manpages/profile-docbook.xsl"/> + <xsl:param name="version"/> + <xsl:param name="man.string.subst.map.local.pre"> + <ss:substitution oldstring="%version%" newstring="{$version}" /> + </xsl:param> +</xsl:stylesheet> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sysextmgr-0.1.0+git20260304.fc915b3/man/meson.build new/sysextmgr-0.2.1+git20260310.385db9a/man/meson.build --- old/sysextmgr-0.1.0+git20260304.fc915b3/man/meson.build 1970-01-01 01:00:00.000000000 +0100 +++ new/sysextmgr-0.2.1+git20260310.385db9a/man/meson.build 2026-03-10 10:14:44.000000000 +0100 @@ -0,0 +1,37 @@ +xsltproc_exe = find_program('xsltproc', required : get_option('man')) +want_man = (get_option('man').enabled() or get_option('man').auto()) and xsltproc_exe.found() +xsltproc_flags = [ + '--nonet', + '--xinclude', + '--stringparam', 'version', '@0@'.format(meson.project_version()), + '--path', + '@0@:@1@'.format(meson.current_build_dir(), meson.current_source_dir())] + +custom_man_xsl = files('custom-man.xsl') + +xslt_cmd = [xsltproc_exe, '-o', '@OUTPUT0@'] + xsltproc_flags + +mandir1 = get_option('mandir') / 'man1' +mandir5 = get_option('mandir') / 'man5' +mandir8 = get_option('mandir') / 'man8' + +if xsltproc_exe.found() +custom_target('sysextmgrcli.1', + input : 'sysextmgrcli.1.xml', + output : 'sysextmgrcli.1', + command : xslt_cmd + [custom_man_xsl, '@INPUT@'], + install : want_man, + install_dir : mandir1) +custom_target('sysextmgrd.8', + input : 'sysextmgrd.8.xml', + output : 'sysextmgrd.8', + command : xslt_cmd + [custom_man_xsl, '@INPUT@'], + install : want_man, + install_dir : mandir8) +custom_target('sysextmgr.conf.5', + input : 'sysextmgr.conf.5.xml', + output : 'sysextmgr.conf.5', + command : xslt_cmd + [custom_man_xsl, '@INPUT@'], + install : want_man, + install_dir : mandir5) +endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sysextmgr-0.1.0+git20260304.fc915b3/man/sysextmgr.conf.5.xml new/sysextmgr-0.2.1+git20260310.385db9a/man/sysextmgr.conf.5.xml --- old/sysextmgr-0.1.0+git20260304.fc915b3/man/sysextmgr.conf.5.xml 1970-01-01 01:00:00.000000000 +0100 +++ new/sysextmgr-0.2.1+git20260310.385db9a/man/sysextmgr.conf.5.xml 2026-03-10 10:14:44.000000000 +0100 @@ -0,0 +1,124 @@ +<?xml version="1.0" encoding="UTF-8"?> +<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sysextmgr.conf"> + <refmeta> + <refentrytitle>sysextmgr.conf</refentrytitle> + <manvolnum>5</manvolnum> + <refmiscinfo class="source">sysextmgr %version%</refmiscinfo> + <refmiscinfo class="manual">File Formats and Conventions</refmiscinfo> + </refmeta> + + <refnamediv> + <refname>sysextmgr.conf</refname> + <refname>sysextmgr.conf.d</refname> + <refpurpose>configuration file for sysextmgr tools</refpurpose> + </refnamediv> + + <refsect1> + <title>Description</title> + <para> + The <command>sysextmgr</command> tools read an INI style configuration file following the Configuration Files Specification of the The Linux Userspace API (UAPI) Group. + </para> + </refsect1> + + <refsect1> + <title>Configuration Directories and Precedence</title> + <para>The search order for configuration files is as follows:</para> + <itemizedlist> + <listitem><para><filename>/etc/sysextmgr/sysextmgr.conf</filename></para></listitem> + <listitem><para><filename>/run/sysextmgr/sysextmgr.conf</filename></para></listitem> + <listitem><para><filename>/usr/share/sysextmgr/sysextmgr.conf</filename></para></listitem> + <listitem><para><filename>/etc/sysextmgr/sysextmgr.conf.d/*.conf</filename></para></listitem> + <listitem><para><filename>/run/sysextmgr/sysextmgr.conf.d/*.conf</filename></para></listitem> + <listitem><para><filename>/usr/share/sysextmgr/sysextmgr.conf.d/*.conf</filename></para></listitem> + </itemizedlist> + </refsect1> + + <refsect1> + <title>Supported Groups</title> + <variablelist> + <varlistentry> + <term><option>[sysextmgrd]</option></term> + <listitem> + <para>The key/value pairs of this group are read by the <command>sysextmgrd</command> daemon.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>[default]</option></term> + <listitem> + <para> + The key/value pairs of this group are used by <command>sysextmgrd</command> and <command>sysextmgrcli</command> if they are not specified in a tool-specific section. Note that these keys are not necessarily supported by both tools. + </para> + </listitem> + </varlistentry> + </variablelist> + </refsect1> + + <refsect1> + <title>Supported Keys</title> + <variablelist> + <varlistentry> + <term><varname>verbose=</varname></term> + <listitem> + <para>Takes a boolean value. If true, runs <command>sysextmgrd</command> in verbose mode.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><varname>verify_signature=</varname></term> + <listitem> + <para>Takes a boolean value. If true, verifies the signatures of downloaded images.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><varname>url=</varname></term> + <listitem> + <para>Specifies the URL from where to retrieve sysext images.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><varname>sysext_store_dir=</varname></term> + <listitem> + <para> + Specifies the local directory where to store sysext images. + Defaults to <filename>/var/lib/sysext-store</filename>. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><varname>extensions_dir=</varname></term> + <listitem> + <para> + Specifies the directory with symlinks pointing to sysext images which + <command>systemd-sysext</command> will enable at startup. + Defaults to <filename>/etc/extensions</filename>. + </para> + </listitem> + </varlistentry> + </variablelist> + </refsect1> + + <refsect1> + <title>Examples</title> + <example> + <title>A basic sysextmgr.conf file</title> + <programlisting><![CDATA[[default] +url=https://download.opensuse.org/tumbleweed/appliances/ + +[sysextmgrd] +verbose=true]]></programlisting> + </example> + </refsect1> + + <refsect1> + <title>See Also</title> + <para> + <citerefentry><refentrytitle>sysextmgrcli</refentrytitle><manvolnum>1</manvolnum></citerefentry>, + <citerefentry><refentrytitle>sysextmgrd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, + <citerefentry><refentrytitle>systemd-sysext</refentrytitle><manvolnum>8</manvolnum></citerefentry> + </para> + </refsect1> + +</refentry> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sysextmgr-0.1.0+git20260304.fc915b3/man/sysextmgrcli.1.xml new/sysextmgr-0.2.1+git20260310.385db9a/man/sysextmgrcli.1.xml --- old/sysextmgr-0.1.0+git20260304.fc915b3/man/sysextmgrcli.1.xml 1970-01-01 01:00:00.000000000 +0100 +++ new/sysextmgr-0.2.1+git20260310.385db9a/man/sysextmgrcli.1.xml 2026-03-10 10:14:44.000000000 +0100 @@ -0,0 +1,253 @@ +<?xml version="1.0" encoding="UTF-8"?> +<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sysextmgrcli"> + <refmeta> + <refentrytitle>sysextmgrcli</refentrytitle> + <manvolnum>1</manvolnum> + <refmiscinfo class="source">sysextmgr %version%</refmiscinfo> + <refmiscinfo class="manual">User Commands</refmiscinfo> + </refmeta> + + <refnamediv> + <refname>sysextmgrcli</refname> + <refpurpose>command line utility to manage systemd-sysext images</refpurpose> + </refnamediv> + + <refsynopsisdiv> + <cmdsynopsis> + <command>sysextmgrcli</command> + <arg choice="req"><replaceable>COMMAND</replaceable></arg> + <arg rep="repeat"><replaceable>OPTIONS</replaceable></arg> + </cmdsynopsis> + </refsynopsisdiv> + + <refsect1> + <title>Description</title> + <para> + <command>sysextmgrcli</command> is the command-line client for managing systemd-sysext + images on openSUSE MicroOS. It delegates most tasks to the + <citerefentry><refentrytitle>sysextmgrd</refentrytitle><manvolnum>8</manvolnum></citerefentry> + daemon via varlink. This architecture allows unprivileged users to + list existing system extension images without needing root permissions. + </para> + <para> + Image downloads and verifications are handled automatically using <command>systemd-pull</command>. + </para> + </refsect1> + + <refsect1> + <title>Commands</title> + <variablelist> + <varlistentry> + <term><command>create-json</command></term> + <listitem> + <para>Create a JSON file from a release file.</para> + <variablelist> + <varlistentry> + <term><option>-n</option>, <option>--name</option></term> + <listitem><para>Name of the image.</para></listitem> + </varlistentry> + <varlistentry> + <term><option>-i</option>, <option>--input</option></term> + <listitem><para>Release file in KEY=VALUE format.</para></listitem> + </varlistentry> + <varlistentry> + <term><option>-o</option>, <option>--output</option></term> + <listitem><para>Output file in JSON format.</para></listitem> + </varlistentry> + </variablelist> + </listitem> + </varlistentry> + + <varlistentry> + <term><command>check</command></term> + <listitem> + <para>Check if updates are available and all installed images are compatible with the installed OS.</para> + <variablelist> + <varlistentry> + <term><option>-p</option>, <option>--prefix</option></term> + <listitem><para>Prefix to a different root directory.</para></listitem> + </varlistentry> + <varlistentry> + <term><option>-q</option>, <option>--quiet</option></term> + <listitem><para>Don't print the list of images, report status via return values.</para></listitem> + </varlistentry> + </variablelist> + </listitem> + </varlistentry> + + <varlistentry> + <term><command>cleanup</command></term> + <listitem> + <para>Check all snapshots for referenced images and remove no longer used ones.</para> + <variablelist> + <varlistentry> + <term><option>-q</option>, <option>--quiet</option></term> + <listitem><para>Return 0 if images were removed, otherwise ENODATA.</para></listitem> + </varlistentry> + </variablelist> + </listitem> + </varlistentry> + + <varlistentry> + <term><command>dump-json</command> <replaceable>FILE...</replaceable></term> + <listitem> + <para>Dump the content of the specified JSON files.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><command>dump-manifest</command> <replaceable>FILE...</replaceable></term> + <listitem> + <para>Dump the content of the specified manifest files.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><command>install</command> <replaceable>NAME...</replaceable></term> + <listitem> + <para>Install the newest compatible sysext image.</para> + <variablelist> + <varlistentry> + <term><option>-u</option>, <option>--url URL</option></term> + <listitem><para>Remote directory URL containing the sysext images.</para></listitem> + </varlistentry> + </variablelist> + </listitem> + </varlistentry> + + <varlistentry> + <term><command>list</command></term> + <listitem> + <para>List all images and report whether they are compatible.</para> + <variablelist> + <varlistentry> + <term><option>-u</option>, <option>--url URL</option></term> + <listitem><para>Remote directory URL with sysext images.</para></listitem> + </varlistentry> + <varlistentry> + <term><option>-v</option>, <option>--verbose</option></term> + <listitem><para>Enable verbose output.</para></listitem> + </varlistentry> + </variablelist> + </listitem> + </varlistentry> + + <varlistentry> + <term><command>merge-json</command> <replaceable>FILE...</replaceable></term> + <listitem> + <para>Merge several JSON files into one JSON array.</para> + <variablelist> + <varlistentry> + <term><option>-o</option>, <option>--output FILE</option></term> + <listitem><para>Output file in JSON format.</para></listitem> + </varlistentry> + </variablelist> + </listitem> + </varlistentry> + + <varlistentry> + <term><command>update</command></term> + <listitem> + <para>Check if newer images are available and update them.</para> + <variablelist> + <varlistentry> + <term><option>-p</option>, <option>--prefix</option></term> + <listitem><para>Prefix to a different root directory.</para></listitem> + </varlistentry> + <varlistentry> + <term><option>-q</option>, <option>--quiet</option></term> + <listitem><para>Return 0 if updates exist, else ENODATA.</para></listitem> + </varlistentry> + <varlistentry> + <term><option>-u</option>, <option>--url URL</option></term> + <listitem><para>Remote directory URL with sysext images.</para></listitem> + </varlistentry> + </variablelist> + </listitem> + </varlistentry> + </variablelist> + </refsect1> + + <refsect1> + <title>Generic Options</title> + <variablelist> + <varlistentry> + <term><option>-h</option>, <option>--help</option></term> + <listitem><para>Display a help message and exit.</para></listitem> + </varlistentry> + <varlistentry> + <term><option>-v</option>, <option>--version</option></term> + <listitem><para>Print the version number and exit.</para></listitem> + </varlistentry> + </variablelist> + </refsect1> + + <refsect1> + <title>Architecture and Directory Structure</title> + <para> + The architecture focuses on the effective use of Btrfs snapshots: + </para> + <variablelist> + <varlistentry> + <term><filename>/var/lib/sysext-store</filename></term> + <listitem> + <para> + Stores the actual sysext images. Being located in <filename>/var</filename>, + these images are shared across all snapshots, saving disk space. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><filename>/etc/extensions</filename></term> + <listitem> + <para> + Contains symlinks pointing to the images in the store. Because it resides in + <filename>/etc</filename>, every snapshot only sees the extensions relevant + to it. Performing a system rollback gracefully rolls back the active sysext images as well. + </para> + </listitem> + </varlistentry> + </variablelist> + + <para><emphasis role="bold">Importing Images:</emphasis></para> + <para> + When a full image name is provided, the specific image is downloaded and symlinked immediately. + If only a base name is provided, the tool downloads the SHA256SUM file, verifies the OS compatibility + via the JSON manifest, downloads the image, and creates the symlink in the running snapshot. + </para> + <para><emphasis role="bold">Updating Images:</emphasis></para> + <para> + During an update, local files in <filename>/var/lib/sysext-store</filename> are checked against + remote manifests. If a new version compatible with the new snapshot's OS version is found, it is + downloaded and symlinked <emphasis>inside the new snapshot</emphasis>. + </para> + <para><emphasis role="bold">Enabling/Disabling:</emphasis></para> + <para> + <command>sysextmgrcli</command> does not directly activate images. Activation is managed by + <command>systemd-sysext</command>. + <itemizedlist> + <listitem><para>Manual merge: <command>systemd-sysext merge</command></para></listitem> + <listitem><para>Manual unmerge: <command>systemd-sysext unmerge</command></para></listitem> + <listitem><para>At boot: <command>systemctl enable systemd-sysext.service</command></para></listitem> + </itemizedlist> + </para> + </refsect1> + + <refsect1> + <title>Dependencies and Manifests</title> + <para> + To prevent large files from being downloaded just to resolve dependencies, images should be + accompanied by a lightweight <filename><image>.manifest</filename> file (such as those + generated by mkosi). This contains the necessary OS configuration and constraints. + </para> + </refsect1> + + <refsect1> + <title>See Also</title> + <para> + <citerefentry><refentrytitle>sysextmgr.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>, + <citerefentry><refentrytitle>sysextmgrd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, + <citerefentry><refentrytitle>systemd-sysext</refentrytitle><manvolnum>8</manvolnum></citerefentry> + </para> + </refsect1> +</refentry> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sysextmgr-0.1.0+git20260304.fc915b3/man/sysextmgrd.8.xml new/sysextmgr-0.2.1+git20260310.385db9a/man/sysextmgrd.8.xml --- old/sysextmgr-0.1.0+git20260304.fc915b3/man/sysextmgrd.8.xml 1970-01-01 01:00:00.000000000 +0100 +++ new/sysextmgr-0.2.1+git20260310.385db9a/man/sysextmgrd.8.xml 2026-03-10 10:14:44.000000000 +0100 @@ -0,0 +1,88 @@ +<?xml version="1.0" encoding="UTF-8"?> +<refentry xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="sysextmgrd"> + <refmeta> + <refentrytitle>sysextmgrd</refentrytitle> + <manvolnum>8</manvolnum> + <refmiscinfo class="source">sysextmgr %version%</refmiscinfo> + <refmiscinfo class="manual">System Administration</refmiscinfo> + </refmeta> + + <refnamediv> + <refname>sysextmgrd</refname> + <refpurpose>daemon to manage systemd-sysext images on openSUSE MicroOS</refpurpose> + </refnamediv> + + <refsynopsisdiv> + <cmdsynopsis> + <command>sysextmgrd</command> + <arg rep="repeat"><replaceable>OPTIONS</replaceable></arg> + </cmdsynopsis> + </refsynopsisdiv> + + <refsect1> + <title>Description</title> + <para> + <command>sysextmgrd</command> is the backend service that manages + <citerefentry><refentrytitle>systemd-sysext</refentrytitle><manvolnum>8</manvolnum></citerefentry> + extension images. It is designed to run on openSUSE MicroOS and + execute privileged operations securely on behalf of the unprivileged + <citerefentry><refentrytitle>sysextmgrcli</refentrytitle><manvolnum>1</manvolnum></citerefentry> + client. + </para> + <para> + The daemon communicates with the client via varlink. It handles + methods such as <literal>Check</literal>, <literal>Cleanup</literal>, + <literal>ListImages</literal> and <literal>Update</literal>. + </para> + <para> + Normally, <command>sysextmgrd</command> is activated dynamically + via a systemd socket when a client attempts to connect. However, + it can also be started standalone as a standard daemon. + </para> + </refsect1> + + <refsect1> + <title>Options</title> + <variablelist> + <varlistentry> + <term><option>-s</option>, <option>--socket</option></term> + <listitem> + <para>Run in socket activation mode. The daemon expects systemd to pass the listening socket.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-d</option>, <option>--debug</option></term> + <listitem> + <para>Enable debug mode for extended troubleshooting output.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-v</option>, <option>--verbose</option></term> + <listitem> + <para>Enable verbose logging during execution.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-?</option>, <option>--help</option></term> + <listitem> + <para>Give this help list and exit.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>--version</option></term> + <listitem> + <para>Print program version and exit.</para> + </listitem> + </varlistentry> + </variablelist> + </refsect1> + + <refsect1> + <title>See Also</title> + <para> + <citerefentry><refentrytitle>sysextmgrcli</refentrytitle><manvolnum>1</manvolnum></citerefentry>, + <citerefentry><refentrytitle>sysextmgr.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>, + <citerefentry><refentrytitle>systemd-sysext</refentrytitle><manvolnum>8</manvolnum></citerefentry> + </para> + </refsect1> +</refentry> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sysextmgr-0.1.0+git20260304.fc915b3/meson.build new/sysextmgr-0.2.1+git20260310.385db9a/meson.build --- old/sysextmgr-0.1.0+git20260304.fc915b3/meson.build 2026-03-04 17:30:50.000000000 +0100 +++ new/sysextmgr-0.2.1+git20260310.385db9a/meson.build 2026-03-10 10:14:44.000000000 +0100 @@ -13,7 +13,7 @@ 'c_std=gnu17', 'warning_level=2'], license : ['GPL-2.0-or-later', 'LGPL-2.1-or-later'], - version : '0.1.0', + version : '0.2.1', ) conf = configuration_data() @@ -113,7 +113,7 @@ subdir('tmpfiles.d') # Manual pages -#subdir('man') +subdir('man') config_h = configure_file( output : 'config.h', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sysextmgr-0.1.0+git20260304.fc915b3/meson_options.txt new/sysextmgr-0.2.1+git20260310.385db9a/meson_options.txt --- old/sysextmgr-0.1.0+git20260304.fc915b3/meson_options.txt 2026-03-04 17:30:50.000000000 +0100 +++ new/sysextmgr-0.2.1+git20260310.385db9a/meson_options.txt 2026-03-10 10:14:44.000000000 +0100 @@ -1,3 +1,5 @@ +option('man', type : 'feature', value : 'auto', + description : 'build and install man pages') option('sysextstoredir', type : 'string', value : '/var/lib/sysext-store', description : 'directory for sysext images') option('extensionsdir', type : 'string', value : '/etc/extensions', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sysextmgr-0.1.0+git20260304.fc915b3/src/main-cleanup.c new/sysextmgr-0.2.1+git20260310.385db9a/src/main-cleanup.c --- old/sysextmgr-0.1.0+git20260304.fc915b3/src/main-cleanup.c 2026-03-04 17:30:50.000000000 +0100 +++ new/sysextmgr-0.2.1+git20260310.385db9a/src/main-cleanup.c 2026-03-10 10:14:44.000000000 +0100 @@ -89,10 +89,7 @@ } if (p.contents_json == NULL || sd_json_variant_is_null(p.contents_json)) - { - printf ("No sysext images removed.\n"); - return -ENODATA; - } + return -ENODATA; if (!sd_json_variant_is_array(p.contents_json)) { @@ -166,7 +163,7 @@ } r = varlink_cleanup(); - if (r < 0) + if (r < 0 && r != -ENODATA) { if (VARLINK_IS_NOT_RUNNING(r)) fprintf(stderr, "sysextmgrd not running!\n"); @@ -174,8 +171,13 @@ } /* Return ENODATA if there was nothing to remove and we should not print anything */ - if (r == ENODATA && arg_quiet) - return ENODATA; + if (r == -ENODATA) + { + if (arg_quiet) + return ENODATA; + else + printf ("No sysext images removed.\n"); + } return EXIT_SUCCESS; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sysextmgr-0.1.0+git20260304.fc915b3/src/sysextmgrcli.c new/sysextmgr-0.2.1+git20260310.385db9a/src/sysextmgrcli.c --- old/sysextmgr-0.1.0+git20260304.fc915b3/src/sysextmgrcli.c 2026-03-04 17:30:50.000000000 +0100 +++ new/sysextmgr-0.2.1+git20260310.385db9a/src/sysextmgrcli.c 2026-03-10 10:14:44.000000000 +0100 @@ -36,10 +36,12 @@ fputs("Options for check:\n", output); fputs(" -p, --prefix Prefix to different root directory\n", output); fputs(" -q, --quiet Don't print list of images but use return values\n", output); + fputs("\n", output); fputs("cleanup - Remove images no longer referenced\n", output); fputs("Options for check:\n", output); fputs(" -q, --quiet Return 0 if images got removed, else ENODATA\n", output); + fputs("\n", output); fputs("dump-json - dump content of json file\n", output); fputs("Options for dump-json:\n", output);
