Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- From 88ca55ce5420589044d8cc459737447651069579 Mon Sep 17 00:00:00 2001
- From: Jamie Coldhill <[email protected]>
- Date: Wed, 27 Jul 2016 12:17:08 +0800
- Subject: [PATCH] Add AuFS driver and Docker support to C2
- Ground work done by pckbls here:
- https://github.com/pckbls/LibreELEC.tv.7.0/commits/libreelec-7.0
- ---
- .../addons/addon-depends/containerd/package.mk | 3 +
- .../containerd/patches/containerd-epoll.patch | 149 +++++++++++++++++++++
- packages/addons/addon-depends/runc/package.mk | 3 +
- packages/addons/service/docker/package.mk | 6 +-
- .../service/docker/source/config/docker.conf | 2 +-
- projects/Odroid_C2/linux/linux.aarch64.conf | 38 ++++--
- 6 files changed, 189 insertions(+), 12 deletions(-)
- create mode 100644 packages/addons/addon-depends/containerd/patches/containerd-epoll.patch
- diff --git a/packages/addons/addon-depends/containerd/package.mk b/packages/addons/addon-depends/containerd/package.mk
- index c420f3e..4c29fe4 100644
- --- a/packages/addons/addon-depends/containerd/package.mk
- +++ b/packages/addons/addon-depends/containerd/package.mk
- @@ -49,6 +49,9 @@ pre_make_target() {
- ;;
- esac
- ;;
- + aarch64)
- + export GOARCH=arm64
- + ;;
- esac
- export GOOS=linux
- diff --git a/packages/addons/addon-depends/containerd/patches/containerd-epoll.patch b/packages/addons/addon-depends/containerd/patches/containerd-epoll.patch
- new file mode 100644
- index 0000000..4ecd043
- --- /dev/null
- +++ b/packages/addons/addon-depends/containerd/patches/containerd-epoll.patch
- @@ -0,0 +1,149 @@
- +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
- diff --git a/packages/addons/addon-depends/runc/package.mk b/packages/addons/addon-depends/runc/package.mk
- index 280ad75..73cd07c 100644
- --- a/packages/addons/addon-depends/runc/package.mk
- +++ b/packages/addons/addon-depends/runc/package.mk
- @@ -49,6 +49,9 @@ pre_make_target() {
- ;;
- esac
- ;;
- + aarch64)
- + export GOARCH=arm64
- + ;;
- esac
- export GOOS=linux
- diff --git a/packages/addons/service/docker/package.mk b/packages/addons/service/docker/package.mk
- index f5e5756..b5595f7 100644
- --- a/packages/addons/service/docker/package.mk
- +++ b/packages/addons/service/docker/package.mk
- @@ -20,7 +20,7 @@ PKG_NAME="docker"
- PKG_VERSION="1.11.2"
- PKG_REV="104"
- PKG_ARCH="any"
- -PKG_ADDON_PROJECTS="Generic RPi RPi2"
- +PKG_ADDON_PROJECTS="Generic RPi RPi2 Odroid_C2"
- PKG_LICENSE="ASL"
- PKG_SITE="http://www.docker.com/"
- PKG_URL="https://github.com/docker/docker/archive/v${PKG_VERSION}.tar.gz"
- @@ -40,7 +40,6 @@ configure_target() {
- export DOCKER_BUILDTAGS="daemon \
- autogen \
- exclude_graphdriver_devicemapper \
- - exclude_graphdriver_aufs \
- exclude_graphdriver_btrfs"
- case $TARGET_ARCH in
- @@ -59,6 +58,9 @@ configure_target() {
- ;;
- esac
- ;;
- + aarch64)
- + export GOARCH=arm64
- + ;;
- esac
- export GOOS=linux
- diff --git a/packages/addons/service/docker/source/config/docker.conf b/packages/addons/service/docker/source/config/docker.conf
- index 36908b5..da46d48 100644
- --- a/packages/addons/service/docker/source/config/docker.conf
- +++ b/packages/addons/service/docker/source/config/docker.conf
- @@ -1,2 +1,2 @@
- DOCKER_DAEMON_OPTS="--graph=/storage/.kodi/userdata/addon_data/service.system.docker/docker"
- -DOCKER_STORAGE_OPTS="--storage-driver=overlay"
- +DOCKER_STORAGE_OPTS="--storage-driver=aufs"
- diff --git a/projects/Odroid_C2/linux/linux.aarch64.conf b/projects/Odroid_C2/linux/linux.aarch64.conf
- index fcbb553..ffa3743 100644
- --- a/projects/Odroid_C2/linux/linux.aarch64.conf
- +++ b/projects/Odroid_C2/linux/linux.aarch64.conf
- @@ -104,7 +104,8 @@ CONFIG_CPUSETS=y
- CONFIG_PROC_PID_CPUSET=y
- CONFIG_CGROUP_CPUACCT=y
- CONFIG_RESOURCE_COUNTERS=y
- -# CONFIG_MEMCG is not set
- +CONFIG_MEMCG=y
- +CONFIG_MEMCG_KMEM=y
- CONFIG_CGROUP_PERF=y
- CONFIG_CGROUP_SCHED=y
- CONFIG_FAIR_GROUP_SCHED=y
- @@ -484,7 +485,7 @@ CONFIG_IPV6_NDISC_NODETYPE=y
- CONFIG_NETFILTER=y
- # CONFIG_NETFILTER_DEBUG is not set
- CONFIG_NETFILTER_ADVANCED=y
- -# CONFIG_BRIDGE_NETFILTER is not set
- +CONFIG_BRIDGE_NETFILTER=y
- #
- # Core Netfilter Configuration
- @@ -558,7 +559,7 @@ CONFIG_NETFILTER_XTABLES=m
- #
- # Xtables matches
- #
- -# CONFIG_NETFILTER_XT_MATCH_ADDRTYPE is not set
- +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
- # CONFIG_NETFILTER_XT_MATCH_BPF is not set
- # CONFIG_NETFILTER_XT_MATCH_CGROUP is not set
- # CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
- @@ -567,7 +568,7 @@ CONFIG_NETFILTER_XTABLES=m
- # CONFIG_NETFILTER_XT_MATCH_CONNLABEL is not set
- # CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
- # CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set
- -# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set
- +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
- # CONFIG_NETFILTER_XT_MATCH_CPU is not set
- # CONFIG_NETFILTER_XT_MATCH_DCCP is not set
- # CONFIG_NETFILTER_XT_MATCH_DEVGROUP is not set
- @@ -588,6 +589,7 @@ CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
- # CONFIG_NETFILTER_XT_MATCH_NFACCT is not set
- # CONFIG_NETFILTER_XT_MATCH_OSF is not set
- CONFIG_NETFILTER_XT_MATCH_OWNER=m
- +# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set
- # CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
- # CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
- # CONFIG_NETFILTER_XT_MATCH_QUOTA2 is not set
- @@ -694,7 +696,7 @@ CONFIG_DNS_RESOLVER=y
- CONFIG_RPS=y
- CONFIG_RFS_ACCEL=y
- CONFIG_XPS=y
- -# CONFIG_CGROUP_NET_PRIO is not set
- +CONFIG_CGROUP_NET_PRIO=y
- # CONFIG_CGROUP_NET_CLASSID is not set
- CONFIG_NET_RX_BUSY_POLL=y
- CONFIG_BQL=y
- @@ -1356,14 +1358,15 @@ CONFIG_NET_CORE=y
- # CONFIG_DUMMY is not set
- # CONFIG_EQUALIZER is not set
- # CONFIG_NET_TEAM is not set
- -# CONFIG_MACVLAN is not set
- +CONFIG_MACVLAN=y
- +# CONFIG_MACVTAP is not set
- # CONFIG_VXLAN is not set
- CONFIG_NETCONSOLE=y
- CONFIG_NETPOLL=y
- # CONFIG_NETPOLL_TRAP is not set
- CONFIG_NET_POLL_CONTROLLER=y
- CONFIG_TUN=y
- -# CONFIG_VETH is not set
- +CONFIG_VETH=y
- CONFIG_NLMON=m
- #
- @@ -1659,7 +1662,7 @@ CONFIG_VT_CONSOLE_SLEEP=y
- CONFIG_HW_CONSOLE=y
- CONFIG_VT_HW_CONSOLE_BINDING=y
- CONFIG_UNIX98_PTYS=y
- -# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
- +CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
- CONFIG_LEGACY_PTYS=y
- CONFIG_LEGACY_PTY_COUNT=256
- # CONFIG_SERIAL_NONSTANDARD is not set
- @@ -3411,7 +3414,24 @@ CONFIG_F2FS_FS=y
- CONFIG_F2FS_STAT_FS=y
- # CONFIG_F2FS_FS_XATTR is not set
- # CONFIG_F2FS_CHECK_FS is not set
- -# CONFIG_AUFS_FS is not set
- +CONFIG_AUFS_FS=y
- +CONFIG_AUFS_BRANCH_MAX_127=y
- +# CONFIG_AUFS_BRANCH_MAX_511 is not set
- +# CONFIG_AUFS_BRANCH_MAX_1023 is not set
- +# CONFIG_AUFS_BRANCH_MAX_32767 is not set
- +CONFIG_AUFS_SBILIST=y
- +# CONFIG_AUFS_HNOTIFY is not set
- +# CONFIG_AUFS_HFSNOTIFY is not set
- +# CONFIG_AUFS_EXPORT is not set
- +# CONFIG_AUFS_XATTR is not set
- +CONFIG_AUFS_FHSM=y
- +# CONFIG_AUFS_RDU is not set
- +# CONFIG_AUFS_SHWH is not set
- +# CONFIG_AUFS_BR_RAMFS is not set
- +# CONFIG_AUFS_BR_FUSE is not set
- +# CONFIG_AUFS_BR_HFSPLUS is not set
- +CONFIG_AUFS_BDEV_LOOP=y
- +# CONFIG_AUFS_DEBUG is not set
- CONFIG_NETWORK_FILESYSTEMS=y
- CONFIG_NFS_FS=y
- CONFIG_NFS_V2=y
- --
- 1.9.1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement