Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package mkdud for openSUSE:Factory checked 
in at 2026-03-31 16:29:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mkdud (Old)
 and      /work/SRC/openSUSE:Factory/.mkdud.new.1999 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "mkdud"

Tue Mar 31 16:29:07 2026 rev:42 rq:1343890 version:2.6

Changes:
--------
--- /work/SRC/openSUSE:Factory/mkdud/mkdud.changes      2026-03-24 
18:49:28.355950606 +0100
+++ /work/SRC/openSUSE:Factory/.mkdud.new.1999/mkdud.changes    2026-03-31 
16:29:08.324058661 +0200
@@ -1,0 +2,19 @@
+Tue Mar 31 11:21:58 UTC 2026 - [email protected]
+
+- merge gh#openSUSE/mkdud#49
+- fix "How to apply" report
+- minor spec file adjustments
+- 2.6
+
+--------------------------------------------------------------------
+Mon Mar 30 18:44:13 UTC 2026 - [email protected]
+
+- merge gh#openSUSE/mkdud#48
+- align with latest Agama adjustment and support Slowroll
+  (bsc#1261030)
+- adapt to also work with xorriso (bsc#1260860)
+- simplify spec file
+- update documentation
+- 2.5
+
+--------------------------------------------------------------------

Old:
----
  mkdud-2.4.tar.xz

New:
----
  mkdud-2.6.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ mkdud.spec ++++++
--- /var/tmp/diff_new_pack.td5CSo/_old  2026-03-31 16:29:08.952084963 +0200
+++ /var/tmp/diff_new_pack.td5CSo/_new  2026-03-31 16:29:08.956085130 +0200
@@ -17,28 +17,23 @@
 
 
 Name:           mkdud
-%if 0%?suse_version >= 1500 || 0%?sle_version >= 120400
-BuildRequires:  rubygem(asciidoctor)
-%else
-BuildRequires:  asciidoc
-%if 0%?suse_version >= 1310 || 0%?sle_version >= 120000
-BuildRequires:  libxslt-tools
-%endif
-%endif
-%if %suse_version >= 1500
-Requires:       mkisofs
-%else
-Requires:       genisoimage
-%endif
+Version:        2.6
+Release:        0
+Summary:        Create driver update disks (DUD).
+License:        GPL-3.0-or-later
+Group:          Hardware/Other
+Source:         %{name}-%{version}.tar.xz
+URL:            https://github.com/openSUSE/mkdud
 Requires:       binutils
 Requires:       coreutils
 Requires:       cpio
 Requires:       file
 Requires:       findutils
-Requires:       gpg2
+Requires:       (gpg2 or gnupg2)
 Requires:       grep
 Requires:       gzip
 Requires:       kmod
+Requires:       (mkisofs or xorriso)
 Recommends:     osc
 Requires:       rpm
 Requires:       rpm-build
@@ -46,18 +41,11 @@
 Requires:       util-linux
 Requires:       xz
 Requires:       zstd
-Summary:        Create driver update from rpms
-License:        GPL-3.0-or-later
-Group:          Hardware/Other
-Version:        2.4
-Release:        0
-Source:         %{name}-%{version}.tar.xz
-Url:            https://github.com/openSUSE/mkdud
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildArch:      noarch
 
 %description
-Create a driver update from rpms.
+Create driver update disks (DUD).
 
 Authors:
 --------
@@ -81,7 +69,7 @@
 /usr/share/bash-completion
 %doc %{_mandir}/man1/mkdud.*
 %doc *.md
-%if %suse_version >= 1500
+%if 0%{?suse_version} >= 1500 || 0%{?suse_version} == 0
 %license COPYING
 %else
 %doc COPYING

++++++ mkdud-2.4.tar.xz -> mkdud-2.6.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mkdud-2.4/Makefile new/mkdud-2.6/Makefile
--- old/mkdud-2.4/Makefile      2026-03-23 19:37:29.000000000 +0100
+++ new/mkdud-2.6/Makefile      2026-03-31 13:21:58.000000000 +0200
@@ -28,13 +28,11 @@
 doc:
        @if [ -x /usr/bin/asciidoctor ] ; then \
          asciidoctor -b manpage -a version=$(VERSION) mkdud_man.adoc ;\
-       else \
-         a2x -f manpage -a version=$(VERSION) mkdud_man.adoc ;\
        fi
 # a2x -f docbook -a version=$(VERSION) mkdud_man.adoc
 # dblatex mkdud_man.xml
 
 clean:
        @rm -rf *~ */*~ package changelog VERSION
-       @rm -f mkdud.1 mkdud_man.xml mkdud_man.pdf
+       @rm -f mkdud_man.xml mkdud_man.pdf
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mkdud-2.4/VERSION new/mkdud-2.6/VERSION
--- old/mkdud-2.4/VERSION       2026-03-23 19:37:29.000000000 +0100
+++ new/mkdud-2.6/VERSION       2026-03-31 13:21:58.000000000 +0200
@@ -1 +1 @@
-2.4
+2.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mkdud-2.4/changelog new/mkdud-2.6/changelog
--- old/mkdud-2.4/changelog     2026-03-23 19:37:29.000000000 +0100
+++ new/mkdud-2.6/changelog     2026-03-31 13:21:58.000000000 +0200
@@ -1,3 +1,16 @@
+2026-03-31:    2.6
+       - merge gh#openSUSE/mkdud#49
+       - fix "How to apply" report
+       - minor spec file adjustments
+
+2026-03-30:    2.5
+       - merge gh#openSUSE/mkdud#48
+       - align with latest Agama adjustment and support Slowroll
+         (bsc#1261030)
+       - adapt to also work with xorriso (bsc#1260860)
+       - simplify spec file
+       - update documentation
+
 2026-03-23:    2.4
        - merge gh#openSUSE/mkdud#47
        - de-duplicate files to reduce size (bsc#1258149)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mkdud-2.4/mkdud new/mkdud-2.6/mkdud
--- old/mkdud-2.4/mkdud 2026-03-23 19:37:29.000000000 +0100
+++ new/mkdud-2.6/mkdud 2026-03-31 13:21:58.000000000 +0200
@@ -111,7 +111,7 @@
 sub cleanup_old_duds;
 sub new_dud;
 sub analyze_ycp_files;
-sub set_mkisofs_metadata;
+sub set_iso_metadata;
 sub write_dud;
 sub fix_duds;
 sub show_dud;
@@ -168,6 +168,8 @@
 my $opt_installer;
 my @opt_iso;
 
+my $iso_backend;
+
 # global variables
 my $dud;
 my @files;
@@ -184,7 +186,6 @@
 my $obs;
 my $pubkey_info;
 my $yast_version = 0;
-my $mkisofs = -x '/usr/bin/mkisofs' ? '/usr/bin/mkisofs' : 
'/usr/bin/genisoimage';
 my $hooks;
 
 # linuxrc versions in service packs
@@ -241,6 +242,8 @@
   'installer=s'      => \$opt_installer,
   'initrd=s'         => \@opt_initrd,
   'iso=s'            => \@opt_iso,
+  'mkisofs'          => sub { $iso_backend = "mkisofs" },
+  'xorriso'          => sub { $iso_backend = "xorriso" },
   'save-temp'        => \$opt_save_temp,
   'version'          => sub { print "$VERSION\n"; exit 0 },
   'help'             => sub { usage 0 },
@@ -262,6 +265,19 @@
 
 $ENV{PATH} = "/usr/bin:/bin:/usr/sbin:/sbin";
 
+if(!$iso_backend) {
+  $iso_backend = "xorriso" if -x("/usr/bin/xorriso");
+  $iso_backend = "mkisofs" if -x("/usr/bin/isoinfo") && -x("/usr/bin/mkisofs");
+}
+
+if($iso_backend eq "xorriso" && ! -x("/usr/bin/xorriso")) {
+  die "xorriso missing - install xorriso package\n"
+}
+
+if($iso_backend eq "mkisofs" && ! (-x("/usr/bin/isoinfo") && 
-x("/usr/bin/mkisofs"))) {
+  die "mkisofs missing - install mkisofs package\n"
+}
+
 @opt_arch = map { /^i.86$/ ? "i386" : $_ } @opt_arch;
 
 if(open my $f, "$ENV{HOME}/.mkdudrc") {
@@ -336,6 +352,7 @@
       map { tr/-//d } @dists;
       # kubic is part of tumbleweed
       map { s/^(tumbleweed|tw|kubic).*/tw/g } @dists;
+      map { s/^(slowroll).*/slowroll/g } @dists;
       # map 'casp' to the new 'caasp'
       map { s/^casp(\d)/caasp$1/ } @dists;
       # CaaSP should be aligned with the respective SLES
@@ -361,8 +378,14 @@
     map { s/^micro(\d+)/$1 >= 6 ? "sl-micro$1" : "suse-microos$1"/e } @dists;
     map { s/^leap(\d+)/$1 >= 16 ? "opensuse-leap$1" : "leap$1"/e } @dists;
 
+    my $is_tumbleweed = 0;
+    my $is_slowroll = 0;
+
+    map { s/^tw$/$is_tumbleweed++, $opt_installer eq 'yast' ? "tw" : 
"opensuse-tumbleweed"/e } @dists;
+    map { s/^slowroll$/$is_slowroll++, $opt_installer eq 'yast' ? "tw" : 
"opensuse-slowroll"/e } @dists;
+
     for (@dists) {
-      
if(!/^((opensuse-leap|leap|kubic|casp|caasp|sl-micro|suse-microos)?\d+\.\d+|tw|sle[sd]\d+|sles1[6-9]\.\d+|((fedora|rhel|sll)\d+))$/)
 {
+      
if(!/^((opensuse-leap|leap|kubic|casp|caasp|sl-micro|suse-microos)?\d+\.\d+|tw|opensuse-tumbleweed|opensuse-slowroll|sle[sd]\d+|sles1[6-9]\.\d+|((fedora|rhel|sll)\d+))$/)
 {
         if(!$opt_fix_dist) {
           print STDERR "***  Note: using unsupported dist \"$_\"\n";
         }
@@ -371,6 +394,15 @@
         }
       }
     }
+
+    my $msg = " may use Agama or YaST; use the --installer option to specify 
for which installer this DUD is intended.\n";
+
+    if($is_tumbleweed && !$opt_installer) {
+      die "openSUSE Tumbleweed" . $msg;
+    }
+    if($is_slowroll && !$opt_installer) {
+      die "openSUSE Slowroll" . $msg;
+    }
   }
 
   # cleanup old driver update sources
@@ -438,6 +470,8 @@
 General options:
 
       --version                 Show mkdud version.
+      --mkisofs                 Use mkiosfs to build ISO images (default if 
available).
+      --xorriso                 Use xorriso to build ISO images.
       --save-temp               Keep temporary files.
       --help                    Write this help text.
 
@@ -1609,7 +1643,7 @@
 
 
 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub set_mkisofs_metadata
+sub set_iso_metadata
 {
   my $id = "dud";
 
@@ -1694,8 +1728,11 @@
   $cmd_archive = 'tar -cf - .' if $format_archive eq 'tar';
 
   if($format_archive eq 'iso') {
-    set_mkisofs_metadata;
-    $cmd_archive = "$mkisofs -l -r -pad -input-charset utf8";
+    print "using $iso_backend to create ISO\n";
+    set_iso_metadata;
+    $cmd_archive = "mkisofs";
+    $cmd_archive = "xorriso -as mkisofs" if $iso_backend eq 'xorriso';
+    $cmd_archive .= " -l -r -pad -input-charset utf8";
     $cmd_archive .= " -V '" . substr($opt_volume, 0, 32) . "'";
     $cmd_archive .= " -A '" . substr($opt_application, 0, 128) . "'";
     $cmd_archive .= " -p '" . substr($opt_preparer, 0, 128) . "'";
@@ -1899,7 +1936,7 @@
   my $prod;
   my $arch;
 
-  if($str =~ 
/^(\S+?)-((sle([sd]?)|fedora|rhel|sll)(\d+)|(sles|opensuse-leap|leap|kubic|casp|caasp|sl-micro|suse-microos)?(\d+\.\d+)|tw|tumbleweed|opensuse-tumbleweed)$/)
 {
+  if($str =~ 
/^(\S+?)-((sle([sd]?)|fedora|rhel|sll)(\d+)|(sles|opensuse-leap|leap|kubic|casp|caasp|sl-micro|suse-microos)?(\d+\.\d+)|tw|opensuse-tumbleweed|opensuse-slowroll)$/)
 {
     # print STDERR "+++ 1=$1 2=$2 3=$3 4=$4 5=$5 6=$6 7=$7 +++\n";
     $arch = $1;
     if($3 eq 'sles') {
@@ -1932,9 +1969,12 @@
     elsif($6 eq 'suse-microos') {
       $prod = "SUSE Linux Enterprise Micro $7";
     }
-    elsif($2 eq "tw" || $2 eq "tumbleweed" || $2 eq "opensuse-tumbleweed") {
+    elsif($2 eq "tw" || $2 eq "opensuse-tumbleweed") {
       $prod = "openSUSE Tumbleweed";
     }
+    elsif($2 eq "opensuse-slowroll") {
+      $prod = "openSUSE Slowroll";
+    }
     elsif($3 eq 'fedora') {
       $prod = "Fedora $5";
     }
@@ -2056,6 +2096,9 @@
       elsif("\L$key" eq 'updatename') {
         $sect{name} .= "      $val\n";
       }
+      elsif("\L$key" eq 'updateproduct') {
+        # ignore value; just make sure it does not end up in $sect{config}
+      }
       elsif("\L$key" eq 'updateallarchs') {
         $all_archs = $val;
       }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mkdud-2.4/mkdud.1 new/mkdud-2.6/mkdud.1
--- old/mkdud-2.4/mkdud.1       1970-01-01 01:00:00.000000000 +0100
+++ new/mkdud-2.6/mkdud.1       2026-03-31 13:21:58.000000000 +0200
@@ -0,0 +1,1214 @@
+'\" t
+.\"     Title: mkdud
+.\"    Author: [see the "AUTHOR(S)" section]
+.\" Generator: Asciidoctor 2.0.23
+.\"      Date: 2026-03-30
+.\"    Manual: User Commands
+.\"    Source: mkdud 2.5
+.\"  Language: English
+.\"
+.TH "MKDUD" "1" "2026-03-30" "mkdud 2.5" "User Commands"
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.ss \n[.ss] 0
+.nh
+.ad l
+.de URL
+\fI\\$2\fP <\\$1>\\$3
+..
+.als MTO URL
+.if \n[.g] \{\
+.  mso www.tmac
+.  am URL
+.    ad l
+.  .
+.  am MTO
+.    ad l
+.  .
+.  LINKSTYLE blue R < >
+.\}
+.SH "NAME"
+mkdud \- create and manage SUSE Linux driver updates
+.SH "SYNOPSIS"
+.sp
+\fBmkdud\fP [\fIOPTIONS\fP]... \fISOURCES\fP...
+.SH "DESCRIPTION"
+.sp
+mkdud manages driver updates (DUD) for SUSE Linux. You can create them, view 
their contents, and
+combine several driver updates into a single one.
+.SS "General Options"
+.sp
+\fB\-\-version\fP
+.RS 4
+Show mkdud version.
+.RE
+.sp
+\fB\-\-mkisofs\fP
+.RS 4
+Use mkiosfs to build ISO images (default if available).
+.RE
+.sp
+\fB\-\-xorriso\fP
+.RS 4
+Use xorriso to build ISO images.
+.RE
+.sp
+\fB\-\-save\-temp\fP
+.RS 4
+Keep temporary files.
+.RE
+.sp
+\fB\-\-help\fP
+.RS 4
+Show this help text.
+.RE
+.SS "Verify Driver Update"
+.sp
+\fB\-s, \-\-show\fP=\fIDUD\fP
+.RS 4
+Verify \fIDUD\fP and print a summary. \fIDUD\fP may be a file or directory or 
an ISO image.
+.RE
+.SS "Create Driver Update"
+.sp
+\fB\-c, \-\-create\fP=\fIDUD\fP
+.RS 4
+Create new driver update \fIDUD\fP from \fISOURCES\fP.
+.RE
+.sp
+\fB\-a, \-\-arch\fP=\fIARCH\fP
+.RS 4
+Build for target \fIARCH\fP (default: auto detected from \fISOURCES\fP).
+Option can be repeated to specify several achitectures.
+.br
+\fBNote\fP: if you don\(cqt set the architecture and mkdud can\(cqt
+find a hint in \fISOURCES\fP either an update for all supported
+architectures is created.
+.RE
+.sp
+\fB\-d, \-\-dist\fP=\fIDIST\fP
+.RS 4
+Specify the product the DUD is for. Possible values for \fIDIST\fP include:
+\f(CR13.2\fP, \f(CRsle15\fP, \f(CRleap16.1\fP, \f(CRcaasp1.0\fP, 
\*(Aqmicro5.0\*(Aq, \f(CRtw\fP standing for
+openSUSE 13.2, SLE 15, Leap 16.1, CaaSP 1.0, SLE Micro 5.0, Tumbleweed, 
respectively.
+.br
+Option can be repeated to specify several distribution targets.
+\fBNote 1\fP: Since SLES 16.0 / Leap 16.0 Agama replaces YaST as installer.
+.br
+See \fBAgama vs. YaST\fP below for more details.
+.br
+\fBNote 2\fP: \f(CRsle15\fP is a short hand for specifying both \f(CRsles15\fP 
and \f(CRsled15\fP.
+.br
+\fBNote 3\fP: There are no separate names for service packs.
+So \f(CRsles15\-sp1\fP is the same as \f(CRsles15\fP. But see 
\fB\-\-condition\fP
+below for a way to target specific service packs.
+.br
+See \fBDistribution (Product) Names\fP below for more details.
+.br
+\fBNote 4\fP: Tumbleweed and  Slowroll may use either Agama or YaST as 
installer.
+You have to use the \fB\-\-installer\fP option to say for which one the DUD is 
intended.
+.RE
+.sp
+\fB\-\-condition\fP=\fISCRIPT\fP
+.RS 4
+Run \fISCRIPT\fP and apply DUD only if \fISCRIPT\fP has exit status 0.
+If \fISCRIPT\fP has the special name \f(CRServicePackN\fP (\fIN\fP = 0, 1, 2, 
...),
+a script that checks for service pack \fIN\fP is generated and added.
+\fIN\fP = 0 refers to the main product (without service pack).
+.br
+\fBNote\fP: For Tumbleweed you can pass the snapshot version as \fIN\fP
+to limit the DUD to a specific snapshot.
+.br
+Option can be repeated to specify several conditions.
+.RE
+.sp
+\fB\-p, \-\-prio\fP=\fINUM\fP
+.RS 4
+Set repository priority to \fINUM\fP; lower \fINUM\fP means higher priority
+(default: 50).
+.RE
+.sp
+\fB\-n, \-\-name\fP=\fINAME\fP
+.RS 4
+Set driver update name. If you update packages or modules
+a default name is generated based on the package and module
+versions.
+.br
+Option can be repeated to specify a multi\-line name.
+.RE
+.sp
+\fB\-x, \-\-exec\fP=\fICOMMAND\fP
+.RS 4
+Run \fICOMMAND\fP right after the driver update has been loaded.
+.br
+Option can be repeated to specify several commands.
+.br
+\fBNote\fP: The commands are run just before (YaST) or after (Agama) kernel 
modules
+are updated.
+.br
+.RE
+.sp
+\fB\-\-dracut\-hook\fP=\fIHOOK:CMD\fP
+.RS 4
+Insert CMD into dracut hook HOOK.
+.br
+HOOK must be a valid dracut hook name. CMD is either a custom script to run or 
a command to run.
+.br
+Option can be repeated.
+.br
+See \fBAdding dracut hooks\fP below for details.
+.RE
+.sp
+\fB\-i, \-\-install\fP=\fIMETHODS\fP
+.RS 4
+Package install method. \fIMETHODS\fP is a comma\-separated list
+of: \f(CRinstsys\fP, \f(CRrepo\fP, \f(CRrpm\fP (default (Agama): 
\f(CRinstsys,repo\fP, default (YaST): \f(CRinstsys,repo,rpm\fP).
+.br
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+\f(CRinstsys\fP: unpack packages in installation system / live root
+.br
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+\f(CRrepo\fP: create repo with all packages and register with
+Agama or YaST before starting installation; repo will be removed
+after the installation
+.br
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+\f(CRrpm\fP: install packages at the end of the installation
+using rpm (that is, not via repo & zypper) \- this method is
+only available for YaST
+.br
+.RE
+.RE
+.sp
+\fB\-\-initrd\fP=\fIRPM|DIR\fP
+.RS 4
+Add RPM or content of DIR to initrd.
+.br
+Option can be repeated to add several packages or directories.
+.br
+This requires applying the driver update with \fBmkmedia\fP to work.
+.br
+See \fBHow to apply driver updates\fP below for details.
+.RE
+.sp
+\fB\-\-iso\fP=\fIDIR\fP
+.RS 4
+Add content of DIR to installation ISO image.
+.br
+Option can be repeated to add several directories.
+.br
+Use this option to update for example shim or grub on the installation medium.
+.br
+This requires applying the driver update with \fBmkmedia\fP to work.
+.br
+See \fBHow to apply driver updates\fP below for details.
+.RE
+.sp
+\fB\-\-installer\fP=\fIINSTALLER\fP
+.RS 4
+Set installation program. Either agama or yast (default: auto\-detected based 
on dist).
+.br
+It is usually not necessary to use this option. There are minor differences in 
handling driver updates
+between Agama and YaST, though. mkdud takes these into account.
+.RE
+.sp
+\fB\-\-config\fP=\fIKEY\fP=\fIVALUE\fP
+.RS 4
+Set initrd config option \fIKEY\fP to \fIVALUE\fP. The options are changed
+just after the driver update has been loaded.
+.br
+You can set boot options using KEY \*(Aqboot\*(Aq.
+Setting boot options accepts the same semantics as \fBmkmedia\fP (see 
\fBmkmedia\fP docs); in particular, prefixing a
+boot option with \*(Aq\-\*(Aq removes it.
+.br
+See \fBHow to apply driver updates\fP below for limitations.
+.br
+Option can be repeated to set several options.
+.RE
+.sp
+\fB\-\-no\-docs\fP
+.RS 4
+Don\(cqt include package documentation in unpacked instsys tree
+(to save space).
+.br
+This is the default setting.
+.RE
+.sp
+\fB\-\-keep\-docs\fP
+.RS 4
+Include package documentation in unpacked instsys tree.
+.RE
+.sp
+\fB\-\-force\fP
+.RS 4
+Obsolete. Use one or more of \fB\-\-no\-fix\-XXX\fP instead.
+.RE
+.sp
+\fB\-\-no\-fix\-yast\fP
+.RS 4
+Allow driver update to replace \f(CR/sbin/yast\fP.
+.br
+See \fBConsistency checks\fP.
+.RE
+.sp
+\fB\-\-no\-fix\-dist\fP
+.RS 4
+Allow to specify an arbitrary distribution name with \fB\-\-dist\fP.
+.br
+See \fBConsistency checks\fP.
+.RE
+.sp
+\fB\-\-no\-fix\-usr\-src\fP
+.RS 4
+Allow driver update to include \f(CR/usr/src/packages\fP.
+.br
+See \fBConsistency checks\fP.
+.RE
+.sp
+\fB\-\-no\-fix\-adddir\fP
+.RS 4
+Do not include an updated \f(CRadddir\fP script.
+.br
+See \fBConsistency checks\fP.
+.RE
+.sp
+\fB\-\-no\-check\-hooks\fP
+.RS 4
+Do not restict dracut hook names.
+.br
+See \fBAdding dracut hooks\fP.
+.RE
+.sp
+\fB\-\-format\fP=\fIFORMAT\fP
+.RS 4
+Specify archive format for DUD. 
\fIFORMAT\fP=\f(CR((cpio|tar|iso)[.(gz|xz)])|rpm\fP.
+.br
+Default \fIFORMAT\fP is \f(CRcpio.gz\fP (gzip compressed cpio archive).
+.br
+Using \fIFORMAT\fP \*(Aqiso\*(Aq produces an ISO image with label 
\*(AqOEMDRV\*(Aq \-
+see \fBHow to apply driver updates\fP below for more information.
+.br
+\fBNote\fP: please check \f(CRREADME.md\fP before changing the default.
+.RE
+.sp
+\fB\-\-prefix\fP=\fINUM\fP
+.RS 4
+First directory prefix of driver update.
+.br
+See \f(CRREADME\fP.
+.RE
+.sp
+\fB\-\-sign\fP
+.RS 4
+Sign the driver update.
+.RE
+.sp
+\fB\-\-detached\-sign\fP
+.RS 4
+Sign the driver update. This creates a detached signature.
+.RE
+.sp
+\fB\-\-sign\-key\fP=\fIKEY_FILE\fP
+.RS 4
+Use this key for signing. Alternatively, use the \f(CRsign\-key\fP entry in 
\f(CR~/.mkdudrc\fP.
+.RE
+.sp
+\fB\-\-sign\-key\-id\fP=\fIKEY_ID\fP
+.RS 4
+Use this key id for signing (anything gpg accepts).
+Alternatively, use the \f(CRsign\-key\-id\fP entry in \f(CR~/.mkdudrc\fP.
+.br
+If both \fB\-\-sign\-key\fP and \fB\-\-sign\-key\-id\fP are specified, 
\fB\-\-sign\-key\-id\fP wins.
+.br
+\fBNote\fP: gpg might show an interactive dialog asking for a password to 
unlock the key.
+.RE
+.sp
+\fB\-\-volume\fP
+.RS 4
+Set ISO volume id (if using format \f(CRiso\fP).
+.RE
+.sp
+\fB\-\-vendor\fP
+.RS 4
+Set ISO publisher id (if using format \f(CRiso\fP).
+.RE
+.sp
+\fB\-\-preparer\fP
+.RS 4
+Set ISO data preparer id (if using format \f(CRiso\fP).
+.RE
+.sp
+\fB\-\-application\fP
+.RS 4
+Set ISO application id (if using format \f(CRiso\fP).
+.RE
+.sp
+\fB\-\-obs\-keys\fP
+.RS 4
+Retrieve and add project keys from the openSUSE Build Service
+as needed to verify the RPMs in \fISOURCES\fP.
+.br
+See \fBAdding RPMs\fP below.
+.RE
+.SH "CONFIGURATION FILE"
+.sp
+mkdud reads \f(CR$HOME/.mkdudrc\fP at startup. There\(cqs only one possible 
entry:
+.sp
+\fBsign\-key\fP=\fIKEY_FILE\fP
+.RS 4
+File name of the private signing key. The same as the \fB\-\-sign\-key\fP 
option.
+.RE
+.sp
+\fBsign\-key\-id\fP=\fIKEY_ID\fP
+.RS 4
+Key id of the signing key. The same as the \fB\-\-sign\-key\-id\fP option.
+.RE
+.SH "DRIVER UPDATE SOURCES"
+.sp
+To create a driver update you need \fISOURCES\fP. \fISOURCES\fP may be:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+existing driver updates; either as archive, rpm, or unpacked directory;
+all driver updates are joined
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+RPMs; Packages not containing a driver update are used according to the value
+of the \fB\-\-install\fP option
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+PGP pubic key files (ASCII); the files are added to the rpm key database for 
verifying
+RPMs during the installation process; see \fBAdding RPMs\fP below
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+kernel modules
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+\f(CRmodule.order\fP and \f(CRmodule.config\fP files; see Update Media HOWTO.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+\f(CRupdate.pre\fP, \f(CRupdate.post\fP, \f(CRupdate.post2\fP scripts; see 
Update Media HOWTO;
+note that you can specify several \f(CRupdate.post\fP, etc. scripts; they are 
all run
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+\f(CR*.ycp\fP, \f(CR*.ybc\fP, or \f(CR*.rb\fP files; files are copied to the 
correct places automatically
+if they contain a usable \f(CRFile:\fP comment
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+\f(CRy2update\fP directories
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+program files (binaries, libraries, executable scripts); they are put into the
+\f(CRinstall\fP dir; you can run them if needed using the \fB\-\-exec\fP option
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+plain text files; they are considered documentation
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+directories that are neither DUDs nor YaST updates; everything below the 
directory
+is added to the installation system
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+ISO images; the images are unpacked and scanned for driver updates
+.RE
+.SH "ADDING RPMS"
+.sp
+If you add RPMs to \fISOURCES\fP, these RPMs can be used to update the 
installation system
+and/or to be installed in the target system. See \fB\-\-install\fP option on 
how to choose.
+.sp
+The best way is to go for \f(CRrepo\fP to install them in the target system as 
then they
+are handled by the package manager and package dependencies are automatically 
resolved.
+.sp
+But there are two catches:
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 1.\h'+01'\c
+.\}
+.el \{\
+.  sp -1
+.  IP " 1." 4.2
+.\}
+The package must be actually required by the selected pattern or it must be
+manually selected in the package manager; else it won\(cqt be installed at all.
+.sp
+This is normally no problem if you update a package (as it\(cqs likely 
required, else
+you wouldn\(cqt want to update it) but if you try to install some uncommon 
package
+it might not be selected.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 2.\h'+01'\c
+.\}
+.el \{\
+.  sp -1
+.  IP " 2." 4.2
+.\}
+If the package is signed, the signature will be checked by the package manager
+and you\(cqll end up with a warning if the necessary public key is not 
available. This
+particularly happens with packages from the openSUSE Build Service which were 
built
+in some user\(cqs project.
+.sp
+For this, mkdud will package any pgp public key files you add to \fISOURCES\fP 
in a way so
+that they are used by the package manager during installation. They will 
\fBnot\fP be
+installed in the target system.
+.sp
+To ease this even more, the \fB\-\-obs\-keys\fP option causes mkdud to 
retrieve the necessary
+keys for each RPM in \fISOURCES\fP from the build service using the 
\f(CRosc\fP tool. Note that
+you must configure the build service access via \f(CR$HOME/.oscrc\fP for this 
to work.
+.RE
+.SH "DISTRIBUTION (PRODUCT) NAMES:"
+.sp
+The \fB\-\-dist\fP option accepts these values (case\-insensitive; X, Y: 
decimal numbers):
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+leapX.Y (e.g. \f(CRleap16.1\fP) = openSUSE Leap X.Y
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+(obsolete) kubicX.Y (e.g. kubic1.0) = openSUSE Kubic X.Y
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+slowroll = openSUSE Slowroll
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+tw, tumbleweed = openSUSE Tumbleweed
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+sleX (e.g. sle15) = SUSE Linux Enterprise (Server + Desktop) X
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+slesX (e.g. sles15) = SUSE Linux Enterprise Server X
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+sledX (e.g. sled15) = SUSE Linux Enterprise Desktop X \- but see notes below
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+slesX.Y (e.g. sles16.1) = SUSE Linux Enterprise Server X.Y
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+caaspX.Y (e.g. caasp1.0) = SUSE Container as a Service Platform X.Y \- see 
notes below
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+microX.Y (e.g. micro5.0) = SUSE Linux Enterprise Micro X.Y
+.RE
+.sp
+As a shorthand and to avoid common mistakes, these aliases do also work (X, Y: 
decimal numbers):
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+X.Y with X = 15 (e.g. 15.1) resolves to:
+.br
+SUSE Linux Enterprise (Server + Desktop) 15 + openSUSE Leap 15.Y
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+X.Y with X >= 16 (e.g. 16.1) resolves to:
+.br
+SUSE Linux Enterprise Server X.Y + openSUSE Leap X.Y
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+X with X = 15 resolves to:
+.br
+SUSE Linux Enterprise (Server + Desktop) 15
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+X with X >= 16 resolves to:
+.br
+SUSE Linux Enterprise Server X.0
+.RE
+.sp
+\fBNote 1\fP: there aren\(cqt any products anymore that actually use 
\f(CRsledX\fP,
+even SLED uses the \f(CRsles\fP DUDs meanwhile. Because of this, please just 
use \f(CRslesX\fP
+when creating a DUD for a SUSE Linux Enterprise product.
+.sp
+\fBNote 2\fP: CaaSP releases are based on SLE releases. Since driver
+updates are usually released for a specific SLE version mkdud provides a
+mapping CaaSP release <\(-> SLE release when building with 
\fB\-\-dist\fP=caspX.Y.
+Currently:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+caasp1.0 = sles12 (\-sp2)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+caasp2.0 = sles12 (\-sp3)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+caasp3.0 = sles12 (\-sp3)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+caasp4.0 = sles15
+.RE
+.sp
+Kubic is based on Tumbleweed. For compatibility, \fB\-\-dist\fP=kubic... 
variants are still
+supported but will be mapped to Tumbleweed. Please use \fB\-\-dist\fP=tw 
directly.
+.sp
+openSUSE MicroOS (not to be confused with SUSE Linux Enterprise Micro) is
+based on Tumbleweed. Use \fB\-\-dist\fP=tw.
+.sp
+Driver updates built for SLE 12 will implicitly also work with
+CaaSP3.0; those built for SLE 15 will implicitly also work with CaaSP4.0. But
+this is not true for CaaSP1.0 and CaaSP2.0.
+.sp
+Normally, a DUD will apply to the main release as well as to all the service 
packs.
+To target a specific service pack, use the \fB\-\-condition\fP option.
+For example, to get a DUD exclusively for \f(CRsle15\-sp1\fP:
+\fB\-\-dist\fP=sle15\~\fB\-\-condition\fP=ServicePack1
+.sp
+This works also to target a specifc Tumbleweed release (YaST based only):
+\fB\-\-dist\fP=tw\~\fB\-\-condition\fP=20191231.
+.sp
+You can specify several \fB\-\-condition\fP options. They must all be 
fulfilled (logical \fBand\fP).
+.SH "AGAMA VS. YAST"
+.sp
+Starting with SLES 16.0 and Leap 16.0, the installer changes from YaST to 
Agama. With this, the installation
+system setup changes substantially and there are a few differences in driver 
update handling.
+.sp
+There are currently Tumbleweed/Slowroll media with either Agama or YaST. Use 
the \fB\-\-installer\fP option to specify for
+which variant you need the driver update in this case.
+.sp
+With Agama:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+dracut replaces linuxrc for initial setup steps in the initrd; this results in 
different boot and config options
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+the \fB\-\-install=rpm\fP package install method is not available; all package 
updates intended
+for the target system are done by creating a software repository with all 
packages
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+there are no update.pre or update.post scripts
+.RE
+.SH "ADDING DRACUT HOOKS"
+.sp
+You can add dracut hooks using the \fB\-\-dracut\-hook HOOK:CMD\fP option. 
This can either be a
+provided custom script or a command to run \- which is implicitly inserted 
into a suitable script.
+.sp
+Let\(cqs see some excamples:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+If \fBCMD\fP follows the naming scheme NN\-NAME.sh with NN a 2\-digit number 
and NAME some arbitrary name then
+it is assumed that this is a script to run in \fBHOOK\fP; e.g. 
\fB\-\-dracut\-hook pre\-pivot:90\-foobar.sh\fP. Note that
+you still have to provide a script with this name to the mkdud command:
+.sp
+.if n .RS 4
+.nf
+.fam C
+mkdud \-\-create foobar.dud \-\-dist sles16.1 \(rs
+\-\-dracut\-hook pre\-pivot:90\-foobar.sh 90\-foobar.sh
+.fam
+.fi
+.if n .RE
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+Otherwise, \fBCMD\fP is assumed to be a command to run. A \fBscript 
99\-zz\(emmkdud.sh\fP will be automatically created which
+runs this command and the script is added to \fBHOOK\fP; for example:
+.sp
+.if n .RS 4
+.nf
+.fam C
+mkdud \-\-create foobar.dud \-\-dist sles16.1 \(rs
+\-\-dracut\-hook "pre\-pivot:echo hello"
+.fam
+.fi
+.if n .RE
+.RE
+.sp
+Hook names can be (or use \fB\-\-no\-check\-hooks\fP to allow arbitrary names):
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+cleanup, cmdline, emergency, mount, netroot, pre\-mount, pre\-pivot, 
pre\-shutdown, pre\-trigger, pre\-udev, shutdown, shutdown\-emergency,
+initqueue/finished, initqueue/online, initqueue/settled, initqueue/timeout
+.RE
+.sp
+See dracut.modules(7) for documentation.
+.SH "CONSISTENCY CHECKS"
+.sp
+It is possible to create driver updates that will predictably not work
+because they interfere with the setup of the installation environment.
+.sp
+mkdud will warn you and try to work around these cases. But there still
+may be valid use\-cases so the \fB\-\-fix\-XXX\fP / \fB\-\-no\-fix\-XXX\fP 
group of options
+lets you enable (default) or disable these workarounds.
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+\fB\-\-[no\-]fix\-yast\fP
+.br
+In older SUSE versions \f(CR/sbin/yast\fP was a different script in the
+installation environment than the one from the yast package. Updating
+the special variant with the regular script would make the installation
+impossible. mkdud recognizes this and removes \f(CR/sbin/yast\fP from driver
+updates.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+\fB\-\-[no\-]fix\-dist\fP
+.br
+The \fB\-\-dist\fP option normally allows you to specify only distributions
+mkdud knows about. With this option you may put anything there \- in case
+you know better.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+\fB\-\-[no\-]fix\-usr\-src\fP
+.br
+The installation system must not contain a \f(CR/usr/src/packages\fP directory.
+mkdud normally removes it (and its content) from driver updates.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+\fB\-\-[no\-]fix\-adddir\fP
+.br
+The \f(CR/sbin/adddir\fP script is used in the installation system to actually
+apply the part of a driver update that replaces files in the
+installation system. In older SUSE versions this script was not able to
+update some programs from the \f(CRcoreutils\fP package. mkdud implicitly
+includes an update for this script if it detects a need for it.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+\fB\-\-[no\-]check\-hooks\fP
+.br
+mkdud will only allow dracut hook names it knows about. But dracut may evolve.
+Use this option to disable the check if necessary.
+.RE
+.SH "HOW TO APPLY DRIVER UPDATES"
+.sp
+There are several ways to apply driver updates:
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 1.\h'+01'\c
+.\}
+.el \{\
+.  sp -1
+.  IP " 1." 4.2
+.\}
+During installation
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+using boot option \fBinst.dud=URL_TO_DUD_FILE\fP (Agama) resp. 
\fBdud=URL_TO_DUD_FILE\fP (YaST)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+unpack the driver update to a local file system with label \fBOEMDRV\fP (YaST)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+rename the driver update to \fBdriverupdate\fP and place it into the root of 
the installation repository (at the
+same level where the \fBrepodata\fP directory is) (YaST)
+.RE
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04' 2.\h'+01'\c
+.\}
+.el \{\
+.  sp -1
+.  IP " 2." 4.2
+.\}
+By preparing patched installation media
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+using \fBmkmedia \-\-create new.iso \-\-initrd DUD_FILE orig.iso\fP
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+using \fBmkmedia \-\-create new.iso \-\-apply\-dud DUD_FILE orig.iso\fP
+.RE
+.RE
+.sp
+The difference between \fB\-\-apply\-dud\fP and \fB\-\-initrd\fP is that 
\fB\-\-apply\-dud\fP applies the driver update directly to the
+installation medium while \fB\-\-initrd\fP only adds the driver update to the 
initrd where it will be found and applied at
+installation time (equivalent to using the \fBinst.dud\fP or \fBdud\fP boot 
options).
+.sp
+Only with \fB\-\-apply\-dud\fP you can apply changes to the initrd, boot 
options, or the installation ISO.
+.sp
+\fBmkdud \-\-show DUD_FILE\fP tells you which ways are available for a 
specific driver update.
+.sp
+Using \fBmkdud \-\-format=iso ...\fP produces an ISO9660 file system with 
label \fBOEMDRV\fP \- ready to be used in the OEMDRV method
+described above (no unpacking needed).
+.sp
+\fBNote\fP: If you have package updates for the live root file system (using 
\fB\-\-install=instsys\fP) the updated packages
+are added to the installation system / live root \- but rpm scripts are not 
run and the live root rpm database is not updated.
+.sp
+\fBHint\fP: If it simplifies your workflow, combine several driver updates 
into a single update; e.g.:
+.br
+\fBmkdud \-\-create foo_all.dud foo1.dud foo2.dud foo3.dud ...\fP
+.SH "EXAMPLES"
+.sp
+.if n .RS 4
+.nf
+.fam C
+# show content of foo.dud
+mkdud \-\-show foo.dud
+
+# create update for hello.rpm
+mkdud \-\-create foo.dud \-\-dist leap15.1 hello.rpm
+
+# create kernel update
+mkdud \-\-create foo.dud \-\-dist leap15.1 kernel\-*.rpm
+
+# create kernel update and replace tg3 module
+mkdud \-\-create foo.dud \-\-dist leap15.1 kernel\-*.rpm tg3.ko
+
+# create kernel update, replace tg3 module, add some docs
+# and give the driver update a nice name
+mkdud \-\-create foo.dud \-\-dist leap15.1 \-\-name \*(Aqfor granny\*(Aq 
kernel\-*.rpm tg3.ko README
+
+# update some YaST stuff
+mkdud \-\-create foo.dud \-\-dist leap15.1 BootCommon.y*
+
+# add directory tree below newstuff/ to installation system
+mkdud \-\-create foo.dud \-\-dist leap15.1 newstuff
+
+# extract driver updates from ISO (you need root permissions for that)
+mkdud \-\-create foo.dud xxx.iso
+
+# create update for hello.rpm and join with foo1.dud and foo2.dud
+mkdud \-\-create foo.dud \-\-dist sle15 foo1.dud foo2.dud hello.rpm
+.fam
+.fi
+.if n .RE
+.sp
+Find more usage examples here: \c
+.URL "https://github.com/openSUSE/mkdud/blob/master/HOWTO.md"; "" "."
+.SH "SEE ALSO"
+.sp
+\fBmkmedia(1)\fP, \fBdracut.modules(7)\fP, \fBdracut.cmdline(7)\fP.
+.SH "LINKS"
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+more documentation: \f(CR/usr/share/doc/packages/mkdud\fP
+.br
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+mkdud web site: \c
+.URL "https://github.com/openSUSE/mkdud"; ""
+.br
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+Update Media HOWTO: \c
+.URL "http://ftp.suse.com/pub/people/hvogel/Update\-Media\-HOWTO/index.html"; 
"" ""
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+mkmedia / mksusecd web site: \c
+.URL "https://github.com/openSUSE/mksusecd"; "" ""
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.  sp -1
+.  IP \(bu 2.3
+.\}
+openSUSE Build Service: \c
+.URL "https://build.opensuse.org"; "" ""
+.RE
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mkdud-2.4/mkdud_man.adoc new/mkdud-2.6/mkdud_man.adoc
--- old/mkdud-2.4/mkdud_man.adoc        2026-03-23 19:37:29.000000000 +0100
+++ new/mkdud-2.6/mkdud_man.adoc        2026-03-31 13:21:58.000000000 +0200
@@ -24,6 +24,12 @@
 *--version*::
 Show mkdud version.
 
+*--mkisofs*::
+Use mkiosfs to build ISO images (default if available).
+
+*--xorriso*::
+Use xorriso to build ISO images.
+
 *--save-temp*::
 Keep temporary files.
 
@@ -61,8 +67,8 @@
 So `sles15-sp1` is the same as `sles15`. But see *--condition*
 below for a way to target specific service packs. +
 See *Distribution (Product) Names* below for more details. +
-*Note 4*: For Tumbleweed, YaST is assumed as installer. If you need
-to apply the DUD to a Tumbleweed variant using Agama, use the *--installer* 
option.
+*Note 4*: Tumbleweed and  Slowroll may use either Agama or YaST as installer.
+You have to use the *--installer* option to say for which one the DUD is 
intended.
 
 *--condition*=_SCRIPT_::
 Run _SCRIPT_ and apply DUD only if _SCRIPT_ has exit status 0.
@@ -294,7 +300,8 @@
 
 - leapX.Y (e.g. `leap16.1`) = openSUSE Leap X.Y
 - (obsolete) kubicX.Y (e.g. kubic1.0) = openSUSE Kubic X.Y
-- tw = openSUSE Tumbleweed
+- slowroll = openSUSE Slowroll
+- tw, tumbleweed = openSUSE Tumbleweed
 - sleX (e.g. sle15) = SUSE Linux Enterprise (Server + Desktop) X
 - slesX (e.g. sles15) = SUSE Linux Enterprise Server X
 - sledX (e.g. sled15) = SUSE Linux Enterprise Desktop X - but see notes below
@@ -342,7 +349,7 @@
 For example, to get a DUD exclusively for `sle15-sp1`:
 *--dist*=sle15{nbsp}**--condition**=ServicePack1
 
-This works also to target a specifc Tumbleweed release:
+This works also to target a specifc Tumbleweed release (YaST based only):
 *--dist*=tw{nbsp}**--condition**=20191231.
 
 You can specify several *--condition* options. They must all be fulfilled 
(logical *and*).
@@ -353,7 +360,7 @@
 Starting with SLES 16.0 and Leap 16.0, the installer changes from YaST to 
Agama. With this, the installation
 system setup changes substantially and there are a few differences in driver 
update handling.
 
-There are currently Tumbleweed media with either Agama or YaST. Use the 
*--installer* option to specify for
+There are currently Tumbleweed/Slowroll media with either Agama or YaST. Use 
the *--installer* option to specify for
 which variant you need the driver update in this case.
 
 With Agama:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mkdud-2.4/obs/mkdud.spec new/mkdud-2.6/obs/mkdud.spec
--- old/mkdud-2.4/obs/mkdud.spec        2026-03-23 19:37:29.000000000 +0100
+++ new/mkdud-2.6/obs/mkdud.spec        2026-03-31 13:21:58.000000000 +0200
@@ -17,28 +17,23 @@
 
 
 Name:           mkdud
-%if 0%?suse_version >= 1500 || 0%?sle_version >= 120400
-BuildRequires:  rubygem(asciidoctor)
-%else
-BuildRequires:  asciidoc
-%if 0%?suse_version >= 1310 || 0%?sle_version >= 120000
-BuildRequires:  libxslt-tools
-%endif
-%endif
-%if %suse_version >= 1500
-Requires:       mkisofs
-%else
-Requires:       genisoimage
-%endif
+Version:        0.0
+Release:        0
+Summary:        Create driver update disks (DUD).
+License:        GPL-3.0-or-later
+Group:          Hardware/Other
+Source:         %{name}-%{version}.tar.xz
+URL:            https://github.com/openSUSE/mkdud
 Requires:       binutils
 Requires:       coreutils
 Requires:       cpio
 Requires:       file
 Requires:       findutils
-Requires:       gpg2
+Requires:       (gpg2 or gnupg2)
 Requires:       grep
 Requires:       gzip
 Requires:       kmod
+Requires:       (mkisofs or xorriso)
 Recommends:     osc
 Requires:       rpm
 Requires:       rpm-build
@@ -46,18 +41,11 @@
 Requires:       util-linux
 Requires:       xz
 Requires:       zstd
-Summary:        Create driver update from rpms
-License:        GPL-3.0-or-later
-Group:          Hardware/Other
-Version:        0.0
-Release:        0
-Source:         %{name}-%{version}.tar.xz
-Url:            https://github.com/openSUSE/mkdud
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildArch:      noarch
 
 %description
-Create a driver update from rpms.
+Create driver update disks (DUD).
 
 Authors:
 --------
@@ -81,7 +69,7 @@
 /usr/share/bash-completion
 %doc %{_mandir}/man1/mkdud.*
 %doc *.md
-%if %suse_version >= 1500
+%if 0%{?suse_version} >= 1500 || 0%{?suse_version} == 0
 %license COPYING
 %else
 %doc COPYING

Reply via email to