diff --git a/assemblers/org.osbuild.qemu b/assemblers/org.osbuild.qemu index ecee8450..ac536b48 100755 --- a/assemblers/org.osbuild.qemu +++ b/assemblers/org.osbuild.qemu @@ -699,6 +699,11 @@ def main(tree, output_dir, options, loop_client): if compat: extra_args["qcow2"] += ["-o", f"compat={compat}"] + coroutines = os.environ.get("OSBUILD_QEMU_IMG_COROUTINES") + if coroutines: + print(f"qemu-img coroutines: {coroutines}") + extra_args[fmt] += ["-m", coroutines] + subprocess.run([ "qemu-img", "convert", diff --git a/runners/org.osbuild.rhel82 b/runners/org.osbuild.rhel82 index 4d823d8d..3d8f5fde 100755 --- a/runners/org.osbuild.rhel82 +++ b/runners/org.osbuild.rhel82 @@ -1,12 +1,26 @@ #!/usr/libexec/platform-python import os +import platform import subprocess import sys import osbuild.api +def quirks(): + # Platform specific quirks + env = os.environ.copy() + + if platform.machine() == "aarch64": + # Work around a bug in qemu-img on aarch64 that can lead to qemu-img + # hangs when more then one coroutine is use (which is the default) + # See https://bugs.launchpad.net/qemu/+bug/1805256 + env["OSBUILD_QEMU_IMG_COROUTINES"] = "1" + + return env + + def ldconfig(): # ld.so.conf must exist, or `ldconfig` throws a warning subprocess.run(["touch", "/etc/ld.so.conf"], check=True) @@ -57,7 +71,11 @@ def main(): nsswitch() python_alternatives() - r = subprocess.run(sys.argv[1:], check=False) + env = quirks() + + r = subprocess.run(sys.argv[1:], + env=env, + check=False) sys.exit(r.returncode)