Собрал vmlinuz/initrd, всю систему целиком упаковал в squashfs во внутрь initrd, чтобы разворачивать её на VPS'ках одной командой kexec.
Сперва конечно же я создал ISO образ, с теми же vmlinuz/initrd, проверил, что система в принципе загружается, работает, все настройки сети производятся автоматически, тут-же положил kexec-tools, так что подключаясь к системе по ssh, я могу спокойно её обновлять всего-лишь перезагрузкой новой системы vmlinuz/initrd через механизм kexec.
Суть в том, что не все хостинг-провайдеры позволяют загружать свой ISO, и тут на помощь нам приходит механизм kexec, чтобы загрузиться в свои vmlinuz/initrd и уже проводить любые действия над VPS, вплоть до полной переустановки системы на ту, что нужна нам, а не те, что предлагает хостер.
# собираем и устанавливаем последнее ядро
booty linux --install-path "./bootstrap" --config-file "./config"
# устанавливаем чистую систему, весь core-репозиторий дистрибутива
cruxstrap --root "./bootstrap" --ports "/root/crux_binary_packages/core"
# добавляем пару утилит из opt-репозитория
cruxstrap --root "./bootstrap" --ports "/root/crux_binary_packages/opt" libevent tmux iputils
# применяем все настройки, которые лежат отдельно
cp -a "./rootfs-changes/"* "./bootstrap"
# складываем ядро рядышком
install -D "./bootstrap/lib/modules/"*"/vmlinuz" "./boot-vmlinuz"
# упаковываем всю систему в squashfs
install -d "./initramfs/media/system"
mksquashfs "./bootstrap" "./initramfs/media/system/system.squashfs" -b "1048576" -comp "xz" -Xdict-size "100%"
# создаём initrd с этой системой
booty ramdisk --install-path "./initramfs" --image "./boot-initrd"
Ну и вот, на выходе имеем ./boot-vmlinuz и ./boot-initrd, в которые можно kexec'нуться (либо же загрузиться в них по PXE) и система перезагрузится (обновится), без необходимости перезагружать железо (виртуалку) целиком.
Для переключения в новую систему я выполняю:
# scp ./boot-* root@VPS-SERVER
# ssh root@VPS-SERVER
# kexec -l /boot-vmlinuz --ramdisk=/boot-initrd --command-line="booty.use-overlayfs" && kexec -e
Так вот, когда загружена эта же самая система, в саму себя такую же перезагрузка происходит как и запланировано, просто перезагружается новое ядро, новая система. Т.е. я загрузился из ISO образа с этими vmlinuz/initrd, тестирую kexec — всё работает.
Но затем я пробую делать тоже самое из системы, которая предустановлена на VPS, т.е. там может быть Debian 11, может быть Ubuntu 20.04. Я пробую те же самые команды kexec -l... ок, сработало. Затем выполняю kexec -e, и всё, система зависает намертво. Новая не загружается, в VNC видно что экран просто завис. Вся система висит.
Так же я пробовал перезагрузить через systemctl kexec.
Ну и? Какого черта механизм kexec не работает в Debian / Ubuntu?
Почему я не могу загрузиться в свою собственную систему vmlinuz/initrd?