diff options
| author | Bruce Ashfield <bruce.ashfield@gmail.com> | 2025-01-15 17:54:58 +0000 |
|---|---|---|
| committer | Bruce Ashfield <bruce.ashfield@gmail.com> | 2025-01-17 19:17:09 +0000 |
| commit | ea15fd06143702f3a2366d706656bcbc0812fb16 (patch) | |
| tree | 45f73c17454dafe8006c789b188d62fe2ab6c93d | |
| parent | 79db703e34cc35dfa707596431aa2a1686f2cf3a (diff) | |
| download | meta-virtualization-ea15fd06143702f3a2366d706656bcbc0812fb16.tar.gz | |
runc: drop runc-docker
The changes carried in runc-docker are no longer required, and if
they become relevant again, they don't belong in the base recipe.
This is the first part of the change, we drop runc-docker + patches
and update runc-opencontainers to RPROVIDE runc-docker in case there
are referenced that we don't know about. There shouldn't be any,
since virtual-runc has been the RPROVIDE of choice for some time.
We keep runc-opencontainers for now, since there may be alternate
runc implementations in the future. In about a year, we'll unify
the .inc and .bb if no new implementations have been proposed.
Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
4 files changed, 4 insertions, 179 deletions
diff --git a/recipes-containers/runc/runc-docker/0001-runc-Add-console-socket-dev-null.patch b/recipes-containers/runc/runc-docker/0001-runc-Add-console-socket-dev-null.patch deleted file mode 100644 index cb0ddc37..00000000 --- a/recipes-containers/runc/runc-docker/0001-runc-Add-console-socket-dev-null.patch +++ /dev/null | |||
| @@ -1,32 +0,0 @@ | |||
| 1 | From 3fff2a3505fba1d1ff0074edff15708a77f6cfa9 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Jason Wessel <jason.wessel@windriver.com> | ||
| 3 | Date: Wed, 12 Jul 2017 13:35:03 -0700 | ||
| 4 | Subject: [PATCH] runc: Add --console-socket=/dev/null | ||
| 5 | |||
| 6 | This allows for setting up a detached session where you do not want to | ||
| 7 | set the terminal to false in the config.json. More or less this is a | ||
| 8 | runtime override. | ||
| 9 | |||
| 10 | Upstream-Status: Inappropriate [embedded specific] | ||
| 11 | |||
| 12 | Signed-off-by: Jason Wessel <jason.wessel@windriver.com> | ||
| 13 | --- | ||
| 14 | utils_linux.go | 5 +++++ | ||
| 15 | 1 file changed, 5 insertions(+) | ||
| 16 | |||
| 17 | Index: git/src/import/utils_linux.go | ||
| 18 | =================================================================== | ||
| 19 | --- git.orig/src/import/utils_linux.go | ||
| 20 | +++ git/src/import/utils_linux.go | ||
| 21 | @@ -267,6 +267,11 @@ | ||
| 22 | } | ||
| 23 | |||
| 24 | func (r *runner) run(config *specs.Process) (int, error) { | ||
| 25 | + if (r.consoleSocket == "/dev/null") { | ||
| 26 | + r.detach = false | ||
| 27 | + r.consoleSocket = "" | ||
| 28 | + config.Terminal = false | ||
| 29 | + } | ||
| 30 | var err error | ||
| 31 | defer func() { | ||
| 32 | if err != nil { | ||
diff --git a/recipes-containers/runc/runc-docker/0001-runc-docker-SIGUSR1-daemonize.patch b/recipes-containers/runc/runc-docker/0001-runc-docker-SIGUSR1-daemonize.patch deleted file mode 100644 index d3d1134b..00000000 --- a/recipes-containers/runc/runc-docker/0001-runc-docker-SIGUSR1-daemonize.patch +++ /dev/null | |||
| @@ -1,133 +0,0 @@ | |||
| 1 | From cd7d76a6d1ecb1856f6ed666fb5c30dc105aa94e Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Jason Wessel <jason.wessel@windriver.com> | ||
| 3 | Date: Tue, 5 Dec 2017 18:28:28 -0800 | ||
| 4 | Subject: [PATCH] runc-docker: Allow "run start ..." to daemonize with $SIGUSR1_PARENT_PID | ||
| 5 | |||
| 6 | The runc-docker has all the code in it to properly run a stop hook if | ||
| 7 | you use it in the foreground. It doesn't work in the back ground | ||
| 8 | because there is no way for a golang application to fork a child exit | ||
| 9 | out of the parent process because all the golang threads stay with the | ||
| 10 | parent. | ||
| 11 | |||
| 12 | This patch has three parts that happen ONLY when $SIGUSR1_PARENT_PID | ||
| 13 | is set. | ||
| 14 | |||
| 15 | 1) The code was copied which performs the normal the signal handling | ||
| 16 | block which is used for the foreground operation of runc. | ||
| 17 | |||
| 18 | 2) At the point where runc start would normally exit, it closes | ||
| 19 | stdin/stdout/stderr so it would be possible to daemonize "runc start ...". | ||
| 20 | |||
| 21 | 3) The code to send a SIGUSR1 to the parent process was added. The | ||
| 22 | idea being that a parent process would simply exit at that point | ||
| 23 | because it was blocking until runc performed everything it was | ||
| 24 | required to perform. | ||
| 25 | |||
| 26 | Upstream-Status: Inappropriate [embedded specific] | ||
| 27 | |||
| 28 | Signed-off-by: Jason Wessel <jason.wessel@windriver.com> | ||
| 29 | --- | ||
| 30 | signals.go | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++---- | ||
| 31 | utils_linux.go | 2 +- | ||
| 32 | 2 files changed, 51 insertions(+), 5 deletions(-) | ||
| 33 | |||
| 34 | Index: git/src/import/signals.go | ||
| 35 | =================================================================== | ||
| 36 | --- git.orig/src/import/signals.go | ||
| 37 | +++ git/src/import/signals.go | ||
| 38 | @@ -5,7 +5,9 @@ | ||
| 39 | import ( | ||
| 40 | "os" | ||
| 41 | "os/signal" | ||
| 42 | + "syscall" // only for Signal | ||
| 43 | |||
| 44 | + "strconv" | ||
| 45 | "github.com/opencontainers/runc/libcontainer" | ||
| 46 | "github.com/opencontainers/runc/libcontainer/system" | ||
| 47 | "github.com/opencontainers/runc/libcontainer/utils" | ||
| 48 | @@ -55,9 +57,6 @@ | ||
| 49 | func (h *signalHandler) forward(process *libcontainer.Process, tty *tty, detach bool) (int, error) { | ||
| 50 | // make sure we know the pid of our main process so that we can return | ||
| 51 | // after it dies. | ||
| 52 | - if detach && h.notifySocket == nil { | ||
| 53 | - return 0, nil | ||
| 54 | - } | ||
| 55 | |||
| 56 | pid1, err := process.Pid() | ||
| 57 | if err != nil { | ||
| 58 | @@ -67,12 +66,61 @@ | ||
| 59 | if h.notifySocket != nil { | ||
| 60 | if detach { | ||
| 61 | _ = h.notifySocket.run(pid1) | ||
| 62 | - return 0, nil | ||
| 63 | } | ||
| 64 | _ = h.notifySocket.run(os.Getpid()) | ||
| 65 | go func() { _ = h.notifySocket.run(0) }() | ||
| 66 | } | ||
| 67 | |||
| 68 | + if (detach) { | ||
| 69 | + // This allows the parent process to daemonize this process | ||
| 70 | + // so long as stdin/stderr/stdout are closed | ||
| 71 | + if envVal := os.Getenv("SIGUSR1_PARENT_PID"); envVal != "" { | ||
| 72 | + // Close stdin/stdout/stderr | ||
| 73 | + os.Stdin.Close() | ||
| 74 | + os.Stdout.Close() | ||
| 75 | + os.Stderr.Close() | ||
| 76 | + // Notify parent to detach | ||
| 77 | + i, err := strconv.Atoi(envVal) | ||
| 78 | + if (err != nil) { | ||
| 79 | + return 0, nil | ||
| 80 | + } | ||
| 81 | + unix.Kill(i, unix.SIGUSR1) | ||
| 82 | + // Loop waiting on the child to signal or exit, | ||
| 83 | + // after which all stop hooks will be run | ||
| 84 | + for s := range h.signals { | ||
| 85 | + switch s { | ||
| 86 | + case unix.SIGCHLD: | ||
| 87 | + exits, err := h.reap() | ||
| 88 | + if err != nil { | ||
| 89 | + logrus.Error(err) | ||
| 90 | + } | ||
| 91 | + for _, e := range exits { | ||
| 92 | + logrus.WithFields(logrus.Fields{ | ||
| 93 | + "pid": e.pid, | ||
| 94 | + "status": e.status, | ||
| 95 | + }).Debug("process exited") | ||
| 96 | + if e.pid == pid1 { | ||
| 97 | + // call Wait() on the process even though we already have the exit | ||
| 98 | + // status because we must ensure that any of the go specific process | ||
| 99 | + // fun such as flushing pipes are complete before we return. | ||
| 100 | + process.Wait() | ||
| 101 | + if h.notifySocket != nil { | ||
| 102 | + h.notifySocket.Close() | ||
| 103 | + } | ||
| 104 | + return e.status, nil | ||
| 105 | + } | ||
| 106 | + } | ||
| 107 | + default: | ||
| 108 | + logrus.Debugf("sending signal to process %s", s) | ||
| 109 | + if err := unix.Kill(pid1, s.(syscall.Signal)); err != nil { | ||
| 110 | + logrus.Error(err) | ||
| 111 | + } | ||
| 112 | + } | ||
| 113 | + } | ||
| 114 | + } | ||
| 115 | + return 0, nil | ||
| 116 | + } | ||
| 117 | + | ||
| 118 | // Perform the initial tty resize. Always ignore errors resizing because | ||
| 119 | // stdout might have disappeared (due to races with when SIGHUP is sent). | ||
| 120 | _ = tty.resize() | ||
| 121 | Index: git/src/import/utils_linux.go | ||
| 122 | =================================================================== | ||
| 123 | --- git.orig/src/import/utils_linux.go | ||
| 124 | +++ git/src/import/utils_linux.go | ||
| 125 | @@ -345,7 +345,7 @@ | ||
| 126 | if err != nil { | ||
| 127 | r.terminate(process) | ||
| 128 | } | ||
| 129 | - if detach { | ||
| 130 | + if (detach && os.Getenv("SIGUSR1_PARENT_PID") == "") { | ||
| 131 | return 0, nil | ||
| 132 | } | ||
| 133 | if err == nil { | ||
diff --git a/recipes-containers/runc/runc-docker_git.bb b/recipes-containers/runc/runc-docker_git.bb deleted file mode 100644 index 24c7cb3b..00000000 --- a/recipes-containers/runc/runc-docker_git.bb +++ /dev/null | |||
| @@ -1,14 +0,0 @@ | |||
| 1 | include runc.inc | ||
| 2 | |||
| 3 | # Note: this rev is before the required protocol field, update when all components | ||
| 4 | # have been updated to match. | ||
| 5 | SRCREV_runc-docker = "b7da16731c8b55e0e38070ac1d84a56b15f6db37" | ||
| 6 | SRC_URI = "git://github.com/opencontainers/runc;branch=main;name=runc-docker;protocol=https;destsuffix=${GO_SRCURI_DESTSUFFIX} \ | ||
| 7 | file://0001-runc-Add-console-socket-dev-null.patch \ | ||
| 8 | file://0001-Makefile-respect-GOBUILDFLAGS-for-runc-and-remove-re.patch \ | ||
| 9 | file://0001-runc-docker-SIGUSR1-daemonize.patch \ | ||
| 10 | " | ||
| 11 | |||
| 12 | RUNC_VERSION = "1.2.0-rc.3" | ||
| 13 | |||
| 14 | CVE_PRODUCT = "runc" | ||
diff --git a/recipes-containers/runc/runc-opencontainers_git.bb b/recipes-containers/runc/runc-opencontainers_git.bb index c3ebbd8b..86da5fb4 100644 --- a/recipes-containers/runc/runc-opencontainers_git.bb +++ b/recipes-containers/runc/runc-opencontainers_git.bb | |||
| @@ -7,6 +7,10 @@ SRC_URI = " \ | |||
| 7 | " | 7 | " |
| 8 | RUNC_VERSION = "1.2.0" | 8 | RUNC_VERSION = "1.2.0" |
| 9 | 9 | ||
| 10 | # for compatibility with existing RDEPENDS that have existed since | ||
| 11 | # runc-docker and runc-opencontainers were separate | ||
| 12 | RPROVIDES:${PN} += "runc-docker" | ||
| 13 | |||
| 10 | CVE_PRODUCT = "runc" | 14 | CVE_PRODUCT = "runc" |
| 11 | 15 | ||
| 12 | LDFLAGS += "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', ' -fuse-ld=bfd', '', d)}" | 16 | LDFLAGS += "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', ' -fuse-ld=bfd', '', d)}" |
