docker-17.03.0.ebuild 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. # Copyright 1999-2017 Gentoo Foundation
  2. # Distributed under the terms of the GNU General Public License v2
  3. EAPI=6
  4. EGO_PN="github.com/docker/docker"
  5. if [[ ${PV} = *9999* ]]; then
  6. # Docker cannot be fetched via "go get", thanks to autogenerated code
  7. EGIT_REPO_URI="https://${EGO_PN}.git"
  8. EGIT_CHECKOUT_DIR="${WORKDIR}/${P}/src/${EGO_PN}"
  9. inherit git-r3
  10. else
  11. MY_PV="${PV/_/-}"
  12. DOCKER_GITCOMMIT="60ccb22"
  13. EGIT_COMMIT="v${MY_PV}-ce"
  14. SRC_URI="https://${EGO_PN}/archive/${EGIT_COMMIT}.tar.gz -> ${P}.tar.gz"
  15. KEYWORDS="~amd64"
  16. [ "$DOCKER_GITCOMMIT" ] || die "DOCKER_GITCOMMIT must be added manually for each bump!"
  17. inherit golang-vcs-snapshot
  18. fi
  19. inherit bash-completion-r1 golang-base linux-info systemd udev user
  20. DESCRIPTION="The core functions you need to create Docker images and run Docker containers"
  21. HOMEPAGE="https://dockerproject.org"
  22. LICENSE="Apache-2.0"
  23. SLOT="0"
  24. IUSE="apparmor aufs btrfs +container-init +device-mapper hardened overlay pkcs11 seccomp"
  25. # https://github.com/docker/docker/blob/master/project/PACKAGERS.md#build-dependencies
  26. CDEPEND="
  27. >=dev-db/sqlite-3.7.9:3
  28. device-mapper? (
  29. >=sys-fs/lvm2-2.02.89[thin]
  30. )
  31. seccomp? ( >=sys-libs/libseccomp-2.2.1 )
  32. apparmor? ( sys-libs/libapparmor )
  33. "
  34. DEPEND="
  35. ${CDEPEND}
  36. dev-go/go-md2man
  37. btrfs? (
  38. >=sys-fs/btrfs-progs-3.16.1
  39. )
  40. "
  41. # https://github.com/docker/docker/blob/master/project/PACKAGERS.md#runtime-dependencies
  42. # https://github.com/docker/docker/blob/master/project/PACKAGERS.md#optional-dependencies
  43. # Runc/Containerd: Unfortunately docker does not version the releases, in order to avoid
  44. # incompatiblities we depend on snapshots
  45. RDEPEND="
  46. ${CDEPEND}
  47. !app-emulation/docker-bin
  48. >=net-firewall/iptables-1.4
  49. sys-process/procps
  50. >=dev-vcs/git-1.7
  51. >=app-arch/xz-utils-4.9
  52. ~app-emulation/containerd-0.2.3_p20170131
  53. ~app-emulation/docker-runc-1.0.0_rc2_p20170222[apparmor?,seccomp?]
  54. app-emulation/docker-proxy
  55. container-init? ( >=sys-process/tini-0.13.0[static] )
  56. "
  57. RESTRICT="installsources strip"
  58. S="${WORKDIR}/${P}/src/${EGO_PN}"
  59. # see "contrib/check-config.sh" from upstream's sources
  60. CONFIG_CHECK="
  61. ~NAMESPACES ~NET_NS ~PID_NS ~IPC_NS ~UTS_NS
  62. ~CGROUPS ~CGROUP_CPUACCT ~CGROUP_DEVICE ~CGROUP_FREEZER ~CGROUP_SCHED ~CPUSETS ~MEMCG
  63. ~KEYS
  64. ~VETH ~BRIDGE ~BRIDGE_NETFILTER
  65. ~NF_NAT_IPV4 ~IP_NF_FILTER ~IP_NF_TARGET_MASQUERADE
  66. ~NETFILTER_XT_MATCH_ADDRTYPE ~NETFILTER_XT_MATCH_CONNTRACK
  67. ~NF_NAT ~NF_NAT_NEEDED
  68. ~POSIX_MQUEUE
  69. ~USER_NS
  70. ~SECCOMP
  71. ~CGROUP_PIDS
  72. ~MEMCG_SWAP ~MEMCG_SWAP_ENABLED
  73. ~BLK_CGROUP ~BLK_DEV_THROTTLING ~IOSCHED_CFQ ~CFQ_GROUP_IOSCHED
  74. ~CGROUP_PERF
  75. ~CGROUP_HUGETLB
  76. ~NET_CLS_CGROUP
  77. ~CFS_BANDWIDTH ~FAIR_GROUP_SCHED ~RT_GROUP_SCHED
  78. ~IP_VS ~IP_VS_PROTO_TCP ~IP_VS_PROTO_UDP ~IP_VS_NFCT
  79. ~VXLAN
  80. ~XFRM_ALGO ~XFRM_USER
  81. ~IPVLAN
  82. ~MACVLAN ~DUMMY
  83. "
  84. ERROR_KEYS="CONFIG_KEYS: is mandatory"
  85. ERROR_MEMCG_SWAP="CONFIG_MEMCG_SWAP: is required if you wish to limit swap usage of containers"
  86. ERROR_RESOURCE_COUNTERS="CONFIG_RESOURCE_COUNTERS: is optional for container statistics gathering"
  87. ERROR_BLK_CGROUP="CONFIG_BLK_CGROUP: is optional for container statistics gathering"
  88. ERROR_IOSCHED_CFQ="CONFIG_IOSCHED_CFQ: is optional for container statistics gathering"
  89. ERROR_CGROUP_PERF="CONFIG_CGROUP_PERF: is optional for container statistics gathering"
  90. ERROR_CFS_BANDWIDTH="CONFIG_CFS_BANDWIDTH: is optional for container statistics gathering"
  91. ERROR_XFRM_ALGO="CONFIG_XFRM_ALGO: is optional for secure networks"
  92. ERROR_XFRM_USER="CONFIG_XFRM_USER: is optional for secure networks"
  93. PATCHES=(
  94. "${FILESDIR}"/1.13.1-split-openrc-log.patch
  95. )
  96. pkg_setup() {
  97. if kernel_is lt 3 10; then
  98. ewarn ""
  99. ewarn "Using Docker with kernels older than 3.10 is unstable and unsupported."
  100. ewarn " - http://docs.docker.com/engine/installation/binaries/#check-kernel-dependencies"
  101. fi
  102. # for where these kernel versions come from, see:
  103. # https://www.google.com/search?q=945b2b2d259d1a4364a2799e80e8ff32f8c6ee6f+site%3Akernel.org%2Fpub%2Flinux%2Fkernel+file%3AChangeLog*
  104. if ! {
  105. kernel_is ge 3 16 \
  106. || { kernel_is 3 15 && kernel_is ge 3 15 5; } \
  107. || { kernel_is 3 14 && kernel_is ge 3 14 12; } \
  108. || { kernel_is 3 12 && kernel_is ge 3 12 25; }
  109. }; then
  110. ewarn ""
  111. ewarn "There is a serious Docker-related kernel panic that has been fixed in 3.16+"
  112. ewarn " (and was backported to 3.15.5+, 3.14.12+, and 3.12.25+)"
  113. ewarn ""
  114. ewarn "See also https://github.com/docker/docker/issues/2960"
  115. fi
  116. if kernel_is le 3 18; then
  117. CONFIG_CHECK+="
  118. ~RESOURCE_COUNTERS
  119. "
  120. fi
  121. if kernel_is le 3 13; then
  122. CONFIG_CHECK+="
  123. ~NETPRIO_CGROUP
  124. "
  125. else
  126. CONFIG_CHECK+="
  127. ~CGROUP_NET_PRIO
  128. "
  129. fi
  130. if kernel_is lt 4 5; then
  131. CONFIG_CHECK+="
  132. ~MEMCG_KMEM
  133. "
  134. ERROR_MEMCG_KMEM="CONFIG_MEMCG_KMEM: is optional"
  135. fi
  136. if kernel_is lt 4 7; then
  137. CONFIG_CHECK+="
  138. ~DEVPTS_MULTIPLE_INSTANCES
  139. "
  140. fi
  141. if use aufs; then
  142. CONFIG_CHECK+="
  143. ~AUFS_FS
  144. ~EXT4_FS_POSIX_ACL ~EXT4_FS_SECURITY
  145. "
  146. ERROR_AUFS_FS="CONFIG_AUFS_FS: is required to be set if and only if aufs-sources are used instead of aufs4/aufs3"
  147. fi
  148. if use btrfs; then
  149. CONFIG_CHECK+="
  150. ~BTRFS_FS
  151. ~BTRFS_FS_POSIX_ACL
  152. "
  153. fi
  154. if use device-mapper; then
  155. CONFIG_CHECK+="
  156. ~BLK_DEV_DM ~DM_THIN_PROVISIONING ~EXT4_FS ~EXT4_FS_POSIX_ACL ~EXT4_FS_SECURITY
  157. "
  158. fi
  159. if use overlay; then
  160. CONFIG_CHECK+="
  161. ~OVERLAY_FS ~EXT4_FS_SECURITY ~EXT4_FS_POSIX_ACL
  162. "
  163. fi
  164. linux-info_pkg_setup
  165. # create docker group for the code checking for it in /etc/group
  166. enewgroup docker
  167. }
  168. src_compile() {
  169. export GOPATH="${WORKDIR}/${P}:${PWD}/vendor"
  170. # setup CFLAGS and LDFLAGS for separate build target
  171. # see https://github.com/tianon/docker-overlay/pull/10
  172. export CGO_CFLAGS="-I${ROOT}/usr/include"
  173. export CGO_LDFLAGS="-L${ROOT}/usr/$(get_libdir)"
  174. # if we're building from a tarball, we need the GITCOMMIT value
  175. [ "$DOCKER_GITCOMMIT" ] && export DOCKER_GITCOMMIT
  176. if use hardened; then
  177. sed -i "s/EXTLDFLAGS_STATIC='/&-fno-PIC /" hack/make.sh || die
  178. grep -q -- '-fno-PIC' hack/make.sh || die 'hardened sed failed'
  179. sed "s/LDFLAGS_STATIC_DOCKER='/&-extldflags -fno-PIC /" \
  180. -i hack/make/dynbinary-client || die
  181. sed "s/LDFLAGS_STATIC_DOCKER='/&-extldflags -fno-PIC /" \
  182. -i hack/make/dynbinary-daemon || die
  183. grep -q -- '-fno-PIC' hack/make/dynbinary-daemon || die 'hardened sed failed'
  184. grep -q -- '-fno-PIC' hack/make/dynbinary-client || die 'hardened sed failed'
  185. fi
  186. # let's set up some optional features :)
  187. export DOCKER_BUILDTAGS=''
  188. for gd in aufs btrfs device-mapper overlay; do
  189. if ! use $gd; then
  190. DOCKER_BUILDTAGS+=" exclude_graphdriver_${gd//-/}"
  191. fi
  192. done
  193. for tag in apparmor pkcs11 seccomp; do
  194. if use $tag; then
  195. DOCKER_BUILDTAGS+=" $tag"
  196. fi
  197. done
  198. # time to build!
  199. ./hack/make.sh dynbinary || die 'dynbinary failed'
  200. # build the man pages too
  201. ./man/md2man-all.sh || die "unable to generate man pages"
  202. }
  203. src_install() {
  204. VERSION="$(cat VERSION)"
  205. newbin "bundles/$VERSION/dynbinary-client/docker-$VERSION" docker
  206. newbin "bundles/$VERSION/dynbinary-daemon/dockerd-$VERSION" dockerd
  207. dosym containerd /usr/bin/docker-containerd
  208. dosym containerd-shim /usr/bin/docker-containerd-shim
  209. dosym runc /usr/bin/docker-runc
  210. use container-init && dosym tini /usr/bin/docker-init
  211. newinitd contrib/init/openrc/docker.initd docker
  212. newconfd contrib/init/openrc/docker.confd docker
  213. systemd_dounit contrib/init/systemd/docker.{service,socket}
  214. udev_dorules contrib/udev/*.rules
  215. dodoc AUTHORS CONTRIBUTING.md CHANGELOG.md NOTICE README.md
  216. dodoc -r docs/*
  217. doman man/man*/*
  218. dobashcomp contrib/completion/bash/*
  219. insinto /usr/share/zsh/site-functions
  220. doins contrib/completion/zsh/_*
  221. insinto /usr/share/vim/vimfiles
  222. doins -r contrib/syntax/vim/ftdetect
  223. doins -r contrib/syntax/vim/syntax
  224. # note: intentionally not using "doins" so that we preserve +x bits
  225. dodir /usr/share/${PN}/contrib
  226. cp -R contrib/* "${ED}/usr/share/${PN}/contrib"
  227. }
  228. pkg_postinst() {
  229. udev_reload
  230. elog
  231. elog "To use Docker, the Docker daemon must be running as root. To automatically"
  232. elog "start the Docker daemon at boot, add Docker to the default runlevel:"
  233. elog " rc-update add docker default"
  234. elog "Similarly for systemd:"
  235. elog " systemctl enable docker.service"
  236. elog
  237. elog "To use Docker as a non-root user, add yourself to the 'docker' group:"
  238. elog " usermod -aG docker youruser"
  239. elog
  240. }