From: Tianon Gravi Date: Tue, 12 Jul 2016 14:46:35 +0000 (+0100) Subject: Import docker.io_1.11.2~ds1-5.debian.tar.xz X-Git-Tag: archive/raspbian/18.09.1+dfsg1-7+rpi1~1^2^2~14^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=2253fffa309bdc92c6fe671e5ad833ec2398b9fc;p=docker.io.git 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] --- 2253fffa309bdc92c6fe671e5ad833ec2398b9fc 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