From 9e2e0e95d987fdebfd51af34491088f5a1b842e7 Mon Sep 17 00:00:00 2001 From: Eli Uriegas Date: Mon, 6 Aug 2018 18:13:03 +0000 Subject: [PATCH 01/11] Add RPM package building for docker-ce-cli Splits out the docker-ce package and docker-ce-cli package into their own things. Still TODO: need to have a cleanup on the dependencies for the Dockerfiles Signed-off-by: Eli Uriegas Upstream-commit: 2a27fb1dad0f91c25acb885c117563a33f6c5e88 Component: packaging --- components/packaging/rpm/Makefile | 29 ++--- .../packaging/rpm/SPECS/docker-ce-cli.spec | 100 ++++++++++++++++++ components/packaging/rpm/SPECS/docker-ce.spec | 51 +++++++++ .../packaging/rpm/centos-7/Dockerfile.aarch64 | 7 +- .../packaging/rpm/centos-7/Dockerfile.x86_64 | 7 +- .../rpm/fedora-27/Dockerfile.aarch64 | 8 +- .../packaging/rpm/fedora-27/Dockerfile.x86_64 | 8 +- .../rpm/fedora-28/Dockerfile.aarch64 | 8 +- .../packaging/rpm/fedora-28/Dockerfile.x86_64 | 9 +- 9 files changed, 182 insertions(+), 45 deletions(-) create mode 100644 components/packaging/rpm/SPECS/docker-ce-cli.spec create mode 100644 components/packaging/rpm/SPECS/docker-ce.spec diff --git a/components/packaging/rpm/Makefile b/components/packaging/rpm/Makefile index fa2cb74c09..3bf1ad5e1a 100644 --- a/components/packaging/rpm/Makefile +++ b/components/packaging/rpm/Makefile @@ -4,21 +4,18 @@ CLI_DIR:=$(CURDIR)/../../cli GITCOMMIT=$(shell cd $(ENGINE_DIR) && git rev-parse --short HEAD) VERSION?=0.0.0-dev GO_VERSION:=1.10.3 -GEN_RPM_VER=$(shell ./gen-rpm-ver $(ENGINE_DIR) $(VERSION)) +GEN_RPM_VER=$(shell ./gen-rpm-ver $(CLI_DIR) $(VERSION)) CHOWN=docker run --rm -i -v $(CURDIR):/v -w /v alpine chown RPMBUILD=docker run --privileged --rm -i\ -v $(CURDIR)/rpmbuild/SOURCES:/root/rpmbuild/SOURCES \ - -v $(CURDIR)/rpmbuild/BUILD:/root/rpmbuild/BUILD \ - -v $(CURDIR)/rpmbuild/BUILDROOT:/root/rpmbuild/BUILDROOT \ -v $(CURDIR)/rpmbuild/RPMS:/root/rpmbuild/RPMS \ - -v $(CURDIR)/rpmbuild/SRPMS:/root/rpmbuild/SRPMS \ - -v $(CURDIR)/systemd:/systemd + -v $(CURDIR)/rpmbuild/SRPMS:/root/rpmbuild/SRPMS RPMBUILD_FLAGS=-ba\ --define '_gitcommit $(word 3,$(GEN_RPM_VER))' \ --define '_release $(word 2,$(GEN_RPM_VER))' \ --define '_version $(word 1,$(GEN_RPM_VER))' \ --define '_origversion $(word 4, $(GEN_RPM_VER))' \ - SPECS/docker-ce.spec + SPECS/docker-ce-cli.spec SPECS/docker-ce.spec .PHONY: help help: ## show make targets @@ -43,20 +40,20 @@ engine-$(ARCH).tar: docker save -o $@ $$(cat ../image/image-linux) .PHONY: fedora-28 -fedora-28: engine-$(ARCH).tar rpmbuild/SOURCES/engine.tgz rpmbuild/SOURCES/cli.tgz ## build fedora-28 rpm packages - docker build --build-arg GO_VERSION=$(GO_VERSION) -t rpmbuild-$@/$(ARCH) -f $@/Dockerfile.$(ARCH) $@ +fedora-28: engine-$(ARCH).tar rpmbuild/SOURCES/cli.tgz ## build fedora-28 rpm packages + docker build --build-arg GO_VERSION=$(GO_VERSION) -t rpmbuild-$@/$(ARCH) -f $@/Dockerfile.$(ARCH) . $(RPMBUILD) rpmbuild-$@/$(ARCH) $(RPMBUILD_FLAGS) $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild .PHONY: fedora-27 -fedora-27:engine-$(ARCH).tar rpmbuild/SOURCES/engine.tgz rpmbuild/SOURCES/cli.tgz ## build fedora-27 rpm packages - docker build --build-arg GO_VERSION=$(GO_VERSION) -t rpmbuild-$@/$(ARCH) -f $@/Dockerfile.$(ARCH) $@ +fedora-27: engine-$(ARCH).tar rpmbuild/SOURCES/cli.tgz ## build fedora-27 rpm packages + docker build --build-arg GO_VERSION=$(GO_VERSION) -t rpmbuild-$@/$(ARCH) -f $@/Dockerfile.$(ARCH) . $(RPMBUILD) rpmbuild-$@/$(ARCH) $(RPMBUILD_FLAGS) $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild .PHONY: centos-7 -centos-7:engine-$(ARCH).tar rpmbuild/SOURCES/engine.tgz rpmbuild/SOURCES/cli.tgz ## build centos-7 rpm packages - docker build --build-arg GO_VERSION=$(GO_VERSION) -t rpmbuild-$@/$(ARCH) -f $@/Dockerfile.$(ARCH) $@ +centos-7: engine-$(ARCH).tar rpmbuild/SOURCES/cli.tgz ## build centos-7 rpm packages + docker build --build-arg GO_VERSION=$(GO_VERSION) -t rpmbuild-$@/$(ARCH) -f $@/Dockerfile.$(ARCH) . $(RPMBUILD) rpmbuild-$@/$(ARCH) $(RPMBUILD_FLAGS) $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild @@ -67,11 +64,3 @@ rpmbuild/SOURCES/cli.tgz: -v $(CURDIR)/rpmbuild/SOURCES:/v \ alpine \ tar -C / -c -z -f /v/cli.tgz --exclude .git cli - -rpmbuild/SOURCES/engine.tgz: - mkdir -p rpmbuild/SOURCES - docker run --rm -i -w /v \ - -v $(ENGINE_DIR):/engine \ - -v $(CURDIR)/rpmbuild/SOURCES:/v \ - alpine \ - tar -C / -c -z -f /v/engine.tgz --exclude .git engine diff --git a/components/packaging/rpm/SPECS/docker-ce-cli.spec b/components/packaging/rpm/SPECS/docker-ce-cli.spec new file mode 100644 index 0000000000..65ba0fbf3e --- /dev/null +++ b/components/packaging/rpm/SPECS/docker-ce-cli.spec @@ -0,0 +1,100 @@ +%global debug_package %{nil} + +Name: docker-ce-cli +Version: %{_version} +Release: %{_release}%{?dist} +Epoch: %{getenv:EPOCH} +Summary: The open-source application container engine +Group: Tools/Docker +License: ASL 2.0 +Source0: cli.tgz +URL: https://www.docker.com +Vendor: Docker +Packager: Docker + +# required packages on install +Requires: /bin/sh +Requires: containerd + +# conflicting packages +Conflicts: docker +Conflicts: docker-io +Conflicts: docker-engine-cs +Conflicts: docker-ee +Conflicts: docker-ee-cli + +# 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 + +%build +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 +DISABLE_WARN_OUTSIDE_CONTAINER=1 make VERSION=%{_origversion} GITCOMMIT=%{_gitcommit} dynbinary manpages # cli +popd + +# %check +# cli/build/docker -v + +%install +# install binary +install -d $RPM_BUILD_ROOT/%{_bindir} +install -p -m 755 cli/build/docker $RPM_BUILD_ROOT/%{_bindir}/docker + +# 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 + +mkdir -p build-docs +for cli_file in LICENSE MAINTAINERS NOTICE README.md; do + cp "cli/$cli_file" "build-docs/$cli_file" +done + +# list files owned by the package here +%files +%doc build-docs/LICENSE build-docs/MAINTAINERS build-docs/NOTICE build-docs/README.md +/%{_bindir}/docker +/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/* + + +%post +if ! getent group docker > /dev/null; then + groupadd --system docker +fi + +%changelog diff --git a/components/packaging/rpm/SPECS/docker-ce.spec b/components/packaging/rpm/SPECS/docker-ce.spec new file mode 100644 index 0000000000..a2e3d25b18 --- /dev/null +++ b/components/packaging/rpm/SPECS/docker-ce.spec @@ -0,0 +1,51 @@ +%global debug_package %{nil} + +Name: docker-ce +Version: %{_version} +Release: %{_release}%{?dist} +Epoch: %{getenv:EPOCH} +Summary: The open-source application container engine +Group: Tools/Docker +License: ASL 2.0 +URL: https://www.docker.com +Vendor: Docker +Packager: Docker + +Requires: docker-ce-cli + +# 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. + +%install + +%files + +%post +if ! getent group docker > /dev/null; then + groupadd --system docker +fi +# TODO Needs upgrade vs. install logic handling here +if ctr --namespace docker container info dockerd > /dev/null 2>&1 ; then + docker engine init +fi + +%changelog diff --git a/components/packaging/rpm/centos-7/Dockerfile.aarch64 b/components/packaging/rpm/centos-7/Dockerfile.aarch64 index 591216bcc3..b232004aa4 100644 --- a/components/packaging/rpm/centos-7/Dockerfile.aarch64 +++ b/components/packaging/rpm/centos-7/Dockerfile.aarch64 @@ -11,11 +11,10 @@ ENV PATH $PATH:/usr/local/go/bin:$GOPATH/bin ENV AUTO_GOPATH 1 ENV DOCKER_BUILDTAGS pkcs11 seccomp selinux ENV RUNC_BUILDTAGS seccomp selinux -COPY docker-ce.spec /root/rpmbuild/SPECS/docker-ce.spec +COPY SPECS /root/rpmbuild/SPECS RUN yum install -y rpm-build rpmlint -RUN rpmlint /root/rpmbuild/SPECS/docker-ce.spec # make sure spec file is ok before installing build deps -RUN yum-builddep -y /root/rpmbuild/SPECS/docker-ce.spec # this always exits 0 so need to rpmlint before running -RUN mkdir -p /go/src/github.com/docker /go/src/github.com/opencontainers +RUN rpmlint /root/rpmbuild/SPECS/*.spec # make sure spec file is ok before installing build deps +RUN yum-builddep -y /root/rpmbuild/SPECS/*.spec # this always exits 0 so need to rpmlint before running COPY --from=golang /usr/local/go /usr/local/go/ WORKDIR /root/rpmbuild ENTRYPOINT ["/bin/rpmbuild"] diff --git a/components/packaging/rpm/centos-7/Dockerfile.x86_64 b/components/packaging/rpm/centos-7/Dockerfile.x86_64 index 64e7e12301..f54eb7e6a2 100644 --- a/components/packaging/rpm/centos-7/Dockerfile.x86_64 +++ b/components/packaging/rpm/centos-7/Dockerfile.x86_64 @@ -11,11 +11,10 @@ ENV PATH $PATH:/usr/local/go/bin:$GOPATH/bin ENV AUTO_GOPATH 1 ENV DOCKER_BUILDTAGS pkcs11 seccomp selinux ENV RUNC_BUILDTAGS seccomp selinux -COPY docker-ce.spec /root/rpmbuild/SPECS/docker-ce.spec RUN yum install -y rpm-build rpmlint -RUN rpmlint /root/rpmbuild/SPECS/docker-ce.spec # make sure spec file is ok before installing build deps -RUN yum-builddep -y /root/rpmbuild/SPECS/docker-ce.spec # this always exits 0 so need to rpmlint before running -RUN mkdir -p /go/src/github.com/docker /go/src/github.com/opencontainers +COPY SPECS /root/rpmbuild/SPECS +RUN rpmlint /root/rpmbuild/SPECS/*.spec # make sure spec file is ok before installing build deps +RUN yum-builddep -y /root/rpmbuild/SPECS/*.spec # this always exits 0 so need to rpmlint before running COPY --from=golang /usr/local/go /usr/local/go/ WORKDIR /root/rpmbuild ENTRYPOINT ["/bin/rpmbuild"] diff --git a/components/packaging/rpm/fedora-27/Dockerfile.aarch64 b/components/packaging/rpm/fedora-27/Dockerfile.aarch64 index cf99dd66f5..ebd6b29e66 100644 --- a/components/packaging/rpm/fedora-27/Dockerfile.aarch64 +++ b/components/packaging/rpm/fedora-27/Dockerfile.aarch64 @@ -11,10 +11,10 @@ ENV PATH $PATH:/usr/local/go/bin:$GOPATH/bin ENV AUTO_GOPATH 1 ENV DOCKER_BUILDTAGS pkcs11 seccomp selinux ENV RUNC_BUILDTAGS seccomp selinux -COPY docker-ce.spec /root/rpmbuild/SPECS/docker-ce.spec -RUN dnf install -y rpm-build dnf-plugins-core -RUN dnf builddep -y /root/rpmbuild/SPECS/docker-ce.spec -RUN mkdir -p /go/src/github.com/docker /go/src/github.com/opencontainers +RUN yum install -y rpm-build rpmlint +COPY SPECS /root/rpmbuild/SPECS +RUN rpmlint /root/rpmbuild/SPECS/*.spec # make sure spec file is ok before installing build deps +RUN yum-builddep -y /root/rpmbuild/SPECS/*.spec # this always exits 0 so need to rpmlint before running COPY --from=golang /usr/local/go /usr/local/go/ WORKDIR /root/rpmbuild ENTRYPOINT ["/bin/rpmbuild"] diff --git a/components/packaging/rpm/fedora-27/Dockerfile.x86_64 b/components/packaging/rpm/fedora-27/Dockerfile.x86_64 index e9baa01a70..4da38f342d 100644 --- a/components/packaging/rpm/fedora-27/Dockerfile.x86_64 +++ b/components/packaging/rpm/fedora-27/Dockerfile.x86_64 @@ -11,10 +11,10 @@ ENV PATH $PATH:/usr/local/go/bin:$GOPATH/bin ENV AUTO_GOPATH 1 ENV DOCKER_BUILDTAGS pkcs11 seccomp selinux ENV RUNC_BUILDTAGS seccomp selinux -COPY docker-ce.spec /root/rpmbuild/SPECS/docker-ce.spec -RUN dnf install -y rpm-build dnf-plugins-core -RUN dnf builddep -y /root/rpmbuild/SPECS/docker-ce.spec -RUN mkdir -p /go/src/github.com/docker /go/src/github.com/opencontainers +RUN yum install -y rpm-build rpmlint +COPY SPECS /root/rpmbuild/SPECS +RUN rpmlint /root/rpmbuild/SPECS/*.spec # make sure spec file is ok before installing build deps +RUN yum-builddep -y /root/rpmbuild/SPECS/*.spec # this always exits 0 so need to rpmlint before running COPY --from=golang /usr/local/go /usr/local/go/ WORKDIR /root/rpmbuild ENTRYPOINT ["/bin/rpmbuild"] diff --git a/components/packaging/rpm/fedora-28/Dockerfile.aarch64 b/components/packaging/rpm/fedora-28/Dockerfile.aarch64 index b5395fbbab..bd56bf5477 100644 --- a/components/packaging/rpm/fedora-28/Dockerfile.aarch64 +++ b/components/packaging/rpm/fedora-28/Dockerfile.aarch64 @@ -11,10 +11,10 @@ ENV PATH $PATH:/usr/local/go/bin:$GOPATH/bin ENV AUTO_GOPATH 1 ENV DOCKER_BUILDTAGS pkcs11 seccomp selinux ENV RUNC_BUILDTAGS seccomp selinux -COPY docker-ce.spec /root/rpmbuild/SPECS/docker-ce.spec -RUN dnf install -y rpm-build dnf-plugins-core -RUN dnf builddep -y /root/rpmbuild/SPECS/docker-ce.spec -RUN mkdir -p /go/src/github.com/docker /go/src/github.com/opencontainers +RUN yum install -y rpm-build rpmlint +COPY SPECS /root/rpmbuild/SPECS +RUN rpmlint /root/rpmbuild/SPECS/*.spec # make sure spec file is ok before installing build deps +RUN yum-builddep -y /root/rpmbuild/SPECS/*.spec # this always exits 0 so need to rpmlint before running COPY --from=golang /usr/local/go /usr/local/go/ WORKDIR /root/rpmbuild ENTRYPOINT ["/bin/rpmbuild"] diff --git a/components/packaging/rpm/fedora-28/Dockerfile.x86_64 b/components/packaging/rpm/fedora-28/Dockerfile.x86_64 index 5786485384..36c2de4f01 100644 --- a/components/packaging/rpm/fedora-28/Dockerfile.x86_64 +++ b/components/packaging/rpm/fedora-28/Dockerfile.x86_64 @@ -9,12 +9,11 @@ ENV SUITE 28 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 -COPY docker-ce.spec /root/rpmbuild/SPECS/docker-ce.spec -RUN dnf install -y rpm-build dnf-plugins-core -RUN dnf builddep -y /root/rpmbuild/SPECS/docker-ce.spec -RUN mkdir -p /go/src/github.com/docker /go/src/github.com/opencontainers +RUN yum install -y rpm-build rpmlint +COPY SPECS /root/rpmbuild/SPECS +RUN rpmlint /root/rpmbuild/SPECS/*.spec # make sure spec file is ok before installing build deps +RUN yum-builddep -y /root/rpmbuild/SPECS/*.spec # this always exits 0 so need to rpmlint before running COPY --from=golang /usr/local/go /usr/local/go/ WORKDIR /root/rpmbuild ENTRYPOINT ["/bin/rpmbuild"] From 2645463a176efc0cca0c594c731b789e7d4ac17f Mon Sep 17 00:00:00 2001 From: Eli Uriegas Date: Mon, 13 Aug 2018 23:26:59 +0000 Subject: [PATCH 02/11] Remove engine-$(ARCH).tar dependency for now Signed-off-by: Eli Uriegas Upstream-commit: 111b5babb924137df28c233ac40c23f7553a39da Component: packaging --- components/packaging/deb/Makefile | 16 ++++++++-------- components/packaging/rpm/Makefile | 10 +++------- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/components/packaging/deb/Makefile b/components/packaging/deb/Makefile index 70402d9802..0e35082c01 100644 --- a/components/packaging/deb/Makefile +++ b/components/packaging/deb/Makefile @@ -45,49 +45,49 @@ debian: debian-stretch debian-jessie ## build all debian deb packages raspbian: raspbian-stretch debian-jessie ## build all raspbian deb packages .PHONY: ubuntu-xenial -ubuntu-xenial: engine-$(ARCH).tar ## build ubuntu xenial deb packages +ubuntu-xenial: ## build ubuntu xenial deb packages $(BUILD) $(RUN) $(CHOWN) -R $(shell id -u):$(shell id -g) debbuild/$@ .PHONY: ubuntu-trusty -ubuntu-trusty: engine-$(ARCH).tar ## build ubuntu trusty deb packages +ubuntu-trusty: ## build ubuntu trusty deb packages $(BUILD) $(RUN) $(CHOWN) -R $(shell id -u):$(shell id -g) debbuild/$@ .PHONY: ubuntu-bionic -ubuntu-bionic: engine-$(ARCH).tar ## build ubuntu bionic deb packages +ubuntu-bionic: ## build ubuntu bionic deb packages $(BUILD) $(RUN) $(CHOWN) -R $(shell id -u):$(shell id -g) debbuild/$@ .PHONY: debian-buster -debian-buster: engine-$(ARCH).tar ## build debian buster deb packages +debian-buster: ## build debian buster deb packages $(BUILD) $(RUN) $(CHOWN) -R $(shell id -u):$(shell id -g) debbuild/$@ .PHONY: debian-jessie -debian-jessie: engine-$(ARCH).tar ## build debian jessie deb packages +debian-jessie: ## build debian jessie deb packages $(BUILD) $(RUN) $(CHOWN) -R $(shell id -u):$(shell id -g) debbuild/$@ .PHONY: debian-stretch -debian-stretch: engine-$(ARCH).tar ## build debian stretch deb packages +debian-stretch: ## build debian stretch deb packages $(BUILD) $(RUN) $(CHOWN) -R $(shell id -u):$(shell id -g) debbuild/$@ .PHONY: raspbian-jessie -raspbian-jessie: engine-$(ARCH).tar ## build raspbian jessie deb packages +raspbian-jessie: ## build raspbian jessie deb packages $(BUILD) $(RUN) $(CHOWN) -R $(shell id -u):$(shell id -g) debbuild/$@ .PHONY: raspbian-stretch -raspbian-stretch: engine-$(ARCH).tar ## build raspbian stretch deb packages +raspbian-stretch: ## build raspbian stretch deb packages $(BUILD) $(RUN) $(CHOWN) -R $(shell id -u):$(shell id -g) debbuild/$@ diff --git a/components/packaging/rpm/Makefile b/components/packaging/rpm/Makefile index 3bf1ad5e1a..a9fd0eb779 100644 --- a/components/packaging/rpm/Makefile +++ b/components/packaging/rpm/Makefile @@ -35,24 +35,20 @@ fedora: fedora-28 fedora-27 fedora-26 ## build all fedora rpm packages .PHONY: centos centos: centos-7 ## build all centos rpm packages -engine-$(ARCH).tar: - $(MAKE) -C ../image image-linux - docker save -o $@ $$(cat ../image/image-linux) - .PHONY: fedora-28 -fedora-28: engine-$(ARCH).tar rpmbuild/SOURCES/cli.tgz ## build fedora-28 rpm packages +fedora-28: rpmbuild/SOURCES/cli.tgz ## build fedora-28 rpm packages docker build --build-arg GO_VERSION=$(GO_VERSION) -t rpmbuild-$@/$(ARCH) -f $@/Dockerfile.$(ARCH) . $(RPMBUILD) rpmbuild-$@/$(ARCH) $(RPMBUILD_FLAGS) $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild .PHONY: fedora-27 -fedora-27: engine-$(ARCH).tar rpmbuild/SOURCES/cli.tgz ## build fedora-27 rpm packages +fedora-27: rpmbuild/SOURCES/cli.tgz ## build fedora-27 rpm packages docker build --build-arg GO_VERSION=$(GO_VERSION) -t rpmbuild-$@/$(ARCH) -f $@/Dockerfile.$(ARCH) . $(RPMBUILD) rpmbuild-$@/$(ARCH) $(RPMBUILD_FLAGS) $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild .PHONY: centos-7 -centos-7: engine-$(ARCH).tar rpmbuild/SOURCES/cli.tgz ## build centos-7 rpm packages +centos-7: rpmbuild/SOURCES/cli.tgz ## build centos-7 rpm packages docker build --build-arg GO_VERSION=$(GO_VERSION) -t rpmbuild-$@/$(ARCH) -f $@/Dockerfile.$(ARCH) . $(RPMBUILD) rpmbuild-$@/$(ARCH) $(RPMBUILD_FLAGS) $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild From 4db1f97e23f97ead6bc521c089a4c793f943ff7b Mon Sep 17 00:00:00 2001 From: Eli Uriegas Date: Tue, 14 Aug 2018 02:57:59 +0000 Subject: [PATCH 03/11] Add containerd-proxy building Signed-off-by: Eli Uriegas Upstream-commit: ca519bb1194b6ab673b5ade7861f220cac949ec6 Component: packaging --- components/packaging/.gitignore | 1 + components/packaging/rpm/Makefile | 30 +++++++++++++++---- components/packaging/rpm/SPECS/docker-ce.spec | 16 +++++++--- 3 files changed, 38 insertions(+), 9 deletions(-) diff --git a/components/packaging/.gitignore b/components/packaging/.gitignore index b17df620f3..abe1c339c4 100644 --- a/components/packaging/.gitignore +++ b/components/packaging/.gitignore @@ -1,3 +1,4 @@ build debbuild rpmbuild +tmp diff --git a/components/packaging/rpm/Makefile b/components/packaging/rpm/Makefile index a9fd0eb779..6cc849a09d 100644 --- a/components/packaging/rpm/Makefile +++ b/components/packaging/rpm/Makefile @@ -15,7 +15,12 @@ RPMBUILD_FLAGS=-ba\ --define '_release $(word 2,$(GEN_RPM_VER))' \ --define '_version $(word 1,$(GEN_RPM_VER))' \ --define '_origversion $(word 4, $(GEN_RPM_VER))' \ - SPECS/docker-ce-cli.spec SPECS/docker-ce.spec + SPECS/docker-ce.spec SPECS/docker-ce-cli.spec + +SOURCE_TGZS=containerd-proxy.tgz cli.tgz +SOURCES=$(addprefix rpmbuild/SOURCES/, $(SOURCE_TGZS)) + +CONTAINERD_PROXY_COMMIT=3337fb47f10892318361b58c8483f19b1ffa8203 .PHONY: help help: ## show make targets @@ -24,7 +29,8 @@ help: ## show make targets .PHONY: clean clean: ## remove build artifacts [ ! -d rpmbuild ] || $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild - rm -rf rpmbuild + $(RM) -r rpmbuild + $(RM) -r tmp/ .PHONY: rpm rpm: fedora centos ## build all rpm packages @@ -36,19 +42,22 @@ fedora: fedora-28 fedora-27 fedora-26 ## build all fedora rpm packages centos: centos-7 ## build all centos rpm packages .PHONY: fedora-28 -fedora-28: rpmbuild/SOURCES/cli.tgz ## build fedora-28 rpm packages +fedora-28: ## build fedora-28 rpm packages +fedora-28: $(SOURCES) docker build --build-arg GO_VERSION=$(GO_VERSION) -t rpmbuild-$@/$(ARCH) -f $@/Dockerfile.$(ARCH) . $(RPMBUILD) rpmbuild-$@/$(ARCH) $(RPMBUILD_FLAGS) $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild .PHONY: fedora-27 -fedora-27: rpmbuild/SOURCES/cli.tgz ## build fedora-27 rpm packages +fedora-27: ## build fedora-27 rpm packages +fedora-27: $(SOURCES) docker build --build-arg GO_VERSION=$(GO_VERSION) -t rpmbuild-$@/$(ARCH) -f $@/Dockerfile.$(ARCH) . $(RPMBUILD) rpmbuild-$@/$(ARCH) $(RPMBUILD_FLAGS) $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild .PHONY: centos-7 -centos-7: rpmbuild/SOURCES/cli.tgz ## build centos-7 rpm packages +centos-7: ## build centos-7 rpm packages +centos-7: $(SOURCES) docker build --build-arg GO_VERSION=$(GO_VERSION) -t rpmbuild-$@/$(ARCH) -f $@/Dockerfile.$(ARCH) . $(RPMBUILD) rpmbuild-$@/$(ARCH) $(RPMBUILD_FLAGS) $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild @@ -60,3 +69,14 @@ rpmbuild/SOURCES/cli.tgz: -v $(CURDIR)/rpmbuild/SOURCES:/v \ alpine \ tar -C / -c -z -f /v/cli.tgz --exclude .git cli + +rpmbuild/SOURCES/containerd-proxy.tgz: + mkdir -p tmp/ + curl -fL -o tmp/containerd-proxy.tgz "https://github.com/crosbymichael/containerd-proxy/archive/$(CONTAINERD_PROXY_COMMIT)/ours.tar.gz" + tar xzf tmp/containerd-proxy.tgz -C tmp/ + mv tmp/containerd-proxy-$(CONTAINERD_PROXY_COMMIT) tmp/containerd-proxy + mkdir -p $(@D) + $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild + tar -zcf $@ -C tmp/ containerd-proxy + rm -rf tmp/ + $(CHOWN) -R root:root rpmbuild/SOURCES diff --git a/components/packaging/rpm/SPECS/docker-ce.spec b/components/packaging/rpm/SPECS/docker-ce.spec index a2e3d25b18..2bd53ba8e6 100644 --- a/components/packaging/rpm/SPECS/docker-ce.spec +++ b/components/packaging/rpm/SPECS/docker-ce.spec @@ -4,6 +4,7 @@ Name: docker-ce Version: %{_version} Release: %{_release}%{?dist} Epoch: %{getenv:EPOCH} +Source0: containerd-proxy.tgz Summary: The open-source application container engine Group: Tools/Docker License: ASL 2.0 @@ -35,17 +36,24 @@ 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 + +%build +mkdir -p /go/src/github.com/crosbymichael/ +ls %{_topdir}/BUILD/src +ln -s %{_topdir}/BUILD/src/containerd-proxy /go/src/github.com/crosbymichael/containerd-proxy +go build -v -o /build/dockerd github.com/crosbymichael/containerd-proxy + %install +install -D -m 0755 /build/dockerd $RPM_BUILD_ROOT/%{_bindir}/dockerd %files +/%{_bindir}/dockerd %post if ! getent group docker > /dev/null; then groupadd --system docker fi -# TODO Needs upgrade vs. install logic handling here -if ctr --namespace docker container info dockerd > /dev/null 2>&1 ; then - docker engine init -fi %changelog From 1f463af6290f5f0bf3cb52d8791db92d984defa3 Mon Sep 17 00:00:00 2001 From: Eli Uriegas Date: Tue, 14 Aug 2018 03:23:24 +0000 Subject: [PATCH 04/11] Add containerd-shim-process installation Also split off containerd.mk into it's own thing since most of this stuff will be re-used with debian packaging anyways. Signed-off-by: Eli Uriegas Upstream-commit: 5513629a1b4868d82a41249eac634edbff51e315 Component: packaging --- components/packaging/.gitignore | 1 + components/packaging/containerd.mk | 17 +++++++++++++++++ components/packaging/rpm/Makefile | 17 +++++++++++++---- components/packaging/rpm/SPECS/docker-ce.spec | 7 +++++++ 4 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 components/packaging/containerd.mk diff --git a/components/packaging/.gitignore b/components/packaging/.gitignore index abe1c339c4..c0f77a4b3d 100644 --- a/components/packaging/.gitignore +++ b/components/packaging/.gitignore @@ -2,3 +2,4 @@ build debbuild rpmbuild tmp +artifacts diff --git a/components/packaging/containerd.mk b/components/packaging/containerd.mk new file mode 100644 index 0000000000..9871469030 --- /dev/null +++ b/components/packaging/containerd.mk @@ -0,0 +1,17 @@ +# Common things for containerd functionality + +CONTAINERD_PROXY_COMMIT=3337fb47f10892318361b58c8483f19b1ffa8203 +CONTAINERD_SHIM_PROCESS_IMAGE=docker.io/docker/containerd-shim-process:a4d1531 + +# If the docker-containerd.sock is available use that, else use the default containerd.sock +ifeq (,$(wildcard /var/run/docker/containerd/docker-containerd.sock)) +CONTAINERD_SOCK:=/var/run/docker/containerd/docker-containerd.sock +else +CONTAINERD_SOCK:=/var/run/containerd/containerd.sock +endif +CTR=docker run \ + --rm -i \ + -v $(CONTAINERD_SOCK):/ours/containerd.sock \ + -v $(CURDIR)/artifacts:/artifacts \ + docker:18.06.0-ce \ + docker-containerd-ctr -a /ours/containerd.sock diff --git a/components/packaging/rpm/Makefile b/components/packaging/rpm/Makefile index 6cc849a09d..203f43f214 100644 --- a/components/packaging/rpm/Makefile +++ b/components/packaging/rpm/Makefile @@ -1,3 +1,5 @@ +include ../containerd.mk + ARCH=$(shell uname -m) ENGINE_DIR:=$(CURDIR)/../../engine CLI_DIR:=$(CURDIR)/../../cli @@ -17,11 +19,9 @@ RPMBUILD_FLAGS=-ba\ --define '_origversion $(word 4, $(GEN_RPM_VER))' \ SPECS/docker-ce.spec SPECS/docker-ce-cli.spec -SOURCE_TGZS=containerd-proxy.tgz cli.tgz +SOURCE_TGZS=containerd-proxy.tgz cli.tgz containerd-shim-process.tar SOURCES=$(addprefix rpmbuild/SOURCES/, $(SOURCE_TGZS)) -CONTAINERD_PROXY_COMMIT=3337fb47f10892318361b58c8483f19b1ffa8203 - .PHONY: help 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) @@ -44,6 +44,7 @@ centos: centos-7 ## build all centos rpm packages .PHONY: fedora-28 fedora-28: ## build fedora-28 rpm packages fedora-28: $(SOURCES) + $(CHOWN) -R root:root rpmbuild docker build --build-arg GO_VERSION=$(GO_VERSION) -t rpmbuild-$@/$(ARCH) -f $@/Dockerfile.$(ARCH) . $(RPMBUILD) rpmbuild-$@/$(ARCH) $(RPMBUILD_FLAGS) $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild @@ -51,6 +52,7 @@ fedora-28: $(SOURCES) .PHONY: fedora-27 fedora-27: ## build fedora-27 rpm packages fedora-27: $(SOURCES) + $(CHOWN) -R root:root rpmbuild docker build --build-arg GO_VERSION=$(GO_VERSION) -t rpmbuild-$@/$(ARCH) -f $@/Dockerfile.$(ARCH) . $(RPMBUILD) rpmbuild-$@/$(ARCH) $(RPMBUILD_FLAGS) $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild @@ -58,6 +60,7 @@ fedora-27: $(SOURCES) .PHONY: centos-7 centos-7: ## build centos-7 rpm packages centos-7: $(SOURCES) + $(CHOWN) -R root:root rpmbuild docker build --build-arg GO_VERSION=$(GO_VERSION) -t rpmbuild-$@/$(ARCH) -f $@/Dockerfile.$(ARCH) . $(RPMBUILD) rpmbuild-$@/$(ARCH) $(RPMBUILD_FLAGS) $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild @@ -79,4 +82,10 @@ rpmbuild/SOURCES/containerd-proxy.tgz: $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild tar -zcf $@ -C tmp/ containerd-proxy rm -rf tmp/ - $(CHOWN) -R root:root rpmbuild/SOURCES + +rpmbuild/SOURCES/containerd-shim-process.tar: + $(CTR) content fetch $(CONTAINERD_SHIM_PROCESS_IMAGE) + $(CTR) image export artifacts/containerd-shim-process.tar $(CONTAINERD_SHIM_PROCESS_IMAGE) + mkdir -p $(@D) + cp artifacts/containerd-shim-process.tar $@ + $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild diff --git a/components/packaging/rpm/SPECS/docker-ce.spec b/components/packaging/rpm/SPECS/docker-ce.spec index 2bd53ba8e6..b0e4ca51f4 100644 --- a/components/packaging/rpm/SPECS/docker-ce.spec +++ b/components/packaging/rpm/SPECS/docker-ce.spec @@ -5,6 +5,7 @@ Version: %{_version} Release: %{_release}%{?dist} Epoch: %{getenv:EPOCH} Source0: containerd-proxy.tgz +Source1: containerd-shim-process.tar Summary: The open-source application container engine Group: Tools/Docker License: ASL 2.0 @@ -13,6 +14,8 @@ Vendor: Docker Packager: Docker Requires: docker-ce-cli +# Should be required as well by docker-ce-cli but let's just be thorough +Requires: containerd.io # conflicting packages Conflicts: docker @@ -40,6 +43,7 @@ depending on a particular stack or provider. %setup -q -c -n src %build +# dockerd proxy compilation mkdir -p /go/src/github.com/crosbymichael/ ls %{_topdir}/BUILD/src ln -s %{_topdir}/BUILD/src/containerd-proxy /go/src/github.com/crosbymichael/containerd-proxy @@ -47,9 +51,12 @@ go build -v -o /build/dockerd github.com/crosbymichael/containerd-proxy %install install -D -m 0755 /build/dockerd $RPM_BUILD_ROOT/%{_bindir}/dockerd +# TODO: Use containerd-offline-installer to actually install this as ExecStartPre systemd step +install -D -m 0644 %{_topdir}/SOURCES/containerd-shim-process.tar $RPM_BUILD_ROOT/%{_sharedstatedir}/containerd/containerd-shim-process.tar %files /%{_bindir}/dockerd +/%{_sharedstatedir}/containerd/containerd-shim-process.tar %post if ! getent group docker > /dev/null; then From 74209bb90af52a599355729ef08828747223be77 Mon Sep 17 00:00:00 2001 From: Eli Uriegas Date: Tue, 14 Aug 2018 17:27:32 +0000 Subject: [PATCH 05/11] Remove rpmlint checks, add BuildRequires rpmlint checks can be re-added later Signed-off-by: Eli Uriegas Upstream-commit: c245ce12c1e0a092ef21094b287b8cb94a51ee1e Component: packaging --- components/packaging/rpm/SPECS/docker-ce-cli.spec | 5 ++++- components/packaging/rpm/SPECS/docker-ce.spec | 4 +++- components/packaging/rpm/centos-7/Dockerfile.aarch64 | 3 +-- components/packaging/rpm/centos-7/Dockerfile.x86_64 | 3 +-- components/packaging/rpm/fedora-27/Dockerfile.aarch64 | 5 ++--- components/packaging/rpm/fedora-27/Dockerfile.x86_64 | 5 ++--- components/packaging/rpm/fedora-28/Dockerfile.aarch64 | 5 ++--- components/packaging/rpm/fedora-28/Dockerfile.x86_64 | 5 ++--- 8 files changed, 17 insertions(+), 18 deletions(-) diff --git a/components/packaging/rpm/SPECS/docker-ce-cli.spec b/components/packaging/rpm/SPECS/docker-ce-cli.spec index 65ba0fbf3e..0dea3d3ed2 100644 --- a/components/packaging/rpm/SPECS/docker-ce-cli.spec +++ b/components/packaging/rpm/SPECS/docker-ce-cli.spec @@ -3,7 +3,7 @@ Name: docker-ce-cli Version: %{_version} Release: %{_release}%{?dist} -Epoch: %{getenv:EPOCH} +Epoch: 0 Summary: The open-source application container engine Group: Tools/Docker License: ASL 2.0 @@ -16,6 +16,9 @@ Packager: Docker Requires: /bin/sh Requires: containerd +BuildRequires: make +BuildRequires: libtool-ltdl-devel + # conflicting packages Conflicts: docker Conflicts: docker-io diff --git a/components/packaging/rpm/SPECS/docker-ce.spec b/components/packaging/rpm/SPECS/docker-ce.spec index b0e4ca51f4..fe51b992b6 100644 --- a/components/packaging/rpm/SPECS/docker-ce.spec +++ b/components/packaging/rpm/SPECS/docker-ce.spec @@ -3,7 +3,7 @@ Name: docker-ce Version: %{_version} Release: %{_release}%{?dist} -Epoch: %{getenv:EPOCH} +Epoch: 2 Source0: containerd-proxy.tgz Source1: containerd-shim-process.tar Summary: The open-source application container engine @@ -17,6 +17,8 @@ Requires: docker-ce-cli # Should be required as well by docker-ce-cli but let's just be thorough Requires: containerd.io +BuildRequires: gcc + # conflicting packages Conflicts: docker Conflicts: docker-io diff --git a/components/packaging/rpm/centos-7/Dockerfile.aarch64 b/components/packaging/rpm/centos-7/Dockerfile.aarch64 index b232004aa4..6866f64cbb 100644 --- a/components/packaging/rpm/centos-7/Dockerfile.aarch64 +++ b/components/packaging/rpm/centos-7/Dockerfile.aarch64 @@ -13,8 +13,7 @@ ENV DOCKER_BUILDTAGS pkcs11 seccomp selinux ENV RUNC_BUILDTAGS seccomp selinux COPY SPECS /root/rpmbuild/SPECS RUN yum install -y rpm-build rpmlint -RUN rpmlint /root/rpmbuild/SPECS/*.spec # make sure spec file is ok before installing build deps -RUN yum-builddep -y /root/rpmbuild/SPECS/*.spec # this always exits 0 so need to rpmlint before running +RUN yum-builddep -y /root/rpmbuild/SPECS/*.spec COPY --from=golang /usr/local/go /usr/local/go/ WORKDIR /root/rpmbuild ENTRYPOINT ["/bin/rpmbuild"] diff --git a/components/packaging/rpm/centos-7/Dockerfile.x86_64 b/components/packaging/rpm/centos-7/Dockerfile.x86_64 index f54eb7e6a2..df150067cf 100644 --- a/components/packaging/rpm/centos-7/Dockerfile.x86_64 +++ b/components/packaging/rpm/centos-7/Dockerfile.x86_64 @@ -13,8 +13,7 @@ ENV DOCKER_BUILDTAGS pkcs11 seccomp selinux ENV RUNC_BUILDTAGS seccomp selinux RUN yum install -y rpm-build rpmlint COPY SPECS /root/rpmbuild/SPECS -RUN rpmlint /root/rpmbuild/SPECS/*.spec # make sure spec file is ok before installing build deps -RUN yum-builddep -y /root/rpmbuild/SPECS/*.spec # this always exits 0 so need to rpmlint before running +RUN yum-builddep -y /root/rpmbuild/SPECS/*.spec COPY --from=golang /usr/local/go /usr/local/go/ WORKDIR /root/rpmbuild ENTRYPOINT ["/bin/rpmbuild"] diff --git a/components/packaging/rpm/fedora-27/Dockerfile.aarch64 b/components/packaging/rpm/fedora-27/Dockerfile.aarch64 index ebd6b29e66..0bdff95703 100644 --- a/components/packaging/rpm/fedora-27/Dockerfile.aarch64 +++ b/components/packaging/rpm/fedora-27/Dockerfile.aarch64 @@ -11,10 +11,9 @@ 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 yum install -y rpm-build rpmlint +RUN dnf install -y rpm-build rpmlint dnf-plugins-core COPY SPECS /root/rpmbuild/SPECS -RUN rpmlint /root/rpmbuild/SPECS/*.spec # make sure spec file is ok before installing build deps -RUN yum-builddep -y /root/rpmbuild/SPECS/*.spec # this always exits 0 so need to rpmlint before running +RUN dnf builddep -y /root/rpmbuild/SPECS/*.spec COPY --from=golang /usr/local/go /usr/local/go/ WORKDIR /root/rpmbuild ENTRYPOINT ["/bin/rpmbuild"] diff --git a/components/packaging/rpm/fedora-27/Dockerfile.x86_64 b/components/packaging/rpm/fedora-27/Dockerfile.x86_64 index 4da38f342d..e1520d81b4 100644 --- a/components/packaging/rpm/fedora-27/Dockerfile.x86_64 +++ b/components/packaging/rpm/fedora-27/Dockerfile.x86_64 @@ -11,10 +11,9 @@ 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 yum install -y rpm-build rpmlint +RUN dnf install -y rpm-build rpmlint dnf-plugins-core COPY SPECS /root/rpmbuild/SPECS -RUN rpmlint /root/rpmbuild/SPECS/*.spec # make sure spec file is ok before installing build deps -RUN yum-builddep -y /root/rpmbuild/SPECS/*.spec # this always exits 0 so need to rpmlint before running +RUN dnf builddep -y /root/rpmbuild/SPECS/*.spec COPY --from=golang /usr/local/go /usr/local/go/ WORKDIR /root/rpmbuild ENTRYPOINT ["/bin/rpmbuild"] diff --git a/components/packaging/rpm/fedora-28/Dockerfile.aarch64 b/components/packaging/rpm/fedora-28/Dockerfile.aarch64 index bd56bf5477..9697dd1c5f 100644 --- a/components/packaging/rpm/fedora-28/Dockerfile.aarch64 +++ b/components/packaging/rpm/fedora-28/Dockerfile.aarch64 @@ -11,10 +11,9 @@ 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 yum install -y rpm-build rpmlint +RUN dnf install -y rpm-build rpmlint dnf-plugins-core COPY SPECS /root/rpmbuild/SPECS -RUN rpmlint /root/rpmbuild/SPECS/*.spec # make sure spec file is ok before installing build deps -RUN yum-builddep -y /root/rpmbuild/SPECS/*.spec # this always exits 0 so need to rpmlint before running +RUN dnf builddep -y /root/rpmbuild/SPECS/*.spec COPY --from=golang /usr/local/go /usr/local/go/ WORKDIR /root/rpmbuild ENTRYPOINT ["/bin/rpmbuild"] diff --git a/components/packaging/rpm/fedora-28/Dockerfile.x86_64 b/components/packaging/rpm/fedora-28/Dockerfile.x86_64 index 36c2de4f01..542c576383 100644 --- a/components/packaging/rpm/fedora-28/Dockerfile.x86_64 +++ b/components/packaging/rpm/fedora-28/Dockerfile.x86_64 @@ -10,10 +10,9 @@ ENV GOPATH /go ENV PATH $PATH:/usr/local/go/bin:$GOPATH/bin ENV AUTO_GOPATH 1 ENV RUNC_BUILDTAGS seccomp selinux -RUN yum install -y rpm-build rpmlint +RUN dnf install -y rpm-build rpmlint dnf-plugins-core COPY SPECS /root/rpmbuild/SPECS -RUN rpmlint /root/rpmbuild/SPECS/*.spec # make sure spec file is ok before installing build deps -RUN yum-builddep -y /root/rpmbuild/SPECS/*.spec # this always exits 0 so need to rpmlint before running +RUN dnf builddep -y /root/rpmbuild/SPECS/*.spec COPY --from=golang /usr/local/go /usr/local/go/ WORKDIR /root/rpmbuild ENTRYPOINT ["/bin/rpmbuild"] From 03fa2aa53121020500d2c0a260618b63d4114ca9 Mon Sep 17 00:00:00 2001 From: Eli Uriegas Date: Tue, 14 Aug 2018 20:30:22 +0000 Subject: [PATCH 06/11] Add systemd files, add containerd-proxy config Signed-off-by: Eli Uriegas Upstream-commit: 481c39539b723230a258f02e3d33d3baed03d2ce Component: packaging --- components/packaging/common/dockerd.json | 11 ++++ components/packaging/containerd.mk | 2 +- components/packaging/rpm/Makefile | 17 +++++-- components/packaging/rpm/SPECS/docker-ce.spec | 50 +++++++++++++++++-- .../{rpm => }/systemd/docker.service | 9 ++-- 5 files changed, 77 insertions(+), 12 deletions(-) create mode 100644 components/packaging/common/dockerd.json rename components/packaging/{rpm => }/systemd/docker.service (73%) diff --git a/components/packaging/common/dockerd.json b/components/packaging/common/dockerd.json new file mode 100644 index 0000000000..e220755089 --- /dev/null +++ b/components/packaging/common/dockerd.json @@ -0,0 +1,11 @@ +{ + "image": "${ENGINE_IMAGE}", + "namespace":"docker", + "args": [ + "-s", "overlay", + "--containerd", "/run/containerd/containerd.sock", + "--default-runtime", "containerd", + "--add-runtime", "containerd=runc" + ], + "scope": "ce" +} diff --git a/components/packaging/containerd.mk b/components/packaging/containerd.mk index 9871469030..f448a611e0 100644 --- a/components/packaging/containerd.mk +++ b/components/packaging/containerd.mk @@ -1,6 +1,6 @@ # Common things for containerd functionality -CONTAINERD_PROXY_COMMIT=3337fb47f10892318361b58c8483f19b1ffa8203 +CONTAINERD_PROXY_COMMIT=6615ae0be4014152533a83d44cdf9d3baa600d19 CONTAINERD_SHIM_PROCESS_IMAGE=docker.io/docker/containerd-shim-process:a4d1531 # If the docker-containerd.sock is available use that, else use the default containerd.sock diff --git a/components/packaging/rpm/Makefile b/components/packaging/rpm/Makefile index 203f43f214..58defa88c5 100644 --- a/components/packaging/rpm/Makefile +++ b/components/packaging/rpm/Makefile @@ -19,8 +19,8 @@ RPMBUILD_FLAGS=-ba\ --define '_origversion $(word 4, $(GEN_RPM_VER))' \ SPECS/docker-ce.spec SPECS/docker-ce-cli.spec -SOURCE_TGZS=containerd-proxy.tgz cli.tgz containerd-shim-process.tar -SOURCES=$(addprefix rpmbuild/SOURCES/, $(SOURCE_TGZS)) +SOURCE_FILES=containerd-proxy.tgz cli.tgz containerd-shim-process.tar docker.service dockerd.json +SOURCES=$(addprefix rpmbuild/SOURCES/, $(SOURCE_FILES)) .PHONY: help help: ## show make targets @@ -29,7 +29,10 @@ help: ## show make targets .PHONY: clean clean: ## remove build artifacts [ ! -d rpmbuild ] || $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild - $(RM) -r rpmbuild + $(RM) -r rpmbuild/ + [ ! -d artifacts ] || $(CHOWN) -R $(shell id -u):$(shell id -g) artifacts + $(RM) -r artifacts/ + [ ! -d tmp ] || $(CHOWN) -R $(shell id -u):$(shell id -g) tmp $(RM) -r tmp/ .PHONY: rpm @@ -89,3 +92,11 @@ rpmbuild/SOURCES/containerd-shim-process.tar: mkdir -p $(@D) cp artifacts/containerd-shim-process.tar $@ $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild + +rpmbuild/SOURCES/docker.service: ../systemd/docker.service + mkdir -p $(@D) + cp $< $@ + +rpmbuild/SOURCES/dockerd.json: ../common/dockerd.json + mkdir -p $(@D) + cp $< $@ diff --git a/components/packaging/rpm/SPECS/docker-ce.spec b/components/packaging/rpm/SPECS/docker-ce.spec index fe51b992b6..5b851b8200 100644 --- a/components/packaging/rpm/SPECS/docker-ce.spec +++ b/components/packaging/rpm/SPECS/docker-ce.spec @@ -6,6 +6,7 @@ Release: %{_release}%{?dist} Epoch: 2 Source0: containerd-proxy.tgz Source1: containerd-shim-process.tar +Source2: docker.service Summary: The open-source application container engine Group: Tools/Docker License: ASL 2.0 @@ -14,10 +15,15 @@ Vendor: Docker Packager: Docker Requires: docker-ce-cli +Requires: systemd-units +Requires: iptables # Should be required as well by docker-ce-cli but let's just be thorough Requires: containerd.io +BuildRequires: which +BuildRequires: make BuildRequires: gcc +BuildRequires: pkgconfig(systemd) # conflicting packages Conflicts: docker @@ -49,20 +55,58 @@ depending on a particular stack or provider. mkdir -p /go/src/github.com/crosbymichael/ ls %{_topdir}/BUILD/src ln -s %{_topdir}/BUILD/src/containerd-proxy /go/src/github.com/crosbymichael/containerd-proxy -go build -v -o /build/dockerd github.com/crosbymichael/containerd-proxy +pushd /go/src/github.com/crosbymichael/containerd-proxy +make SCOPE_LABEL="com.docker/containerd-proxy.scope" ANY_SCOPE="ee" bin/containerd-proxy +popd %install -install -D -m 0755 /build/dockerd $RPM_BUILD_ROOT/%{_bindir}/dockerd -# TODO: Use containerd-offline-installer to actually install this as ExecStartPre systemd step +# Install containerd-proxy as dockerd +install -D -m 0755 %{_topdir}/BUILD/src/containerd-proxy/bin/containerd-proxy $RPM_BUILD_ROOT/%{_bindir}/dockerd install -D -m 0644 %{_topdir}/SOURCES/containerd-shim-process.tar $RPM_BUILD_ROOT/%{_sharedstatedir}/containerd/containerd-shim-process.tar +install -D -m 0644 %{_topdir}/SOURCES/docker.service $RPM_BUILD_ROOT/%{_unitdir}/docker.service +install -D -m 0644 %{_topdir}/SOURCES/dockerd.json $RPM_BUILD_ROOT/etc/containerd-proxy/dockerd.json %files /%{_bindir}/dockerd /%{_sharedstatedir}/containerd/containerd-shim-process.tar +/%{_unitdir}/docker.service +/etc/containerd-proxy/dockerd.json + +%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 diff --git a/components/packaging/rpm/systemd/docker.service b/components/packaging/systemd/docker.service similarity index 73% rename from components/packaging/rpm/systemd/docker.service rename to components/packaging/systemd/docker.service index 6c60646b56..0e0265a8c0 100644 --- a/components/packaging/rpm/systemd/docker.service +++ b/components/packaging/systemd/docker.service @@ -1,14 +1,13 @@ [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com -After=network-online.target firewalld.service -Wants=network-online.target +After=network-online.target firewalld.service containerd.service +Wants=network-online.target containerd.service [Service] 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 +# Install containerd-shim-process if it's not already installed +ExecStartPre=/usr/libexec/containerd-offline-installer /var/lib/containerd/containerd-shim-process.tar docker.io/docker/containerd-shim-process ExecStart=/usr/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID # Having non-zero Limit*s causes performance problems due to accounting overhead From 4a4db9a6514a44f8dad970194b58c84c8d94f266 Mon Sep 17 00:00:00 2001 From: Eli Uriegas Date: Wed, 15 Aug 2018 01:42:10 +0000 Subject: [PATCH 07/11] Round out systemd for RPM packaging Signed-off-by: Eli Uriegas Upstream-commit: f99ffa4b5ef8c85fa5fbeb8fdc95403f9a02ceaf Component: packaging --- components/packaging/common/dockerd.json | 18 ++++---- components/packaging/containerd.mk | 4 +- components/packaging/image/Makefile | 2 +- components/packaging/rpm/Makefile | 2 + components/packaging/rpm/SPECS/docker-ce.spec | 42 +++++++++---------- components/packaging/systemd/docker.service | 24 +++-------- 6 files changed, 41 insertions(+), 51 deletions(-) diff --git a/components/packaging/common/dockerd.json b/components/packaging/common/dockerd.json index e220755089..d09197cafa 100644 --- a/components/packaging/common/dockerd.json +++ b/components/packaging/common/dockerd.json @@ -1,11 +1,11 @@ { - "image": "${ENGINE_IMAGE}", - "namespace":"docker", - "args": [ - "-s", "overlay", - "--containerd", "/run/containerd/containerd.sock", - "--default-runtime", "containerd", - "--add-runtime", "containerd=runc" - ], - "scope": "ce" + "image": "docker.io/seemethere/engine-community:0.0.0-20180814124044-678d4b3a6d.x86_64", + "namespace":"docker", + "args": [ + "-s", "overlay", + "--containerd", "/run/containerd/containerd.sock", + "--default-runtime", "containerd", + "--add-runtime", "containerd=runc" + ], + "scope": "ce" } diff --git a/components/packaging/containerd.mk b/components/packaging/containerd.mk index f448a611e0..be11a9f392 100644 --- a/components/packaging/containerd.mk +++ b/components/packaging/containerd.mk @@ -1,7 +1,7 @@ # Common things for containerd functionality -CONTAINERD_PROXY_COMMIT=6615ae0be4014152533a83d44cdf9d3baa600d19 -CONTAINERD_SHIM_PROCESS_IMAGE=docker.io/docker/containerd-shim-process:a4d1531 +CONTAINERD_PROXY_COMMIT=82ae3d13e91d062dd4853379fe018638023c8da2 +CONTAINERD_SHIM_PROCESS_IMAGE=docker.io/docker/containerd-shim-process:ff98a47 # If the docker-containerd.sock is available use that, else use the default containerd.sock ifeq (,$(wildcard /var/run/docker/containerd/docker-containerd.sock)) diff --git a/components/packaging/image/Makefile b/components/packaging/image/Makefile index 180ee81b82..49fb98721a 100644 --- a/components/packaging/image/Makefile +++ b/components/packaging/image/Makefile @@ -3,7 +3,7 @@ ENGINE_DIR:=$(CURDIR)/../../engine CLI_DIR:=$(CURDIR)/../../cli VERSION?=0.0.0-dev STATIC_VERSION=$(shell ../static/gen-static-ver $(ENGINE_DIR) $(VERSION)) -DOCKER_HUB_ORG?=docker +DOCKER_HUB_ORG?=dockereng ARCH=$(shell uname -m) ENGINE_IMAGE?=engine-community diff --git a/components/packaging/rpm/Makefile b/components/packaging/rpm/Makefile index 58defa88c5..365d0ceecd 100644 --- a/components/packaging/rpm/Makefile +++ b/components/packaging/rpm/Makefile @@ -100,3 +100,5 @@ rpmbuild/SOURCES/docker.service: ../systemd/docker.service rpmbuild/SOURCES/dockerd.json: ../common/dockerd.json mkdir -p $(@D) cp $< $@ + +# TODO: Figure out a sufficient offline solution diff --git a/components/packaging/rpm/SPECS/docker-ce.spec b/components/packaging/rpm/SPECS/docker-ce.spec index 5b851b8200..e5714f176c 100644 --- a/components/packaging/rpm/SPECS/docker-ce.spec +++ b/components/packaging/rpm/SPECS/docker-ce.spec @@ -73,18 +73,18 @@ install -D -m 0644 %{_topdir}/SOURCES/dockerd.json $RPM_BUILD_ROOT/etc/container /etc/containerd-proxy/dockerd.json %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 +# 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 @@ -99,14 +99,14 @@ fi %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 +# 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 diff --git a/components/packaging/systemd/docker.service b/components/packaging/systemd/docker.service index 0e0265a8c0..438d8bb5ef 100644 --- a/components/packaging/systemd/docker.service +++ b/components/packaging/systemd/docker.service @@ -5,28 +5,16 @@ After=network-online.target firewalld.service containerd.service Wants=network-online.target containerd.service [Service] -Type=notify # Install containerd-shim-process if it's not already installed ExecStartPre=/usr/libexec/containerd-offline-installer /var/lib/containerd/containerd-shim-process.tar docker.io/docker/containerd-shim-process ExecStart=/usr/bin/dockerd -ExecReload=/bin/kill -s HUP $MAINPID -# Having non-zero Limit*s causes performance problems due to accounting overhead -# in the kernel. We recommend using cgroups to do container-local accounting. -LimitNOFILE=infinity -LimitNPROC=infinity -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 -# kill only the docker process, not all processes in the cgroup +TimeoutSec=infinity KillMode=process -# restart the docker process if it exits prematurely -Restart=on-failure -StartLimitBurst=3 -StartLimitInterval=60s +Restart=always +Delegate=yes +# On RPM Based distributions PATH isn't defined so we define it here +# /opt/containerd/bin is in front so dockerd grabs the correct runc binary +Environment="PATH=/opt/containerd/bin:/sbin:/usr/bin:/usr/local/bin:$PATH" [Install] WantedBy=multi-user.target From cbb6da8c292978d9b2cb7a06e81b8c943fa740cd Mon Sep 17 00:00:00 2001 From: Eli Uriegas Date: Wed, 15 Aug 2018 23:12:28 +0000 Subject: [PATCH 08/11] Update to use a base golang image instead of curl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Why didn't we do this the whole time? `¯\_(ツ)_/¯` Signed-off-by: Eli Uriegas Upstream-commit: df2a0d6fc5a59a7a8b352689238eddf5a46d3ed4 Component: packaging --- components/packaging/rpm/Makefile | 8 +++++--- components/packaging/rpm/centos-7/Dockerfile.aarch64 | 6 ++---- components/packaging/rpm/centos-7/Dockerfile.x86_64 | 6 ++---- components/packaging/rpm/fedora-27/Dockerfile.aarch64 | 6 ++---- components/packaging/rpm/fedora-27/Dockerfile.x86_64 | 6 ++---- components/packaging/rpm/fedora-28/Dockerfile.aarch64 | 6 ++---- components/packaging/rpm/fedora-28/Dockerfile.x86_64 | 6 ++---- 7 files changed, 17 insertions(+), 27 deletions(-) diff --git a/components/packaging/rpm/Makefile b/components/packaging/rpm/Makefile index 365d0ceecd..a090795dd4 100644 --- a/components/packaging/rpm/Makefile +++ b/components/packaging/rpm/Makefile @@ -5,7 +5,9 @@ ENGINE_DIR:=$(CURDIR)/../../engine CLI_DIR:=$(CURDIR)/../../cli GITCOMMIT=$(shell cd $(ENGINE_DIR) && git rev-parse --short HEAD) VERSION?=0.0.0-dev +GO_BASE_IMAGE=golang GO_VERSION:=1.10.3 +GO_IMAGE=$(GO_BASE_IMAGE):$(GO_VERSION) GEN_RPM_VER=$(shell ./gen-rpm-ver $(CLI_DIR) $(VERSION)) CHOWN=docker run --rm -i -v $(CURDIR):/v -w /v alpine chown RPMBUILD=docker run --privileged --rm -i\ @@ -48,7 +50,7 @@ centos: centos-7 ## build all centos rpm packages fedora-28: ## build fedora-28 rpm packages fedora-28: $(SOURCES) $(CHOWN) -R root:root rpmbuild - docker build --build-arg GO_VERSION=$(GO_VERSION) -t rpmbuild-$@/$(ARCH) -f $@/Dockerfile.$(ARCH) . + docker build --build-arg GO_IMAGE=$(GO_IMAGE) -t rpmbuild-$@/$(ARCH) -f $@/Dockerfile.$(ARCH) . $(RPMBUILD) rpmbuild-$@/$(ARCH) $(RPMBUILD_FLAGS) $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild @@ -56,7 +58,7 @@ fedora-28: $(SOURCES) fedora-27: ## build fedora-27 rpm packages fedora-27: $(SOURCES) $(CHOWN) -R root:root rpmbuild - docker build --build-arg GO_VERSION=$(GO_VERSION) -t rpmbuild-$@/$(ARCH) -f $@/Dockerfile.$(ARCH) . + docker build --build-arg GO_IMAGE=$(GO_IMAGE) -t rpmbuild-$@/$(ARCH) -f $@/Dockerfile.$(ARCH) . $(RPMBUILD) rpmbuild-$@/$(ARCH) $(RPMBUILD_FLAGS) $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild @@ -64,7 +66,7 @@ fedora-27: $(SOURCES) centos-7: ## build centos-7 rpm packages centos-7: $(SOURCES) $(CHOWN) -R root:root rpmbuild - docker build --build-arg GO_VERSION=$(GO_VERSION) -t rpmbuild-$@/$(ARCH) -f $@/Dockerfile.$(ARCH) . + docker build --build-arg GO_IMAGE=$(GO_IMAGE) -t rpmbuild-$@/$(ARCH) -f $@/Dockerfile.$(ARCH) . $(RPMBUILD) rpmbuild-$@/$(ARCH) $(RPMBUILD_FLAGS) $(CHOWN) -R $(shell id -u):$(shell id -g) rpmbuild diff --git a/components/packaging/rpm/centos-7/Dockerfile.aarch64 b/components/packaging/rpm/centos-7/Dockerfile.aarch64 index 6866f64cbb..0851a3ee9c 100644 --- a/components/packaging/rpm/centos-7/Dockerfile.aarch64 +++ b/components/packaging/rpm/centos-7/Dockerfile.aarch64 @@ -1,7 +1,5 @@ -FROM alpine:latest as golang -RUN apk add curl -ARG GO_VERSION -RUN curl -fsSL "https://golang.org/dl/go${GO_VERSION}.linux-arm64.tar.gz" | tar xzC /usr/local +ARG GO_IMAGE +FROM ${GO_IMAGE} as golang FROM centos:7 ENV DISTRO centos diff --git a/components/packaging/rpm/centos-7/Dockerfile.x86_64 b/components/packaging/rpm/centos-7/Dockerfile.x86_64 index df150067cf..b6334f62dd 100644 --- a/components/packaging/rpm/centos-7/Dockerfile.x86_64 +++ b/components/packaging/rpm/centos-7/Dockerfile.x86_64 @@ -1,7 +1,5 @@ -FROM alpine:latest as golang -RUN apk add curl -ARG GO_VERSION -RUN curl -fsSL "https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz" | tar xzC /usr/local +ARG GO_IMAGE +FROM ${GO_IMAGE} as golang FROM centos:7 ENV DISTRO centos diff --git a/components/packaging/rpm/fedora-27/Dockerfile.aarch64 b/components/packaging/rpm/fedora-27/Dockerfile.aarch64 index 0bdff95703..ee2f8b0860 100644 --- a/components/packaging/rpm/fedora-27/Dockerfile.aarch64 +++ b/components/packaging/rpm/fedora-27/Dockerfile.aarch64 @@ -1,7 +1,5 @@ -FROM alpine:latest as golang -RUN apk add curl -ARG GO_VERSION -RUN curl -fsSL "https://golang.org/dl/go${GO_VERSION}.linux-arm64.tar.gz" | tar xzC /usr/local +ARG GO_IMAGE +FROM ${GO_IMAGE} as golang FROM fedora:27 ENV DISTRO fedora diff --git a/components/packaging/rpm/fedora-27/Dockerfile.x86_64 b/components/packaging/rpm/fedora-27/Dockerfile.x86_64 index e1520d81b4..ee2f8b0860 100644 --- a/components/packaging/rpm/fedora-27/Dockerfile.x86_64 +++ b/components/packaging/rpm/fedora-27/Dockerfile.x86_64 @@ -1,7 +1,5 @@ -FROM alpine:latest as golang -RUN apk add curl -ARG GO_VERSION -RUN curl -fsSL "https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz" | tar xzC /usr/local +ARG GO_IMAGE +FROM ${GO_IMAGE} as golang FROM fedora:27 ENV DISTRO fedora diff --git a/components/packaging/rpm/fedora-28/Dockerfile.aarch64 b/components/packaging/rpm/fedora-28/Dockerfile.aarch64 index 9697dd1c5f..797422fa8f 100644 --- a/components/packaging/rpm/fedora-28/Dockerfile.aarch64 +++ b/components/packaging/rpm/fedora-28/Dockerfile.aarch64 @@ -1,7 +1,5 @@ -FROM alpine:latest as golang -RUN apk add curl -ARG GO_VERSION -RUN curl -fsSL "https://golang.org/dl/go${GO_VERSION}.linux-arm64.tar.gz" | tar xzC /usr/local +ARG GO_IMAGE +FROM ${GO_IMAGE} as golang FROM fedora:28 ENV DISTRO fedora diff --git a/components/packaging/rpm/fedora-28/Dockerfile.x86_64 b/components/packaging/rpm/fedora-28/Dockerfile.x86_64 index 542c576383..da23b74991 100644 --- a/components/packaging/rpm/fedora-28/Dockerfile.x86_64 +++ b/components/packaging/rpm/fedora-28/Dockerfile.x86_64 @@ -1,7 +1,5 @@ -FROM alpine:latest as golang -RUN apk add curl -ARG GO_VERSION -RUN curl -fsSL "https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz" | tar xzC /usr/local +ARG GO_IMAGE +FROM ${GO_IMAGE} as golang FROM fedora:28 ENV DISTRO fedora From 4670e93b92ba39960c59c704b2c2028de853859d Mon Sep 17 00:00:00 2001 From: Eli Uriegas Date: Wed, 15 Aug 2018 23:13:21 +0000 Subject: [PATCH 09/11] Revive pre / post steps, update offline location Signed-off-by: Eli Uriegas Upstream-commit: 558cd9c4bb28a11fe1ff3da45a4efd19265d7ce5 Component: packaging --- components/packaging/rpm/SPECS/docker-ce.spec | 46 +++++++++---------- components/packaging/systemd/docker.service | 2 +- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/components/packaging/rpm/SPECS/docker-ce.spec b/components/packaging/rpm/SPECS/docker-ce.spec index e5714f176c..77cda6a7f2 100644 --- a/components/packaging/rpm/SPECS/docker-ce.spec +++ b/components/packaging/rpm/SPECS/docker-ce.spec @@ -62,29 +62,29 @@ popd %install # Install containerd-proxy as dockerd install -D -m 0755 %{_topdir}/BUILD/src/containerd-proxy/bin/containerd-proxy $RPM_BUILD_ROOT/%{_bindir}/dockerd -install -D -m 0644 %{_topdir}/SOURCES/containerd-shim-process.tar $RPM_BUILD_ROOT/%{_sharedstatedir}/containerd/containerd-shim-process.tar +install -D -m 0644 %{_topdir}/SOURCES/containerd-shim-process.tar $RPM_BUILD_ROOT/%{_sharedstatedir}/containerd-offline-installer/containerd-shim-process.tar install -D -m 0644 %{_topdir}/SOURCES/docker.service $RPM_BUILD_ROOT/%{_unitdir}/docker.service install -D -m 0644 %{_topdir}/SOURCES/dockerd.json $RPM_BUILD_ROOT/etc/containerd-proxy/dockerd.json %files /%{_bindir}/dockerd -/%{_sharedstatedir}/containerd/containerd-shim-process.tar +/%{_sharedstatedir}/containerd-offline-installer/containerd-shim-process.tar /%{_unitdir}/docker.service /etc/containerd-proxy/dockerd.json %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 +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 @@ -99,14 +99,14 @@ fi %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 +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 diff --git a/components/packaging/systemd/docker.service b/components/packaging/systemd/docker.service index 438d8bb5ef..b03133fe1f 100644 --- a/components/packaging/systemd/docker.service +++ b/components/packaging/systemd/docker.service @@ -6,7 +6,7 @@ Wants=network-online.target containerd.service [Service] # Install containerd-shim-process if it's not already installed -ExecStartPre=/usr/libexec/containerd-offline-installer /var/lib/containerd/containerd-shim-process.tar docker.io/docker/containerd-shim-process +ExecStartPre=/usr/libexec/containerd-offline-installer /var/lib/containerd-offline-installer/containerd-shim-process.tar docker.io/docker/containerd-shim-process ExecStart=/usr/bin/dockerd TimeoutSec=infinity KillMode=process From 4b8490a8fe9b912b2ffe85df406ca318088da11c Mon Sep 17 00:00:00 2001 From: Eli Uriegas Date: Thu, 16 Aug 2018 00:10:04 +0000 Subject: [PATCH 10/11] Improve containerd detection, don't rely on root Signed-off-by: Eli Uriegas Upstream-commit: 2134ee524ecf6a96c99a518652b4ec65680abc34 Component: packaging --- components/packaging/containerd.mk | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/components/packaging/containerd.mk b/components/packaging/containerd.mk index be11a9f392..12bad420f7 100644 --- a/components/packaging/containerd.mk +++ b/components/packaging/containerd.mk @@ -3,11 +3,11 @@ CONTAINERD_PROXY_COMMIT=82ae3d13e91d062dd4853379fe018638023c8da2 CONTAINERD_SHIM_PROCESS_IMAGE=docker.io/docker/containerd-shim-process:ff98a47 -# If the docker-containerd.sock is available use that, else use the default containerd.sock -ifeq (,$(wildcard /var/run/docker/containerd/docker-containerd.sock)) -CONTAINERD_SOCK:=/var/run/docker/containerd/docker-containerd.sock -else +# If containerd is running use that socket instead +ifeq ($(shell systemctl status containerd 2>/dev/null >/dev/null && echo -n "yes"), "yes") CONTAINERD_SOCK:=/var/run/containerd/containerd.sock +else +CONTAINERD_SOCK:=/var/run/docker/containerd/docker-containerd.sock endif CTR=docker run \ --rm -i \ From cbac77a8f2c51684897bf167696affecdd52cc1b Mon Sep 17 00:00:00 2001 From: Eli Uriegas Date: Thu, 16 Aug 2018 04:03:40 +0000 Subject: [PATCH 11/11] Some changes to get this working on CentOS 7 Old versions of things on CentOS 7 strike again! infinity is not a thing for TimeoutSec on systemd < 229 Signed-off-by: Eli Uriegas Upstream-commit: 86dafe5391e2ef298248536cd038e27230a4df63 Component: packaging --- components/packaging/systemd/docker.service | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/components/packaging/systemd/docker.service b/components/packaging/systemd/docker.service index b03133fe1f..13b2a04750 100644 --- a/components/packaging/systemd/docker.service +++ b/components/packaging/systemd/docker.service @@ -8,10 +8,8 @@ Wants=network-online.target containerd.service # Install containerd-shim-process if it's not already installed ExecStartPre=/usr/libexec/containerd-offline-installer /var/lib/containerd-offline-installer/containerd-shim-process.tar docker.io/docker/containerd-shim-process ExecStart=/usr/bin/dockerd -TimeoutSec=infinity -KillMode=process +TimeoutSec=0 Restart=always -Delegate=yes # On RPM Based distributions PATH isn't defined so we define it here # /opt/containerd/bin is in front so dockerd grabs the correct runc binary Environment="PATH=/opt/containerd/bin:/sbin:/usr/bin:/usr/local/bin:$PATH"