Building a Gentoo chroot lets a host prepare, repair, or test a Gentoo userland without booting it directly. The chroot only works when the stage3 files, DNS resolver, and kernel-backed filesystems match what Gentoo expects, otherwise Portage and shell startup checks can fail with misleading dev or resolver errors.
An AMD64 OpenRC chroot starts from the current stage3 manifest in Gentoo's autobuilds directory. The archive must be extracted with the extended-attribute and numeric-owner flags expected by the Handbook, then the host's /proc, /sys, /dev, and /run filesystems must be exposed to the new root. A systemd chroot uses the matching systemd stage3 manifest, but the mount propagation steps are still required before runtime tools can behave normally.
After entry, the shell should report a Gentoo base release from inside /mnt/gentoo, and Portage should have a repository snapshot before package work begins. Profile selection, locale generation, kernel setup, and bootloader installation belong after the chroot itself is available.
Related: How to enter a Gentoo chroot
Related: How to sync the Gentoo repository
$ sudo mkdir -p /mnt/gentoo
$ cd /mnt/gentoo
$ wget https://distfiles.gentoo.org/releases/amd64/autobuilds/current-stage3-amd64-openrc/latest-stage3-amd64-openrc.txt 2026-06-11 03:34:27 URL:https://distfiles.gentoo.org/releases/amd64/autobuilds/current-stage3-amd64-openrc/latest-stage3-amd64-openrc.txt [691/691] -> "latest-stage3-amd64-openrc.txt" [1]
Use the matching current-stage3-amd64-systemd directory instead when the target chroot will use systemd.
$ STAGE3=$(awk '/^stage3-amd64-openrc-.*[.]tar[.]xz / {print $1; exit}' latest-stage3-amd64-openrc.txt) $ printf '%s\n' "$STAGE3" stage3-amd64-openrc-20260610T214636Z.tar.xz
$ wget "https://distfiles.gentoo.org/releases/amd64/autobuilds/current-stage3-amd64-openrc/$STAGE3" 2026-06-11 03:34:55 URL:https://distfiles.gentoo.org/releases/amd64/autobuilds/current-stage3-amd64-openrc/stage3-amd64-openrc-20260610T214636Z.tar.xz [300282916/300282916] -> "stage3-amd64-openrc-20260610T214636Z.tar.xz" [1]
$ sudo tar xpvf "$STAGE3" --xattrs-include='*.*' --numeric-owner -C /mnt/gentoo ./ ./bin/ ./boot/ ./dev/ ./etc/ ##### snipped #####
The --xattrs-include='*.*' and --numeric-owner flags preserve the metadata Gentoo release engineering put into the stage3 archive.
$ sudo cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
$ sudo mount --types proc /proc /mnt/gentoo/proc
$ sudo mount --rbind /sys /mnt/gentoo/sys
$ sudo mount --make-rslave /mnt/gentoo/sys
$ sudo mount --rbind /dev /mnt/gentoo/dev
$ sudo mount --make-rslave /mnt/gentoo/dev
On some non-Gentoo live systems, /dev/shm may point into /run in a way that breaks after chroot entry. Fix /dev/shm before continuing if shell or Portage commands report broken /dev/fd or /dev/shm.
$ sudo mount --bind /run /mnt/gentoo/run
$ sudo mount --make-slave /mnt/gentoo/run
$ sudo chroot /mnt/gentoo cat /etc/gentoo-release Gentoo Base System release 2.18
$ sudo chroot /mnt/gentoo /bin/bash
# source /etc/profile
# export PS1="(chroot) ${PS1}"
# emerge-webrsync
The snapshot gives Portage a current package repository. A later emerge --sync can refresh it through rsync after the chroot is working.
# exit
$ sudo umount -R /mnt/gentoo/run $ sudo umount -R /mnt/gentoo/dev $ sudo umount -R /mnt/gentoo/sys $ sudo umount /mnt/gentoo/proc