Bug 57107 - /usr/lib/rpm/grub.filetrigger не всегда обновляет меню при обновлении grub
Summary: /usr/lib/rpm/grub.filetrigger не всегда обновляет меню при обновлении grub
Status: RESOLVED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: grub (show other bugs)
Version: unstable
Hardware: all Linux
: P5 normal
Assignee: Николай Костригин
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2025-12-03 14:39 MSK by Ivan A. Melnikov
Modified: 2026-03-13 22:00 MSK (History)
5 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ivan A. Melnikov 2025-12-03 14:39:20 MSK
Обноружил при тестировании нового memtest86+ на loongarch64.

При одновременном обновлении grub и memtest86+ *иногда* не обновляется /boot/grub/grub.cfg, в результате чего в меню остаётся неработующая строка от старого memtest86+
Comment 1 Ivan A. Melnikov 2025-12-03 15:31:29 MSK
Исследовал проблему и пришёл к такому выводу: проблема в конструкции

if grep [...]; then
 ...
fi | if grep -Eqs [...]; then
 ...
fi

`grep -Eqs [...]` выходит, как только обнаруживает match; если первый grep при этом продолжает писать, он получает SIGPIPE, завершается ошибкой, и в первое условие оказыватся ложным.


Упростим grub.filetrigger вот до такого:

$ cat ./a.sh
#!/bin/sh

if grep -E '^/boot/(vmlinuz|xen|memtest)|^/usr/lib(64|)/grub'; then
 echo >&2 "regenerating"
fi | if grep -Eqs '^/usr/lib(64|)/grub'; then
 echo >&2 "grub updated"
fi


В простейшем случае всё работает:

$ echo "/usr/lib64/grub" | ./a.sh
grub updated
regenerating

Однако можно подобрать входные данные, при которых первый grep упадёт, и regenerating выдаваться не будет. У меня на локалхосте это стабильно вот так:

$ yes "/usr/lib64/grub" | head -n 100000 | ./a.sh
grub updated

То есть, будет ли вызван grub-mkconfig зависит от количества обновляемых пакетов и порядка, в котором имена файлов из этих пакетов подаются на вход файлтригерру. Особенно возрастают шансы воспроизвести проблему, если в одной транзакции обновляется много пакетов или большие пакеты, и grub.filetrigger должен сработать на несколько из них.
Comment 2 Ivan A. Melnikov 2025-12-04 13:30:58 MSK
Пока сделал так:

https://git.altlinux.org/people/iv/packages/grub.git?a=commitdiff;h=d458c1e4364fa8ab9b5338737952137a92f2f189

Хотя по-моему логичнее и проще сделать два отдельных файлтриггера.
Comment 3 Repository Robot 2026-03-13 22:00:53 MSK
grub-2.14-alt1 -> sisyphus:

Fri Feb 27 2026 Egor Ignatov <egori@altlinux> 2.14-alt1
- update to grub 2.14
- add grub-efi-install utility for EFI installation with Secure Boot support and
  proper NVRAM management (closes: #52976)
- add probe module to efi image (closes: #54496)
- align with upstream usage for GRUB_CMDLINE_LINUX variable (closes: #53710)
- replace 'failsafe' with 'single' default for recovery boot entries (closes: #44269)
- add GRUB_BTRFS_USE_DEFAULT_SUBVOL option (closes: #56881)
- new subpackage grub-common-extra (closes: #38715, #51394, #51395)
- add ALT Linux distro name translation (closes: #36004)
- add "UEFI Firmware settings" translation (closes: #48768)
- read distro name from /etc/os-release (closes: #55546)
- add btrfs savedefault support (closes: #50525)
- disable savedefault for f2fs (closes: #52193)
- refactor grub filetriggers (closes: #57107)
- enhance grub-efi-autoupdate UX (closes: #56960)