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

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

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

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

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

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

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

  mount -t proc none /proc

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

7 ответов

Решение

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

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

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

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/

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

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

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

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

ln /sys /mnt/chroot/sys

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

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

Это плохая идея, чтобы смонтировать систему /var или же /run на chroot, если у chroot есть собственное пространство имен pid.

В этом популярном вопросе стоит отметить, что 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

Я пытался сбросить пароль grub на своем ноутбуке через работающий USB, поэтому мне также пришлось использовать chroot.

Целевой системой была Ubuntu 16.04, и я работал на USB-накопителе Elementary Live. Эти команды помогли мне настроить chroot:

      mount /dev/nvme0n1p1 /mnt
mount -t proc proc /mnt/proc
mount -t sysfs /sys /mnt/sys
mount --bind /dev /mnt/dev
mount --bind /dev/pts /mnt/dev/pts

Отсюда я смог войти в chroot иupdate-grub /dev/nvme0n1чтобы исправить пароль.

Прежде чем добавить последние два--bindкрепления,update-grubвыдавало много ошибок о том, что не найдены устройства, но подхватывал разделы Linux, пропуская последний раздел Windows. Я думаю, что часть Windows — это просто особенность моей системы.

Запомниumount /mnt/dev/pts, затемumount /mnt/devи остальное перед размонтированием/mnt.

Для большего контекста может помочь этот совет по chroot .

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

cd /

for i in proc sys dev; do mount -o bind $i /folder/$i; done
Другие вопросы по тегам