Eu criei um ambiente chroot baseado no Debian usando o debootstrap
Arch Linux e preenchi-o com uma vida como esta:
#!/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"
O problema é que, depois de executar o script acima, não consigo mais abrir novos terminais no sistema host:
urxvt: can't initialize pseudo-tty, aborting.
Desligar o chroot
(parando sshd
, desmontando proc e dev / pts) não traz de volta novos terminais no host.
O que estou perdendo aqui?
ls -l /dev/pts
antes e depois. Facada no escuro: émount --bind /dev/pts $CHROOT/dev/pts
melhor? Você provavelmente economizará muito esforço usando o schroot em vez de criar o seu próprio.mount --bind
fez o truque, obrigado! ;) As saídas dels -l /dev/pts
não diferiram.Respostas:
Quando você executa
mount -t devpts devpts $CHROOT/dev/pts
, isso monta uma instância separada do sistema de arquivos devpts no chroot. Uma maneira alternativa de disponibilizar os devpts no chroot é usar uma montagem de ligação, que disponibiliza a mesma instância do sistema de arquivos em um novo local. Montagens de ligação são como criar um link físico, apenas para pontos de montagem em vez de arquivos.Instâncias separadas de devpts compartilham os mesmos arquivos (se você criar ou remover um terminal ou alterar seus metadados, isso será refletido em todas as instâncias). No entanto, há evidentemente alguma diferença sob o capô, o que o faz não funcionar. Uma montagem de ligação garante que tudo o que precisa ser sincronizado seja sincronizado, pois é o mesmo sistema de arquivos e não apenas o mesmo.
fonte