Blob Blame History Raw
%global with_debug 0

%if 0%{?with_debug}
%global _find_debuginfo_dwz_opts %{nil}
%global _dwz_low_mem_die_limit 0
%else
%global debug_package %{nil}
%endif

# binaries and unitfiles are currently called 'docker'
# to match with upstream supplied packages
%global origname docker
%global newname moby
%global service_name %{origname}

# moby / docker-ce / cli
%global git_moby https://github.com/%{service_name}/%{service_name}-ce
%global commit_moby d7080c17a580919f5340a15a8e5e013133089680
%global shortcommit_moby %(c=%{commit_moby}; echo ${c:0:7})

# docker-runc
%global git_runc https://github.com/opencontainers/runc
%global commit_runc a592beb5bc4c4092b1b1bac971afed27687340c5
%global shortcommit_runc %(c=%{commit_runc}; echo ${c:0:7})

# docker-containerd
%global git_containerd https://github.com/containerd/containerd
%global commit_containerd 468a545b9edcd5932818eb9de8e72413e616e86e
%global shortcommit_containerd %(c=%{commit_containerd}; echo ${c:0:7})

# docker-proxy / libnetwork
%global git_libnetwork https://github.com/%{service_name}/libnetwork
%global commit_libnetwork 3ac297bc7fd0afec9051bbb47024c9bc1d75bf5b
%global shortcommit_libnetwork %(c=%{commit_libnetwork}; echo ${c:0:7})

# tini
%global git_tini https://github.com/krallin/tini
%global commit_tini fec3683b971d9c3ef73f284f176672c44b448662
%global shortcommit_tini %(c=%{commit_tini}; echo ${c:0:7})

Name: %{newname}-engine
Version: 18.06.3
Release: 1.ce.git%{shortcommit_moby}%{?dist}
Summary: The open-source application container engine
License: ASL 2.0
# no golang / go-md2man for ppc64
ExcludeArch: ppc64
Source0: %{git_moby}/archive/%{commit_moby}.tar.gz
Source1: %{git_runc}/archive/%{commit_runc}.tar.gz
Source2: %{git_containerd}/archive/%{commit_containerd}.tar.gz
Source3: %{git_libnetwork}/archive/%{commit_libnetwork}.tar.gz
Source4: %{git_tini}/archive/%{commit_tini}.tar.gz
Source5: %{service_name}.service
Source6: %{service_name}.sysconfig
Patch1: https://github.com/moby/moby/commit/27d9030b2371aa4a6b167fded6b8dc25987a0af7.patch#/%{name}-%{version}-named-volumes.patch
URL: https://www.%{origname}.com

BuildRequires: btrfs-progs-devel
BuildRequires: cmake
BuildRequires: dep
BuildRequires: device-mapper-devel
BuildRequires: git
BuildRequires: glibc-static
BuildRequires: %{?go_compiler:compiler(go-compiler)}%{!?go_compiler:golang >= 1.6.2}
BuildRequires: go-md2man
BuildRequires: gpgme-devel
BuildRequires: libassuan-devel
BuildRequires: libseccomp-static >= 2.3.0
BuildRequires: libtool-ltdl-devel
BuildRequires: make
BuildRequires: pkgconfig(audit)
BuildRequires: pkgconfig(systemd)
BuildRequires: sed
BuildRequires: sqlite-devel

# required packages on install
Requires: container-selinux
Requires: iptables
Requires: systemd
Requires: tar
Requires: xz
Requires: pigz

# Resolves: rhbz#1165615
Requires: device-mapper-libs >= 1.02.90-1

# conflicting packages
Conflicts: %{origname}
Conflicts: %{origname}-io
Conflicts: %{origname}-engine-cs
Conflicts: %{origname}-ce
Conflicts: %{origname}-ee

%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.

%package fish-completion
Summary: Fish completion files for %{name}
Requires: %{name} = %{version}-%{release}
Requires: fish
Conflicts: %{service_name}-fish-completion

%description fish-completion
This package installs %{summary}.

%package vim
Summary: Vim syntax highlighting files for %{name}
Requires: %{name} = %{version}-%{release}
Requires: vim
Conflicts: %{service_name}-vim

%description vim
This package installs %{summary}.

%package zsh-completion
Summary: Zsh completion files for %{name}
Requires: %{name} = %{version}-%{release}
Requires: zsh
Conflicts: %{service_name}-zsh-completion

%description zsh-completion
This package installs %{summary}.

%package nano
Summary: nano syntax highlighting files for Moby
Requires: %{name} = %{version}-%{release}
Requires: nano

%description nano
This package installs %{summary}.

%prep
%autosetup -N -Sgit -n %{service_name}-ce-%{commit_moby}

# untar runc
tar zxf %{SOURCE1}

# untar containerd
tar zxf %{SOURCE2}

# untar libnetwork
tar zxf %{SOURCE3}

# untar tini
tar zxf %{SOURCE4}

%patch1 -p1 -d components/engine

# correct rpmlint errors for bash completion
sed -i '/env bash/d' components/cli/contrib/completion/bash/docker

# disable stripping containerd during build
sed -i 's/-s -w *//' containerd-%{commit_containerd}/Makefile

%build
# build docker-runc
(
        cd runc-%{commit_runc}
        mv vendor src
        mkdir -p src/github.com/opencontainers
        ln -fns ../../.. src/github.com/opencontainers/runc
        export GOPATH="${PWD}"
        make BUILDTAGS="seccomp selinux" COMMIT=%{commit_runc} \
            VERSION=1.0.0-rc5+dev.docker-18.06
)

# build docker-containerd
(
        cd containerd-%{commit_containerd}
        version=$(sed -n '/^\t*Version = /s/[^0-9.]//gp' version/version.go)
        mv vendor src
        mkdir -p src/github.com/containerd
        ln -fns ../../.. src/github.com/containerd/containerd
        export GOPATH="${PWD}"
        make VERSION="${version}" REVISION=%{commit_containerd}
)

# build docker-proxy / libnetwork
(
        cd libnetwork-%{commit_libnetwork}
        mkdir -p src/github.com/%{service_name}
        ln -fns ../../.. src/github.com/%{service_name}/libnetwork
        export GOPATH="${PWD}"
        export LDFLAGS="-linkmode=external"
        %gobuild -o %{service_name}-proxy github.com/%{service_name}/libnetwork/cmd/proxy
)

# build tini
(
        cd tini-%{commit_tini}
        %cmake .
        make tini-static
)

# build engine
(
        cd components/engine
        mkdir -p _build/src/github.com/%{service_name}
        ln -fns ../../../.. _build/src/github.com/%{service_name}/%{service_name}
        export DOCKER_BUILDTAGS="seccomp selinux"
        export DOCKER_DEBUG=1
        export DOCKER_GITCOMMIT=%{shortcommit_moby}
        export GOPATH="${PWD}/_build"
        bash -x hack/make.sh dynbinary
)

# build cli
(
        cd components/cli
        mkdir -p src/github.com/%{service_name}
        ln -fns ../../.. src/github.com/%{service_name}/cli
        export DISABLE_WARN_OUTSIDE_CONTAINER=1
        export GOPATH="${PWD}"
        make VERSION=%{version} GITCOMMIT=%{shortcommit_moby} dynbinary
        man/md2man-all.sh
)

%install
install -dp %{buildroot}%{_bindir}
install -dp %{buildroot}%{_libexecdir}/%{service_name}

# install binary
install -p -m 755 components/cli/build/%{service_name} %{buildroot}%{_bindir}/%{service_name}
install -p -m 755 components/engine/bundles/latest/dynbinary-daemon/%{service_name}d %{buildroot}%{_bindir}/%{service_name}d

# install proxy
install -p -m 755 libnetwork-%{commit_libnetwork}/%{service_name}-proxy %{buildroot}%{_bindir}/%{service_name}-proxy

# install containerd
install -p -m 755 containerd-%{commit_containerd}/bin/containerd %{buildroot}%{_bindir}/%{service_name}-containerd
install -p -m 755 containerd-%{commit_containerd}/bin/containerd-shim %{buildroot}%{_bindir}/%{service_name}-containerd-shim
install -p -m 755 containerd-%{commit_containerd}/bin/ctr %{buildroot}%{_bindir}/%{service_name}-containerd-ctr

# install runc
install -p -m 755 runc-%{commit_runc}/runc %{buildroot}%{_bindir}/%{service_name}-runc

# install tini
install -p -m 755 tini-%{commit_tini}/tini-static %{buildroot}%{_bindir}/%{service_name}-init

# install udev rules
install -dp %{buildroot}%{_prefix}/lib/udev/rules.d
install -p -m 644 components/engine/contrib/udev/80-%{service_name}.rules %{buildroot}%{_usr}/lib/udev/rules.d/80-%{service_name}.rules

# add init scripts
install -dp %{buildroot}%{_unitdir}
install -p -m 644 %{SOURCE5} %{buildroot}%{_unitdir}
install -p -m 644 components/engine/contrib/init/systemd/docker.socket %{buildroot}%{_unitdir}

# for additional args
install -dp %{buildroot}%{_sysconfdir}/sysconfig
install -p -m 644 %{SOURCE6} %{buildroot}%{_sysconfdir}/sysconfig/%{service_name}

# add bash, zsh, and fish completions
install -dp %{buildroot}%{_datadir}/bash-completion/completions
install -dp %{buildroot}%{_datadir}/zsh/vendor-completions
install -dp %{buildroot}%{_datadir}/fish/vendor_completions.d
install -p -m 644 components/cli/contrib/completion/bash/%{service_name} %{buildroot}%{_datadir}/bash-completion/completions/%{service_name}
install -p -m 644 components/cli/contrib/completion/zsh/_%{service_name} %{buildroot}%{_datadir}/zsh/vendor-completions/_%{service_name}
install -p -m 644 components/cli/contrib/completion/fish/%{service_name}.fish %{buildroot}%{_datadir}/fish/vendor_completions.d/%{service_name}.fish

# install manpages
install -dp %{buildroot}%{_mandir}/man{1,5,8}
install -p -m 644 components/cli/man/man1/*.1 %{buildroot}%{_mandir}/man1
install -p -m 644 components/cli/man/man5/*.5 %{buildroot}%{_mandir}/man5
install -p -m 644 components/cli/man/man8/*.8 %{buildroot}%{_mandir}/man8

# add vimfiles
install -dp %{buildroot}%{_datadir}/vim/vimfiles/doc
install -dp %{buildroot}%{_datadir}/vim/vimfiles/ftdetect
install -dp %{buildroot}%{_datadir}/vim/vimfiles/syntax
install -p -m 644 components/engine/contrib/syntax/vim/doc/%{service_name}file.txt %{buildroot}%{_datadir}/vim/vimfiles/doc/%{service_name}file.txt
install -p -m 644 components/engine/contrib/syntax/vim/ftdetect/%{service_name}file.vim %{buildroot}%{_datadir}/vim/vimfiles/ftdetect/%{service_name}file.vim
install -p -m 644 components/engine/contrib/syntax/vim/syntax/%{service_name}file.vim %{buildroot}%{_datadir}/vim/vimfiles/syntax/%{service_name}file.vim

# add nano files
install -dp %{buildroot}%{_datadir}/nano
install -p -m 644 components/engine/contrib/syntax/nano/Dockerfile.nanorc %{buildroot}%{_datadir}/nano/Dockerfile.nanorc

for cli_file in LICENSE MAINTAINERS NOTICE README.md; do
    cp "components/cli/$cli_file" "cli-$cli_file"
done

%pre
getent group %{service_name} >/dev/null || groupadd -r %{service_name} || :

%post
%systemd_post %{service_name}.service %{service_name}.socket

%preun
%systemd_preun %{service_name}.service %{service_name}.socket

%postun
%systemd_postun_with_restart %{service_name}.service

%files
%license cli-LICENSE components/engine/LICENSE
%doc components/engine/{AUTHORS,CHANGELOG.md,CONTRIBUTING.md,MAINTAINERS,NOTICE,README.md}
%doc cli-MAINTAINERS cli-NOTICE cli-README.md
%config(noreplace) %{_sysconfdir}/sysconfig/%{service_name}
%{_bindir}/%{service_name}
%{_bindir}/%{service_name}d
%dir %{_libexecdir}/%{service_name}/
%{_bindir}/%{service_name}-containerd
%{_bindir}/%{service_name}-containerd-shim
%{_bindir}/%{service_name}-containerd-ctr
%{_bindir}/%{service_name}-proxy
%{_bindir}/%{service_name}-runc
%{_bindir}/%{service_name}-init
%{_usr}/lib/udev/rules.d/80-%{service_name}.rules
%{_unitdir}/%{service_name}.service
%{_unitdir}/%{service_name}.socket
%{_datadir}/bash-completion/completions/%{service_name}
%{_mandir}/man1/*
%{_mandir}/man5/*
%{_mandir}/man8/*

%files vim
%dir %{_datadir}/vim/vimfiles/{doc,ftdetect,syntax}
%{_datadir}/vim/vimfiles/doc/%{service_name}file.txt
%{_datadir}/vim/vimfiles/ftdetect/%{service_name}file.vim
%{_datadir}/vim/vimfiles/syntax/%{service_name}file.vim

%files zsh-completion
%dir %{_datadir}/zsh/vendor-completions/
%{_datadir}/zsh/vendor-completions/_%{service_name}

%files fish-completion
%dir %{_datadir}/fish/vendor_completions.d
%{_datadir}/fish/vendor_completions.d/%{service_name}.fish

%files nano
%dir %{_datadir}/nano
%{_datadir}/nano/Dockerfile.nanorc

%changelog
* Thu Feb 21 2019 David Michael <dm0@redhat.com> - 18.06.3-1.ce.gitd7080c1
- Update docker-ce to commit d7080c1 (version 18.06.3).

* Tue Feb 12 2019 David Michael <dm0@redhat.com> - 18.06.2-1.ce.git6d37f41
- Update docker-ce to commit 6d37f41 (version 18.06.2).
- Update docker-runc to commit a592beb.

* Mon Feb 11 2019 David Michael <dm0@redhat.com> - 18.06.1-3.ce.gite68fc7a
- Apply a runc patch for CVE-2019-5736.

* Fri Feb 01 2019 Fedora Release Engineering <releng@fedoraproject.org> - 18.06.1-2.ce.gite68fc7a
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild

* Thu Nov 29 2018 David Michael <dm0@redhat.com> - 18.06.1-1.ce.gite68fc7a
- Update docker-ce to commit e68fc7a (version 18.06.1).
- Update docker-runc to commit 69663f0.
- Update docker-containerd to commit 468a545 (version 1.1.2).
- Update docker-proxy to commit 3ac297b.
- Backport a fix for mounting named volumes.
- Create a "docker" group for non-root Docker access.
- Support systemd socket-activation.
- Make runc and containerd commit IDs match their expected values.
- Preserve containerd debuginfo.

* Mon Nov 12 2018 Marcin Skarbek <rpm@skarbek.name> - 18.06.0-2.ce.git0ffa825
- add configuration file
- update service file

* Sat Aug 18 2018 Lokesh Mandvekar <lsm5@fedoraproject.org> - 18.06.0-1.ce.git0ffa825
- Resolves: #1539161 - first upload to Fedora
- built docker-ce commit 0ffa825
- built docker-runc commit ad0f5255
- built docker-containerd commit a88b631
- built docker-proxy commit a79d368
- built docker-init commit fec3683

* Tue Mar 20 2018 Lokesh Mandvekar <lsm5@fedoraproject.org> - 17.03.2-4.ce.gitf5ec1e2
- correct some rpmlint errors

* Wed Feb 21 2018 Lokesh Mandvekar <lsm5@fedoraproject.org> - 17.03.2-3.ce
- docker-* symlinks to moby-* (RE: gh PR 34226)

* Wed Feb 21 2018 Lokesh Mandvekar <lsm5@fedoraproject.org> - 17.03.2-2.ce
- rename binaries as per upstream gh PR 34226

* Fri Jan 26 2018 Lokesh Mandvekar <lsm5@fedoraproject.org> - 17.03.2-1
- initial build
- built moby commit f5ec1e2
- built cli commit 4b61f56
- built docker-runc commit 2d41c047
- built docker-containerd commit 3addd84
- built docker-proxy commit 7b2b1fe