монтировать dev, proc, sys в среде chroot?

187085
Patrick

Я пытаюсь создать образ Linux с выбранными пакетами.
Я пытаюсь создать пакеты, которые собираюсь использовать на ноутбуке XO, потому что на реальном оборудовании XO компиляция пакетов занимает очень много времени, если я могу собрать все нужные мне пакеты и просто прошить Изображение на XO, я могу сэкономить время и пространство.

Когда я попытался установить некоторые пакеты, его не удалось настроить из-за отсутствия каталогов proc, sys, dev. Итак, я узнал из других мест, что мне нужно «смонтировать» host proc, каталоги в моей среде chroot.

Я видел два синтаксиса и не уверен, какой использовать.

В хост-машине:

 mount --bind /proc <chroot dir>/proc 

и другой синтаксис (в среде chroot):

 mount -t proc none /proc 

Какой я должен использовать, и в чем разница?

74
Осторожно: предоставление доступа к дисковым устройствам означает, что вы теряете некоторые преимущества '`chroot ()`'. В частности, определенные могут читать файлы за пределами своего раздела файловой системы, если вы не будете осторожны. Jonathan Leffler 14 лет назад 0
@ Джонатан Леффлер: это не похоже на проблему того, что он делает. Zifre 14 лет назад 2
@JonathanLeffler пользователь root в chroot всегда может в любом случае покинуть chroot. LtWorf 8 лет назад 0

5 ответов на вопрос

94
gacrux

Arch Linux Wiki предлагает следующие команды:

cd /mnt/arch # or where you are preparing the chroot dir mount -t proc proc proc/ mount -t sysfs sys sys/ mount -o bind /dev dev/ 

Я могу подтвердить, что они работали на меня.

Они также, казалось, работали на меня в Ubuntu. isaaclw 12 лет назад 2
В моем случае (также Ubuntu) мне также потребовалось "mount -o bind / dev / pts dev / pts". Thomas 8 лет назад 3
42
Zifre

Для /procи /sys, я полагаю, вы могли бы использовать любой метод. Обе они являются специальными файловыми системами, поэтому их можно воссоздавать любое количество раз (метод bind mount использует то же самое монтирование, что и хост-система, тогда как другой метод использует новое монтирование). Я всегда видел рекомендованное в руководствах крепление для крепления, поэтому я бы использовал это. Насколько я знаю, нет действительно важной разницы.

Однако /devобычно это монтирование tmpfs, которым управляет udev, поэтому это должна быть та же самая файловая система, что и на главном компьютере. Это означает, что вам нужно будет использовать метод bind mount.

Если этот chroot будет некоторое время, вы можете поместить эти записи в /etc/fstabхост-систему, чтобы упростить процесс.

Я хотел бы спросить, имеет ли смысл копировать (связывать) proc / sys с хоста на какую-то другую машину? Почему они должны соответствовать этой машине? ransh 7 лет назад 0
@ransh будет иметь смысл, если вы свяжете / proc с $ chrootdir / proc, у вас будет возможность обрабатывать процесс и то, что происходит внутри / proc обеих систем из обеих систем; Например: из chroot вы можете проверить, запущена ли программа на хосте ... и т. д. Jonas 7 лет назад 0
Может быть, `sys`` type` файловой системы (** сегодня **) больше не существует? uprego 6 лет назад 0
9
robert

В Gentoo Handbook специально вызываются эти две команды для повторного монтирования / proc и / dev. Я использовал их несколько раз.

mount -t proc none /mnt/chroot/proc mount -o bind /dev /mnt/chroot/dev 

Я подозреваю, что / sys - это обычная папка, поэтому вы можете создать жесткую ссылку.

ln /sys /mnt/chroot/sys 
Вы не можете жестко связать каталог (обычно), как вы предлагаете для / sys, и если вы используете символическую ссылку, она сломается, как только вы выполните chroot. 14 лет назад 17
Они добавили несколько новых, основанных на systemd. Возможно, это хорошая идея добавить их. AzP 6 лет назад 0
0
y guy

It may be worth noting in this popular question, that Arch Linux has made a script arch-chroot; download arch-install-scripts-15-1-any.pkg.tar.xz

This which takes care of various related problems both in Arch-Linux and Manjaro, where I used it successfully, too. Possibly more Arch-derivates like Parabola are compatible just as well.

While a simple standard chroot into a secondary Manjaro installation will not allow you to run

pacman --sync linux 

(the silver bullet after a system crash), replacing the line with

arch-chroot /run/media/*YOURSELF*/manja-disk2 

will enable you to fix your secondary Arch-derivate installation via

pacman --sync linux 

like a charm. The bash script arch-chroot takes care of /dev /sys /proc and much more, which are left alone by the standard chroot.

see also: Using arch-chroot

-1
Brian Minton

Существуют и другие псевдофайловые системы и местоположения tmpfs. Это на Debian:

/dev/pts  /run /run/shm /proc/sys/fs/binfmt_mist /var/lib/nfs/rpc_pipefs /proc/fs/nfsd /proc/bus/usb 

Это должно быть в порядке, чтобы смонтировать usbfs, rpc_pipefsи devptsпсевдо-файловые системы изнутри корня. Я не рекомендую привязываться /procк chroot'ам /proc, поскольку ядро ​​имеет концепцию пространств имен и может на самом деле помещать разные вещи в процесс chroot.

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

Неправильно монтировать систему /varили /runна chroot, если у chroot есть собственное пространство имен pid.

Спекуляция? На суперпользователе (и на других форумах по стеку) обычно лучше подождать или исследовать и отвечать с помощью связанных источников, если вы не уверены. Это сделано для того, чтобы не рисковать распространением ошибочных подсказок. Извините, если разочаровал и удачи! Simon B. 8 лет назад 0
@SimonB. Я добавил ссылку в список рассылки, поддерживающий идею, что / sys не должен быть подключен. Brian Minton 8 лет назад 0
С пространством имен pid вы говорите о более продвинутых функциях пространства имен пользователя, которые мы можем найти в современных ядрах Linux (то есть, на основе функций «контейнеров»), тогда как когда мы используем термин chroot, мы ссылаемся на традиционное изменение пространства имен файлов ( и ничего больше). Johan Boulé 7 лет назад 0

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