Dockerfile 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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:latest
  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-7-jdk \
  13. pkg-config \
  14. && apt-get clean \
  15. && rm -rf /var/lib/apt/lists/*
  16. # Install Go.
  17. ENV GOVERSION=go1.5.3 GOROOT=/usr/local/go GOPATH=/go PATH=$PATH:/usr/local/go/bin:/go/bin CGO_ENABLED=1
  18. RUN curl -L https://storage.googleapis.com/golang/$GOVERSION.linux-amd64.tar.gz -o /tmp/go.tar.gz \
  19. && tar -C /usr/local -xzf /tmp/go.tar.gz \
  20. && rm /tmp/go.tar.gz \
  21. && echo $GOVERSION > $GOROOT/VERSION
  22. # Setup Android Environment.
  23. ENV ANDROID_NDK_ROOT=/android-ndk ANDROID_HOME=/android-sdk-linux
  24. # Setup Android NDK
  25. RUN cd /tmp \
  26. && curl -L http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin -o /tmp/android-ndk.bin \
  27. && chmod a+x /tmp/android-ndk.bin \
  28. && /tmp/android-ndk.bin \
  29. && rm /tmp/android-ndk.bin \
  30. && ln -s $(find /tmp -type d -name 'android-ndk-*') /android-ndk
  31. # Setup Android SDK.
  32. RUN curl -L http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz -o /tmp/android-sdk.tgz \
  33. && tar -C / -xzf /tmp/android-sdk.tgz \
  34. && rm /tmp/android-sdk.tgz \
  35. && (while true; do echo 'y'; sleep 2; done) | $ANDROID_HOME/tools/android update sdk --no-ui --filter platform,platform-tool,tool
  36. # Setup OpenSSL libray.
  37. ENV OPENSSL_VERSION=1.0.1p
  38. ENV PKG_CONFIG_PATH=/tmp/openssl/openssl-$OPENSSL_VERSION
  39. ENV CGO_CFLAGS="-I $PKG_CONFIG_PATH/include" CGO_LDFLAGS="-L $PKG_CONFIG_PATH -lssl -lcrypto"
  40. RUN mkdir -p /tmp/openssl \
  41. && curl -L https://github.com/Psiphon-Labs/psiphon-tunnel-core/raw/master/openssl/openssl-$OPENSSL_VERSION.tar.gz -o /tmp/openssl.tar.gz \
  42. && tar -C /tmp/openssl -xzf /tmp/openssl.tar.gz \
  43. && rm /tmp/openssl.tar.gz \
  44. && curl -L https://github.com/Psiphon-Labs/psiphon-tunnel-core/raw/master/openssl/setenv-android.sh -o /tmp/setenv-android.sh \
  45. && /bin/bash -c "\
  46. source /tmp/setenv-android.sh \
  47. && cd /tmp/openssl/openssl-$OPENSSL_VERSION \
  48. && perl -pi -e 's/install: all install_docs install_sw/install: install_docs install_sw/g' Makefile.org \
  49. && ./config \
  50. no-shared \
  51. no-ssl2 \
  52. no-ssl3 \
  53. no-comp \
  54. no-hw \
  55. no-md2 \
  56. no-md4 \
  57. no-rc2 \
  58. no-rc5 \
  59. no-krb5 \
  60. no-ripemd160 \
  61. no-idea \
  62. no-gost \
  63. no-camellia \
  64. no-seed \
  65. no-3des \
  66. no-heartbeats \
  67. --openssldir=./ssl \
  68. && perl -pi -e 's/-O3/-Os -mfloat-abi=softfp/g' Makefile \
  69. && make depend \
  70. && make all"
  71. # Install Pinned Gomobile
  72. # - Ordered last to allow use of previously cached layers when changing revisions
  73. ENV GOMOBILE_PINNED_REV=52e0785361572f92c44186af9e2ccd18746adc2e
  74. RUN mkdir -p $GOPATH/src/golang.org/x \
  75. && cd $GOPATH/src/golang.org/x \
  76. && git clone https://github.com/golang/mobile \
  77. && cd mobile \
  78. && git checkout -b pinned $GOMOBILE_PINNED_REV \
  79. && echo "master: $(git rev-parse master)\npinned: $(git rev-parse pinned)" | tee $GOROOT/MOBILE \
  80. && go install golang.org/x/mobile/cmd/gomobile \
  81. && gomobile init -v
  82. WORKDIR $GOPATH/src