# modifying the dockerinit binary breaks the SHA1 sum check by docker %global __os_install_post %{_usrlibrpm}/brp-compress %global dist_version 17.05.0 # docker builds in a checksum of dockerinit into docker, # so stripping the binaries breaks docker #debuginfo not supported with Go %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} %global gopath %{_libdir}/golang %define gosrc %{gopath}/src/pkg/%{import_path} %define go_dir %{gopath} %global commit 4dc5990d7565a4a15d641bc6a0bc50a02cfcf302 %global shortcommit %(c=%{commit}; echo ${c:0:7}) %define __noautoreq '.*/bin/make' %define libnetwork_date 20170523 Name: docker Version: %{dist_version} Release: 4 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}-ce.tar.gz Source2: docker.conf Source3: libnetwork-20170523.tar.xz Patch0: adjust-docker-service.patch Source100: %{name}.rpmlintrc BuildRequires: gcc BuildRequires: glibc-static-devel # ensure build uses golang 1.4 or above BuildRequires: golang >= 1.4 BuildRequires: pkgconfig(sqlite3) Requires: runc BuildRequires: golang-net-devel BuildRequires: go-md2man BuildRequires: device-mapper-devel BuildRequires: btrfs-devel BuildRequires: pkgconfig(systemd) BuildRequires: pkgconfig(libsystemd) Requires: systemd-units # With docker >= 1.11 you now need containerd (and runC as a dep) Requires: docker-containerd >= 0.2.5 # 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: cgroup Requires: e2fsprogs Requires: iptables 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}/api) = %{version}-%{release} Provides: golang(%{import_path}/api/client) = %{version}-%{release} Provides: golang(%{import_path}/api/server) = %{version}-%{release} Provides: golang(%{import_path}/api/types) = %{version}-%{release} Provides: golang(%{import_path}/archive) = %{version}-%{release} Provides: golang(%{import_path}/builtins) = %{version}-%{release} Provides: golang(%{import_path}/contrib) = %{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/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}/daemon/graphdriver) = %{version}-%{release} Provides: golang(%{import_path}/daemon/graphdriver/aufs) = %{version}-%{release} Provides: golang(%{import_path}/daemon/graphdriver/btrfs) = %{version}-%{release} Provides: golang(%{import_path}/daemon/graphdriver/devmapper) = %{version}-%{release} Provides: golang(%{import_path}/daemon/graphdriver/overlay) = %{version}-%{release} Provides: golang(%{import_path}/daemon/graphdriver/graphtest) = %{version}-%{release} Provides: golang(%{import_path}/daemon/graphdriver/vfs) = %{version}-%{release} Provides: golang(%{import_path}/daemon/logger) = %{version}-%{release} Provides: golang(%{import_path}/daemon/logger/jsonfilelog) = %{version}-%{release} Provides: golang(%{import_path}/daemon/logger/syslog) = %{version}-%{release} Provides: golang(%{import_path}/daemon/networkdriver) = %{version}-%{release} Provides: golang(%{import_path}/daemon/networkdriver/bridge) = %{version}-%{release} Provides: golang(%{import_path}/daemon/networkdriver/ipallocator) = %{version}-%{release} Provides: golang(%{import_path}/daemon/networkdriver/portallocator) = %{version}-%{release} Provides: golang(%{import_path}/daemon/networkdriver/portmapper) = %{version}-%{release} Provides: golang(%{import_path}/dockerversion) = %{version}-%{release} Provides: golang(%{import_path}/engine) = %{version}-%{release} Provides: golang(%{import_path}/graph) = %{version}-%{release} Provides: golang(%{import_path}/image) = %{version}-%{release} Provides: golang(%{import_path}/integration) = %{version}-%{release} Provides: golang(%{import_path}/integration-cli) = %{version}-%{release} Provides: golang(%{import_path}/links) = %{version}-%{release} Provides: golang(%{import_path}/nat) = %{version}-%{release} Provides: golang(%{import_path}/opts) = %{version}-%{release} Provides: golang(%{import_path}/pkg) = %{version}-%{release} Provides: golang(%{import_path}/pkg/term) = %{version}-%{release} Provides: golang(%{import_path}/pkg/term/winconsole) = %{version}-%{release} Provides: golang(%{import_path}/registry) = %{version}-%{release} Provides: golang(%{import_path}/registry/v2) = %{version}-%{release} Provides: golang(%{import_path}/runconfig) = %{version}-%{release} Provides: golang(%{import_path}/utils) = %{version}-%{release} Provides: golang(%{import_path}/utils/broadcastwriter) = %{version}-%{release} Provides: golang(%{import_path}/pkg/graphdb) = %{version}-%{release} Provides: golang(%{import_path}/pkg/iptables) = %{version}-%{release} Provides: golang(%{import_path}/pkg/listenbuffer) = %{version}-%{release} Provides: golang(%{import_path}/pkg/mflag) = %{version}-%{release} Provides: golang(%{import_path}/pkg/mflag/example) = %{version}-%{release} Provides: golang(%{import_path}/pkg/mount) = %{version}-%{release} Provides: golang(%{import_path}/pkg/namesgenerator) = %{version}-%{release} Provides: golang(%{import_path}/pkg/networkfs/etchosts) = %{version}-%{release} Provides: golang(%{import_path}/pkg/networkfs/resolvconf) = %{version}-%{release} Provides: golang(%{import_path}/pkg/proxy) = %{version}-%{release} Provides: golang(%{import_path}/pkg/signal) = %{version}-%{release} Provides: golang(%{import_path}/pkg/symlink) = %{version}-%{release} Provides: golang(%{import_path}/pkg/sysinfo) = %{version}-%{release} Provides: golang(%{import_path}/pkg/system) = %{version}-%{release} Provides: golang(%{import_path}/pkg/systemd) = %{version}-%{release} Provides: golang(%{import_path}/pkg/tailfile) = %{version}-%{release} Provides: golang(%{import_path}/pkg/term) = %{version}-%{release} Provides: golang(%{import_path}/pkg/testutils) = %{version}-%{release} Provides: golang(%{import_path}/pkg/truncindex) = %{version}-%{release} Provides: golang(%{import_path}/pkg/units) = %{version}-%{release} Provides: golang(%{import_path}/pkg/user) = %{version}-%{release} Provides: golang(%{import_path}/pkg/version) = %{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 moby-%{dist_version}-ce %apply_patches tar -xf %{SOURCE3} -C vendor/github.com/ %build export DOCKER_GITCOMMIT="%{shortcommit}" export CGO_CFLAGS="-I%{_includedir}" export CGO_LDFLAGS="-L%{_libdir}" 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 echo "build docker-proxy" export GOPATH=$(pwd) ln -s vendor src go build -ldflags='-linkmode=external' github.com/libnetwork/cmd/proxy %install # install binary install -d %{buildroot}%{_bindir} install -p -m 755 bundles/%{version}-ce/dynbinary-client/docker-%{version}-ce %{buildroot}%{_bindir}/docker install -p -m 755 bundles/%{version}-ce/dynbinary-daemon/dockerd-%{version}-ce %{buildroot}%{_bindir}/dockerd install -p -m 755 proxy %{buildroot}%{_bindir}/docker-proxy # Place to store images install -d %{buildroot}%{_libexecdir}/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 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 contrib/init/systemd/docker.service.rpm %{buildroot}%{_unitdir}/docker.service install -p -m 644 contrib/init/systemd/docker.socket %{buildroot}%{_unitdir} # sources install -d -p %{buildroot}/%{gosrc} for dir in api daemon \ image opts pkg registry runconfig do cp -rpav $dir %{buildroot}/%{gosrc} done install -d %{buildroot}%{_presetdir} cat > %{buildroot}%{_presetdir}/86-docker.preset << EOF enable docker.socket EOF find %{buildroot} -name "*~" -exec rm -rf {} \; find %{buildroot}%{go_dir}/src/pkg/github.com/ -type d -exec chmod 0755 {} \; %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 %{_bindir}/docker-proxy %{_bindir}/dockerd # %config(noreplace) %{_sysconfdir}/sysconfig/docker %{_presetdir}/86-docker.preset %{_unitdir}/docker.service %{_unitdir}/docker.socket %dir %{_sysconfdir}/bash_completion.d %{_sysconfdir}/bash_completion.d/docker.bash # %{_datadir}/zsh/site-functions/_docker %dir %{_sharedstatedir}/docker %dir %{_udevrulesdir} %{_udevrulesdir}/80-docker.rules # %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 %doc LICENSE-vim-syntax README-vim-syntax.md %dir %{_datadir}/vim/vimfiles/doc %{_datadir}/vim/vimfiles/doc/dockerfile.txt %dir %{_datadir}/vim/vimfiles/ftdetect %{_datadir}/vim/vimfiles/ftdetect/dockerfile.vim %dir %{_datadir}/vim/vimfiles/syntax %{_datadir}/vim/vimfiles/syntax/dockerfile.vim %files zsh-completion %{_datadir}/zsh/site-functions/_%{repo} %files devel %doc AUTHORS CHANGELOG.md CONTRIBUTING.md LICENSE MAINTAINERS NOTICE README.md %dir %{go_dir}/src/pkg/%{provider}.%{provider_tld}/%{project} %{go_dir}/src/pkg/%{import_path}