mirror of
https://github.com/systemd/systemd.git
synced 2024-12-23 21:35:11 +03:00
test: kill plymouthd after initrd transition if it's still running
Until now using the INTERACTIVE_DEBUG=yes stuff together with sanitizers was almost impossible, since the console kept eating up our inputs or not responding at all. After a painful day of debugging I noticed that if we use a shell script in the initrd -> root transition, we might end up with a plymouthd still running, which kept screwing with the tty. E.g. with initrd -> wrapper -> systemd transition, where the `wrapper` is a simple script: ``` exec -- /usr/lib/systemd/systemd "$@" ``` we'd end up with a stray plymouthd process after the bootup: ``` 1 0 440 2 20 0 0 0 worker I ? 0:00 [kworker/5:2-ata_sff] 1 0 453 2 20 0 0 0 worker I ? 0:00 [kworker/9:2-rcu_gp] 5 0 456 1 20 0 7252 1960 do_epo S ? 0:00 @usr/sbin/plymouthd --mode=boot --pid-file=/run/plymouth/pid --attach-to-session ``` After killing it, the tty works finally as expected.
This commit is contained in:
parent
bad57012af
commit
5c08efee03
@ -179,6 +179,7 @@ BASICTOOLS=(
|
|||||||
head
|
head
|
||||||
ionice
|
ionice
|
||||||
ip
|
ip
|
||||||
|
killall
|
||||||
ldd
|
ldd
|
||||||
ln
|
ln
|
||||||
loadkeys
|
loadkeys
|
||||||
@ -1794,6 +1795,26 @@ install_debug_tools() {
|
|||||||
image_install resize
|
image_install resize
|
||||||
echo "resize" >>"$initdir/etc/profile"
|
echo "resize" >>"$initdir/etc/profile"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Sometimes we might end up with plymouthd still running (especially
|
||||||
|
# with the initrd -> asan_wrapper -> systemd transition), which will eat
|
||||||
|
# our inputs and make debugging via tty impossible. Let's fix this by
|
||||||
|
# killing plymouthd explicitly for the interactive sessions.
|
||||||
|
# Note: we can't use pkill/pidof/etc. here due to a bug in libasan, see:
|
||||||
|
# - https://github.com/llvm/llvm-project/issues/49223
|
||||||
|
# - https://bugzilla.redhat.com/show_bug.cgi?id=2098125
|
||||||
|
local plymouth_unit="${initdir:?}/etc/systemd/system/kill-plymouth.service"
|
||||||
|
cat >"$plymouth_unit" <<EOF
|
||||||
|
[Unit]
|
||||||
|
After=multi-user.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=sh -c 'killall --verbose plymouthd || :'
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
"${SYSTEMCTL:?}" enable --root "${initdir:?}" kill-plymouth.service
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user