From 107f6fe0981be5dd2e0eb7c3c01025324028333e Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Tue, 19 Feb 2019 07:46:07 +0100 Subject: [PATCH] start /perm/sh if it exists upon any byte on the serial console This allows debugging when the network is down. --- gokrazy.go | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/gokrazy.go b/gokrazy.go index 6170203..8231a80 100644 --- a/gokrazy.go +++ b/gokrazy.go @@ -8,7 +8,6 @@ package gokrazy import ( - "bufio" "fmt" "io/ioutil" "log" @@ -182,14 +181,26 @@ func Supervise(commands []*exec.Cmd) error { }() go func() { - scanner := bufio.NewScanner(os.Stdin) - for scanner.Scan() { - if err := updateListeners("80"); err != nil { - log.Printf("updating listeners: %v", err) + buf := make([]byte, 1) + for { + if _, err := os.Stdin.Read(buf); err != nil { + log.Printf("read(stdin): %v", err) + break + } + + if _, err := os.Stat("/perm/sh"); err == nil { + sh := exec.Command("/perm/sh") + sh.Stdin = os.Stdin + sh.Stdout = os.Stdout + sh.Stderr = os.Stderr + if err := sh.Run(); err != nil { + log.Printf("sh: %v", err) + } + } else { + if err := updateListeners("80"); err != nil { + log.Printf("updating listeners: %v", err) + } } - } - if err := scanner.Err(); err != nil { - log.Print(err) } }()