Dockerfile 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. # Dockerfile to build an image with the local version of psiphon-tunnel-core.
  2. #
  3. # See README.md for usage instructions.
  4. FROM ubuntu:18.04
  5. # Install system-level dependencies.
  6. ENV DEBIAN_FRONTEND=noninteractive
  7. RUN apt-get update -y && apt-get install -y --no-install-recommends \
  8. build-essential \
  9. ca-certificates \
  10. curl \
  11. git \
  12. openjdk-8-jdk \
  13. pkg-config \
  14. zip \
  15. unzip \
  16. && apt-get clean \
  17. && rm -rf /var/lib/apt/lists/*
  18. # Install Go.
  19. ENV GOVERSION=go1.17.1 GOROOT=/usr/local/go GOPATH=/go PATH=$PATH:/usr/local/go/bin:/go/bin CGO_ENABLED=1
  20. RUN curl -L https://storage.googleapis.com/golang/$GOVERSION.linux-amd64.tar.gz -o /tmp/go.tar.gz \
  21. && tar -C /usr/local -xzf /tmp/go.tar.gz \
  22. && rm /tmp/go.tar.gz \
  23. && echo $GOVERSION > $GOROOT/VERSION
  24. # Setup Android Environment.
  25. ENV ANDROID_NDK_ROOT=/android-ndk ANDROID_HOME=/android-sdk-linux
  26. # Setup Android NDK
  27. RUN cd /tmp \
  28. && curl -L http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin -o /tmp/android-ndk.bin \
  29. && chmod a+x /tmp/android-ndk.bin \
  30. && /tmp/android-ndk.bin \
  31. && rm /tmp/android-ndk.bin \
  32. && ln -s $(find /tmp -type d -name 'android-ndk-*') /android-ndk
  33. # Setup Android SDK.
  34. RUN curl -L http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz -o /tmp/android-sdk.tgz \
  35. && tar -C / -xzf /tmp/android-sdk.tgz \
  36. && rm /tmp/android-sdk.tgz \
  37. && (while true; do echo 'y'; sleep 2; done) | $ANDROID_HOME/tools/android update sdk --no-ui --filter platform,platform-tool,tool
  38. # Install Pinned Gomobile
  39. # - Ordered last to allow use of previously cached layers when changing revisions
  40. ENV GOMOBILE_PINNED_REV=c4d780faeb85123ee32b88e84fd022739ed8c124
  41. RUN mkdir -p $GOPATH/pkg/gomobile/dl \
  42. && cd $GOPATH/pkg/gomobile/dl \
  43. && curl -O https://dl.google.com/go/mobile/gomobile-ndk-r10e-linux-x86_64.tar.gz \
  44. && curl -O https://dl.google.com/go/mobile/gomobile-openal-soft-1.16.0.1.tar.gz \
  45. && mkdir -p $GOPATH/src/golang.org/x \
  46. && cd $GOPATH/src/golang.org/x \
  47. && git clone https://github.com/golang/mobile \
  48. && cd mobile \
  49. && git checkout -b pinned $GOMOBILE_PINNED_REV \
  50. && git format-patch --stdout -1 e6f31964531b3d6b76d334ba0d313b64c9687146 | git apply \
  51. && mv ./cmd/gomobile/build.go ./cmd/gomobile/build.go.orig \
  52. && sed -e 's/"-tags="+strconv.Quote(strings.Join(ctx.BuildTags, ",")),/"-tags",strings.Join(ctx.BuildTags, " "),/g' ./cmd/gomobile/build.go.orig > ./cmd/gomobile/build.go \
  53. && mv ./cmd/gomobile/build.go ./cmd/gomobile/build.go.orig \
  54. && sed -e 's/"strconv"//g' ./cmd/gomobile/build.go.orig > ./cmd/gomobile/build.go \
  55. && echo "master: $(git rev-parse master)\npinned: $(git rev-parse pinned)" | tee $GOROOT/MOBILE \
  56. && GO111MODULE=off go install golang.org/x/mobile/cmd/gomobile \
  57. && gomobile init -v
  58. WORKDIR $GOPATH/src