He creado un entorno chroot basado en Debian usando debootstrap
Arch Linux, y lo lleno de vida así:
#!/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"
El problema es que después de ejecutar el script anterior, ya no puedo abrir nuevas terminales en el sistema host:
urxvt: can't initialize pseudo-tty, aborting.
Apagar chroot
(detener sshd
, desmontar proc y dev / pts) no devuelve nuevos terminales en el host.
¿Que me estoy perdiendo aqui?
ls -l /dev/pts
antes y después. Puñalada en la oscuridad: ¿haymount --bind /dev/pts $CHROOT/dev/pts
algo mejor? Probablemente ahorrará mucho esfuerzo al usar schroot en lugar de construir el suyo propio.mount --bind
hizo el truco, gracias! ;) Los resultados dels -l /dev/pts
no fueron diferentes.Respuestas:
Cuando ejecuta
mount -t devpts devpts $CHROOT/dev/pts
, esto monta una instancia separada del sistema de archivos devpts en el chroot. Una forma alternativa de hacer que los devpts estén disponibles en el chroot es usar un montaje de enlace, que hace que la misma instancia del sistema de archivos esté disponible en una nueva ubicación. Los montajes de enlace son como hacer un enlace duro, solo para puntos de montaje en lugar de archivos.Las instancias separadas de devpts comparten los mismos archivos (si crea o elimina un terminal o cambia sus metadatos, se refleja en todas las instancias). Sin embargo, hay evidentemente alguna diferencia debajo del capó que hace que no funcione. Un montaje de enlace asegura que todo lo que necesita ser sincronizado esté sincronizado ya que es el mismo sistema de archivos y no simplemente uno idéntico.
fuente