<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>41945</bug_id>
          
          <creation_ts>2022-02-15 05:42:15 +0300</creation_ts>
          <short_desc>grub-install не определяет автоматически target riscv64-efi</short_desc>
          <delta_ts>2022-02-17 15:25:38 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>grub-efi</component>
          <version>unstable</version>
          <rep_platform>riscv64</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Антон Мидюков">antohami</reporter>
          <assigned_to name="Ivan A. Melnikov">iv</assigned_to>
          <cc>jqt4</cc>
    
    <cc>nickel</cc>
    
    <cc>placeholder</cc>
    
    <cc>rider</cc>
    
    <cc>sin</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>207754</commentid>
    <comment_count>0</comment_count>
    <who name="Антон Мидюков">antohami</who>
    <bug_when>2022-02-15 05:42:15 +0300</bug_when>
    <thetext>Для воспроизведения проблемы выполнить:
grub-install --removable

Установка проходит успешно, если выполнить:
grub-install --removable --target=riscv64-efi

Проблема мешает установки с iso образа.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207756</commentid>
    <comment_count>1</comment_count>
    <who name="Ivan A. Melnikov">iv</who>
    <bug_when>2022-02-15 09:10:29 +0300</bug_when>
    <thetext>Если я правильно читаю исходники, это должно быть исправлено в апстримном коммите 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.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207770</commentid>
    <comment_count>2</comment_count>
    <who name="Ivan A. Melnikov">iv</who>
    <bug_when>2022-02-15 13:19:03 +0300</bug_when>
    <thetext>В задаче 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 &amp;&amp; grub-efi-autoupdate

If your system lacks NVRAM or you are getting persistent errors, please
run: grub-install --removable &amp;&amp; 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 &amp;&amp; grub-efi-autoupdate

If your system lacks NVRAM or you are getting persistent errors, please
run: grub-install --removable &amp;&amp; grub-efi-autoupdate

И после перезагрузки экран grub&apos;а от старого grub&apos;а (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.


Пока думаю.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207771</commentid>
    <comment_count>3</comment_count>
    <who name="Антон Мидюков">antohami</who>
    <bug_when>2022-02-15 13:23:00 +0300</bug_when>
    <thetext>Просто grub-install работать не будет, так как нет NVRAM. Только removable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207772</commentid>
    <comment_count>4</comment_count>
    <who name="Ivan A. Melnikov">iv</who>
    <bug_when>2022-02-15 13:24:43 +0300</bug_when>
    <thetext>&gt; grub-install: error: efibootmgr failed to register the boot entry: Unknown error -1.

Однако после всех этих экспериментов и перезагрузки я уже увидел экран grub 2.06 (сверху версия), который вполне прилично загрузил систему. Хм.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207774</commentid>
    <comment_count>5</comment_count>
    <who name="Ivan A. Melnikov">iv</who>
    <bug_when>2022-02-15 13:28:54 +0300</bug_when>
    <thetext>(In reply to Антон Мидюков from comment #3)
&gt; Просто grub-install работать не будет, так как нет NVRAM. Только removable.

Мне не нравится, что рекомендованная cкриптами пакета команда, даже вторая (grub-install --removable &amp;&amp; grub-efi-autoupdate), при обновлении grub завершается ошибкой. Мне вообще не нравится, что после обновления нужно вызывать какую-то команду.

Но если это нормально и так же примерно ведёт себя, например, на aarch64, или, например, нам просто надо было образы по-другому готовить, то и ладно.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207775</commentid>
    <comment_count>6</comment_count>
    <who name="Антон Мидюков">antohami</who>
    <bug_when>2022-02-15 13:32:34 +0300</bug_when>
    <thetext>(Ответ для Ivan A. Melnikov на комментарий #5)
&gt; (In reply to Антон Мидюков from comment #3)
&gt; &gt; Просто grub-install работать не будет, так как нет NVRAM. Только removable.
&gt; 
&gt; Мне не нравится, что рекомендованная cкриптами пакета команда, даже вторая
&gt; (grub-install --removable &amp;&amp; grub-efi-autoupdate), при обновлении grub
&gt; завершается ошибкой. Мне вообще не нравится, что после обновления нужно
&gt; вызывать какую-то команду.

Надо багу на основной grub-efi по этому поводу повесить.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207776</commentid>
    <comment_count>7</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2022-02-15 13:39:25 +0300</bug_when>
    <thetext>на x86 ничего дополнительного вызывать не надо.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207777</commentid>
    <comment_count>8</comment_count>
    <who name="Антон Мидюков">antohami</who>
    <bug_when>2022-02-15 13:54:28 +0300</bug_when>
    <thetext>(Ответ для Anton Farygin на комментарий #7)
&gt; на x86 ничего дополнительного вызывать не надо.

Там, где есть NVRAM. А где нет, надо.
Предлагаю рассмотреть такой сценарий использования.
Есть система, которую пользователь носит на переносном SSD. Эту систему тоже нужно обновлять. Но в NVRAM писать не нужно. При обновлении ожидается, что grub обновится в режиме removable, а не установит в NVRAM.
Если нет /boot/efi/EFI/altlinux, но есть /boot/efi/EFI/BOOT/ то при обновлении grub-efi не нужно делать grub-install, нужно делать grub-install --removable.
Если нет ни того, ни другого, вообще ничего делать не нужно.
Хотелось бы такую логику для такого сценария использования.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207782</commentid>
    <comment_count>9</comment_count>
    <who name="Ivan A. Melnikov">iv</who>
    <bug_when>2022-02-15 15:05:00 +0300</bug_when>
    <thetext>&gt; /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 = &quot;BOOT&quot;;
           if (!efi_suffix)
             grub_util_error (&quot;%s&quot;, _(&quot;You&apos;ve found a bug&quot;));
           efi_file = xasprintf (&quot;BOOT%s.EFI&quot;, 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 (&quot;grub%s.efi&quot;, 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@: Николай, что скажете?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207784</commentid>
    <comment_count>10</comment_count>
    <who name="Ivan A. Melnikov">iv</who>
    <bug_when>2022-02-15 15:31:41 +0300</bug_when>
    <thetext>(In reply to Ivan A. Melnikov from comment #9)
&gt; Код из grub-efi-autoupdate, который ищет EFI/BOOT/grub*.efi, появился в
&gt; http://git.altlinux.org/gears/g/grub.git?a=commitdiff;
&gt; h=3af85716bdb15e6434d37e76ff3e29a02eba3425
&gt; 
&gt; Похоже на баг в этом коммите, но может я чего-то не знаю, я в grub недавно
&gt; полез.

Я полистал спецификацию 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</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207786</commentid>
    <comment_count>11</comment_count>
    <who name="Антон Мидюков">antohami</who>
    <bug_when>2022-02-15 15:53:26 +0300</bug_when>
    <thetext>(Ответ для Ivan A. Melnikov на комментарий #10)
&gt; (In reply to Ivan A. Melnikov from comment #9)
&gt; &gt; Код из grub-efi-autoupdate, который ищет EFI/BOOT/grub*.efi, появился в
&gt; &gt; http://git.altlinux.org/gears/g/grub.git?a=commitdiff;
&gt; &gt; h=3af85716bdb15e6434d37e76ff3e29a02eba3425
&gt; &gt; 
&gt; &gt; Похоже на баг в этом коммите, но может я чего-то не знаю, я в grub недавно
&gt; &gt; полез.
&gt; 
&gt; Я полистал спецификацию UEFI и решил, что надо, как минимум, так:
&gt; 
&gt; http://git.altlinux.org/people/iv/packages/?p=grub.git;a=commitdiff;
&gt; h=37f49df00955dd0ec746603af1a56e31e35902a3
&gt; 
&gt; Ждём:
&gt; 
&gt; #16975 AWAITING #1 [test-only] sisyphus_riscv64 grub.git=2.06-alt0.5.rv64.1

Николай ориентировался на Secure Boot. Его патч работает только на x86_64.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207791</commentid>
    <comment_count>12</comment_count>
    <who name="Ivan A. Melnikov">iv</who>
    <bug_when>2022-02-15 17:06:47 +0300</bug_when>
    <thetext>(In reply to Ivan A. Melnikov from comment #10)
&gt; Я полистал спецификацию UEFI и решил, что надо, как минимум, так:
&gt; 
&gt; http://git.altlinux.org/people/iv/packages/?p=grub.git;a=commitdiff;
&gt; 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</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207796</commentid>
    <comment_count>13</comment_count>
    <who name="Николай Костригин">nickel</who>
    <bug_when>2022-02-15 17:42:57 +0300</bug_when>
    <thetext>(Ответ для Ivan A. Melnikov на комментарий #9)
&gt; &gt; /boot/efi/EFI/BOOT/grub*.efi is missing too. Fatal.
&gt; 
&gt; Не понятно, почему в EFI/BOOT ищется grub*.efi. Вот кусок grub-install.c
&gt; после применения всех патчей:
&gt; 
[...]
&gt; 
&gt; 2nickel@:  Николай, что скажете?

Дело в том, что на x86_64 BOOTX64.EFI - это не grub, a переименованный shim. Заменив его на grub потеряем загружаемость системы в Secure Boot.
Я подумаю как можно разрулить сложившуюся ситуацию.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207799</commentid>
    <comment_count>14</comment_count>
    <who name="Ivan A. Melnikov">iv</who>
    <bug_when>2022-02-15 18:08:47 +0300</bug_when>
    <thetext>(In reply to Николай Костригин from comment #13)
&gt; (Ответ для Ivan A. Melnikov на комментарий #9)
&gt; &gt; &gt; /boot/efi/EFI/BOOT/grub*.efi is missing too. Fatal.
&gt; &gt; 
&gt; &gt; Не понятно, почему в EFI/BOOT ищется grub*.efi. Вот кусок grub-install.c
&gt; &gt; после применения всех патчей:
&gt; &gt; 
&gt; [...]
&gt; &gt; 
&gt; &gt; 2nickel@:  Николай, что скажете?
&gt; 
&gt; Дело в том, что на x86_64 BOOTX64.EFI - это не grub, a переименованный shim.
&gt; Заменив его на grub потеряем загружаемость системы в Secure Boot.

Думаю, в этом файле может быть и переименованный grub, если на этой системе не использовался secure boot, а использовался grub --removable. Или даже что угодно.

&gt; Я подумаю как можно разрулить сложившуюся ситуацию.

Спасибо. Я думаю, стоит завести для этого другой баг.

Пока же в sisyphus_riscv64 я готов собрать grub с моим вариантом  исправления grub-efi-autoupdate. В тривиальном случае обновление проходит, будем тестировать что-то более интересное.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207800</commentid>
    <comment_count>15</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2022-02-15 18:11:38 +0300</bug_when>
    <thetext>А почему в этом месте нельзя проверить оба варианта ?
 $EFI_DIR/EFI/BOOT/BOOT*.EFI и GRUB*.EFI ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207803</commentid>
    <comment_count>16</comment_count>
    <who name="Ivan A. Melnikov">iv</who>
    <bug_when>2022-02-15 18:19:41 +0300</bug_when>
    <thetext>(In reply to Ivan A. Melnikov from comment #14)
&gt; &gt; Я подумаю как можно разрулить сложившуюся ситуацию.
&gt; 
&gt; Спасибо. Я думаю, стоит завести для этого другой баг.

https://bugzilla.altlinux.org/41959</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207804</commentid>
    <comment_count>17</comment_count>
    <who name="Николай Костригин">nickel</who>
    <bug_when>2022-02-15 18:20:28 +0300</bug_when>
    <thetext>(Ответ для Anton Farygin на комментарий #15)
&gt; А почему в этом месте нельзя проверить оба варианта ?
&gt;  $EFI_DIR/EFI/BOOT/BOOT*.EFI и GRUB*.EFI ?

Проверить можно.
Просто напомню, что наличие EFI/BOOT - это не признак &quot;--removable&quot; установки после того, как его добавили для объезда ошибок в некоторых новых UEFI-прошивках (где основная загрузочная запись пропадала при отсутствии EFI\BOOT).

Раньше в усложнении условий в efi-boot-autoupdate не было необходимости, а сейчас просто придется рассмотреть все возможные варианты.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207805</commentid>
    <comment_count>18</comment_count>
    <who name="Ivan A. Melnikov">iv</who>
    <bug_when>2022-02-15 18:21:28 +0300</bug_when>
    <thetext>(In reply to Anton Farygin from comment #15)
&gt; А почему в этом месте нельзя проверить оба варианта ?
&gt;  $EFI_DIR/EFI/BOOT/BOOT*.EFI и GRUB*.EFI ?

Пойдёмте в #41959.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207942</commentid>
    <comment_count>19</comment_count>
    <who name="Ivan A. Melnikov">iv</who>
    <bug_when>2022-02-17 15:21:43 +0300</bug_when>
    <thetext>[#16998] DONE (try 2) grub.git=2.06-alt0.5.rv64.3

Завтра приедет.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207943</commentid>
    <comment_count>20</comment_count>
    <who name="Антон Мидюков">antohami</who>
    <bug_when>2022-02-17 15:25:38 +0300</bug_when>
    <thetext>(Ответ для Ivan A. Melnikov на комментарий #19)
&gt; [#16998] DONE (try 2) grub.git=2.06-alt0.5.rv64.3
&gt; 
&gt; Завтра приедет.

Спасибо!</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>