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>&lt;image&gt;.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);

Reply via email to