Продолжаю рубрику #
redhat.
Сегодня я полез ковыряться с её загузчиком. Казалось бы, ну что может пойти не так? GRUB-у уже сто лет в обед. Но нет. RedHat и её клоны первыми побежали на BLS (Boot Loader Specification). Это когда у тебя не единый файл grub.conf, а куча файлов в папке "/boot/loader/entries", каждый из которых отображает какой-то один вариант загрузки. И всё бы ничего, но в их имени и содержимом зачем-то теперь фигурирует
machine-id. А я как-то уже приспособился держать шаблон виртуалки, а потом просто копировать его с последующей перегенерацией этого самого machine-id для порядку. Так вот, с этим BLS такое приводит к очень странной херне: с виду GRUB и прилагающиеся к нему утилиты наподобие grubby как будто бы "сносит с катушек". Показывают они одно, а по факту загружают совсем другое. А все потому, что они "перестали видеть" BLS-файлы со "старым" machine-id, но при этом влияние последних на процесс загрузки никто не отменял.
Зачем так всё переусложнено лично мне непонятно. Видать, какой-то очередной Поттеринг порезвился. Но тем не менее, теперь приходится помнить ещё и про это когда клонируешь тачки (тут должен быть какой-нибудь смешной мемчик).
Как водится, одну и ту же задачу можно решать разными способами.
- Просто отключить BLS переменной "GRUB_ENABLE_BLSCFG" в настройках Grub-а.
- После перегенерации machine-id переименовывать файлы в "/boot/loader/entries" и подменять внутри них содержимое, содержащее machine-id.
- Удалять содержимое "/boot/loader/entries" и генерировать его заново при помощи grubby.
- Удалять содержимое "/boot/loader/entries" и генерировать его заново при помощи "kernel-install".
Первый способ неспортивный, второй костыльный. В третьем надо указывать кучу всяких параметров наподобие "Title", "inird" и прочих, которые не очень понятно где брать. Четвертый самый долгий по времени выполнения, зато самый простой в реализации. Его и выбрал. Выглядит он вот так.
KERNEL=`/bin/uname -r`
rm /boot/loader/entries/*
/bin/kernel-install add "$KERNEL" "/usr/lib/modules/$KERNEL/vmlinuz"
Но и это ещё не всё. В процессе разборок выяснилось, что красные шапки постоянно норовят насоздавать в /boot кучу всякого г..на типа rescue-образов, всяких initrd с kdump. Да и стоит на секундочку расслабиться, как она пихает в параметры загрузки ядра "crashkernel=блаблабла", тем самым отжирая от 256 мегабайт RAM (и больше) под эти самые дампы. Ну да, ну да, и часто вы эти дампы ядра читаете? Мне вот чё-то ни разу не довелось за всю свою практику. Поэтому на боевых виртуалках применительно к redhat-клонам проделываем следующее.
- Заменяем ядро на cloud-вариант. Как это делать, писал вот здесь.
- Сносим к херам пакет "kexec-tools". Если по каким-то причинам очень не хочется этого делать (хотя кому он всерьёз нужен?), то добавляем директиву "auto_reset_crashkernel no" в "/etc/kdump.conf".
- В "/etc/dracut.conf" (или в референсной папке) прописываем директивы hostonly="yes" и dracut_rescue_image="no". Первая уменьшает размер initramfs (мегабайт на 10, но и то хлеб), вторая отключает генерацию rescue-образов.
- Лапами выносим из /boot все эти kdump и rescue-образы.
Так оно становится менее прожорливым. Вроде бы с одной стороны и копейки, но "пять старушек уже рубль". ©
А вообще конечно я не понимаю. Ну есть же нормальные дистрибутивы. Но нет, мы будем плакать, колоться, но тащить в прод всякое г...но.
P.S. Насчет mstsc.exe попозже выпущу отдельный псто. Смотрю, народ оживился, началась полемика. :)