FROM debian:stretch as base USER root ARG OPENSSL_VER=1.1.1a # ARG POSTGRES_VER=11.1 RUN apt-get update && \ apt-get install -y \ musl-dev musl-tools file nano git zlib1g-dev cmake make g++ curl pkgconf \ linux-headers-amd64 ca-certificates xutils-dev libpq-dev libssl-dev \ --no-install-recommends && \ rm -rf /var/lib/apt/lists/* ENV MUSL_PREFIX=/musl RUN mkdir /workdir && mkdir $MUSL_PREFIX WORKDIR /libworkdir RUN ln -s /usr/include/x86_64-linux-gnu/asm /usr/include/x86_64-linux-musl/asm && \ ln -s /usr/include/asm-generic /usr/include/x86_64-linux-musl/asm-generic && \ ln -s /usr/include/linux /usr/include/x86_64-linux-musl/linux RUN curl -sL http://www.openssl.org/source/openssl-${OPENSSL_VER}.tar.gz | tar xz # RUN curl -sL https://ftp.postgresql.org/pub/source/v${POSTGRES_VER}/postgresql-${POSTGRES_VER}.tar.gz | tar xz RUN curl -sL https://zlib.net/zlib-1.2.11.tar.gz | tar xz RUN cd zlib-1.2.11 && \ CC="musl-gcc -fPIE -pie" LDFLAGS="-L/musl/lib/" CFLAGS="-I/musl/include" \ ./configure --prefix=$MUSL_PREFIX && \ make -j$(nproc) && \ make install RUN cd openssl-${OPENSSL_VER} && \ CC="musl-gcc -fPIE -pie" LDFLAGS="-L/musl/lib/" CFLAGS="-I/musl/include" \ ./Configure no-shared no-async --prefix=$MUSL_PREFIX --openssldir=$MUSL_PREFIX/ssl linux-x86_64 && \ make depend && \ make -j$(nproc) && \ make install RUN echo "/musl/lib" >> /etc/ld-musl-x86_64.path # RUN cd postgresql-${POSTGRES_VER} && \ # CC="musl-gcc -fPIE -pie" LDFLAGS="-L/musl/lib/" CFLAGS="-I/musl/include" \ # ./configure --prefix=$MUSL_PREFIX --host=x86_64-unknown-linux-musl --without-readline && \ # make -j$(nproc) && \ # make install FROM base as rust-base ARG RUST_VER=1.54.0 RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain ${RUST_VER} ENV PATH=/root/.cargo/bin:$PATH RUN cargo install cargo-tree RUN rustup target add x86_64-unknown-linux-musl ENV PATH=$MUSL_PREFIX/bin:$PATH \ PKG_CONFIG_ALLOW_CROSS=true \ PKG_CONFIG_ALL_STATIC=true \ PKG_CONFIG_PATH=$MUSL_PREFIX/lib/pkgconfig \ PQ_LIB_STATIC_X86_64_UNKNOWN_LINUX_MUSL=true \ PG_CONFIG_X86_64_UNKNOWN_LINUX_GNU=/usr/bin/pg_config \ OPENSSL_STATIC=true \ OPENSSL_DIR=$MUSL_PREFIX \ SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt \ SSL_CERT_DIR=/etc/ssl/certs \ LIBZ_SYS_STATIC=1 WORKDIR /workdir FROM rust-base as builder ADD . /workdir RUN PKG_CONFIG_ALLOW_CROSS=1 cargo build --release --target x86_64-unknown-linux-musl FROM alpine:3 COPY --from=builder /workdir/target/x86_64-unknown-linux-musl/release/kenv /usr/local/bin/ ENTRYPOINT ["kenv"]