|
| 1 | +FROM buildpack-deps:jessie |
| 2 | + |
| 3 | + |
| 4 | +## CircleCI dependencies |
| 5 | +RUN apt-get update; \ |
| 6 | + apt-get install -y --no-install-recommends \ |
| 7 | + git \ |
| 8 | + ssh \ |
| 9 | + tar \ |
| 10 | + gzip \ |
| 11 | + ca-certificates \ |
| 12 | + zip unzip |
| 13 | + |
| 14 | +RUN groupadd --gid 1000 node \ |
| 15 | + && useradd --uid 1000 --gid node --shell /bin/bash --create-home node |
| 16 | + |
| 17 | + |
| 18 | +## NODE |
| 19 | +# gpg keys listed at https://github.com/nodejs/node#release-team |
| 20 | +RUN set -ex \ |
| 21 | + && for key in \ |
| 22 | + 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \ |
| 23 | + FD3A5288F042B6850C66B31F09FE44734EB7990E \ |
| 24 | + 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \ |
| 25 | + DD8F2338BAE7501E3DD5AC78C273792F7D83545D \ |
| 26 | + C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \ |
| 27 | + B9AE9905FFD7803F25714661B63B535A4C206CA9 \ |
| 28 | + 56730D5401028683275BD23C23EFEFE93C4CFFFE \ |
| 29 | + 77984A986EBC2AA786BC0F66B01FBB92821C587A \ |
| 30 | + 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \ |
| 31 | + ; do \ |
| 32 | + gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \ |
| 33 | + gpg --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \ |
| 34 | + gpg --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \ |
| 35 | + done |
| 36 | + |
| 37 | +ENV NODE_VERSION 8.9.0 |
| 38 | + |
| 39 | +RUN ARCH= && dpkgArch="$(dpkg --print-architecture)" \ |
| 40 | + && case "${dpkgArch##*-}" in \ |
| 41 | + amd64) ARCH='x64';; \ |
| 42 | + ppc64el) ARCH='ppc64le';; \ |
| 43 | + s390x) ARCH='s390x';; \ |
| 44 | + arm64) ARCH='arm64';; \ |
| 45 | + armhf) ARCH='armv7l';; \ |
| 46 | + i386) ARCH='x86';; \ |
| 47 | + *) echo "unsupported architecture"; exit 1 ;; \ |
| 48 | + esac \ |
| 49 | + && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \ |
| 50 | + && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \ |
| 51 | + && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \ |
| 52 | + && grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - \ |
| 53 | + && tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \ |
| 54 | + && rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \ |
| 55 | + && ln -s /usr/local/bin/node /usr/local/bin/nodejs |
| 56 | + |
| 57 | + |
| 58 | +## YARN |
| 59 | +ENV YARN_VERSION 1.9.2 |
| 60 | + |
| 61 | +RUN set -ex \ |
| 62 | + && for key in \ |
| 63 | + 6A010C5166006599AA17F08146C2130DFD2497F5 \ |
| 64 | + ; do \ |
| 65 | + gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \ |
| 66 | + gpg --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \ |
| 67 | + gpg --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \ |
| 68 | + done \ |
| 69 | + && curl -fsSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \ |
| 70 | + && curl -fsSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc" \ |
| 71 | + && gpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \ |
| 72 | + && mkdir -p /opt \ |
| 73 | + && tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/ \ |
| 74 | + && ln -s /opt/yarn-v$YARN_VERSION/bin/yarn /usr/local/bin/yarn \ |
| 75 | + && ln -s /opt/yarn-v$YARN_VERSION/bin/yarnpkg /usr/local/bin/yarnpkg \ |
| 76 | + && rm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz |
| 77 | + |
| 78 | + |
| 79 | +## PUPPETEER DEPENDENCIES |
| 80 | +# See https://crbug.com/795759 |
| 81 | +RUN apt-get update && apt-get install -yq libgconf-2-4 |
| 82 | + |
| 83 | +# Install latest chrome dev package and fonts to support major charsets (Chinese, Japanese, Arabic, Hebrew, Thai and a few others) |
| 84 | +# Note: this installs the necessary libs to make the bundled version of Chromium that Puppeteer |
| 85 | +# installs, work. |
| 86 | +RUN apt-get update && apt-get install -y wget --no-install-recommends \ |
| 87 | + && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \ |
| 88 | + && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \ |
| 89 | + && apt-get update \ |
| 90 | + && apt-get install -y google-chrome-unstable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst ttf-freefont \ |
| 91 | + --no-install-recommends \ |
| 92 | + && rm -rf /var/lib/apt/lists/* \ |
| 93 | + && apt-get purge --auto-remove -y curl \ |
| 94 | + && rm -rf /src/*.deb |
| 95 | + |
| 96 | + |
| 97 | +## RUBY |
| 98 | +# skip installing gem documentation |
| 99 | +RUN mkdir -p /usr/local/etc \ |
| 100 | + && { \ |
| 101 | + echo 'install: --no-document'; \ |
| 102 | + echo 'update: --no-document'; \ |
| 103 | + } >> /usr/local/etc/gemrc |
| 104 | + |
| 105 | +ENV RUBY_MAJOR 2.3 |
| 106 | +ENV RUBY_VERSION 2.3.4 |
| 107 | +ENV RUBY_DOWNLOAD_SHA256 341cd9032e9fd17c452ed8562a8d43f7e45bfe05e411d0d7d627751dd82c578c |
| 108 | +ENV RUBYGEMS_VERSION 2.6.3 |
| 109 | +ENV BUNDLER_VERSION 1.16.3 |
| 110 | + |
| 111 | +# some of ruby's build scripts are written in ruby |
| 112 | +# we purge system ruby later to make sure our final image uses what we just built |
| 113 | +RUN set -ex \ |
| 114 | + \ |
| 115 | + && buildDeps=' \ |
| 116 | + bison \ |
| 117 | + dpkg-dev \ |
| 118 | + libgdbm-dev \ |
| 119 | + ruby \ |
| 120 | + ' \ |
| 121 | + && apt-get update \ |
| 122 | + && apt-get install -y --no-install-recommends $buildDeps \ |
| 123 | + && rm -rf /var/lib/apt/lists/* \ |
| 124 | + \ |
| 125 | + && wget -O ruby.tar.xz "https://cache.ruby-lang.org/pub/ruby/${RUBY_MAJOR%-rc}/ruby-$RUBY_VERSION.tar.xz" \ |
| 126 | + && echo "$RUBY_DOWNLOAD_SHA256 *ruby.tar.xz" | sha256sum -c - \ |
| 127 | + \ |
| 128 | + && mkdir -p /usr/src/ruby \ |
| 129 | + && tar -xJf ruby.tar.xz -C /usr/src/ruby --strip-components=1 \ |
| 130 | + && rm ruby.tar.xz \ |
| 131 | + \ |
| 132 | + && cd /usr/src/ruby \ |
| 133 | + \ |
| 134 | +# hack in "ENABLE_PATH_CHECK" disabling to suppress: |
| 135 | +# warning: Insecure world writable dir |
| 136 | + && { \ |
| 137 | + echo '#define ENABLE_PATH_CHECK 0'; \ |
| 138 | + echo; \ |
| 139 | + cat file.c; \ |
| 140 | + } > file.c.new \ |
| 141 | + && mv file.c.new file.c \ |
| 142 | + \ |
| 143 | + && autoconf \ |
| 144 | + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ |
| 145 | + && ./configure \ |
| 146 | + --build="$gnuArch" \ |
| 147 | + --disable-install-doc \ |
| 148 | + --enable-shared \ |
| 149 | + && make -j "$(nproc)" \ |
| 150 | + && make install \ |
| 151 | + \ |
| 152 | + && apt-get purge -y --auto-remove $buildDeps \ |
| 153 | + && cd / \ |
| 154 | + && rm -r /usr/src/ruby \ |
| 155 | + \ |
| 156 | + && gem update --system "$RUBYGEMS_VERSION" \ |
| 157 | + && gem install bundler --version "$BUNDLER_VERSION" --force \ |
| 158 | + && rm -r /root/.gem/ |
| 159 | + |
| 160 | +# install things globally, for great justice |
| 161 | +# and don't create ".bundle" in all our apps |
| 162 | +ENV GEM_HOME /usr/local/bundle |
| 163 | +ENV BUNDLE_PATH="$GEM_HOME" \ |
| 164 | + BUNDLE_SILENCE_ROOT_WARNING=1 \ |
| 165 | + BUNDLE_APP_CONFIG="$GEM_HOME" |
| 166 | +# path recommendation: https://github.com/bundler/bundler/pull/6469#issuecomment-383235438 |
| 167 | +ENV PATH $GEM_HOME/bin:$BUNDLE_PATH/gems/bin:$PATH |
| 168 | +# adjust permissions of a few directories for running "gem install" as an arbitrary user |
| 169 | +RUN mkdir -p "$GEM_HOME" && chmod 777 "$GEM_HOME" |
| 170 | +# (BUNDLE_PATH = GEM_HOME, no need to mkdir/chown both) |
0 commit comments