Bubblewrap cross-architecture chroot
System preparation
Qemu
Emerge qemu with static-user USE enabled and your wanted architectures.
1 2 3 4 5 6 7 8 |
app-emulation/qemu QEMU_SOFTMMU_TARGETS: aarch64 arm x86_64 app-emulation/qemu QEMU_USER_TARGETS: aarch64 arm x86_64 app-emulation/qemu static-user dev-libs/glib static-libs sys-apps/attr static-libs sys-libs/zlib static-libs dev-libs/libpcre2 static-libs |
OpenRC
Enable qemu-binfmt:
1 |
rc-update add qemu-binfmt default |
Start qemu-binfmt:
1 |
rc-service qemu-binfmt start |
Chrooting
- select chroot location (eg
/chroots/gentoo-arm64-musl-stable) - unpack the desired rootfs
- create needed directories
mkdir -p /chroots/gentoo-arm64-musl-stable/var/cache/distfiles
- execute
bwrap- with last
ro-bindmount the qemu emulator binary (egqemu-aarch64) - execute the mounted emulator binary giving it a shell program (eg
bash)
- with last
Chroot with bwrap:
1 2 3 4 5 6 7 8 9 10 |
bwrap \ --bind /chroots/gentoo-arm64-musl-stable / \ --dev /dev \ --proc /proc \ --perms 1777 --tmpfs /dev/shm \ --tmpfs /run \ --ro-bind /etc/resolv.conf /etc/resolv.conf \ --bind /var/cache/distfiles /var/cache/distfiles \ --ro-bind /usr/bin/qemu-aarch64 /usr/bin/qemu-aarch64 \ /usr/bin/qemu-aarch64 /bin/bash -l |