Инициализация 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 После перезагрузки ошибка не воспроизводится.
> После перезагрузки ошибка не воспроизводится. После перезагрузки системы ошибка не воспроизводится.
По какой-то причине эффект от установки пакета qemu-user-static-binfmt-aarch64 проявился только после перезагрузки системы.
Ошибка в файлтриггере /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
Кстати, есть подозрение, что даже если корректно вызвать /usr/lib/systemd/systemd-binfmt, при обновлении, например, qemu-user-static-aarch64, старый бинарник останется висеть предзагруженным, что неправильно. Так что я бы не вызывал эту утилиту напрямую, а делал просто systemctl restart systemd-binfmt.service.
Аналогичная проблема, кстати, присутствует в макросе %binfmt_apply из rpm-macros-systemd-6-alt2
(In reply to Ivan A. Melnikov from comment #5) > Аналогичная проблема, кстати, присутствует в макросе %binfmt_apply из > rpm-macros-systemd-6-alt2 ... который, к счастью, нигде не используется. Может, удалить его?
(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.
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).