diff --git a/components/packaging/Makefile b/components/packaging/Makefile index 53d643c167..0545e2feaf 100644 --- a/components/packaging/Makefile +++ b/components/packaging/Makefile @@ -14,13 +14,13 @@ clean: ## remove build artifacts $(MAKE) -C deb clean $(MAKE) -C static clean -rpm: DOCKER_BUILD_PKGS:=fedora-25 fedora-24 centos-7 +rpm: DOCKER_BUILD_PKGS:=fedora-26 fedora-25 fedora-24 centos-7 rpm: ## build rpm packages for p in $(DOCKER_BUILD_PKGS); do \ $(MAKE) -C $@ VERSION=$(VERSION) ENGINE_DIR=$(ENGINE_DIR) CLI_DIR=$(CLI_DIR) $${p}; \ done -deb: DOCKER_BUILD_PKGS:=ubuntu-zesty ubuntu-yakkety ubuntu-xenial ubuntu-trusty debian-stretch debian-wheezy debian-jessie +deb: DOCKER_BUILD_PKGS:=ubuntu-zesty ubuntu-xenial ubuntu-trusty debian-stretch debian-wheezy debian-jessie raspbian-stretch raspbian-jessie deb: ## build deb packages for p in $(DOCKER_BUILD_PKGS); do \ $(MAKE) -C $@ VERSION=$(VERSION) ENGINE_DIR=$(ENGINE_DIR) CLI_DIR=$(CLI_DIR) $${p}; \ diff --git a/components/packaging/README.md b/components/packaging/README.md index 1acf87360e..54a3ec0f81 100644 --- a/components/packaging/README.md +++ b/components/packaging/README.md @@ -8,7 +8,6 @@ This repository is solely maintained by Docker, Inc. The scripts will build for this list of packages types: * DEB packages for Ubuntu 17.04 Zesty -* DEB packages for Ubuntu 16.10 Yakkety * DEB packages for Ubuntu 16.04 Xenial * DEB packages for Ubuntu 14.04 Trusty * DEB packages for Debian 9 Stretch diff --git a/components/packaging/deb/Makefile b/components/packaging/deb/Makefile index 1b3cf664b7..10754515d8 100644 --- a/components/packaging/deb/Makefile +++ b/components/packaging/deb/Makefile @@ -8,7 +8,7 @@ VERSION?=$(shell cat $(ENGINE_DIR)/VERSION) DOCKER_EXPERIMENTAL:=0 CHOWN:=docker run --rm -v $(CURDIR):/v -w /v $(ALPINE_IMG) chown -.PHONY: help clean deb ubuntu debian ubuntu-xenial ubuntu-trusty ubuntu-yakkety ubuntu-zesty debian-jessie debian-stretch debian-wheezy +.PHONY: help clean deb ubuntu debian ubuntu-xenial ubuntu-trusty ubuntu-zesty debian-jessie debian-stretch debian-wheezy raspbian-jessie raspbian-stretch help: ## show make targets @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {sub("\\\\n",sprintf("\n%22c"," "), $$2);printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) @@ -17,12 +17,14 @@ clean: ## remove build artifacts [ ! -d debbuild ] || $(CHOWN) -R $(shell id -u):$(shell id -g) debbuild $(RM) -r debbuild -deb: ubuntu debian ## build all deb packages +deb: ubuntu debian raspbian ## build all deb packages -ubuntu: ubuntu-zesty ubuntu-yakkety ubuntu-xenial ubuntu-trusty ## build all ubuntu deb packages +ubuntu: ubuntu-zesty ubuntu-xenial ubuntu-trusty ## build all ubuntu deb packages debian: debian-stretch debian-wheezy debian-jessie ## build all debian deb packages +raspbian: raspbian-stretch debian-jessie ## build all raspbian deb packages + ubuntu-xenial: ## build ubuntu xenial deb packages docker build -t debbuild-$@/$(ARCH) -f $(CURDIR)/$@/Dockerfile.$(ARCH) . docker run --rm -i \ @@ -47,18 +49,6 @@ ubuntu-trusty: ## build ubuntu trusty deb packages debbuild-$@/$(ARCH) $(CHOWN) -R $(shell id -u):$(shell id -g) debbuild/$@ -ubuntu-yakkety: ## build ubuntu yakkety deb packages - docker build -t debbuild-$@/$(ARCH) -f $(CURDIR)/$@/Dockerfile.$(ARCH) . - docker run --rm -i \ - -e VERSION=$(VERSION) \ - -e DOCKER_GITCOMMIT=$(GITCOMMIT) \ - -v $(CURDIR)/debbuild/$@:/build \ - -v $(ENGINE_DIR):/engine \ - -v $(CLI_DIR):/cli \ - -v $(CURDIR)/systemd:/root/build-deb/systemd \ - debbuild-$@/$(ARCH) - $(CHOWN) -R $(shell id -u):$(shell id -g) debbuild/$@ - ubuntu-zesty: ## build ubuntu zesty deb packages docker build -t debbuild-$@/$(ARCH) -f $(CURDIR)/$@/Dockerfile.$(ARCH) . docker run --rm -i \ @@ -106,3 +96,27 @@ debian-wheezy: ## build debian wheezy deb packages -v $(CURDIR)/systemd:/root/build-deb/systemd \ debbuild-$@/$(ARCH) $(CHOWN) -R $(shell id -u):$(shell id -g) debbuild/$@ + +raspbian-jessie: ## build raspbian jessie deb packages + docker build -t debbuild-$@/$(ARCH) -f $(CURDIR)/$@/Dockerfile.$(ARCH) . + docker run --rm -i \ + -e VERSION=$(VERSION) \ + -e DOCKER_GITCOMMIT=$(GITCOMMIT) \ + -v $(CURDIR)/debbuild/$@:/build \ + -v $(ENGINE_DIR):/engine \ + -v $(CLI_DIR):/cli \ + -v $(CURDIR)/systemd:/root/build-deb/systemd \ + debbuild-$@/$(ARCH) + $(CHOWN) -R $(shell id -u):$(shell id -g) debbuild/$@ + +raspbian-stretch: ## build raspbian stretch deb packages + docker build -t debbuild-$@/$(ARCH) -f $(CURDIR)/$@/Dockerfile.$(ARCH) . + docker run --rm -i \ + -e VERSION=$(VERSION) \ + -e DOCKER_GITCOMMIT=$(GITCOMMIT) \ + -v $(CURDIR)/debbuild/$@:/build \ + -v $(ENGINE_DIR):/engine \ + -v $(CLI_DIR):/cli \ + -v $(CURDIR)/systemd:/root/build-deb/systemd \ + debbuild-$@/$(ARCH) + $(CHOWN) -R $(shell id -u):$(shell id -g) debbuild/$@ diff --git a/components/packaging/deb/build-deb b/components/packaging/deb/build-deb index 2ca570f07f..713489bad5 100755 --- a/components/packaging/deb/build-deb +++ b/components/packaging/deb/build-deb @@ -1,5 +1,6 @@ #!/usr/bin/env bash set -x +set -e # I want to rip this install-binaries script out so badly cd engine TMP_GOPATH="/go" bash hack/dockerfile/install-binaries.sh runc-dynamic containerd-dynamic proxy-dynamic tini @@ -21,11 +22,11 @@ tilde='~' # ouch Bash 4.2 vs 4.3, you keel me GIT_COMMAND="git --git-dir=/root/build-deb/engine/.git --work-tree=/root/build-deb/engine/" debVersion="${VERSION//-/$tilde}" # using \~ or '~' here works in 4.3, but not 4.2; just ~ causes $HOME to be inserted, hence the $tilde # if we have a "-dev" suffix or have change in Git, let's make this package version more complex so it works better -if [[ "$VERSION" == *-dev ]] || [ -n "$($GIT_COMMAND status --porcelain)" ]; then - gitUnix="$($GIT_COMMAND log -1 --pretty='%at')" - gitDate="$(date --date "@$gitUnix" +'%Y%m%d.%H%M%S')" - gitCommit="$($GIT_COMMAND log -1 --pretty='%h')" - gitVersion="git${gitDate}.0.${gitCommit}" +if [[ "$VERSION" == *-dev ]]; then + # TODO: Re-introduce git commit time into version number + todaysDate="$(date +'%Y%m%d.%H%M%S')" + # We're guaranteed to have DOCKER_GITCOMMIT in the env + gitVersion="git${todaysDate}.0.${DOCKER_GITCOMMIT}" # gitVersion is now something like 'git20150128.112847.0.17e840a' debVersion="$debVersion~$gitVersion" @@ -53,7 +54,7 @@ EOF export DOCKER_GITCOMMIT=${DOCKER_GITCOMMIT-$($GIT_COMMAND rev-parse --short HEAD)} echo VERSION BBB $VERSION -dpkg-buildpackage -v -uc -us -I.git +dpkg-buildpackage -uc -us -I.git destination="/build" mkdir -p "$destination" mv -v /root/docker-ce* "$destination" diff --git a/components/packaging/deb/common/rules b/components/packaging/deb/common/rules index 3d16fc476e..e2962bb78e 100644 --- a/components/packaging/deb/common/rules +++ b/components/packaging/deb/common/rules @@ -12,7 +12,7 @@ override_dh_gencontrol: override_dh_auto_build: cd engine && ./hack/make.sh dynbinary - LDFLAGS='' make -C cli VERSION=$(VERSION) GITCOMMIT=$(DOCKER_GITCOMMIT) dynbinary manpages + cd /go/src/github.com/docker/cli && LDFLAGS='' make VERSION=$(VERSION) GITCOMMIT=$(DOCKER_GITCOMMIT) dynbinary manpages override_dh_auto_test: ./engine/bundles/$(BUNDLE_VERSION)/dynbinary-daemon/dockerd -v diff --git a/components/packaging/deb/ubuntu-yakkety/Dockerfile.armv7l b/components/packaging/deb/raspbian-jessie/Dockerfile.armv7l similarity index 72% rename from components/packaging/deb/ubuntu-yakkety/Dockerfile.armv7l rename to components/packaging/deb/raspbian-jessie/Dockerfile.armv7l index 4cb50aa32c..a6ec68a2e5 100644 --- a/components/packaging/deb/ubuntu-yakkety/Dockerfile.armv7l +++ b/components/packaging/deb/raspbian-jessie/Dockerfile.armv7l @@ -1,8 +1,13 @@ -FROM armhf/ubuntu:yakkety +FROM resin/rpi-raspbian:jessie -RUN apt-get update && apt-get install -y apparmor bash-completion btrfs-tools build-essential cmake curl ca-certificates debhelper dh-apparmor dh-systemd git libapparmor-dev libdevmapper-dev libltdl-dev libseccomp-dev pkg-config vim-common libsystemd-dev --no-install-recommends && rm -rf /var/lib/apt/lists/* +# allow replacing archive mirror +ARG APT_MIRROR=archive.raspbian.org +RUN sed -ri "s/archive.raspbian.org/$APT_MIRROR/g" /etc/apt/sources.list + +RUN apt-get update && apt-get install -y apparmor bash-completion btrfs-tools build-essential cmake curl ca-certificates debhelper dh-apparmor dh-systemd git libapparmor-dev libdevmapper-dev libltdl-dev pkg-config vim-common libsystemd-journal-dev --no-install-recommends && rm -rf /var/lib/apt/lists/* ENV GO_VERSION 1.8.3 +ENV GOARM 6 RUN curl -fSL "https://golang.org/dl/go${GO_VERSION}.linux-armv6l.tar.gz" | tar xzC /usr/local ENV GOPATH /go ENV PATH $PATH:/usr/local/go/bin:$GOPATH/bin @@ -20,8 +25,8 @@ RUN mkdir -p /go/src/github.com/docker && \ ln -snf /root/build-deb/cli /go/src/github.com/docker/cli -ENV DISTRO ubuntu -ENV SUITE yakkety +ENV DISTRO raspbian +ENV SUITE jessie WORKDIR /root/build-deb diff --git a/components/packaging/deb/ubuntu-yakkety/Dockerfile.s390x b/components/packaging/deb/raspbian-stretch/Dockerfile.armv7l similarity index 74% rename from components/packaging/deb/ubuntu-yakkety/Dockerfile.s390x rename to components/packaging/deb/raspbian-stretch/Dockerfile.armv7l index d011b380c8..738be12f0c 100644 --- a/components/packaging/deb/ubuntu-yakkety/Dockerfile.s390x +++ b/components/packaging/deb/raspbian-stretch/Dockerfile.armv7l @@ -1,9 +1,14 @@ -FROM s390x/ubuntu:yakkety +FROM resin/rpi-raspbian:stretch + +# allow replacing archive mirror +ARG APT_MIRROR=archive.raspbian.org +RUN sed -ri "s/archive.raspbian.org/$APT_MIRROR/g" /etc/apt/sources.list RUN apt-get update && apt-get install -y apparmor bash-completion btrfs-tools build-essential cmake curl ca-certificates debhelper dh-apparmor dh-systemd git libapparmor-dev libdevmapper-dev libltdl-dev libseccomp-dev pkg-config vim-common libsystemd-dev --no-install-recommends && rm -rf /var/lib/apt/lists/* ENV GO_VERSION 1.8.3 -RUN curl -fSL "https://golang.org/dl/go${GO_VERSION}.linux-s390x.tar.gz" | tar xzC /usr/local +ENV GOARM 6 +RUN curl -fSL "https://golang.org/dl/go${GO_VERSION}.linux-armv6l.tar.gz" | tar xzC /usr/local ENV GOPATH /go ENV PATH $PATH:/usr/local/go/bin:$GOPATH/bin ENV DOCKER_BUILDTAGS apparmor pkcs11 seccomp selinux @@ -20,8 +25,8 @@ RUN mkdir -p /go/src/github.com/docker && \ ln -snf /root/build-deb/cli /go/src/github.com/docker/cli -ENV DISTRO ubuntu -ENV SUITE yakkety +ENV DISTRO raspbian +ENV SUITE stretch WORKDIR /root/build-deb diff --git a/components/packaging/deb/ubuntu-xenial/Dockerfile.aarch64 b/components/packaging/deb/ubuntu-xenial/Dockerfile.aarch64 new file mode 100644 index 0000000000..fd2ca681d2 --- /dev/null +++ b/components/packaging/deb/ubuntu-xenial/Dockerfile.aarch64 @@ -0,0 +1,36 @@ +FROM aarch64/ubuntu:xenial + +RUN apt-get update && apt-get install -y golang-go apparmor bash-completion btrfs-tools build-essential cmake curl ca-certificates debhelper dh-apparmor dh-systemd git libapparmor-dev libdevmapper-dev libltdl-dev libseccomp-dev pkg-config vim-common libsystemd-dev --no-install-recommends && rm -rf /var/lib/apt/lists/* + +# Install Go +# We don't have official binary golang 1.7.5 tarballs for ARM64, eigher for Go or +# bootstrap, so we use golang-go (1.6) as bootstrap to build Go from source code. +# We don't use the official ARMv6 released binaries as a GOROOT_BOOTSTRAP, because +# not all ARM64 platforms support 32-bit mode. 32-bit mode is optional for ARMv8. +ENV GO_VERSION 1.8.3 +RUN mkdir /usr/src/go && curl -fsSL https://golang.org/dl/go${GO_VERSION}.src.tar.gz | tar -v -C /usr/src/go -xz --strip-components=1 \ + && cd /usr/src/go/src \ + && GOOS=linux GOARCH=arm64 GOROOT_BOOTSTRAP="$(go env GOROOT)" ./make.bash + +ENV GOPATH /go +ENV PATH /go/bin:/usr/src/go/bin:$PATH +ENV DOCKER_BUILDTAGS apparmor seccomp selinux +ENV RUNC_BUILDTAGS apparmor seccomp selinux + +COPY common/ /root/build-deb/debian +COPY build-deb /root/build-deb/build-deb + +RUN mkdir -p /go/src/github.com/docker && \ + mkdir -p /go/src/github.com/opencontainers && \ + ln -snf /engine /root/build-deb/engine && \ + ln -snf /cli /root/build-deb/cli && \ + ln -snf /root/build-deb/engine /go/src/github.com/docker/docker && \ + ln -snf /root/build-deb/cli /go/src/github.com/docker/cli + + +ENV DISTRO ubuntu +ENV SUITE xenial + +WORKDIR /root/build-deb + +ENTRYPOINT ["/root/build-deb/build-deb"] diff --git a/components/packaging/deb/ubuntu-yakkety/Dockerfile.x86_64 b/components/packaging/deb/ubuntu-yakkety/Dockerfile.x86_64 deleted file mode 100644 index 31b53256bc..0000000000 --- a/components/packaging/deb/ubuntu-yakkety/Dockerfile.x86_64 +++ /dev/null @@ -1,28 +0,0 @@ -FROM ubuntu:yakkety - -RUN apt-get update && apt-get install -y apparmor bash-completion btrfs-tools build-essential cmake curl ca-certificates debhelper dh-apparmor dh-systemd git libapparmor-dev libdevmapper-dev libltdl-dev libseccomp-dev pkg-config vim-common libsystemd-dev --no-install-recommends && rm -rf /var/lib/apt/lists/* - -ENV GO_VERSION 1.8.3 -RUN curl -fSL "https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz" | tar xzC /usr/local -ENV GOPATH /go -ENV PATH $PATH:/usr/local/go/bin:$GOPATH/bin -ENV DOCKER_BUILDTAGS apparmor pkcs11 selinux -ENV RUNC_BUILDTAGS apparmor selinux - -COPY common/ /root/build-deb/debian -COPY build-deb /root/build-deb/build-deb - -RUN mkdir -p /go/src/github.com/docker && \ - mkdir -p /go/src/github.com/opencontainers && \ - ln -snf /engine /root/build-deb/engine && \ - ln -snf /cli /root/build-deb/cli && \ - ln -snf /root/build-deb/engine /go/src/github.com/docker/docker && \ - ln -snf /root/build-deb/cli /go/src/github.com/docker/cli - - -ENV DISTRO ubuntu -ENV SUITE yakkety - -WORKDIR /root/build-deb - -ENTRYPOINT ["/root/build-deb/build-deb"] diff --git a/components/packaging/deb/ubuntu-zesty/Dockerfile.armv7l b/components/packaging/deb/ubuntu-zesty/Dockerfile.armv7l index c54495016b..670e8f1d6c 100644 --- a/components/packaging/deb/ubuntu-zesty/Dockerfile.armv7l +++ b/components/packaging/deb/ubuntu-zesty/Dockerfile.armv7l @@ -1,4 +1,4 @@ -FROM armhf/ubuntu:yakkety +FROM armhf/ubuntu:zesty RUN apt-get update && apt-get install -y apparmor bash-completion btrfs-tools build-essential cmake curl ca-certificates debhelper dh-apparmor dh-systemd git libapparmor-dev libdevmapper-dev libltdl-dev libseccomp-dev pkg-config vim-common libsystemd-dev --no-install-recommends && rm -rf /var/lib/apt/lists/* diff --git a/components/packaging/detect_alpine_image b/components/packaging/detect_alpine_image index 282a49f9b8..2b59ebac7d 100755 --- a/components/packaging/detect_alpine_image +++ b/components/packaging/detect_alpine_image @@ -9,6 +9,8 @@ elif [ "$arch" = "armv7l" ]; then img="armhf/alpine" elif [ "$arch" = "s390x" ]; then img="s390x/alpine" +elif [ "$arch" = "aarch64" ]; then + img="aarch64/alpine" else echo "Architecture $(arch) not supported" exit 1; diff --git a/components/packaging/rpm/Makefile b/components/packaging/rpm/Makefile index 960ff38222..d894c950e1 100644 --- a/components/packaging/rpm/Makefile +++ b/components/packaging/rpm/Makefile @@ -22,7 +22,7 @@ RPMBUILD_FLAGS=-ba\ --define '_experimental $(DOCKER_EXPERIMENTAL)' \ SPECS/docker-ce.spec -.PHONY: help clean rpm fedora centos fedora-25 fedora-24 centos-7 +.PHONY: help clean rpm fedora centos fedora-26 fedora-25 fedora-24 centos-7 help: ## show make targets @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {sub("\\\\n",sprintf("\n%22c"," "), $$2);printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) @@ -33,10 +33,15 @@ clean: ## remove build artifacts rpm: fedora centos ## build all rpm packages -fedora: fedora-25 fedora-24 ## build all fedora rpm packages +fedora: fedora-26 fedora-25 fedora-24 ## build all fedora rpm packages centos: centos-7 ## build all centos rpm packages +fedora-26: rpmbuild/SOURCES/engine.tgz rpmbuild/SOURCES/cli.tgz ## build fedora-26 rpm packages + docker build -t rpmbuild-$@/$(ARCH) -f $@/Dockerfile.$(ARCH) $@ + $(RPMBUILD) rpmbuild-$@/$(ARCH) $(RPMBUILD_FLAGS) + $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild + fedora-25: rpmbuild/SOURCES/engine.tgz rpmbuild/SOURCES/cli.tgz ## build fedora-25 rpm packages docker build -t rpmbuild-$@/$(ARCH) -f $@/Dockerfile.$(ARCH) $@ $(RPMBUILD) rpmbuild-$@/$(ARCH) $(RPMBUILD_FLAGS) diff --git a/components/packaging/rpm/fedora-26/Dockerfile.x86_64 b/components/packaging/rpm/fedora-26/Dockerfile.x86_64 new file mode 100644 index 0000000000..a804b60631 --- /dev/null +++ b/components/packaging/rpm/fedora-26/Dockerfile.x86_64 @@ -0,0 +1,17 @@ +FROM fedora:26 +RUN dnf -y upgrade +RUN dnf install -y @development-tools fedora-packager +RUN dnf install -y btrfs-progs-devel device-mapper-devel glibc-static libseccomp-devel libselinux-devel libtool-ltdl-devel pkgconfig selinux-policy selinux-policy-devel systemd-devel tar git cmake vim-common +ENV GO_VERSION 1.8.3 +ENV DISTRO fedora +ENV SUITE 26 +RUN curl -fSL "https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz" | tar xzC /usr/local +ENV GOPATH /go +ENV PATH $PATH:/usr/local/go/bin:$GOPATH/bin +ENV AUTO_GOPATH 1 +ENV DOCKER_BUILDTAGS pkcs11 seccomp selinux +ENV RUNC_BUILDTAGS seccomp selinux +RUN mkdir -p /go/src/github.com/docker && mkdir -p /go/src/github.com/opencontainers +COPY docker-ce.spec /root/rpmbuild/SPECS/docker-ce.spec +WORKDIR /root/rpmbuild +ENTRYPOINT ["/bin/rpmbuild"] diff --git a/components/packaging/rpm/fedora-26/docker-ce.spec b/components/packaging/rpm/fedora-26/docker-ce.spec new file mode 100644 index 0000000000..a78bb2038f --- /dev/null +++ b/components/packaging/rpm/fedora-26/docker-ce.spec @@ -0,0 +1,223 @@ +Name: docker-ce +Version: %{_version} +Release: %{_release}%{?dist} +Summary: The open-source application container engine +Group: Tools/Docker +License: ASL 2.0 +Source0: engine.tgz +Source1: cli.tgz +URL: https://www.docker.com +Vendor: Docker +Packager: Docker + +# DWZ problem with multiple golang binary, see bug +# https://bugzilla.redhat.com/show_bug.cgi?id=995136#c12 +%global _dwz_low_mem_die_limit 0 +%global is_systemd 1 +%global with_selinux 1 + +BuildRequires: pkgconfig(systemd) + +# required packages on install +Requires: /bin/sh +Requires: container-selinux >= 2.9 +Requires: iptables +Requires: libcgroup +Requires: systemd-units +Requires: tar +Requires: xz + +# Resolves: rhbz#1165615 +Requires: device-mapper-libs >= 1.02.90-1 + +# conflicting packages +Conflicts: docker +Conflicts: docker-io +Conflicts: docker-engine-cs +Conflicts: docker-ee + +# Obsolete packages +Obsoletes: docker-ce-selinux +Obsoletes: docker-engine-selinux +Obsoletes: docker-engine + +%description +Docker is an open source project to build, ship and run any application as a +lightweight container. + +Docker containers are both hardware-agnostic and platform-agnostic. This means +they can run anywhere, from your laptop to the largest EC2 compute instance and +everything in between - and they don't require you to use a particular +language, framework or packaging system. That makes them great building blocks +for deploying and scaling web apps, databases, and backend services without +depending on a particular stack or provider. + +%prep +%setup -q -c -n src -a 1 + +%build +export DOCKER_GITCOMMIT=%{_gitcommit} +mkdir -p /go/src/github.com/docker +rm -f /go/src/github.com/docker/cli +ln -s /root/rpmbuild/BUILD/src/cli /go/src/github.com/docker/cli +pushd /go/src/github.com/docker/cli +make VERSION=%{_origversion} GITCOMMIT=%{_gitcommit} dynbinary manpages # cli +popd +pushd engine +TMP_GOPATH="/go" hack/dockerfile/install-binaries.sh runc-dynamic containerd-dynamic proxy-dynamic tini +hack/make.sh dynbinary +popd +mkdir -p plugin +printf '{"edition_type":"ce","edition_name":"%s","edition_version":"%s"}\n' "${DISTRO}" "%{_version}" > plugin/.plugin-metadata + +%check +cli/build/docker -v +engine/bundles/%{_origversion}/dynbinary-daemon/dockerd -v + +%install +# install binary +install -d $RPM_BUILD_ROOT/%{_bindir} +install -p -m 755 cli/build/docker $RPM_BUILD_ROOT/%{_bindir}/docker +install -p -m 755 engine/bundles/%{_origversion}/dynbinary-daemon/dockerd-%{_origversion} $RPM_BUILD_ROOT/%{_bindir}/dockerd + +# install proxy +install -p -m 755 /usr/local/bin/docker-proxy $RPM_BUILD_ROOT/%{_bindir}/docker-proxy + +# install containerd +install -p -m 755 /usr/local/bin/docker-containerd $RPM_BUILD_ROOT/%{_bindir}/docker-containerd +install -p -m 755 /usr/local/bin/docker-containerd-shim $RPM_BUILD_ROOT/%{_bindir}/docker-containerd-shim +install -p -m 755 /usr/local/bin/docker-containerd-ctr $RPM_BUILD_ROOT/%{_bindir}/docker-containerd-ctr + +# install runc +install -p -m 755 /usr/local/bin/docker-runc $RPM_BUILD_ROOT/%{_bindir}/docker-runc + +# install tini +install -p -m 755 /usr/local/bin/docker-init $RPM_BUILD_ROOT/%{_bindir}/docker-init + +# install udev rules +install -d $RPM_BUILD_ROOT/%{_sysconfdir}/udev/rules.d +install -p -m 644 engine/contrib/udev/80-docker.rules $RPM_BUILD_ROOT/%{_sysconfdir}/udev/rules.d/80-docker.rules + +# add init scripts +install -d $RPM_BUILD_ROOT/etc/sysconfig +install -d $RPM_BUILD_ROOT/%{_initddir} +install -d $RPM_BUILD_ROOT/%{_unitdir} +install -p -m 644 /systemd/docker.service $RPM_BUILD_ROOT/%{_unitdir}/docker.service +# add bash, zsh, and fish completions +install -d $RPM_BUILD_ROOT/usr/share/bash-completion/completions +install -d $RPM_BUILD_ROOT/usr/share/zsh/vendor-completions +install -d $RPM_BUILD_ROOT/usr/share/fish/vendor_completions.d +install -p -m 644 cli/contrib/completion/bash/docker $RPM_BUILD_ROOT/usr/share/bash-completion/completions/docker +install -p -m 644 cli/contrib/completion/zsh/_docker $RPM_BUILD_ROOT/usr/share/zsh/vendor-completions/_docker +install -p -m 644 cli/contrib/completion/fish/docker.fish $RPM_BUILD_ROOT/usr/share/fish/vendor_completions.d/docker.fish + +# install manpages +install -d %{buildroot}%{_mandir}/man1 +install -p -m 644 cli/man/man1/*.1 $RPM_BUILD_ROOT/%{_mandir}/man1 +install -d %{buildroot}%{_mandir}/man5 +install -p -m 644 cli/man/man5/*.5 $RPM_BUILD_ROOT/%{_mandir}/man5 +install -d %{buildroot}%{_mandir}/man8 +install -p -m 644 cli/man/man8/*.8 $RPM_BUILD_ROOT/%{_mandir}/man8 + +# add vimfiles +install -d $RPM_BUILD_ROOT/usr/share/vim/vimfiles/doc +install -d $RPM_BUILD_ROOT/usr/share/vim/vimfiles/ftdetect +install -d $RPM_BUILD_ROOT/usr/share/vim/vimfiles/syntax +install -p -m 644 engine/contrib/syntax/vim/doc/dockerfile.txt $RPM_BUILD_ROOT/usr/share/vim/vimfiles/doc/dockerfile.txt +install -p -m 644 engine/contrib/syntax/vim/ftdetect/dockerfile.vim $RPM_BUILD_ROOT/usr/share/vim/vimfiles/ftdetect/dockerfile.vim +install -p -m 644 engine/contrib/syntax/vim/syntax/dockerfile.vim $RPM_BUILD_ROOT/usr/share/vim/vimfiles/syntax/dockerfile.vim + +# add nano +install -d $RPM_BUILD_ROOT/usr/share/nano +install -p -m 644 engine/contrib/syntax/nano/Dockerfile.nanorc $RPM_BUILD_ROOT/usr/share/nano/Dockerfile.nanorc + +mkdir -p build-docs +for engine_file in AUTHORS CHANGELOG.md CONTRIBUTING.md LICENSE MAINTAINERS NOTICE README.md; do + cp "engine/$engine_file" "build-docs/engine-$engine_file" +done +for cli_file in LICENSE MAINTAINERS NOTICE README.md; do + cp "cli/$cli_file" "build-docs/cli-$cli_file" +done + +# list files owned by the package here +%files +%doc build-docs/engine-AUTHORS build-docs/engine-CHANGELOG.md build-docs/engine-CONTRIBUTING.md build-docs/engine-LICENSE build-docs/engine-MAINTAINERS build-docs/engine-NOTICE build-docs/engine-README.md +%doc build-docs/cli-LICENSE build-docs/cli-MAINTAINERS build-docs/cli-NOTICE build-docs/cli-README.md +/%{_bindir}/docker +/%{_bindir}/dockerd +/%{_bindir}/docker-containerd +/%{_bindir}/docker-containerd-shim +/%{_bindir}/docker-containerd-ctr +/%{_bindir}/docker-proxy +/%{_bindir}/docker-runc +/%{_bindir}/docker-init +/%{_sysconfdir}/udev/rules.d/80-docker.rules +/%{_unitdir}/docker.service +/usr/share/bash-completion/completions/docker +/usr/share/zsh/vendor-completions/_docker +/usr/share/fish/vendor_completions.d/docker.fish +%doc +/%{_mandir}/man1/* +/%{_mandir}/man5/* +/%{_mandir}/man8/* +/usr/share/vim/vimfiles/doc/dockerfile.txt +/usr/share/vim/vimfiles/ftdetect/dockerfile.vim +/usr/share/vim/vimfiles/syntax/dockerfile.vim +/usr/share/nano/Dockerfile.nanorc + +%pre +if [ $1 -gt 0 ] ; then + # package upgrade scenario, before new files are installed + + # clear any old state + rm -f %{_localstatedir}/lib/rpm-state/docker-is-active > /dev/null 2>&1 || : + + # check if docker service is running + if systemctl is-active docker > /dev/null 2>&1; then + systemctl stop docker > /dev/null 2>&1 || : + touch %{_localstatedir}/lib/rpm-state/docker-is-active > /dev/null 2>&1 || : + fi +fi + +%post +%systemd_post docker +if ! getent group docker > /dev/null; then + groupadd --system docker +fi + +%preun +%systemd_preun docker + +%postun +%systemd_postun_with_restart docker + +%posttrans +if [ $1 -ge 0 ] ; then + # package upgrade scenario, after new files are installed + + # check if docker was running before upgrade + if [ -f %{_localstatedir}/lib/rpm-state/docker-is-active ]; then + systemctl start docker > /dev/null 2>&1 || : + rm -f %{_localstatedir}/lib/rpm-state/docker-is-active > /dev/null 2>&1 || : + fi +fi + +%changelog + +* Wed Jun 21 2017 17.06.0-ce +- release docker-ce 17.06.0-ce + +* Mon Jun 19 2017 17.06.0-ce-rc5 +- release docker-ce 17.06.0-ce-rc5 + +* Thu Jun 15 2017 17.06.0-ce-rc4 +- release docker-ce 17.06.0-ce-rc4 + +* Tue Jun 13 2017 17.06.0-ce-rc3 +- release docker-ce 17.06.0-ce-rc3 + +* Wed Jun 07 2017 17.06.0-ce-rc2 +- release docker-ce 17.06.0-ce-rc2 + +* Mon May 29 2017 17.06.0-ce-rc1 +- release docker-ce 17.06.0-ce-rc1