v0.5.12: mask plymouth via /dev/null symlinks (systemctl mask N/A in chroot)

v0.5.11 used `systemctl mask plymouth-*.service` in generated kickstart
%post chroot block. systemctl needs systemd running, which it isn't in
anaconda chroot — calls failed silently (|| true).

Boot test confirmed: post-reboot showed both:
  Started plymouth-start.service - Show Plymouth Boot Screen
  Started systemd-ask-password-plymouth.path - Forward Password Requests

Fix: write /dev/null symlinks directly (`ln -sf /dev/null
/etc/systemd/system/<unit>`). Achieves what mask does without needing
systemd. Also adds the path-activated unit
(systemd-ask-password-plymouth.path) which actually pulls plymouth in
during dracut-initqueue.
This commit is contained in:
veilor-org 2026-05-03 09:08:36 +01:00
parent f588f15a6e
commit e90d6ef662

View file

@ -504,12 +504,23 @@ bash $REPO/scripts/kde-theme-apply.sh
# Mask plymouth services. Plymouth boot splash is unreliable in QEMU
# (race between plymouth-start and systemd-ask-password-plymouth.path
# leaves LUKS prompt invisible → boot hangs in dracut-initqueue).
# Disabled at kernel-cmdline level (plymouth.enable=0 rd.plymouth=0)
# but services still register; mask them to prevent any startup attempt.
# LUKS prompt falls back to systemd-tty-ask-password-agent on tty1.
systemctl mask plymouth-start.service plymouth-quit.service \
plymouth-quit-wait.service plymouth-read-write.service \
plymouth-switch-root.service 2>/dev/null || true
# `systemctl mask` requires systemd running, which isn't true in
# anaconda chroot %post — write the /dev/null symlinks directly instead.
# Targets the path-activated ask-password unit too (the .path is what
# plymouth-start gets pulled in by). systemd-tty-ask-password-agent
# handles LUKS prompt as fallback on tty1.
mkdir -p /etc/systemd/system
for unit in \
plymouth-start.service \
plymouth-quit.service \
plymouth-quit-wait.service \
plymouth-read-write.service \
plymouth-switch-root.service \
systemd-ask-password-plymouth.path \
systemd-ask-password-plymouth.service \
; do
ln -sf /dev/null /etc/systemd/system/$unit
done
# Symlink display-manager.service → sddm.service. (Anaconda usually
# handles this when sddm is the only DM, but be explicit.)