J'ai créé un environnement chroot basé sur Debian en utilisant debootstrap
sous Arch Linux, et je l'ai rempli de vie comme ceci:
#!/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"
Le problème est qu'après avoir exécuté le script ci-dessus, je ne peux plus ouvrir de nouveaux terminaux sur le système hôte:
urxvt: can't initialize pseudo-tty, aborting.
L' chroot
arrêt de (arrêt sshd
, démontage proc et dev / pts) ne ramène pas de nouveaux terminaux sur l'hôte.
Qu'est-ce que j'oublie ici?
ls -l /dev/pts
avant et après. Poignarder dans le noir: est-mount --bind /dev/pts $CHROOT/dev/pts
ce mieux? Vous économiserez probablement beaucoup d'efforts en utilisant schroot au lieu de construire le vôtre.mount --bind
a fait l'affaire, merci! ;) Les sorties dels -l /dev/pts
ne diffèrent pas.Réponses:
Lorsque vous exécutez
mount -t devpts devpts $CHROOT/dev/pts
, cela monte une instance distincte du système de fichiers devpts dans le chroot. Une autre façon de rendre les devpts disponibles dans le chroot est d'utiliser un montage de liaison, qui rend la même instance du système de fichiers disponible à un nouvel emplacement. Les montages de liaison sont comme faire un lien dur, uniquement pour les points de montage au lieu des fichiers.Des instances distinctes de devpts partagent les mêmes fichiers (si vous créez ou supprimez un terminal ou modifiez ses métadonnées, cela se reflète dans toutes les instances). Cependant, il y a évidemment une différence sous le capot qui fait que cela ne fonctionne pas. Un montage de liaison garantit que tout ce qui doit être synchronisé est synchronisé car il s'agit du même système de fichiers et non simplement d'un système identique.
la source