Chroot

What is a chroot?
Chroot (Change Root) is a Unix system utility used to change the apparent root directory to create a new environment logically separate from the main system. This new environment is known as a "chroot jail". A user operating inside the jail can not see or access files outside of the environment they have been locked into.

One of the main uses for chrooting is to create a separate Linux system on top of a the current one for the purpose of testing or software compatibility. It is often seen as a lightweight alternative to virtualization because it is able to run without the overhead of a hypervisor.

Setting up the environment
The first thing that you need to do is create a directory for your chroot to reside, for example in "/mnt/mychroot"

Unpacking system files & portage tree
The next step is to download the stage3 and portage tarballs and set them up in the chroot location. For more information on this process please see sections 5a and 5b in the Gentoo Handbook.

Configuration
Before entering the chroot we need to mount a number of directories.

And will also need to copy over some basic configuration file from the host.

Once done we can then enter the chroot environment.

Finally we should sync portage to make sure everything is up to date.

The system is now ready. You can install software, mess with settings, test experimental packages and configurations without having any effect on your main system. To leave the chroot simply type "exit" or press Ctrl-D, this will return you back to your normal environment.

Init scripts
To speed up the mounting of the directories needed for a chroot you can use an Init Script.


 * 1) !/sbin/runscript

depend { need localmount need bootmisc }

start { do   ebegin "Mounting chroot directories" mount -o bind /dev /mnt/mychroot/dev > /dev/null & mount -t proc none /mnt/mychroot/proc > /dev/null & mount -o bind /sys /mnt/mychroot/sys > /dev/null & mount -o bind /tmp /mnt/mychroot/tmp > /dev/null & eend $? "An error occurred while mounting chroot directories" done }

stop { do   ebegin "Unmounting chroot directories" umount -f /mnt/mychroot/dev > /dev/null & umount -f /mnt/mychroot/proc > /dev/null & umount -f /mnt/mychroot/sys > /dev/null & umount -f /mnt/mychroot/tmp > /dev/null & eend $? "An error occurred while unmounting chroot directories" done }