245 lines
8.3 KiB
RPMSpec
245 lines
8.3 KiB
RPMSpec
%bcond_with btrfs
|
|
|
|
# docker
|
|
%global goipath_moby github.com/docker/docker
|
|
%global git_moby https://%%{goipath_moby}
|
|
%global shortcommit_moby 60b9add
|
|
|
|
# cli
|
|
%global goipath_cli github.com/docker/cli
|
|
%global git_cli https://%%{goipath_cli}
|
|
#%%global commit_cli baeda1f82a10204ec5708d5fbba130ad76cfee49
|
|
#%%global shortcommit_cli %%(c=%%{commit_cli}; echo ${c:0:7})
|
|
|
|
# tini
|
|
%global git_tini https://github.com/krallin/tini
|
|
%global commit_tini 0b44d3665869e46ccbac7414241b8256d6234dc4
|
|
%global shortcommit_tini %(c=%{commit_tini}; echo ${c:0:7})
|
|
|
|
Name: docker
|
|
Version: 26.0.1
|
|
Release: 1%{?dist}
|
|
Summary: The open-source application container engine
|
|
License: Apache-2.0
|
|
Source0: %{git_moby}/archive/v%{version}/moby-%{version}.tar.gz
|
|
Source1: %{git_cli}/archive/v%{version}/cli-%{version}.tar.gz
|
|
Source2: %{git_tini}/archive/%{commit_tini}/tini-%{shortcommit_tini}.tar.gz
|
|
Source3: docker.service
|
|
Source4: docker.sysconfig
|
|
Source5: docker-systemd-sysusers.conf
|
|
Source6: generate-docs.sh
|
|
|
|
# Seperate file containing virtual provides for bundled deps that's %%include'd in the specfile.
|
|
Source100: provides.spec.inc
|
|
|
|
URL: https://www.docker.com
|
|
|
|
ExclusiveArch: %{golang_arches}
|
|
|
|
%if %{with btrfs}
|
|
BuildRequires: pkgconfig(libbtrfsutil)
|
|
%endif
|
|
BuildRequires: pkgconfig(devmapper)
|
|
BuildRequires: golang
|
|
BuildRequires: go-rpm-macros
|
|
BuildRequires: go-md2man
|
|
BuildRequires: pkgconfig(libseccomp) >= 2.3.0
|
|
BuildRequires: make
|
|
BuildRequires: pkgconfig(audit)
|
|
BuildRequires: pkgconfig(systemd)
|
|
BuildRequires: systemd-rpm-macros
|
|
BuildRequires: firewalld-filesystem
|
|
|
|
# Build dependencies for tini
|
|
BuildRequires: cmake
|
|
BuildRequires: glibc-static
|
|
|
|
# required packages on install
|
|
Requires: container-selinux
|
|
Requires: containerd
|
|
Requires: iptables
|
|
Requires: pigz
|
|
Requires: runc
|
|
Requires: systemd
|
|
Requires: tar
|
|
Requires: xz
|
|
|
|
# Resolves: rhbz#1165615
|
|
Requires: device-mapper-libs >= 1.02.90-1
|
|
|
|
Provides: moby = %{version}-%{release}
|
|
Provides: moby-engine = %{version}-%{release}
|
|
Provides: docker-latest = %{version}-%{release}
|
|
|
|
# conflicting packages
|
|
Conflicts: docker-ce
|
|
Conflicts: docker-ce-cli
|
|
Conflicts: docker-common
|
|
Conflicts: docker-ee
|
|
Conflicts: docker-engine-cs
|
|
Conflicts: docker-io
|
|
Conflicts: podman-docker
|
|
|
|
%include %{SOURCE100}
|
|
|
|
%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 -a 1 -a 2 -n moby-%{version}
|
|
|
|
# correct rpmlint errors for bash completion
|
|
sed -i '/env bash/d' cli-%{version}/contrib/completion/bash/docker
|
|
cp %{SOURCE6} cli-%{version}/scripts/docs/generate-man.sh
|
|
%build
|
|
mkdir -p _build/bin
|
|
|
|
%global _root %{_builddir}/moby-%{version}
|
|
|
|
export CGO_CFLAGS="-I%{_includedir}/openssl3 %{build_cflags}"
|
|
export CGO_CXXFLAGS="-I%{_includedir}/openssl3 %{build_cxxflags}"
|
|
export GOFLAGS='-buildmode=pie -trimpath -mod=readonly -modcacherw -ldflags=-linkmode=external -ldflags=-compressdwarf=false -ldflags=-B=gobuildid'
|
|
export DISABLE_WARN_OUTSIDE_CONTAINER=1
|
|
|
|
# build tini (installed as docker-init)
|
|
(
|
|
cd tini-%{commit_tini}
|
|
%cmake
|
|
make tini-static -C "%{__cmake_builddir}"
|
|
)
|
|
|
|
%global buildtime %(date --utc --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +"%Y-%m-%dT%H:%M:%SZ")
|
|
# build engine
|
|
(
|
|
mkdir -p src/github.com/docker
|
|
# Link source and vendored deps into local GOPATH.
|
|
ln -fns ../../.. src/%{goipath_moby}
|
|
# Build using source and vendored deps in local GOPATH.
|
|
#export GOPATH="${PWD}"
|
|
export AUTO_GOPATH=1
|
|
export GO111MODULE=off
|
|
export LDFLAGS="-w"
|
|
export LDFLAGS+=" -X github.com/docker/docker/dockerversion.Version=%{version}"
|
|
export LDFLAGS+=" -X github.com/docker/docker/dockerversion.GitCommit=%{shortcommit_moby}"
|
|
export LDFLAGS+=" -X github.com/docker/docker/dockerversion.IAmStatic=false"
|
|
export LDFLAGS+=" -X 'github.com/docker/docker/dockerversion.BuildTime=%{buildtime}'"
|
|
export DOCKER_BUILDTAGS="seccomp selinux journald"
|
|
export BUILDTAGS="${DOCKER_BUILDTAGS}"
|
|
export GOBUILDTAGS="${BUILDTAGS}"
|
|
ln -s {vendor,go}.mod
|
|
ln -s {vendor,go}.sum
|
|
#gobuild -o _build/bin/dockerd %{goipath_moby}/cmd/dockerd
|
|
VERSION=%{version} DOCKER_GITCOMMIT=%{shortcommit_moby} hack/make.sh dynbinary
|
|
mv bundles/dynbinary-daemon/dockerd _build/bin/
|
|
mv bundles/dynbinary-daemon/docker-proxy _build/bin/
|
|
)
|
|
|
|
# build cli
|
|
(
|
|
cd cli-%{version}
|
|
mkdir -p src/github.com/docker
|
|
# Link source and vendored deps into local GOPATH.
|
|
ln -fns ../../.. src/%{goipath_cli}
|
|
# export DISABLE_WARN_OUTSIDE_CONTAINER=1
|
|
# Build using source and vendored deps in local GOPATH.
|
|
export GOPATH="${PWD}"
|
|
#export GO111MODULE=off
|
|
export LDFLAGS="\
|
|
-w \
|
|
-X \"github.com/docker/cli/cli/version.GitCommit=%{shortcommit_cli}\" \
|
|
-X \"github.com/docker/cli/cli/version.BuildTime=%{buildtime}\" \
|
|
-X \"github.com/docker/cli/cli/version.Version=%{version}\" \
|
|
"
|
|
export BUILDTAGS="pkcs11"
|
|
export GOBUILDTAGS="${BUILDTAGS}"
|
|
%gobuild -o ../_build/bin/docker %{goipath_cli}/cmd/docker
|
|
# make VERSION=%%{version} GITCOMMIT=%%{shortcommit_cli} dynbinary
|
|
|
|
scripts/docs/generate-man.sh
|
|
)
|
|
|
|
%install
|
|
# install binary
|
|
install -Dpm 755 _build/bin/docker _build/bin/dockerd -t %{buildroot}%{_bindir}/
|
|
|
|
# install proxy
|
|
install -Dpm 755 _build/bin/docker-proxy -t %{buildroot}%{_libexecdir}/docker/
|
|
|
|
# install tini
|
|
install -Dpm 755 tini-%{commit_tini}/%{__cmake_builddir}/tini-static %{buildroot}%{_libexecdir}/docker/docker-init
|
|
|
|
# install udev rules
|
|
install -Dpm 644 contrib/udev/80-docker.rules -t %{buildroot}%{_usr}/lib/udev/rules.d/
|
|
|
|
# add init scripts
|
|
install -Dpm 644 %{SOURCE3} contrib/init/systemd/docker.socket -t %{buildroot}%{_unitdir}/
|
|
|
|
# for additional args
|
|
install -Dpm 644 %{SOURCE4} %{buildroot}%{_sysconfdir}/sysconfig/docker
|
|
|
|
# Install sysusers configuration
|
|
install -Dpm 0644 %{SOURCE5} %{buildroot}%{_sysusersdir}/docker.conf
|
|
|
|
# add bash, zsh, and fish completions
|
|
install -Dpm 644 cli-%{version}/contrib/completion/bash/docker -t %{buildroot}%{_datadir}/bash-completion/completions/
|
|
install -Dpm 644 cli-%{version}/contrib/completion/zsh/_docker -t %{buildroot}%{_datadir}/zsh/site-functions/
|
|
install -Dpm 644 cli-%{version}/contrib/completion/fish/docker.fish -t %{buildroot}%{_datadir}/fish/vendor_completions.d/
|
|
|
|
# install manpages
|
|
install -Dpm 644 cli-%{version}/man/man1/*.1 -t %{buildroot}%{_mandir}/man1/
|
|
install -Dpm 644 cli-%{version}/man/man5/*.5 -t %{buildroot}%{_mandir}/man5/
|
|
install -Dpm 644 cli-%{version}/man/man8/*.8 -t %{buildroot}%{_mandir}/man8/
|
|
|
|
# add nano files
|
|
install -Dpm 644 contrib/syntax/nano/Dockerfile.nanorc -t %{buildroot}%{_datadir}/nano/
|
|
|
|
for cli_file in LICENSE MAINTAINERS NOTICE README.md; do
|
|
cp "cli-%{version}/$cli_file" "cli-$cli_file"
|
|
done
|
|
|
|
%pre
|
|
%sysusers_create_compat %{SOURCE5}
|
|
|
|
%post
|
|
%systemd_post docker.service docker.socket
|
|
%firewalld_reload
|
|
|
|
%preun
|
|
%systemd_preun docker.service docker.socket
|
|
|
|
%postun
|
|
%systemd_postun_with_restart docker.service
|
|
|
|
%files
|
|
%license LICENSE cli-LICENSE
|
|
%doc AUTHORS CONTRIBUTING.md MAINTAINERS NOTICE README.md
|
|
%doc cli-MAINTAINERS cli-NOTICE cli-README.md
|
|
%config(noreplace) %{_sysconfdir}/sysconfig/docker
|
|
%{_bindir}/docker
|
|
%{_bindir}/dockerd
|
|
%dir %{_libexecdir}/docker/
|
|
%{_libexecdir}/docker/docker-proxy
|
|
%{_libexecdir}/docker/docker-init
|
|
%{_usr}/lib/udev/rules.d/80-docker.rules
|
|
%{_unitdir}/docker.service
|
|
%{_unitdir}/docker.socket
|
|
%{_sysusersdir}/docker.conf
|
|
%{_datadir}/bash-completion/completions/docker
|
|
%{_mandir}/man1/docker*.1*
|
|
%{_mandir}/man5/{Dockerfile,docker-config-json}.5*
|
|
%{_mandir}/man8/dockerd.8*
|
|
%{_datadir}/zsh/site-functions/_docker
|
|
%{_datadir}/fish/vendor_completions.d/docker.fish
|
|
%dir %{_datadir}/nano
|
|
%{_datadir}/nano/Dockerfile.nanorc
|
|
|