Are you sure you don’t want early loading for your microcode?
You may need to add the --no-hostonly-cmdline dracut flag. Without it, dracut grabs the current system’s kernel command line from /proc/cmdline (instead of using what you have defined in your dracut config). If you are building the UKI from a live ISO or chroot, it will have a different root device.
I don’t think this message is actually the smoking gun for your system not booting. Is there any way to capture the output on the screen before you drop to the emergency shell? Even just a photo may offer a clue.
Persistent kernel descriptors (like UUID or PARTUUID) are more reliable than using the block device paths during the initramfs stage. It’s hard to say if this is the cause of the issue or not without seeing the messages you get before the emergency shell, but for a UKI I would not risk it.
I don’t think quiet or splash will work with the kernel_cmdline option in a dracut config, since it only sets initrd parameters.
man dracut.conf
kernel_cmdline="parameters"
Specify default kernel command line parameters. Despite its name, this command only sets initrd parameters.
Also, it’s probably not related to your issue but you are adding the uefi option twice–once in the dracut config, and then again with the flag when running dracut.
No, I missed one of the lines when I was making necessary changes to add my microcode.
I will also add the --no-host-only-cmdline flag, Thanks for that one.
I will look deeper into understanding the uuid or partuuid aspect. I’m having a hard time wrapping my head around that. I will also drop the quiet splash part of the kernel_cmdline.
I do know the error that it starts with says something about switch root. I will rerun it and get a photo to add.
Here is what it shows when it stops loading. When I hit continue it goes into a loop saying it can’t connect to some service, i presume it has something to do with the drives not mounting.
just a quick update, after I made your changes, I arch-chroot in run my script and then i get the lovely BSOD Kernel panic. There is absolutely nothing helpful from that screen.
The only errors in journalctl -b is the same as I stated in my original post.
I am wondering if this is enough information for dracut to build the UKI, since the kernel version is not explicitly specified (it has to know what modules to include in the image, etc).
Let’s try using --kver instead. You will need to add some kind of option to your script for determining the kernel version.
For testing purposes, manually setting a hard-coded value in the script should be fine (just to confirm the UKI boots).
KERNEL_VERSION=6.14.2-arch1-1
Use the actual kernel version available in the installed system (check in /usr/lib/modules if you are not sure).
Then change your dracut line to use the --kver flag.