Пакеты: update-kernel-1.24-alt1, make-initrd-2.60.0-alt1, bootloader-utils-0.5.5-alt1 (Sisyphus); то же в p11 с make-initrd-2.59.0-alt1. Если при установке нового ядра make-initrd завершается ошибкой, update-kernel всё равно пишет «Done.» и возвращает 0. initrd для нового ядра не создаётся, а в grub.cfg добавляется пункт с этим ядром без строки initrd. Шаги воспроизведения (сбой make-initrd имитируется снятием бита исполнения с одной из его утилит): 1. Система на Sisyphus, в репозитории есть ядро новее установленного (у меня установлено 6.12.111, в репозитории 6.12.112). 2. # chmod a-x /usr/share/make-initrd/tools/msg-timestamp 3. # update-kernel -y; echo EXIT=$? 4. # ls -l /boot; grep -nE 'menuentry|linux|initrd' /boot/grub/grub.cfg Фактический результат: 1: kernel-image-6.12-6.12.112-alt1 ################################# [ 33%] ... /bin/sh: line 1: /usr/share/make-initrd/tools/msg-timestamp: Permission denied make[1]: *** [/usr/share/make-initrd/mk/main.mk:68: process-config] Error 126 make: *** [/usr/share/make-initrd/mk/main.mk:59: all] Error 1 Generating grub configuration file ... Found linux image: /boot/vmlinuz-6.12.112-6.12-alt1 Found linux image: /boot/vmlinuz-6.12.111-6.12-alt1 Found initrd image: /boot/initrd-6.12.111-6.12-alt1.img ... Done. EXIT=0 - /boot/initrd-6.12.112-6.12-alt1.img нет; /boot/vmlinuz и /boot/initrd.img остались на 6.12.111. - В grub.cfg добавлены пункты «..., 6.12.112-6.12-alt1» и «... (recovery)»: в них есть строка linux, но нет строки initrd, и стоит root=/dev/sda2 вместо root=UUID=... как у остальных пунктов. Ожидаемый результат: Если initrd для нового ядра не создан, update-kernel сообщает об ошибке и возвращает ненулевой код. Ядро без initrd не должно выглядеть установленным и готовым к загрузке. Для сравнения: если вернуть бит исполнения (chmod a+x), удалить ядро 6.12.112 и снова запустить update-kernel -y, initrd-6.12.112-6.12-alt1.img создаётся («Image is saved as ...»), ссылки /boot/vmlinuz и /boot/initrd.img переключаются на новое ядро, а в grub.cfg появляется строка initrd и root=UUID=.... Сам make-initrd -k 6.12.112-6.12-alt1 при той же поломке возвращает 2, то есть ошибку он сообщает. Насколько я вижу, ошибка теряется так: initrd собирает rpm-filetrigger /usr/lib/rpm/boot_kernel.filetrigger (bootloader-utils) через /sbin/installkernel. Неуспешный filetrigger не меняет код возврата apt-get, а update-kernel проверяет только код apt-get install (update-kernel, строка 745). Возможное исправление: после установки проверять, что /boot/initrd-<версия>.img нового ядра существует, а если его нет, сообщать об ошибке. Проверила в тестовом окружении: Альт Сервер 11, обновлённый до Sisyphus на 15.10.2026, и то же для p11 (6.12.74 → 6.12.112). Воспроизводится 2 раза из 2 в каждой ветке.
> Если при установке нового ядра make-initrd завершается ошибкой, update-kernel всё равно пишет «Done.» и возвращает 0. Потому что так поступают apt и rpm. Концептуальный вопрос: должна ли установка пакета kernel-image-* завершаться с exit code 0 со стороны apt, если filetrigger не смог создать initrd? Я считаю, что нет, но может есть возражения? > initrd для нового ядра не создаётся, а в grub.cfg добавляется пункт с этим ядром без строки initrd. Похоже на баг bootloader-utils. See also: #31027.
Я подумал ещё, и вот мой вердикт: #31027 это в точности та же самая проблема. *** This bug has been marked as a duplicate of bug 31027 ***
(Ответ для Ivan A. Melnikov на комментарий #2) > Я подумал ещё, и вот мой вердикт: #31027 это в точности та же самая проблема. > > *** Эта ошибка отмечена как дубликат ошибки 31027 *** Спасибо за разбор!