diff options
authorAndreas Grapentin <>2018-03-16 09:48:47 +0100
committerLuke Shumaker <>2018-03-20 16:39:17 -0400
commit314f2c9b1daac8c47d78754569a7310d0b77e22b (patch)
parent0e96875e5b5f2718bbf230a3dca3a5e54aefe2cc (diff)
make librechroot target arch agnostic
in the light of my attempts to create a riscv64 parabola port, I would like to see the following changes made to librechroot. The patch removes the hard-coded arm cross arch checks in favour of a more general approach, that works for more architectures. As a side effect, this now also would behave correctly when creating x86 chroots on arm, although why anyone would choose to do this is beyond me. Reviewed-By: Luke Shumaker <> [LS: Added quotes]
1 files changed, 13 insertions, 8 deletions
diff --git a/src/chroot-tools/librechroot b/src/chroot-tools/librechroot
index 27e17bd..8256d77 100755
--- a/src/chroot-tools/librechroot
+++ b/src/chroot-tools/librechroot
@@ -69,17 +69,22 @@ hack_arch_nspawn_flags() {
CARCH="$(uname -m)"
- if [[ "$CARCH" == armv7h ]] && ! setarch armv7l /bin/true 2>/dev/null; then
- # We're running an ARM chroot on a non-ARM processor
+ local setarch interpreter
+ case $CARCH in
+ armv7h) setarch=armv7l; interpreter=/usr/bin/qemu-arm-static ;;
+ *) setarch=$CARCH; interpreter=/usr/bin/qemu-$CARCH-static ;;
+ esac
+ if ! setarch $setarch /bin/true 2>/dev/null; then
+ # We're running a cross-arch chroot
# Make sure that qemu-static is set up with binfmt_misc
if [[ -z $(grep -l -xF \
- -e 'interpreter /usr/bin/qemu-arm-static' \
+ -e "interpreter $interpreter" \
-r -- /proc/sys/fs/binfmt_misc 2>/dev/null \
| xargs -r grep -xF 'enabled') ]]
- error 'Cannot cross-compile for ARM on x86'
- plain 'This requires a binfmt_misc entry for qemu-arm-static.'
+ error 'Cannot cross-compile for %s on %s' "$CARCH" "$(uname -m)"
+ plain 'This requires a binfmt_misc entry for %s.' "$interpreter"
prose 'Such a binfmt_misc entry is provided by the %s
package. If you have it installed, but still see
this message, you may need to restart %s.' \
@@ -88,13 +93,13 @@ hack_arch_nspawn_flags() {
# Let qemu/binfmt_misc do its thing
- arch_nspawn_flags+=(-f /usr/bin/qemu-arm-static -s)
+ arch_nspawn_flags+=(-f "$interpreter" -s)
# The -any packages are built separately for ARM from
# x86, so if we use the same CacheDir as the x86 host,
# then there will be PGP errors.
- mkdir -p /var/cache/pacman/pkg-arm
- arch_nspawn_flags+=(-c /var/cache/pacman/pkg-arm)
+ mkdir -p "/var/cache/pacman/pkg-$CARCH"
+ arch_nspawn_flags+=(-c "/var/cache/pacman/pkg-$CARCH")