Skip to content

perf(dracut-functions): optimize _inst_rule_programs()#2352

Open
aafeijoo-suse wants to merge 1 commit into
dracut-ng:mainfrom
aafeijoo-suse:inst-perf
Open

perf(dracut-functions): optimize _inst_rule_programs()#2352
aafeijoo-suse wants to merge 1 commit into
dracut-ng:mainfrom
aafeijoo-suse:inst-perf

Conversation

@aafeijoo-suse
Copy link
Copy Markdown
Contributor

Let's start analyzing the output of a non-hostonly build, counting how many times _inst_rule_programs() calls an inst*() function and with what arguments:

$ dracut -f -N --debug testn.img 2>&1 &> testn.txt
$ grep -r -c "(_inst_rule_programs): inst_" testn.txt
59
$ grep -r "(_inst_rule_programs): inst_" testn.txt
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/bin/systemctl
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/bin/udevadm
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/sbin/dmsetup
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/sbin/dmsetup
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/sbin/dmsetup
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/sbin/dmsetup
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/sbin/kpartx
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /bin/sh
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /bin/sh
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /bin/sh
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/sbin/dmsetup
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /usr/bin/readlink
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /usr/bin/basename
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /usr/bin/basename
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /usr/bin/basename
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/sbin/mdadm
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/sbin/mdadm
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/sbin/mdadm
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/sbin/mdadm
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /bin/sh
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /sbin/partx
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /sbin/mdadm
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /sbin/mdadm
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/bin/rm
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/bin/systemd-run
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/bin/systemctl
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/sbin/multipath
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/sbin/kpartx
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /usr/bin/logger
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /usr/sbin/multipath
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /usr/bin/logger
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/kpartx_id
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/kpartx_id
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /bin/sh
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /bin/sh
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /bin/logger
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/bin/sg_inq
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/bin/sg_inq
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/bin/sg_inq
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/bin/sg_inq
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/bin/sg_inq
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/bin/sg_inq
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/lib/udev/cdrom_id
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/cdrom_id
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/fido_id
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/scsi_id
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/scsi_id
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /usr/lib/udev/scsi_id
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/ata_id
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/ata_id
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/ata_id
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/scsi_id
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/scsi_id
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/v4l_id
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/bin/udevadm
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/dmi_memory_id
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/bin/udevadm
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/bin/loginctl
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/mtd_probe

This means that _inst_rule_programs() spawns 59 dracut-install processes, without grouping the binaries of the same rule, and sometimes trying to install the same binary. Therefore, this can be optimized:

  • Instead of calling inst_binary() and inst_multiple() within the 3 loops for each PROGRAM/RUN/IMPORT element, collect the different binaries to be installed and call inst_multiple() once at the end. Note that inst_binary() only differs from inst_multiple() because it only expects 1 argument.
  • Cache the binaries already installed from previous rules, to avoid unnecessary calls.

After this simple patch, the number of spawned dracut-install processes drops from 59 to 18, i.e., 41 less.

$ grep -r -c "(_inst_rule_programs): inst_" testn2.txt
18
$ grep -r "(_inst_rule_programs): inst_" testn2.txt
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/bin/systemctl
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/bin/udevadm
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/sbin/dmsetup
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/sbin/kpartx
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /bin/sh
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/bin/readlink /usr/bin/basename /usr/sbin/mdadm
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /sbin/partx /sbin/mdadm
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/sbin/multipath /usr/bin/systemd-run /usr/bin/rm
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/lib/udev/kpartx_id /usr/bin/logger
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /bin/logger /usr/bin/sg_inq
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/lib/udev/cdrom_id
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/lib/udev/fido_id
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/lib/udev/scsi_id
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/lib/udev/ata_id
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/lib/udev/v4l_id
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/lib/udev/dmi_memory_id
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/bin/loginctl
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/lib/udev/mtd_probe

Double-check that we are installing the same binaries:

$ grep -r "(_inst_rule_programs): inst_" testn.txt  | cut -d ' ' -f 3 | sort -u | wc -l
25
$ grep -r "(_inst_rule_programs): inst_" testn2.txt  | awk -F"inst_multiple " '{ print $2 }' | tr ' ' '\n' | sort | wc -l
25
$ diff \
> <(grep -r "(_inst_rule_programs): inst_" testn.txt  | cut -d ' ' -f 3 | sort -u) \
> <(grep -r "(_inst_rule_programs): inst_" testn2.txt  | awk -F"inst_multiple " '{ print $2 }' | tr ' ' '\n' | sort)
$ echo $?
0

Checklist

  • I have tested it locally
  • I have reviewed and updated any documentation if relevant
  • I am providing new code and test(s) for it

@aafeijoo-suse aafeijoo-suse requested a review from a team as a code owner April 7, 2026 13:25
Comment thread dracut-functions.sh Outdated
Comment thread dracut-functions.sh

# cache installed rule programs
if ! declare -p _rule_programs_cache 2> /dev/null | grep -q "declare -A"; then
declare -gxA _rule_programs_cache=()
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am +1 for calling inst_multiple once, I am not sure about the added cache.

How much difference does this cache make? Could we do the caching in inst_multiple instead? I would go one step further for #1419: Add staging functions similar to the inst_* functions. These functions would just collect what should be added. Then call an dracut-intsall equivalent to only write a manifest for 3cpio.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am +1 for calling inst_multiple once, I am not sure about the added cache.

How much difference does this cache make?

I don't think hyperfine can show a real improvement with these kinds of minor performance patches. That depends on multiple factors. But IMO it seems like a logical and small code improvement. I remember when I implemented 80f2caf, I didn't see anything important with hyperfine, but that turned out to be critical in some systems (https://bugzilla.redhat.com/show_bug.cgi?id=2278534#c8).

Could we do the caching in inst_multiple instead? I would go one step further for #1419: Add staging functions similar to the inst_* functions. These functions would just collect what should be added. Then call an dracut-intsall equivalent to only write a manifest for 3cpio.

This is a simple, localized performance improvement. I know you would like to improve how the inst* functions work, but that would be another story. You would need to track the name of the module and all the specific options passed to dracut-install for each call, to be able to say "this module cannot be installed because...".

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We had very slow dracut-install executions on some ARM systems. So reducing the amount of calls we do to dracut-install helped there. That difference could be measured by hyperfine back then. So maybe I should do my benchmarks on a Raspberry Pi instead. I did the hyperfine benchmark to see if we should include this patch in the upcoming Ubuntu 26.04.

@bdrung
Copy link
Copy Markdown
Member

bdrung commented Apr 9, 2026

I did a benchmark with my schroot-big-initrd environment:

# hyperfine -L x before,after -p "cp {x} /usr/lib/dracut/dracut-functions.sh" "update-initramfs -u"
Benchmark 1: update-initramfs -u (x = before)
  Time (mean ± σ):      4.956 s ±  0.023 s    [User: 7.291 s, System: 2.025 s]
  Range (min … max):    4.925 s …  4.993 s    10 runs
 
Benchmark 2: update-initramfs -u (x = after)
  Time (mean ± σ):      4.955 s ±  0.020 s    [User: 7.275 s, System: 2.057 s]
  Range (min … max):    4.921 s …  4.987 s    10 runs
 
Summary
  update-initramfs -u (x = after) ran
    1.00 ± 0.01 times faster than update-initramfs -u (x = before)

Let's start analyzing the output of a non-hostonly build, counting how many
times `_inst_rule_programs()` calls an `inst*()` function and with what
arguments:

```
$ dracut -f -N --debug testn.img 2>&1 &> testn.txt
$ grep -r -c "(_inst_rule_programs): inst_" testn.txt
59
$ grep -r "(_inst_rule_programs): inst_" testn.txt
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/bin/systemctl
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/bin/udevadm
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/sbin/dmsetup
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/sbin/dmsetup
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/sbin/dmsetup
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/sbin/dmsetup
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/sbin/kpartx
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /bin/sh
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /bin/sh
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /bin/sh
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/sbin/dmsetup
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /usr/bin/readlink
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /usr/bin/basename
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /usr/bin/basename
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /usr/bin/basename
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/sbin/mdadm
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/sbin/mdadm
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/sbin/mdadm
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/sbin/mdadm
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /bin/sh
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /sbin/partx
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /sbin/mdadm
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /sbin/mdadm
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/bin/rm
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/bin/systemd-run
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/bin/systemctl
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/sbin/multipath
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/sbin/kpartx
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /usr/bin/logger
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /usr/sbin/multipath
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /usr/bin/logger
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/kpartx_id
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/kpartx_id
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /bin/sh
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /bin/sh
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /bin/logger
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/bin/sg_inq
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/bin/sg_inq
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/bin/sg_inq
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/bin/sg_inq
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/bin/sg_inq
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/bin/sg_inq
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/lib/udev/cdrom_id
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/cdrom_id
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/fido_id
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/scsi_id
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/scsi_id
/usr/lib/dracut/dracut-functions.sh@1244(_inst_rule_programs): inst_binary /usr/lib/udev/scsi_id
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/ata_id
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/ata_id
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/ata_id
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/scsi_id
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/scsi_id
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/v4l_id
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/bin/udevadm
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/dmi_memory_id
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/bin/udevadm
/usr/lib/dracut/dracut-functions.sh@1259(_inst_rule_programs): inst_binary /usr/bin/loginctl
/usr/lib/dracut/dracut-functions.sh@1274(_inst_rule_programs): inst_multiple /usr/lib/udev/mtd_probe
```

This means that `_inst_rule_programs()` spawns 59 dracut-install processes,
without grouping the binaries of the same rule, and sometimes trying to install
the same binary. Therefore, this can be optimized:
- Instead of calling `inst_binary()` and `inst_multiple()` within the 3 loops
for each PROGRAM/RUN/IMPORT element, collect the different binaries to be
installed and call `inst_multiple()` once at the end. Note that `inst_binary()`
only differs from `inst_multiple()` because it only expects 1 argument.
- Cache the binaries already installed from previous rules, to avoid unnecessary
calls.

After this simple patch, the number of spawned dracut-install processes drops
from 59 to 18, i.e., 41 less.

```
$ grep -r -c "(_inst_rule_programs): inst_" testn2.txt
18
$ grep -r "(_inst_rule_programs): inst_" testn2.txt
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/bin/systemctl
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/bin/udevadm
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/sbin/dmsetup
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/sbin/kpartx
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /bin/sh
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/bin/readlink /usr/bin/basename /usr/sbin/mdadm
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /sbin/partx /sbin/mdadm
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/sbin/multipath /usr/bin/systemd-run /usr/bin/rm
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/lib/udev/kpartx_id /usr/bin/logger
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /bin/logger /usr/bin/sg_inq
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/lib/udev/cdrom_id
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/lib/udev/fido_id
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/lib/udev/scsi_id
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/lib/udev/ata_id
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/lib/udev/v4l_id
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/lib/udev/dmi_memory_id
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/bin/loginctl
/usr/lib/dracut/dracut-functions.sh@1291(_inst_rule_programs): inst_multiple /usr/lib/udev/mtd_probe
```

Double-check that we are installing the same binaries:

```
$ grep -r "(_inst_rule_programs): inst_" testn.txt  | cut -d ' ' -f 3 | sort -u | wc -l
25
$ grep -r "(_inst_rule_programs): inst_" testn2.txt  | awk -F"inst_multiple " '{ print $2 }' | tr ' ' '\n' | sort | wc -l
25
$ diff \
> <(grep -r "(_inst_rule_programs): inst_" testn.txt  | cut -d ' ' -f 3 | sort -u) \
> <(grep -r "(_inst_rule_programs): inst_" testn2.txt  | awk -F"inst_multiple " '{ print $2 }' | tr ' ' '\n' | sort)
$ echo $?
0
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants