64 lines
2.1 KiB
Diff
64 lines
2.1 KiB
Diff
From 3067c7503547e7c1f2499a69b1713051515743e0 Mon Sep 17 00:00:00 2001
|
|
From: Kir Kolyshkin <kolyshkin@gmail.com>
|
|
Date: Wed, 9 Aug 2023 12:04:26 +0900
|
|
Subject: [PATCH] libct/init: unify init, fix its error logic
|
|
|
|
Fix init error handling logic.
|
|
|
|
The main issues at hand are:
|
|
- the "unable to convert _LIBCONTAINER_INITPIPE" error from
|
|
StartInitialization is never shown;
|
|
- errors from WriteSync and WriteJSON are never shown;
|
|
|
|
Generally, our goals are:
|
|
- if there's any error, do our best to show it;
|
|
- but only show each error once;
|
|
|
|
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
|
|
---
|
|
init.go | 6 ++----
|
|
libcontainer/factory_linux.go | 5 +++--
|
|
2 files changed, 5 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/init.go b/init.go
|
|
index a0520b5..5951afe 100644
|
|
--- a/init.go
|
|
+++ b/init.go
|
|
@@ -36,10 +36,8 @@ func init() {
|
|
factory, _ := libcontainer.New("")
|
|
if err := factory.StartInitialization(); err != nil {
|
|
fmt.Fprintf(os.Stderr, "libcontainer: container start initialization failed: %s", err)
|
|
- // as the error is sent back to the parent there is no need to log
|
|
- // or write it to stderr because the parent process will handle this
|
|
- os.Exit(1)
|
|
}
|
|
- panic("libcontainer: container init failed to exec")
|
|
+ fmt.Fprint(os.Stderr, "libcontainer: container init failed to exec")
|
|
+ os.Exit(1)
|
|
}
|
|
}
|
|
diff --git a/libcontainer/factory_linux.go b/libcontainer/factory_linux.go
|
|
index a1fa7de..86a127c 100644
|
|
--- a/libcontainer/factory_linux.go
|
|
+++ b/libcontainer/factory_linux.go
|
|
@@ -296,13 +296,14 @@ func (l *LinuxFactory) StartInitialization() (err error) {
|
|
// We have an error during the initialization of the container's init,
|
|
// send it back to the parent process in the form of an initError.
|
|
if werr := writeSync(pipe, procError); werr != nil {
|
|
- fmt.Fprintln(os.Stderr, err)
|
|
+ fmt.Fprintln(os.Stderr, werr)
|
|
return
|
|
}
|
|
if werr := utils.WriteJSON(pipe, &initError{Message: err.Error()}); werr != nil {
|
|
- fmt.Fprintln(os.Stderr, err)
|
|
+ fmt.Fprintln(os.Stderr, werr)
|
|
return
|
|
}
|
|
+ err = nil
|
|
}()
|
|
|
|
// Only init processes have FIFOFD.
|
|
--
|
|
2.33.0
|
|
|