[Buildroot] [PATCH v4 2/3] docker-containerd: new package
Christian Stewart
christian at paral.in
Fri May 27 04:52:56 UTC 2016
docker-containerd is a daemon and API for controlling and managing runC
containers.
https://containerd.tools/
Signed-off-by: Christian Stewart <christian at paral.in>
---
Changes since v3:
- Don't depend on runc at compile-time
- Add threading dependency
- Use HOST_GO_TARGET_ENV, partially
- Cleanup compile commands
- Include patch to fix arm64 compilation
---
Signed-off-by: Christian Stewart <christian at paral.in>
---
package/Config.in | 1 +
package/docker-containerd/0001-arm64-fixes.patch | 184 +++++++++++++++++++++++
package/docker-containerd/Config.in | 12 ++
package/docker-containerd/docker-containerd.hash | 2 +
package/docker-containerd/docker-containerd.mk | 45 ++++++
5 files changed, 244 insertions(+)
create mode 100644 package/docker-containerd/0001-arm64-fixes.patch
create mode 100644 package/docker-containerd/Config.in
create mode 100644 package/docker-containerd/docker-containerd.hash
create mode 100644 package/docker-containerd/docker-containerd.mk
diff --git a/package/Config.in b/package/Config.in
index 6c513ba..c8365f8 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -1631,6 +1631,7 @@ if BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
source "package/dcron/Config.in"
source "package/debianutils/Config.in"
endif
+ source "package/docker-containerd/Config.in"
source "package/cgroupfs-mount/Config.in"
source "package/dsp-tools/Config.in"
source "package/emlog/Config.in"
diff --git a/package/docker-containerd/0001-arm64-fixes.patch b/package/docker-containerd/0001-arm64-fixes.patch
new file mode 100644
index 0000000..488822a
--- /dev/null
+++ b/package/docker-containerd/0001-arm64-fixes.patch
@@ -0,0 +1,184 @@
+From f6f54370d154b0ce5f35319d878048d7db8db89c Mon Sep 17 00:00:00 2001
+From: Lei Jitang <leijitang at huawei.com>
+Date: Tue, 5 Apr 2016 23:17:30 -0400
+Subject: [PATCH] arm64 fixes
+
+This commit is a combination of a few cherry-picked commits from the
+current master (0.3.0 candidate) of docker-containerd, which
+specifically address issues under arm64.
+
+move epoll syscall to arch specific to enable containerd run on arm64
+Rename epoll_amd64.go to epoll.go
+Signed-off-by: Lei Jitang <leijitang at huawei.com>
+
+archutils: epoll_aarch64: fix C formatting
+Signed-off-by: Aleksa Sarai <asarai at suse.de>
+
+archutils: fix build on aarch64
+Signed-off-by: Aleksa Sarai <asarai at suse.de>
+
+Use flag for aarch64 EpollCreate1
+Signed-off-by: Qiang Huang <h.huangqiang at huawei.com>
+
+Correct build flag for arm64
+Signed-off-by: Qiang Huang <h.huangqiang at huawei.com>
+---
+ archutils/epoll.go | 19 ++++++++++++
+ archutils/epoll_arm64.go | 70 +++++++++++++++++++++++++++++++++++++++++++++
+ supervisor/monitor_linux.go | 9 +++---
+ 3 files changed, 94 insertions(+), 4 deletions(-)
+ create mode 100644 archutils/epoll.go
+ create mode 100644 archutils/epoll_arm64.go
+
+diff --git a/archutils/epoll.go b/archutils/epoll.go
+new file mode 100644
+index 0000000..c8ade64
+--- /dev/null
++++ b/archutils/epoll.go
+@@ -0,0 +1,19 @@
++// +build linux,!arm64
++
++package archutils
++
++import (
++ "syscall"
++)
++
++func EpollCreate1(flag int) (int, error) {
++ return syscall.EpollCreate1(flag)
++}
++
++func EpollCtl(epfd int, op int, fd int, event *syscall.EpollEvent) error {
++ return syscall.EpollCtl(epfd, op, fd, event)
++}
++
++func EpollWait(epfd int, events []syscall.EpollEvent, msec int) (int, error) {
++ return syscall.EpollWait(epfd, events, msec)
++}
+diff --git a/archutils/epoll_arm64.go b/archutils/epoll_arm64.go
+new file mode 100644
+index 0000000..00abc68
+--- /dev/null
++++ b/archutils/epoll_arm64.go
+@@ -0,0 +1,70 @@
++// +build linux,arm64
++
++package archutils
++
++// #include <sys/epoll.h>
++/*
++int EpollCreate1(int flag) {
++ return epoll_create1(flag);
++}
++
++int EpollCtl(int efd, int op,int sfd, int events, int fd) {
++ struct epoll_event event;
++ event.events = events;
++ event.data.fd = fd;
++
++ return epoll_ctl(efd, op, sfd, &event);
++}
++
++struct event_t {
++ uint32_t events;
++ int fd;
++};
++
++struct epoll_event events[128];
++int run_epoll_wait(int fd, struct event_t *event) {
++ int n, i;
++ n = epoll_wait(fd, events, 128, -1);
++ for (i = 0; i < n; i++) {
++ event[i].events = events[i].events;
++ event[i].fd = events[i].data.fd;
++ }
++ return n;
++}
++*/
++import "C"
++
++import (
++ "fmt"
++ "syscall"
++ "unsafe"
++)
++
++func EpollCreate1(flag int) (int, error) {
++ fd := int(C.EpollCreate1(C.int(flag)))
++ if fd < 0 {
++ return fd, fmt.Errorf("failed to create epoll, errno is %d", fd)
++ }
++ return fd, nil
++}
++
++func EpollCtl(epfd int, op int, fd int, event *syscall.EpollEvent) error {
++ errno := C.EpollCtl(C.int(epfd), C.int(syscall.EPOLL_CTL_ADD), C.int(fd), C.int(event.Events), C.int(event.Fd))
++ if errno < 0 {
++ return fmt.Errorf("Failed to ctl epoll")
++ }
++ return nil
++}
++
++func EpollWait(epfd int, events []syscall.EpollEvent, msec int) (int, error) {
++ var c_events [128]C.struct_event_t
++ n := int(C.run_epoll_wait(C.int(epfd), (*C.struct_event_t)(unsafe.Pointer(&c_events))))
++ if n < 0 {
++ return int(n), fmt.Errorf("Failed to wait epoll")
++ }
++ for i := 0; i < n; i++ {
++ events[i].Fd = int32(c_events[i].fd)
++ events[i].Events = uint32(c_events[i].events)
++ }
++ return int(n), nil
++}
+diff --git a/supervisor/monitor_linux.go b/supervisor/monitor_linux.go
+index adf4ffd..b176585 100644
+--- a/supervisor/monitor_linux.go
++++ b/supervisor/monitor_linux.go
+@@ -5,6 +5,7 @@ import (
+ "syscall"
+
+ "github.com/Sirupsen/logrus"
++ "github.com/docker/containerd/archutils"
+ "github.com/docker/containerd/runtime"
+ )
+
+@@ -14,7 +15,7 @@ func NewMonitor() (*Monitor, error) {
+ exits: make(chan runtime.Process, 1024),
+ ooms: make(chan string, 1024),
+ }
+- fd, err := syscall.EpollCreate1(0)
++ fd, err := archutils.EpollCreate1(0)
+ if err != nil {
+ return nil, err
+ }
+@@ -47,7 +48,7 @@ func (m *Monitor) Monitor(p runtime.Process) error {
+ Fd: int32(fd),
+ Events: syscall.EPOLLHUP,
+ }
+- if err := syscall.EpollCtl(m.epollFd, syscall.EPOLL_CTL_ADD, fd, &event); err != nil {
++ if err := archutils.EpollCtl(m.epollFd, syscall.EPOLL_CTL_ADD, fd, &event); err != nil {
+ return err
+ }
+ EpollFdCounter.Inc(1)
+@@ -67,7 +68,7 @@ func (m *Monitor) MonitorOOM(c runtime.Container) error {
+ Fd: int32(fd),
+ Events: syscall.EPOLLHUP | syscall.EPOLLIN,
+ }
+- if err := syscall.EpollCtl(m.epollFd, syscall.EPOLL_CTL_ADD, fd, &event); err != nil {
++ if err := archutils.EpollCtl(m.epollFd, syscall.EPOLL_CTL_ADD, fd, &event); err != nil {
+ return err
+ }
+ EpollFdCounter.Inc(1)
+@@ -82,7 +83,7 @@ func (m *Monitor) Close() error {
+ func (m *Monitor) start() {
+ var events [128]syscall.EpollEvent
+ for {
+- n, err := syscall.EpollWait(m.epollFd, events[:], -1)
++ n, err := archutils.EpollWait(m.epollFd, events[:], -1)
+ if err != nil {
+ if err == syscall.EINTR {
+ continue
+--
+2.7.3
+
diff --git a/package/docker-containerd/Config.in b/package/docker-containerd/Config.in
new file mode 100644
index 0000000..5919347
--- /dev/null
+++ b/package/docker-containerd/Config.in
@@ -0,0 +1,12 @@
+config BR2_PACKAGE_DOCKER_CONTAINERD
+ bool "docker-containerd"
+ depends on BR2_PACKAGE_HOST_GO_ARCH_SUPPORTS
+ depends on BR2_TOOLCHAIN_HAS_THREADS
+ select BR2_PACKAGE_RUNC
+ help
+ containerd is a daemon to control runC.
+
+ https://github.com/docker/containerd
+
+comment "docker-containerd needs a toolchain w/ threads"
+ depends on !BR2_TOOLCHAIN_HAS_THREADS
diff --git a/package/docker-containerd/docker-containerd.hash b/package/docker-containerd/docker-containerd.hash
new file mode 100644
index 0000000..0221b69
--- /dev/null
+++ b/package/docker-containerd/docker-containerd.hash
@@ -0,0 +1,2 @@
+# Computed locally
+sha256 f9dfeaba17064f279a7dfe89f0ef6763ee45b0a57c03aa423da2af340fba198d docker-containerd-v0.2.1.tar.gz
diff --git a/package/docker-containerd/docker-containerd.mk b/package/docker-containerd/docker-containerd.mk
new file mode 100644
index 0000000..6dd61f7
--- /dev/null
+++ b/package/docker-containerd/docker-containerd.mk
@@ -0,0 +1,45 @@
+################################################################################
+#
+# docker-containerd
+#
+################################################################################
+
+DOCKER_CONTAINERD_VERSION = v0.2.1
+DOCKER_CONTAINERD_VERSION_COMMIT = ca47f7e76a93e9b3768ed084d62318e85bd9f4b2
+DOCKER_CONTAINERD_SITE = $(call github,docker,containerd,$(DOCKER_CONTAINERD_VERSION))
+
+DOCKER_CONTAINERD_LICENSE = Apache-2.0
+DOCKER_CONTAINERD_LICENSE_FILES = LICENSE.code
+
+DOCKER_CONTAINERD_DEPENDENCIES = host-go
+
+DOCKER_CONTAINERD_GOPATH = "$(@D)/vendor"
+DOCKER_CONTAINERD_MAKE_ENV = $(HOST_GO_TARGET_ENV) \
+ CGO_ENABLED=1 \
+ GOBIN="$(@D)/bin" \
+ GOPATH="$(DOCKER_CONTAINERD_GOPATH)"
+
+DOCKER_CONTAINERD_GLDFLAGS = \
+ -X github.com/docker/containerd.GitCommit=$(DOCKER_CONTAINERD_VERSION_COMMIT) \
+ -extldflags '-static'
+
+define DOCKER_CONTAINERD_CONFIGURE_CMDS
+ mkdir -p $(DOCKER_CONTAINERD_GOPATH)/src/github.com/docker
+ ln -s $(@D) $(DOCKER_CONTAINERD_GOPATH)/src/github.com/docker/containerd
+ mkdir -p $(DOCKER_CONTAINERD_GOPATH)/src/github.com/opencontainers
+ ln -s $(RUNC_SRCDIR) $(DOCKER_CONTAINERD_GOPATH)/src/github.com/opencontainers/runc
+endef
+
+define DOCKER_CONTAINERD_BUILD_CMDS
+ cd $(@D); $(DOCKER_CONTAINERD_MAKE_ENV) $(HOST_DIR)/usr/bin/go build -v -o $(@D)/bin/ctr -ldflags "$(DOCKER_CONTAINERD_GLDFLAGS)" ./ctr
+ cd $(@D); $(DOCKER_CONTAINERD_MAKE_ENV) $(HOST_DIR)/usr/bin/go build -v -o $(@D)/bin/containerd -ldflags "$(DOCKER_CONTAINERD_GLDFLAGS)" ./containerd
+ cd $(@D); $(DOCKER_CONTAINERD_MAKE_ENV) $(HOST_DIR)/usr/bin/go build -v -o $(@D)/bin/containerd-shim -ldflags "$(DOCKER_CONTAINERD_GLDFLAGS)" ./containerd-shim
+endef
+
+define DOCKER_CONTAINERD_INSTALL_TARGET_CMDS
+ ln -s $(TARGET_DIR)/usr/bin/runc $(TARGET_DIR)/usr/bin/docker-runc
+ $(INSTALL) -D -m 0755 $(@D)/bin/containerd $(TARGET_DIR)/usr/bin/docker-containerd
+ $(INSTALL) -D -m 0755 $(@D)/bin/containerd-shim $(TARGET_DIR)/usr/bin/containerd-shim
+endef
+
+$(eval $(generic-package))
--
2.7.3
More information about the buildroot
mailing list