From f62fbae0cc439744aa70d4c0017e1012a83c74cb Mon Sep 17 00:00:00 2001 From: Stefan Majer Date: Tue, 2 Apr 2024 16:29:34 +0200 Subject: [PATCH] Nicer etcd ismounted handling --- go.mod | 1 + go.sum | 2 ++ main.go | 26 +++++++++++++++++--------- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 18af35f..17cb5d8 100644 --- a/go.mod +++ b/go.mod @@ -17,6 +17,7 @@ require ( github.com/metal-stack/v v1.0.3 // archiver must stay in version v2.1.0, see replace below github.com/mholt/archiver v3.1.1+incompatible + github.com/moby/sys/mountinfo v0.7.1 github.com/pierrec/lz4/v4 v4.1.21 github.com/prometheus/common v0.51.1 github.com/samber/slog-loki/v3 v3.2.2 diff --git a/go.sum b/go.sum index dccafb4..e721ce6 100644 --- a/go.sum +++ b/go.sum @@ -957,6 +957,8 @@ github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0Gq github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= +github.com/moby/sys/mountinfo v0.7.1 h1:/tTvQaSJRr2FshkhXiIpux6fQ2Zvc4j7tAhMTStAG2g= +github.com/moby/sys/mountinfo v0.7.1/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI= github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg= github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs= diff --git a/main.go b/main.go index 6c36f8e..3a76aa2 100644 --- a/main.go +++ b/main.go @@ -15,31 +15,39 @@ import ( "github.com/metal-stack/metal-hammer/cmd/event" "github.com/metal-stack/metal-hammer/cmd/network" "github.com/metal-stack/metal-hammer/pkg/kernel" + "github.com/moby/sys/mountinfo" ) func main() { + jsonHandler := slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{ + Level: slog.LevelDebug, + }) + log := slog.New(jsonHandler) + fmt.Print(cmd.HammerBanner) if len(os.Args) > 1 { panic("cmd args are not supported") } - err := syscall.Unmount("/etc", syscall.MNT_FORCE) + mounted, err := mountinfo.Mounted("/etc") if err != nil { - fmt.Printf("unable to umount /etc, which is overmounted with tmpfs %s", err) - // os.Exit(1) // FIXME enable again + log.Error("unable to check if /etc is a mountpoint", "error", err) + os.Exit(1) + } + if mounted { + err := syscall.Unmount("/etc", syscall.MNT_FORCE) + if err != nil { + log.Error("unable to umount /etc, which is overmounted with tmpfs", "error", err) + os.Exit(1) + } } err = updateResolvConf() if err != nil { - fmt.Printf("error updating resolv.conf %s", err) + log.Error("error updating resolv.conf", "error", err) os.Exit(1) } - jsonHandler := slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{ - Level: slog.LevelDebug, - }) - log := slog.New(jsonHandler) - // Reboot if metal-hammer crashes after 60sec. go kernel.Watchdog(log)