From a794bb3887959caac98f67a297e274d4d0d9454e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=C3=ABl=20Cluseau?= Date: Thu, 19 Nov 2020 21:22:17 +0100 Subject: [PATCH] fix /boot and fatal --- go.mod | 6 ++++-- go.sum | 12 ++++++++++-- main.go | 31 +++++++++++++++++++++++++++++-- 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 52f754e..0cc4186 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,10 @@ module novit.nc/direktil/initrd require ( - gopkg.in/yaml.v2 v2.2.4 - novit.nc/direktil/pkg v0.0.0-20191009054056-6e432c2a06e6 + golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 // indirect + golang.org/x/term v0.0.0-20201117132131-f5c789dd3221 + gopkg.in/yaml.v2 v2.3.0 + novit.nc/direktil/pkg v0.0.0-20191211161950-96b0448b84c2 ) go 1.13 diff --git a/go.sum b/go.sum index f0b7839..55c3d5e 100644 --- a/go.sum +++ b/go.sum @@ -4,10 +4,18 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221 h1:/ZHdbVpdR/jk3g30/d4yUL0JU9kksj8+F/bnQUVLGDM= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -novit.nc/direktil/pkg v0.0.0-20191009054056-6e432c2a06e6 h1:zJFvtQXH8euAzEvbJRME7EhIy7hyyNRMIVYc9tNc/oo= -novit.nc/direktil/pkg v0.0.0-20191009054056-6e432c2a06e6/go.mod h1:zwTVO6U0tXFEaga73megQIBK7yVIKZJVePaIh/UtdfU= +gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +novit.nc/direktil/pkg v0.0.0-20191211161950-96b0448b84c2 h1:LN3K19gAJ1GamJXkzXAQmjbl8xCV7utqdxTTrM89MMc= +novit.nc/direktil/pkg v0.0.0-20191211161950-96b0448b84c2/go.mod h1:zwTVO6U0tXFEaga73megQIBK7yVIKZJVePaIh/UtdfU= diff --git a/main.go b/main.go index b2b0a4c..985fb64 100644 --- a/main.go +++ b/main.go @@ -13,6 +13,7 @@ import ( "syscall" "time" + "golang.org/x/term" yaml "gopkg.in/yaml.v2" "novit.nc/direktil/pkg/sysfs" ) @@ -182,13 +183,39 @@ func layerPath(name string) string { func fatal(v ...interface{}) { log.Print("*** FATAL ***") log.Print(v...) - select {} + die() } func fatalf(pattern string, v ...interface{}) { log.Print("*** FATAL ***") log.Printf(pattern, v...) - select {} + die() +} + +func die() { + fmt.Println("\nwill reboot in 1 minute; press r to reboot now, o to power off") + + deadline := time.Now().Add(time.Minute) + + term.MakeRaw(int(os.Stdin.Fd())) // disable line buffering + os.Stdin.SetReadDeadline(deadline) + + b := []byte{0} + for { + _, err := os.Stdin.Read(b) + if err != nil { + break + } + + switch b[0] { + case 'o': + syscall.Reboot(syscall.LINUX_REBOOT_CMD_POWER_OFF) + case 'r': + syscall.Reboot(syscall.LINUX_REBOOT_CMD_RESTART) + } + } + + syscall.Reboot(syscall.LINUX_REBOOT_CMD_RESTART) } func losetup(dev, file string) {