diff --git a/qemu.spec b/qemu.spec index abfc2adc6f9911c6279d89d9db5aad05bfe3eaa6..a2be339e23b3fa9805d689be8d3dddf3510e8372 100644 --- a/qemu.spec +++ b/qemu.spec @@ -3,7 +3,7 @@ Name: qemu Version: 8.2.0 -Release: 50 +Release: 51 Epoch: 11 Summary: QEMU is a generic and open source machine emulator and virtualizer License: GPLv2 and BSD and MIT and CC-BY-SA-4.0 @@ -1500,14 +1500,49 @@ rm -rf %{static_buildroot} %global binfmt_dir %{buildroot}%{_exec_prefix}/lib/binfmt.d mkdir -p %{binfmt_dir} -# Generate binfmt configuration for dynamic emulators -./scripts/qemu-binfmt-conf.sh --systemd ALL --exportdir %{binfmt_dir} --qemu-path %{_bindir} -for i in %{binfmt_dir}/*; do mv $i $(echo $i | sed 's/.conf/-dynamic.conf/'); done +# Architectures for which we build user-mode emulators (keep in sync with %build) +usermode_binfmt_cpus="" +%ifarch x86_64 +usermode_binfmt_cpus="aarch64 arm riscv32 riscv64" +%endif +%ifarch aarch64 +usermode_binfmt_cpus="arm riscv32 riscv64" +%endif +%ifarch ppc64le +usermode_binfmt_cpus="aarch64 arm riscv32 riscv64" +%endif +%ifarch loongarch64 +usermode_binfmt_cpus="aarch64 arm riscv32 riscv64" +%endif +%ifarch riscv64 +usermode_binfmt_cpus="aarch64 arm riscv32" +%endif -# Generate binfmt configuration for static emulators from dynamic ones -for regularfmt in %{binfmt_dir}/*; do - staticfmt="$(echo $regularfmt | sed 's/-dynamic/-static/g')" - cat $regularfmt | tr -d '\n' | sed "s/:$/-static:F/" > $staticfmt +# Generate binfmt configuration for dynamic emulators (qemu-$cpu) +for cpu in $usermode_binfmt_cpus; do + # Only if the dynamic interpreter is actually installed + if [ -x "%{buildroot}%{_bindir}/qemu-$cpu" ]; then + ./scripts/qemu-binfmt-conf.sh \ + --systemd "$cpu" \ + --exportdir %{binfmt_dir} \ + --qemu-path %{_bindir} + + if [ -f %{binfmt_dir}/qemu-"$cpu".conf ]; then + mv %{binfmt_dir}/qemu-"$cpu".conf \ + %{binfmt_dir}/qemu-"$cpu"-dynamic.conf + fi + fi +done + +# Generate binfmt configuration for static emulators (qemu-$cpu-static) +for cpu in $usermode_binfmt_cpus; do + dyn_cfg=%{binfmt_dir}/qemu-"$cpu"-dynamic.conf + static_bin="%{buildroot}%{_bindir}/qemu-$cpu-static" + + if [ -f "$dyn_cfg" ] && [ -x "$static_bin" ]; then + static_cfg=%{binfmt_dir}/qemu-"$cpu"-static.conf + cat "$dyn_cfg" | tr -d '\n' | sed "s/:$/-static:F/" > "$static_cfg" + fi done install -D -p -m 0644 contrib/systemd/qemu-pr-helper.service %{buildroot}%{_unitdir}/qemu-pr-helper.service @@ -1833,6 +1868,9 @@ getent passwd qemu >/dev/null || \ /bin/systemctl try-restart systemd-binfmt.service &>/dev/null || : %changelog +* Sat Nov 22 2025 huangyan - 11:8.2.0-51 +- Fix qemu-user(-static) binfmt configs causing install-time errors + * Sat Oct 25 2025 huangyan - 11:8.2.0-50 - Add qemu-user package for arm, aarch64, riscv32, riscv64 targets - Add user-static, user-binfmt package for statically-linked QEMU user emulator