Что такое chroot? Это похоже на одновременную двойную загрузку?

Мне было предложено, что использование chroot может решить мою проблему создания приложения, которое должно работать на встроенном устройстве. Из этого описания я сделал вывод, что это как-то похоже на локальное создание встроенной среды на моей машине, которую я затем могу использовать для разработки на своем компьютере для разработки десктопов. Это правильный способ взглянуть на функциональность или я совершенно не понял?

Чтобы получить представление о том, как это работает, я прочитал это https://wiki.ubuntu.com/DebootstrapChroot [ 110], который я попытаюсь сделать на моем компьютере для старой версии Ubuntu. Однако, так как я новичок в Linux, я немного обеспокоен тем, что, поскольку я не до конца знаю, что я делаю, есть ли вообще какая-то неисправная система? Это то, что новичок должен даже попытаться ???

3
задан 12 July 2012 в 20:04

6 ответов

chroot не имеет ничего общего с двойной загрузкой. Идея chroot заключается в возможности переключения одной программы или одной оболочки и т. Д. В новый корневой каталог, что позволяет вам иметь несколько «систем» одновременно. "systems" заключена в кавычки, потому что все еще работает только одно ядро ​​Linux. Эта другая «система» представляет собой дополнительный набор инструментов кода, домашних каталогов и т. Д. Итак, если вы работаете на компьютере с архитектурой x86 и пытаетесь создать на своем компьютере программное обеспечение для ARM, вы можете создать chroot ed. среда, чья /proc сообщает программному обеспечению, что оно находится в ARM, цепочке инструментов ARM GCC и т. д. (Есть много программ, которые делают это). Другая вещь, которую может сделать chroot, - это очень ограниченная песочница, которая в сочетании с чем-то вроде SELinux и базовыми разрешениями Linux может создать относительно безопасную песочницу, в которой это приложение считает, что оно находится в другой системе. Другое использование chroot было бы тестированием. Если у вас есть приложение, которое выполняет разные действия на основе некоторого системного каталога, вы можете создать chroot для его проверки.

0
ответ дан 12 July 2012 в 20:04

Позвольте мне попытаться объяснить chroot в терминах Windows. В Windows «корень» загрузочного раздела называется «C: \». В Linux он называется «/». choort (временно) позволяет вам сделать другую папку / раздел / устройство корневым разделом. Если бы у Windows была команда выбора, она могла бы работать следующим образом.

Представьте, что у вас есть компьютер с двумя разделами или дисками с двумя версиями (или копиями) Windows. Позволяет называть их WinA и WinB. Когда вы загружаете WinA, его корнем становится C: \, а WinB может выглядеть как D :. При загрузке WinB C: \ относится к разделу, в котором установлен WinB, а D: \ - там, где находится WinA. Теперь предположим, что вы хотите внести некоторые изменения в WinA и WinB, запустив программу z. Когда вы запускаете z, он вносит все необходимые изменения в систему с корнем C :. В мире Windows вы должны загрузить WinA, запустить z, а затем загрузить WinB и запустить z. chroot позволяет сделать D: \ в C: \ без перезагрузки. Таким образом, вы можете загрузить WinA, запустить chroot, чтобы создать D: новый C: и запустить программу z, чтобы внести изменения в WinB, который находится в D: \ вместо WinA, который находится в оригинальном C:.

Теперь позвольте мне привести пример использования chroot. Однажды моя Ubuntu стала не загружаемой. Оказалось, что личинку нужно было переустановить. Это легко, если бы я мог загрузить Ubuntu и запустить команду, которая устанавливает grub. Но мне нужно было сделать это с USB. Поэтому я загрузил Ubuntu с USB-накопителя. Если бы я дал команду установить grub, я бы установил grub на USB. Поэтому мне нужно было смонтировать раздел на жестком диске, где установлена ​​Ubuntu с поврежденным grub, и использовать chroot для указания на этот смонтированный раздел. Затем я переустановил grub, и grub был установлен на жесткий диск там, где он должен быть.

0
ответ дан 12 July 2012 в 20:04

Не совсем, нет.

Загрузка ОС включает загрузку ядра, которое управляет оборудованием, а затем запускает ряд других программ. chroot запускает программу (обычно это оболочка, из которой вы можете запускать другие программы) из вашего текущего ядра, только ядро ​​лежит на программе и делает вид, что корневой каталог - это какой-то другой каталог, чем тот, который он действительно использует в качестве корень. Отсюда и название команды, потому что она меняет корневой каталог.

В вашем случае debootstrap устанавливает дерево каталогов, которое подходит для использования в качестве корневого каталога. Вы можете загрузить ядро ​​и попросить его использовать этот каталог в качестве корневого вместо вашего обычного root fs, и вы загрузите эту систему. Используя chroot, вы можете запускать программы , как если бы они запускались под ядром, которое загружалось с использованием этого каталога в качестве корневого каталога, фактически не делая этого.

0
ответ дан 12 July 2012 в 20:04

Когда вы загружаетесь с другой системы, например с Live CD, вы можете войти в файловую систему (linux) с помощью chroot.

Таким образом, вы можете, например, восстановить GRUB (в случае ошибок). Это также очень полезно, если вы не можете загрузиться и хотите загрузить важные файлы из определенного раздела.

0
ответ дан 12 July 2012 в 20:04

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

0
ответ дан 12 July 2012 в 20:04

Я чувствую, что никто не дал полное техническое объяснение, поэтому здесь.

Чтобы понять chroot, вы должны сначала понять разделение между ядром (Linux в GNU / Linux) и пользовательским пространством (GNU в GNU / Linux или, возможно, чем-то еще, например busybox.)

Ядро контролирует все оборудование на вашем компьютере. Он также предоставляет API для доступа к файлам, работы в сети и т. Д., А также контролирует, какие программы работают. Все это образует абстракцию компьютера, которая представлена ​​через интерфейс прикладного программирования (API). Сам по себе он ничего не делает, за исключением, может быть, загрузки на черный экран. Даже не подсказка оболочки.

Пространство пользователя это все остальное . Все программное обеспечение, которое вы запускаете на своем компьютере. На самом деле ядро ​​запускает только одну пользовательскую программу напрямую, init, которая затем отвечает за запуск всего остального, например оболочек и окружений рабочего стола. Пользовательское пространство также включает библиотеки, которые обычно начинаются с libc, на котором основаны все остальные библиотеки.

Итак, имея в виду, концепция chroot проста. Он просто меняет корневой каталог файловой системы unix на другой, просто для любой команды, которую вы выберете для запуска в этом контексте. Обычно это оболочка, в которой вы можете запустить другое программное обеспечение, так как ядро ​​запускает только одну команду напрямую. Этот новый контекст может иметь другой набор программ и библиотек пользовательского пространства. На одном и том же ядре работают оба набора программного обеспечения, поэтому обе системы могут использовать все аппаратные ресурсы, но (за исключением ошибок безопасности) вложенный chroot не может получить доступ к чему-либо из основной файловой системы. У него есть собственная версия / etc для конфигурации, собственная / lib для библиотек и собственная / bin, / usr / bin для программ.

Вы должны знать, что аппаратные устройства являются общими . Таким образом, в отличие от виртуальной машины, если вы отформатируете / dev / sda изнутри chroot, вы отформатируете свой настоящий жесткий диск . Это связано с тем, что узлы устройств в / dev являются прямым интерфейсом ядра, поэтому они означают одно и то же внутри и вне chroot.

И еще одно: можно предоставить chroot доступ к внешней файловой системе с помощью bind mounts. Если вы используете инструмент создания chroot, возможно, что он «услужливо» монтирует / home из основной системы внутри chroot. Это не копия, это та же файловая система, и в этом случае любые изменения, сделанные вами внутри chroot, будут выполнены на оригинале. Поэтому я рекомендую вам создавать chroot вручную, пока вы не освоитесь с тем, как они работают.

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

0
ответ дан 12 July 2012 в 20:04

Другие вопросы по тегам:

Похожие вопросы: