From Funtoo
Revision as of 02:17, October 23, 2021 by Drobbins (talk | contribs) (→‎Use)
Jump to navigation Jump to search

"fchroot" is the Funtoo franken-chroot tool, which uses the power of QEMU to allow you to "fchroot" into a non-x86 system on an x86 system and use it as if it were a native chroot. It currently allows chrooting into arm-32bit, arm-64bit and riscv-64bit systems on a regular 64-bit PC.

The pypi package index for fchroot can be found here:


To emerge fchroot, perform the following steps:

root # cat >> /etc/portage/package.use << "EOF"
app-emulation/qemu static-user qemu_user_targets_aarch64 qemu_user_targets_riscv64 qemu_user_targets_arm
dev-libs/glib static-libs
dev-libs/libpcre static-libs
sys-apps/attr static-libs
root # emerge -av fchroot


You can now extract your non-x86 stage3 tarball to your preferred location, such as /var/tmp/riscv-stage3, and then fchroot into it:

root # cd /var/tmp/riscv-stage3
root # tar --numeric-owner --xattrs --xattrs-include='*' -xpf stage3-sifive-fu740-next-2021-10-21.tar.xz
root # fchroot . /bin/bash
>>> Setting up /proc...
>>> Setting up /sys...
>>> Setting up /dev...
>>> riscv-64bit frankenchroot B]...
fchroot #

Fchroot does the steps necessary to enable the QEMU emulation, and also takes care of performing bind-mounts for /dev, /proc and /sys, and copying /etc/resolv.conf into the chroot environment to ensure that name resolution works.

You are now fchrooted into a riscv environment, running riscv via QEMU, and this will be reflected in the uname -a output:

fchroot # uname -a
Linux ryzen 5.10.46_p4-debian-sources #1 SMP Wed Aug 4 23:05:15 MDT 2021 riscv64 GNU/Linux

You can do anything you would do in a regular chroot, including ego sync and emerging things, as long as you disable pid-sandbox for Portage:

   /etc/make.conf - add sandbox

See a live demo here: