# # spec file for package docker # # Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed # upon. The license for this file, and modifications and additions to the # file, is the same license as for the pristine package itself (unless the # license for the pristine package is not an Open Source License, in which # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. # Please submit bugfixes or comments via http://bugs.opensuse.org/ # %define docker_store /var/lib/docker %define docker_graph %{docker_store}/graph %define docker_migration_testfile %{docker_store}/.suse-image-migration-v1to2-complete %define git_version 9e83765 %define go_arches %ix86 x86_64 Name: docker Version: 1.10.3 Release: 0 Summary: The Linux container runtime License: Apache-2.0 Group: System/Management Url: http://www.docker.io Source: %{name}-%{version}.tar.xz Source1: docker.service Source3: 80-docker.rules Source4: sysconfig.docker %if 0%{?suse_version} > 1320 Source5: docker.socket %else Source5: docker_systemd_lt_214.socket %endif Source6: docker-rpmlintrc Source7: README_SUSE.md Source8: docker-audit.rules # TODO: remove once we figure out what is wrong with iptables on ppc64le Source100: sysconfig.docker.ppc64le Patch0: fix_platform_type_arm.patch Patch1: gcc5_socket_workaround.patch Patch2: fix-docker-init.patch Patch3: fix-apparmor.patch # Required to overcome some limitations of gcc-go: https://groups.google.com/forum/#!msg/golang-nuts/SlGCPYkjxo4/4DjcjXRCqAkJ # Right now docker passes the sha1sum of the dockerinit binary to the docker binary at build time # We cannot do that, right now a quick and really dirty way to get it running is # to simply disable this check Patch100: ignore-dockerinit-checksum.patch Patch101: gcc-go-patches.patch Patch102: netlink_gcc_go.patch Patch103: netlink_netns_powerpc.patch Patch104: boltdb_bolt_powerpc.patch Patch105: libnetwork_drivers_bridge_powerpc.patch BuildRequires: audit BuildRequires: bash-completion BuildRequires: device-mapper-devel >= 1.2.68 BuildRequires: glibc-devel-static %ifarch %go_arches BuildRequires: go >= 1.5 BuildRequires: go-go-md2man %else BuildRequires: gcc5-go >= 5.0 %endif BuildRequires: libapparmor-devel BuildRequires: libbtrfs-devel >= 3.8 BuildRequires: procps BuildRequires: sqlite3-devel BuildRequires: systemd-devel BuildRequires: zsh Requires: apparmor-parser Requires: bridge-utils Requires: ca-certificates-mozilla # Provides mkfs.ext4 - used by Docker when devicemapper storage driver is used Requires: e2fsprogs Requires: git-core >= 1.7 Requires: iproute2 >= 3.5 Requires: iptables >= 1.4 Requires: kernel >= 3.8.0 Requires: lvm2 >= 2.2.89 Requires: procps Requires: tar >= 1.26 Requires: xz >= 4.9 Conflicts: lxc < 1.0 PreReq: %fillup_prereq BuildRoot: %{_tmppath}/%{name}-%{version}-build ExcludeArch: %ix86 ExcludeArch: s390 ExcludeArch: s390x ExcludeArch: ppc %description Docker complements LXC with a high-level API which operates at the process level. It runs unix processes with strong guarantees of isolation and repeatability across servers. Docker is a great building block for automating distributed systems: large-scale web deployments, database clusters, continuous deployment systems, private PaaS, service-oriented architectures, etc. %package bash-completion Summary: Bash Completion for %{name} Group: System/Management Requires: %{name} = %{version} Requires: bash-completion BuildArch: noarch %description bash-completion Bash command line completion support for %{name}. %package zsh-completion Summary: Zsh Completion for %{name} Group: System/Management Requires: %{name} = %{version} Requires: zsh BuildArch: noarch %description zsh-completion Zsh command line completion support for %{name}. %package test Summary: Test package for docker Group: System/Management Requires: device-mapper-devel >= 1.2.68 Requires: glibc-devel-static %ifarch %go_arches Requires: go >= 1.4 %else Requires: gcc5-go >= 5.0 %endif BuildRequires: fdupes Requires: apparmor-parser Requires: bash-completion Requires: libapparmor-devel Requires: libbtrfs-devel >= 3.8 Requires: procps Requires: sqlite3-devel BuildArch: noarch %global __requires_exclude ^libgo.so.*$ %description test Test package for docker. It contains the source code and the tests. %prep %setup -q -n %{name}-%{version} %patch0 -p1 # 1330 is Tumbleweed after leap has been released # gcc5-go in Tumbleweed includes this commit # https://github.com/golang/gofrontend/commit/a850225433a66a58613c22185c3b09626f5545eb # Which "fixes" the data type for RawSockaddr.Data # However, docker now expects the "wrong" data type, since docker had a workaround # for that issue. # Thus, we need to workaround the workaroundn in tumbleweed %if 0%{?suse_version} >= 1330 && 0%{?is_opensuse} == 1 %patch1 -p1 %endif %patch2 -p1 %patch3 -p1 %ifnarch %go_arches %patch101 -p1 %patch102 -p1 %patch103 -p1 %patch104 -p1 %patch105 -p1 %patch100 -p1 %endif cp %{SOURCE7} . %build %ifnarch %go_arches tmphack=/tmp/dirty-hack [ -e $tmphack ] && rm -rf $tmphack mkdir $tmphack ln -s /usr/bin/go-5 $tmphack/go export PATH=$tmphack:$PATH %endif (cat < docker_build_env . ./docker_build_env %ifarch %go_arches ./hack/make.sh dynbinary man/md2man-all.sh %else ./hack/make.sh dyngccgo %endif # remove other than systemd # otherwise the resulting package will have extra requires rm -rf hack/make/.build-deb %install install -d %{buildroot}%{go_contribdir} install -d %{buildroot}%{_bindir} %ifarch %go_arches install -D -m755 bundles/%{version}/dynbinary/%{name}-%{version} %{buildroot}/%{_bindir}/%{name} install -D -m755 bundles/%{version}/dynbinary/dockerinit-%{version} %{buildroot}/%{_prefix}/lib/docker/dockerinit %else install -D -m755 bundles/%{version}/dyngccgo/%{name}-%{version} %{buildroot}/%{_bindir}/%{name} install -D -m755 bundles/%{version}/dyngccgo/dockerinit-%{version} %{buildroot}/%{_prefix}/lib/docker/dockerinit %endif install -d %{buildroot}/%{_prefix}/lib/docker install -Dd -m 0755 \ %{buildroot}%{_sysconfdir}/init.d \ %{buildroot}%{_sbindir} install -D -m0644 contrib/completion/bash/docker "%{buildroot}/etc/bash_completion.d/%{name}" install -D -m0644 contrib/completion/zsh/_docker "%{buildroot}/etc/zsh_completion.d/%{name}" # copy all for the test package install -d %{buildroot}/usr/src/docker/ cp -av . %{buildroot}/usr/src/docker/ # # systemd service # install -D -m 0644 %SOURCE1 %{buildroot}%{_unitdir}/%{name}.service install -D -m 0644 %SOURCE5 %{buildroot}%{_unitdir}/%{name}.socket ln -sf /sbin/service $RPM_BUILD_ROOT/usr/sbin/rcdocker # # udev rules that prevents dolphin to show all docker devices and slows down # upstream report https://bugs.kde.org/show_bug.cgi?id=329930 # install -D -m 0644 %SOURCE3 %{buildroot}%{_prefix}/lib/udev/rules.d/80-%{name}.rules # audit rules install -D -m 0640 %SOURCE8 %{buildroot}%{_sysconfdir}/audit/rules.d/%{name}.rules # sysconfig file %ifarch ppc64le install -D -m 644 %SOURCE100 %{buildroot}/var/adm/fillup-templates/sysconfig.docker %else install -D -m 644 %SOURCE4 %{buildroot}/var/adm/fillup-templates/sysconfig.docker %endif %ifarch %go_arches # 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/Dockerfile.5 %{buildroot}%{_mandir}/man5 %endif %fdupes %{buildroot} %pre # We're currently inside rpmlint, which will cause us to fail the tests if it # happens that the Docker install in the builder requires a migration. $BUILD if [[ -z "$BUILD_ROOT" && -z "$DOCKER_FORCE_IMAGE_MIGRATION" ]] then # In order to make sure we don't print a scary warning when we shouldn't we # need to test these things (in this order): # 1. Check that /var/lib/docker actually exists (docker daemon has run). # 2. Check that the migrator has *not* finished. # 3. Check that /var/lib/docker/graph exists (this is a <=1.9.1 thing, but # will stick around if it has been migrated -- which is why we need the # MIGRATION_TESTFILE check). # 4. Check that there are images in the graph/ directory. if [[ -d "%{docker_store}" && ( ! -f "%{docker_migration_testfile}" ) && -d "%{docker_store}" && -n "$(find "%{docker_store}" -maxdepth 1 -type d 2>/dev/null | grep -Ev '_tmp|^%{docker_store}$')" ]] then cat >&2 <=1.10.0, the Docker image format has changed to be completely content-addressible. This results in several positive improvements to image operations (better caching during builds mainly). However, the migration operation may take several hours if you have a lot of large images on a Docker host. In order to ensure that you have minimum downtime, this update of Docker will not complete successfully, and you will have the opportunity to run a separate migration tool (which will not cause downtime for your Docker daemon). In order to run this migration tool, please install docker-image-migrator package. However, if you prefer to not run this separate migration tool, you can force this update using the following command. THIS WILL CAUSE DOWNTIME, BECAUSE DOCKER WILL RUN THE MIGRATION ON FIRST START AND YOU WILL BE UNABLE TO START ANY CONTAINERS OR USE ANY DOCKER COMMANDS (EVEN CONTAINERS WITH RESTART POLICIES ACTIVE): $ DOCKER_FORCE_IMAGE_MIGRATION=1 sudo -E zypper up docker EOF # Fail the update. exit 1 fi # In order to make sure that we don't accidentally cause problems with an # upgrade to docker>=1.10.2, we'll touch the same file we tested in (2). # -m701 is *not* a typo, it is necessary for certain syscalls with remapped # root. [[ -d "%{docker_store}" ]] || install -d -m701 %{docker_store} || : touch %{docker_migration_testfile} fi echo "creating group docker..." groupadd -r docker 2>/dev/null || : %service_add_pre %{name}.service %{name}.socket %post %service_add_post %{name}.service %{name}.socket %{fillup_only -n docker} %preun %service_del_preun %{name}.service %{name}.socket %postun %service_del_postun %{name}.service %{name}.socket %files %defattr(-,root,root) %doc README.md LICENSE README_SUSE.md %{_bindir}/docker %{_sbindir}/rcdocker %{_prefix}/lib/docker/ %{_prefix}/lib/docker/dockerinit %{_unitdir}/%{name}.service %{_unitdir}/%{name}.socket %config %{_sysconfdir}/audit/rules.d/%{name}.rules %{_prefix}/lib/udev/rules.d/80-%{name}.rules /var/adm/fillup-templates/sysconfig.docker %ifarch %go_arches %{_mandir}/man1/docker-*.1.gz %{_mandir}/man1/docker.1.gz %{_mandir}/man5/Dockerfile.5.gz %endif %files bash-completion %defattr(-,root,root) %config %{_sysconfdir}/bash_completion.d/%{name} %files zsh-completion %defattr(-,root,root) %config %{_sysconfdir}/zsh_completion.d/%{name} %files test %defattr(-,root,root) /usr/src/docker/ # exclude binaries %exclude /usr/src/docker/bundles/ # exclude init configurations other than systemd %exclude /usr/src/docker/contrib/init/openrc %exclude /usr/src/docker/contrib/init/sysvinit-debian %exclude /usr/src/docker/contrib/init/sysvinit-redhat %exclude /usr/src/docker/contrib/init/upstart %changelog