OpenRC may hang on boot or shutdown with Plymouth

May 14, 20261 min. read

With the switch to Plymouth, OpenRC may hang during startup or shutdown if a service fails to start, resulting in a system that has not fully booted and that is unable to shutdown again. This is because of a bug in OpenRC's plugin system that affects musl-based distros, like postmarketOS.

A fix was submitted to OpenRC, but in the meantime the Plymouth OpenRC integration plugin has been temporarily replaced by a kill-plymouth OpenRC service that runs on boot, just like what used to be the case with pbsplash. This workaround is included in postmarketos-bootsplash 0.5.1.

Recovery

If you still can access ssh, or the UI already started and you can enter a terminal, you can simply run:

sudo apk upgrade postmarketos-bootsplash
# In this state, OpenRC will be unable to reboot properly, so we need to
# completely bypass the init system. Note that this won't properly shutdown
# your device.
sudo reboot -f

Using debug-shell

If your device hangs before ssh or the UI are even ran, you'll need to make use of the debug-shell. Enter debug-shell by holding Shift or Volume down on boot. Run the following commands:

mount_subpartitions

# If your rootfs is encrypted, run:
cryptsetup open $PMOS_ROOT root
mount /dev/mapper/root /sysroot

# Else, run:
mount $PMOS_ROOT /sysroot

rm /sysroot/lib/rc/plugins/plymouth.so
reboot

After boot, enter a terminal (if the boot splash is in an endless loop, hold Volume down and press Power three times, or ssh), and run:

sudo plymouth quit # kill plymouth if it's still running
sudo apk upgrade postmarketos-bootsplash
sudo reboot

Reach out in chat if you need help.

Also see