From 168aba297866295d96779239e9662821ce9e66ae Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Sat, 4 Feb 2017 18:10:14 +0100 Subject: linux-container: Do not rely on 'isatty?'. This avoids problems where 'isatty?' return #t but 'ttyname' fails with ENOTTY or such. * gnu/build/linux-container.scm (mount-file-systems): Remove call of 'isatty?'. Directly call 'ttyname' and catch 'system-error'. --- gnu/build/linux-container.scm | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'gnu/build') diff --git a/gnu/build/linux-container.scm b/gnu/build/linux-container.scm index b71d6a5f88..cd71239527 100644 --- a/gnu/build/linux-container.scm +++ b/gnu/build/linux-container.scm @@ -128,13 +128,19 @@ (define* (mount* source target type #:optional (flags 0) options "/dev/fuse")) ;; Setup the container's /dev/console by bind mounting the pseudo-terminal - ;; associated with standard input. - (let ((in (current-input-port)) - (console (scope "/dev/console"))) - (when (isatty? in) + ;; associated with standard input when there is one. + (let* ((in (current-input-port)) + (tty (catch 'system-error + (lambda () + ;; This call throws if IN does not correspond to a tty. + ;; This is more reliable than 'isatty?'. + (ttyname in)) + (const #f))) + (console (scope "/dev/console"))) + (when tty (touch console) (chmod console #o600) - (bind-mount (ttyname in) console))) + (bind-mount tty console))) ;; Setup standard input/output/error. (symlink "/proc/self/fd" (scope "/dev/fd")) -- cgit v1.2.3