Взял мартовскую сборку "ALT Linux starter kit (Trientalis)" ovz-el, но ядро оказалось слишком старым. Решил заменить ядро на последнее std-def, устанавливаю пакет kernel-image-std-def#1:3.14.41-alt1 и вижу нефатальную ошибку при генерации initrd. ... Running /usr/lib/rpm/posttrans-filetriggers Config file: /etc/initrd.mk Generating module dependencies on host ... Creating initrd image ... Adding modules ... add-module: No module "pci_hotplug" found for kernel 3.14.41-std-def-alt1 make: *** [add-modules] Ошибка 1 make: *** [all] Ошибка 1
Для std-def нужен другой intrd.mk, в пакете он не предусмотрен. Я попытался поменять конфиг initrd, но не удалось сгенерировать initrd, с которым система загрузится - получаю kernel panic из-за невозможности найти корневой том на mdraid, поскольку md не находит массив (корень на RAID1). Неудачный конфиг: ==== AUTODETECT = all MODULES_ADD += \ ext4 ata_generic ahci libata pata_acpi sata_via ata_piix raid1 shpchp scsi_mod \ crc-t10dif sd_mod \ libahci FEATURES += \ add-modules cleanup compress fstab mdadm raid syslog PUT_FILES += /usr/bin/less ==== initrd.mk, работающий с ядром 2.6.32-ovz-el-alt126: ==== AUTODETECT = all MODULES_ADD += \ ext4 ata_generic ahci libata pata_acpi sata_via ata_piix raid1 pci_hotplug shpchp scsi_mod \ crc-t10dif sd_mod FEATURES += \ add-modules cleanup compress fstab mdadm raid syslog PUT_FILES += /usr/bin/less ====
Если что, altlinux-p7-server-ovz устанавливает _два_ ядра (std-def идёт запасным, оно же в инсталяторе); рядом есть altlinux-p7-server, которое просто std-def; также при необходимости можно исходить из altlinux-p7-server-hyperv с un-def на борту (3.19 в 20150312). Возможно, хватит штатного состояния /etc/initrd.mk: --- # trying to detect modules and features to access to root volume AUTODETECT = all ---
Created attachment 6286 [details] проверка кода возврата /sbin/installkernel
Разобрался. При генераци initrd используется /etc/initrd.mk и возникает ошибка (в MODULES_ADD указан модуль, которого нет в модулях нового ядра). В результате initrd для нового ядра не сохранён и grub-mkconfig создал grub.cfg без загрузки initrd для нового ядра. Итог: новое ядро не находит root, получаем Kernel Panic. Непосредственная причина в том, что initrd.mk был отредактирован вручную (с целью сделать универсальный initrd для нескольких серверов) и настроен для конкретного ядра. Эта ситуация не была обработана в скрипте /usr/lib/rpm/boot_kernel.filetrigger - в нём не проверяется код возврата скрипта /sbin/installkernel (ноль - успех, 1 - ошибка). Таким образом, ошибка в пакете bootloader-utils-0.4.22-alt1 Патч приложил