docker/docker.spec
2016-10-14 22:22:44 +04:00

381 lines
16 KiB
RPMSpec

# modifying the dockerinit binary breaks the SHA1 sum check by docker
%global __os_install_post %{_usrlibrpm}/brp-compress
%global dist_version 1.11.2
# docker builds in a checksum of dockerinit into docker,
# so stripping the binaries breaks docker
%global debug_package %{nil}
%global provider github
%global provider_tld com
%global project docker
%global repo %{project}
%global import_path %{provider}.%{provider_tld}/%{project}/%{repo}
#debuginfo not supported with Go
%global gopath %{_libdir}/golang
%define gosrc %{gopath}/src/pkg/%{import_path}
%global commit a34a1d598c6096ed8b5ce5219e77d68e5cd85462
%global shortcommit %(c=%{commit}; echo ${c:0:7})
%define __noautoreq '.*/bin/make'
Name: docker
Version: %{dist_version}
Release: 3
Summary: Automates deployment of containerized applications
License: ASL 2.0
Group: System/Kernel and hardware
URL: http://www.docker.com
# only x86_64 for now: https://github.com/docker/docker/issues/136
#ExclusiveArch: x86_64
Source0: https://%{import_path}/archive/v%{dist_version}.tar.gz
#Source0: https://%{import_path}/archive/%{commit}.tar.gzS
Source1: %{repo}.service
Source2: %{repo}.sysconfig
Source3: %{repo}-storage.sysconfig
Source4: %{repo}-logrotate.sh
Source5: README.%{repo}-logrotate
Source6: %{repo}-network.sysconfig
Source7: %{repo}.socket
Source100: %{name}.rpmlintrc
BuildRequires: gcc
BuildRequires: glibc-static-devel
# ensure build uses golang 1.4 or above
BuildRequires: golang >= 1.4
BuildRequires: sqlite3-devel
BuildRequires: golang-net-devel
BuildRequires: go-md2man
BuildRequires: device-mapper-devel
BuildRequires: btrfs-devel
BuildRequires: pkgconfig(systemd)
BuildRequires: pkgconfig(libsystemd-journal)
Requires: systemd-units
# With docker >= 1.11 you now need containerd (and runC as a dep)
Requires: docker-containerd
# need xz to work with ubuntu images
# https://bugzilla.redhat.com/show_bug.cgi?id=1045220
Requires: xz
# https://bugzilla.redhat.com/show_bug.cgi?id=1035436
# this won't be needed for rhel7+
Requires: bridge-utils
Requires: lxc
# https://bugzilla.redhat.com/show_bug.cgi?id=1034919
# No longer needed in Fedora because of libcontainer
Requires: libcgroup
Provides: lxc-docker = %{version}
Obsoletes: docker-io < 1.2.0-8
Provides: docker-io = %{version}-%{release}
%description
Docker is an open-source engine that automates the deployment of any
application as a lightweight, portable, self-sufficient container that will
run virtually anywhere.
Docker containers can encapsulate any payload, and will run consistently on
and between virtually any server. The same container that a developer builds
and tests on a laptop will run at scale, in production*, on VMs, bare-metal
servers, OpenStack clusters, public instances, or combinations of the above.
%package devel
BuildRequires: golang >= 1.4
Requires: golang >= 1.4
Requires: docker-pkg-devel
Summary: A golang registry for global request variables (source libraries)
Provides: %{repo}-pkg-devel = %{version}-%{release}
Provides: golang(%{import_path}) = %{version}-%{release}
Provides: golang(%{import_path}/builder) = %{version}-%{release}
Provides: golang(%{import_path}/builder/parser) = %{version}-%{release}
Provides: golang(%{import_path}/builder/parser/dumper) = %{version}-%{release}
Provides: golang(%{import_path}/builder/command) = %{version}-%{release}
Provides: golang(%{import_path}/nat) = %{version}-%{release}
Provides: golang(%{import_path}/utils) = %{version}-%{release}
Provides: golang(%{import_path}/integration-cli) = %{version}-%{release}
Provides: golang(%{import_path}/trust) = %{version}-%{release}
Provides: golang(%{import_path}/events) = %{version}-%{release}
Provides: golang(%{import_path}/volumes) = %{version}-%{release}
Provides: golang(%{import_path}/engine) = %{version}-%{release}
Provides: golang(%{import_path}/registry) = %{version}-%{release}
Provides: golang(%{import_path}/registry/v2) = %{version}-%{release}
Provides: golang(%{import_path}/api) = %{version}-%{release}
Provides: golang(%{import_path}/api/client) = %{version}-%{release}
Provides: golang(%{import_path}/api/stats) = %{version}-%{release}
Provides: golang(%{import_path}/api/server) = %{version}-%{release}
Provides: golang(%{import_path}/opts) = %{version}-%{release}
Provides: golang(%{import_path}/builtins) = %{version}-%{release}
Provides: golang(%{import_path}/runconfig) = %{version}-%{release}
Provides: golang(%{import_path}/docker) = %{version}-%{release}
Provides: golang(%{import_path}/contrib/docker-device-tool) = %{version}-%{release}
Provides: golang(%{import_path}/contrib/host-integration) = %{version}-%{release}
Provides: golang(%{import_path}/daemon) = %{version}-%{release}
Provides: golang(%{import_path}/daemon/graphdriver) = %{version}-%{release}
Provides: golang(%{import_path}/daemon/graphdriver/devmapper) = %{version}-%{release}
Provides: golang(%{import_path}/daemon/graphdriver/aufs) = %{version}-%{release}
Provides: golang(%{import_path}/daemon/graphdriver/overlay) = %{version}-%{release}
Provides: golang(%{import_path}/daemon/graphdriver/vfs) = %{version}-%{release}
Provides: golang(%{import_path}/daemon/graphdriver/btrfs) = %{version}-%{release}
Provides: golang(%{import_path}/daemon/graphdriver/graphtest) = %{version}-%{release}
Provides: golang(%{import_path}/daemon/networkdriver) = %{version}-%{release}
Provides: golang(%{import_path}/daemon/networkdriver/ipallocator) = %{version}-%{release}
Provides: golang(%{import_path}/daemon/networkdriver/portmapper) = %{version}-%{release}
Provides: golang(%{import_path}/daemon/networkdriver/bridge) = %{version}-%{release}
Provides: golang(%{import_path}/daemon/networkdriver/portallocator) = %{version}-%{release}
Provides: golang(%{import_path}/daemon/execdriver) = %{version}-%{release}
Provides: golang(%{import_path}/daemon/execdriver/execdrivers) = %{version}-%{release}
Provides: golang(%{import_path}/daemon/execdriver/lxc) = %{version}-%{release}
Provides: golang(%{import_path}/daemon/execdriver/native) = %{version}-%{release}
Provides: golang(%{import_path}/daemon/execdriver/native/template) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/devicemapper) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/units) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/chrootarchive) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/mount) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/systemd) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/parsers) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/parsers/kernel) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/parsers/operatingsystem) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/parsers/filters) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/broadcastwriter) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/stdcopy) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/proxy) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/promise) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/pools) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/system) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/fileutils) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/mflag) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/mflag/example) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/timeutils) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/ioutils) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/pubsub) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/signal) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/listenbuffer) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/version) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/httputils) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/urlutil) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/sysinfo) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/archive) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/iptables) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/tailfile) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/graphdb) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/tarsum) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/namesgenerator) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/jsonlog) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/testutils) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/truncindex) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/homedir) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/symlink) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/networkfs/resolvconf) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/networkfs/etchosts) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/term) = %{version}-%{release}
Provides: golang(%{import_path}/pkg/reexec) = %{version}-%{release}
Provides: golang(%{import_path}/integration) = %{version}-%{release}
Provides: golang(%{import_path}/links) = %{version}-%{release}
Provides: golang(%{import_path}/image) = %{version}-%{release}
%description devel
This is the source libraries for docker.
%package fish-completion
Summary: Fish completion files for Docker
Requires: %{repo} = %{version}-%{release}
# fish is in contrib, but we can't move this particular
# subpackage there, so suggest fish instead of require
Suggests: fish
Provides: %{repo}-io-fish-completion = %{version}-%{release}
%description fish-completion
This package installs %{summary}.
%package logrotate
Summary: Cron job to run logrotate on Docker containers
Requires: %{repo} = %{version}-%{release}
Provides: %{repo}-io-logrotate = %{version}-%{release}
%description logrotate
This package installs a cron job to run logrotate on Docker containers.
Logrotate is assumed to be installed on containers for this to work,
failures are silently ignored.
%package unit-test
Summary: Cron job for running unit tests
%description unit-test
%{summary} - for running unit tests
%package vim
Summary: Vim syntax highlighting files for Docker
Requires: %{repo} = %{version}-%{release}
Requires: vim
Provides: %{repo}-io-vim = %{version}-%{release}
%description vim
This package installs %{summary}.
%package zsh-completion
Summary: Zsh completion files for Docker
Requires: %{repo} = %{version}-%{release}
Requires: zsh
Provides: %{repo}-io-zsh-completion = %{version}-%{release}
%description zsh-completion
This package installs %{summary}.
%prep
%setup -q -n docker-%{dist_version}
# here keep the new line above otherwise autosetup fails when applying patch
cp %{SOURCE5} .
#sed -i 's/$/%{?dist}/' VERSION
%build
export DOCKER_GITCOMMIT="%{shortcommit}"
#export DOCKER_GITCOMMIT="%{shortcommit}/%{version}"
AUTO_GOPATH=1 ./hack/make.sh dynbinary
man/md2man-all.sh
cp contrib/syntax/vim/LICENSE LICENSE-vim-syntax
cp contrib/syntax/vim/README.md README-vim-syntax.md
%install
# install binary
install -d %{buildroot}%{_bindir}
install -p -m 755 bundles/%{dist_version}/dynbinary/docker-%{dist_version} %{buildroot}%{_bindir}/docker
# Place to store images
install -d %{buildroot}%{_var}/cache/docker
# install manpages
install -d %{buildroot}%{_mandir}/man1
install -p -m 644 man/man1/*.1 %{buildroot}%{_mandir}/man1
install -d %{buildroot}%{_mandir}/man5
install -p -m 644 man/man5/*.5 %{buildroot}%{_mandir}/man5
install -d %{buildroot}%{_mandir}/man8
install -p -m 644 man/man8/*.8 %{buildroot}%{_mandir}/man8
# install bash completion
install -d %{buildroot}%{_sysconfdir}/bash_completion.d
install -p -m 644 contrib/completion/bash/docker %{buildroot}%{_sysconfdir}/bash_completion.d/docker.bash
# install fish completion
# create, install and own /usr/share/fish/vendor_completions.d until
# upstream fish provides it
install -dp %{buildroot}%{_datadir}/fish/vendor_completions.d
install -p -m 644 contrib/completion/fish/%{repo}.fish %{buildroot}%{_datadir}/fish/vendor_completions.d
# install container logrotate cron script
install -dp %{buildroot}%{_sysconfdir}/cron.daily/
install -p -m 755 %{SOURCE4} %{buildroot}%{_sysconfdir}/cron.daily/%{repo}-logrotate
# install vim syntax highlighting
install -d %{buildroot}%{_datadir}/vim/vimfiles/{doc,ftdetect,syntax}
install -p -m 644 contrib/syntax/vim/doc/dockerfile.txt %{buildroot}%{_datadir}/vim/vimfiles/doc
install -p -m 644 contrib/syntax/vim/ftdetect/dockerfile.vim %{buildroot}%{_datadir}/vim/vimfiles/ftdetect
install -p -m 644 contrib/syntax/vim/syntax/dockerfile.vim %{buildroot}%{_datadir}/vim/vimfiles/syntax
# install zsh completion
install -d %{buildroot}%{_datadir}/zsh/site-functions
install -p -m 644 contrib/completion/zsh/_docker %{buildroot}%{_datadir}/zsh/site-functions
# install udev rules
install -d %{buildroot}%{_udevrulesdir}
install -p -m 755 contrib/udev/80-docker.rules %{buildroot}%{_udevrulesdir}
# install storage dir
install -d -m 700 %{buildroot}%{_sharedstatedir}/docker
# install systemd/init scripts
install -d %{buildroot}%{_unitdir}
install -p -m 644 %{SOURCE1} %{SOURCE7} %{buildroot}%{_unitdir}
# for additional args
install -d %{buildroot}%{_sysconfdir}/sysconfig/
install -p -m 644 %{SOURCE2} %{buildroot}%{_sysconfdir}/sysconfig/%{repo}
install -p -m 644 %{SOURCE6} %{buildroot}%{_sysconfdir}/sysconfig/%{repo}-network
install -p -m 644 %{SOURCE3} %{buildroot}%{_sysconfdir}/sysconfig/%{repo}-storage
install -d -m 0755 %{buildroot}%{_sharedstatedir}/docker-unit-test/
cp -pav VERSION Dockerfile %{buildroot}%{_sharedstatedir}/docker-unit-test/.
for d in api builder cliconfig contrib daemon hack image integration-cli opts pkg registry runconfig utils vendor volume; do
cp -a $d %{buildroot}%{_sharedstatedir}/docker-unit-test/
done
# remove docker.initd as it requires /sbin/runtime no packages in Fedora
rm -rf %{buildroot}%{_sharedstatedir}/docker-unit-test/contrib/init/openrc/docker.initd
# sources
install -d -p %{buildroot}%{gopath}/src/%{import_path}
rm -rf pkg/symlink/testdata
# remove dirs that won't be installed in devel
rm -rf vendor docs _build bundles contrib/init hack project
# install sources to devel
for dir in */ ; do
cp -rpav $dir %{buildroot}/%{gopath}/src/%{import_path}/
done
%check
%pre
getent group docker > /dev/null || %{_sbindir}/groupadd -r docker
exit 0
%post
%systemd_post docker
%preun
%systemd_preun docker
%postun
%systemd_postun_with_restart docker
%files
%doc AUTHORS CHANGELOG.md CONTRIBUTING.md LICENSE MAINTAINERS NOTICE README.md
%doc LICENSE-vim-syntax README-vim-syntax.md
%config(noreplace) %{_sysconfdir}/sysconfig/%{repo}
%config(noreplace) %{_sysconfdir}/sysconfig/%{repo}-network
%config(noreplace) %{_sysconfdir}/sysconfig/%{repo}-storage
%{_mandir}/man1/*.1*
%{_mandir}/man5/*.5*
%{_mandir}/man8/*.8*
%{_bindir}/docker
%dir %{_var}/cache/docker
%{_unitdir}/docker.service
%{_unitdir}/docker.socket
%dir %{_sysconfdir}/bash_completion.d
%{_sysconfdir}/bash_completion.d/docker.bash
%dir %{_sharedstatedir}/docker
%dir %{_udevrulesdir}
%{_udevrulesdir}/80-docker.rules
%files devel
%dir %{gopath}/src/%{provider}.%{provider_tld}/%{project}
%{gopath}/src/%{import_path}
%files unit-test
%{_sharedstatedir}/docker-unit-test/
%files fish-completion
%dir %{_datadir}/fish/vendor_completions.d/
%{_datadir}/fish/vendor_completions.d/%{repo}.fish
%files logrotate
%doc README.%{repo}-logrotate
%{_sysconfdir}/cron.daily/%{repo}-logrotate
%files vim
%{_datadir}/vim/vimfiles/doc/%{repo}file.txt
%{_datadir}/vim/vimfiles/ftdetect/%{repo}file.vim
%{_datadir}/vim/vimfiles/syntax/%{repo}file.vim
%files zsh-completion
%{_datadir}/zsh/site-functions/_%{repo}