From 1e4780f85c1994c762b5d713358a1098733805cc Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Fri, 20 Jan 2017 14:55:23 -0800 Subject: [PATCH 01/10] containerd: fix dependencies --- packages/addons/addon-depends/containerd/package.mk | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/addons/addon-depends/containerd/package.mk b/packages/addons/addon-depends/containerd/package.mk index 704fb5d707..8caf46d757 100644 --- a/packages/addons/addon-depends/containerd/package.mk +++ b/packages/addons/addon-depends/containerd/package.mk @@ -22,7 +22,7 @@ PKG_ARCH="any" PKG_LICENSE="APL" PKG_SITE="https://containerd.tools/" PKG_URL="https://github.com/docker/containerd/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_HOST="toolchain go" +PKG_DEPENDS_TARGET="toolchain go:host" PKG_SECTION="system" PKG_SHORTDESC="containerd is a daemon to control runC" PKG_LONGDESC="containerd is a daemon to control runC, built for performance and density. containerd leverages runC's advanced features such as seccomp and user namespace support as well as checkpoint and restore for cloning and live migration of containers." @@ -74,4 +74,3 @@ make_target() { makeinstall_target() { : } - From 60eb2c36f032e72fddd23bcf9f8dfccd8ce3806f Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Fri, 20 Jan 2017 14:55:23 -0800 Subject: [PATCH 02/10] runc: fix dependencies --- packages/addons/addon-depends/runc/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/addons/addon-depends/runc/package.mk b/packages/addons/addon-depends/runc/package.mk index 7b4a13d10f..fc269e02c4 100644 --- a/packages/addons/addon-depends/runc/package.mk +++ b/packages/addons/addon-depends/runc/package.mk @@ -22,7 +22,7 @@ PKG_ARCH="any" PKG_LICENSE="APL" PKG_SITE="https://github.com/opencontainers/runc" PKG_URL="https://github.com/opencontainers/runc/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_HOST="toolchain go" +PKG_DEPENDS_TARGET="toolchain go:host" PKG_SECTION="system" PKG_SHORTDESC="runc is a CLI tool for spawning and running containers according to the OCI specification" PKG_LONGDESC="runc is a CLI tool for spawning and running containers according to the OCI specification" From e7fbf32818c34cea41109f1c3a5e22e9c63c40f5 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Fri, 20 Jan 2017 14:55:23 -0800 Subject: [PATCH 03/10] runc: add version info --- packages/addons/addon-depends/runc/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/addons/addon-depends/runc/package.mk b/packages/addons/addon-depends/runc/package.mk index fc269e02c4..801ac39231 100644 --- a/packages/addons/addon-depends/runc/package.mk +++ b/packages/addons/addon-depends/runc/package.mk @@ -56,7 +56,7 @@ pre_make_target() { export CGO_ENABLED=1 export CGO_NO_EMULATION=1 export CGO_CFLAGS=$CFLAGS - export LDFLAGS="-w -extldflags -static -X main.gitCommit=${PKG_VERSION} -extld $CC" + export LDFLAGS="-w -extldflags -static -X main.gitCommit=${PKG_VERSION} -X main.version=$(cat ./VERSION) -extld $CC" export GOLANG=$ROOT/$TOOLCHAIN/lib/golang/bin/go export GOPATH=$ROOT/$PKG_BUILD.gopath:$ROOT/$PKG_BUILD/Godeps/_workspace/ export GOROOT=$ROOT/$TOOLCHAIN/lib/golang From 1f4132fe9243d0765e6c35abb01d3646d46a0859 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Fri, 20 Jan 2017 14:55:24 -0800 Subject: [PATCH 04/10] containerd: update to 03e5862 --- packages/addons/addon-depends/containerd/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/addons/addon-depends/containerd/package.mk b/packages/addons/addon-depends/containerd/package.mk index 8caf46d757..4f3ee5b01e 100644 --- a/packages/addons/addon-depends/containerd/package.mk +++ b/packages/addons/addon-depends/containerd/package.mk @@ -17,7 +17,7 @@ ################################################################################ PKG_NAME="containerd" -PKG_VERSION="0366d7e" +PKG_VERSION="03e5862" PKG_ARCH="any" PKG_LICENSE="APL" PKG_SITE="https://containerd.tools/" From 3693ce9ada30c2ab95b16931396cbf9cb04ef825 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Fri, 20 Jan 2017 14:55:24 -0800 Subject: [PATCH 05/10] runc: update to 2f7393a --- packages/addons/addon-depends/runc/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/addons/addon-depends/runc/package.mk b/packages/addons/addon-depends/runc/package.mk index 801ac39231..8096b1abfb 100644 --- a/packages/addons/addon-depends/runc/package.mk +++ b/packages/addons/addon-depends/runc/package.mk @@ -17,7 +17,7 @@ ################################################################################ PKG_NAME="runc" -PKG_VERSION="02f8fa7" +PKG_VERSION="2f7393a" PKG_ARCH="any" PKG_LICENSE="APL" PKG_SITE="https://github.com/opencontainers/runc" From b5bd55fb253cb2c6db64f74192e6c044c762a0d4 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Fri, 20 Jan 2017 14:55:24 -0800 Subject: [PATCH 06/10] go: update to 1.7.4 --- packages/addons/addon-depends/go/package.mk | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/addons/addon-depends/go/package.mk b/packages/addons/addon-depends/go/package.mk index 47df608be1..85ac6a601f 100644 --- a/packages/addons/addon-depends/go/package.mk +++ b/packages/addons/addon-depends/go/package.mk @@ -17,7 +17,7 @@ ################################################################################ PKG_NAME="go" -PKG_VERSION="1.6.3" +PKG_VERSION="1.7.4" PKG_ARCH="any" PKG_LICENSE="BSD" PKG_SITE="https://golang.org" @@ -52,6 +52,11 @@ make_host() { bash make.bash --no-banner } +pre_makeinstall_host() { + # need to cleanup old golang version when updating to a new version + rm -rf $ROOT/$TOOLCHAIN/lib/golang +} + makeinstall_host() { mkdir -p $ROOT/$TOOLCHAIN/lib/golang cp -av $ROOT/$PKG_BUILD/* $ROOT/$TOOLCHAIN/lib/golang/ From 272b25499a50a568031057850b25d162750e7272 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Fri, 20 Jan 2017 14:55:24 -0800 Subject: [PATCH 07/10] libnetwork: add package --- .../addon-depends/libnetwork/package.mk | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 packages/addons/addon-depends/libnetwork/package.mk diff --git a/packages/addons/addon-depends/libnetwork/package.mk b/packages/addons/addon-depends/libnetwork/package.mk new file mode 100644 index 0000000000..7a8d21fb4d --- /dev/null +++ b/packages/addons/addon-depends/libnetwork/package.mk @@ -0,0 +1,74 @@ +################################################################################ +# This file is part of LibreELEC - https://libreelec.tv +# Copyright (C) 2009-2016 Lukas Rusak (lrusak@libreelec.tv) +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="libnetwork" +PKG_VERSION="0f53435" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="APL" +PKG_SITE="https://github.com/docker/libnetwork" +PKG_URL="https://github.com/docker/libnetwork/archive/${PKG_VERSION}.tar.gz" +PKG_DEPENDS_TARGET="toolchain go:host" +PKG_SECTION="system" +PKG_SHORTDESC="Libnetwork provides a native Go implementation for connecting containers" +PKG_LONGDESC="Libnetwork provides a native Go implementation for connecting containers" + +PKG_IS_ADDON="no" +PKG_AUTORECONF="no" + +pre_make_target() { + case $TARGET_ARCH in + x86_64) + export GOARCH=amd64 + ;; + arm) + export GOARCH=arm + + case $TARGET_CPU in + arm1176jzf-s) + export GOARM=6 + ;; + cortex-a7) + export GOARM=7 + ;; + esac + ;; + aarch64) + export GOARCH=arm64 + ;; + esac + + export GOOS=linux + export CGO_ENABLED=0 + export CGO_NO_EMULATION=1 + export CGO_CFLAGS=$CFLAGS + export LDFLAGS="-extld $CC" + export GOLANG=$ROOT/$TOOLCHAIN/lib/golang/bin/go + export GOPATH=$ROOT/$PKG_BUILD.gopath + export GOROOT=$ROOT/$TOOLCHAIN/lib/golang + export PATH=$PATH:$GOROOT/bin +} + +make_target() { + mkdir -p bin + $GOLANG build -v -o bin/docker-proxy -a -ldflags "$LDFLAGS" ./cmd/proxy +} + +makeinstall_target() { + : +} From 89667e7c263de09b8675acf24a1ed54ee8dcd8e8 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Fri, 20 Jan 2017 14:55:24 -0800 Subject: [PATCH 08/10] tini: add package --- packages/addons/addon-depends/tini/package.mk | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 packages/addons/addon-depends/tini/package.mk diff --git a/packages/addons/addon-depends/tini/package.mk b/packages/addons/addon-depends/tini/package.mk new file mode 100644 index 0000000000..3b43719464 --- /dev/null +++ b/packages/addons/addon-depends/tini/package.mk @@ -0,0 +1,44 @@ +################################################################################ +# This file is part of LibreELEC - https://libreelec.tv +# Copyright (C) 2009-2016 Lukas Rusak (lrusak@libreelec.tv) +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +PKG_NAME="tini" +PKG_VERSION="949e6fa" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="MIT" +PKG_SITE="https://github.com/krallin/tini" +PKG_URL="https://github.com/krallin/tini/archive/${PKG_VERSION}.tar.gz" +PKG_DEPENDS_TARGET="toolchain" +PKG_SECTION="system" +PKG_SHORTDESC="Tini is the simplest init you could think of" +PKG_LONGDESC="Tini is the simplest init you could think of" + +PKG_IS_ADDON="no" +PKG_AUTORECONF="no" + +PKG_CMAKE_TARGET_OPTS="-DMINIMAL=ON" + +PKG_MAKE_TARGET_OPTS="tini-static" + +pre_configure_target(){ + sed -i "s|@tini_VERSION_GIT@| - git.${PKG_VERSION}|" $ROOT/$PKG_BUILD/src/tiniConfig.h.in +} + +makeinstall_target() { + : +} From e673e34ace0bdfab553ac9410129c9cbe277e1a0 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Fri, 20 Jan 2017 14:55:24 -0800 Subject: [PATCH 09/10] docker: use journald log driver --- .../service/docker/source/system.d/service.system.docker.service | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/addons/service/docker/source/system.d/service.system.docker.service b/packages/addons/service/docker/source/system.d/service.system.docker.service index 4d5e9c975e..ba37b01d98 100644 --- a/packages/addons/service/docker/source/system.d/service.system.docker.service +++ b/packages/addons/service/docker/source/system.d/service.system.docker.service @@ -9,6 +9,7 @@ Environment=PATH=/bin:/sbin:/usr/bin:/usr/sbin:/storage/.kodi/addons/service.sys ExecStartPre=/storage/.kodi/addons/service.system.docker/bin/docker-config EnvironmentFile=-/storage/.kodi/userdata/addon_data/service.system.docker/config/docker.conf ExecStart=/storage/.kodi/addons/service.system.docker/bin/dockerd --exec-opt native.cgroupdriver=systemd \ + --log-driver=journald \ --group=root \ $DOCKER_DAEMON_OPTS \ $DOCKER_STORAGE_OPTS From f98ac99f20a1878f1943ec29915488d621dc2a26 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Fri, 20 Jan 2017 14:55:24 -0800 Subject: [PATCH 10/10] docker: update to 1.13.0 --- packages/addons/service/docker/changelog.txt | 5 + packages/addons/service/docker/package.mk | 20 ++- ...ocker-001-use-addon-storage-location.patch | 121 ++++++++++-------- .../docker/patches/docker-002-PR29846.patch | 60 +++++++++ ...003-use-short-expected-commit-values.patch | 28 ++++ 5 files changed, 176 insertions(+), 58 deletions(-) create mode 100644 packages/addons/service/docker/patches/docker-002-PR29846.patch create mode 100644 packages/addons/service/docker/patches/docker-003-use-short-expected-commit-values.patch diff --git a/packages/addons/service/docker/changelog.txt b/packages/addons/service/docker/changelog.txt index af58d08bd9..67ab692746 100644 --- a/packages/addons/service/docker/changelog.txt +++ b/packages/addons/service/docker/changelog.txt @@ -1,3 +1,8 @@ +8.1.112 +- Update to docker 1.13.0 +- Use journald log driver +- Add docker-init (tini) + 8.1.111 - Add temporary cleanup for old systemd service diff --git a/packages/addons/service/docker/package.mk b/packages/addons/service/docker/package.mk index 084d0cd2bf..9876ea412f 100644 --- a/packages/addons/service/docker/package.mk +++ b/packages/addons/service/docker/package.mk @@ -17,14 +17,14 @@ ################################################################################ PKG_NAME="docker" -PKG_VERSION="1.12.5" -PKG_REV="111" +PKG_VERSION="1.13.0" +PKG_REV="112" PKG_ARCH="any" PKG_ADDON_PROJECTS="Generic RPi RPi2 imx6 WeTek_Hub WeTek_Play_2 Odroid_C2" PKG_LICENSE="ASL" PKG_SITE="http://www.docker.com/" PKG_URL="https://github.com/docker/docker/archive/v${PKG_VERSION}.tar.gz" -PKG_DEPENDS_TARGET="toolchain sqlite go:host containerd runc" +PKG_DEPENDS_TARGET="toolchain sqlite go:host containerd runc libnetwork tini" PKG_SECTION="service/system" PKG_SHORTDESC="Docker is an open-source engine that automates the deployment of any application as a lightweight, portable, self-sufficient container that will run virtually anywhere." PKG_LONGDESC="Docker containers can encapsulate any payload, and will run consistently on and between virtually any server. The same container that a developer builds and tests on a laptop will run at scale, in production*, on VMs, bare-metal servers, OpenStack clusters, public instances, or combinations of the above." @@ -68,11 +68,13 @@ configure_target() { export CGO_CFLAGS=$CFLAGS export LDFLAGS="-w -linkmode external -extldflags -Wl,--unresolved-symbols=ignore-in-shared-libs -extld $CC" export GOLANG=$ROOT/$TOOLCHAIN/lib/golang/bin/go - export GOPATH=$ROOT/$PKG_BUILD/.gopath:$ROOT/$PKG_BUILD/vendor + export GOPATH=$ROOT/$PKG_BUILD/.gopath export GOROOT=$ROOT/$TOOLCHAIN/lib/golang export PATH=$PATH:$GOROOT/bin - ln -fs $ROOT/$PKG_BUILD $ROOT/$PKG_BUILD/vendor/src/github.com/docker/docker + mkdir -p $ROOT/$PKG_BUILD/.gopath + mv $ROOT/$PKG_BUILD/vendor $ROOT/$PKG_BUILD/.gopath/src + ln -fs $ROOT/$PKG_BUILD $ROOT/$PKG_BUILD/.gopath/src/github.com/docker/docker # used for docker version export GITCOMMIT=$PKG_VERSION @@ -85,7 +87,6 @@ make_target() { mkdir -p bin $GOLANG build -v -o bin/docker -a -tags "$DOCKER_BUILDTAGS" -ldflags "$LDFLAGS" ./cmd/docker $GOLANG build -v -o bin/dockerd -a -tags "$DOCKER_BUILDTAGS" -ldflags "$LDFLAGS" ./cmd/dockerd - $GOLANG build -v -o bin/docker-proxy -a -ldflags "$LDFLAGS" ./vendor/src/github.com/docker/libnetwork/cmd/proxy } makeinstall_target() { @@ -96,12 +97,17 @@ addon() { mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/bin cp -P $ROOT/$PKG_BUILD/bin/docker $ADDON_BUILD/$PKG_ADDON_ID/bin cp -P $ROOT/$PKG_BUILD/bin/dockerd $ADDON_BUILD/$PKG_ADDON_ID/bin - cp -P $ROOT/$PKG_BUILD/bin/docker-proxy $ADDON_BUILD/$PKG_ADDON_ID/bin # containerd cp -P $(get_build_dir containerd)/bin/containerd $ADDON_BUILD/$PKG_ADDON_ID/bin/docker-containerd cp -P $(get_build_dir containerd)/bin/containerd-shim $ADDON_BUILD/$PKG_ADDON_ID/bin/docker-containerd-shim + # libnetwork + cp -P $(get_build_dir libnetwork)/bin/docker-proxy $ADDON_BUILD/$PKG_ADDON_ID/bin/docker-proxy + # runc cp -P $(get_build_dir runc)/bin/runc $ADDON_BUILD/$PKG_ADDON_ID/bin/docker-runc + + # tini + cp -P $(get_build_dir tini)/.$TARGET_NAME/tini-static $ADDON_BUILD/$PKG_ADDON_ID/bin/docker-init } diff --git a/packages/addons/service/docker/patches/docker-001-use-addon-storage-location.patch b/packages/addons/service/docker/patches/docker-001-use-addon-storage-location.patch index dba0a066ff..96ae092e3f 100644 --- a/packages/addons/service/docker/patches/docker-001-use-addon-storage-location.patch +++ b/packages/addons/service/docker/patches/docker-001-use-addon-storage-location.patch @@ -2,20 +2,20 @@ # find . -name "*.go" -print | xargs sed -i 's/\/etc\/docker/\/storage\/.kodi\/userdata\/addon_data\/service.system.docker\/config/g' diff -Naur a/cmd/dockerd/daemon_solaris.go b/cmd/dockerd/daemon_solaris.go ---- a/cmd/dockerd/daemon_solaris.go 2016-06-17 13:28:45.000000000 -0700 -+++ b/cmd/dockerd/daemon_solaris.go 2016-06-23 10:53:28.544141675 -0700 +--- a/cmd/dockerd/daemon_solaris.go 2016-12-16 02:10:49.000000000 -0800 ++++ b/cmd/dockerd/daemon_solaris.go 2017-01-01 23:25:18.558212694 -0800 @@ -39,7 +39,7 @@ } - func getDaemonConfDir() string { + func getDaemonConfDir(_ string) string { - return "/etc/docker" + return "/storage/.kodi/userdata/addon_data/service.system.docker/config" } // setupConfigReloadTrap configures the USR2 signal to reload the configuration. diff -Naur a/cmd/dockerd/daemon_unix.go b/cmd/dockerd/daemon_unix.go ---- a/cmd/dockerd/daemon_unix.go 2016-06-17 13:28:45.000000000 -0700 -+++ b/cmd/dockerd/daemon_unix.go 2016-06-23 10:53:28.542141655 -0700 +--- a/cmd/dockerd/daemon_unix.go 2016-12-16 02:10:49.000000000 -0800 ++++ b/cmd/dockerd/daemon_unix.go 2017-01-01 23:25:18.560212712 -0800 @@ -18,7 +18,7 @@ "github.com/docker/libnetwork/portallocator" ) @@ -28,15 +28,15 @@ diff -Naur a/cmd/dockerd/daemon_unix.go b/cmd/dockerd/daemon_unix.go @@ -44,7 +44,7 @@ } - func getDaemonConfDir() string { + func getDaemonConfDir(_ string) string { - return "/etc/docker" + return "/storage/.kodi/userdata/addon_data/service.system.docker/config" } // setupConfigReloadTrap configures the USR2 signal to reload the configuration. diff -Naur a/integration-cli/docker_cli_authz_unix_test.go b/integration-cli/docker_cli_authz_unix_test.go ---- a/integration-cli/docker_cli_authz_unix_test.go 2016-06-17 13:28:45.000000000 -0700 -+++ b/integration-cli/docker_cli_authz_unix_test.go 2016-06-23 10:53:28.339139631 -0700 +--- a/integration-cli/docker_cli_authz_unix_test.go 2016-12-16 02:10:49.000000000 -0800 ++++ b/integration-cli/docker_cli_authz_unix_test.go 2017-01-01 23:25:17.908206740 -0800 @@ -142,10 +142,10 @@ w.Write(b) }) @@ -60,9 +60,9 @@ diff -Naur a/integration-cli/docker_cli_authz_unix_test.go b/integration-cli/doc } diff -Naur a/integration-cli/docker_cli_daemon_test.go b/integration-cli/docker_cli_daemon_test.go ---- a/integration-cli/docker_cli_daemon_test.go 2016-06-17 13:28:45.000000000 -0700 -+++ b/integration-cli/docker_cli_daemon_test.go 2016-06-23 10:53:28.411140349 -0700 -@@ -553,13 +553,13 @@ +--- a/integration-cli/docker_cli_daemon_test.go 2016-12-16 02:10:49.000000000 -0800 ++++ b/integration-cli/docker_cli_daemon_test.go 2017-01-01 23:25:17.939207024 -0800 +@@ -541,13 +541,13 @@ func (s *DockerDaemonSuite) TestDaemonKeyGeneration(c *check.C) { // TODO: skip or update for Windows daemon @@ -78,7 +78,7 @@ diff -Naur a/integration-cli/docker_cli_daemon_test.go b/integration-cli/docker_ if err != nil { c.Fatalf("Error opening key file") } -@@ -572,7 +572,7 @@ +@@ -560,7 +560,7 @@ func (s *DockerDaemonSuite) TestDaemonKeyMigration(c *check.C) { // TODO: skip or update for Windows daemon @@ -87,7 +87,7 @@ diff -Naur a/integration-cli/docker_cli_daemon_test.go b/integration-cli/docker_ k1, err := libtrust.GenerateECP256PrivateKey() if err != nil { c.Fatalf("Error generating private key: %s", err) -@@ -589,7 +589,7 @@ +@@ -577,7 +577,7 @@ } s.d.Stop() @@ -96,7 +96,7 @@ diff -Naur a/integration-cli/docker_cli_daemon_test.go b/integration-cli/docker_ if err != nil { c.Fatalf("Error opening key file") } -@@ -1337,7 +1337,7 @@ +@@ -1300,7 +1300,7 @@ Y string `json:"y"` } @@ -105,7 +105,7 @@ diff -Naur a/integration-cli/docker_cli_daemon_test.go b/integration-cli/docker_ if err := s.d.Start(); err != nil { c.Fatalf("Failed to start daemon: %v", err) } -@@ -1347,7 +1347,7 @@ +@@ -1310,7 +1310,7 @@ } config := &Config{} @@ -114,7 +114,7 @@ diff -Naur a/integration-cli/docker_cli_daemon_test.go b/integration-cli/docker_ if err != nil { c.Fatalf("Error reading key.json file: %s", err) } -@@ -1367,11 +1367,11 @@ +@@ -1330,11 +1330,11 @@ } // write back @@ -129,9 +129,9 @@ diff -Naur a/integration-cli/docker_cli_daemon_test.go b/integration-cli/docker_ if err := s.d.Start(); err == nil { c.Fatalf("It should not be successful to start daemon with wrong key: %v", err) diff -Naur a/integration-cli/docker_cli_external_graphdriver_unix_test.go b/integration-cli/docker_cli_external_graphdriver_unix_test.go ---- a/integration-cli/docker_cli_external_graphdriver_unix_test.go 2016-06-17 13:28:45.000000000 -0700 -+++ b/integration-cli/docker_cli_external_graphdriver_unix_test.go 2016-06-23 10:53:28.444140678 -0700 -@@ -321,10 +321,10 @@ +--- a/integration-cli/docker_cli_external_graphdriver_unix_test.go 2016-12-16 02:10:49.000000000 -0800 ++++ b/integration-cli/docker_cli_external_graphdriver_unix_test.go 2017-01-01 23:25:17.932206960 -0800 +@@ -320,10 +320,10 @@ respond(w, &graphDriverResponse{Size: size}) }) @@ -145,7 +145,7 @@ diff -Naur a/integration-cli/docker_cli_external_graphdriver_unix_test.go b/inte err = ioutil.WriteFile(specFile, b, 0644) c.Assert(err, check.IsNil, check.Commentf("error writing to %s", specFile)) } -@@ -333,8 +333,8 @@ +@@ -332,8 +332,8 @@ s.server.Close() s.jserver.Close() @@ -157,9 +157,9 @@ diff -Naur a/integration-cli/docker_cli_external_graphdriver_unix_test.go b/inte func (s *DockerExternalGraphdriverSuite) TestExternalGraphDriver(c *check.C) { diff -Naur a/integration-cli/docker_cli_external_volume_driver_unix_test.go b/integration-cli/docker_cli_external_volume_driver_unix_test.go ---- a/integration-cli/docker_cli_external_volume_driver_unix_test.go 2016-06-17 13:28:45.000000000 -0700 -+++ b/integration-cli/docker_cli_external_volume_driver_unix_test.go 2016-06-23 10:53:28.435140588 -0700 -@@ -239,17 +239,17 @@ +--- a/integration-cli/docker_cli_external_volume_driver_unix_test.go 2016-12-16 02:10:49.000000000 -0800 ++++ b/integration-cli/docker_cli_external_volume_driver_unix_test.go 2017-01-01 23:25:17.931206951 -0800 +@@ -264,10 +264,10 @@ send(w, `{"Capabilities": { "Scope": "global" }}`) }) @@ -167,20 +167,21 @@ diff -Naur a/integration-cli/docker_cli_external_volume_driver_unix_test.go b/in + err := os.MkdirAll("/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins", 0755) c.Assert(err, checker.IsNil) -- err = ioutil.WriteFile("/etc/docker/plugins/test-external-volume-driver.spec", []byte(s.server.URL), 0644) -+ err = ioutil.WriteFile("/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins/test-external-volume-driver.spec", []byte(s.server.URL), 0644) +- err = ioutil.WriteFile("/etc/docker/plugins/"+name+".spec", []byte(s.Server.URL), 0644) ++ err = ioutil.WriteFile("/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins/"+name+".spec", []byte(s.Server.URL), 0644) c.Assert(err, checker.IsNil) + return s } - +@@ -275,7 +275,7 @@ func (s *DockerExternalVolumeSuite) TearDownSuite(c *check.C) { - s.server.Close() + s.volumePlugin.Close() - err := os.RemoveAll("/etc/docker/plugins") + err := os.RemoveAll("/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins") c.Assert(err, checker.IsNil) } -@@ -334,7 +334,7 @@ +@@ -376,7 +376,7 @@ // Make sure a request to use a down driver doesn't block other requests func (s *DockerExternalVolumeSuite) TestExternalVolumeDriverLookupNotBlocked(c *check.C) { @@ -189,7 +190,7 @@ diff -Naur a/integration-cli/docker_cli_external_volume_driver_unix_test.go b/in err := ioutil.WriteFile(specPath, []byte("tcp://127.0.0.7:9999"), 0644) c.Assert(err, check.IsNil) defer os.RemoveAll(specPath) -@@ -373,7 +373,7 @@ +@@ -415,7 +415,7 @@ err := s.d.StartWithBusybox() c.Assert(err, checker.IsNil) @@ -199,9 +200,9 @@ diff -Naur a/integration-cli/docker_cli_external_volume_driver_unix_test.go b/in defer os.RemoveAll(specPath) diff -Naur a/integration-cli/docker_cli_network_unix_test.go b/integration-cli/docker_cli_network_unix_test.go ---- a/integration-cli/docker_cli_network_unix_test.go 2016-06-17 13:28:45.000000000 -0700 -+++ b/integration-cli/docker_cli_network_unix_test.go 2016-06-23 10:53:28.441140648 -0700 -@@ -201,14 +201,14 @@ +--- a/integration-cli/docker_cli_network_unix_test.go 2016-12-16 02:10:49.000000000 -0800 ++++ b/integration-cli/docker_cli_network_unix_test.go 2017-01-01 23:25:17.896206630 -0800 +@@ -203,14 +203,14 @@ } }) @@ -219,7 +220,7 @@ diff -Naur a/integration-cli/docker_cli_network_unix_test.go b/integration-cli/d err = ioutil.WriteFile(ipamFileName, []byte(url), 0644) c.Assert(err, checker.IsNil) } -@@ -220,7 +220,7 @@ +@@ -222,7 +222,7 @@ s.server.Close() @@ -228,21 +229,39 @@ diff -Naur a/integration-cli/docker_cli_network_unix_test.go b/integration-cli/d c.Assert(err, checker.IsNil) } -diff -Naur a/pkg/plugins/discovery.go b/pkg/plugins/discovery.go ---- a/pkg/plugins/discovery.go 2016-06-17 13:28:45.000000000 -0700 -+++ b/pkg/plugins/discovery.go 2016-06-23 10:53:28.636142593 -0700 -@@ -16,7 +16,7 @@ - // ErrNotFound plugin not found - ErrNotFound = errors.New("plugin not found") - socketsPath = "/run/docker/plugins" -- specsPaths = []string{"/etc/docker/plugins", "/usr/lib/docker/plugins"} -+ specsPaths = []string{"/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins", "/usr/lib/docker/plugins"} - ) +diff -Naur a/integration-cli/docker_cli_swarm_test.go b/integration-cli/docker_cli_swarm_test.go +--- a/integration-cli/docker_cli_swarm_test.go 2016-12-16 02:10:49.000000000 -0800 ++++ b/integration-cli/docker_cli_swarm_test.go 2017-01-01 23:25:17.919206841 -0800 +@@ -659,14 +659,14 @@ + } + }) - // localRegistry defines a registry that is local (using unix socket). +- err := os.MkdirAll("/etc/docker/plugins", 0755) ++ err := os.MkdirAll("/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins", 0755) + c.Assert(err, checker.IsNil) + +- fileName := fmt.Sprintf("/etc/docker/plugins/%s.spec", netDrv) ++ fileName := fmt.Sprintf("/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins/%s.spec", netDrv) + err = ioutil.WriteFile(fileName, []byte(url), 0644) + c.Assert(err, checker.IsNil) + +- ipamFileName := fmt.Sprintf("/etc/docker/plugins/%s.spec", ipamDrv) ++ ipamFileName := fmt.Sprintf("/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins/%s.spec", ipamDrv) + err = ioutil.WriteFile(ipamFileName, []byte(url), 0644) + c.Assert(err, checker.IsNil) + } +diff -Naur a/pkg/plugins/discovery_unix.go b/pkg/plugins/discovery_unix.go +--- a/pkg/plugins/discovery_unix.go 2016-12-16 02:10:49.000000000 -0800 ++++ b/pkg/plugins/discovery_unix.go 2017-01-01 23:25:17.977207372 -0800 +@@ -2,4 +2,4 @@ + + package plugins + +-var specsPaths = []string{"/etc/docker/plugins", "/usr/lib/docker/plugins"} ++var specsPaths = []string{"/storage/.kodi/userdata/addon_data/service.system.docker/config/plugins", "/usr/lib/docker/plugins"} diff -Naur a/pkg/plugins/plugins.go b/pkg/plugins/plugins.go ---- a/pkg/plugins/plugins.go 2016-06-17 13:28:45.000000000 -0700 -+++ b/pkg/plugins/plugins.go 2016-06-23 10:53:28.636142593 -0700 +--- a/pkg/plugins/plugins.go 2016-12-16 02:10:49.000000000 -0800 ++++ b/pkg/plugins/plugins.go 2017-01-01 23:25:17.977207372 -0800 @@ -4,7 +4,7 @@ // Docker discovers plugins by looking for them in the plugin directory whenever // a user or container tries to use one by name. UNIX domain socket files must @@ -253,9 +272,9 @@ diff -Naur a/pkg/plugins/plugins.go b/pkg/plugins/plugins.go // its name if it exists. // diff -Naur a/registry/config_unix.go b/registry/config_unix.go ---- a/registry/config_unix.go 2016-06-17 13:28:45.000000000 -0700 -+++ b/registry/config_unix.go 2016-06-23 10:53:28.594142174 -0700 -@@ -4,7 +4,7 @@ +--- a/registry/config_unix.go 2016-12-16 02:10:49.000000000 -0800 ++++ b/registry/config_unix.go 2017-01-01 23:25:18.578212877 -0800 +@@ -8,7 +8,7 @@ var ( // CertsDir is the directory where certificates are stored @@ -265,8 +284,8 @@ diff -Naur a/registry/config_unix.go b/registry/config_unix.go // cleanPath is used to ensure that a directory name is valid on the target diff -Naur a/registry/endpoint_v1.go b/registry/endpoint_v1.go ---- a/registry/endpoint_v1.go 2016-06-17 13:28:45.000000000 -0700 -+++ b/registry/endpoint_v1.go 2016-06-23 10:53:28.593142164 -0700 +--- a/registry/endpoint_v1.go 2016-12-16 02:10:49.000000000 -0800 ++++ b/registry/endpoint_v1.go 2017-01-01 23:25:18.584212932 -0800 @@ -49,7 +49,7 @@ if endpoint.IsSecure { // If registry is secure and HTTPS failed, show user the error and tell them about `--insecure-registry` diff --git a/packages/addons/service/docker/patches/docker-002-PR29846.patch b/packages/addons/service/docker/patches/docker-002-PR29846.patch new file mode 100644 index 0000000000..04e64ad011 --- /dev/null +++ b/packages/addons/service/docker/patches/docker-002-PR29846.patch @@ -0,0 +1,60 @@ +commit 472c4da2e78a01b4fcf194c2c85edde4fc32aa0b +Author: Sebastiaan van Stijn +Date: Tue Jan 3 14:54:30 2017 +0100 + + do not create init-dir if not needed + + commit 56f77d5ade945b3b8816a6c8acb328b7c6dce9a7 + added support for cpu-rt-period and cpu-rt-runtime, + but always initialized the cgroup path, even if not + used. + + As a result, containers failed to start on a + read-only filesystem. + + This patch only creates the cgroup path if + one of these options is set. + + Signed-off-by: Sebastiaan van Stijn + +diff --git a/daemon/daemon_unix.go b/daemon/daemon_unix.go +index 56e980d..5b3ffeb 100644 +--- a/daemon/daemon_unix.go ++++ b/daemon/daemon_unix.go +@@ -1190,6 +1190,12 @@ func (daemon *Daemon) initCgroupsPath(path string) error { + return nil + } + ++ if daemon.configStore.CPURealtimePeriod == 0 && daemon.configStore.CPURealtimeRuntime == 0 { ++ return nil ++ } ++ ++ // Recursively create cgroup to ensure that the system and all parent cgroups have values set ++ // for the period and runtime as this limits what the children can be set to. + daemon.initCgroupsPath(filepath.Dir(path)) + + _, root, err := cgroups.FindCgroupMountpointAndRoot("cpu") +@@ -1198,16 +1204,19 @@ func (daemon *Daemon) initCgroupsPath(path string) error { + } + + path = filepath.Join(root, path) +- sysinfo := sysinfo.New(false) +- if err := os.MkdirAll(path, 0755); err != nil && !os.IsExist(err) { +- return err +- } ++ sysinfo := sysinfo.New(true) + if sysinfo.CPURealtimePeriod && daemon.configStore.CPURealtimePeriod != 0 { ++ if err := os.MkdirAll(path, 0755); err != nil && !os.IsExist(err) { ++ return err ++ } + if err := ioutil.WriteFile(filepath.Join(path, "cpu.rt_period_us"), []byte(strconv.FormatInt(daemon.configStore.CPURealtimePeriod, 10)), 0700); err != nil { + return err + } + } + if sysinfo.CPURealtimeRuntime && daemon.configStore.CPURealtimeRuntime != 0 { ++ if err := os.MkdirAll(path, 0755); err != nil && !os.IsExist(err) { ++ return err ++ } + if err := ioutil.WriteFile(filepath.Join(path, "cpu.rt_runtime_us"), []byte(strconv.FormatInt(daemon.configStore.CPURealtimeRuntime, 10)), 0700); err != nil { + return err + } diff --git a/packages/addons/service/docker/patches/docker-003-use-short-expected-commit-values.patch b/packages/addons/service/docker/patches/docker-003-use-short-expected-commit-values.patch new file mode 100644 index 0000000000..fc21bc67c0 --- /dev/null +++ b/packages/addons/service/docker/patches/docker-003-use-short-expected-commit-values.patch @@ -0,0 +1,28 @@ +commit 51ed00db7df80caad3c3d2b136ee5578cedb7e31 +Author: Lukas Rusak +Date: Fri Jan 13 13:54:42 2017 -0800 + + use short expected commit values + +diff --git a/daemon/info_unix.go b/daemon/info_unix.go +index 9c41c0e..4e0e896 100644 +--- a/daemon/info_unix.go ++++ b/daemon/info_unix.go +@@ -27,7 +27,7 @@ func (daemon *Daemon) FillPlatformInfo(v *types.Info, sysInfo *sysinfo.SysInfo) + v.DefaultRuntime = daemon.configStore.GetDefaultRuntimeName() + v.InitBinary = daemon.configStore.GetInitPath() + +- v.ContainerdCommit.Expected = dockerversion.ContainerdCommitID ++ v.ContainerdCommit.Expected = dockerversion.ContainerdCommitID[0:7] + if sv, err := daemon.containerd.GetServerVersion(context.Background()); err == nil { + v.ContainerdCommit.ID = sv.Revision + } else { +@@ -35,7 +35,7 @@ func (daemon *Daemon) FillPlatformInfo(v *types.Info, sysInfo *sysinfo.SysInfo) + v.ContainerdCommit.ID = "N/A" + } + +- v.RuncCommit.Expected = dockerversion.RuncCommitID ++ v.RuncCommit.Expected = dockerversion.RuncCommitID[0:7] + if rv, err := exec.Command(DefaultRuntimeBinary, "--version").Output(); err == nil { + parts := strings.Split(strings.TrimSpace(string(rv)), "\n") + if len(parts) == 3 {