Монтировать 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