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 0ffa8257ec673ed6849b73b03fb01b0cac90fdb3
%global shortcommit_moby %(c=%{commit_moby}; echo ${c:0:7})

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

# docker-containerd
%global git_containerd https://github.com/containerd/containerd
%global commit_containerd a88b6319614de846458750ff882723479ca7b1a1
%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 a79d3687931697244b8e03485bf7b2042f8ec6b6
%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.0
Release: 2.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
Patch1: %{name}-%{version}-CVE-2019-5736.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}

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

# untar runc
tar zxf %{SOURCE1}

# untar containerd
tar zxf %{SOURCE2}

# untar libnetwork
tar zxf %{SOURCE3}

# untar tini
tar zxf %{SOURCE4}

%patch1 -p1 -d runc-%{commit_runc}

%build
# build docker-runc
pushd runc-%{commit_runc}
mv vendor src
mkdir -p src/github.com/opencontainers
ln -s $(pwd) src/github.com/opencontainers/runc
sed -i 's/go build -i/go build/g' Makefile
GOPATH=$(pwd) make BUILDTAGS="seccomp selinux"
popd

# build docker-containerd
pushd containerd-%{commit_containerd}
mv vendor src
mkdir -p src/github.com/containerd
ln -s $(pwd) src/github.com/containerd/containerd
GOPATH=$(pwd) make
popd

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

# build tini
pushd tini-%{commit_tini}
cmake .
make tini-static
popd

# build engine
pushd components/engine
mkdir _build
pushd _build
mkdir -p $(pwd)/src/github.com/%{service_name}
ln -s $(dirs +1 -l) src/github.com/%{service_name}/%{service_name}
ln -s $(dirs +1 -l) src/github.com/%{service_name}/%{service_name}
popd

export DOCKER_GITCOMMIT=%{shortcommit_moby}
export DOCKER_BUILDTAGS="seccomp selinux"
DOCKER_DEBUG=1 GOPATH=$(pwd)/_build:$(pwd)/vendor:%{gopath} bash -x hack/make.sh dynbinary
popd

# build cli
pushd components/cli
mkdir -p src/github.com/%{service_name}/cli
ln -s $(pwd)/* src/github.com/%{service_name}/cli
export GOPATH=%{gopath}:$(pwd)
make VERSION=$(cat VERSION) GITCOMMIT=%{shortcommit_moby} dynbinary # cli
./man/md2man-all.sh
pushd man/man1
popd
pushd man/man5
popd
popd

%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 components/packaging/rpm/systemd/%{service_name}.service %{buildroot}%{_unitdir}

# 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" "$(pwd)/cli-$cli_file"
done

%post
%systemd_post %{service_name}

%preun
%systemd_preun %{service_name}

%postun
%systemd_postun_with_restart %{service_name}

%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
%{_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
%{_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
* Mon Feb 11 2019 David Michael <dm0@redhat.com> - 18.06.0-2.ce.git0ffa825
- Apply a runc patch for CVE-2019-5736.

* 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