From Gentoo Wiki
Jump to: navigation, search
Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎日本語 • ‎한국어 • ‎русский • ‎Türkçe • ‎中文(中国大陆)‎

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's root directory. 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. Chroot 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

When creating a new chroot setup, the first thing needed is a directory for the chroot to reside in. For example, a chroot could be created in /mnt/mychroot:

user $mkdir /mnt/mychroot
user $cd /mnt/mychroot

To mount an existing installation from a partition the following command can be ran. Be sure to replace the <DEVICE> string in the example below with the drive and partition of the existing installation:

user $mkdir /mnt/mychroot
user $mount /dev/<DEVICE> /mnt/mychroot

If an installation has been previously created in a sub directory of the current root file system the above steps can be skipped.

Unpacking system files and the Portage tree (new installations)

When building a new install, 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.

root #tar xvjpf stage3-*.tar.bz2 -C /mnt/mychroot
root #tar xvjf portage-*.tar.bz2 -C /mnt/mychroot/usr


Before entering the chroot a number of directories need to be mounted:

root #mount -o rbind /dev /mnt/mychroot/dev
root #mount -t proc none /mnt/mychroot/proc
root #mount -o bind /sys /mnt/mychroot/sys
root #mount -o bind /tmp /mnt/mychroot/tmp

Some basic configuration files will need to be copied from the host, do not copy over make.conf when using an existing installation:

user $cp /etc/portage/make.conf /mnt/mychroot/etc/portage # When using an existing installation, skip this command.
user $cp /etc/resolv.conf /mnt/mychroot/etc

Once done enter the chroot environment by executing the following commands:

root #chroot /mnt/mychroot /bin/bash
root #env-update
root #source /etc/profile
root #export PS1="(chroot) $PS1"

When creating a new installation Portage should be synced to make sure everything is up to date.

root #emerge --sync

The system is now ready; feel free to install software, mess with settings, test experimental packages and configurations without having any effect on the main system. To leave the chroot simply type exit or press Ctrl+D. Doing so will return the console back to the normal environment. Do not forget to umount the directories that have been mounted.

Init scripts

If setting up chroots is a task that is needed to be performed often, it is possible to speed up the mounting of the directories by using an init script:

FILE /etc/init.d/mychroot
depend() {
   need localmount
   need bootmisc
start() {
     ebegin "Mounting chroot directories"
     mount -o rbind /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"
stop() {
     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"

When using a different directory or partition, add the necessary mounting commands in the start() function and change /mnt/chroot to the appropriate name.

See also