# 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: 2 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 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) 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} Requires: 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}