From 66d1c542614b7f8d5a6dd88ecdcd56d07c2a927c Mon Sep 17 00:00:00 2001 From: classabbyamp Date: Thu, 26 Dec 2024 12:13:26 -0500 Subject: [PATCH] lib.sh: update binfmt handling, add riscv recent qemu updates mean we don't need to hardcode the binfmts, as they are shipped as files generated by qemu, importable by update-binfmts. ref: #386 --- lib.sh | 26 ++++++++------------------ mkrootfs.sh | 1 + 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/lib.sh b/lib.sh index 43d7329..0750104 100755 --- a/lib.sh +++ b/lib.sh @@ -210,52 +210,39 @@ register_binfmt() { return fi _cpu=arm - _magic="\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00" - _mask="\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff" ;; aarch64) _cpu=aarch64 - _magic="\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7" - _mask="\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff" ;; ppc64le) _cpu=ppc64le - _magic="\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x15\x00" - _mask="\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\x00" ;; ppc64) _cpu=ppc64 - _magic="\x7fELF\x02\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x15" - _mask="\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff" ;; ppc) if [ "$_hostarch" = "ppc64" ] ; then return fi _cpu=ppc - _magic="\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x14" - _mask="\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff" ;; mipsel) if [ "$_hostarch" = "mips64el" ] ; then return fi _cpu=mipsel - _magic="\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08\x00" - _mask="\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff" ;; x86_64) _cpu=x86_64 - _magic="\x7f\x45\x4c\x46\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x3e\x00" - _mask="\xff\xff\xff\xff\xff\xfe\xfe\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff" ;; i686) if [ "$_hostarch" = "x86_64" ] ; then return fi _cpu=i386 - _magic="\x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03\x00" - _mask="\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff" + ;; + riscv64) + _cpu=riscv64 ;; *) die "Unknown target architecture!" @@ -264,7 +251,7 @@ register_binfmt() { # For builds that do not match the host architecture, the correct # qemu binary will be required. - QEMU_BIN="qemu-${_cpu}-static" + QEMU_BIN="qemu-${_cpu}" if ! $QEMU_BIN -version >/dev/null 2>&1; then die "$QEMU_BIN binary is missing in your system, exiting." fi @@ -278,7 +265,10 @@ register_binfmt() { # Only register if the map is incomplete if [ ! -f /proc/sys/fs/binfmt_misc/qemu-$_cpu ] ; then - echo ":qemu-$_cpu:M::$_magic:$_mask:/usr/bin/$QEMU_BIN:F" > /proc/sys/fs/binfmt_misc/register 2>/dev/null + if ! command -v update-binfmts >/dev/null 2>&1; then + die "could not add binfmt: update-binfmts binary is missing in your system" + fi + update-binfmts --import "qemu-$_cpu" fi } diff --git a/mkrootfs.sh b/mkrootfs.sh index dbdd693..54e101b 100755 --- a/mkrootfs.sh +++ b/mkrootfs.sh @@ -57,6 +57,7 @@ usage() { aarch64, aarch64-musl, mipsel, mipsel-musl, ppc, ppc-musl, ppc64le, ppc64le-musl, ppc64, ppc64-musl + riscv64, riscv64-musl OPTIONS -b Set an alternative base-system package (default: base-container-full)