LINUX.ORG.RU
ФорумAdmin

Зачем делать chroot в root?

 , ,


0

1

Здравствуйте.

В вики по арчевскому PKGBUILD написано: «Each function is run chrooted inside the pacman install directory. See this thread»

А в том треде написано: «We chroot() and then chdir() to the root directory in every install script executed»

Подскажите, какой смысл делать chroot/chdir в корневую директорию?

★★★★★

Чтобы работали установочные скрипты и файлы оказывались там где нужно. Из твоей-же ссылки(внимание на слеш перед etc и его отсутствие):

...
mv ${_backup} etc/ca-certificates.conf
...
...
  mv /etc/conf.d/wireless-regdom.pacorig /etc/conf.d/wireless-regdom
...
hope13 ★★★
()

chroot() и chdir() происходят не в глобальный корень, а в корень установочной директории. В той ветке форума человек неточно выразился.

TeopeTuK ★★★★
()
Ответ на: комментарий от TeopeTuK

А что это за установочная директория? Ведь если сделать чрут в другую директорию, то в корень уже ничего не запишешь/прочитаешь и смысл установочных скриптов пропадает? Или я туплю?

makoven ★★★★★
() автор топика
Последнее исправление: makoven (всего исправлений: 2)
Ответ на: комментарий от hope13

Чтобы работали установочные скрипты и файлы оказывались там где нужно

Почему установочные скрипты должны не работать просто от chdir?

внимание на слеш перед etc и его отсутствие

С той же ветки форума, постом ниже: Preference would be to omit the leading /, but due to the chroot/chdir combo, both should work

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven

Надо полагать, это директория, в которую устанавливается система. Обычно при установке системы линукс загружается, потом монтирует корень будущей системы куда-нибудь в /mnt, скажем, и в эту директорию устанавливает пакеты. А в пакетах постустановочные сценарии. Вот и всё.

Если же ты в уже установленную систему ставишь пакет, то никаких chroot() не происходит.

TeopeTuK ★★★★
()
Ответ на: комментарий от makoven

Это делается, чтобы сборочные/установочные скрипты ничего не писали в реальный корень системы.

anonymous
()
Ответ на: комментарий от TeopeTuK

Если же ты в уже установленную систему ставишь пакет, то никаких chroot() не происходит.

судя по исходному коду они делают всегда chroot и chdir(«/»). Я только не на все 100 уверен что такое «pacman install directory». Но думаю это тот-же /.

Думаю я всё-же прав.

$man pamcan
-r, --root Specify an alternative installation root (default is /).

Все эти телодвижения делаются, чтобы pacman работал с системой в которую он установлен.

hope13 ★★★
()
Последнее исправление: hope13 (всего исправлений: 2)

Я арч не юзал, но обычно менеджеры пакетов при сборке/установке пакетов создают специальную «песочницу», в которую делают chroot. Чтобы скрипты сборки и установки ставили не в реальную корневую ФС, а в «песочницу».

А потом собранные файлы отдельно переносятся менеджером сборки/установки пакетов соб-но либо в пакет (при сборке), либо в реальную ФС (при установке).

Each function is run chrooted inside the pacman install directory.

Означает что chroot происходит как раз-таки в эту «песочницу» (pacman install directory).

We chroot() and then chdir() to the root directory

Следует читать как «мы делаем chroot (*имеет в виду в песочницу, просто это не указано) и после делаем chdir в корень (*уже в корень „песочницы“, а не системы!)». Т.е. фраза «root directory» тут имеет отношение только к chdir, а не к chroot.

nstorm
()
Последнее исправление: nstorm (всего исправлений: 1)
Ответ на: комментарий от TeopeTuK

Не. Твоя теория ближе к истине

makoven ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Двачую.

Суть такова: у тебя есть make install который пишет в общем случае в /. Чтобы не страдать херней с префиксами, делают проще - выносят билд-директорию в chroot делают make install после чего зачищают мусор и остаётся готовая структура директорий и файлов для заворачивания в пакет.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от Dark_SavanT

Со сборкой там все понятно. А именно этот момент касается install-скриптов, которые выполняются у пользователя на машине во время установки/удаления/обновления. И тут могу предложить два варианта: либо делается chroot в распакованный куда-то пакет и скрипт имеет доступ только к файлам, содержащимся в этом пакете. Либо chroot делается в корневую директорию машины пользователя. Тогда мне непонятно чем он отличается от cd /

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven

Тогда мне непонятно чем он отличается от cd /

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

По умолчанию делается chroot(«/»), с помощью ключа -r можно переопределить переменную root и поставить пакет в соседнюю систему.

hope13 ★★★
()
Ответ на: комментарий от hope13

Ну ок. Когда дойдет до экспериментов, проверю

Всем спасибо. Вы лучшие )

makoven ★★★★★
() автор топика
Последнее исправление: makoven (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.