install-binaries.sh 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. #!/usr/bin/env bash
  2. set -e
  3. set -x
  4. . $(dirname "$0")/binaries-commits
  5. RM_GOPATH=0
  6. TMP_GOPATH=${TMP_GOPATH:-""}
  7. if [ -z "$TMP_GOPATH" ]; then
  8. export GOPATH="$(mktemp -d)"
  9. RM_GOPATH=1
  10. else
  11. export GOPATH="$TMP_GOPATH"
  12. fi
  13. # Do not build with ambient capabilities support
  14. RUNC_BUILDTAGS="${RUNC_BUILDTAGS:-"seccomp apparmor selinux"}"
  15. install_runc() {
  16. echo "Install runc version $RUNC_COMMIT"
  17. git clone https://github.com/opencontainers/runc.git "$GOPATH/src/github.com/opencontainers/runc"
  18. cd "$GOPATH/src/github.com/opencontainers/runc"
  19. git checkout -q "$RUNC_COMMIT"
  20. make BUILDTAGS="$RUNC_BUILDTAGS" $1
  21. cp runc /usr/local/bin/docker-runc
  22. }
  23. install_containerd() {
  24. echo "Install containerd version $CONTAINERD_COMMIT"
  25. git clone https://github.com/containerd/containerd.git "$GOPATH/src/github.com/containerd/containerd"
  26. cd "$GOPATH/src/github.com/containerd/containerd"
  27. git checkout -q "$CONTAINERD_COMMIT"
  28. (
  29. export GOPATH
  30. make
  31. )
  32. cp bin/containerd /usr/local/bin/docker-containerd
  33. cp bin/containerd-shim /usr/local/bin/docker-containerd-shim
  34. cp bin/ctr /usr/local/bin/docker-containerd-ctr
  35. }
  36. install_containerd_static() {
  37. echo "Install containerd version $CONTAINERD_COMMIT"
  38. git clone https://github.com/containerd/containerd.git "$GOPATH/src/github.com/containerd/containerd"
  39. cd "$GOPATH/src/github.com/containerd/containerd"
  40. git checkout -q "$CONTAINERD_COMMIT"
  41. (
  42. export GOPATH
  43. make BUILDTAGS='static_build netgo' EXTRA_FLAGS="-buildmode pie" EXTRA_LDFLAGS='-extldflags "-fno-PIC -static"'
  44. )
  45. cp bin/containerd /usr/local/bin/docker-containerd
  46. cp bin/containerd-shim /usr/local/bin/docker-containerd-shim
  47. cp bin/ctr /usr/local/bin/docker-containerd-ctr
  48. }
  49. install_proxy() {
  50. echo "Install docker-proxy version $LIBNETWORK_COMMIT"
  51. git clone https://github.com/docker/libnetwork.git "$GOPATH/src/github.com/docker/libnetwork"
  52. cd "$GOPATH/src/github.com/docker/libnetwork"
  53. git checkout -q "$LIBNETWORK_COMMIT"
  54. go build -ldflags="$PROXY_LDFLAGS" -o /usr/local/bin/docker-proxy github.com/docker/libnetwork/cmd/proxy
  55. }
  56. install_dockercli() {
  57. DOCKERCLI_CHANNEL=${DOCKERCLI_CHANNEL:-edge}
  58. DOCKERCLI_VERSION=${DOCKERCLI_VERSION:-17.06.0-ce}
  59. echo "Install docker/cli version $DOCKERCLI_VERSION from $DOCKERCLI_CHANNEL"
  60. arch=$(uname -m)
  61. # No official release of these platforms
  62. if [[ "$arch" != "x86_64" ]] && [[ "$arch" != "s390x" ]]; then
  63. build_dockercli
  64. return
  65. fi
  66. url=https://download.docker.com/linux/static
  67. curl -Ls $url/$DOCKERCLI_CHANNEL/$arch/docker-$DOCKERCLI_VERSION.tgz | \
  68. tar -xz docker/docker
  69. mv docker/docker /usr/local/bin/
  70. rmdir docker
  71. }
  72. build_dockercli() {
  73. DOCKERCLI_VERSION=${DOCKERCLI_VERSION:-17.06.0-ce}
  74. git clone https://github.com/docker/docker-ce "$GOPATH/tmp/docker-ce"
  75. cd "$GOPATH/tmp/docker-ce"
  76. git checkout -q "v$DOCKERCLI_VERSION"
  77. mkdir -p "$GOPATH/src/github.com/docker"
  78. mv components/cli "$GOPATH/src/github.com/docker/cli"
  79. go build -o /usr/local/bin/docker github.com/docker/cli/cmd/docker
  80. }
  81. install_gometalinter() {
  82. echo "Installing gometalinter version $GOMETALINTER_COMMIT"
  83. go get -d github.com/alecthomas/gometalinter
  84. cd "$GOPATH/src/github.com/alecthomas/gometalinter"
  85. git checkout -q "$GOMETALINTER_COMMIT"
  86. go build -o /usr/local/bin/gometalinter github.com/alecthomas/gometalinter
  87. GOBIN=/usr/local/bin gometalinter --install
  88. }
  89. for prog in "$@"
  90. do
  91. case $prog in
  92. tomlv)
  93. echo "Install tomlv version $TOMLV_COMMIT"
  94. git clone https://github.com/BurntSushi/toml.git "$GOPATH/src/github.com/BurntSushi/toml"
  95. cd "$GOPATH/src/github.com/BurntSushi/toml" && git checkout -q "$TOMLV_COMMIT"
  96. go build -v -o /usr/local/bin/tomlv github.com/BurntSushi/toml/cmd/tomlv
  97. ;;
  98. runc)
  99. install_runc static
  100. ;;
  101. runc-dynamic)
  102. install_runc
  103. ;;
  104. containerd)
  105. install_containerd_static
  106. ;;
  107. containerd-dynamic)
  108. install_containerd
  109. ;;
  110. gometalinter)
  111. install_gometalinter
  112. ;;
  113. tini)
  114. echo "Install tini version $TINI_COMMIT"
  115. git clone https://github.com/krallin/tini.git "$GOPATH/tini"
  116. cd "$GOPATH/tini"
  117. git checkout -q "$TINI_COMMIT"
  118. cmake .
  119. make tini-static
  120. cp tini-static /usr/local/bin/docker-init
  121. ;;
  122. proxy)
  123. (
  124. export CGO_ENABLED=0
  125. install_proxy
  126. )
  127. ;;
  128. proxy-dynamic)
  129. PROXY_LDFLAGS="-linkmode=external" install_proxy
  130. ;;
  131. vndr)
  132. echo "Install vndr version $VNDR_COMMIT"
  133. git clone https://github.com/LK4D4/vndr.git "$GOPATH/src/github.com/LK4D4/vndr"
  134. cd "$GOPATH/src/github.com/LK4D4/vndr"
  135. git checkout -q "$VNDR_COMMIT"
  136. go build -v -o /usr/local/bin/vndr .
  137. ;;
  138. dockercli)
  139. install_dockercli
  140. ;;
  141. *)
  142. echo echo "Usage: $0 [tomlv|runc|runc-dynamic|containerd|containerd-dynamic|tini|proxy|proxy-dynamic|vndr|dockercli|gometalinter]"
  143. exit 1
  144. esac
  145. done
  146. if [ $RM_GOPATH -eq 1 ]; then
  147. rm -rf "$GOPATH"
  148. fi