Bug 31027

Summary: Когда заменяешь ядро возникает ошибка при генерации initrd и система не загружается.
Product: Sisyphus Reporter: Стас <stas.grumbler>
Component: bootloader-utilsAssignee: placeholder <placeholder>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: aspsk, at, boris, boyarsh, glebfm, ldv, mike, mithraen, placeholder, rider, sbolshakov, sem, shrek, sin, slazav, vitty, vsu, vt, zerg
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
проверка кода возврата /sbin/installkernel none

Description Стас 2015-05-23 09:06:24 MSK
Взял мартовскую сборку "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
Comment 1 Стас 2015-05-23 10:14:55 MSK
Для 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
====
Comment 2 Michael Shigorin 2015-05-23 16:03:53 MSK
Если что, 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
---
Comment 3 Стас 2015-05-25 10:00:23 MSK
Created attachment 6286 [details]
проверка кода возврата /sbin/installkernel
Comment 4 Стас 2015-05-25 10:01:22 MSK
Разобрался.
При генераци 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
Патч приложил