Chroot linux что это

Обновлено: 02.07.2024

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

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

Contents

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Init-скрипт

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

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

Chroot — операция изменения корневого каталога диска для запущенного процесса и его дочерних процессов. Программа, запущенная в таком окружении не может получить доступ к файлам вне нового корневого каталога. Это измененное окружение называется chroot jail.

Contents

Причины

Изменение корневого каталога обычно производится для выполнения действий по обслуживанию систем, загрузка и/или вход в которых стали невозможны. В таком режиме, например, могут быть выполнены:

  • Переустановка загрузчика.
  • Пересборка образа initramfs.
  • Обновление или откат пакетов. .

Требования

Монтирование разделов

Корневой раздел среды Linux, в которую вы хотите войти с chroot, должен быть первым делом смонтирован. Чтобы найти имя раздела, выполните:

Затем создайте каталог для монтирования корневого раздела и смонтируйте его:

Если отдельные системные каталоги были вынесены на отдельные разделы, их также нужно смонтировать в файловую систему корневого раздела:

Изменение корневого раздела

Используя arch-chroot

Bash-скрипт arch-chroot является частью пакета arch-install-scripts из официальных репозиториев. Перед тем, как запускать /usr/bin/chroot , этот скрипт монтирует интерфейсные файловые системы вроде /proc и делает /etc/resolv.conf доступным из под окружения chroot.

Запустите arch-chroot с указанием нового корневого каталога:

Чтобы запустить командную оболочку bash вместо sh:

Чтобы запустить mkinitcpio -p linux в окружении chroot минуя создание сеанса в командной оболочке:

Используя chroot

Смонтируйте временные интерфейсные файловые системы:

Чтобы использовать интернет-соединение в chroot может понадобиться скопировать resolv.conf:

Чтобы запустить bash в окружении chroot:

  • chroot: cannot run command '/usr/bin/bash': Exec format error , это значит, что архитектуры основной среды и среды нового корневого каталога не совпадают.
  • chroot: '/usr/bin/bash': permission denied , перемонтируйте раздел с разрешением exec: mount -o remount,exec /mnt/arch .

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

Совет: Вы также можете установить другое приглашение командной оболочки для того, чтобы отличать среду chroot от основной:

Используя systemd-nspawn

systemd-nspawn может использоваться для запуска команды или операционной системы в легковесном контейнере. Во многих случаях он похож на chroot, но является более мощным инструментом, так как он полностью эмулирует отдельную иерархию файловой системы и дерево процессов, различные системы межпроцессного взаимодействия, имя хоста и домена.

Перейдите в точку монтирования нового корневого раздела и запустите systemd-nspawn:

Нет необходимости самостоятельно монтировать интерфейсные файловые системы вроде /proc , так как systemd-nspawn запускает новый процесс init в созданной виртуальной среде, который берет на себя эту задачу. Это похоже на загрузку второй операционной системы внутри основной, но без создания виртуальной машины.

Запуск графических приложений в среде chroot

Если у вас есть запущенный X-сервер, вы сможете запускать даже графические приложения в среде chroot.

Чтобы разрешить среде chroot соединение с сервером X, откройте виртуальный терминал внутри сервера (то есть, внутри рабочего стола пользователя, который в данный момент вошел в систему), запустите команду xhost, которая даст права каждому подключаться к X-серверу пользователя:

Теперь, для соединения приложений с сервером X, установите переменной окружения DISPLAY в сеансе chroot значение, совпадающее с переменной окружения DISPLAY пользователя, от имени которого запущен сервер. То есть, выполните

от имени этого пользователя для того, чтобы узнать значение переменной, и выполните

в среде chroot, установив переменной нужное значение (в данном примере это :0 ).

Выход из среды chroot

После завершения работы, выйдите из сеанса chroot:

Теперь размонтируйте временные файловые системы и корневой раздел:

Примечание: Если возникает ошибка наподобие: umount: /path: device is busy , обычно это значит, что либо какая-то программа в среде chroot все еще запущена, либо что-то пошло не так при размонтировании внутренних по отношению к корневому разделу. Выйдите из программы и используйте команду mount чтобы найти и размонтировать подразделы. Может быть несколько непросто размонтировать некоторые вещи, и вам может посчастливиться форсировать размонтирование опцией umount --force . В качестве последнего средства используйте опцию umount --lazy , которая просто освобождает устройства. В любом случае, чтобы обезопасить себя, перезагрузитесь как можно быстрее.

Без прав суперпользователя

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

PRoot

PRoot может использоваться для изменения корневого раздела и использовать mount --bind без привелегий суперпользователя. Это полезно для ограничивания доступа приложений до единственного каталога или запуска программ, собранных для другой архитектуры. Однако PRoot имеет ограничения, связанные с тем, что все файлы принадлежат пользователю на основной системе. PRoot предоставляет опцию --root-id , которая может быть использована в качестве обходного пути для этих ограничений, по тому же принципу (хотя и более ограниченно), что и в fakeroot.

Fakechroot

fakechroot является небольшой прослойкой, которая перехватывает системные вызовы chroot и симулирует поведение системы, на самом деле не выполняя реальных вызовов (на которые все равно нет прав). Он может использоваться вместе с fakeroot для создания видимости того, что chroot запускается суперпользователем.

Этот документ описывает bootstrapping process, нужный для того, чтобы установить Arch Linux из уже работающего хоста Linux. После bootstrapping, установка продолжается так, как описано в руководстве по установке Arch Linux.

Установка Arch Linux из-под другого Linux полезна для:

Цель процедуры начальной загрузки в том, чтобы настроить окружение, из которого можно будет запустить arch-install-scripts (содержит такие скрипты как pacstrap и arch-root ). Установить arch-install-scripts нужно на самой хост-системе или настройкой chroot основанного на Arch Linux.

Если хост работает под Arch Linux, сразу установите arch-install-scripts .

Примечание: Этот гайд расчитан на то, что имеющийся хост может запускать программы архитектуры нового Arch Linux. В случае с x86_64 хостом, можно даже использовать i686-pacman при сборке 32-битного окружения chroot. Смотрите Arch64 - установка встроенной 32-битной системы [archived page] .

Contents

Arch Linux-based chroot

Идея состоит в том, чтобы как бы запустить Arch Linux внутри уже имеющейся системы. Настоящая установка, которая будет содержаться внутри chroot, будет затем запущена из этой Arch системы. Есть два способа настроить и войти в chroot, они представлены ниже.

Примечание: Хост-система должна использовать Linux 2.6.32 или новее. Примечание: Используйте только один из двух способов, и не забудьте дочитать эту статью до конца, чтобы закончить установку.

Создаём chroot

Способ 1: Использование Bootstrap образа (рекомендуется)

Выбираем подходящий для вашего интернета сервер, откуда будут загружаться основные репозитории:

Примечание: Если ваша хост-система — x86_64, а образ boostrap — i686, то также подправьте /tmp/root.i686/etc/pacman.conf , ясно указав Architecture = i686 , чтобы pacman качал пакеты под архитектуру i686.

Войдём в chroot

  • Если установлен bash 4 или новее, то:
  • Иначе:

Способ 2: Используя образ LiveCD

Можно смонтировать корневой образ последнего установочного диска Arch Linux и затем заchroot'ить туда. Плюс этого способа в том, что у вас будет сразу рабочий Arch Linux installation прямо внутри хост-системы без надобности в его настройки.

Примечание: Перед тем как продолжить, удостоверьтесь, что у вас последняя версия squashfs на хост-системе. Иначе будут ошибки типа: FATAL ERROR aborting: uncompress_inode_table: failed to read block .
  • Корневой образ можно скачать с одного из зеркал в папке arch/x86_64/ либо arch/i686/, смотря какую архитектуру хотите. Образ имеет формат squashfs, который является read-only, поэтому нам надо распаковать его и смонтировать корневой образ (root-image.fs).
  • Чтобы распаковать корневой образ, надо
  • Теперь смонтируем его с помощью опции loop
  • Перед тем как chrooting to it, нужно смонтировать некоторые виртуальные системные разделы, а затем скопировать resolv.conf для интернета.
  • Теперь всё готово, чтобы to chroot в только что установленное окружение Arch

Используем наше chroot окружение

Начальная настройка хранилища ключей pacman

Установка

Хост Debian

На хостах Debian pacstrap выводит следующую ошибку:

Хост Fedora

На хостах Fedora и Live USB, если у вас не получается сгенерировать ваш fstab с помощью genfstab , то удалите из fstab одинаковые записи и везде опции seclabel (это опция специфична для Fedora и поэтому не даст вам загрузиться).

Настройка системы

С этого момента просто следуйте согласно разделам начиная с «Монтирование разделов» из руководства по установке Arch Linux.

Замена уже существующей системы без LiveCD

650МБ, например, переформатировав существующий swap-раздел (после окончания установки, можете обратно создать swap). Если не можете столько освободить, выясните точно, какие пакеты группы base вам понадобятся для того, чтобы get a system с работающим интернетом and running in the temporary partition. То есть надо будет ясно указать каждый пакет для pacstrap. И ещё надо указать -c, чтобы пакеты скачивались на хост-систему, дабы избежать недостатка свободного места.

После того как установили, перезагрузитесь в свою новую систему, затем rsync the entire system to the primary partition. Fix the bootloader configuration before rebooting.

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 cannot 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.

Contents

Prerequisites

Setting up the environment

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

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

If an installation has been previously created in a sub directory of the current root file system, the above steps need not be repeated.

Unpacking system files and the Portage tree (new installations)

When building a new install, the next step is to download the stage3 tarball and unpack it to chroot location. For more information on this process please see Downloading the stage tarball and Unpacking the stage tarball in the Gentoo Handbook.

Configuration

Before entering the chroot a number of directories must be mounted:

Some basic configuration files must be copied from the host. Do not copy /etc/portage/make.conf when using an existing installation:

Usage

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

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

The system is now ready. Feel free to install software, mess with settings, test experimental packages and configurations -- all 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 to the normal environment. Do not forget to umount the directories that have been mounted.

systemd-nspawn

If the system uses systemd, systemd-nspawn can be used, which can automatically handle much of the boilerplate required in administering chroots. For example, to enter a chroot via systemd-nspawn with the same configuration as specified in the Configuration section, simply run:

Init scripts

If setting up chroots is a task that must be performed often, it is possible to speed up the mounting of the directories by using an init script. The script could be added to the default runlevel and therefore set up automatically on system boot:

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

Читайте также: