From 2253fffa309bdc92c6fe671e5ad833ec2398b9fc Mon Sep 17 00:00:00 2001 From: Tianon Gravi Date: Tue, 12 Jul 2016 15:46:35 +0100 Subject: [PATCH] Import docker.io_1.11.2~ds1-5.debian.tar.xz [dgit import tarball docker.io 1.11.2~ds1-5 docker.io_1.11.2~ds1-5.debian.tar.xz] --- Dockerfile | 21 + README.Debian | 35 + changelog | 406 +++++ clean | 5 + compat | 1 + control | 184 ++ copyright | 179 ++ docker-doc.docs | 1 + docker.io.NEWS | 26 + docker.io.bash-completion | 1 + docker.io.dirs | 1 + docker.io.docker.default | 12 + docker.io.docker.init | 1 + docker.io.docker.service | 1 + docker.io.docker.upstart | 1 + docker.io.docs | 2 + docker.io.install | 11 + docker.io.maintscript | 5 + docker.io.manpages | 1 + docker.io.postinst | 18 + docker.io.postrm | 17 + docker.io.prerm | 23 + docker.io.udev | 1 + gbp.conf | 15 + golang-github-docker-docker-dev.install | 5 + helpers/gen-build-depends.sh | 190 +++ helpers/gitcommit.sh | 34 + patches/21491--systemd-tasksmax.patch | 25 + .../22000--ignore-invalid-host-header.patch | 336 ++++ patches/23063--update-aws-sdk-go.patch | 95 ++ patches/cgroupfs-mount-convenience-copy.patch | 81 + patches/change-system-unit-env-file.patch | 20 + patches/check-v1.patch | 1487 +++++++++++++++++ patches/fatal-error-old-kernels.patch | 18 + .../opencontainer-specs--no-mountlabel.patch | 20 + patches/opencontainer-specs-0.5.0.patch | 149 ++ patches/overlay.patch | 18 + patches/remove-docker-prefix.patch | 26 + patches/series | 23 + patches/skip-privileged-unit-tests.patch | 669 ++++++++ patches/skip-racy-unit-tests.patch | 15 + repack.sh | 83 + repack/keep/vendor | 5 + repack/prune/vendor | 1 + rules | 109 ++ source/format | 1 + tests/basic-smoke | 36 + tests/control | 7 + tests/integration | 41 + upstream-version-gitcommits | 100 ++ vim-syntax-docker.install | 4 + vim-syntax-docker.yaml | 6 + watch | 6 + 53 files changed, 4578 insertions(+) create mode 100644 Dockerfile create mode 100644 README.Debian create mode 100644 changelog create mode 100644 clean create mode 100644 compat create mode 100644 control create mode 100644 copyright create mode 100644 docker-doc.docs create mode 100644 docker.io.NEWS create mode 100644 docker.io.bash-completion create mode 100644 docker.io.dirs create mode 100644 docker.io.docker.default create mode 120000 docker.io.docker.init create mode 120000 docker.io.docker.service create mode 120000 docker.io.docker.upstart create mode 100644 docker.io.docs create mode 100755 docker.io.install create mode 100644 docker.io.maintscript create mode 100644 docker.io.manpages create mode 100644 docker.io.postinst create mode 100644 docker.io.postrm create mode 100644 docker.io.prerm create mode 120000 docker.io.udev create mode 100644 gbp.conf create mode 100755 golang-github-docker-docker-dev.install create mode 100755 helpers/gen-build-depends.sh create mode 100755 helpers/gitcommit.sh create mode 100644 patches/21491--systemd-tasksmax.patch create mode 100644 patches/22000--ignore-invalid-host-header.patch create mode 100644 patches/23063--update-aws-sdk-go.patch create mode 100644 patches/cgroupfs-mount-convenience-copy.patch create mode 100644 patches/change-system-unit-env-file.patch create mode 100644 patches/check-v1.patch create mode 100644 patches/fatal-error-old-kernels.patch create mode 100644 patches/opencontainer-specs--no-mountlabel.patch create mode 100644 patches/opencontainer-specs-0.5.0.patch create mode 100644 patches/overlay.patch create mode 100644 patches/remove-docker-prefix.patch create mode 100644 patches/series create mode 100644 patches/skip-privileged-unit-tests.patch create mode 100644 patches/skip-racy-unit-tests.patch create mode 100755 repack.sh create mode 100644 repack/keep/vendor create mode 100644 repack/prune/vendor create mode 100755 rules create mode 100644 source/format create mode 100755 tests/basic-smoke create mode 100644 tests/control create mode 100755 tests/integration create mode 100644 upstream-version-gitcommits create mode 100644 vim-syntax-docker.install create mode 100644 vim-syntax-docker.yaml create mode 100644 watch diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..80639c66 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +FROM tianon/debian-devel + +RUN echo 'deb http://incoming.debian.org/debian-buildd buildd-unstable main contrib non-free' > /etc/apt/sources.list.d/incoming.list + +# start by adding just "debian/control" so we can get mk-build-deps with maximum caching +COPY control /usr/src/docker.io/debian/ +WORKDIR /usr/src/docker.io + +# get all the build deps of _this_ package in a nice repeatable way +RUN apt-get update && mk-build-deps -irt'apt-get --no-install-recommends -yV' debian/control && dpkg-checkbuilddeps + +# need our debian/ directory to compile _this_ package +COPY . /usr/src/docker.io/debian + +# go download and unpack our upstream source +RUN uscan --force-download --verbose --download-current-version +RUN DOCKER_TARBALLS=.. ./debian/helpers/download-libcontainer +RUN /tianon/extract-origtargz.sh + +# tianon is _really_ lazy, and likes a preseeded bash history +RUN echo '/tianon/extract-origtargz.sh && dpkg-buildpackage -us -uc && lintian -EvIL+pedantic' >> /root/.bash_history diff --git a/README.Debian b/README.Debian new file mode 100644 index 00000000..d9343d85 --- /dev/null +++ b/README.Debian @@ -0,0 +1,35 @@ +Docker on Debian +================ + +To enable docker memory limitation, the kernel needs to be loaded with +boot parameters: cgroup_enable=memory swapaccount=1. + +This is because enabling memory cgroup support has some run-time overhead, +and kernel maintainers don't want to slow down systems unnecessarily. + +http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg764104.html +https://github.com/docker/docker/issues/396 + +To instruct the kernel to enable memory cgroup support, edit +/etc/default/grub and extend GRUB_CMDLINE_LINUX_DEFAULT like: + +GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1" + +Then run update-grub, and reboot. + + +As noted in the upstream documentation (https://docs.docker.io), Docker will +allow non-root users in the "docker" group to access "docker.sock" and thus +communicate with the daemon. To add yourself to the "docker" group, use +something like: + +adduser YOURUSER docker + +As also noted in the upstream documentation, the "docker" group (and any other +means of accessing the Docker API) is root-equivalent. If you don't trust a +user with root on your box, you shouldn't trust them with Docker either. +If you are interested in further information about the security aspects of +Docker, please be sure to read the "Docker Security" article in the +upstream documentation: + + https://docs.docker.com/engine/security/security/ diff --git a/changelog b/changelog new file mode 100644 index 00000000..d8a9d2c1 --- /dev/null +++ b/changelog @@ -0,0 +1,406 @@ +docker.io (1.11.2~ds1-5) unstable; urgency=medium + + * Skip racy "TestRunCommandWithOutputAndTimeoutKilled" during build (see also + https://github.com/docker/docker/issues/22965) + + -- Tianon Gravi Tue, 12 Jul 2016 07:46:35 -0700 + +docker.io (1.11.2~ds1-4) unstable; urgency=medium + + [ Tianon Gravi ] + * Add new script to generate Build-Depends based on "go list" instead of + "hack/vendor.sh" (and update Build-Depends using it) + * Update "/etc/default/docker" text to aggressively discourage use, linking to + upstream's documentation for the recommended alternatives + ("/etc/docker/daemon.json" and systemd drop-ins) + * Update gbp.conf for pristine-tar usage now that we're no longer multi-orig + * Remove "/var/lib/docker" upon purge (Closes: #739257) + + [ Dmitry Smirnov ] + * Add support for DEB_BUILD_OPTIONS=nocheck in debian/rules + + -- Tianon Gravi Mon, 11 Jul 2016 22:09:01 -0700 + +docker.io (1.11.2~ds1-3) unstable; urgency=medium + + * Team upload. + * Updated "skip-privileged-unit-tests.patch" to skip more privileged + tests in order to fix FTBFS in pbuilder. + * Install "opts" directory to -dev package. + + -- Dmitry Smirnov Sat, 09 Jul 2016 13:49:02 +1000 + +docker.io (1.11.2~ds1-2) unstable; urgency=medium + + * Add Tim Potter (tpot) and Dmitry Smirnov (onlyjob) to debian/copyright; they + were instrumental in getting 1.11 into the archive! + * Fix golang-github-docker-docker-dev install location (Closes: #830478); + thanks nicoo! + + -- Tianon Gravi Fri, 08 Jul 2016 08:47:44 -0700 + +docker.io (1.11.2~ds1-1) unstable; urgency=medium + + * Update to 1.11.2 upstream release + (Closes: #806887, #820149, #822628, #812838) + * Add NEWS file describing the AUFS issue and the unfortunate possible + "solutions" (Closes: #799386, #805725) + * Add "/etc/docker" to the directories explicitly installed by the package + to help combat issues like #806261 + * Update "Homepage" to "dockerproject.org" (versus ".com" which now redirects) + * Update "Vcs-Browser" to use https + * Shrink the Ubuntu delta by pulling in many of the changes + * Replace "btrfs-tools" relations with "btrfs-progs" (Closes: #824833) + * Adjust "repack.sh" to allow keeping minor bits of vendor/ + * Fix bad URL in README (Closes: #816844); thanks Clint! + * Move documentation to dedicated "docker-doc" package + * Refresh patches, add minor patch to get unit tests running + * Use gccgo on non-golang architectures (Closes: #785093) + * Use "dh-golang" to calculate "Built-Using" more accurately + * Add simple "basic-smoke" DEP8 test + + -- Tianon Gravi Mon, 04 Jul 2016 09:59:44 -0700 + +docker.io (1.8.3~ds1-2) unstable; urgency=medium + + * Move "overlay" higher in priority (Closes: #799087) + * Adjust "native.cgroupdriver" to default to "cgroupfs" (Closes: #798778) + + -- Tianon Gravi Wed, 04 Nov 2015 00:09:02 -0800 + +docker.io (1.8.3~ds1-1) unstable; urgency=medium + + * Update to 1.8.3 upstream release (CVE-2014-8178, CVE-2014-8179) + + -- Tianon Gravi Thu, 29 Oct 2015 19:40:51 -0700 + +docker.io (1.8.2~ds1-2) unstable; urgency=medium + + * Swap Build-Depends order to appease buildds (Closes: #803136) + + -- Tianon Gravi Thu, 29 Oct 2015 07:23:10 -0700 + +docker.io (1.8.2~ds1-1) unstable; urgency=medium + + * Update to 1.8.2 upstream release + * Rename golang-docker-dev package to golang-github-docker-docker-dev + * Add SELinux support (Closes: #799620) + + -- Tianon Gravi Wed, 28 Oct 2015 14:21:00 -0700 + +docker.io (1.7.1~dfsg1-1) unstable; urgency=medium + + * Update to 1.7.1 upstream release + * Remove patches applied upstream; refresh other patches + * Update Build-Depends + + -- Tianon Gravi Wed, 26 Aug 2015 10:13:48 -0700 + +docker.io (1.6.2~dfsg1-2) unstable; urgency=medium + + * Add DEP8 tests + - integration: runs upstream's integration tests + * Replace "code.google.com/p/go.net" with canonical "golang.org/x/net" + (Closes: #789736) + + -- Tianon Gravi Wed, 01 Jul 2015 07:45:19 -0600 + +docker.io (1.6.2~dfsg1-1) unstable; urgency=medium + + * Update to 1.6.2 upstream release + * Update deps in d/control to match upstream's hack/vendor.sh specifications + + -- Tianon Gravi Thu, 21 May 2015 00:47:43 -0600 + +docker.io (1.6.1+dfsg1-2) unstable; urgency=medium + + * Add --no-restart-on-upgrade to dh_installinit so that we don't force + a stop on upgrade, which can cause other units to fall over. Many thanks + to Michael Stapelberg (sECuRE) for the tip! + + -- Paul Tagliamonte Sun, 10 May 2015 13:02:54 -0400 + +docker.io (1.6.1+dfsg1-1) unstable; urgency=high + + * Update to 1.6.1 upstream release (Closes: #784726) + - CVE-2015-3627 + Insecure opening of file-descriptor 1 leading to privilege escalation + - CVE-2015-3629 + Symlink traversal on container respawn allows local privilege escalation + - CVE-2015-3630 + Read/write proc paths allow host modification & information disclosure + - CVE-2015-3631 + Volume mounts allow LSM profile escalation + + -- Tianon Gravi Fri, 08 May 2015 17:57:10 -0600 + +docker.io (1.6.0+dfsg1-1) unstable; urgency=medium + + * Upload to unstable + * Backport PR 12943 to support golang-go-patricia 2.* + * Remove convenience copies of cgroupfs-mount in init.d / upstart scripts + (Re: #783143) + + -- Tianon Gravi Tue, 05 May 2015 15:10:49 -0600 + +docker.io (1.6.0+dfsg1-1~exp1) experimental; urgency=medium + + * Update to 1.6.0 upstream release + * Adjust "repack.sh" to be more tolerant of "dfsg" suffixes + + -- Tianon Gravi Thu, 16 Apr 2015 18:00:21 -0600 + +docker.io (1.6.0~rc7~dfsg1-1~exp1) experimental; urgency=low + + * Update to 1.6.0-rc7 upstream release + + -- Tianon Gravi Wed, 15 Apr 2015 19:35:46 -0600 + +docker.io (1.6.0~rc4~dfsg1-1) experimental; urgency=low + + [ Tianon Gravi ] + * Update to 1.6.0-rc4 upstream release + - drop golang 1.2 support (no longer supported upstream) + - update Homepage to https://dockerproject.com + - add check-config.sh to /usr/share/docker.io/contrib + - add "distribution" as a new multitarball orig + - backport auto "btrfs_noversion" patch from + https://github.com/docker/docker/pull/12048 + (simplifying our logic for detecting whether to use it) + - switch from dh-golang to direct install since we're not actually using the + features it offers (due to upstream's build system) + - enable "docker.service" on boot by default for restart policies to work + + [ Felipe Sateler ] + * Add Built-Using for glibc (Closes: #769351). + + -- Tianon Gravi Mon, 06 Apr 2015 17:11:33 -0600 + +docker.io (1.5.0~dfsg1-1) experimental; urgency=low + + * Update to 1.5.0 upstream release (Closes: #773495) + * Remove several patches applied upstream! + - 9637-fix-nuke-bashism.patch + - enable-non-amd64-arches.patch + * Fix btrfs-tools handling to allow for building with btrfs-tools < 1.16.1 + + -- Tianon Gravi Tue, 10 Mar 2015 22:58:49 -0600 + +docker.io (1.3.3~dfsg1-2) unstable; urgency=medium + + * Add fatal-error-old-kernels.patch to make Docker refuse to start on old, + unsupported kernels (Closes: #774376) + * Fix dh_auto_clean to clean up after the build properly, especially to avoid + FTBFS when built twice (Closes: #774482) + + -- Tianon Gravi Sat, 03 Jan 2015 00:11:47 -0700 + +docker.io (1.3.3~dfsg1-1) unstable; urgency=medium + + [ Tianon Gravi ] + * Update to 1.3.3 upstream release (Closes: #772909) + - Fix for CVE-2014-9356 (Path traversal during processing of absolute + symlinks) + - Fix for CVE-2014-9357 (Escalation of privileges during decompression of + LZMA (.xz) archives) + - Fix for CVE-2014-9358 (Path traversal and spoofing opportunities presented + through image identifiers) + * Fix bashism in nuke-graph-directory.sh (Closes: #772261) + + [ Didier Roche ] + * Support starting systemd service without /etc/default/docker + (Closes: #770293) + + -- Tianon Gravi Thu, 18 Dec 2014 21:54:12 -0700 + +docker.io (1.3.2~dfsg1-1) unstable; urgency=high + + * Severity is set to high due to the sensitive nature of the CVEs this + upload fixes. + * Update to 1.3.2 upstream release + - Fix for CVE-2014-6407 (Archive extraction host privilege escalation) + - Fix for CVE-2014-6408 (Security options applied to image could lead + to container escalation) + * Remove Daniel Mizyrycki from Uploaders. Thanks for all your work! + + -- Paul Tagliamonte Mon, 24 Nov 2014 19:14:28 -0500 + +docker.io (1.3.1~dfsg1-2) unstable; urgency=medium + + * Remove deprecated /usr/bin/docker.io symlink + - added as a temporary shim in 1.0.0~dfsg1-1 (13 Jun 2014) + - unused by package-installed files in 1.2.0~dfsg1-1 (13 Sep 2014) + + -- Tianon Gravi Fri, 07 Nov 2014 13:11:34 -0700 + +docker.io (1.3.1~dfsg1-1) unstable; urgency=high + + * Update to 1.3.1 upstream release + - fix for CVE-2014-5277 + - https://groups.google.com/d/topic/docker-user/oYm0i3xShJU/discussion + + -- Tianon Gravi Mon, 03 Nov 2014 08:26:29 -0700 + +docker.io (1.3.0~dfsg1-1) unstable; urgency=medium + + * Updated to 1.3.0 upstream release. + * Enable systemd socket activation (Closes: #752555). + + -- Tianon Gravi Fri, 17 Oct 2014 00:56:07 -0600 + +docker.io (1.2.0~dfsg1-2) unstable; urgency=medium + + * Added "golang-docker-dev" package for the reusable bits of Docker's source. + + -- Tianon Gravi Thu, 09 Oct 2014 00:08:11 +0000 + +docker.io (1.2.0~dfsg1-1) unstable; urgency=medium + + * Updated to 1.2.0 upstream release (Closes: #757183, #757023, #757024). + * Added upstream man pages. + * Updated bash and zsh completions to be installed as "docker" and "_docker". + * Updated init scripts to also be installed as "docker". + * Fixed "equivalent" typo in README.Debian (Closes: #756395). Thanks Reuben! + * Removed "docker.io" mention in README.Debian (Closes: #756290). Thanks + Olivier! + + -- Tianon Gravi Sat, 13 Sep 2014 11:43:17 -0600 + +docker.io (1.0.0~dfsg1-1) unstable; urgency=medium + + * Updated to 1.0.0 upstream release. Huzzah! + * I've removed what is commonly called a `button' of patches against + the docker package. Exact patches: + - bash-completion-docker.io.patch + - systemd-docker.io.patch + - sysvinit-provides-docker.io.patch + - zsh-completion-docker.io.patch + - mkimage-docker.io.patch + * I know y'all are guessing why; and the answer's pretty simple -- we're + no longer docker.io(1). Since the src:docker package now ships wmdocker(1), + we can safely declare a breaks/replaces on the pre-wmdocker version of the + package, allowing existing users to safely update, both src:docker and + src:docker.io side. This brings us into line with other distros, which + now ship wmdocker(1) and docker(1). + * As a stop-gap, I'm still shipping a docker.io(1) symlink to allow + migration away. + + -- Paul Tagliamonte Fri, 13 Jun 2014 21:04:53 -0400 + +docker.io (0.11.1~dfsg1-1) unstable; urgency=medium + + [ Paul Tagliamonte ] + * Use EnvironmentFile with the systemd unit file. (Closes: #746774) + * Patch out version checking code. (Closes: #747140) + * Remove all host checking for non-amd64 host arches. Let docker build + and run on all platforms now. (Closes: #747139, #739914) + + [ Tianon Gravi ] + * Updated to 0.11.1 upstream release. + * Added backported upstream patch for removing RemoteAddr assumptions + that cause events to not be delivered to more than one unix socket + listener. + + -- Tianon Gravi Fri, 09 May 2014 17:30:45 -0400 + +docker.io (0.9.1~dfsg1-2) unstable; urgency=medium + + * Added upstream apparmor patch to fix newer apparmor versions (such as the + version appearing in Ubuntu 14.04). + * Added mkimage-* docker.io binary name patches (Closes: #740855). + + -- Tianon Gravi Tue, 08 Apr 2014 23:19:08 -0400 + +docker.io (0.9.1~dfsg1-1) unstable; urgency=medium + + * Updated to 0.9.1 upstream release (Closes: #743424). + * Added cgroupfs-mount dependency (Closes: #742641). + * Added Suggests entries for optional features, chiefly lxc (Closes: #742081). + * Added notes about "root-equivalence" to README.Debian (Closes: #742387). + + -- Tianon Gravi Thu, 03 Apr 2014 21:38:30 -0400 + +docker.io (0.9.0+dfsg1-1) unstable; urgency=medium + + * Updated README.Debian to not be quite so outdated (Closes: #740850). + * Updated to 0.9.0 upstream release. + + -- Tianon Gravi Tue, 11 Mar 2014 22:24:31 -0400 + +docker.io (0.8.1+dfsg1-1) unstable; urgency=medium + + * Updated to 0.8.1 upstream release. + + -- Tianon Gravi Tue, 25 Feb 2014 20:56:31 -0500 + +docker.io (0.8.0+dfsg1-2) unstable; urgency=medium + + [ Tianon Gravi ] + * Added more license notes to debian/copyright (Closes: #738627). + + -- Tianon Gravi Sat, 15 Feb 2014 17:51:58 -0500 + +docker.io (0.8.0+dfsg1-1) unstable; urgency=medium + + [ Prach Pongpanich ] + * Added zsh completion. + + [ Tianon Gravi ] + * Updated to 0.8.0 upstream release. + * Added vim syntax files in new vim-syntax-docker package. + * Added note about minimum recommended kernel version to Description. + * Added contrib/*-integration files in /usr/share/docker.io/contrib. + + -- Tianon Gravi Mon, 10 Feb 2014 20:41:10 -0500 + +docker.io (0.7.6+dfsg1-1) unstable; urgency=medium + + [ Johan Euphrosine ] + * Updated to 0.7.6. + * Added dependency to gocapability. + * Clean patches. + + [ Tianon Gravi ] + * Added contrib/mk* scripts from upstream into /usr/share/docker.io/contrib + (Closes: #736068). + * Added upstream udev rules file to stop device-mapper devices and mounts from + appearing in desktop environments through udisks. + + -- Johan Euphrosine Wed, 22 Jan 2014 22:50:47 -0500 + +docker.io (0.7.1+dfsg1-1) unstable; urgency=medium + + [ Prach Pongpanich ] + * Fixed "docker: command not found" errors while using bash tab completion + (Closes: #735372). + + [ Tianon Gravi ] + * Updated to 0.7.1 upstream release (while we wait for gocapability to be + packaged). + * Added xz-utils recommend which is required for decompressing certain images + from the index. + + -- Tianon Gravi Wed, 15 Jan 2014 20:22:34 -0500 + +docker.io (0.6.7+dfsg1-3) unstable; urgency=medium + + * Fixed FTBFS on non-amd64 platforms by setting the correct GOPATH. + * Fixed issues with Docker finding a valid dockerinit (Closes: #734758). + * Added aufs-tools dependency. + + -- Tianon Gravi Thu, 09 Jan 2014 20:10:20 -0500 + +docker.io (0.6.7+dfsg1-2) unstable; urgency=medium + + * Added iptables dependency required for Docker to start. + * Added ca-certificates recommend required for pulling from the index. + + -- Tianon Gravi Wed, 08 Jan 2014 19:14:02 -0500 + +docker.io (0.6.7+dfsg1-1) unstable; urgency=medium + + * Initial release (Closes: #706060, #730569) + * Document missing licenses in the source tree. Bad, paultag. Thanks + alteholz. + + -- Paul Tagliamonte Tue, 07 Jan 2014 21:06:10 -0500 diff --git a/clean b/clean new file mode 100644 index 00000000..26382b29 --- /dev/null +++ b/clean @@ -0,0 +1,5 @@ +## Useless non-doc files: +docs/.gitignore +docs/Dockerfile +docs/Makefile +docs/touch-up.sh diff --git a/compat b/compat new file mode 100644 index 00000000..ec635144 --- /dev/null +++ b/compat @@ -0,0 +1 @@ +9 diff --git a/control b/control new file mode 100644 index 00000000..cd0a71fc --- /dev/null +++ b/control @@ -0,0 +1,184 @@ +Source: docker.io +Section: admin +Priority: optional +Maintainer: Paul Tagliamonte +Uploaders: Docker Packaging Team , + Tianon Gravi +Build-Conflicts: golang-github-docker-docker-dev +Build-Depends: bash-completion, + btrfs-progs, + ca-certificates, + debhelper (>= 9), + dh-exec, + dh-golang (>= 1.14~), + dh-systemd, + git, + go-md2man (>= 1.0.3~), + golang-any (>= 2:1.6~) | golang-1.6-go, + golang-dbus-dev (>= 3~) | golang-github-godbus-dbus-dev (>= 3~), + golang-dns-dev (>= 0.0~git20151201~) | golang-github-miekg-dns-dev (>= 0.0~git20151201~), + golang-ed25519-dev (>= 0~20140907~) | golang-github-agl-ed25519-dev (>= 0~20140907~), + golang-etcd-server-dev (>= 2.2.0~) | golang-github-coreos-etcd-dev (>= 2.2.0~), + golang-github-armon-go-metrics-dev (>= 0.0~git20150106~), + golang-github-aws-aws-sdk-go-dev (>= 0.9.9~), + golang-github-boltdb-bolt-dev (>= 1.2.0~), + golang-github-burntsushi-toml-dev (>= 0.0~git20150127~), + golang-github-coreos-go-systemd-dev (>= 4~), + golang-github-deckarep-golang-set-dev (>= 0.0~git20141121~), + golang-github-docker-containerd-dev (>= 0.2.1~), + golang-github-docker-distribution-dev (>= 2.4.1~), + golang-github-docker-engine-api-dev (>= 0.3.3~), + golang-github-docker-go-connections-dev (>= 0.2.0~), + golang-github-docker-go-dev (>= 0.0~git20151102~), + golang-github-docker-go-units-dev (>= 0.0~git20151218~), + golang-github-docker-libkv-dev (>= 0.0~git20151014~), + golang-github-docker-libnetwork-dev (>= 0.7.0~rc.6~), + golang-github-docker-libtrust-dev (>= 0.0~git20150526~), + golang-github-fluent-fluent-logger-golang-dev (>= 1.1.0~), + golang-github-fsnotify-fsnotify-dev (>= 1.2.0~) | golang-gopkg-fsnotify.v1-dev (>= 1.2.0~), + golang-github-gorilla-context-dev (>= 0.0~git20140604~), + golang-github-gorilla-mux-dev (>= 0.0~git20140926~), + golang-github-graylog2-go-gelf-dev (>= 0.0~git20160208~), + golang-github-hashicorp-consul-dev (>= 0.5.2~), + golang-github-hashicorp-go-msgpack-dev (>= 0.0~git20140221~), + golang-github-hashicorp-memberlist-dev (>= 0.0~git20150107~), + golang-github-hashicorp-serf-dev (>= 0.0~git20150212~), + golang-github-imdario-mergo-dev (>= 0.2.1~), + golang-github-kr-pty-dev (>= 0.0~git20150511~), + golang-github-mattn-go-shellwords-dev (>= 1.0.0~), + golang-github-mattn-go-sqlite3-dev (>= 1.1.0~), + golang-github-miekg-pkcs11-dev (>= 0.0~git20160222~), + golang-github-opencontainers-runc-dev (>= 0.1.0~), + golang-github-opencontainers-specs-dev (>= 0.0~git20160422~), + golang-github-philhofer-fwd-dev (>= 0.0~git20150401~), + golang-github-racksec-srslog-dev (>= 0.0~git20160120~), + golang-github-samuel-go-zookeeper-dev (>= 0.0~git20150415~), + golang-github-sirupsen-logrus-dev (>= 0.9.0~), + golang-github-tchap-go-patricia-dev (>= 2.1.0~), + golang-github-tinylib-msgp-dev (>= 0.0~git20150407~), + golang-github-ugorji-go-codec-dev (>= 0.0~git20150803~) | golang-github-ugorji-go-dev (>= 0.0~git20150803~), + golang-github-vaughan0-go-ini-dev (>= 0.0~git20130923~), + golang-github-vbatts-tar-split-dev (>= 0.9.11~), + golang-github-vdemeester-shakers-dev (>= 0.0~git20160210~), + golang-github-vishvananda-netlink-dev (>= 0.0~git20160214~), + golang-github-vishvananda-netns-dev (>= 0.0~git20150710~), + golang-go-zfs-dev (>= 2.1.1~) | golang-github-mistifyio-go-zfs-dev (>= 2.1.1~), + golang-gocapability-dev (>= 0.0~git20150614~) | golang-github-syndtr-gocapability-dev (>= 0.0~git20150614~), + golang-golang-x-net-dev (>= 0.0~git20160407~), + golang-golang-x-oauth2-dev (>= 0.0~git20151203~), + golang-google-api-dev (>= 0.0~git20151216~), + golang-google-cloud-dev (>= 0.0~git20151216~), + golang-google-grpc-dev (>= 0.0~git20151216~), + golang-gopkg-check.v1-dev (>= 0.0~git20160311~) | golang-github-go-check-check-dev (>= 0.0~git20160311~), + golang-goprotobuf-dev (>= 0.0~git20151207~) | golang-github-golang-protobuf-dev (>= 0.0~git20151207~), + libapparmor-dev, + libdevmapper-dev (>= 2:1.02.68~), + pkg-config, + procps +Standards-Version: 3.9.8 +Homepage: https://dockerproject.org +Vcs-Git: https://anonscm.debian.org/git/docker/docker.io.git +Vcs-Browser: https://anonscm.debian.org/cgit/docker/docker.io.git +XS-Go-Import-Path: github.com/docker/docker + +Package: docker.io +Architecture: linux-any +Depends: adduser, + containerd (>= 0.2.1~), + iptables, + runc (>= 0.1.0~), + ${misc:Depends}, + ${perl:Depends}, + ${shlibs:Depends} +Recommends: ca-certificates, + cgroupfs-mount | cgroup-lite, + git, + xz-utils, + ${apparmor:Recommends} +Replaces: docker (<< 1.5~) +Breaks: docker (<< 1.5~) +Suggests: aufs-tools, btrfs-progs, debootstrap, lxc, rinse, zfs-fuse | zfsutils +Built-Using: ${misc:Built-Using}, ${libc:Built-Using} +Description: Linux container runtime + Docker complements kernel namespacing with a high-level API which operates at + the process level. It runs unix processes with strong guarantees of isolation + and repeatability across servers. + . + Docker is a great building block for automating distributed systems: + large-scale web deployments, database clusters, continuous deployment systems, + private PaaS, service-oriented architectures, etc. + . + This package contains the daemon and client. Using docker.io on non-amd64 hosts + is not supported at this time. Please be careful when using it on anything + besides amd64. + . + Also, note that kernel version 3.8 or above is required for proper operation of + the daemon process, and that any lower versions may have subtle and/or glaring + issues. + +Package: vim-syntax-docker +Architecture: all +Depends: vim, ${misc:Depends} +Recommends: vim-addon-manager +Suggests: docker.io +Description: Docker container engine - Vim highlighting syntax files + This package provides syntax files for the Vim editor for editing Dockerfiles + from the Docker container engine. + +Package: golang-github-docker-docker-dev +Architecture: all +Depends: golang-github-docker-go-connections-dev, + golang-github-docker-go-units-dev, + golang-github-docker-libkv-dev, + golang-github-fsnotify-fsnotify-dev, + golang-github-gorilla-mux-dev, + golang-github-mattn-go-shellwords-dev, + golang-github-mattn-go-sqlite3-dev, + golang-github-opencontainers-runc-dev, + golang-github-sirupsen-logrus-dev, + golang-github-tchap-go-patricia-dev, + golang-github-vdemeester-shakers-dev, + golang-golang-x-net-dev, + golang-gopkg-check.v1-dev, + ${misc:Depends} +Built-Using: ${misc:Built-Using} +Replaces: golang-docker-dev (<< 1.8.2~ds1-1~) +Breaks: golang-docker-dev (<< 1.8.2~ds1-1~) +Provides: golang-docker-dev +Description: Externally reusable Go packages included with Docker + These packages are intentionally developed by upstream in such a way that they + are reusable to projects outside Docker and only rely on each other or other + external dependencies to be built. + +Package: golang-docker-dev +Section: oldlibs +Priority: extra +Architecture: all +Depends: golang-github-docker-docker-dev, ${misc:Depends} +Description: Transitional package for golang-github-docker-docker-dev + This is a transitional package to ease upgrades to the + golang-github-docker-docker-dev package. It can safely be removed. + +Package: docker-doc +Provides: docker.io-doc +Section: doc +Architecture: all +Depends: ${misc:Depends} +Description: Linux container runtime -- documentation + Docker complements kernel namespacing with a high-level API which operates at + the process level. It runs unix processes with strong guarantees of isolation + and repeatability across servers. + . + Docker is a great building block for automating distributed systems: + large-scale web deployments, database clusters, continuous deployment systems, + private PaaS, service-oriented architectures, etc. + . + This package contains the daemon and client. Using docker.io on non-amd64 hosts + is not supported at this time. Please be careful when using it on anything + besides amd64. + . + Also, note that kernel version 3.8 or above is required for proper operation of + the daemon process, and that any lower versions may have subtle and/or glaring + issues. + . + This package provides documentation for Docker. diff --git a/copyright b/copyright new file mode 100644 index 00000000..071530c1 --- /dev/null +++ b/copyright @@ -0,0 +1,179 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Docker +Upstream-Contact: Docker, Inc. +Source: https://github.com/docker/docker + +Files: * +Copyright: 2012-2016 Docker, Inc. +License: Apache-2.0 + +Files: debian/* +Copyright: 2013-2014 Daniel Mizyrycki + 2013-2014 Paul Tagliamonte + 2012-2014 Michael Stapelberg + 2013-2014 Tianon Gravi + 2013-2014 Johan Euphrosine + 2014 Prach Pongpanich + 2016 Tim Potter + 2016 Dmitry Smirnov +License: Apache-2.0 + +Files: contrib/init/openrc/docker.initd +Copyright: 1999-2013 Gentoo Foundation +License: GPL-2 + +Files: contrib/syntax/vim/* +Copyright: 2013 Honza Pokorny +License: BSD-2-clause + +Files: + pkg/mflag/* + pkg/symlink/fs.go +Copyright: 2014-2016 The Docker & Go Authors +License: BSD-3-clause-Google + +Files: contrib/completion/zsh/* +Copyright: 2013-2014 Felix Riedel +License: BSD-3-clause-Generic + +Files: contrib/docker-engine-selinux/* +Copyright: 2012-2016 Docker Inc. +License: GPL-2 +Comment: + No explicit copyright statement; assuming upstream copyright. + +Files: vendor/src/github.com/docker/notary/tuf/* +Copyright: 2015 Docker, Inc. + 2014-2015 Prime Directive, Inc. +License: BSD-3-clause-Prime + +License: Apache-2.0 + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + . + http://www.apache.org/licenses/LICENSE-2.0 + . + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + . + On Debian systems, the complete text of the Apache version 2.0 license + can be found in "/usr/share/common-licenses/Apache-2.0". + +License: GPL-2 + This file is part of Buildbot. Buildbot 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, version 2. + . + This program 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 + this program; if not, write to the Free Software Foundation, Inc., 51 + Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + . + On Debian systems, the complete text of the Apache version 2.0 license + can be found in "/usr/share/common-licenses/GPL-2". + +License: BSD-2-clause + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + . + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License: BSD-3-clause-Google + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + . + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License: BSD-3-clause-Generic + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License: BSD-3-clause-Prime + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + . + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Prime Directive, Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/docker-doc.docs b/docker-doc.docs new file mode 100644 index 00000000..a188e069 --- /dev/null +++ b/docker-doc.docs @@ -0,0 +1 @@ +docs/* diff --git a/docker.io.NEWS b/docker.io.NEWS new file mode 100644 index 00000000..82ae42e4 --- /dev/null +++ b/docker.io.NEWS @@ -0,0 +1,26 @@ +docker.io (1.11.2~ds1-1) unstable; urgency=medium + + As of src:linux 4.0+ (specifically, >= 3.18-1~exp1), AUFS support is no longer + included in official Debian-compiled kernels. What this means to Docker users + is that if your existing images are stored within the "AUFS" graph driver that + once you update your kernel, your images (and containers) will become + inaccessible (due to the kernel not having the necessary aufs modules to mount + them). To recover from this, there are a couple options (detailed below). + + 1. Use the included nuke script to blow away your existing "/var/lib/docker" + contents and start fresh with Linux 4.0+: + + service docker stop + /usr/share/docker.io/contrib/nuke-graph-directory.sh /var/lib/docker + service docker start + + 2. Use "docker save" (see "docker help save" for usage) before booting 4.0+ to + preserve your images on-disk as tar files, then follow the nuke step from + the previous option followed by using "docker load" to re-load your images. + + 3. Update to src:linux >= 4.1.1-1~exp1 ("aufs: Apply patches to enable + building aufs out-of-tree"), and then compile the aufs modules out-of-tree + (a package for doing this module compilation automatically doesn't yet + exist at the time of this writing, but might in the future). + + -- Tianon Gravi Tue, 01 Dec 2015 01:02:44 -0800 diff --git a/docker.io.bash-completion b/docker.io.bash-completion new file mode 100644 index 00000000..6ea11193 --- /dev/null +++ b/docker.io.bash-completion @@ -0,0 +1 @@ +contrib/completion/bash/docker diff --git a/docker.io.dirs b/docker.io.dirs new file mode 100644 index 00000000..4d7117b0 --- /dev/null +++ b/docker.io.dirs @@ -0,0 +1 @@ +etc/docker diff --git a/docker.io.docker.default b/docker.io.docker.default new file mode 100644 index 00000000..802416a2 --- /dev/null +++ b/docker.io.docker.default @@ -0,0 +1,12 @@ +# Here in Debian, this file is sourced by: +# - /etc/init.d/docker (sysvinit) +# - /etc/init/docker (upstart) +# - systemd's docker.service + +# Use of this file for configuring your Docker daemon is discouraged. + +# The recommended alternative is "/etc/docker/daemon.json", as described in: +# https://docs.docker.com/v1.11/engine/reference/commandline/daemon/#daemon-configuration-file + +# If that does not suit your needs, try a systemd drop-in file, as described in: +# https://docs.docker.com/v1.11/engine/admin/systemd/#custom-docker-daemon-options diff --git a/docker.io.docker.init b/docker.io.docker.init new file mode 120000 index 00000000..e27f0495 --- /dev/null +++ b/docker.io.docker.init @@ -0,0 +1 @@ +../contrib/init/sysvinit-debian/docker \ No newline at end of file diff --git a/docker.io.docker.service b/docker.io.docker.service new file mode 120000 index 00000000..747caae1 --- /dev/null +++ b/docker.io.docker.service @@ -0,0 +1 @@ +../contrib/init/systemd/docker.service \ No newline at end of file diff --git a/docker.io.docker.upstart b/docker.io.docker.upstart new file mode 120000 index 00000000..4df3220e --- /dev/null +++ b/docker.io.docker.upstart @@ -0,0 +1 @@ +../contrib/init/upstart/docker.conf \ No newline at end of file diff --git a/docker.io.docs b/docker.io.docs new file mode 100644 index 00000000..ac2a209b --- /dev/null +++ b/docker.io.docs @@ -0,0 +1,2 @@ +README.md +ROADMAP.md diff --git a/docker.io.install b/docker.io.install new file mode 100755 index 00000000..6a1f54b4 --- /dev/null +++ b/docker.io.install @@ -0,0 +1,11 @@ +#!/usr/bin/dh-exec + +# docker itself +bundles/${DOCKER_VERSION}/${DOCKER_BUILD_TARGET}/docker-${DOCKER_VERSION} => usr/bin/docker + +contrib/*-integration usr/share/docker.io/contrib/ +contrib/check-config.sh usr/share/docker.io/contrib/ +contrib/completion/zsh/_docker usr/share/zsh/vendor-completions/ +contrib/init/systemd/docker.socket lib/systemd/system/ +contrib/mk* usr/share/docker.io/contrib/ +contrib/nuke-graph-directory.sh usr/share/docker.io/contrib/ diff --git a/docker.io.maintscript b/docker.io.maintscript new file mode 100644 index 00000000..421ce02b --- /dev/null +++ b/docker.io.maintscript @@ -0,0 +1,5 @@ +mv_conffile /etc/bash_completion.d/docker.io /etc/bash_completion.d/docker 1.2.0~ +mv_conffile /etc/default/docker.io /etc/default/docker 1.2.0~ +mv_conffile /etc/init.d/docker.io /etc/init.d/docker 1.2.0~ +mv_conffile /etc/init/docker.io.conf /etc/init/docker.conf 1.2.0~ +rm_conffile /etc/bash_completion.d/docker 1.11.2~ diff --git a/docker.io.manpages b/docker.io.manpages new file mode 100644 index 00000000..1aa62186 --- /dev/null +++ b/docker.io.manpages @@ -0,0 +1 @@ +man/man*/* diff --git a/docker.io.postinst b/docker.io.postinst new file mode 100644 index 00000000..5fd88472 --- /dev/null +++ b/docker.io.postinst @@ -0,0 +1,18 @@ +#!/bin/sh +set -e + +case "$1" in + configure) + if [ -z "$2" ]; then + addgroup --system docker + fi + ;; + abort-*) + # How'd we get here?? + exit 1 + ;; + *) + ;; +esac + +#DEBHELPER# diff --git a/docker.io.postrm b/docker.io.postrm new file mode 100644 index 00000000..f01f7c71 --- /dev/null +++ b/docker.io.postrm @@ -0,0 +1,17 @@ +#!/bin/sh +set -e + +#DEBHELPER# + +case "$1" in + purge) + # if we have our saved "nuke-graph-directory.sh", let's use it + # see also docker.io.prerm + if [ -x /var/lib/docker/nuke-graph-directory.sh ]; then + /var/lib/docker/nuke-graph-directory.sh /var/lib/docker + fi + ;; + + *) + ;; +esac diff --git a/docker.io.prerm b/docker.io.prerm new file mode 100644 index 00000000..71f9e6e6 --- /dev/null +++ b/docker.io.prerm @@ -0,0 +1,23 @@ +#!/bin/sh +set -e + +case "$1" in + remove) + # if we're removing, we need to save "nuke-graph-directory.sh" so that + # we can still purge "/var/lib/docker" later if necessary + # see also docker.io.postrm + if \ + [ -d /var/lib/docker ] \ + && [ -x /usr/share/docker.io/contrib/nuke-graph-directory.sh ] \ + ; then + if cp -v /usr/share/docker.io/contrib/nuke-graph-directory.sh /var/lib/docker/; then + chmod +x /var/lib/docker/nuke-graph-directory.sh || : + fi + fi + ;; + + *) + ;; +esac + +#DEBHELPER# diff --git a/docker.io.udev b/docker.io.udev new file mode 120000 index 00000000..d7fd2eb6 --- /dev/null +++ b/docker.io.udev @@ -0,0 +1 @@ +../contrib/udev/80-docker.rules \ No newline at end of file diff --git a/gbp.conf b/gbp.conf new file mode 100644 index 00000000..b465658e --- /dev/null +++ b/gbp.conf @@ -0,0 +1,15 @@ +[DEFAULT] +cleaner = fakeroot debian/rules clean +pristine-tar = True +merge = False +debian-tag = %(version)s + +[git-buildpackage] +export-dir = ../build-area/ +tarball-dir = ../tarballs/ + +[dch] +id-length = 0 +meta = True +auto = True +full = True diff --git a/golang-github-docker-docker-dev.install b/golang-github-docker-docker-dev.install new file mode 100755 index 00000000..60ef77de --- /dev/null +++ b/golang-github-docker-docker-dev.install @@ -0,0 +1,5 @@ +#!/usr/bin/dh-exec + +dockerversion usr/share/gocode/src/${DH_GOPKG}/ +pkg usr/share/gocode/src/${DH_GOPKG}/ +opts usr/share/gocode/src/${DH_GOPKG}/ diff --git a/helpers/gen-build-depends.sh b/helpers/gen-build-depends.sh new file mode 100755 index 00000000..763c27c2 --- /dev/null +++ b/helpers/gen-build-depends.sh @@ -0,0 +1,190 @@ +#!/bin/bash +set -eu +set -o pipefail + +goBuildTags='apparmor cgo daemon pkcs11 selinux' + +debDir="$PWD/debian" + +debVer="$(dpkg-parsechangelog -SVersion)" +origVer="${debVer%-*}" # strip everything from the last dash +origVer="$(echo "$origVer" | sed -r 's/^[0-9]+://')" # strip epoch +upstreamVer="${origVer%%[+~]ds*}" +upstreamVer="${upstreamVer//[~]/-}" + +goImportPath="$(awk -F ': ' '$1 == "XS-Go-Import-Path" { print $2; exit }' debian/control)" +[ "$goImportPath" ] + +upstreamArchiveUri="https://$goImportPath/archive/v${upstreamVer}.tar.gz" + +tempDir="$(mktemp -d -t debian-docker-gen-build-depends-XXXXXXXXXX)" +trap "rm -rf '$tempDir'" EXIT +cd "$tempDir" + +mkdir -p "gopath/src/$goImportPath" +wget -qO archive.tar.gz "$upstreamArchiveUri" +tar \ + --extract \ + --file archive.tar.gz \ + --directory "gopath/src/$goImportPath" \ + --strip-components 1 +export GOPATH="$PWD/gopath:$PWD/gopath/src/$goImportPath/vendor" +cd "gopath/src/$goImportPath" + +IFS=$'\n' +# get the full list of "docker/docker" Go packages +goPkgs=( $(go list "$goImportPath/..." | grep -vE "^$goImportPath/vendor/") ) +# get the list of their dependencies, normalized: +# - skip stdlib, docker/docker +# - adjust known hosting locations for their top-level repos +goDeps=( $( + go list \ + -e \ + -tags "$goBuildTags" \ + -f '{{ join .Deps "\n" }}{{ "\n" }}{{ join .TestImports "\n" }}' \ + "${goPkgs[@]}" \ + | grep -vE '^$' \ + | grep -vE '^[^/]+$' \ + | grep -vE "^$goImportPath/" \ + | sort -u \ + | xargs \ + go list \ + -e \ + -f '{{ if not .Standard }}{{ .ImportPath }}{{ end }}' \ + | grep -vE '^$' \ + | sed -r \ + -e 's!^(github.com/[^/]+/[^/]+)/.*$!\1!' \ + -e 's!^(golang.org/x/[^/]+)/.*$!\1!' \ + -e 's!^(google.golang.org/[^/]+)/.*$!\1!' \ + -e 's!^(gopkg.in/[^/]+)/.*$!\1!' \ + | sort -u +) ) +unset IFS + +# converts a given "goPkg" into the relevant Debian "-dev" package name +debian_pkg() { + local goPkg="$1" + local domain="${goPkg%%/*}" + domain="${domain%%.*}" + local goPkgPath="${goPkg#*/}" + local package="golang-$domain-${goPkgPath//\//-}-dev" + package="${package,,}" + echo "$package" +} + +# converts "gitRepo" and "gitRef" into a concrete version number +git_version() { + local goPkg="$1"; shift + local gitRepo="$1"; shift + local gitRef="$1"; shift + + [ "$gitRef" ] || return + + local gitSnapshotPrefix='0.0~git' + + # normalize a few "special" cases + case "$goPkg=$gitRef" in + github.com/docker/go=*-*-*-*) + # turn "v1.5.1-1-1-gbaf439e" into "v1.5.1-1" so we can "ls-remote" and generate via commit instead of version + local remoteCommit="$(git ls-remote "$gitRepo" "refs/tags/${gitRef%-*-*}" | cut -d$'\t' -f1)" + if [ "$remoteCommit" ]; then + gitRef="$remoteCommit" + fi + ;; + + github.com/docker/libnetwork=v0.7.2-rc.1) + # TODO get newer version in the archive + gitRef='v0.7.0~rc.6' + ;; + + github.com/docker/distribution=467fc068d88aa6610691b7f1a677271a3fac4aac) + # TODO get newer version in the archive (467fc068d88aa6610691b7f1a677271a3fac4aac really corresponds to v2.5.0-rc.1+) + gitRef='v2.4.1' + ;; + + github.com/agl/ed25519=*) + gitSnapshotPrefix='0~' + ;; + + github.com/docker/containerd=*|github.com/opencontainers/runc=*) + # attempt to resolve commit to tag + local remoteTag="$(git ls-remote --tags "$gitRepo" | awk -F '[\t/]' '$1 == "'"$gitRef"'" { print $4; exit }')" + if [ "$remoteTag" ]; then + gitRef="$remoteTag" + fi + # TODO get newer (compatible) versions of each of these into the archive + case "$goPkg" in + github.com/docker/containerd) + gitRef='v0.2.1' + ;; + github.com/opencontainers/runc) + gitRef='v0.1.0' + ;; + esac + ;; + esac + + case "$gitRef" in + v[0-9]*|[0-9].*) + echo "${gitRef#v}" + return + ;; + esac + + local commitDate + case "$goPkg" in + github.com/*) + # for GitHub repos, we can shortcut the date calculation (saves a _lot_ of time) + local githubPatchUri="https://$goPkg/commit/$gitRef.patch" + commitDate="$(wget -qO- "$githubPatchUri" | awk -F ': ' '$1 == "Date" { print $2 }' | tail -1)" + # ".patch" returns potentially multiple commits, so we want the final "Date:" value, hence the "tail -1" + ;; + + *) + mkdir -p "$tempDir/git/$goPkg" + git clone --quiet "$gitRepo" "$tempDir/git/$goPkg" + local commitUnix="$(git -C "$tempDir/git/$goPkg" log -1 --format='%at' "$gitRef" --)" + commitDate="@$commitUnix" + ;; + esac + [ "$commitDate" ] + commitDate="$(TZ=UTC date --date="$commitDate" +'%Y%m%d')" + echo "$gitSnapshotPrefix$commitDate" +} + +declare -A transitionals=( + [golang-github-agl-ed25519-dev]='golang-ed25519-dev' + [golang-github-coreos-etcd-dev]='golang-etcd-server-dev' + [golang-github-go-check-check-dev]='golang-gopkg-check.v1-dev' + [golang-github-godbus-dbus-dev]='golang-dbus-dev' + [golang-github-golang-protobuf-dev]='golang-goprotobuf-dev' + [golang-github-miekg-dns-dev]='golang-dns-dev' + [golang-github-mistifyio-go-zfs-dev]='golang-go-zfs-dev' + [golang-github-syndtr-gocapability-dev]='golang-gocapability-dev' + [golang-github-ugorji-go-dev]='golang-github-ugorji-go-codec-dev' + [golang-gopkg-fsnotify.v1-dev]='golang-github-fsnotify-fsnotify-dev' +) + +for goDep in "${goDeps[@]}"; do + if grep -q "^vendor/src/$goDep\$" "$debDir"/repack/keep/* 2>/dev/null; then + # skip vendored deps we don't remove + continue + fi + + debPkg="$(debian_pkg "$goDep")" + + gitRepoRef="$(awk '$1 == "clone" && $2 == "git" && $3 == "'"$goDep"'" { print ($5 && $5 != "#" ? $5 : "") "=" $4; exit }' hack/vendor.sh)" + gitRepo="${gitRepoRef%=*}" + gitRef="${gitRepoRef##$gitRepo=}" + : "${gitRepo:=https://$goDep}" + + debVer="$(git_version "$goDep" "$gitRepo" "$gitRef")" + + # deal with "golang-dns-dev" and friends of that nature + transitional="${transitionals[$debPkg]:-}" + if [ "$transitional" ]; then + echo -n "$transitional${debVer:+ (>= ${debVer}~)} | " + fi + + echo "$debPkg${debVer:+ (>= ${debVer}~)}," +done | sort diff --git a/helpers/gitcommit.sh b/helpers/gitcommit.sh new file mode 100755 index 00000000..3ca038d1 --- /dev/null +++ b/helpers/gitcommit.sh @@ -0,0 +1,34 @@ +#!/bin/bash +set -e + +uVersion="$1" +dVersion="$2" + +if [ -z "$uVersion" ]; then + uVersion="$(cat VERSION)" +fi +if [ -z "$dVersion" ]; then + dVersion="$(dpkg-parsechangelog --show-field Version)" +fi + +if [ "${uVersion%-dev}" = "$uVersion" ]; then + # this is a straight-up release! easy-peasy + exec awk -F ': ' '$1 == "'"$uVersion"'" { print $2 }' debian/upstream-version-gitcommits +fi + +# must be a nightly, so let's look for clues about what the git commit is + +if git rev-parse &> /dev/null; then + # well, this will be easy ;) + exec git rev-parse --short HEAD +fi + +if [ "${dVersion#*+*+}" != "$dVersion" ]; then + # must be something like "1.1.2+10013+8c38a3d-1~utopic1" (nightly!) + commit="${dVersion#*+*+}" + commit="${commit%%-*}" + exec echo "$commit" +fi + +# unknown... +echo >&2 'warning: unable to determine DOCKER_GITCOMMIT' diff --git a/patches/21491--systemd-tasksmax.patch b/patches/21491--systemd-tasksmax.patch new file mode 100644 index 00000000..73eecd98 --- /dev/null +++ b/patches/21491--systemd-tasksmax.patch @@ -0,0 +1,25 @@ +From 33a8ab29ed9e51697772a0642b8d651b9a845532 Mon Sep 17 00:00:00 2001 +From: Pierre Carrier , Tianon Gravi +Date: Thu, 24 Mar 2016 16:14:30 -0700 +Subject: [PATCH] docker.service: don't limit tasks +Origin: https://github.com/docker/docker/pull/21491 + +Signed-off-by: Pierre Carrier +--- + contrib/init/systemd/docker.service | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/contrib/init/systemd/docker.service b/contrib/init/systemd/docker.service +index 75cb68c..28d2f4e 100644 +--- a/contrib/init/systemd/docker.service ++++ b/contrib/init/systemd/docker.service +@@ -14,6 +14,9 @@ MountFlags=slave + LimitNOFILE=1048576 + LimitNPROC=1048576 + LimitCORE=infinity ++# Uncomment TasksMax if your systemd version supports it. ++# Only systemd 226 and above support this version. ++TasksMax=infinity + TimeoutStartSec=0 + # set delegate yes so that systemd does not reset the cgroups of docker containers + Delegate=yes diff --git a/patches/22000--ignore-invalid-host-header.patch b/patches/22000--ignore-invalid-host-header.patch new file mode 100644 index 00000000..2a64ebb2 --- /dev/null +++ b/patches/22000--ignore-invalid-host-header.patch @@ -0,0 +1,336 @@ +Origin: https://github.com/docker/docker/pull/22000, https://github.com/docker/docker/pull/22888, https://github.com/docker/docker/pull/23046 +Author: Antonio Murdaca , Darren Shepherd , Shijiang Wei , Tianon Gravi (rebased for 1.11) +Subject: Ignore invalid "Host:" header between go1.6 and old docker clients + +diff --git a/docker/daemon.go b/docker/daemon.go +index bee921c..7cd8adc 100644 +--- a/docker/daemon.go ++++ b/docker/daemon.go +@@ -250,13 +250,14 @@ func (cli *DaemonCli) CmdDaemon(args ...string) error { + if len(protoAddrParts) != 2 { + logrus.Fatalf("bad format %s, expected PROTO://ADDR", protoAddr) + } +- l, err := listeners.Init(protoAddrParts[0], protoAddrParts[1], serverConfig.SocketGroup, serverConfig.TLSConfig) ++ ls, err := listeners.Init(protoAddrParts[0], protoAddrParts[1], serverConfig.SocketGroup, serverConfig.TLSConfig) + if err != nil { + logrus.Fatal(err) + } ++ ls = wrapListeners(protoAddrParts[0], ls) + + logrus.Debugf("Listener created for HTTP on %s (%s)", protoAddrParts[0], protoAddrParts[1]) +- api.Accept(protoAddrParts[1], l...) ++ api.Accept(protoAddrParts[1], ls...) + } + + if err := migrateKey(); err != nil { +diff --git a/docker/daemon_unix.go b/docker/daemon_unix.go +index b65eb1f..4e4b498 100644 +--- a/docker/daemon_unix.go ++++ b/docker/daemon_unix.go +@@ -4,10 +4,13 @@ package main + + import ( + "fmt" ++ "net" + "os" + "os/signal" + "syscall" + ++ "github.com/docker/docker/docker/hack" ++ + "github.com/Sirupsen/logrus" + apiserver "github.com/docker/docker/api/server" + "github.com/docker/docker/daemon" +@@ -80,3 +83,15 @@ func (cli *DaemonCli) getPlatformRemoteOptions() []libcontainerd.RemoteOption { + } + return opts + } ++ ++func wrapListeners(proto string, ls []net.Listener) []net.Listener { ++ switch proto { ++ case "unix": ++ ls[0] = &hack.MalformedHostHeaderOverride{ls[0]} ++ case "fd": ++ for i := range ls { ++ ls[i] = &hack.MalformedHostHeaderOverride{ls[i]} ++ } ++ } ++ return ls ++} +diff --git a/docker/daemon_windows.go b/docker/daemon_windows.go +index ae8d737..b5ffbf9 100644 +--- a/docker/daemon_windows.go ++++ b/docker/daemon_windows.go +@@ -4,6 +4,7 @@ package main + + import ( + "fmt" ++ "net" + "os" + "syscall" + +@@ -62,3 +63,7 @@ func setupConfigReloadTrap(configFile string, flags *mflag.FlagSet, reload func( + func (cli *DaemonCli) getPlatformRemoteOptions() []libcontainerd.RemoteOption { + return nil + } ++ ++func wrapListeners(proto string, ls []net.Listener) []net.Listener { ++ return ls ++} +diff --git a/docker/hack/malformed_host_override.go b/docker/hack/malformed_host_override.go +new file mode 100644 +index 0000000..d4aa3dd +--- /dev/null ++++ b/docker/hack/malformed_host_override.go +@@ -0,0 +1,121 @@ ++// +build !windows ++ ++package hack ++ ++import "net" ++ ++// MalformedHostHeaderOverride is a wrapper to be able ++// to overcome the 400 Bad request coming from old docker ++// clients that send an invalid Host header. ++type MalformedHostHeaderOverride struct { ++ net.Listener ++} ++ ++// MalformedHostHeaderOverrideConn wraps the underlying unix ++// connection and keeps track of the first read from http.Server ++// which just reads the headers. ++type MalformedHostHeaderOverrideConn struct { ++ net.Conn ++ first bool ++} ++ ++var closeConnHeader = []byte("\r\nConnection: close\r") ++ ++// Read reads the first *read* request from http.Server to inspect ++// the Host header. If the Host starts with / then we're talking to ++// an old docker client which send an invalid Host header. To not ++// error out in http.Server we rewrite the first bytes of the request ++// to sanitize the Host header itself. ++// In case we're not dealing with old docker clients the data is just passed ++// to the server w/o modification. ++func (l *MalformedHostHeaderOverrideConn) Read(b []byte) (n int, err error) { ++ // http.Server uses a 4k buffer ++ if l.first && len(b) == 4096 { ++ // This keeps track of the first read from http.Server which just reads ++ // the headers ++ l.first = false ++ // The first read of the connection by http.Server is done limited to ++ // DefaultMaxHeaderBytes (usually 1 << 20) + 4096. ++ // Here we do the first read which gets us all the http headers to ++ // be inspected and modified below. ++ c, err := l.Conn.Read(b) ++ if err != nil { ++ return c, err ++ } ++ ++ var ( ++ start, end int ++ firstLineFeed = -1 ++ buf []byte ++ ) ++ for i := 0; i <= c-1-7; i++ { ++ if b[i] == '\n' && firstLineFeed == -1 { ++ firstLineFeed = i ++ } ++ if b[i] != '\n' { ++ continue ++ } ++ ++ if b[i+1] == '\r' && b[i+2] == '\n' { ++ return c, nil ++ } ++ ++ if b[i+1] != 'H' { ++ continue ++ } ++ if b[i+2] != 'o' { ++ continue ++ } ++ if b[i+3] != 's' { ++ continue ++ } ++ if b[i+4] != 't' { ++ continue ++ } ++ if b[i+5] != ':' { ++ continue ++ } ++ if b[i+6] != ' ' { ++ continue ++ } ++ if b[i+7] != '/' { ++ continue ++ } ++ // ensure clients other than the docker clients do not get this hack ++ if i != firstLineFeed { ++ return c, nil ++ } ++ start = i + 7 ++ // now find where the value ends ++ for ii, bbb := range b[start:c] { ++ if bbb == '\n' { ++ end = start + ii ++ break ++ } ++ } ++ buf = make([]byte, 0, c+len(closeConnHeader)-(end-start)) ++ // strip the value of the host header and ++ // inject `Connection: close` to ensure we don't reuse this connection ++ buf = append(buf, b[:start]...) ++ buf = append(buf, closeConnHeader...) ++ buf = append(buf, b[end:c]...) ++ copy(b, buf) ++ break ++ } ++ if len(buf) == 0 { ++ return c, nil ++ } ++ return len(buf), nil ++ } ++ return l.Conn.Read(b) ++} ++ ++// Accept makes the listener accepts connections and wraps the connection ++// in a MalformedHostHeaderOverrideConn initilizing first to true. ++func (l *MalformedHostHeaderOverride) Accept() (net.Conn, error) { ++ c, err := l.Listener.Accept() ++ if err != nil { ++ return c, err ++ } ++ return &MalformedHostHeaderOverrideConn{c, true}, nil ++} +diff --git a/docker/hack/malformed_host_override_test.go b/docker/hack/malformed_host_override_test.go +new file mode 100644 +index 0000000..1a0a60b +--- /dev/null ++++ b/docker/hack/malformed_host_override_test.go +@@ -0,0 +1,124 @@ ++// +build !windows ++ ++package hack ++ ++import ( ++ "bytes" ++ "io" ++ "net" ++ "strings" ++ "testing" ++) ++ ++type bufConn struct { ++ net.Conn ++ buf *bytes.Buffer ++} ++ ++func (bc *bufConn) Read(b []byte) (int, error) { ++ return bc.buf.Read(b) ++} ++ ++func TestHeaderOverrideHack(t *testing.T) { ++ tests := [][2][]byte{ ++ { ++ []byte("GET /foo\nHost: /var/run/docker.sock\nUser-Agent: Docker\r\n\r\n"), ++ []byte("GET /foo\nHost: \r\nConnection: close\r\nUser-Agent: Docker\r\n\r\n"), ++ }, ++ { ++ []byte("GET /foo\nHost: /var/run/docker.sock\nUser-Agent: Docker\nFoo: Bar\r\n"), ++ []byte("GET /foo\nHost: \r\nConnection: close\r\nUser-Agent: Docker\nFoo: Bar\r\n"), ++ }, ++ { ++ []byte("GET /foo\nHost: /var/run/docker.sock\nUser-Agent: Docker\r\n\r\ntest something!"), ++ []byte("GET /foo\nHost: \r\nConnection: close\r\nUser-Agent: Docker\r\n\r\ntest something!"), ++ }, ++ { ++ []byte("GET /foo\nHost: /var/run/docker.sock\nUser-Agent: Docker\r\n\r\ntest something! " + strings.Repeat("test", 15000)), ++ []byte("GET /foo\nHost: \r\nConnection: close\r\nUser-Agent: Docker\r\n\r\ntest something! " + strings.Repeat("test", 15000)), ++ }, ++ { ++ []byte("GET /foo\nFoo: Bar\nHost: /var/run/docker.sock\nUser-Agent: Docker\r\n\r\n"), ++ []byte("GET /foo\nFoo: Bar\nHost: /var/run/docker.sock\nUser-Agent: Docker\r\n\r\n"), ++ }, ++ } ++ ++ // Test for https://github.com/docker/docker/issues/23045 ++ h0 := "GET /foo\nUser-Agent: Docker\r\n\r\n" ++ h0 = h0 + strings.Repeat("a", 4096-len(h0)-1) + "\n" ++ tests = append(tests, [2][]byte{[]byte(h0), []byte(h0)}) ++ ++ for _, pair := range tests { ++ read := make([]byte, 4096) ++ client := &bufConn{ ++ buf: bytes.NewBuffer(pair[0]), ++ } ++ l := MalformedHostHeaderOverrideConn{client, true} ++ ++ n, err := l.Read(read) ++ if err != nil && err != io.EOF { ++ t.Fatalf("read: %d - %d, err: %v\n%s", n, len(pair[0]), err, string(read[:n])) ++ } ++ if !bytes.Equal(read[:n], pair[1][:n]) { ++ t.Fatalf("\n%s\n%s\n", read[:n], pair[1][:n]) ++ } ++ } ++} ++ ++func BenchmarkWithHack(b *testing.B) { ++ client, srv := net.Pipe() ++ done := make(chan struct{}) ++ req := []byte("GET /foo\nHost: /var/run/docker.sock\nUser-Agent: Docker\n") ++ read := make([]byte, 4096) ++ b.SetBytes(int64(len(req) * 30)) ++ ++ l := MalformedHostHeaderOverrideConn{client, true} ++ go func() { ++ for { ++ if _, err := srv.Write(req); err != nil { ++ srv.Close() ++ break ++ } ++ l.first = true // make sure each subsequent run uses the hack parsing ++ } ++ close(done) ++ }() ++ ++ for i := 0; i < b.N; i++ { ++ for i := 0; i < 30; i++ { ++ if n, err := l.Read(read); err != nil && err != io.EOF { ++ b.Fatalf("read: %d - %d, err: %v\n%s", n, len(req), err, string(read[:n])) ++ } ++ } ++ } ++ l.Close() ++ <-done ++} ++ ++func BenchmarkNoHack(b *testing.B) { ++ client, srv := net.Pipe() ++ done := make(chan struct{}) ++ req := []byte("GET /foo\nHost: /var/run/docker.sock\nUser-Agent: Docker\n") ++ read := make([]byte, 4096) ++ b.SetBytes(int64(len(req) * 30)) ++ ++ go func() { ++ for { ++ if _, err := srv.Write(req); err != nil { ++ srv.Close() ++ break ++ } ++ } ++ close(done) ++ }() ++ ++ for i := 0; i < b.N; i++ { ++ for i := 0; i < 30; i++ { ++ if _, err := client.Read(read); err != nil && err != io.EOF { ++ b.Fatal(err) ++ } ++ } ++ } ++ client.Close() ++ <-done ++} diff --git a/patches/23063--update-aws-sdk-go.patch b/patches/23063--update-aws-sdk-go.patch new file mode 100644 index 00000000..ff88e99a --- /dev/null +++ b/patches/23063--update-aws-sdk-go.patch @@ -0,0 +1,95 @@ +Description: Update aws-sdk-go +Origin: https://github.com/docker/docker/pull/23063 + +diff --git a/daemon/logger/awslogs/cloudwatchlogs.go b/daemon/logger/awslogs/cloudwatchlogs.go +index 698a95d..78a230f 100644 +--- a/daemon/logger/awslogs/cloudwatchlogs.go ++++ b/daemon/logger/awslogs/cloudwatchlogs.go +@@ -14,9 +14,9 @@ import ( + "github.com/Sirupsen/logrus" + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" +- "github.com/aws/aws-sdk-go/aws/defaults" + "github.com/aws/aws-sdk-go/aws/ec2metadata" + "github.com/aws/aws-sdk-go/aws/request" ++ "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/cloudwatchlogs" + "github.com/docker/docker/daemon/logger" + "github.com/docker/docker/dockerversion" +@@ -66,11 +66,8 @@ type regionFinder interface { + + type byTimestamp []*cloudwatchlogs.InputLogEvent + +-// init registers the awslogs driver and sets the default region, if provided ++// init registers the awslogs driver + func init() { +- if os.Getenv(regionEnvKey) != "" { +- defaults.DefaultConfig.Region = aws.String(os.Getenv(regionEnvKey)) +- } + if err := logger.RegisterLogDriver(name, New); err != nil { + logrus.Fatal(err) + } +@@ -113,7 +110,7 @@ func New(ctx logger.Context) (logger.Logger, error) { + // newRegionFinder is a variable such that the implementation + // can be swapped out for unit tests. + var newRegionFinder = func() regionFinder { +- return ec2metadata.New(nil) ++ return ec2metadata.New(session.New()) + } + + // newAWSLogsClient creates the service client for Amazon CloudWatch Logs. +@@ -121,28 +118,30 @@ var newRegionFinder = func() regionFinder { + // User-Agent string and automatic region detection using the EC2 Instance + // Metadata Service when region is otherwise unspecified. + func newAWSLogsClient(ctx logger.Context) (api, error) { +- config := defaults.DefaultConfig ++ var region *string ++ if os.Getenv(regionEnvKey) != "" { ++ region = aws.String(os.Getenv(regionEnvKey)) ++ } + if ctx.Config[regionKey] != "" { +- config = defaults.DefaultConfig.Merge(&aws.Config{ +- Region: aws.String(ctx.Config[regionKey]), +- }) ++ region = aws.String(ctx.Config[regionKey]) + } +- if config.Region == nil || *config.Region == "" { ++ if region == nil || *region == "" { + logrus.Info("Trying to get region from EC2 Metadata") + ec2MetadataClient := newRegionFinder() +- region, err := ec2MetadataClient.Region() ++ r, err := ec2MetadataClient.Region() + if err != nil { + logrus.WithFields(logrus.Fields{ + "error": err, + }).Error("Could not get region from EC2 metadata, environment, or log option") + return nil, errors.New("Cannot determine region for awslogs driver") + } +- config.Region = ®ion ++ region = &r + } + logrus.WithFields(logrus.Fields{ +- "region": *config.Region, ++ "region": *region, + }).Debug("Created awslogs client") +- client := cloudwatchlogs.New(config) ++ ++ client := cloudwatchlogs.New(session.New(), aws.NewConfig().WithRegion(*region)) + + client.Handlers.Build.PushBackNamed(request.NamedHandler{ + Name: "DockerUserAgentHandler", +diff --git a/daemon/logger/awslogs/cloudwatchlogs_test.go b/daemon/logger/awslogs/cloudwatchlogs_test.go +index 0c53407..48882c4 100644 +--- a/daemon/logger/awslogs/cloudwatchlogs_test.go ++++ b/daemon/logger/awslogs/cloudwatchlogs_test.go +@@ -47,8 +47,8 @@ func TestNewAWSLogsClientUserAgentHandler(t *testing.T) { + }, + } + buildHandlerList.Run(request) +- expectedUserAgentString := fmt.Sprintf("Docker %s (%s) %s/%s", +- dockerversion.Version, runtime.GOOS, aws.SDKName, aws.SDKVersion) ++ expectedUserAgentString := fmt.Sprintf("Docker %s (%s) %s/%s (%s; %s; %s)", ++ dockerversion.Version, runtime.GOOS, aws.SDKName, aws.SDKVersion, runtime.Version(), runtime.GOOS, runtime.GOARCH) + userAgent := request.HTTPRequest.Header.Get("User-Agent") + if userAgent != expectedUserAgentString { + t.Errorf("Wrong User-Agent string, expected \"%s\" but was \"%s\"", diff --git a/patches/cgroupfs-mount-convenience-copy.patch b/patches/cgroupfs-mount-convenience-copy.patch new file mode 100644 index 00000000..938a55c3 --- /dev/null +++ b/patches/cgroupfs-mount-convenience-copy.patch @@ -0,0 +1,81 @@ +Author: Tianon Gravi +Description: remove convenience copies of cgroupfs-mount in init.d / upstart +Forwarded: not-needed +Bug-Debian: https://bugs.debian.org/783143 + +diff --git a/contrib/init/sysvinit-debian/docker b/contrib/init/sysvinit-debian/docker +index 11500a0..3ad9e2e 100755 +--- a/contrib/init/sysvinit-debian/docker ++++ b/contrib/init/sysvinit-debian/docker +@@ -59,37 +59,12 @@ fail_unless_root() { + fi + } + +-cgroupfs_mount() { +- # see also https://github.com/tianon/cgroupfs-mount/blob/master/cgroupfs-mount +- if grep -v '^#' /etc/fstab | grep -q cgroup \ +- || [ ! -e /proc/cgroups ] \ +- || [ ! -d /sys/fs/cgroup ]; then +- return +- fi +- if ! mountpoint -q /sys/fs/cgroup; then +- mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup +- fi +- ( +- cd /sys/fs/cgroup +- for sys in $(awk '!/^#/ { if ($4 == 1) print $1 }' /proc/cgroups); do +- mkdir -p $sys +- if ! mountpoint -q $sys; then +- if ! mount -n -t cgroup -o $sys cgroup $sys; then +- rmdir $sys || true +- fi +- fi +- done +- ) +-} +- + case "$1" in + start) + check_init + + fail_unless_root + +- cgroupfs_mount +- + touch "$DOCKER_LOGFILE" + chgrp docker "$DOCKER_LOGFILE" + +diff --git a/contrib/init/upstart/docker.conf b/contrib/init/upstart/docker.conf +index ec50b35..75858f8 100644 +--- a/contrib/init/upstart/docker.conf ++++ b/contrib/init/upstart/docker.conf +@@ -9,29 +9,6 @@ respawn + + kill timeout 20 + +-pre-start script +- # see also https://github.com/tianon/cgroupfs-mount/blob/master/cgroupfs-mount +- if grep -v '^#' /etc/fstab | grep -q cgroup \ +- || [ ! -e /proc/cgroups ] \ +- || [ ! -d /sys/fs/cgroup ]; then +- exit 0 +- fi +- if ! mountpoint -q /sys/fs/cgroup; then +- mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup +- fi +- ( +- cd /sys/fs/cgroup +- for sys in $(awk '!/^#/ { if ($4 == 1) print $1 }' /proc/cgroups); do +- mkdir -p $sys +- if ! mountpoint -q $sys; then +- if ! mount -n -t cgroup -o $sys cgroup $sys; then +- rmdir $sys || true +- fi +- fi +- done +- ) +-end script +- + script + # modify these in /etc/default/$UPSTART_JOB (/etc/default/docker) + DOCKER=/usr/bin/$UPSTART_JOB diff --git a/patches/change-system-unit-env-file.patch b/patches/change-system-unit-env-file.patch new file mode 100644 index 00000000..242aebf8 --- /dev/null +++ b/patches/change-system-unit-env-file.patch @@ -0,0 +1,20 @@ +Author: Paul R. Tagliamonte +Last-Update: 2014-05-07 +Description: Use EnvironmentFile with the systemd unit file. +Bug-Debian: http://bugs.debian.org/746774 +Forwarded: no + +diff --git a/contrib/init/systemd/docker.service b/contrib/init/systemd/docker.service +index 75cb68c..f98012c 100644 +--- a/contrib/init/systemd/docker.service ++++ b/contrib/init/systemd/docker.service +@@ -9,7 +9,8 @@ Type=notify + # the default is not to use systemd for cgroups because the delegate issues still + # exists and systemd currently does not support the cgroup feature set required + # for containers run by docker +-ExecStart=/usr/bin/docker daemon -H fd:// ++EnvironmentFile=-/etc/default/docker ++ExecStart=/usr/bin/docker daemon -H fd:// $DOCKER_OPTS + MountFlags=slave + LimitNOFILE=1048576 + LimitNPROC=1048576 diff --git a/patches/check-v1.patch b/patches/check-v1.patch new file mode 100644 index 00000000..f2b1ca59 --- /dev/null +++ b/patches/check-v1.patch @@ -0,0 +1,1487 @@ +Description: account for the "github.com/go-check/check" -> "gopkg.in/check.v1" rename +Author: Tianon Gravi +Forwarded: not-needed +Notes: find -name '*.go' -exec sed -i 's!github.com/go-check/check!gopkg.in/check.v1!g' '{}' + && git checkout -- vendor && git diff -- '*.go' > check-v1.patch + +diff --git a/integration-cli/benchmark_test.go b/integration-cli/benchmark_test.go +index 647d014..3398305 100644 +--- a/integration-cli/benchmark_test.go ++++ b/integration-cli/benchmark_test.go +@@ -9,7 +9,7 @@ import ( + "sync" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) BenchmarkConcurrentContainerActions(c *check.C) { +diff --git a/integration-cli/check_test.go b/integration-cli/check_test.go +index aab8e4a..971ac31 100644 +--- a/integration-cli/check_test.go ++++ b/integration-cli/check_test.go +@@ -8,7 +8,7 @@ import ( + + "github.com/docker/docker/cliconfig" + "github.com/docker/docker/pkg/reexec" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func Test(t *testing.T) { +diff --git a/integration-cli/daemon.go b/integration-cli/daemon.go +index 2e3985a..f6f5f55 100644 +--- a/integration-cli/daemon.go ++++ b/integration-cli/daemon.go +@@ -18,7 +18,7 @@ import ( + "github.com/docker/docker/pkg/ioutils" + "github.com/docker/docker/pkg/tlsconfig" + "github.com/docker/go-connections/sockets" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // Daemon represents a Docker daemon for the testing framework. +diff --git a/integration-cli/docker_api_attach_test.go b/integration-cli/docker_api_attach_test.go +index a0a8e7d..620f5a9 100644 +--- a/integration-cli/docker_api_attach_test.go ++++ b/integration-cli/docker_api_attach_test.go +@@ -9,7 +9,7 @@ import ( + "time" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + "golang.org/x/net/websocket" + ) + +diff --git a/integration-cli/docker_api_auth_test.go b/integration-cli/docker_api_auth_test.go +index 63e78ab..6445064 100644 +--- a/integration-cli/docker_api_auth_test.go ++++ b/integration-cli/docker_api_auth_test.go +@@ -5,7 +5,7 @@ import ( + + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/engine-api/types" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // Test case for #22244 +diff --git a/integration-cli/docker_api_build_test.go b/integration-cli/docker_api_build_test.go +index 49de71c..7132900 100644 +--- a/integration-cli/docker_api_build_test.go ++++ b/integration-cli/docker_api_build_test.go +@@ -6,7 +6,7 @@ import ( + "net/http" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestBuildApiDockerfilePath(c *check.C) { +diff --git a/integration-cli/docker_api_containers_test.go b/integration-cli/docker_api_containers_test.go +index 2622a54..2249ed1 100644 +--- a/integration-cli/docker_api_containers_test.go ++++ b/integration-cli/docker_api_containers_test.go +@@ -21,7 +21,7 @@ import ( + "github.com/docker/engine-api/types" + containertypes "github.com/docker/engine-api/types/container" + networktypes "github.com/docker/engine-api/types/network" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestContainerApiGetAll(c *check.C) { +diff --git a/integration-cli/docker_api_create_test.go b/integration-cli/docker_api_create_test.go +index d29b355..727d971 100644 +--- a/integration-cli/docker_api_create_test.go ++++ b/integration-cli/docker_api_create_test.go +@@ -5,7 +5,7 @@ import ( + "strings" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestApiCreateWithNotExistImage(c *check.C) { +diff --git a/integration-cli/docker_api_events_test.go b/integration-cli/docker_api_events_test.go +index cb219fb..b5a6a30 100644 +--- a/integration-cli/docker_api_events_test.go ++++ b/integration-cli/docker_api_events_test.go +@@ -11,7 +11,7 @@ import ( + + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/docker/pkg/jsonmessage" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestEventsApiEmptyOutput(c *check.C) { +diff --git a/integration-cli/docker_api_exec_resize_test.go b/integration-cli/docker_api_exec_resize_test.go +index 2c0c876..cf56a42 100644 +--- a/integration-cli/docker_api_exec_resize_test.go ++++ b/integration-cli/docker_api_exec_resize_test.go +@@ -10,7 +10,7 @@ import ( + "sync" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestExecResizeApiHeightWidthNoInt(c *check.C) { +diff --git a/integration-cli/docker_api_exec_test.go b/integration-cli/docker_api_exec_test.go +index f16582f..c8729ab 100644 +--- a/integration-cli/docker_api_exec_test.go ++++ b/integration-cli/docker_api_exec_test.go +@@ -11,7 +11,7 @@ import ( + "time" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // Regression test for #9414 +diff --git a/integration-cli/docker_api_images_test.go b/integration-cli/docker_api_images_test.go +index 9d35b0c..0bee32c 100644 +--- a/integration-cli/docker_api_images_test.go ++++ b/integration-cli/docker_api_images_test.go +@@ -8,7 +8,7 @@ import ( + + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/engine-api/types" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestApiImagesFilter(c *check.C) { +diff --git a/integration-cli/docker_api_info_test.go b/integration-cli/docker_api_info_test.go +index 9e6af66..a154c15 100644 +--- a/integration-cli/docker_api_info_test.go ++++ b/integration-cli/docker_api_info_test.go +@@ -4,7 +4,7 @@ import ( + "net/http" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestInfoApi(c *check.C) { +diff --git a/integration-cli/docker_api_inspect_test.go b/integration-cli/docker_api_inspect_test.go +index 6b55159..e4a2421 100644 +--- a/integration-cli/docker_api_inspect_test.go ++++ b/integration-cli/docker_api_inspect_test.go +@@ -9,7 +9,7 @@ import ( + "github.com/docker/docker/pkg/stringutils" + "github.com/docker/engine-api/types" + "github.com/docker/engine-api/types/versions/v1p20" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestInspectApiContainerResponse(c *check.C) { +diff --git a/integration-cli/docker_api_inspect_unix_test.go b/integration-cli/docker_api_inspect_unix_test.go +index fe59860..5a9c8a3 100644 +--- a/integration-cli/docker_api_inspect_unix_test.go ++++ b/integration-cli/docker_api_inspect_unix_test.go +@@ -8,7 +8,7 @@ import ( + "net/http" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // #16665 +diff --git a/integration-cli/docker_api_logs_test.go b/integration-cli/docker_api_logs_test.go +index 2ff27f8..c71b1cf 100644 +--- a/integration-cli/docker_api_logs_test.go ++++ b/integration-cli/docker_api_logs_test.go +@@ -9,7 +9,7 @@ import ( + "time" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestLogsApiWithStdout(c *check.C) { +diff --git a/integration-cli/docker_api_network_test.go b/integration-cli/docker_api_network_test.go +index e65c7b5..967a7d2 100644 +--- a/integration-cli/docker_api_network_test.go ++++ b/integration-cli/docker_api_network_test.go +@@ -12,7 +12,7 @@ import ( + "github.com/docker/engine-api/types" + "github.com/docker/engine-api/types/filters" + "github.com/docker/engine-api/types/network" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestApiNetworkGetDefaults(c *check.C) { +diff --git a/integration-cli/docker_api_resize_test.go b/integration-cli/docker_api_resize_test.go +index 73023dd..9466e71 100644 +--- a/integration-cli/docker_api_resize_test.go ++++ b/integration-cli/docker_api_resize_test.go +@@ -5,7 +5,7 @@ import ( + "strings" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestResizeApiResponse(c *check.C) { +diff --git a/integration-cli/docker_api_stats_test.go b/integration-cli/docker_api_stats_test.go +index 7c3f8d3..40082d6 100644 +--- a/integration-cli/docker_api_stats_test.go ++++ b/integration-cli/docker_api_stats_test.go +@@ -13,7 +13,7 @@ import ( + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/docker/pkg/version" + "github.com/docker/engine-api/types" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + var expectedNetworkInterfaceStats = strings.Split("rx_bytes rx_dropped rx_errors rx_packets tx_bytes tx_dropped tx_errors tx_packets", " ") +diff --git a/integration-cli/docker_api_test.go b/integration-cli/docker_api_test.go +index a725777..cb22bb8 100644 +--- a/integration-cli/docker_api_test.go ++++ b/integration-cli/docker_api_test.go +@@ -12,7 +12,7 @@ import ( + + "github.com/docker/docker/api" + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestApiOptionsRoute(c *check.C) { +diff --git a/integration-cli/docker_api_update_unix_test.go b/integration-cli/docker_api_update_unix_test.go +index 607e76a..a5b69ba 100644 +--- a/integration-cli/docker_api_update_unix_test.go ++++ b/integration-cli/docker_api_update_unix_test.go +@@ -6,7 +6,7 @@ import ( + "strings" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestApiUpdateContainer(c *check.C) { +diff --git a/integration-cli/docker_api_version_test.go b/integration-cli/docker_api_version_test.go +index ccb1484..d71a6bb 100644 +--- a/integration-cli/docker_api_version_test.go ++++ b/integration-cli/docker_api_version_test.go +@@ -7,7 +7,7 @@ import ( + "github.com/docker/docker/dockerversion" + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/engine-api/types" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestGetVersion(c *check.C) { +diff --git a/integration-cli/docker_api_volumes_test.go b/integration-cli/docker_api_volumes_test.go +index 732271d..d4ed266 100644 +--- a/integration-cli/docker_api_volumes_test.go ++++ b/integration-cli/docker_api_volumes_test.go +@@ -7,7 +7,7 @@ import ( + + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/engine-api/types" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestVolumesApiList(c *check.C) { +diff --git a/integration-cli/docker_cli_attach_test.go b/integration-cli/docker_cli_attach_test.go +index 0ac3e1a..91934ad 100644 +--- a/integration-cli/docker_cli_attach_test.go ++++ b/integration-cli/docker_cli_attach_test.go +@@ -10,7 +10,7 @@ import ( + "time" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + const attachWait = 5 * time.Second +diff --git a/integration-cli/docker_cli_attach_unix_test.go b/integration-cli/docker_cli_attach_unix_test.go +index 7af761d..b5eab25 100644 +--- a/integration-cli/docker_cli_attach_unix_test.go ++++ b/integration-cli/docker_cli_attach_unix_test.go +@@ -10,7 +10,7 @@ import ( + + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/docker/pkg/stringid" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + "github.com/kr/pty" + ) + +diff --git a/integration-cli/docker_cli_authz_unix_test.go b/integration-cli/docker_cli_authz_unix_test.go +index 0a208d7..ee469b8 100644 +--- a/integration-cli/docker_cli_authz_unix_test.go ++++ b/integration-cli/docker_cli_authz_unix_test.go +@@ -20,7 +20,7 @@ import ( + "github.com/docker/docker/pkg/authorization" + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/docker/pkg/plugins" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + const ( +diff --git a/integration-cli/docker_cli_build_test.go b/integration-cli/docker_cli_build_test.go +index a53df64..e759574 100644 +--- a/integration-cli/docker_cli_build_test.go ++++ b/integration-cli/docker_cli_build_test.go +@@ -21,7 +21,7 @@ import ( + "github.com/docker/docker/pkg/archive" + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/docker/pkg/stringutils" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestBuildJSONEmptyRun(c *check.C) { +diff --git a/integration-cli/docker_cli_build_unix_test.go b/integration-cli/docker_cli_build_unix_test.go +index 56ab66e..179eef2 100644 +--- a/integration-cli/docker_cli_build_unix_test.go ++++ b/integration-cli/docker_cli_build_unix_test.go +@@ -16,7 +16,7 @@ import ( + + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/go-units" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestBuildResourceConstraintsAreUsed(c *check.C) { +diff --git a/integration-cli/docker_cli_by_digest_test.go b/integration-cli/docker_cli_by_digest_test.go +index f3948d6..713d409 100644 +--- a/integration-cli/docker_cli_by_digest_test.go ++++ b/integration-cli/docker_cli_by_digest_test.go +@@ -14,7 +14,7 @@ import ( + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/docker/pkg/stringutils" + "github.com/docker/engine-api/types" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + var ( +diff --git a/integration-cli/docker_cli_commit_test.go b/integration-cli/docker_cli_commit_test.go +index 086a203..42fc2d5 100644 +--- a/integration-cli/docker_cli_commit_test.go ++++ b/integration-cli/docker_cli_commit_test.go +@@ -4,7 +4,7 @@ import ( + "strings" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestCommitAfterContainerIsDone(c *check.C) { +diff --git a/integration-cli/docker_cli_config_test.go b/integration-cli/docker_cli_config_test.go +index 6015231..568954b 100644 +--- a/integration-cli/docker_cli_config_test.go ++++ b/integration-cli/docker_cli_config_test.go +@@ -12,7 +12,7 @@ import ( + "github.com/docker/docker/dockerversion" + "github.com/docker/docker/pkg/homedir" + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestConfigHttpHeader(c *check.C) { +diff --git a/integration-cli/docker_cli_cp_from_container_test.go b/integration-cli/docker_cli_cp_from_container_test.go +index 677085a..470b498 100644 +--- a/integration-cli/docker_cli_cp_from_container_test.go ++++ b/integration-cli/docker_cli_cp_from_container_test.go +@@ -5,7 +5,7 @@ import ( + "path/filepath" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // docker cp CONTAINER:PATH LOCALPATH +diff --git a/integration-cli/docker_cli_cp_test.go b/integration-cli/docker_cli_cp_test.go +index f1ae760..d4de712 100644 +--- a/integration-cli/docker_cli_cp_test.go ++++ b/integration-cli/docker_cli_cp_test.go +@@ -11,7 +11,7 @@ import ( + "strings" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + const ( +diff --git a/integration-cli/docker_cli_cp_to_container_test.go b/integration-cli/docker_cli_cp_to_container_test.go +index 63fbd44..1170cb6 100644 +--- a/integration-cli/docker_cli_cp_to_container_test.go ++++ b/integration-cli/docker_cli_cp_to_container_test.go +@@ -4,7 +4,7 @@ import ( + "os" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // docker cp LOCALPATH CONTAINER:PATH +diff --git a/integration-cli/docker_cli_cp_to_container_unix_test.go b/integration-cli/docker_cli_cp_to_container_unix_test.go +index 45d85ba..be4fac2 100644 +--- a/integration-cli/docker_cli_cp_to_container_unix_test.go ++++ b/integration-cli/docker_cli_cp_to_container_unix_test.go +@@ -9,7 +9,7 @@ import ( + + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/docker/pkg/system" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // Check ownership is root, both in non-userns and userns enabled modes +diff --git a/integration-cli/docker_cli_cp_utils.go b/integration-cli/docker_cli_cp_utils.go +index 0501c5d..6da0da9 100644 +--- a/integration-cli/docker_cli_cp_utils.go ++++ b/integration-cli/docker_cli_cp_utils.go +@@ -11,7 +11,7 @@ import ( + + "github.com/docker/docker/pkg/archive" + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + type fileType uint32 +diff --git a/integration-cli/docker_cli_create_test.go b/integration-cli/docker_cli_create_test.go +index a22bb3e..5e72d19 100644 +--- a/integration-cli/docker_cli_create_test.go ++++ b/integration-cli/docker_cli_create_test.go +@@ -15,7 +15,7 @@ import ( + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/docker/pkg/stringid" + "github.com/docker/go-connections/nat" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // Make sure we can create a simple container with some args +diff --git a/integration-cli/docker_cli_daemon_experimental_test.go b/integration-cli/docker_cli_daemon_experimental_test.go +index fea887d..0e3829d 100644 +--- a/integration-cli/docker_cli_daemon_experimental_test.go ++++ b/integration-cli/docker_cli_daemon_experimental_test.go +@@ -9,7 +9,7 @@ import ( + "strings" + "time" + +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // TestDaemonRestartWithKilledRunningContainer requires live restore of running containers +diff --git a/integration-cli/docker_cli_daemon_not_experimental_test.go b/integration-cli/docker_cli_daemon_not_experimental_test.go +index 8c5634c..584e033 100644 +--- a/integration-cli/docker_cli_daemon_not_experimental_test.go ++++ b/integration-cli/docker_cli_daemon_not_experimental_test.go +@@ -7,7 +7,7 @@ import ( + "os" + "strings" + +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // os.Kill should kill daemon ungracefully, leaving behind container mounts. +diff --git a/integration-cli/docker_cli_daemon_test.go b/integration-cli/docker_cli_daemon_test.go +index 348653b..abcc5f7 100644 +--- a/integration-cli/docker_cli_daemon_test.go ++++ b/integration-cli/docker_cli_daemon_test.go +@@ -25,7 +25,7 @@ import ( + "github.com/docker/go-units" + "github.com/docker/libnetwork/iptables" + "github.com/docker/libtrust" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + "github.com/kr/pty" + ) + +diff --git a/integration-cli/docker_cli_diff_test.go b/integration-cli/docker_cli_diff_test.go +index e0d0914..797f576 100644 +--- a/integration-cli/docker_cli_diff_test.go ++++ b/integration-cli/docker_cli_diff_test.go +@@ -4,7 +4,7 @@ import ( + "strings" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // ensure that an added file shows up in docker diff +diff --git a/integration-cli/docker_cli_events_test.go b/integration-cli/docker_cli_events_test.go +index f17b711..1190607 100644 +--- a/integration-cli/docker_cli_events_test.go ++++ b/integration-cli/docker_cli_events_test.go +@@ -14,7 +14,7 @@ import ( + + "github.com/docker/docker/daemon/events/testutils" + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestEventsTimestampFormats(c *check.C) { +diff --git a/integration-cli/docker_cli_events_unix_test.go b/integration-cli/docker_cli_events_unix_test.go +index c5e48f2..ca8cf1b 100644 +--- a/integration-cli/docker_cli_events_unix_test.go ++++ b/integration-cli/docker_cli_events_unix_test.go +@@ -13,7 +13,7 @@ import ( + "unicode" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + "github.com/kr/pty" + ) + +diff --git a/integration-cli/docker_cli_exec_test.go b/integration-cli/docker_cli_exec_test.go +index a8150ad..007b1a2 100644 +--- a/integration-cli/docker_cli_exec_test.go ++++ b/integration-cli/docker_cli_exec_test.go +@@ -15,7 +15,7 @@ import ( + "time" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestExec(c *check.C) { +diff --git a/integration-cli/docker_cli_exec_unix_test.go b/integration-cli/docker_cli_exec_unix_test.go +index 42db409..a063afa 100644 +--- a/integration-cli/docker_cli_exec_unix_test.go ++++ b/integration-cli/docker_cli_exec_unix_test.go +@@ -10,7 +10,7 @@ import ( + "time" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + "github.com/kr/pty" + ) + +diff --git a/integration-cli/docker_cli_experimental_test.go b/integration-cli/docker_cli_experimental_test.go +index 8795078..c7476cc 100644 +--- a/integration-cli/docker_cli_experimental_test.go ++++ b/integration-cli/docker_cli_experimental_test.go +@@ -4,7 +4,7 @@ package main + + import ( + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + "strings" + ) + +diff --git a/integration-cli/docker_cli_export_import_test.go b/integration-cli/docker_cli_export_import_test.go +index 069dc08..59c79e5 100644 +--- a/integration-cli/docker_cli_export_import_test.go ++++ b/integration-cli/docker_cli_export_import_test.go +@@ -6,7 +6,7 @@ import ( + "strings" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // export an image and try to import it into a new one +diff --git a/integration-cli/docker_cli_external_graphdriver_unix_test.go b/integration-cli/docker_cli_external_graphdriver_unix_test.go +index 33fe405..316bc54 100644 +--- a/integration-cli/docker_cli_external_graphdriver_unix_test.go ++++ b/integration-cli/docker_cli_external_graphdriver_unix_test.go +@@ -17,7 +17,7 @@ import ( + "github.com/docker/docker/daemon/graphdriver/vfs" + "github.com/docker/docker/pkg/archive" + "github.com/docker/docker/pkg/plugins" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func init() { +diff --git a/integration-cli/docker_cli_help_test.go b/integration-cli/docker_cli_help_test.go +index 93ccbeb..123115e 100644 +--- a/integration-cli/docker_cli_help_test.go ++++ b/integration-cli/docker_cli_help_test.go +@@ -8,7 +8,7 @@ import ( + + "github.com/docker/docker/pkg/homedir" + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestHelpTextVerify(c *check.C) { +diff --git a/integration-cli/docker_cli_history_test.go b/integration-cli/docker_cli_history_test.go +index 0ee1c46..b700020 100644 +--- a/integration-cli/docker_cli_history_test.go ++++ b/integration-cli/docker_cli_history_test.go +@@ -7,7 +7,7 @@ import ( + "strings" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // This is a heisen-test. Because the created timestamp of images and the behavior of +diff --git a/integration-cli/docker_cli_images_test.go b/integration-cli/docker_cli_images_test.go +index dbceddf..9720618 100644 +--- a/integration-cli/docker_cli_images_test.go ++++ b/integration-cli/docker_cli_images_test.go +@@ -12,7 +12,7 @@ import ( + + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/docker/pkg/stringid" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestImagesEnsureImageIsListed(c *check.C) { +diff --git a/integration-cli/docker_cli_import_test.go b/integration-cli/docker_cli_import_test.go +index 9420daf..0e33a4e 100644 +--- a/integration-cli/docker_cli_import_test.go ++++ b/integration-cli/docker_cli_import_test.go +@@ -10,7 +10,7 @@ import ( + "strings" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestImportDisplay(c *check.C) { +diff --git a/integration-cli/docker_cli_info_test.go b/integration-cli/docker_cli_info_test.go +index dd23694..4a545f1 100644 +--- a/integration-cli/docker_cli_info_test.go ++++ b/integration-cli/docker_cli_info_test.go +@@ -7,7 +7,7 @@ import ( + + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/docker/utils" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // ensure docker info succeeds +diff --git a/integration-cli/docker_cli_inspect_experimental_test.go b/integration-cli/docker_cli_inspect_experimental_test.go +index 0d9a261..2fb1649 100644 +--- a/integration-cli/docker_cli_inspect_experimental_test.go ++++ b/integration-cli/docker_cli_inspect_experimental_test.go +@@ -5,7 +5,7 @@ package main + import ( + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/engine-api/types" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestInspectNamedMountPoint(c *check.C) { +diff --git a/integration-cli/docker_cli_inspect_test.go b/integration-cli/docker_cli_inspect_test.go +index 2961453..4b00859 100644 +--- a/integration-cli/docker_cli_inspect_test.go ++++ b/integration-cli/docker_cli_inspect_test.go +@@ -11,7 +11,7 @@ import ( + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/engine-api/types" + "github.com/docker/engine-api/types/container" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func checkValidGraphDriver(c *check.C, name string) { +diff --git a/integration-cli/docker_cli_kill_test.go b/integration-cli/docker_cli_kill_test.go +index 05d9a55..5091fc0 100644 +--- a/integration-cli/docker_cli_kill_test.go ++++ b/integration-cli/docker_cli_kill_test.go +@@ -6,7 +6,7 @@ import ( + "strings" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestKillContainer(c *check.C) { +diff --git a/integration-cli/docker_cli_links_test.go b/integration-cli/docker_cli_links_test.go +index 322b58c..5f43d2d 100644 +--- a/integration-cli/docker_cli_links_test.go ++++ b/integration-cli/docker_cli_links_test.go +@@ -7,7 +7,7 @@ import ( + + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/docker/runconfig" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestLinksPingUnlinkedContainers(c *check.C) { +diff --git a/integration-cli/docker_cli_links_unix_test.go b/integration-cli/docker_cli_links_unix_test.go +index 1af9279..a5f7d9e 100644 +--- a/integration-cli/docker_cli_links_unix_test.go ++++ b/integration-cli/docker_cli_links_unix_test.go +@@ -7,7 +7,7 @@ import ( + "os" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestLinksEtcHostsContentMatch(c *check.C) { +diff --git a/integration-cli/docker_cli_login_test.go b/integration-cli/docker_cli_login_test.go +index 01de75d..d5bbe9f 100644 +--- a/integration-cli/docker_cli_login_test.go ++++ b/integration-cli/docker_cli_login_test.go +@@ -5,7 +5,7 @@ import ( + "os/exec" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestLoginWithoutTTY(c *check.C) { +diff --git a/integration-cli/docker_cli_logout_test.go b/integration-cli/docker_cli_logout_test.go +index 6658da5..87c5f5c 100644 +--- a/integration-cli/docker_cli_logout_test.go ++++ b/integration-cli/docker_cli_logout_test.go +@@ -7,7 +7,7 @@ import ( + "path/filepath" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerRegistryAuthHtpasswdSuite) TestLogoutWithExternalAuth(c *check.C) { +diff --git a/integration-cli/docker_cli_logs_bench_test.go b/integration-cli/docker_cli_logs_bench_test.go +index eeb008d..c05dd71 100644 +--- a/integration-cli/docker_cli_logs_bench_test.go ++++ b/integration-cli/docker_cli_logs_bench_test.go +@@ -5,7 +5,7 @@ import ( + "strings" + "time" + +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) BenchmarkLogsCLIRotateFollow(c *check.C) { +diff --git a/integration-cli/docker_cli_logs_test.go b/integration-cli/docker_cli_logs_test.go +index e18916d..a6f08ad 100644 +--- a/integration-cli/docker_cli_logs_test.go ++++ b/integration-cli/docker_cli_logs_test.go +@@ -10,7 +10,7 @@ import ( + + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/docker/pkg/jsonlog" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // This used to work, it test a log of PageSize-1 (gh#4851) +diff --git a/integration-cli/docker_cli_nat_test.go b/integration-cli/docker_cli_nat_test.go +index 7f4cc2c..45496d3 100644 +--- a/integration-cli/docker_cli_nat_test.go ++++ b/integration-cli/docker_cli_nat_test.go +@@ -7,7 +7,7 @@ import ( + "strings" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func startServerContainer(c *check.C, msg string, port int) string { +diff --git a/integration-cli/docker_cli_netmode_test.go b/integration-cli/docker_cli_netmode_test.go +index 142f192..8266711 100644 +--- a/integration-cli/docker_cli_netmode_test.go ++++ b/integration-cli/docker_cli_netmode_test.go +@@ -3,7 +3,7 @@ package main + import ( + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/docker/runconfig" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // GH14530. Validates combinations of --net= with other options +diff --git a/integration-cli/docker_cli_network_unix_test.go b/integration-cli/docker_cli_network_unix_test.go +index 902766d..c5ef222 100644 +--- a/integration-cli/docker_cli_network_unix_test.go ++++ b/integration-cli/docker_cli_network_unix_test.go +@@ -22,7 +22,7 @@ import ( + "github.com/docker/libnetwork/ipamapi" + remoteipam "github.com/docker/libnetwork/ipams/remote/api" + "github.com/docker/libnetwork/netlabel" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + "github.com/vishvananda/netlink" + ) + +diff --git a/integration-cli/docker_cli_oom_killed_test.go b/integration-cli/docker_cli_oom_killed_test.go +index ff77f57..01c8564 100644 +--- a/integration-cli/docker_cli_oom_killed_test.go ++++ b/integration-cli/docker_cli_oom_killed_test.go +@@ -4,7 +4,7 @@ package main + + import ( + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestInspectOomKilledTrue(c *check.C) { +diff --git a/integration-cli/docker_cli_pause_test.go b/integration-cli/docker_cli_pause_test.go +index a42c2f5..f12baae 100644 +--- a/integration-cli/docker_cli_pause_test.go ++++ b/integration-cli/docker_cli_pause_test.go +@@ -5,7 +5,7 @@ import ( + "strings" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestPause(c *check.C) { +diff --git a/integration-cli/docker_cli_port_test.go b/integration-cli/docker_cli_port_test.go +index 80b00fe..68ca3f8 100644 +--- a/integration-cli/docker_cli_port_test.go ++++ b/integration-cli/docker_cli_port_test.go +@@ -8,7 +8,7 @@ import ( + "strings" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestPortList(c *check.C) { +diff --git a/integration-cli/docker_cli_proxy_test.go b/integration-cli/docker_cli_proxy_test.go +index e5699ca..9a131ed 100644 +--- a/integration-cli/docker_cli_proxy_test.go ++++ b/integration-cli/docker_cli_proxy_test.go +@@ -6,7 +6,7 @@ import ( + "strings" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestCliProxyDisableProxyUnixSock(c *check.C) { +diff --git a/integration-cli/docker_cli_ps_test.go b/integration-cli/docker_cli_ps_test.go +index 72650ff..c2e7b78 100644 +--- a/integration-cli/docker_cli_ps_test.go ++++ b/integration-cli/docker_cli_ps_test.go +@@ -13,7 +13,7 @@ import ( + + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/docker/pkg/stringid" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestPsListContainersBase(c *check.C) { +diff --git a/integration-cli/docker_cli_pull_local_test.go b/integration-cli/docker_cli_pull_local_test.go +index 1f85832..b96d9d5 100644 +--- a/integration-cli/docker_cli_pull_local_test.go ++++ b/integration-cli/docker_cli_pull_local_test.go +@@ -16,7 +16,7 @@ import ( + "github.com/docker/distribution/manifest/manifestlist" + "github.com/docker/distribution/manifest/schema2" + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // testPullImageWithAliases pulls a specific image tag and verifies that any aliases (i.e., other +diff --git a/integration-cli/docker_cli_pull_test.go b/integration-cli/docker_cli_pull_test.go +index ac211d2..81a8bbb 100644 +--- a/integration-cli/docker_cli_pull_test.go ++++ b/integration-cli/docker_cli_pull_test.go +@@ -9,7 +9,7 @@ import ( + + "github.com/docker/distribution/digest" + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // TestPullFromCentralRegistry pulls an image from the central registry and verifies that the client +diff --git a/integration-cli/docker_cli_pull_trusted_test.go b/integration-cli/docker_cli_pull_trusted_test.go +index 6bc38e6..25e628f 100644 +--- a/integration-cli/docker_cli_pull_trusted_test.go ++++ b/integration-cli/docker_cli_pull_trusted_test.go +@@ -8,7 +8,7 @@ import ( + "time" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerTrustSuite) TestTrustedPull(c *check.C) { +diff --git a/integration-cli/docker_cli_push_test.go b/integration-cli/docker_cli_push_test.go +index 6b3d823..8bf9cea 100644 +--- a/integration-cli/docker_cli_push_test.go ++++ b/integration-cli/docker_cli_push_test.go +@@ -15,7 +15,7 @@ import ( + "github.com/docker/distribution/digest" + "github.com/docker/docker/cliconfig" + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // Pushing an image to a private registry. +diff --git a/integration-cli/docker_cli_registry_user_agent_test.go b/integration-cli/docker_cli_registry_user_agent_test.go +index 67a950c..5ab294c 100644 +--- a/integration-cli/docker_cli_registry_user_agent_test.go ++++ b/integration-cli/docker_cli_registry_user_agent_test.go +@@ -5,7 +5,7 @@ import ( + "net/http" + "regexp" + +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // unescapeBackslashSemicolonParens unescapes \;() +diff --git a/integration-cli/docker_cli_rename_test.go b/integration-cli/docker_cli_rename_test.go +index cbb60f8..1c3dfa7 100644 +--- a/integration-cli/docker_cli_rename_test.go ++++ b/integration-cli/docker_cli_rename_test.go +@@ -5,7 +5,7 @@ import ( + + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/docker/pkg/stringid" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestRenameStoppedContainer(c *check.C) { +diff --git a/integration-cli/docker_cli_restart_test.go b/integration-cli/docker_cli_restart_test.go +index 31c8920..7bca267 100644 +--- a/integration-cli/docker_cli_restart_test.go ++++ b/integration-cli/docker_cli_restart_test.go +@@ -7,7 +7,7 @@ import ( + "time" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestRestartStoppedContainer(c *check.C) { +diff --git a/integration-cli/docker_cli_rm_test.go b/integration-cli/docker_cli_rm_test.go +index 0186c56..73c5658 100644 +--- a/integration-cli/docker_cli_rm_test.go ++++ b/integration-cli/docker_cli_rm_test.go +@@ -5,7 +5,7 @@ import ( + "os" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestRmContainerWithRemovedVolume(c *check.C) { +diff --git a/integration-cli/docker_cli_rmi_test.go b/integration-cli/docker_cli_rmi_test.go +index 697be32..c251d51 100644 +--- a/integration-cli/docker_cli_rmi_test.go ++++ b/integration-cli/docker_cli_rmi_test.go +@@ -8,7 +8,7 @@ import ( + + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/docker/pkg/stringid" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestRmiWithContainerFails(c *check.C) { +diff --git a/integration-cli/docker_cli_run_test.go b/integration-cli/docker_cli_run_test.go +index 6e45fca..eee0d94 100644 +--- a/integration-cli/docker_cli_run_test.go ++++ b/integration-cli/docker_cli_run_test.go +@@ -25,7 +25,7 @@ import ( + "github.com/docker/go-connections/nat" + "github.com/docker/libnetwork/netutils" + "github.com/docker/libnetwork/resolvconf" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + libcontainerUser "github.com/opencontainers/runc/libcontainer/user" + ) + +diff --git a/integration-cli/docker_cli_run_unix_test.go b/integration-cli/docker_cli_run_unix_test.go +index fe7cc69..9ddac61 100644 +--- a/integration-cli/docker_cli_run_unix_test.go ++++ b/integration-cli/docker_cli_run_unix_test.go +@@ -21,7 +21,7 @@ import ( + "github.com/docker/docker/pkg/mount" + "github.com/docker/docker/pkg/parsers" + "github.com/docker/docker/pkg/sysinfo" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + "github.com/kr/pty" + ) + +diff --git a/integration-cli/docker_cli_save_load_test.go b/integration-cli/docker_cli_save_load_test.go +index b21c987..2dd3106 100644 +--- a/integration-cli/docker_cli_save_load_test.go ++++ b/integration-cli/docker_cli_save_load_test.go +@@ -15,7 +15,7 @@ import ( + + "github.com/docker/distribution/digest" + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // save a repo using gz compression and try to load it using stdout +diff --git a/integration-cli/docker_cli_save_load_unix_test.go b/integration-cli/docker_cli_save_load_unix_test.go +index d9dd95f..5cdba85 100644 +--- a/integration-cli/docker_cli_save_load_unix_test.go ++++ b/integration-cli/docker_cli_save_load_unix_test.go +@@ -10,7 +10,7 @@ import ( + "strings" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + "github.com/kr/pty" + ) + +diff --git a/integration-cli/docker_cli_search_test.go b/integration-cli/docker_cli_search_test.go +index dfab810..f7a988b 100644 +--- a/integration-cli/docker_cli_search_test.go ++++ b/integration-cli/docker_cli_search_test.go +@@ -4,7 +4,7 @@ import ( + "strings" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // search for repos named "registry" on the central registry +diff --git a/integration-cli/docker_cli_sni_test.go b/integration-cli/docker_cli_sni_test.go +index fb896d5..cba8d97 100644 +--- a/integration-cli/docker_cli_sni_test.go ++++ b/integration-cli/docker_cli_sni_test.go +@@ -10,7 +10,7 @@ import ( + "os/exec" + "strings" + +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestClientSetsTLSServerName(c *check.C) { +diff --git a/integration-cli/docker_cli_start_test.go b/integration-cli/docker_cli_start_test.go +index 4334219..aedfd4d 100644 +--- a/integration-cli/docker_cli_start_test.go ++++ b/integration-cli/docker_cli_start_test.go +@@ -6,7 +6,7 @@ import ( + "time" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // Regression test for https://github.com/docker/docker/issues/7843 +diff --git a/integration-cli/docker_cli_start_volume_driver_unix_test.go b/integration-cli/docker_cli_start_volume_driver_unix_test.go +index cc5d0b1..c511cf0 100644 +--- a/integration-cli/docker_cli_start_volume_driver_unix_test.go ++++ b/integration-cli/docker_cli_start_volume_driver_unix_test.go +@@ -17,7 +17,7 @@ import ( + + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/engine-api/types" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func init() { +diff --git a/integration-cli/docker_cli_stats_test.go b/integration-cli/docker_cli_stats_test.go +index e3c7a3e..97861e2 100644 +--- a/integration-cli/docker_cli_stats_test.go ++++ b/integration-cli/docker_cli_stats_test.go +@@ -8,7 +8,7 @@ import ( + "time" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestStatsNoStream(c *check.C) { +diff --git a/integration-cli/docker_cli_tag_test.go b/integration-cli/docker_cli_tag_test.go +index 1e60152..e290999 100644 +--- a/integration-cli/docker_cli_tag_test.go ++++ b/integration-cli/docker_cli_tag_test.go +@@ -7,7 +7,7 @@ import ( + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/docker/pkg/stringid" + "github.com/docker/docker/pkg/stringutils" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // tagging a named image in a new unprefixed repo should work +diff --git a/integration-cli/docker_cli_top_test.go b/integration-cli/docker_cli_top_test.go +index e0865b9..3cf9ace 100644 +--- a/integration-cli/docker_cli_top_test.go ++++ b/integration-cli/docker_cli_top_test.go +@@ -4,7 +4,7 @@ import ( + "strings" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestTopMultipleArgs(c *check.C) { +diff --git a/integration-cli/docker_cli_update_test.go b/integration-cli/docker_cli_update_test.go +index 188030f..5a0178b 100644 +--- a/integration-cli/docker_cli_update_test.go ++++ b/integration-cli/docker_cli_update_test.go +@@ -5,7 +5,7 @@ import ( + "time" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestUpdateRestartPolicy(c *check.C) { +diff --git a/integration-cli/docker_cli_update_unix_test.go b/integration-cli/docker_cli_update_unix_test.go +index c40ad3e..e4267b1 100644 +--- a/integration-cli/docker_cli_update_unix_test.go ++++ b/integration-cli/docker_cli_update_unix_test.go +@@ -9,7 +9,7 @@ import ( + + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/engine-api/types" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestUpdateRunningContainer(c *check.C) { +diff --git a/integration-cli/docker_cli_userns_test.go b/integration-cli/docker_cli_userns_test.go +index f8b3f77..d14d5d3 100644 +--- a/integration-cli/docker_cli_userns_test.go ++++ b/integration-cli/docker_cli_userns_test.go +@@ -13,7 +13,7 @@ import ( + + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/docker/pkg/system" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // user namespaces test: run daemon with remapped root setting +diff --git a/integration-cli/docker_cli_v2_only_test.go b/integration-cli/docker_cli_v2_only_test.go +index 889936a..72438e9 100644 +--- a/integration-cli/docker_cli_v2_only_test.go ++++ b/integration-cli/docker_cli_v2_only_test.go +@@ -6,7 +6,7 @@ import ( + "net/http" + "os" + +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func makefile(contents string) (string, func(), error) { +diff --git a/integration-cli/docker_cli_version_test.go b/integration-cli/docker_cli_version_test.go +index 7672beb..16d02c9 100644 +--- a/integration-cli/docker_cli_version_test.go ++++ b/integration-cli/docker_cli_version_test.go +@@ -4,7 +4,7 @@ import ( + "strings" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // ensure docker version works +diff --git a/integration-cli/docker_cli_volume_test.go b/integration-cli/docker_cli_volume_test.go +index a10316f..4bb0c3b 100644 +--- a/integration-cli/docker_cli_volume_test.go ++++ b/integration-cli/docker_cli_volume_test.go +@@ -5,7 +5,7 @@ import ( + "strings" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DockerSuite) TestVolumeCliCreate(c *check.C) { +diff --git a/integration-cli/docker_cli_wait_test.go b/integration-cli/docker_cli_wait_test.go +index 2993397..4eb7f3a 100644 +--- a/integration-cli/docker_cli_wait_test.go ++++ b/integration-cli/docker_cli_wait_test.go +@@ -7,7 +7,7 @@ import ( + "time" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // non-blocking wait with 0 exit code +diff --git a/integration-cli/docker_experimental_network_test.go b/integration-cli/docker_experimental_network_test.go +index f33dbd1..3437702 100644 +--- a/integration-cli/docker_experimental_network_test.go ++++ b/integration-cli/docker_experimental_network_test.go +@@ -9,7 +9,7 @@ import ( + + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/docker/pkg/parsers/kernel" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + var ( +diff --git a/integration-cli/docker_hub_pull_suite_test.go b/integration-cli/docker_hub_pull_suite_test.go +index 6aa9346..9533cc3 100644 +--- a/integration-cli/docker_hub_pull_suite_test.go ++++ b/integration-cli/docker_hub_pull_suite_test.go +@@ -6,7 +6,7 @@ import ( + "strings" + + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func init() { +diff --git a/integration-cli/docker_utils.go b/integration-cli/docker_utils.go +index 3198287..e9e2452 100644 +--- a/integration-cli/docker_utils.go ++++ b/integration-cli/docker_utils.go +@@ -30,7 +30,7 @@ import ( + "github.com/docker/engine-api/types" + "github.com/docker/go-connections/tlsconfig" + "github.com/docker/go-units" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func init() { +diff --git a/integration-cli/events_utils.go b/integration-cli/events_utils.go +index cdd3106..cc534db 100644 +--- a/integration-cli/events_utils.go ++++ b/integration-cli/events_utils.go +@@ -12,7 +12,7 @@ import ( + "github.com/Sirupsen/logrus" + "github.com/docker/docker/daemon/events/testutils" + "github.com/docker/docker/pkg/integration/checker" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // eventMatcher is a function that tries to match an event input. +diff --git a/integration-cli/registry.go b/integration-cli/registry.go +index fa3fb87..e039771 100644 +--- a/integration-cli/registry.go ++++ b/integration-cli/registry.go +@@ -9,7 +9,7 @@ import ( + "path/filepath" + + "github.com/docker/distribution/digest" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + const ( +diff --git a/integration-cli/registry_mock.go b/integration-cli/registry_mock.go +index 300bf46..cf0c77a 100644 +--- a/integration-cli/registry_mock.go ++++ b/integration-cli/registry_mock.go +@@ -7,7 +7,7 @@ import ( + "strings" + "sync" + +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + type handlerFunc func(w http.ResponseWriter, r *http.Request) +diff --git a/integration-cli/requirements.go b/integration-cli/requirements.go +index e948c0a..74d77c8 100644 +--- a/integration-cli/requirements.go ++++ b/integration-cli/requirements.go +@@ -9,7 +9,7 @@ import ( + "strings" + "time" + +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + type testCondition func() bool +diff --git a/integration-cli/trust_server.go b/integration-cli/trust_server.go +index 77314c3..dbdde32 100644 +--- a/integration-cli/trust_server.go ++++ b/integration-cli/trust_server.go +@@ -14,7 +14,7 @@ import ( + "github.com/docker/docker/cliconfig" + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/docker/pkg/tlsconfig" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + var notaryBinary = "notary" +diff --git a/pkg/discovery/discovery_test.go b/pkg/discovery/discovery_test.go +index 6084f3e..b1a479c 100644 +--- a/pkg/discovery/discovery_test.go ++++ b/pkg/discovery/discovery_test.go +@@ -3,7 +3,7 @@ package discovery + import ( + "testing" + +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // Hook up gocheck into the "go test" runner. +diff --git a/pkg/discovery/file/file_test.go b/pkg/discovery/file/file_test.go +index 667f00b..03b6cb1 100644 +--- a/pkg/discovery/file/file_test.go ++++ b/pkg/discovery/file/file_test.go +@@ -7,7 +7,7 @@ import ( + + "github.com/docker/docker/pkg/discovery" + +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // Hook up gocheck into the "go test" runner. +diff --git a/pkg/discovery/generator_test.go b/pkg/discovery/generator_test.go +index 6281c46..ba73a19 100644 +--- a/pkg/discovery/generator_test.go ++++ b/pkg/discovery/generator_test.go +@@ -1,7 +1,7 @@ + package discovery + + import ( +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + func (s *DiscoverySuite) TestGeneratorNotGenerate(c *check.C) { +diff --git a/pkg/discovery/kv/kv_test.go b/pkg/discovery/kv/kv_test.go +index 4fe5239..656e7c8 100644 +--- a/pkg/discovery/kv/kv_test.go ++++ b/pkg/discovery/kv/kv_test.go +@@ -12,7 +12,7 @@ import ( + "github.com/docker/libkv" + "github.com/docker/libkv/store" + +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // Hook up gocheck into the "go test" runner. +diff --git a/pkg/discovery/memory/memory_test.go b/pkg/discovery/memory/memory_test.go +index c2da0a0..70c6786 100644 +--- a/pkg/discovery/memory/memory_test.go ++++ b/pkg/discovery/memory/memory_test.go +@@ -4,7 +4,7 @@ import ( + "testing" + + "github.com/docker/docker/pkg/discovery" +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // Hook up gocheck into the "go test" runner. +diff --git a/pkg/discovery/nodes/nodes_test.go b/pkg/discovery/nodes/nodes_test.go +index e26568c..a6b8fea 100644 +--- a/pkg/discovery/nodes/nodes_test.go ++++ b/pkg/discovery/nodes/nodes_test.go +@@ -5,7 +5,7 @@ import ( + + "github.com/docker/docker/pkg/discovery" + +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // Hook up gocheck into the "go test" runner. +diff --git a/pkg/integration/checker/checker.go b/pkg/integration/checker/checker.go +index a531499..a33808f 100644 +--- a/pkg/integration/checker/checker.go ++++ b/pkg/integration/checker/checker.go +@@ -2,7 +2,7 @@ + package checker + + import ( +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + "github.com/vdemeester/shakers" + ) + +diff --git a/pkg/integration/dockerCmd_utils.go b/pkg/integration/dockerCmd_utils.go +index fab3e06..54ea8cc 100644 +--- a/pkg/integration/dockerCmd_utils.go ++++ b/pkg/integration/dockerCmd_utils.go +@@ -6,7 +6,7 @@ import ( + "strings" + "time" + +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + // We use the elongated quote mechanism for quoting error returns as +diff --git a/pkg/integration/dockerCmd_utils_test.go b/pkg/integration/dockerCmd_utils_test.go +index 3dd5d11..a5900db 100644 +--- a/pkg/integration/dockerCmd_utils_test.go ++++ b/pkg/integration/dockerCmd_utils_test.go +@@ -10,7 +10,7 @@ import ( + "strings" + "time" + +- "github.com/go-check/check" ++ "gopkg.in/check.v1" + ) + + const dockerBinary = "docker" diff --git a/patches/fatal-error-old-kernels.patch b/patches/fatal-error-old-kernels.patch new file mode 100644 index 00000000..9f2da2eb --- /dev/null +++ b/patches/fatal-error-old-kernels.patch @@ -0,0 +1,18 @@ +Description: Docker is unsupported on kernels < 3.10, so this turns the warning into a fatal error (hard failure) +Forwarded: not-needed +Author: Tianon Gravi +Reviewed-by: Paul Tagliamonte + +diff --git a/daemon/daemon_unix.go b/daemon/daemon_unix.go +index 8ea6c5c..1629d38 100644 +--- a/daemon/daemon_unix.go ++++ b/daemon/daemon_unix.go +@@ -87,7 +87,7 @@ func checkKernel() error { + if !checkKernelVersion(3, 10, 0) { + v, _ := kernel.GetKernelVersion() + if os.Getenv("DOCKER_NOWARN_KERNEL_VERSION") == "" { +- logrus.Warnf("Your Linux kernel version %s can be unstable running docker. Please upgrade your kernel to 3.10.0.", v.String()) ++ logrus.Fatalf("Your Linux kernel version %s is unstable running Docker. Please upgrade your kernel to 3.10+.", v.String()) + } + } + return nil diff --git a/patches/opencontainer-specs--no-mountlabel.patch b/patches/opencontainer-specs--no-mountlabel.patch new file mode 100644 index 00000000..033b7a19 --- /dev/null +++ b/patches/opencontainer-specs--no-mountlabel.patch @@ -0,0 +1,20 @@ +Last-Update: 2016-06-13 +Forwarded: not-needed +Author: Dmitry Smirnov +Description: fix FTBFS by reverting "oci_linux.go" back to 1.11.0 state. + Revert breaking change introduced in Docker-1.11.1 that updated bundled + "golang-github-opencontainers-specs-dev" to untagged/unreleased snapshot. + +--- a/daemon/oci_linux.go ++++ b/daemon/oci_linux.go +@@ -670,9 +670,9 @@ + s.Process.ApparmorProfile = appArmorProfile + } + s.Process.SelinuxLabel = c.GetProcessLabel() + s.Process.NoNewPrivileges = c.NoNewPrivileges +- s.Linux.MountLabel = c.MountLabel ++ //s.Linux.MountLabel = c.MountLabel + + return (*libcontainerd.Spec)(&s), nil + } + diff --git a/patches/opencontainer-specs-0.5.0.patch b/patches/opencontainer-specs-0.5.0.patch new file mode 100644 index 00000000..f011fe8a --- /dev/null +++ b/patches/opencontainer-specs-0.5.0.patch @@ -0,0 +1,149 @@ +Last-Update: 2016-06-13 +Forwarded: no +Author: Tim Potter +Reviewed-By: Dmitry Smirnov +Description: update name space + +--- a/daemon/container_operations_unix.go ++++ b/daemon/container_operations_unix.go +@@ -24,9 +24,9 @@ + "github.com/docker/libnetwork" + "github.com/opencontainers/runc/libcontainer/configs" + "github.com/opencontainers/runc/libcontainer/devices" + "github.com/opencontainers/runc/libcontainer/label" +- "github.com/opencontainers/specs/specs-go" ++ "github.com/opencontainers/runtime-spec/specs-go" + ) + + func u32Ptr(i int64) *uint32 { u := uint32(i); return &u } + func fmPtr(i int64) *os.FileMode { fm := os.FileMode(i); return &fm } +--- a/daemon/daemon_unix.go ++++ b/daemon/daemon_unix.go +@@ -37,9 +37,9 @@ + "github.com/docker/libnetwork/options" + lntypes "github.com/docker/libnetwork/types" + "github.com/opencontainers/runc/libcontainer/label" + "github.com/opencontainers/runc/libcontainer/user" +- "github.com/opencontainers/specs/specs-go" ++ "github.com/opencontainers/runtime-spec/specs-go" + ) + + const ( + // See https://git.kernel.org/cgit/linux/kernel/git/tip/tip.git/tree/kernel/sched/sched.h?id=8cd9234c64c584432f6992fe944ca9e46ca8ea76#n269 +--- a/daemon/oci_linux.go ++++ b/daemon/oci_linux.go +@@ -21,9 +21,9 @@ + containertypes "github.com/docker/engine-api/types/container" + "github.com/opencontainers/runc/libcontainer/apparmor" + "github.com/opencontainers/runc/libcontainer/devices" + "github.com/opencontainers/runc/libcontainer/user" +- "github.com/opencontainers/specs/specs-go" ++ "github.com/opencontainers/runtime-spec/specs-go" + ) + + func setResources(s *specs.Spec, r containertypes.Resources) error { + weightDevices, err := getBlkioWeightDevices(r) +--- a/daemon/seccomp_disabled.go ++++ b/daemon/seccomp_disabled.go +@@ -3,9 +3,9 @@ + package daemon + + import ( + "github.com/docker/docker/container" +- "github.com/opencontainers/specs/specs-go" ++ "github.com/opencontainers/runtime-spec/specs-go" + ) + + func setSeccomp(daemon *Daemon, rs *specs.Spec, c *container.Container) error { + return nil +--- a/daemon/seccomp_linux.go ++++ b/daemon/seccomp_linux.go +@@ -7,9 +7,9 @@ + + "github.com/Sirupsen/logrus" + "github.com/docker/docker/container" + "github.com/docker/docker/profiles/seccomp" +- "github.com/opencontainers/specs/specs-go" ++ "github.com/opencontainers/runtime-spec/specs-go" + ) + + func setSeccomp(daemon *Daemon, rs *specs.Spec, c *container.Container) error { + var profile *specs.Seccomp +--- a/libcontainerd/client_linux.go ++++ b/libcontainerd/client_linux.go +@@ -12,9 +12,9 @@ + "github.com/Sirupsen/logrus" + containerd "github.com/docker/containerd/api/grpc/types" + "github.com/docker/docker/pkg/idtools" + "github.com/docker/docker/pkg/mount" +- "github.com/opencontainers/specs/specs-go" ++ "github.com/opencontainers/runtime-spec/specs-go" + "golang.org/x/net/context" + ) + + type client struct { +--- a/libcontainerd/container_linux.go ++++ b/libcontainerd/container_linux.go +@@ -10,9 +10,9 @@ + + "github.com/Sirupsen/logrus" + containerd "github.com/docker/containerd/api/grpc/types" + "github.com/docker/docker/restartmanager" +- "github.com/opencontainers/specs/specs-go" ++ "github.com/opencontainers/runtime-spec/specs-go" + "golang.org/x/net/context" + ) + + type container struct { +--- a/libcontainerd/types_linux.go ++++ b/libcontainerd/types_linux.go +@@ -1,9 +1,9 @@ + package libcontainerd + + import ( + containerd "github.com/docker/containerd/api/grpc/types" +- "github.com/opencontainers/specs/specs-go" ++ "github.com/opencontainers/runtime-spec/specs-go" + ) + + // Spec is the base configuration for the container. It specifies platform + // independent configuration. This information must be included when the +--- a/libcontainerd/utils_linux.go ++++ b/libcontainerd/utils_linux.go +@@ -1,9 +1,9 @@ + package libcontainerd + + import ( + containerd "github.com/docker/containerd/api/grpc/types" +- "github.com/opencontainers/specs/specs-go" ++ "github.com/opencontainers/runtime-spec/specs-go" + ) + + func getRootIDs(s specs.Spec) (int, int, error) { + var hasUserns bool +--- a/oci/defaults_linux.go ++++ b/oci/defaults_linux.go +@@ -3,9 +3,9 @@ + import ( + "os" + "runtime" + +- "github.com/opencontainers/specs/specs-go" ++ "github.com/opencontainers/runtime-spec/specs-go" + ) + + func sPtr(s string) *string { return &s } + func rPtr(r rune) *rune { return &r } +--- a/profiles/seccomp/seccomp.go ++++ b/profiles/seccomp/seccomp.go +@@ -6,9 +6,9 @@ + "encoding/json" + "fmt" + + "github.com/docker/engine-api/types" +- "github.com/opencontainers/specs/specs-go" ++ "github.com/opencontainers/runtime-spec/specs-go" + ) + + //go:generate go run -tags 'seccomp' generate.go + diff --git a/patches/overlay.patch b/patches/overlay.patch new file mode 100644 index 00000000..df6db677 --- /dev/null +++ b/patches/overlay.patch @@ -0,0 +1,18 @@ +Description: move "overlay" to a higher priority (now that AUFS is not supported in Debian kernels) +Author: Tianon Gravi +Forwarded: no + +diff --git a/daemon/graphdriver/driver_linux.go b/daemon/graphdriver/driver_linux.go +index 410a62f..eab78e7 100644 +--- a/daemon/graphdriver/driver_linux.go ++++ b/daemon/graphdriver/driver_linux.go +@@ -48,8 +48,8 @@ var ( + "aufs", + "btrfs", + "zfs", +- "devicemapper", + "overlay", ++ "devicemapper", + "vfs", + } + diff --git a/patches/remove-docker-prefix.patch b/patches/remove-docker-prefix.patch new file mode 100644 index 00000000..1a84ab1f --- /dev/null +++ b/patches/remove-docker-prefix.patch @@ -0,0 +1,26 @@ +Description: remove "docker-" prefix on expected "runc" and "containerd" binaries +Forwarded: not-needed +Author: Tianon Gravi + +diff --git a/libcontainerd/remote_linux.go b/libcontainerd/remote_linux.go +index 12ce0e1..cf18865 100644 +--- a/libcontainerd/remote_linux.go ++++ b/libcontainerd/remote_linux.go +@@ -30,7 +30,7 @@ const ( + maxConnectionRetryCount = 3 + connectionRetryDelay = 3 * time.Second + containerdShutdownTimeout = 15 * time.Second +- containerdBinary = "docker-containerd" ++ containerdBinary = "containerd" + containerdPidFilename = "docker-containerd.pid" + containerdSockFilename = "docker-containerd.sock" + eventTimestampFilename = "event.ts" +@@ -349,7 +349,7 @@ func (r *remote) runContainerdDaemon() error { + } + + // Start a new instance +- args := []string{"-l", r.rpcAddr, "--runtime", "docker-runc", "--start-timeout", "2m"} ++ args := []string{"-l", r.rpcAddr, "--runtime", "runc", "--start-timeout", "2m"} + if r.debugLog { + args = append(args, "--debug", "--metrics-interval=0") + } diff --git a/patches/series b/patches/series new file mode 100644 index 00000000..0181cefe --- /dev/null +++ b/patches/series @@ -0,0 +1,23 @@ +cgroupfs-mount-convenience-copy.patch + +# If upstream ever resolves https://github.com/docker/docker/issues/8969 in a +# reasonable way, remove this patch. +fatal-error-old-kernels.patch + +# If upstream ever adds EnvFile, remove this patch. +change-system-unit-env-file.patch +# See also https://github.com/docker/docker/pull/7220#issuecomment-50076589 + +overlay.patch + +21491--systemd-tasksmax.patch +22000--ignore-invalid-host-header.patch +remove-docker-prefix.patch + +23063--update-aws-sdk-go.patch +opencontainer-specs-0.5.0.patch +opencontainer-specs--no-mountlabel.patch + +skip-privileged-unit-tests.patch +skip-racy-unit-tests.patch +check-v1.patch diff --git a/patches/skip-privileged-unit-tests.patch b/patches/skip-privileged-unit-tests.patch new file mode 100644 index 00000000..47547e4a --- /dev/null +++ b/patches/skip-privileged-unit-tests.patch @@ -0,0 +1,669 @@ +Description: allow skipping "privileged" tests with "-test.short" +Author: Tianon Gravi +Forwarded: no + +--- a/daemon/daemon_test.go ++++ b/daemon/daemon_test.go +@@ -154,8 +154,12 @@ + } + } + + func TestContainerInitDNS(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++ + tmp, err := ioutil.TempDir("", "docker-container-test-") + if err != nil { + t.Fatal(err) + } +--- a/daemon/graphdriver/aufs/aufs_test.go ++++ b/daemon/graphdriver/aufs/aufs_test.go +@@ -27,8 +27,12 @@ + reexec.Init() + } + + func testInit(dir string, t testing.TB) graphdriver.Driver { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++ + d, err := Init(dir, nil, nil, nil) + if err != nil { + if err == graphdriver.ErrNotSupported { + t.Skip(err) +--- a/daemon/graphdriver/devmapper/devmapper_test.go ++++ b/daemon/graphdriver/devmapper/devmapper_test.go +@@ -10,52 +10,72 @@ + "github.com/docker/docker/daemon/graphdriver" + "github.com/docker/docker/daemon/graphdriver/graphtest" + ) + +-func init() { ++func shortSkip(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++} ++ ++// This avoids creating a new driver for each test if all tests are run ++// Make sure to put new tests between TestDevmapperSetup and TestDevmapperTeardown ++func TestDevmapperSetup(t *testing.T) { ++ shortSkip(t) ++ + // Reduce the size the the base fs and loopback for the tests + defaultDataLoopbackSize = 300 * 1024 * 1024 + defaultMetaDataLoopbackSize = 200 * 1024 * 1024 + defaultBaseFsSize = 300 * 1024 * 1024 + defaultUdevSyncOverride = true + if err := graphtest.InitLoopbacks(); err != nil { +- panic(err) ++ t.Fatal(err) + } +-} + +-// This avoids creating a new driver for each test if all tests are run +-// Make sure to put new tests between TestDevmapperSetup and TestDevmapperTeardown +-func TestDevmapperSetup(t *testing.T) { + graphtest.GetDriver(t, "devicemapper") + } + + func TestDevmapperCreateEmpty(t *testing.T) { ++ shortSkip(t) ++ + graphtest.DriverTestCreateEmpty(t, "devicemapper") + } + + func TestDevmapperCreateBase(t *testing.T) { ++ shortSkip(t) ++ + graphtest.DriverTestCreateBase(t, "devicemapper") + } + + func TestDevmapperCreateSnap(t *testing.T) { ++ shortSkip(t) ++ + graphtest.DriverTestCreateSnap(t, "devicemapper") + } + + func TestDevmapperTeardown(t *testing.T) { ++ shortSkip(t) ++ + graphtest.PutDriver(t) + } + + func TestDevmapperReduceLoopBackSize(t *testing.T) { ++ shortSkip(t) ++ + tenMB := int64(10 * 1024 * 1024) + testChangeLoopBackSize(t, -tenMB, defaultDataLoopbackSize, defaultMetaDataLoopbackSize) + } + + func TestDevmapperIncreaseLoopBackSize(t *testing.T) { ++ shortSkip(t) ++ + tenMB := int64(10 * 1024 * 1024) + testChangeLoopBackSize(t, tenMB, defaultDataLoopbackSize+tenMB, defaultMetaDataLoopbackSize+tenMB) + } + + func testChangeLoopBackSize(t *testing.T, delta, expectDataSize, expectMetaDataSize int64) { ++ shortSkip(t) ++ + driver := graphtest.GetDriver(t, "devicemapper").(*graphtest.Driver).Driver.(*graphdriver.NaiveDiffDriver).ProtoDriver.(*Driver) + defer graphtest.PutDriver(t) + // make sure data or metadata loopback size are the default size + if s := driver.DeviceSet.Status(); s.Data.Total != uint64(defaultDataLoopbackSize) || s.Metadata.Total != uint64(defaultMetaDataLoopbackSize) { +@@ -82,8 +102,10 @@ + } + + // Make sure devices.Lock() has been release upon return from cleanupDeletedDevices() function + func TestDevmapperLockReleasedDeviceDeletion(t *testing.T) { ++ shortSkip(t) ++ + driver := graphtest.GetDriver(t, "devicemapper").(*graphtest.Driver).Driver.(*graphdriver.NaiveDiffDriver).ProtoDriver.(*Driver) + defer graphtest.PutDriver(t) + + // Call cleanupDeletedDevices() and after the call take and release +--- a/daemon/graphdriver/vfs/vfs_test.go ++++ b/daemon/graphdriver/vfs/vfs_test.go +@@ -9,29 +9,43 @@ + + "github.com/docker/docker/pkg/reexec" + ) + +-func init() { +- reexec.Init() ++func shortSkip(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } + } + + // This avoids creating a new driver for each test if all tests are run + // Make sure to put new tests between TestVfsSetup and TestVfsTeardown + func TestVfsSetup(t *testing.T) { ++ shortSkip(t) ++ ++ reexec.Init() ++ + graphtest.GetDriver(t, "vfs") + } + + func TestVfsCreateEmpty(t *testing.T) { ++ shortSkip(t) ++ + graphtest.DriverTestCreateEmpty(t, "vfs") + } + + func TestVfsCreateBase(t *testing.T) { ++ shortSkip(t) ++ + graphtest.DriverTestCreateBase(t, "vfs") + } + + func TestVfsCreateSnap(t *testing.T) { ++ shortSkip(t) ++ + graphtest.DriverTestCreateSnap(t, "vfs") + } + + func TestVfsTeardown(t *testing.T) { ++ shortSkip(t) ++ + graphtest.PutDriver(t) + } +--- a/pkg/archive/archive_test.go ++++ b/pkg/archive/archive_test.go +@@ -304,8 +304,12 @@ + } + } + + func TestUntarPath(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++ + tmpFolder, err := ioutil.TempDir("", "docker-archive-test") + if err != nil { + t.Fatal(err) + } +@@ -438,8 +442,12 @@ + } + } + + func TestCopyWithTarInexistentDestWillCreateIt(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++ + tempFolder, err := ioutil.TempDir("", "docker-archive-test") + if err != nil { + t.Fatal(nil) + } +@@ -922,8 +930,13 @@ + // TODO Windows. There may be a way of running this, but turning off for now + if runtime.GOOS == "windows" { + t.Skip("hardlinks on Windows") + } ++ ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++ + for i, headers := range [][]*tar.Header{ + { + { + Name: "symlink1", +--- a/pkg/archive/archive_unix_test.go ++++ b/pkg/archive/archive_unix_test.go +@@ -149,8 +149,12 @@ + return statT.Ino, nil + } + + func TestTarWithBlockCharFifo(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++ + origin, err := ioutil.TempDir("", "docker-test-tar-hardlink") + if err != nil { + t.Fatal(err) + } +@@ -202,8 +206,12 @@ + } + + // TestTarUntarWithXattr is Unix as Lsetxattr is not supported on Windows + func TestTarUntarWithXattr(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++ + origin, err := ioutil.TempDir("", "docker-test-untar-origin") + if err != nil { + t.Fatal(err) + } +--- a/pkg/archive/changes_test.go ++++ b/pkg/archive/changes_test.go +@@ -141,8 +141,12 @@ + } + } + + func TestChangesWithChanges(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++ + // TODO Windows. There may be a way of running this, but turning off for now + // as createSampleDir uses symlinks. + if runtime.GOOS == "windows" { + t.Skip("symlinks on Windows") +@@ -197,8 +201,13 @@ + // as createSampleDir uses symlinks. + if runtime.GOOS == "windows" { + t.Skip("symlinks on Windows") + } ++ ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++ + baseLayer, err := ioutil.TempDir("", "docker-changes-test.") + defer os.RemoveAll(baseLayer) + + dir3 := path.Join(baseLayer, "dir1/dir2/dir3") +--- a/pkg/authorization/authz_unix_test.go ++++ b/pkg/authorization/authz_unix_test.go +@@ -27,8 +27,12 @@ + + const pluginAddress = "authzplugin.sock" + + func TestAuthZRequestPluginError(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++ + server := authZPluginTestServer{t: t} + go server.start() + defer server.stop() + +@@ -58,8 +62,12 @@ + } + } + + func TestAuthZRequestPlugin(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++ + server := authZPluginTestServer{t: t} + go server.start() + defer server.stop() + +@@ -90,8 +98,12 @@ + } + } + + func TestAuthZResponsePlugin(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++ + server := authZPluginTestServer{t: t} + go server.start() + defer server.stop() + +--- a/pkg/chrootarchive/archive_test.go ++++ b/pkg/chrootarchive/archive_test.go +@@ -21,9 +21,17 @@ + func init() { + reexec.Init() + } + ++func shortSkip(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++} ++ + func TestChrootTarUntar(t *testing.T) { ++ shortSkip(t) ++ + tmpdir, err := ioutil.TempDir("", "docker-TestChrootTarUntar") + if err != nil { + t.Fatal(err) + } +@@ -53,8 +61,10 @@ + + // gh#10426: Verify the fix for having a huge excludes list (like on `docker load` with large # of + // local images) + func TestChrootUntarWithHugeExcludesList(t *testing.T) { ++ shortSkip(t) ++ + tmpdir, err := ioutil.TempDir("", "docker-TestChrootUntarHugeExcludes") + if err != nil { + t.Fatal(err) + } +@@ -87,8 +97,10 @@ + } + } + + func TestChrootUntarEmptyArchive(t *testing.T) { ++ shortSkip(t) ++ + tmpdir, err := ioutil.TempDir("", "docker-TestChrootUntarEmptyArchive") + if err != nil { + t.Fatal(err) + } +@@ -151,8 +163,10 @@ + return nil + } + + func TestChrootTarUntarWithSymlink(t *testing.T) { ++ shortSkip(t) ++ + // TODO Windows: Figure out why this is failing + if runtime.GOOS == "windows" { + t.Skip("Failing on Windows") + } +@@ -177,8 +191,10 @@ + } + } + + func TestChrootCopyWithTar(t *testing.T) { ++ shortSkip(t) ++ + // TODO Windows: Figure out why this is failing + if runtime.GOOS == "windows" { + t.Skip("Failing on Windows") + } +@@ -227,8 +243,10 @@ + } + } + + func TestChrootCopyFileWithTar(t *testing.T) { ++ shortSkip(t) ++ + tmpdir, err := ioutil.TempDir("", "docker-TestChrootCopyFileWithTar") + if err != nil { + t.Fatal(err) + } +@@ -270,8 +288,10 @@ + } + } + + func TestChrootUntarPath(t *testing.T) { ++ shortSkip(t) ++ + // TODO Windows: Figure out why this is failing + if runtime.GOOS == "windows" { + t.Skip("Failing on Windows") + } +@@ -335,8 +355,10 @@ + return count, nil + } + + func TestChrootUntarEmptyArchiveFromSlowReader(t *testing.T) { ++ shortSkip(t) ++ + tmpdir, err := ioutil.TempDir("", "docker-TestChrootUntarEmptyArchiveFromSlowReader") + if err != nil { + t.Fatal(err) + } +@@ -351,8 +373,10 @@ + } + } + + func TestChrootApplyEmptyArchiveFromSlowReader(t *testing.T) { ++ shortSkip(t) ++ + tmpdir, err := ioutil.TempDir("", "docker-TestChrootApplyEmptyArchiveFromSlowReader") + if err != nil { + t.Fatal(err) + } +@@ -367,8 +391,10 @@ + } + } + + func TestChrootApplyDotDotFile(t *testing.T) { ++ shortSkip(t) ++ + tmpdir, err := ioutil.TempDir("", "docker-TestChrootApplyDotDotFile") + if err != nil { + t.Fatal(err) + } +--- a/pkg/idtools/idtools_unix_test.go ++++ b/pkg/idtools/idtools_unix_test.go +@@ -16,8 +16,12 @@ + gid int + } + + func TestMkdirAllAs(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++ + dirName, err := ioutil.TempDir("", "mkdirall") + if err != nil { + t.Fatalf("Couldn't create temp dir: %v", err) + } +@@ -76,8 +80,11 @@ + } + } + + func TestMkdirAllNewAs(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } + + dirName, err := ioutil.TempDir("", "mkdirnew") + if err != nil { + t.Fatalf("Couldn't create temp dir: %v", err) +@@ -136,8 +143,11 @@ + } + } + + func TestMkdirAs(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } + + dirName, err := ioutil.TempDir("", "mkdir") + if err != nil { + t.Fatalf("Couldn't create temp dir: %v", err) +--- a/pkg/mount/mount_unix_test.go ++++ b/pkg/mount/mount_unix_test.go +@@ -24,8 +24,12 @@ + } + } + + func TestMounted(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++ + tmp := path.Join(os.TempDir(), "mount-tests") + if err := os.MkdirAll(tmp, 0777); err != nil { + t.Fatal(err) + } +@@ -75,8 +79,12 @@ + } + } + + func TestMountReadonly(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++ + tmp := path.Join(os.TempDir(), "mount-tests") + if err := os.MkdirAll(tmp, 0777); err != nil { + t.Fatal(err) + } +@@ -120,8 +128,11 @@ + } + } + + func TestGetMounts(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } + mounts, err := GetMounts() + if err != nil { + t.Fatal(err) + } +--- a/pkg/mount/sharedsubtree_linux_test.go ++++ b/pkg/mount/sharedsubtree_linux_test.go +@@ -10,8 +10,12 @@ + ) + + // nothing is propagated in or out + func TestSubtreePrivate(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++ + tmp := path.Join(os.TempDir(), "mount-tests") + if err := os.MkdirAll(tmp, 0777); err != nil { + t.Fatal(err) + } +@@ -108,8 +112,12 @@ + + // Testing that when a target is a shared mount, + // then child mounts propagate to the source + func TestSubtreeShared(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++ + tmp := path.Join(os.TempDir(), "mount-tests") + if err := os.MkdirAll(tmp, 0777); err != nil { + t.Fatal(err) + } +@@ -176,8 +184,12 @@ + + // testing that mounts to a shared source show up in the slave target, + // and that mounts into a slave target do _not_ show up in the shared source + func TestSubtreeSharedSlave(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++ + tmp := path.Join(os.TempDir(), "mount-tests") + if err := os.MkdirAll(tmp, 0777); err != nil { + t.Fatal(err) + } +@@ -280,8 +292,12 @@ + } + } + + func TestSubtreeUnbindable(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++ + tmp := path.Join(os.TempDir(), "mount-tests") + if err := os.MkdirAll(tmp, 0777); err != nil { + t.Fatal(err) + } +--- a/pkg/sysinfo/sysinfo_linux_test.go ++++ b/pkg/sysinfo/sysinfo_linux_test.go +@@ -8,8 +8,12 @@ + "testing" + ) + + func TestReadProcBool(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++ + tmpDir, err := ioutil.TempDir("", "test-sysinfo-proc") + if err != nil { + t.Fatal(err) + } +--- a/volume/local/local_test.go ++++ b/volume/local/local_test.go +@@ -10,8 +10,11 @@ + "github.com/docker/docker/pkg/mount" + ) + + func TestRemove(t *testing.T) { ++ if testing.Short() { t.Skip("Skipping privileged test in short mode") ++ } ++ + // TODO Windows: Investigate why this test fails on Windows under CI + // but passes locally. + if runtime.GOOS == "windows" { + t.Skip("Test failing on Windows CI") +@@ -57,8 +60,12 @@ + } + } + + func TestInitializeWithVolumes(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++ + rootDir, err := ioutil.TempDir("", "local-volume-test") + if err != nil { + t.Fatal(err) + } +@@ -89,8 +96,12 @@ + } + } + + func TestCreate(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++ + rootDir, err := ioutil.TempDir("", "local-volume-test") + if err != nil { + t.Fatal(err) + } +@@ -155,8 +166,12 @@ + } + } + + func TestCreateWithOpts(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } ++ + if runtime.GOOS == "windows" { + t.Skip() + } + +--- a/daemon/graphdriver/overlay/overlay_test.go ++++ b/daemon/graphdriver/overlay/overlay_test.go +@@ -10,20 +10,32 @@ + + // This avoids creating a new driver for each test if all tests are run + // Make sure to put new tests between TestOverlaySetup and TestOverlayTeardown + func TestOverlaySetup(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } + graphtest.GetDriver(t, "overlay") + } + + func TestOverlayCreateEmpty(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } + graphtest.DriverTestCreateEmpty(t, "overlay") + } + + func TestOverlayCreateBase(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } + graphtest.DriverTestCreateBase(t, "overlay") + } + + func TestOverlayCreateSnap(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping privileged test in short mode") ++ } + graphtest.DriverTestCreateSnap(t, "overlay") + } + + func TestOverlayTeardown(t *testing.T) { diff --git a/patches/skip-racy-unit-tests.patch b/patches/skip-racy-unit-tests.patch new file mode 100644 index 00000000..1f3b9887 --- /dev/null +++ b/patches/skip-racy-unit-tests.patch @@ -0,0 +1,15 @@ +diff --git a/pkg/integration/utils_test.go b/pkg/integration/utils_test.go +index d166489..38323ef 100644 +--- a/pkg/integration/utils_test.go ++++ b/pkg/integration/utils_test.go +@@ -191,6 +191,10 @@ func TestRunCommandWithOutputAndTimeoutFinished(t *testing.T) { + } + + func TestRunCommandWithOutputAndTimeoutKilled(t *testing.T) { ++ if testing.Short() { ++ t.Skip("Skipping racy test in short mode") ++ } ++ + // TODO Windows: Port this test + if runtime.GOOS == "windows" { + t.Skip("Needs porting to Windows") diff --git a/repack.sh b/repack.sh new file mode 100755 index 00000000..794317ab --- /dev/null +++ b/repack.sh @@ -0,0 +1,83 @@ +#!/bin/bash +set -e + +debDir="$PWD/debian" + +if [ ! -d "$debDir/repack/prune" ]; then + exit 0 +fi + +if [ '--upstream-version' != "$1" ]; then + echo >&2 "unexpected argument '$1' (expected '--upstream-version')" + exit 1 +fi + +version="$2" +filename="$3" + +if [ -z "$version" ] || [ ! -f "$filename" ]; then + exit 1 +fi + +debVer="$(dpkg-parsechangelog -l"$debDir/changelog" -SVersion)" +origVer="${debVer%-*}" # strip everything from the last dash +origVer="$(echo "$origVer" | sed -r 's/^[0-9]+://')" # strip epoch +upstreamVer="${origVer%%[+~]ds*}" +dfsgBits="${origVer#$upstreamVer}" + +if [ -z "$dfsgBits" ]; then + echo >&2 "warning: no 'DFSG' bits in version '$debVer' (~ds1 or similar), not pruning" + exit 0 +fi + +dir="$(dirname "$filename")" +filename="$(basename "$filename")" +dir="$(cd "$dir" && pwd -P)" + +dfsgFilename="$filename" +case "$dfsgFilename" in + *${dfsgBits}*) ;; # if our filename already has appropriate "dfsg bits", continue as-is + *) dfsgFilename="${dfsgFilename/.orig/$dfsgBits.orig}" ;; +esac +targetTar="$dir/$dfsgFilename" + +# quick, rough sanity check +! grep -qE '^/|^\.\./' "$debDir"/repack/prune/* "$debDir"/repack/keep/* 2>/dev/null + +IFS=$'\n' +prune=( $(grep -vE '^#|^$' "$debDir"/repack/prune/*) ) || true +unset IFS + +IFS=$'\n' +keep=( $(grep -vE '^#|^$' "$debDir"/repack/keep/* 2>/dev/null) ) || true +unset IFS + +tempDir="$(mktemp -d -t docker-orig-repack-XXXXXXXXXX)" +trap "rm -rf '$tempDir'" EXIT + +mkdir -p "$tempDir/orig" +tar -xf "$dir/$filename" -C "$tempDir/orig" --strip-components=1 + +mkdir -p "$tempDir/repack" +( cd "$tempDir/orig" && cp -al . "$tempDir/repack" ) + +( cd "$tempDir/repack" && rm -rf "${prune[@]}" ) + +for k in "${keep[@]}"; do + [ -d "$tempDir/orig/$k" ] || continue + [ ! -d "$tempDir/repack/$k" ] || continue + mkdir -p "$tempDir/repack/$k" + ( cd "$tempDir/orig/$k" && cp -al . "$tempDir/repack/$k" ) +done + +rm -rf "$tempDir/orig" + +subfolderName="${dfsgFilename%.tar.*}" +mv "$tempDir/repack" "$tempDir/$subfolderName" + +tar -czf "$targetTar" -C "$tempDir" "$subfolderName" + +# trap will clean up tempDir + +echo "Done pruning upstream tarball into $dfsgFilename" +exit 0 diff --git a/repack/keep/vendor b/repack/keep/vendor new file mode 100644 index 00000000..a1635fe2 --- /dev/null +++ b/repack/keep/vendor @@ -0,0 +1,5 @@ +# example "keep" line for future reference +#vendor/src/github.com/docker/some-library + +# notary versioning is a bit complex, so we'll use it vendored for now +vendor/src/github.com/docker/notary diff --git a/repack/prune/vendor b/repack/prune/vendor new file mode 100644 index 00000000..22d0d82f --- /dev/null +++ b/repack/prune/vendor @@ -0,0 +1 @@ +vendor diff --git a/rules b/rules new file mode 100755 index 00000000..c50724d2 --- /dev/null +++ b/rules @@ -0,0 +1,109 @@ +#!/usr/bin/make -f +# -*- makefile -*- + +export DH_GOPKG := github.com/docker/docker +export DH_GOLANG_INSTALL_ALL := 1 +export DH_GOLANG_EXCLUDES := \ + integration-cli \ + vendor + +# temporary build path (see http://golang.org/doc/code.html#GOPATH) +OUR_GOPATH := $(CURDIR)/.gopath +export GOPATH := $(OUR_GOPATH) + +# helpful variables for deduplication +export DOCKER_VERSION := $(shell cat VERSION) + +export DOCKER_GITCOMMIT := $(shell ./debian/helpers/gitcommit.sh $(DOCKER_VERSION)) +export BUILDTIME := $(shell dpkg-parsechangelog -SDate) + +# have "make.sh" keep "bundle/$(DOCKER_VERSION)" around between runs (we clean it up appropriately ourselves) +export KEEPBUNDLE := 1 + +# AppArmor can be optionally used in Debian and is there by default in Ubuntu, so we need support for it compiled into our binary +# same story with SELinux +export DOCKER_BUILDTAGS := apparmor selinux + +# since "gccgo" doesn't ship the "dist" go tool (and isn't likely to start), let's use that for now to detect gc vs gccgo +export DOCKER_BUILD_TARGET := $(shell go tool dist env > /dev/null 2>&1 && echo dynbinary || echo dyngccgo) + +# prefer Go 1.6 explicitly if it's available (golang-1.6-go) +export PATH := /usr/lib/go-1.6/bin:$(PATH) + + +APPARMOR_RECOMMENDS := $(shell dpkg-vendor --is Ubuntu && echo apparmor) +BUILT_LIBC := $(shell dpkg-query -f '$${source:Package} (= $${source:Version})' -W libc-dev-bin) + +override_dh_gencontrol: + echo 'apparmor:Recommends=$(APPARMOR_RECOMMENDS)' >> debian/docker.io.substvars + echo 'libc:Built-Using=$(BUILT_LIBC)' >> debian/docker.io.substvars + dh_gencontrol + + +override_dh_auto_configure: + dh_auto_configure + +ifneq (, $(wildcard $(CURDIR)/vendor/src)) + # prefer vendored deps (when they exist) + rm -rf '$(OUR_GOPATH)/src/$(DH_GOPKG)/vendor' \ + && mkdir '$(OUR_GOPATH)/src/$(DH_GOPKG)/vendor' \ + && cd vendor/src \ + && cp -r . '$(OUR_GOPATH)/src/$(DH_GOPKG)/vendor' +endif + + # make sure the bits modified at build-time are properly in our GOPATH + rm -rf '$(OUR_GOPATH)/src/$(DH_GOPKG)/dockerversion' + mkdir -p '$(OUR_GOPATH)/src/$(DH_GOPKG)' + ln -sfT '$(CURDIR)/dockerversion' '$(OUR_GOPATH)/src/$(DH_GOPKG)/dockerversion' + +override_dh_auto_build: + @bash -c '{ [ "$$DOCKER_GITCOMMIT" ]; } || { echo; echo "error: missing DOCKER_GITCOMMIT - see debian/upstream-version-gitcommits"; echo; exit 2; } >&2' + + # build + ./hack/make.sh $(DOCKER_BUILD_TARGET) + + # compile man pages + ./man/md2man-all.sh -q + + +override_dh_install: + ## Do not install extra license files: + dh_install -XLICENSE + +override_dh_auto_install: + # skip dh_auto_install to stop dh_golang trying to copy bits for /usr/share/gocode (we use dh_install/dh-exec for that) + + +override_dh_auto_test: +ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS))) + # run unit tests + cd '$(OUR_GOPATH)/src/$(DH_GOPKG)' \ + && export TESTFLAGS='-test.short' \ + && bash ./hack/make.sh test-unit +endif + + +override_dh_installinit: + dh_installinit --name=docker --no-restart-on-upgrade + + +override_dh_installudev: + # use priority z80 to match the upstream priority of 80 + dh_installudev --priority=z80 + + +override_dh_auto_clean: + dh_auto_clean + + # OUR_GOPATH is created by us + rm -rf '$(OUR_GOPATH)' + + # autogen is created by hack/make.sh + # bundles is created by hack/make.sh + # dockerversion/version_autogen.go is created by hack/make.sh + # man/man*/ is created by man/md2man-all.sh + rm -rf autogen bundles dockerversion/version_autogen.go man/man*/ + + +%: + dh $@ --buildsystem=golang --with=systemd,bash-completion,golang --builddirectory='$(OUR_GOPATH)' diff --git a/source/format b/source/format new file mode 100644 index 00000000..163aaf8d --- /dev/null +++ b/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/tests/basic-smoke b/tests/basic-smoke new file mode 100755 index 00000000..919c799a --- /dev/null +++ b/tests/basic-smoke @@ -0,0 +1,36 @@ +#!/bin/bash +set -eu +set -o pipefail + +exitTraps=( 'true' ) +doExit() { + for exitTrap in "${exitTraps[@]}"; do + eval "$exitTrap" || true + done +} +trap 'doExit' EXIT +defer() { + exitTraps=( "$@" "${exitTraps[@]}" ) +} + +/etc/init.d/docker start +defer '/etc/init.d/docker stop' +defer 'journalctl -u docker | tail' + +# make sure Docker itself is working before we go too deep down the rabbit hole +docker version + +tempDir="$(mktemp -d)" +defer "rm -rf '$tempDir'" + +debootstrap \ + --variant=minbase \ + stable \ + "$tempDir" \ + http://httpredir.debian.org/debian + +tar -cC "$tempDir" . | docker import - debian +defer 'docker rmi debian' + +docker run --name test debian true +defer 'docker rm -f test' diff --git a/tests/control b/tests/control new file mode 100644 index 00000000..f6f6c02a --- /dev/null +++ b/tests/control @@ -0,0 +1,7 @@ +Tests: basic-smoke +Depends: debootstrap, debian-keyring, @ +Restrictions: isolation-machine needs-root + +#Tests: integration +#Depends: ca-certificates, curl, git, golang-check.v1-dev, jq, @, @builddeps@ +#Restrictions: allow-stderr isolation-machine needs-root rw-build-tree diff --git a/tests/integration b/tests/integration new file mode 100755 index 00000000..6b40edcb --- /dev/null +++ b/tests/integration @@ -0,0 +1,41 @@ +#!/bin/bash +set -e + +# apply patches +dpkg-source --before-build . + +# prepare the environment +./debian/rules dh_configure +export GOPATH="$PWD/.gopath" +export DOCKER_GITCOMMIT="$(./debian/helpers/gitcommit.sh)" + +# docker's tests need an unprivileged user available at this username +useradd --system --gid docker --comment 'Docker Test Suite Unprivileged User' unprivilegeduser + +# https://github.com/docker/docker/blob/7307998a44237a8943792c279b81ff5a387a86fa/builder/dockerfile/builder.go#L34-L44 +proxyArgs=( + http_proxy + https_proxy + ftp_proxy + no_proxy +) +DOCKER_BUILD_ARGS= +for proxyArgBase in "${proxyArgs[@]}"; do + for proxyArg in "${proxyArgBase^^}" "$proxyArgBase"; do + if [ -n "${!proxyArg}" ]; then + [ -z "$DOCKER_BUILD_ARGS" ] || DOCKER_BUILD_ARGS+=' ' + DOCKER_BUILD_ARGS+="--build-arg ${proxyArg}=${!proxyArg}" + fi + done +done +export DOCKER_BUILD_ARGS + +# run the tests +./hack/make.sh test-integration-cli + +# clean up cruft we've created +./debian/rules clean +userdel --force unprivilegeduser + +# unapply patches +dpkg-source --after-build . diff --git a/upstream-version-gitcommits b/upstream-version-gitcommits new file mode 100644 index 00000000..9c7f1157 --- /dev/null +++ b/upstream-version-gitcommits @@ -0,0 +1,100 @@ +# To determine the proper value for this, download +# https://get.docker.io/builds/Linux/x86_64/docker-VERSION, chmod +x, and then +# run ./docker-VERSION -v, which will list the exact build hash needed. + +0.5.3: 17c92b8 +0.6.0: f4a4f1c +0.6.1: 5105263 +0.6.2: 081543c +0.6.3: b0a49a3 +0.6.4: 2f74b1c +0.6.5: 3ff8459 +0.6.6: 6d42040 +0.6.7: cb48ecc +0.7.0: 0d078b6 +0.7.1: 88df052 +0.7.2: 28b162e +0.7.3: 8502ad4 +0.7.4: 010d74e +0.7.5: c348c04 +0.7.6: bc3b2ec +0.8.0: cc3a8c8 +0.8.1: a1598d1 +0.9.0: 2b3fdf2 +0.9.1: 3600720 +0.10.0: dc9c28f +0.11.0: 15209c3 +0.11.1: fb99f99 +0.12.0: 14680bf +1.0.0: 63fe64c +1.0.1: 990021a +1.1.0: 79812e3 +1.1.1: bd609d2 +1.1.2: d84a070 +1.2.0: fa7b24f +1.3.0: c78088f +1.3.1: 4e9bbfa +1.3.2: 39fa2fa +1.3.3: d344625 +1.4.0: 4595d4f +1.4.1: 5bc2ff8 +1.5.0-rc2: a393450 +1.5.0-rc3: c02092d +1.5.0-rc4: a1cae77 +1.5.0: a8a31ef +1.6.0-rc1: 746e830 +1.6.0-rc2: c5ee149 +1.6.0-rc3: 20d4e6f +1.6.0-rc4: e2e39fc +1.6.0-rc6: f181f77 +1.6.0-rc7: 7e26e41 +1.6.0: 4749651 +1.6.1: 97cd073 +1.6.2: 7c8fca2 +1.7.0-rc1: 395cced +1.7.0-rc2: 7ddecf7 +1.7.0-rc3: 94159c9 +1.7.0-rc4: cc5c791 +1.7.0-rc5: f417602 +1.7.0: 0baf609 +1.7.1-rc1: f8f912a +1.7.1-rc2: 3ff5c86 +1.7.1-rc3: c2e658d +1.7.1: 786b29d +1.8.0-rc1: 4f1c66a +1.8.0-rc2: 8a9d4ea +1.8.0-rc3: 696147b +1.8.0: 0d03096 +1.8.1: d12ea79 +1.8.2-rc1: 28220ac +1.8.2: 0a8c2e3 +1.8.3: f4bf5c7 +1.9.0-rc1: 9291a0e +1.9.0-rc2: 60d36f7 +1.9.0-rc3: 2100b94 +1.9.0-rc4: e6f5a3c +1.9.0-rc5: 9318004 +1.9.0: 76d6bc9 +1.9.1-rc1: aba5981 +1.9.1: a34a1d5 +1.10.0-rc1: 677c593 +1.10.0-rc2: c1cdc6e +1.10.0-rc3: 08c24cc +1.10.0: 590d5108 +1.10.1-rc1: 840112f +1.10.1: 9e83765 +1.10.2-rc1: 89dafc4 +1.10.2: c3959b1 +1.10.3-rc1: 389f874 +1.10.3-rc2: 9968dd6 +1.10.3: 20f81dd +1.11.0-rc1: 7f4e4ac +1.11.0-rc2: 388f544 +1.11.0-rc3: eabf97a +1.11.0-rc4: f5e2b40 +1.11.0-rc5: 6178547 +1.11.0: 4dc5990 +1.11.1-rc1: c90c70c +1.11.1: 5604cbe +1.11.2-rc1: 1179573 +1.11.2: b9f10c9 diff --git a/vim-syntax-docker.install b/vim-syntax-docker.install new file mode 100644 index 00000000..bcc58c5d --- /dev/null +++ b/vim-syntax-docker.install @@ -0,0 +1,4 @@ +contrib/syntax/vim/doc/* /usr/share/vim/addons/doc/ +contrib/syntax/vim/ftdetect/* /usr/share/vim/addons/ftdetect/ +contrib/syntax/vim/syntax/* /usr/share/vim/addons/syntax/ +debian/vim-syntax-docker.yaml /usr/share/vim/registry/ diff --git a/vim-syntax-docker.yaml b/vim-syntax-docker.yaml new file mode 100644 index 00000000..517b5914 --- /dev/null +++ b/vim-syntax-docker.yaml @@ -0,0 +1,6 @@ +addon: dockerfile +description: "Addon to highlight Docker's Dockerfiles" +files: + - doc/dockerfile.txt + - ftdetect/dockerfile.vim + - syntax/dockerfile.vim diff --git a/watch b/watch new file mode 100644 index 00000000..05c1f00e --- /dev/null +++ b/watch @@ -0,0 +1,6 @@ +version=3 +opts=\ +dversionmangle=s/[+~](debian|dfsg|ds|deb)\d*$//,\ +uversionmangle=s/(\d)[_\.\-\+]?((RC|rc|pre|dev|beta|alpha)\d*)$/$1~$2/,\ +filenamemangle=s/.+\/v(\d\S*)\.tar\.gz/docker.io_$1.orig.tar.gz/ \ + https://github.com/docker/docker/tags .*/v(\d\S*)\.tar\.gz debian ./debian/repack.sh -- 2.30.2