- Tumbleweed 2.2-1.1
- Leap-15.6
| MKDUD(1) | User Commands | MKDUD(1) |
NAME¶
mkdud - create and manage SUSE Linux driver updates
SYNOPSIS¶
mkdud [OPTIONS]... SOURCES...
DESCRIPTION¶
mkdud manages driver updates (DUD) for SUSE Linux. You can create them, view their contents, and combine several driver updates into a single one.
General Options¶
--version
--save-temp
--help
Verify Driver Update¶
-s, --show=DUD
Create Driver Update¶
-c, --create=DUD
-a, --arch=ARCH
Note: if you don’t set the architecture and mkdud can’t find a hint in SOURCES either an update for all supported architectures is created.
-d, --dist=DIST
Note 1: Since SLE 16 / Leap 16.0 Agama replaces YaST as installer.
See Agama vs. YaST below for more details.
Note 2: sle15 is a short hand for specifying both sles15 and sled15.
Note 3: There are no separate names for service packs. So sles15-sp1 is the same as sles15. But see --condition below for a way to target specific service packs.
Note 4: sle16 is used for SLE 16. There are no service packs for the SLE 16 product line.
See Distribution (Product) Names below for more details.
Option can be repeated to specify several distribution targets.
--condition=SCRIPT
Note: For Tumbleweed you can pass the snapshot version as N to limit the DUD to a specific snapshot.
Option can be repeated to specify several conditions.
-p, --prio=NUM
-n, --name=NAME
Option can be repeated to specify a multi-line name.
-x, --exec=COMMAND
Option can be repeated to specify several commands.
Note: The commands are run just before (YaST) or after (Agama) kernel modules are updated.
--dracut-hook=HOOK:CMD
HOOK must be a valid dracut hook name. CMD is either a custom script to run or a command to run.
Option can be repeated.
See Adding dracut hooks below for details.
-i, --install=METHODS
--initrd=RPM|DIR
Option can be repeated to add several packages or directories.
This requires applying the driver update with mkmedia to work.
See How to apply driver updates below for details.
--iso=DIR
Option can be repeated to add several directories.
Use this option to update for example shim or grub on the installation medium.
This requires applying the driver update with mkmedia to work.
See How to apply driver updates below for details.
--installer=INSTALLER
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.
--config=KEY=VALUE
You can set boot options using KEY 'boot'. Setting boot options accepts the same semantics as mkmedia (see mkmedia docs); in particular, prefixing a boot option with '-' removes it.
See How to apply driver updates below for limitations.
Option can be repeated to set several options.
--no-docs
This is the default setting.
--keep-docs
--force
--no-fix-yast
See Consistency checks.
--no-fix-dist
See Consistency checks.
--no-fix-usr-src
See Consistency checks.
--no-fix-adddir
See Consistency checks.
--no-check-hooks
See Adding dracut hooks.
--format=FORMAT
Default FORMAT is cpio.gz (gzip compressed cpio archive).
Using FORMAT 'iso' produces an ISO image with label 'OEMDRV' - see How to apply driver updates below for more information.
Note: please check README.md before changing the default.
--prefix=NUM
See README.
--sign
--detached-sign
--sign-key=KEY_FILE
--sign-key-id=KEY_ID
If both --sign-key and --sign-key-id are specified, --sign-key-id wins.
Note: gpg might show an interactive dialog asking for a password to unlock the key.
--volume
--vendor
--preparer
--application
--obs-keys
See Adding RPMs below.
CONFIGURATION FILE¶
mkdud reads $HOME/.mkdudrc at startup. There’s only one possible entry:
sign-key=KEY_FILE
sign-key-id=KEY_ID
DRIVER UPDATE SOURCES¶
To create a driver update you need SOURCES. SOURCES may be:
ADDING RPMS¶
If you add RPMs to SOURCES, these RPMs can be used to update the installation system and/or to be installed in the target system. See --install option on how to choose.
The best way is to go for repo to install them in the target system as then they are handled by the package manager and package dependencies are automatically resolved.
But there are two catches:
This is normally no problem if you update a package (as it’s likely required, else you wouldn’t want to update it) but if you try to install some uncommon package it might not be selected.
For this, mkdud will package any pgp public key files you add to SOURCES in a way so that they are used by the package manager during installation. They will not be installed in the target system.
To ease this even more, the --obs-keys option causes mkdud to retrieve the necessary keys for each RPM in SOURCES from the build service using the osc tool. Note that you must configure the build service access via $HOME/.oscrc for this to work.
DISTRIBUTION (PRODUCT) NAMES:¶
The --dist option accepts these values (case-insensitive; X, Y: decimal numbers):
As a shorthand and to avoid common mistakes, these aliases do also work (X, Y: decimal numbers):
SUSE Linux Enterprise (Server + Desktop) X + openSUSE Leap X.Y
SUSE Linux Enterprise (Server + Desktop) X
Note 1: there aren’t any products anymore that actually use sledX, even SLED uses the sles DUDs meanwhile. Because of this, please just use sleX when creating a DUD for a SUSE Linux Enterprise product.
Note 2: 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 --dist=caspX.Y. Currently:
Kubic is based on Tumbleweed. For compatibility, --dist=kubic... variants are still supported but will be mapped to Tumbleweed. Please use --dist=tw directly.
openSUSE MicroOS (not to be confused with SUSE Linux Enterprise Micro) is based on Tumbleweed. Use --dist=tw.
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.
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 --condition option. For example, to get a DUD exclusively for sle15-sp1: --dist=sle15 --condition=ServicePack1
This works also to target a specifc Tumbleweed release: --dist=tw --condition=20191231.
You can specify several --condition options. They must all be fulfilled (logical and).
AGAMA VS. YAST¶
Starting with SLE 16 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.
With Agama:
ADDING DRACUT HOOKS¶
You can add dracut hooks using the --dracut-hook HOOK:CMD option. This can either be a provided custom script or a command to run - which is implicitly inserted into a suitable script.
Let’s see some excamples:
mkdud --create foobar.dud --dist sle16 \ --dracut-hook pre-pivot:90-foobar.sh 90-foobar.sh
mkdud --create foobar.dud --dist sle16 \ --dracut-hook "pre-pivot:echo hello"
Hook names can be (or use --no-check-hooks to allow arbitrary names):
See dracut.modules(7) for documentation.
CONSISTENCY CHECKS¶
It is possible to create driver updates that will predictably not work because they interfere with the setup of the installation environment.
mkdud will warn you and try to work around these cases. But there still may be valid use-cases so the --fix-XXX / --no-fix-XXX group of options lets you enable (default) or disable these workarounds.
In older SUSE versions /sbin/yast 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 /sbin/yast from driver updates.
The --dist option normally allows you to specify only distributions mkdud knows about. With this option you may put anything there - in case you know better.
The installation system must not contain a /usr/src/packages directory. mkdud normally removes it (and its content) from driver updates.
The /sbin/adddir 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 coreutils package. mkdud implicitly includes an update for this script if it detects a need for it.
mkdud will only allow dracut hook names it knows about. But dracut may evolve. Use this option to disable the check if necessary.
HOW TO APPLY DRIVER UPDATES¶
There are several ways to apply driver updates:
The difference between --apply-dud and --initrd is that --apply-dud applies the driver update directly to the installation medium while --initrd only adds the driver update to the initrd where it will be found and applied at installation time (equivalent to using the inst.dud or dud boot options).
Only with --apply-dud you can apply changes to the initrd, boot options, or the installation ISO.
mkdud --show DUD_FILE tells you which ways are available for a specific driver update.
Using mkdud --format=iso ... produces an ISO9660 file system with label OEMDRV - ready to be used in the OEMDRV method described above (no unpacking needed).
Note: If you have package updates for the live root file system (using --install=instsys) 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.
Hint: If it simplifies your workflow, combine several
driver updates into a single update; e.g.:
mkdud --create foo_all.dud foo1.dud foo2.dud foo3.dud ...
EXAMPLES¶
# 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 'for granny' 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
Find more usage examples here: <https://github.com/openSUSE/mkdud/blob/master/HOWTO.md>.
SEE ALSO¶
LINKS¶
| 2025-09-10 | mkdud 2.2 |