mount dev, proc, sys у chroot середовищі?


87

Я намагаюся створити образ Linux за допомогою спеціальних вибраних пакетів.
Те, що я намагаюся зробити, - це скласти пакунки, які я буду використовувати на ноутбуці XO, тому що компіляція пакунків займає дуже багато часу на реальному апаратному пристрої XO, якщо я можу створити всі необхідні мені пакунки та просто прошивати зображення в XO, я можу заощадити час і простір.

Коли я спробував встановити деякі пакети, його не вдалося налаштувати через відсутність каталогів proc, sys, dev. Отже, я дізнався з інших місць, що мені потрібно «змонтувати» хост-прок, ... каталоги в моєму середовищі chroot.

Я побачив два синтаксиси і не впевнений, який з них використовувати.

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

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

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

  mount -t proc none /proc

Який я повинен використовувати, і в чому різниця?


Остерігайтеся: надання доступу до дискових пристроїв означає, що ви втрачаєте частину переваг ' chroot()'. Зокрема, визначені можуть читати файли за межами їх розділу файлової системи, якщо ви не будете обережні.
Джонатан Леффлер

2
@ Джонатан Леффлер: це не виглядає проблемою для того, що він робить.
Зіфре

@JonathanLeffler кореневий користувач у chroot завжди може уникнути chroot.
LtWorf

Відповіді:


43

Бо /procі /sys, я думаю, ви могли використовувати будь-який метод. Обидві вони є спеціальними файловими системами, тому їх можна відтворити будь-яку кількість разів (метод методу прив'язки використовує точно такий же спосіб монтажу, що і хост-система, тоді як інший метод використовує нове кріплення). Я завжди бачив, як кріплення для базування рекомендується в посібниках, тому я б використовував це. Наскільки мені відомо, реальної важливої ​​різниці немає.

Однак, /devяк правило, є tmpfs-монтом, яким керується udev, тому він повинен бути фактично тією ж файловою системою, що і на хост-машині. Це означає, що вам потрібно буде використовувати метод кріплення прив’язки.

Якщо цей chroot буде деякий час, ви можете розмістити ці записи в /etc/fstabхост-системі для спрощення речей.


Я хотів би запитати, чи є сенс копіювати (прив’язувати) Proc / Sys з хоста на якусь іншу машину? Чому вони повинні відповідати цій машині?
ransh

@ransh це має сенс, якщо ви прив’яжете / proc до $ chrootdir / proc, у вас буде можливість обробляти процес і що відбувається всередині / proc обох систем з обох систем; наприклад: з chroot ви можете перевірити, чи працює програма на хості ... тощо
Jonah

Можливо, sys typeздається, що файлова система ( сьогодні ) вже не існує?
174140,

111

Arch Linux вікі пропонує наступні команди:

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

2
Вони, здавалося, працювали на мене в ubuntu.
isaaclw

4
У моєму випадку (також Ubuntu) мені також знадобилося "mount -o bind / dev / pts dev / pts".
Томас

Будь ласка, включіть посилання на джерело.
стиропор летить

@styrofoamfly Додано.
gacrux

1
Станом на 2019 рік, вікі ArchLinux тепер --rbindдля sysта dev.
Саад Малик

12

Gentoo Handbook спеціально називає ці дві команди для повторного монтажу / користь і / розробника. Я використовував їх кілька разів.

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

Я підозрюю, що система / sys - це лише звичайна папка, тому ви повинні мати можливість зробити міцне посилання.

ln /sys /mnt/chroot/sys

17
Ви не можете жорстко посилатись на каталог (як правило), як ви пропонуєте для / sys, і якщо ви будете використовувати симпосилання, воно порушиться, як тільки ви перейдете на хронологію.

Вони додали нові, засновані на systemd. Можливо, це гарна ідея додати їх.
AzP

1

У цьому популярному питанні, можливо, варто відзначити, що 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

мов чарівність. Баш сценарій arch-chrootпіклується /dev /sys /procі про багато іншого, які залишаються самі по стандарту chroot.

див. також: Використання arch-chroot


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

Оновлення: відповідно до цього потоку списку розсилки / / sys не слід прив'язувати, особливо якщо хроновані процеси використовують власний простір мережевих імен.

Неможливо встановити систему /varабо /runна chroot, якщо chroot має власний простір імен pid.


Спекуляція? На суперпользователях (та інших форумах стеків), як правило, краще відмовитися або дослідити і відповісти з пов’язаними джерелами, якщо ви не впевнені. Це уникає ризику поширювати помилкові підказки. Вибачте, якщо розчаруєте і удачі!
Саймон Б.

@SimonB. Я додав посилання до списку розсилки, що підтримує ідею, що / sys не слід встановлювати прив'язку.
Брайан Мінтон

З простором імен pid ви говорите про більш просунуті функції простору імен користувачів, які ми можемо знайти на сучасних ядрах Linux (тобто, на основі яких базуються функції "контейнери"), тоді як, використовуючи термін chroot, ми посилаємось на традиційну зміну простору імен файлів ( і більше нічого).
Йохан Буле

-1

Найпростіший спосіб - це використання циклу:

cd /

for i in proc sys dev; do mount -o bind $i /folder/$i; done
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.