78

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

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

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

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

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

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

  mount -t proc none /proc

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

6 ответов6

99

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/

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

42

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

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

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

11

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

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

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

ln /sys /mnt/chroot/sys
0

В этом популярном вопросе стоит отметить, что Arch Linux создал скрипт arch-chroot ; скачать arch-install-scripts-15-1-any.pkg.tar.xz

Это решение различных проблем, связанных как с Arch-Linux, так и с Manjaro , где я тоже успешно его использовал. Возможно, больше Архи- производных, таких как Парабола , также совместимы.

Хотя простой стандартный chroot во вторичную установку Manjaro не позволит вам запустить

pacman --sync linux

(серебряная пуля после сбоя системы), заменив строку на

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

позволит вам исправить вашу вторичную Arch-производную установку через

pacman --sync linux

Как колдовство. Сценарий bash arch-chroot заботится о /dev /sys /proc и многом другом, которые оставлены в одиночку стандартным chroot .

смотрите также: Использование arch-chroot

-1

Самый простой способ - использовать цикл for:

cd /

for i in proc sys dev; do mount -o bind $i /folder/$i; done
-1

Существуют и другие псевдофайловые системы и местоположения 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 изнутри chroot. Я не рекомендую привязывать /proc к chroot /proc , так как ядро имеет концепцию пространств имен и может фактически помещать разные вещи в proc chroot.

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .