Hallo, some Debian releases ago I used to use kexec-tools to do kexec reboots with sysvinit. With the advent of systemd I used "systemctl kexec" with kexec-tools installed and it worked as intended. Some time ago it started failing and I didn't care because I didn't have bare metal servers running Debian at that time. In my current dayjob I'm again responsible for a bunch of servers so I resumed to care and researched why "systemctl kexec" fails.
According to systemctl's man page "systemctl kexec" is just an alias for "systemctl start kexec.target --job-mode=replace-irreversibly --no-block". If I invoke the latter with kexec-tools installed it actually works. If I use "systemctl kexec" the error messages are one of: ----8<----8<----8<---- /sbin/kexec is not available: No such file or directory ----8<----8<----8<---- on a system with no kexec-tools installed which is actually helpful ----8<----8<----8<---- Cannot find the ESP partition mount point. ----8<----8<----8<---- on a buster system with BIOS-boot and kexec-tools installed which is misleading, because I do not need EFI for kexec to work ----8<----8<----8<---- No entry suitable as default, refusing to guess. ----8<----8<----8<---- on a buster system with EFI-boot and kexec-tools installed which is highly irritating and not helpful ----8<----8<----8<---- No kexec kernel loaded and autodetection failed. Automatic loading works only on systems booted with EFI. ----8<----8<----8<---- on a bullseye system with BIOS-boot and kexec-tools installed which is factually wrong because kexec-tools will do the loading (later) just fine I understand that systemd authors try to tell the user when a fast (kexec) reboot is not to be expected, but the heuristic is wrong on all systems I got my fingers on. Even if kexec reboots worked on systems with EFI-boot it would not be an option to reinstall all the servers. IMO there are some options to proceed: 1) improve the heuristic in systemctl so that it succeeds if kexec-tools is installed, maybe with some option in system.conf. 2) work around the systemd bug in kexec-tools by loading the kernel at boot and kernel install times¹, wasting about 40 MiB of RAM. 3) provide a wrapper script (say "kexecreboot") in kexec-tools that runs the long version above and also loads a kernel in the case of sysvinit with kexec-tools/load_kexec=false. 4) provide a wrapper script and dpkg-divert systemctl. Grüße Timo ¹ that would miss kernel cmdline changes with only update-grub, but I couldn't find useful hooks for that -- ITscope GmbH Ludwig-Erhard-Allee 20 D-76131 Karlsruhe Tel: +49 721 627376-0 Fax: +49 721 66499175 https://www.itscope.com Handelsregister: AG Mannheim, HRB 232782 Sitz der Gesellschaft: Karlsruhe Geschäftsführer: Alexander Münkel, Benjamin Mund, Stefan Reger
signature.asc
Description: This is a digitally signed message part.