Мне было предложено, что использование chroot может решить мою проблему создания приложения, которое должно работать на встроенном устройстве. Из этого описания я сделал вывод, что это как-то похоже на локальное создание встроенной среды на моей машине, которую я затем могу использовать для разработки на своем компьютере для разработки десктопов. Это правильный способ взглянуть на функциональность или я совершенно не понял?
Чтобы получить представление о том, как это работает, я прочитал это https://wiki.ubuntu.com/DebootstrapChroot [ 110], который я попытаюсь сделать на моем компьютере для старой версии Ubuntu. Однако, так как я новичок в Linux, я немного обеспокоен тем, что, поскольку я не до конца знаю, что я делаю, есть ли вообще какая-то неисправная система? Это то, что новичок должен даже попытаться ???
chroot
не имеет ничего общего с двойной загрузкой. Идея chroot
заключается в возможности переключения одной программы или одной оболочки и т. Д. В новый корневой каталог, что позволяет вам иметь несколько «систем» одновременно. "systems" заключена в кавычки, потому что все еще работает только одно ядро Linux. Эта другая «система» представляет собой дополнительный набор инструментов кода, домашних каталогов и т. Д. Итак, если вы работаете на компьютере с архитектурой x86 и пытаетесь создать на своем компьютере программное обеспечение для ARM, вы можете создать chroot
ed. среда, чья /proc
сообщает программному обеспечению, что оно находится в ARM, цепочке инструментов ARM GCC и т. д. (Есть много программ, которые делают это). Другая вещь, которую может сделать chroot
, - это очень ограниченная песочница, которая в сочетании с чем-то вроде SELinux и базовыми разрешениями Linux может создать относительно безопасную песочницу, в которой это приложение считает, что оно находится в другой системе. Другое использование chroot
было бы тестированием. Если у вас есть приложение, которое выполняет разные действия на основе некоторого системного каталога, вы можете создать chroot
для его проверки.
Позвольте мне попытаться объяснить 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 был установлен на жесткий диск там, где он должен быть.
Не совсем, нет.
Загрузка ОС включает загрузку ядра, которое управляет оборудованием, а затем запускает ряд других программ. chroot
запускает программу (обычно это оболочка, из которой вы можете запускать другие программы) из вашего текущего ядра, только ядро лежит на программе и делает вид, что корневой каталог - это какой-то другой каталог, чем тот, который он действительно использует в качестве корень. Отсюда и название команды, потому что она меняет корневой каталог.
В вашем случае debootstrap
устанавливает дерево каталогов, которое подходит для использования в качестве корневого каталога. Вы можете загрузить ядро и попросить его использовать этот каталог в качестве корневого вместо вашего обычного root fs, и вы загрузите эту систему. Используя chroot
, вы можете запускать программы , как если бы они запускались под ядром, которое загружалось с использованием этого каталога в качестве корневого каталога, фактически не делая этого.
Когда вы загружаетесь с другой системы, например с Live CD, вы можете войти в файловую систему (linux) с помощью chroot.
Таким образом, вы можете, например, восстановить GRUB (в случае ошибок). Это также очень полезно, если вы не можете загрузиться и хотите загрузить важные файлы из определенного раздела.
Chroot позволяет запускать команду или оболочку из другого корневого каталога. Если это было предложено вам из-за встроенного устройства, это означает, что вы будете запускать оболочку из корневого каталога этого устройства.
Я чувствую, что никто не дал полное техническое объяснение, поэтому здесь.
Чтобы понять 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 мало что может пойти не так, поскольку в основном это автономная система, которая запускается только тогда, когда вы об этом попросите.