Я создал среду chroot на основе Debian, используя debootstrap
Arch Linux, и наполнил ее такой жизнью:
#!/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"
Проблема в том, что после выполнения приведенного выше сценария я больше не могу открывать новые терминалы в хост-системе:
urxvt: can't initialize pseudo-tty, aborting.
Завершение работы chroot
(остановка sshd
, размонтирование proc и dev / pts) не возвращает новые терминалы на хосте.
Что мне здесь не хватает?
ls -l /dev/pts
до и после. Ударить в темноте: чтоmount --bind /dev/pts $CHROOT/dev/pts
лучше? Вы, вероятно, сэкономите много усилий, используя schroot вместо того, чтобы создавать свой собственный.mount --bind
сделал свое дело, спасибо! ;) Выходыls -l /dev/pts
не отличались.Ответы:
При запуске
mount -t devpts devpts $CHROOT/dev/pts
это монтирует отдельный экземпляр файловой системы devpts в chroot. Альтернативный способ сделать devpts доступным в chroot - это использовать привязку, которая делает тот же экземпляр файловой системы доступным в новом месте. Связывание монтируется как создание жесткой ссылки, только для точек монтирования вместо файлов.Отдельные экземпляры devpts делят одни и те же файлы (если вы создаете или удаляете терминал или меняете его метаданные, это отражается во всех экземплярах). Однако под капотом явно есть какая-то разница, из-за которой он не работает. Привязка позволяет синхронизировать все, что нужно для синхронизации, поскольку это одна и та же файловая система, а не просто идентичная.
источник