Ich habe eine Debian-basierte Chroot-Umgebung debootstrap
unter Arch Linux erstellt und sie mit folgendem Leben gefüllt:
#!/bin/sh
mount -t proc proc $CHROOT/proc
mount -t devpts devpts $CHROOT/dev/pts
chroot $CHROOT /bin/bash --login -c "/etc/init.d/ssh start"
Das Problem ist, dass ich nach dem Ausführen des obigen Skripts keine neuen Terminals mehr auf dem Hostsystem öffnen kann:
urxvt: can't initialize pseudo-tty, aborting.
Durch das Herunterfahren von chroot
(Anhalten sshd
, Aufheben der Bereitstellung von proc und dev / pts) werden keine neuen Terminals auf dem Host wiederhergestellt.
Was fehlt mir hier?
ls -l /dev/pts
vorher und nachher. Im Dunkeln stechen: ist esmount --bind /dev/pts $CHROOT/dev/pts
besser? Sie werden wahrscheinlich viel Aufwand sparen, indem Sie schroot verwenden, anstatt Ihre eigenen zu erstellen .mount --bind
habe den Trick gemacht, danke! ;) Die Ergebnisse von unterschiedenls -l /dev/pts
sich nicht.Antworten:
Wenn Sie ausführen
mount -t devpts devpts $CHROOT/dev/pts
, wird eine separate Instanz des devpts-Dateisystems in der Chroot bereitgestellt. Eine alternative Möglichkeit, Devpts in der Chroot verfügbar zu machen, besteht darin, einen Bind-Mount zu verwenden, der dieselbe Instanz des Dateisystems an einem neuen Speicherort verfügbar macht. Bind-Mounts sind wie das Erstellen einer festen Verknüpfung, nur für Mount-Punkte anstelle von Dateien.Separate Instanzen von devpts verwenden dieselben Dateien (wenn Sie ein Terminal erstellen oder entfernen oder seine Metadaten ändern, wird dies in allen Instanzen wiedergegeben). Es gibt jedoch offensichtlich einen Unterschied unter der Haube, der dazu führt, dass sie nicht funktioniert. Ein Bind-Mount stellt sicher, dass alles, was synchronisiert werden muss, synchronisiert wird, da es sich um dasselbe Dateisystem handelt und nicht nur um ein identisches.
quelle