SecureValueRecovery2/docker/Dockerfile

180 lines
6.0 KiB
Docker

# syntax=docker/dockerfile:1
# To build use:
# docker build -t oebuild .
FROM amd64/debian:buster@sha256:108052254277ea53cd807d2782ed3cbe4b9242256af5c7519c6e5692ae2b5d97 AS base
LABEL description="linux build environment for sgx."
COPY docker/apt.conf docker/sources.list /etc/apt/
RUN while true; do apt update && break; done && \
while true; do apt install -y \
gpg \
gnupg2 \
wget \
software-properties-common \
&& break; done
COPY docker/sgx.sources.list docker/ms.sources.list /etc/apt/sources.list.d/
# ms and intel repos keep old packages around,
# however if they remove some of these in the future
# binary packages can be retrieved from github releases
RUN wget -qO - https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | apt-key add - && \
wget -qO - https://packages.microsoft.com/keys/microsoft.asc | apt-key add - && \
while true; do apt update && break; done && \
while true; do apt install -y \
libsgx-ae-id-enclave=1.21.100.3-focal1 \
libsgx-ae-pce=2.24.100.3-focal1 \
libsgx-ae-qe3=1.21.100.3-focal1 \
libsgx-dcap-ql=1.21.100.3-focal1 \
libsgx-dcap-ql-dev=1.21.100.3-focal1 \
libsgx-enclave-common=2.24.100.3-focal1 \
libsgx-headers=2.24.100.3-focal1 \
libsgx-pce-logic=1.21.100.3-focal1 \
libsgx-qe3-logic=1.21.100.3-focal1 \
libsgx-urts=2.24.100.3-focal1 \
open-enclave=0.19.4 \
&& break; done
FROM --platform=linux/amd64 public.ecr.aws/amazonlinux/amazonlinux@sha256:94e7183b0739140dbd5b639fb7600f0a2299cec5df8780c26d9cb409da5315a9 AS nsmbuild
ENV HOST_MACHINE=x86_64
ENV RUST_VERSION=1.58.1
ENV RUSTUP_HOME=/usr/local/rustup \
CARGO_HOME=/usr/local/cargo \
PATH=/usr/local/cargo/bin:$PATH
RUN yum install -y gcc
RUN set -eux; \
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs/ | sh -s -- --default-toolchain ${RUST_VERSION} -y ; \
chmod -R a+w $RUSTUP_HOME $CARGO_HOME; \
rustup --version; \
cargo --version; \
rustc --version
COPY docker/aws-nitro-enclaves-nsm-api /build
COPY docker/aws-nitro.Cargo.lock /build/Cargo.lock
WORKDIR /build
RUN set -eux; \
(cd nsm-lib && cargo build --release --locked)
RUN ar mD target/release/libnsm.a $(ar t target/release/libnsm.a | env -u LANG LC_ALL=C sort)
FROM base AS builder
RUN mkdir /src && \
while true; do apt update && break; done && \
while true; do apt install -y \
clang-11 \
libssl-dev \
gdb \
libtool \
bison \
automake \
flex \
libcurl4 \
pkg-config \
make \
unzip \
git \
gcc \
libgtest-dev \
cmake \
valgrind \
&& break; done
ARG PROTOBUF_PLATFORM=linux-x86_64
ARG PROTOBUF_VERSION=21.8
ARG PROTOBUF_BASE=protoc-${PROTOBUF_VERSION}-${PROTOBUF_PLATFORM}
ADD --checksum=sha256:f90d0dd59065fef94374745627336d622702b67f0319f96cee894d41a974d47a https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOBUF_VERSION}/${PROTOBUF_BASE}.zip ./
RUN mkdir -p ${PROTOBUF_BASE} \
&& cd ${PROTOBUF_BASE} \
&& unzip -o ../${PROTOBUF_BASE}.zip \
&& cd .. \
&& mv ${PROTOBUF_BASE} /opt/protobuf
ARG GOLANG_PLATFORM=linux-amd64
ARG GOLANG_VERSION=1.21.3
ARG GOLANG_TAR_GZ=go${GOLANG_VERSION}.${GOLANG_PLATFORM}.tar.gz
ADD --checksum=sha256:1241381b2843fae5a9707eec1f8fb2ef94d827990582c7c7c32f5bdfbfd420c8 https://go.dev/dl/${GOLANG_TAR_GZ} ./
RUN tar xzf ${GOLANG_TAR_GZ} \
&& mv go /opt/
ENV PATH="/opt/openenclave/bin:/opt/go/bin:/opt/protobuf/bin:${PATH}"
ENV GOROOT="/opt/go"
ENV GOBIN="/opt/go/bin"
ENV PKG_CONFIG_PATH="/opt/openenclave/share/pkgconfig"
ARG PROTOC_GEN_GO_GITREV=6875c3d7242d1a3db910ce8a504f124cb840c23a
RUN go install google.golang.org/protobuf/cmd/protoc-gen-go@${PROTOC_GEN_GO_GITREV}
RUN echo "export PS1='buildenv: \w$ '" >> /etc/bash.bashrc
# Set this after `go install` so we don't use the same cache as root.
ENV GOPATH="/src/.gopath"
ENV GOCACHE="/src/.gocache"
WORKDIR /src
COPY --from=nsmbuild /build/target/release/libnsm.a /opt/nsm/libnsm.a
COPY --from=nsmbuild /build/target/release/nsm.h /opt/nsm/nsm.h
CMD ["/bin/bash"]
FROM base AS sgxrun
RUN apt-get update && apt-get install -y \
libsgx-dcap-default-qpl=1.21.100.3-focal1 \
libsgx-dcap-default-qpl-dev=1.21.100.3-focal1 \
libcurl4
COPY host/main /bin/svr2
COPY enclave/releases/sgx /enclaves
COPY host/cmd/control/control /bin/svr2control
ENTRYPOINT ["/bin/svr2"]
FROM --platform=linux/amd64 public.ecr.aws/amazonlinux/amazonlinux@sha256:94e7183b0739140dbd5b639fb7600f0a2299cec5df8780c26d9cb409da5315a9 AS nsmrun
ADD enclave/build/enclave.nsm /bin/svr2
ENTRYPOINT ["/bin/svr2", "--sock_type=af_vsock"]
FROM alpine@sha256:ff6bdca1701f3a8a67e328815ff2346b0e4067d32ec36b7992c1fdc001dc8517 AS sevrun
COPY enclave/build/enclave.sev /bin/svr2
EXPOSE 27427
ENTRYPOINT ["/bin/svr2", "--sock_type=af_inet"]
FROM --platform=linux/amd64 public.ecr.aws/amazonlinux/amazonlinux@sha256:94e7183b0739140dbd5b639fb7600f0a2299cec5df8780c26d9cb409da5315a9 AS nsmeif
RUN yum install -y \
aws-nitro-enclaves-cli.x86_64 \
aws-nitro-enclaves-cli-devel.x86_64 \
perl \
docker \
jq
ENV DOCKER_IMAGE svr2_nsmrun:latest
ENV OUTPUT_FILE /tmp/svr2.eif
ENV CHOWN_TO 0:0
COPY docker/build_eif.sh build_eif.sh
ENTRYPOINT ./build_eif.sh
FROM --platform=linux/amd64 public.ecr.aws/amazonlinux/amazonlinux@sha256:94e7183b0739140dbd5b639fb7600f0a2299cec5df8780c26d9cb409da5315a9 AS nsmhost
RUN yum install -y \
aws-nitro-enclaves-cli.x86_64 \
jq
ADD --checksum=sha256:cf3098950cb4d853ad95c0841f1f9c6d3dc102dccfcacd521d93925208b76ac8 https://www.openssl.org/source/openssl-1.1.1w.tar.gz /tmp/
RUN set -x && \
cd /tmp && \
yum install -y perl tar && \
tar xvzf openssl-1.1.1w.tar.gz && \
cd openssl-1.1.1w && \
./config && \
make -j16 >/dev/null && \
make install -j16 >/dev/null && \
echo /usr/local/lib64 | tee /etc/ld.so.conf.d/openssl.conf && \
ldconfig && \
yum remove -y perl tar && \
rm -rf /tmp/openssl*
COPY docker/nitro_start.sh nitro_start.sh
RUN mkdir /releases
COPY enclave/releases/nitro/* /releases
COPY host/main /bin/svr2
ENTRYPOINT ["./nitro_start.sh"]