at 17.09-beta 202 lines 7.4 kB view raw
1{ stdenv, lib, fetchFromGitHub, makeWrapper, removeReferencesTo, pkgconfig 2, go-md2man, go, containerd, runc, docker-proxy, tini, libtool 3, sqlite, iproute, bridge-utils, devicemapper, systemd 4, btrfs-progs, iptables, e2fsprogs, xz, utillinux, xfsprogs 5, procps, libseccomp 6}: 7 8with lib; 9 10rec { 11 dockerGen = { 12 version, rev, sha256 13 , runcRev, runcSha256 14 , containerdRev, containerdSha256 15 , tiniRev, tiniSha256 16 } : stdenv.mkDerivation rec { 17 inherit version rev; 18 19 name = "docker-${version}"; 20 21 src = fetchFromGitHub { 22 owner = "docker"; 23 repo = "docker-ce"; 24 rev = "v${version}"; 25 sha256 = sha256; 26 }; 27 28 docker-runc = runc.overrideAttrs (oldAttrs: rec { 29 name = "docker-runc"; 30 src = fetchFromGitHub { 31 owner = "docker"; 32 repo = "runc"; 33 rev = runcRev; 34 sha256 = runcSha256; 35 }; 36 # docker/runc already include these patches / are not applicable 37 patches = []; 38 }); 39 docker-containerd = containerd.overrideAttrs (oldAttrs: rec { 40 name = "docker-containerd"; 41 src = fetchFromGitHub { 42 owner = "docker"; 43 repo = "containerd"; 44 rev = containerdRev; 45 sha256 = containerdSha256; 46 }; 47 }); 48 docker-tini = tini.overrideAttrs (oldAttrs: rec { 49 name = "docker-init"; 50 src = fetchFromGitHub { 51 owner = "krallin"; 52 repo = "tini"; 53 rev = tiniRev; 54 sha256 = tiniSha256; 55 }; 56 57 # Do not remove static from make files as we want a static binary 58 patchPhase = '' 59 ''; 60 61 NIX_CFLAGS_COMPILE = [ 62 "-DMINIMAL=ON" 63 ]; 64 }); 65 66 # Optimizations break compilation of libseccomp c bindings 67 hardeningDisable = [ "fortify" ]; 68 69 buildInputs = [ 70 makeWrapper removeReferencesTo pkgconfig go-md2man go 71 sqlite devicemapper btrfs-progs systemd libtool libseccomp 72 ]; 73 74 dontStrip = true; 75 76 DOCKER_BUILDTAGS = [] 77 ++ optional (systemd != null) [ "journald" ] 78 ++ optional (btrfs-progs == null) "exclude_graphdriver_btrfs" 79 ++ optional (devicemapper == null) "exclude_graphdriver_devicemapper" 80 ++ optional (libseccomp != null) "seccomp"; 81 82 buildPhase = '' 83 # build engine 84 cd ./components/engine 85 export AUTO_GOPATH=1 86 export DOCKER_GITCOMMIT="${rev}" 87 ./hack/make.sh dynbinary 88 cd - 89 90 # build cli 91 cd ./components/cli 92 # Mimic AUTO_GOPATH 93 mkdir -p .gopath/src/github.com/docker/ 94 ln -sf $PWD .gopath/src/github.com/docker/cli 95 export GOPATH="$PWD/.gopath:$GOPATH" 96 export GITCOMMIT="${rev}" 97 export VERSION="${version}" 98 source ./scripts/build/.variables 99 export CGO_ENABLED=1 100 go build -tags pkcs11 --ldflags "$LDFLAGS" github.com/docker/cli/cmd/docker 101 cd - 102 ''; 103 104 # systemd 230 no longer has libsystemd-journal as a separate entity from libsystemd 105 patchPhase = '' 106 patchShebangs . 107 substituteInPlace ./components/engine/hack/make.sh --replace libsystemd-journal libsystemd 108 substituteInPlace ./components/engine/daemon/logger/journald/read.go --replace libsystemd-journal libsystemd 109 substituteInPlace ./components/cli/scripts/build/.variables --replace "set -eu" "" 110 ''; 111 112 outputs = ["out" "man"]; 113 114 extraPath = makeBinPath [ iproute iptables e2fsprogs xz xfsprogs procps utillinux ]; 115 116 installPhase = '' 117 install -Dm755 ./components/cli/docker $out/libexec/docker/docker 118 install -Dm755 ./components/engine/bundles/${version}/dynbinary-daemon/dockerd-${version} $out/libexec/docker/dockerd 119 makeWrapper $out/libexec/docker/docker $out/bin/docker \ 120 --prefix PATH : "$out/libexec/docker:$extraPath" 121 makeWrapper $out/libexec/docker/dockerd $out/bin/dockerd \ 122 --prefix PATH : "$out/libexec/docker:$extraPath" 123 124 # docker uses containerd now 125 ln -s ${docker-containerd}/bin/containerd $out/libexec/docker/docker-containerd 126 ln -s ${docker-containerd}/bin/containerd-shim $out/libexec/docker/docker-containerd-shim 127 ln -s ${docker-runc}/bin/runc $out/libexec/docker/docker-runc 128 ln -s ${docker-proxy}/bin/docker-proxy $out/libexec/docker/docker-proxy 129 ln -s ${docker-tini}/bin/tini-static $out/libexec/docker/docker-init 130 131 # systemd 132 install -Dm644 ./components/engine/contrib/init/systemd/docker.service $out/etc/systemd/system/docker.service 133 134 # completion (cli) 135 install -Dm644 ./components/cli/contrib/completion/bash/docker $out/share/bash-completion/completions/docker 136 install -Dm644 ./components/cli/contrib/completion/fish/docker.fish $out/share/fish/vendor_completions.d/docker.fish 137 install -Dm644 ./components/cli/contrib/completion/zsh/_docker $out/share/zsh/site-functions/_docker 138 139 # Include contributed man pages (cli) 140 # Generate man pages from cobra commands 141 echo "Generate man pages from cobra" 142 cd ./components/cli 143 mkdir -p ./man/man1 144 go build -o ./gen-manpages github.com/docker/cli/man 145 ./gen-manpages --root . --target ./man/man1 146 147 # Generate legacy pages from markdown 148 echo "Generate legacy manpages" 149 ./man/md2man-all.sh -q 150 151 manRoot="$man/share/man" 152 mkdir -p "$manRoot" 153 for manDir in ./man/man?; do 154 manBase="$(basename "$manDir")" # "man1" 155 for manFile in "$manDir"/*; do 156 manName="$(basename "$manFile")" # "docker-build.1" 157 mkdir -p "$manRoot/$manBase" 158 gzip -c "$manFile" > "$manRoot/$manBase/$manName.gz" 159 done 160 done 161 ''; 162 163 preFixup = '' 164 find $out -type f -exec remove-references-to -t ${go} -t ${stdenv.cc.cc} -t ${stdenv.glibc.dev} '{}' + 165 ''; 166 167 meta = { 168 homepage = https://www.docker.com/; 169 description = "An open source project to pack, ship and run any application as a lightweight container"; 170 license = licenses.asl20; 171 maintainers = with maintainers; [ offline tailhook vdemeester ]; 172 platforms = platforms.linux; 173 }; 174 }; 175 176 # Get revisions from 177 # https://github.com/docker/docker-ce/blob/v${version}/components/engine/hack/dockerfile/binaries-commits 178 179 docker_17_06 = dockerGen rec { 180 version = "17.06.1-ce"; 181 rev = "874a7374f31c77aca693d025101b2de1b20b96c2"; # git commit 182 sha256 = "08xhww2rhpyj73zgh5maycs85zpc0sm3ak8yyyd92dwgncmyi2im"; 183 runcRev = "2d41c047c83e09a6d61d464906feb2a2f3c52aa4"; 184 runcSha256 = "0v5iv29ck6lkxvxh7a56gfrlgfs0bjvjhrq3p6qqv9qjzv825byq"; 185 containerdRev = "3addd840653146c90a254301d6c3a663c7fd6429"; 186 containerdSha256 = "0as4s5wd57pdh1cyavkccpgs46kvlhr41v07qrv0phzffdhq3d5j"; 187 tiniRev = "949e6facb77383876aeff8a6944dde66b3089574"; 188 tiniSha256 = "0zj4kdis1vvc6dwn4gplqna0bs7v6d1y2zc8v80s3zi018inhznw"; 189 }; 190 191 docker_17_07 = dockerGen rec { 192 version = "17.07.0-ce"; 193 rev = "87847530f7176a48348d196f7c23bbd058052af1"; # git commit 194 sha256 = "0zw9zlzbd7il33ch17ypwpa73gsb930sf2njnphg7ylvnqp8qzsp"; 195 runcRev = "2d41c047c83e09a6d61d464906feb2a2f3c52aa4"; 196 runcSha256 = "0v5iv29ck6lkxvxh7a56gfrlgfs0bjvjhrq3p6qqv9qjzv825byq"; 197 containerdRev = "3addd840653146c90a254301d6c3a663c7fd6429"; 198 containerdSha256 = "0as4s5wd57pdh1cyavkccpgs46kvlhr41v07qrv0phzffdhq3d5j"; 199 tiniRev = "949e6facb77383876aeff8a6944dde66b3089574"; 200 tiniSha256 = "0zj4kdis1vvc6dwn4gplqna0bs7v6d1y2zc8v80s3zi018inhznw"; 201 }; 202}