dracutdevs / dracut

dracut the event driven initramfs infrastructure
https://github.com/dracutdevs/dracut/wiki
GNU General Public License v2.0
586 stars 395 forks source link

fix(dracut): correct regression with multiple `rd.break=` options #2607

Open aafeijoo-suse opened 6 months ago

aafeijoo-suse commented 6 months ago

Since the introduction of the dracut-util binary to parse kernel command line arguments, if the user inputs multiple rd.break= options, dracut only stops the boot process at the last one.

[    0.985362] localhost dracut-cmdline[245]: /bin/dracut-cmdline@18(): info 'Using kernel command line parameters:' ' ... rd.debug rd.break=cmdline rd.break=pre-pivot'
...
[    1.044979] localhost dracut-cmdline[245]: /bin/dracut-cmdline@48(): getarg rd.break=cmdline -d rdbreak=cmdline
[    1.044979] localhost dracut-cmdline[245]: /lib/dracut-lib.sh@155(getarg): debug_off
[    1.044979] localhost dracut-cmdline[245]: /lib/dracut-lib.sh@23(debug_off): set +x
[    1.044979] localhost dracut-cmdline[245]: /lib/dracut-lib.sh@218(getarg): return 1

For options that can be specified multiple times, getargs should be used instead.

master> export CMDLINE="rd.break=cmdline rd.break=pre-udev rd.break=pre-pivot"
master> ./dracut-getarg rd.break=cmdline
master> echo $?
1
master> ./dracut-getarg rd.break=pre-udev
master> echo $?
1
master> ./dracut-getarg rd.break=pre-pivot
master> echo $?
0
master> ./dracut-getargs rd.break=cmdline
cmdline
master> echo $?
0
master> ./dracut-getargs rd.break=pre-udev
pre-udev
master> echo $?
0
master> ./dracut-getargs rd.break=pre-pivot
pre-pivot
master> echo $?
0

Checklist

Fixes 501d82f79675a6bf9b37e8250152515863a80236

LaszloGombos commented 6 months ago

if the user inputs multiple rd.break= options, dracut only stops the boot process at the last one.

The dracut documentation seems to suggest that dracut works as intended and this is not a bug.

rd.break={cmdline|pre-udev|pre-trigger|initqueue|pre-mount|mount|pre-pivot|cleanup}
           drop to a shell before the defined breakpoint starts

I think if this PR lands, the PR should also change the documentation.

aafeijoo-suse commented 6 months ago

if the user inputs multiple rd.break= options, dracut only stops the boot process at the last one.

The dracut documentation seems to suggest that dracut works as intended and this is not a bug.

Then why the following excerpt of the documentation states that we can stop at pre-shutdown and shutdown?

https://github.com/dracutdevs/dracut/blob/4980bad34775da715a2639b736cba5e65a8a2604/man/dracut.usage.asc?plain=1#L513

This used to work at least until dracut-049 (SLE15-SP3), so it's a clear regression.

stale[bot] commented 2 months ago

This issue is being marked as stale because it has not had any recent activity. It will be closed if no further activity occurs. If this is still an issue in the latest release of Dracut and you would like to keep it open please comment on this issue within the next 7 days. Thank you for your contributions.