Debian chroot memblokir PTTY di host

8

Saya telah membuat lingkungan chroot berbasis Debian menggunakan di debootstrapbawah Arch Linux, dan mengisinya dengan kehidupan seperti ini:

#!/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"

Masalahnya adalah setelah menjalankan skrip di atas, saya tidak dapat lagi membuka terminal baru pada sistem host:

urxvt: can't initialize pseudo-tty, aborting.

Mematikan chroot(menghentikan sshd, melepas proc dan dev / pts) tidak membawa kembali terminal baru pada host.

Apa yang kulewatkan di sini?

lynix
sumber
1
Silakan posting output ls -l /dev/ptssebelum dan sesudah. Menusuk dalam gelap: apakah mount --bind /dev/pts $CHROOT/dev/ptsada yang lebih baik? Anda mungkin akan menghemat banyak upaya dengan menggunakan schroot alih-alih membangun sendiri.
Gilles 'SO- stop being evil'
mount --bindlakukan triknya, terima kasih! ;) Output dari ls -l /dev/ptstidak berbeda.
lynix

Jawaban:

4

Ketika Anda menjalankan mount -t devpts devpts $CHROOT/dev/pts, ini me-mount instance terpisah dari sistem file devpts di chroot. Cara alternatif untuk membuat devpts tersedia di chroot adalah dengan menggunakan bind mount, yang membuat instance sistem file yang sama tersedia di lokasi baru. Bind mounts seperti membuat tautan keras, hanya untuk mount point bukan file.

mount --bind /dev/pts "$CHROOT"/dev/pts

Instance terpisah dari devpts berbagi file yang sama (jika Anda membuat atau menghapus terminal atau mengubah metadata-nya, itu tercermin dalam semua instance). Namun ternyata ada beberapa perbedaan di bawah kap yang membuatnya tidak berfungsi. Bind mount memastikan bahwa semua yang perlu disinkronkan disinkronkan karena itu adalah sistem file yang sama dan bukan hanya yang identik.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
1
Saya hanya punya masalah sebaliknya dengan chroot Debian yang berjalan pada OS QTS berbasis Linux QNAP. Saya telah menggunakan bind mount yang menyebabkan layar gagal dan beralih ke mount devpts sebagai gantinya memperbaikinya.
markshep