Bug 51035

Summary: systemd-binfmt.filetrigger filetrigger is broken
Product: Sisyphus Reporter: Dmitry Maksimenkov <maksimenkovda>
Component: systemdAssignee: Alexey Shabalin <shaba>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: arseny, at, glebfm, iv, ldv, placeholder, shaba, vt
Version: unstable   
Hardware: x86_64   
OS: Linux   

Description Dmitry Maksimenkov 2024-08-02 17:07:46 MSK
Инициализация hasher под aarch64 заканчивается ошибкой "child: handle_child: execve: /.host/entry: Exec format error"

Версии:
hasher-1.7.4-alt1
hasher-priv-2.0.14-alt1

Системы:
ALT Linux Workstation 10.2, обновлено до Sisyphus
ALT Linux Workstation K 10.3, обновлено до Sisyphus
ALT Linux Education 10.2, обновлено до Sisyphus
ALT Linux Server 10.2, обновлено до Sisyphus

Шаги воспроизведения:
# apt-get install hasher qemu-user-static-aarch64 qemu-user-static-binfmt-aarch64
# apt-repo rm all && cat > /etc/apt/sources.list << EOF
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus aarch64 classic
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus noarch classic
EOF
# systemctl enable --now hasher-privd.service
# hasher-useradd <USER>
# su - <USER>
$ mkdir ~/hasher && hsh --init --target=aarch64 --with-qemu aarch64 -v

Ожидаемый результат: Инициализация заканчивается ошибкой

hasher-privd: child: handle_child: execve: /.host/entry: Exec format error
hsh-initroot: Failed to create RPM database.

Реальный результат: Инициализация без ошибок

Дополнительная информация:

Не воспроизводится в p10 на образах
ALT Linux Workstation 10.2
ALT Linux Workstation K 10.3
ALT Linux Education 10.2
ALT Linux Server 10.2

После перезагрузки ошибка не воспроизводится.
Comment 1 Dmitry Maksimenkov 2024-08-02 17:23:23 MSK
> После перезагрузки ошибка не воспроизводится.

После перезагрузки системы ошибка не воспроизводится.
Comment 2 Dmitry V. Levin 2024-08-03 10:50:22 MSK
По какой-то причине эффект от установки пакета qemu-user-static-binfmt-aarch64 проявился только после перезагрузки системы.
Comment 3 Ivan A. Melnikov 2024-08-03 11:20:32 MSK
Ошибка в файлтриггере /usr/lib/rpm/systemd-binfmt.filetrigger:

$ cat /usr/lib/rpm/systemd-binfmt.filetrigger
#!/bin/sh -e

[ -L /proc/1/root ] || exit 0

LC_ALL=C grep -E -qs '^/(lib|usr/lib|etc)/binfmt.d/.+\.conf' && systemd-binfmt >/dev/null 2>&1 ||:

systemd-binfmt находится не в $PATH, а в /usr/lib/systemd/, так что этот триггер не отрабатывает. Если удалить перенаправление stderr (которое, кстати, в любом случае лишнее), то при установке qemu-user-static-aarch64 можно увидеть:

/usr/lib/rpm/systemd-binfmt.filetrigger: line 5: systemd-binfmt: command not found
Comment 4 Ivan A. Melnikov 2024-08-03 11:28:45 MSK
Кстати, есть подозрение, что даже если корректно вызвать /usr/lib/systemd/systemd-binfmt, при обновлении, например, qemu-user-static-aarch64, старый бинарник останется висеть предзагруженным, что неправильно.

Так что я бы не вызывал эту утилиту напрямую, а делал просто systemctl restart systemd-binfmt.service.
Comment 5 Ivan A. Melnikov 2024-08-06 16:56:22 MSK
Аналогичная проблема, кстати, присутствует в макросе %binfmt_apply из rpm-macros-systemd-6-alt2
Comment 6 Ivan A. Melnikov 2024-08-06 16:57:36 MSK
(In reply to Ivan A. Melnikov from comment #5)
> Аналогичная проблема, кстати, присутствует в макросе %binfmt_apply из
> rpm-macros-systemd-6-alt2

... который, к счастью, нигде не используется. Может, удалить его?
Comment 7 Ivan A. Melnikov 2024-08-07 12:09:02 MSK
(In reply to Ivan A. Melnikov from comment #3)
> Ошибка в файлтриггере /usr/lib/rpm/systemd-binfmt.filetrigger:

Предлагаю чинить так:
https://git.altlinux.org/people/iv/packages/systemd.git?a=commitdiff;h=86f80e938b16aaf59fe8efdb0d2e9a80b86ce961

Собрано в задаче 354545, куда я также добавил последние исправления сборки без tmp2 (для riscv64 и loongarch64). Please review and approve.
Comment 8 Repository Robot 2024-08-07 17:42:25 MSK
systemd-1:255.10-alt2 -> sisyphus:

 Tue Aug 06 2024 Ivan A. Melnikov <iv@altlinux> 1:255.10-alt2
 - Fix systemd-binfmt filetrigger (ALT#51035).
 - Fix build w/o tmp2 (fixes FTBFS on loongarch64 and riscv64).
 - Make sure bootctl man page is present when there is
   the binary (backported upstream fix).