Update Ubuntu and other dependencies

We update our base image to Ubuntu 18.04, and update all of our
dependencies to the latest released versions. This includes:

- gcc-multilib-arm-linux-gnueabihf (latest distro version)
- mdbook 0.2.1 (0.2.3 is out, but there's no binary build)
- OpenSSL 1.1.1b
- libpq 11.2
This commit is contained in:
Eric Kidd 2019-04-18 09:44:12 -04:00
parent 8f3d28c26e
commit 388941cd8a
4 changed files with 38 additions and 20 deletions

View File

@ -1,6 +1,5 @@
# Use Debian 16.04 as the base for our Rust musl toolchain, because of # Use Ubuntu 18.04 LTS as our base image.
# https://github.com/rust-lang/rust/issues/34978 (as of Rust 1.11). FROM ubuntu:18.04
FROM ubuntu:16.04
# The Rust toolchain to use when building our image. Set by `hooks/build`. # The Rust toolchain to use when building our image. Set by `hooks/build`.
ARG TOOLCHAIN=stable ARG TOOLCHAIN=stable
@ -29,11 +28,11 @@ RUN apt-get update && \
pkgconf \ pkgconf \
sudo \ sudo \
xutils-dev \ xutils-dev \
gcc-4.7-multilib-arm-linux-gnueabihf \ gcc-multilib-arm-linux-gnueabihf \
&& \ && \
apt-get clean && rm -rf /var/lib/apt/lists/* && \ apt-get clean && rm -rf /var/lib/apt/lists/* && \
useradd rust --user-group --create-home --shell /bin/bash --groups sudo && \ useradd rust --user-group --create-home --shell /bin/bash --groups sudo && \
MDBOOK_VERSION=0.1.5 && \ MDBOOK_VERSION=0.2.1 && \
curl -LO https://github.com/rust-lang-nursery/mdBook/releases/download/v$MDBOOK_VERSION/mdbook-v$MDBOOK_VERSION-x86_64-unknown-linux-musl.tar.gz && \ curl -LO https://github.com/rust-lang-nursery/mdBook/releases/download/v$MDBOOK_VERSION/mdbook-v$MDBOOK_VERSION-x86_64-unknown-linux-musl.tar.gz && \
tar xf mdbook-v$MDBOOK_VERSION-x86_64-unknown-linux-musl.tar.gz && \ tar xf mdbook-v$MDBOOK_VERSION-x86_64-unknown-linux-musl.tar.gz && \
mv mdbook /usr/local/bin/ && \ mv mdbook /usr/local/bin/ && \
@ -74,30 +73,31 @@ RUN git config --global credential.https://github.com.helper ghtoken
# needed by the popular Rust `hyper` crate. # needed by the popular Rust `hyper` crate.
RUN echo "Building OpenSSL" && \ RUN echo "Building OpenSSL" && \
cd /tmp && \ cd /tmp && \
OPENSSL_VERSION=1.0.2o && \ OPENSSL_VERSION=1.1.1b && \
curl -LO "https://www.openssl.org/source/openssl-$OPENSSL_VERSION.tar.gz" && \ curl -LO "https://www.openssl.org/source/openssl-$OPENSSL_VERSION.tar.gz" && \
tar xvzf "openssl-$OPENSSL_VERSION.tar.gz" && cd "openssl-$OPENSSL_VERSION" && \ tar xvzf "openssl-$OPENSSL_VERSION.tar.gz" && cd "openssl-$OPENSSL_VERSION" && \
env CC=musl-gcc ./Configure no-shared no-zlib -fPIC --prefix=/usr/local/musl linux-x86_64 && \ env CC=musl-gcc ./Configure no-shared no-zlib no-async no-engine -fPIC --prefix=/usr/local/musl -DOPENSSL_NO_SECURE_MEMORY linux-x86_64 && \
env C_INCLUDE_PATH=/usr/local/musl/include/ make depend && \ env C_INCLUDE_PATH=/usr/local/musl/include/ make depend && \
make && sudo make install && \ make && sudo make install && \
\ rm -r /tmp/*
echo "Building zlib" && \
RUN echo "Building zlib" && \
cd /tmp && \ cd /tmp && \
ZLIB_VERSION=1.2.11 && \ ZLIB_VERSION=1.2.11 && \
curl -LO "http://zlib.net/zlib-$ZLIB_VERSION.tar.gz" && \ curl -LO "http://zlib.net/zlib-$ZLIB_VERSION.tar.gz" && \
tar xzf "zlib-$ZLIB_VERSION.tar.gz" && cd "zlib-$ZLIB_VERSION" && \ tar xzf "zlib-$ZLIB_VERSION.tar.gz" && cd "zlib-$ZLIB_VERSION" && \
CC=musl-gcc ./configure --static --prefix=/usr/local/musl && \ CC=musl-gcc ./configure --static --prefix=/usr/local/musl && \
make && sudo make install && \ make && sudo make install && \
\ rm -r /tmp/*
echo "Building libpq" && \
RUN echo "Building libpq" && \
cd /tmp && \ cd /tmp && \
POSTGRESQL_VERSION=9.6.8 && \ POSTGRESQL_VERSION=11.2 && \
curl -LO "https://ftp.postgresql.org/pub/source/v$POSTGRESQL_VERSION/postgresql-$POSTGRESQL_VERSION.tar.gz" && \ curl -LO "https://ftp.postgresql.org/pub/source/v$POSTGRESQL_VERSION/postgresql-$POSTGRESQL_VERSION.tar.gz" && \
tar xzf "postgresql-$POSTGRESQL_VERSION.tar.gz" && cd "postgresql-$POSTGRESQL_VERSION" && \ tar xzf "postgresql-$POSTGRESQL_VERSION.tar.gz" && cd "postgresql-$POSTGRESQL_VERSION" && \
CC=musl-gcc CPPFLAGS=-I/usr/local/musl/include LDFLAGS=-L/usr/local/musl/lib ./configure --with-openssl --without-readline --prefix=/usr/local/musl && \ CC=musl-gcc CPPFLAGS=-I/usr/local/musl/include LDFLAGS=-L/usr/local/musl/lib ./configure --with-openssl --without-readline --prefix=/usr/local/musl && \
cd src/interfaces/libpq && make all-static-lib && sudo make install-lib-static && \ cd src/interfaces/libpq && make all-static-lib && sudo make install-lib-static && \
cd ../../bin/pg_config && make && sudo make install && \ cd ../../bin/pg_config && make && sudo make install && \
\
rm -r /tmp/* rm -r /tmp/*
ENV OPENSSL_DIR=/usr/local/musl/ \ ENV OPENSSL_DIR=/usr/local/musl/ \

View File

@ -3,4 +3,4 @@
target = "x86_64-unknown-linux-musl" target = "x86_64-unknown-linux-musl"
[target.armv7-unknown-linux-musleabihf] [target.armv7-unknown-linux-musleabihf]
linker = "arm-linux-gnueabihf-gcc-4.7" linker = "arm-linux-gnueabihf-gcc"

View File

@ -3,12 +3,21 @@
# Abort if anything goes wrong. # Abort if anything goes wrong.
set -euo pipefail set -euo pipefail
# Always map the Docker tag `latest` to stable Rust. # Decide what Rust toolchain to use.
if [ "$DOCKER_TAG" == "latest" ]; then case "$DOCKER_TAG" in
TOOLCHAIN=stable # Always map the Docker tags `latest` and `experimental` to stable Rust.
else latest|experimental)
TOOLCHAIN="$DOCKER_TAG" TOOLCHAIN=stable
fi ;;
# Strip `experimental-` from other `experimental-*` tags.
experimental-*)
TOOLCHAIN="${DOCKER_TAG/experimental-/}"
;;
# Pass all our tags
*)
TOOLCHAIN="$DOCKER_TAG"
;;
esac
# Run the build. # Run the build.
docker build --build-arg TOOLCHAIN="$TOOLCHAIN" -t "$IMAGE_NAME" . docker build --build-arg TOOLCHAIN="$TOOLCHAIN" -t "$IMAGE_NAME" .

9
hooks/test Executable file
View File

@ -0,0 +1,9 @@
#!/bin/bash
# Abort if anything goes wrong.
set -euo pipefail
# Make sure we can build some of our more important test images.
for EXAMPLE in using-diesel; do
docker build -t rust-musl-builder-"$EXAMPLE" examples/"$EXAMPLE"
done