Welches von proc, sys usw. sollte beim Chrooten in eine "Ersatz" -Distribution gebunden werden (oder nicht)?

9

Diese Antwort auf eine andere Frage läuft im Wesentlichen darauf hinaus, chrootin eine andere Linux-Distribution zu wechseln, um diese hauptsächlich als Ersatz für ihre zu eingeschränkte (aber unersetzbare) Mutter zu verwenden. Die vorgeschlagenen Aktionen vor dem Ausführen chroot, die ich besser verstehen möchte, sind:

cp /etc/resolv.conf etc/resolv.conf
cp -a /lib/modules/$(uname -r) lib/modules
mount -t proc archproc proc
mount -t sysfs archsys sys
mount -o bind /dev dev
mount -t devpts archdevpts dev/pts
  • Das Kopieren resolv.confist klar (Netzwerk- / Internetzugang), obwohl ich mir nicht sicher bin, ob modulesdies tatsächlich notwendig war, als ich chrootin ein Stage3-Gentoo-System einstieg, oder?
  • Aber warum sind proc, sysund dev/ptsstatt mit remounted bind-montiert? Was ist der tatsächliche Unterschied in dieser Situation, die "korrekter" ist?
  • Dieses HowTo- Binden wird procund dev, aber weder dev/ptsnoch sysüberhaupt montiert. Zusätzlich wird es /etc/{hosts,fstab}in das neue Stammverzeichnis kopiert . Ist das sinnvoll? Sollte ich /etc/mdadm.confdann nicht auch einschließen ?
Tobias Kienzler
quelle
1
Es sollte größtenteils identisch sein; Betrachten Sie reguläre Dateisysteme: Sie dürfen nicht zweimal gemountet werden (es sei denn, sie sind clusterfähig), aber der Kernel tut genau das. es wird also im Wesentlichen sowieso intern wie ein Bind-Mount behandelt.
Frostschutz

Antworten:

9

/etc/resolv.conf wird kopiert, um die DNSs nicht zu verlieren.

/ lib / modules wird kopiert, da möglicherweise eine Hardwarekomponente verwendet werden muss, die zum Zeitpunkt der Einrichtung der Chroot nicht vorhanden sein muss. Sie müssen sich daran erinnern, dass die ursprüngliche Frage, auf die Sie sich in Ihrem OP beziehen, den Ersatz eines NAS-Betriebssystems durch Arch Linux betrifft. Sie benötigen daher Treiber für Ethernet, möglicherweise drahtlos, verschiedene USB-Komponenten usw. Durch das Kopieren des Ordners / lib / modules wird sichergestellt, dass die neue Umgebung ihre zukünftigen Aufgaben bewältigen kann.

Sie haben in der Tat Recht, wenn es um das erneute Mounten oder das Binden geht. Die Arch Linux Wiki-Seite auf chroot verwendet das erneute Mounten und Binden, wie Sie es angegeben haben, gemäß der Antwort auf den Beitrag, auf den Sie verweisen:

cd /mnt/arch
mount -t proc proc proc/
mount -t sysfs sys sys/
mount -o bind /dev dev/
mount -t devpts pts dev/pts/

(Ich denke, dies zeigt, dass die Syntax Ihrer Zeilen, die aus diesem Beitrag kopiert wurde , falsch ist: Der zu mountende Entwickler steht vor dem Einhängepunkt).

Die Ubuntu-Manpage zu chroot erzählt jedoch eine andere Geschichte:

sudo mount -o bind /proc /var/chroot/proc

Hier wird / proc gebunden und nicht erneut gemountet.

Ich habe tatsächlich beide Dinge ausprobiert und nach einem kurzen Testlauf konnte ich keinen Unterschied feststellen. Zugegeben, kein großer Test, und ich werde hier meinen Fall ruhen lassen, dass es keinen großen Unterschied machen sollte.

MariusMatutiae
quelle
6
  • /etc/resolv.conf- Sie benötigen diese Datei zum Auflösen von DNS-Anfragen. Es ist unter bestimmten Umständen nicht notwendig:

    1. Ein DHCP-Client ist in der Chroot verfügbar, wird ausgeführt und der DHCP-Server gibt die entsprechenden Informationen zurück (was normalerweise der Fall ist).

    2. Sie sind nicht daran interessiert, Netzwerke /etc/resolv.confinnerhalb der Chroot zu vernetzen (oder genauer gesagt DNS-Abfragen von üblichen Anwendungen durchzuführen, auf die Sie sich verlassen ).

  • /lib/modules/$(uname -r)- ist sinnvoll, wenn Sie zusätzliche Module für den aktiven Kernel laden müssen. Ohne dies würden Sie mit allem, was Sie gerade laufen, stecken bleiben. Wenn Sie das Chrooted-System also länger ausführen möchten, sollten Sie dies wahrscheinlich tun. Auf der anderen Seite sollten Sie in einem solchen Fall wahrscheinlich pivot_rootstattdessen verwenden (was normalerweise initrd am Ende seines Lebens tut). Wenn Sie dies nur tun müssen, z. B. um den Bootloader von der Chroot zu installieren, sollte dies nicht erforderlich sein (da alle erforderlichen Treiber geladen werden müssen, damit Sie die Chroot selbst ausführen können).

  • /procund /devsind ziemlich offensichtlich - diese enthalten grundlegende Systemschnittstellen.

  • /syswar IIRC im Jahr 2007 nicht so weit verbreitet, was die Slackware (die selbst eher konservativ ist) How-to datiert. Heutzutage fällt Ihr System wahrscheinlich ohne aus (zum Beispiel, wenn etwas versucht, eine Art von Hardware aufzulisten).

  • /dev/pts- Im Laufe der Jahre gab es einige Änderungen im Umgang mit /devBäumen. Irgendwann wurden die Geräte /dev/ptsvon behandelt devfs- siehe z. B. diesen LKML-Thread zur Diskussion möglicher Probleme.

  • Bindungsmontage - Es gibt einige interessante Aspekte der Bindungsmontage (ziemlich gut erklärt in der mount(8)Manpage). Zum Beispiel, wenn Sie haben:

    /some/device on /x/a (rw)
    /x/a/A on /x/b (rw)
    

    Wenn /x/aSie dann schreibgeschützt erneut einhängen , können Sie nichts mehr ändern /x/B. Das ist verständlich, könnte Sie aber zum ersten Mal überraschen. Eine weitere gute Frage ist, was /x/bim obigen Beispiel passieren soll, wenn Sie umount /x/a. Für mich ist es alles andere als offensichtlich, dass Sie immer noch auf den Baum darunter zugreifen können. Daher kann die Bindungsmontage schwierig sein. Funktionell ist es bei Verwendung im gesamten Dateisystem dasselbe.

  • andere Dinge von /etc/- es ist definitiv sinnvoll, relevante Konfigurationen zu kopieren, die von Nutzen sind. Kopieren zB /etc/passwd, /etc/shadow, /etc/groups kann Sinn machen, sowie Server - Schlüssel für sshd.

Peterph
quelle
Beide Antworten sind ungefähr gleich gut - also warf ich eine Münze, die ich annehmen sollte ...
Tobias Kienzler
0

/procverwaltet Prozesse und sysändert Kernelparameter oder greift auf Informationen des aktuellen Kernels zu.

Unter Berücksichtigung der Tatsache , dass das Binden eine bidirektionale Natur impliziert, procdarf es nicht als beste Lösung außerhalb der Chroot montiert werden.

syskönnte sein, aber es hängt vom aktuell laufenden Kernel-Host ab und muss derselbe sein dev, der als bind gemountet ist.

/dev/ptssind bereits verfügbar, da sie /devgebunden sind, aber Teil der Chroot sind. Daher ptswird empfohlen, die neuen erneut zu montieren mount -t devpts none /mnt/drive/dev/pts.

PICCORO Lenz McKAY
quelle