Для воспроизведения проблемы выполнить: grub-install --removable Установка проходит успешно, если выполнить: grub-install --removable --target=riscv64-efi Проблема мешает установки с iso образа.
Если я правильно читаю исходники, это должно быть исправлено в апстримном коммите 11268841e2e0130a862d15fce86d42cd6501bb49, вошедшем в grub 2.06. Я пробовал собрать grub 2.06 под riscv64 с нужными патчами, правда пока не тестировал совсем, мне только было интересно, из чего нужные патчи состоят. Видимо, пора всё-таки взяться за обновление. Сейчас запустил пересобраться ещё раз, где-то через полчаса, надеюсь, можно будет пробовать. #16081 BUILDING #2 [locked] [test-only] sisyphus_riscv64 srpm=grub-2.06-alt0.5.rv64.src.rpm 2jqt4@ Дмитрий, мне понадобится Ваша помощь. Вы сейчас лучше представляете себе нужные сценарии работы grub.
В задаче 16081 на gyle-riscv собрался grub-2.06-alt0.5.rv64.src.rpm. При попытке обновления в qemu (это simply slinux-20211224-riscv64.img, обновлённый до текущего sisyphus_riscv64 и ядра) вылезло: modprobe: FATAL: Module efivars not found in directory /lib/modules/5.16.8-un-def-alt2.rv64 /boot/efi/EFI/altlinux/grub*.efi is missing, not fatal yet. /boot/efi/EFI/BOOT/grub*.efi is missing too. Fatal. Nothing to update. Please run: grub-install && grub-efi-autoupdate If your system lacks NVRAM or you are getting persistent errors, please run: grub-install --removable && grub-efi-autoupdate Cleaning up / removing... 3: grub-efi-2.04-alt3.rv64 4: grub-common-2.04-alt3.rv64 /boot/efi/EFI/altlinux/grub*.efi is missing, not fatal yet. /boot/efi/EFI/BOOT/grub*.efi is missing too. Fatal. Nothing to update. Please run: grub-install && grub-efi-autoupdate If your system lacks NVRAM or you are getting persistent errors, please run: grub-install --removable && grub-efi-autoupdate И после перезагрузки экран grub'а от старого grub'а (2.04). `grub-install --removable` отрабатывает, правильно определяя платформу: # grub-install --removable Installing for riscv64-efi platform. Installation finished. No error reported. Просто grub-install -- нет: # grub-install Installing for riscv64-efi platform. Could not prepare Boot variable: Read-only file system grub-install: error: efibootmgr failed to register the boot entry: Input/output error. grub-efi-autoupdate не хочет работать точно так же: # grub-efi-autoupdate Updating grub in /boot/efi Installing for riscv64-efi platform. Could not prepare Boot variable: Read-only file system grub-install: error: efibootmgr failed to register the boot entry: Input/output error. Попробовал помочь с read-only filesystem, помог, но не сильно: # mount /sys/firmware/efi/efivars -o remount,rw # grub-efi-autoupdate Updating grub in /boot/efi Installing for riscv64-efi platform. grub-install: error: efibootmgr failed to register the boot entry: Unknown error -1. Пока думаю.
Просто grub-install работать не будет, так как нет NVRAM. Только removable.
> grub-install: error: efibootmgr failed to register the boot entry: Unknown error -1. Однако после всех этих экспериментов и перезагрузки я уже увидел экран grub 2.06 (сверху версия), который вполне прилично загрузил систему. Хм.
(In reply to Антон Мидюков from comment #3) > Просто grub-install работать не будет, так как нет NVRAM. Только removable. Мне не нравится, что рекомендованная cкриптами пакета команда, даже вторая (grub-install --removable && grub-efi-autoupdate), при обновлении grub завершается ошибкой. Мне вообще не нравится, что после обновления нужно вызывать какую-то команду. Но если это нормально и так же примерно ведёт себя, например, на aarch64, или, например, нам просто надо было образы по-другому готовить, то и ладно.
(Ответ для Ivan A. Melnikov на комментарий #5) > (In reply to Антон Мидюков from comment #3) > > Просто grub-install работать не будет, так как нет NVRAM. Только removable. > > Мне не нравится, что рекомендованная cкриптами пакета команда, даже вторая > (grub-install --removable && grub-efi-autoupdate), при обновлении grub > завершается ошибкой. Мне вообще не нравится, что после обновления нужно > вызывать какую-то команду. Надо багу на основной grub-efi по этому поводу повесить.
на x86 ничего дополнительного вызывать не надо.
(Ответ для Anton Farygin на комментарий #7) > на x86 ничего дополнительного вызывать не надо. Там, где есть NVRAM. А где нет, надо. Предлагаю рассмотреть такой сценарий использования. Есть система, которую пользователь носит на переносном SSD. Эту систему тоже нужно обновлять. Но в NVRAM писать не нужно. При обновлении ожидается, что grub обновится в режиме removable, а не установит в NVRAM. Если нет /boot/efi/EFI/altlinux, но есть /boot/efi/EFI/BOOT/ то при обновлении grub-efi не нужно делать grub-install, нужно делать grub-install --removable. Если нет ни того, ни другого, вообще ничего делать не нужно. Хотелось бы такую логику для такого сценария использования.
> /boot/efi/EFI/BOOT/grub*.efi is missing too. Fatal. Не понятно, почему в EFI/BOOT ищется grub*.efi. Вот кусок grub-install.c после применения всех патчей: ``` if (removable) { /* The specification makes stricter requirements of removable devices, in order that only one image can be automatically loaded from them. The image must always reside under /EFI/BOOT, and it must have a specific file name depending on the architecture. */ efi_distributor = "BOOT"; if (!efi_suffix) grub_util_error ("%s", _("You've found a bug")); efi_file = xasprintf ("BOOT%s.EFI", efi_suffix_upper); } else { /* It is convenient for each architecture to have a different efi_file, so that different versions can be installed in parallel. */ efi_file = xasprintf ("grub%s.efi", efi_suffix); } ``` Если используется removable, в EFI/BOOT должен лежать BOOT*.efi. Так он и делает, по крайней мере на riscv64. Код из grub-efi-autoupdate, который ищет EFI/BOOT/grub*.efi, появился в http://git.altlinux.org/gears/g/grub.git?a=commitdiff;h=3af85716bdb15e6434d37e76ff3e29a02eba3425 Похоже на баг в этом коммите, но может я чего-то не знаю, я в grub недавно полез. 2nickel@: Николай, что скажете?
(In reply to Ivan A. Melnikov from comment #9) > Код из grub-efi-autoupdate, который ищет EFI/BOOT/grub*.efi, появился в > http://git.altlinux.org/gears/g/grub.git?a=commitdiff; > h=3af85716bdb15e6434d37e76ff3e29a02eba3425 > > Похоже на баг в этом коммите, но может я чего-то не знаю, я в grub недавно > полез. Я полистал спецификацию UEFI и решил, что надо, как минимум, так: http://git.altlinux.org/people/iv/packages/?p=grub.git;a=commitdiff;h=37f49df00955dd0ec746603af1a56e31e35902a3 Ждём: #16975 AWAITING #1 [test-only] sisyphus_riscv64 grub.git=2.06-alt0.5.rv64.1
(Ответ для Ivan A. Melnikov на комментарий #10) > (In reply to Ivan A. Melnikov from comment #9) > > Код из grub-efi-autoupdate, который ищет EFI/BOOT/grub*.efi, появился в > > http://git.altlinux.org/gears/g/grub.git?a=commitdiff; > > h=3af85716bdb15e6434d37e76ff3e29a02eba3425 > > > > Похоже на баг в этом коммите, но может я чего-то не знаю, я в grub недавно > > полез. > > Я полистал спецификацию UEFI и решил, что надо, как минимум, так: > > http://git.altlinux.org/people/iv/packages/?p=grub.git;a=commitdiff; > h=37f49df00955dd0ec746603af1a56e31e35902a3 > > Ждём: > > #16975 AWAITING #1 [test-only] sisyphus_riscv64 grub.git=2.06-alt0.5.rv64.1 Николай ориентировался на Secure Boot. Его патч работает только на x86_64.
(In reply to Ivan A. Melnikov from comment #10) > Я полистал спецификацию UEFI и решил, что надо, как минимум, так: > > http://git.altlinux.org/people/iv/packages/?p=grub.git;a=commitdiff; > h=37f49df00955dd0ec746603af1a56e31e35902a3 А вот нет, расширение тоже должно быть заглавными буквами: http://git.altlinux.org/people/iv/packages/?p=grub.git;a=commitdiff;h=e2f359146bc70c0b0e2c4793b8d83d0ac373ad8a Попробуем ещё раз: #16980 BUILDING #1 [locked] [test-only] sisyphus_riscv64 grub.git=2.06-alt0.5.rv64.2
(Ответ для Ivan A. Melnikov на комментарий #9) > > /boot/efi/EFI/BOOT/grub*.efi is missing too. Fatal. > > Не понятно, почему в EFI/BOOT ищется grub*.efi. Вот кусок grub-install.c > после применения всех патчей: > [...] > > 2nickel@: Николай, что скажете? Дело в том, что на x86_64 BOOTX64.EFI - это не grub, a переименованный shim. Заменив его на grub потеряем загружаемость системы в Secure Boot. Я подумаю как можно разрулить сложившуюся ситуацию.
(In reply to Николай Костригин from comment #13) > (Ответ для Ivan A. Melnikov на комментарий #9) > > > /boot/efi/EFI/BOOT/grub*.efi is missing too. Fatal. > > > > Не понятно, почему в EFI/BOOT ищется grub*.efi. Вот кусок grub-install.c > > после применения всех патчей: > > > [...] > > > > 2nickel@: Николай, что скажете? > > Дело в том, что на x86_64 BOOTX64.EFI - это не grub, a переименованный shim. > Заменив его на grub потеряем загружаемость системы в Secure Boot. Думаю, в этом файле может быть и переименованный grub, если на этой системе не использовался secure boot, а использовался grub --removable. Или даже что угодно. > Я подумаю как можно разрулить сложившуюся ситуацию. Спасибо. Я думаю, стоит завести для этого другой баг. Пока же в sisyphus_riscv64 я готов собрать grub с моим вариантом исправления grub-efi-autoupdate. В тривиальном случае обновление проходит, будем тестировать что-то более интересное.
А почему в этом месте нельзя проверить оба варианта ? $EFI_DIR/EFI/BOOT/BOOT*.EFI и GRUB*.EFI ?
(In reply to Ivan A. Melnikov from comment #14) > > Я подумаю как можно разрулить сложившуюся ситуацию. > > Спасибо. Я думаю, стоит завести для этого другой баг. https://bugzilla.altlinux.org/41959
(Ответ для Anton Farygin на комментарий #15) > А почему в этом месте нельзя проверить оба варианта ? > $EFI_DIR/EFI/BOOT/BOOT*.EFI и GRUB*.EFI ? Проверить можно. Просто напомню, что наличие EFI/BOOT - это не признак "--removable" установки после того, как его добавили для объезда ошибок в некоторых новых UEFI-прошивках (где основная загрузочная запись пропадала при отсутствии EFI\BOOT). Раньше в усложнении условий в efi-boot-autoupdate не было необходимости, а сейчас просто придется рассмотреть все возможные варианты.
(In reply to Anton Farygin from comment #15) > А почему в этом месте нельзя проверить оба варианта ? > $EFI_DIR/EFI/BOOT/BOOT*.EFI и GRUB*.EFI ? Пойдёмте в #41959.
[#16998] DONE (try 2) grub.git=2.06-alt0.5.rv64.3 Завтра приедет.
(Ответ для Ivan A. Melnikov на комментарий #19) > [#16998] DONE (try 2) grub.git=2.06-alt0.5.rv64.3 > > Завтра приедет. Спасибо!