LINUX.ORG.RU

kexec -e: система зависает и ничего не происходит

 ,


0

2

Собрал 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?

★★★★★

Последнее исправление: Spoofing (всего исправлений: 1)

kexec это не для разворачивания своего ядра, это для замены без ребута, если ты почему-то не хочешь перезапускаться. Зачем он для предварительной настройки?

Суть в том, что не все хостинг-провайдеры позволяют загружать свой ISO, и тут на помощь нам приходит механизм kexec, чтобы загрузиться в свои vmlinuz/initrd и уже проводить любые действия над VPS, вплоть до полной переустановки системы на ту, что нужна нам, а не те, что предлагает хостер.

Для «любых действий» и «полной переустановки» никакой kexec не нужен. И я даже не знаю чем он вообще может тут помочь.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

я даже не знаю

Это твоя огромная проблема — ты многого не знаешь, но не просто лезешь с бесполезными или даже вредными советами, но ещё в такой манере, будто разбираешься в вопросе. Может, стоит начать формулировать свои предложения в вопросительной форме?

anonymous
()
Ответ на: комментарий от anonymous

Твоя огромная проблема - ты лезешь со всяким бредом и не в состоянии правильно распарсить смысл предложения, на которое отвечаешь (видимо плохо владеешь русским языком). kexec для того, что хочет сделать автор, не нужен, совсем.

firkax ★★★★★
()
Ответ на: комментарий от firkax

видимо плохо владеешь русским языком

Разумеется, лучше, чем ты :) Здесь запятой не хватает, кстати. Я сознательно выдрал фразу из контекста, потому что когда ещё ты признаешься, что не очень-то понимаешь, о чём говоришь.

распарсить смысл

Что за программист, не знающий смысл слова «парсинг»?

kexec для того, что хочет сделать автор, не нужен, совсем.

Здесь ты, вероятно, прав, ему достаточно перезагрузиться обычным способом. Если же ядро внешнее, то kexec сработает разве что по недосмотру хостера.

anonymous
()

На твой вопрос я ответа не знаю. Но могу сказать, что я устанавливал OpenBSD, Ubuntu, CentOS копируя их iso на отдельный раздел и настраивая grub на запуск iso. Можешь попробовать этот путь.

Legioner ★★★★★
()
Ответ на: комментарий от anonymous

Если же ядро внешнее, то kexec сработает разве что по недосмотру хостера.

Вряд ли автору подсунули контейнер вместо виртуалки и он это не заметил. Да и тогда бы наверно kexec ошибку выдавал а не вис.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от anonymous

удваиваю этого анонимуса - не всё так просто, как автор хочет :)

anonymous
()

Затем выполняю kexec -e, и всё, система зависает намертво.

Странно. Загружать ядро это и не должно, должно быть сообщение об ошибке, а не зависание.

Покажите dmesg|grep lockdown из системы, которая предустановлена на VPS.

i586 ★★★★★
()
Ответ на: комментарий от firkax

Ты не понял, qemu умеет грузить ядро и initrd из других мест, не относящихся к образу диска загружаемой системы. Изнутри их уже не поменять, кроме как с инструментами вроде kexec, но я думаю (не проверял), что это должно прекрасно ограничиваться, чтобы всякие особо умные спуфы не борзели.

anonymous
()
Ответ на: комментарий от anonymous

А, ну чтобы это использовать как инструмент для ограничения прав пользователя виртуалки - надо быть кем-то странным. Впрочем, таких людей много, так что может там так и есть (раз уж они зачем-то не дают своё iso установить).

firkax ★★★★★
()
Ответ на: комментарий от firkax

зачем-то не дают своё iso

Наверное, никому не нужны вопли «КАЛИ НЕ ГРУЗИЦААА» в техподдержке.

thesis ★★★★★
()

CONFIG_KEXEC возможно нет опции в ядре

anonymous2 ★★★★★
()

kexec капризная штука.

Несколько раз сталкивался с невозможностью загрузить ядро из другой ветки. Тупо висло. Если грузить через grub, то все замечательно загружается.

Ну и хорошо бы посмотреть на /proc/cmdline до попытки использования kexec.

vel ★★★★★
()
17 марта 2022 г.

Добрый день, Spoofing! Как можно с вами связаться по поводу booty ? (на этом форуме нету личных сообщений, приходится так обращаться…)

baraban
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.