Chroot

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Chroot and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎italiano • ‎日本語 • ‎한국어 • ‎português do Brasil • ‎русский • ‎Türkçe • ‎中文(中国大陆)‎


Resources

Chroot (англ. Change root — «изменение корневого каталога») — это системная утилита Unix, используемая для смены текущего корневого каталога с целью создания нового окружения, логически отдельного от основной системы. Это новое окружение также известно как «chroot jail» («тюрьма»). Пользователь, работающий внутри jail, не может видеть файлы вне среды, которой они ограничены, или обращаться к ним.

Одним из основных применений для изменения корневого каталога является создание отдельной системы Linux на основе имеющейся в целях тестирования или проверки совместимости программ. chroot часто рассматривается как легковесная альтернатива виртуализации, потому что может выполняться без накладных расходов гипервизора.

Предварительные требования

Настройка окружения

При создании новой установки chroot первым делом необходимо создать каталог для chroot, например в /mnt/mychroot:

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

Чтобы смонтировать существующую установку из раздела, выполните следующую команду. Не забудьте заменить <DEVICE> из приведенного примера на устройство и раздел существующей установки:

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

Если установка была уже произведена в одном из подкаталогов корневого каталога, вышеприведенные шаги можно пропустить.

Распаковка системных файлов и дерева Portage (новая установка)

При создании новой установки, следующим шагом будет загрузка файла стадии stage3 и архива Portage и их последующая распаковка внутри chroot каталога. Для получения дополнительной информации по данному вопросу, посмотрите Загрузка архива stage и Распаковка архива stage в Gentoo Handbook.

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

Конфигурация

Перед тем, как изменить корневой каталог, нам необходимо смонтировать несколько каталогов.

root #mount --rbind /dev /mnt/mychroot/dev
root #mount --make-rslave /mnt/mychroot/dev
root #mount -t proc /proc /mnt/mychroot/proc
root #mount --rbind /sys /mnt/mychroot/sys
root #mount --make-rslave /mnt/mychroot/sys
root #mount --rbind /tmp /mnt/mychroot/tmp

Нам также необходимо скопировать несколько основных файлов конфигурации из основной системы; не копируйте make.conf, если используете существующую установку.

user $cp /etc/portage/make.conf /mnt/mychroot/etc/portage # Если используется существующая установка, пропустите эту команду.
user $cp /etc/resolv.conf /mnt/mychroot/etc

Использование

После завершения в окружение chroot можно войти с помощью следующих команд:

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

При создании новой установки необходимо синхронизировать дерево Portage, чтобы убедиться, что он обновлен.

root #emerge --sync

Теперь система готова для использования. Вы можете устанавливать программное обеспечение, изменять настройки, тестировать экспериментальные пакеты и конфигурации без какого-либо влияния на основную систему. Для того, чтобы покинуть chroot, просто введите exit или нажмите Ctrl+d, это вернет консоль обратно в обычное окружение. Не забудьте размонтировать смонтированные ранее каталоги.

Init-скрипт

Если настройку chroot приходится часто выполнять, то можно ускорить монтирование необходимых для chroot каталогов, используя следующий init-скрипт. Скрипт может быть добавлен в уровень запуска по умолчанию, что позволить производить все настройки автоматически при загрузке системы:

Файл /etc/init.d/mychroot
#!/sbin/openrc-run
 
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"
}

Если используется другой каталог или раздел, добавьте необходимые команды монтирования в start() и измените /mnt/chroot, если используете другое название.

Смотрите также