mount dev, proc, sys w środowisku chroot?

87

Próbuję utworzyć obraz systemu Linux z niestandardowo wybranymi pakietami.
To, co próbuję zrobić, to ręcznie stworzyć pakiety, których będę używać na laptopie XO, ponieważ kompilacja pakietów zajmuje naprawdę dużo czasu na prawdziwym sprzęcie XO, jeśli mogę zbudować wszystkie potrzebne mi pakiety i po prostu sflashować obraz do XO, mogę zaoszczędzić czas i miejsce.

Kiedy próbowałem zainstalować niektóre pakiety, konfiguracja nie powiodła się z powodu braku katalogów proc, sys, dev. Nauczyłem się więc z innych miejsc, że muszę „zamontować” procesor hosta, ... katalogi do mojego środowiska chroot.

Widziałem dwie składnie i nie jestem pewien, której użyć.

W maszynie hosta:

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

i inna składnia (w środowisku chroot):

  mount -t proc none /proc

Którego powinienem użyć i jakie są różnice?

Patrick
źródło
Uwaga: udzielenie dostępu do urządzeń dyskowych oznacza utratę niektórych korzyści wynikających z „ chroot()”. W szczególności zdeterminowani mogą czytać pliki poza swoją sekcją systemu plików, jeśli nie jesteś ostrożny.
Jonathan Leffler
2
@Jathanathan Leffler: to nie brzmi jak problem z tym, co robi.
Zifre,
@JonathanLeffler użytkownik root w chroocie zawsze może mimo to uciec z chroota.
LtWorf

Odpowiedzi:

43

Dla /proci /sysprzypuszczam, że możesz użyć dowolnej z tych metod. Oba są specjalnymi systemami plików, więc można je odtworzyć dowolną liczbę razy (metoda łączenia bind używa dokładnie tego samego podłączenia co system hosta, podczas gdy druga metoda używa nowego podłączenia). Zawsze widziałem oprawę wiążącą zalecaną w przewodnikach, więc skorzystam z niej. O ile mi wiadomo, nie ma naprawdę istotnej różnicy.

Jednak /devzwykle jest to montowanie tmpfs, którym zarządza udev, więc musi to być ten sam system plików, co na komputerze hosta. Oznacza to, że musisz użyć metody bind mount.

Jeśli ten chroot będzie przez jakiś czas dostępny, możesz umieścić te wpisy w /etc/fstabsystemie hosta, aby uprościć sprawę.

Zifre
źródło
Chciałbym zapytać, czy ma sens kopiowanie (wiązanie) proc / sys z hosta na inną maszynę? Dlaczego mieliby pasować do tej maszyny?
ransh
@ransh ma sens, jeśli powiążesz / proc z $ chrootdir / proc, będziesz mieć możliwość obsługi procesu i tego, co dzieje się wewnątrz / proc obu systemów z obu systemów; np .: z chroot możesz sprawdzić, czy program działa na hoście ... itd.
Jonah
Może sys typesystem plików wydaje się ( dzisiaj ) już nie istnieć?
174140
111

Arch Linux Wiki proponuje następujące polecenia:

cd /mnt/arch # or where you are preparing the chroot dir
mount -t proc proc proc/
mount --rbind /sys sys/
mount --rbind /dev dev/
gacrux
źródło
2
Wydawało się też, że pracują dla mnie w Ubuntu.
isaaclw
4
W moim przypadku (także Ubuntu) potrzebowałem też „mount -o bind / dev / pts dev / pts”.
Thomas
Podaj link do źródła.
lot styropianowy
@styrofoamfly Dodano.
gacrux,
1
Od 2019 r. Wiki ArchLinux działa teraz --rbinddla sysi dev.
Saad Malik
12

Gentoo konkretnie nazywa się te dwa polecenia do ponownego montażu / proc i / dev. Używałem ich kilka razy.

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

Podejrzewam, że / sys to zwykły folder, więc powinieneś mieć możliwość utworzenia twardego linku.

ln /sys /mnt/chroot/sys
Robert
źródło
17
Nie możesz na stałe podlinkować katalogu (zwykle) tak jak sugerujesz dla / sys, a jeśli użyjesz dowiązania symbolicznego, pęknie on zaraz po chroot.
Dodali kilka nowych, opartych na systemd. Być może dobrym pomysłem jest ich dodanie.
AzP
1

Warto zauważyć, że w tym popularnym pytaniu Arch Linux stworzył skrypt arch-chroot ; Ściągnijarch-install-scripts-15-1-any.pkg.tar.xz

Zajmuje się różnymi pokrewnymi problemami zarówno w Arch-Linux, jak i Manjaro , gdzie również z powodzeniem go wykorzystałem. Możliwe, że więcej Arch- pochodnych, takich jak Parabola, jest również kompatybilnych.

Podczas gdy zwykły standard chrootw dodatkowej instalacji Manjaro nie pozwala na uruchomienie

pacman --sync linux

(srebrna kula po awarii systemu), zastępując linię

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

pozwoli ci naprawić twoją dodatkową instalację Arch-pochodną poprzez

pacman --sync linux

jak urok. Skrypt bash arch-chrootzajmuje się /dev /sys /proci wiele więcej, które są pozostawione same sobie przez standard chroot.

patrz także: Korzystanie z arch-chroot

ten facet
źródło
-1

Istnieją inne pseudo systemy plików i lokalizacje tmpfs. To jest na Debianie:

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

Powinno być w porządku do zamontowania usbfs, rpc_pipefsa devptspseudo-systemy plików od wewnątrz chroot. Polecam nie wiązanie /procz chroot /proc, ponieważ jądro ma koncepcję przestrzeni nazw i może w rzeczywistości umieszczać różne rzeczy w procerze chroot.

Aktualizacja: zgodnie z tym wątkiem listy mailingowej , / sys nie powinien być montowany w trybie wiązania, szczególnie jeśli procesy chrootowane korzystają z własnej sieciowej przestrzeni nazw.

To zły pomysł, aby zamontować system /varlub /runna chroot, jeśli chroot ma własną przestrzeń nazw pid.

Brian Minton
źródło
Spekulacja? Na superużytkowniku (i innych forach dyskusyjnych) zwykle lepiej jest się powstrzymać lub poszukać informacji i odpowiedzi z połączonymi źródłami, jeśli nie jesteś pewien. Ma to na celu uniknięcie ryzyka rozpowszechniania błędnych wskazówek. Przepraszam za rozczarowanie i powodzenia!
Simon B.
@SimonB. Dodałem link do listy mailingowej popierającej ideę, że / sys nie powinien być montowany do binda.
Brian Minton
W przestrzeni nazw pid mówisz o bardziej zaawansowanych funkcjach przestrzeni nazw użytkownika, które możemy znaleźć w nowoczesnych jądrach systemu Linux (tj. Funkcjach, na których oparte są „kontenery”), a gdy używamy terminu chroot, odnosimy się do tradycyjnej zmiany przestrzeni nazw plików ( i nic więcej).
Johan Boulé,
-1

Najłatwiejszym sposobem jest użycie pętli for:

cd /

for i in proc sys dev; do mount -o bind $i /folder/$i; done
oleberlin
źródło