diff --git a/dev/docker/Dockerfile b/dev/docker/Dockerfile index b7e6755aebee1f7967ead750a1ba7d3d8b5e3211..23e42d554a6b7d84a76ab1af598b25620b358313 100644 --- a/dev/docker/Dockerfile +++ b/dev/docker/Dockerfile @@ -1,13 +1,19 @@ -FROM alpine:latest - -RUN apk add --no-cache gcc git make musl-dev go openssl curl - -# Configure Go -ENV GOROOT /usr/lib/go -ENV GOPATH /go -ENV PATH /go/bin:$PATH +# builder stage +FROM golang as builder + +# define architectures which could be run rdpgw +RUN dpkgArch="$(dpkg --print-architecture)"; \ + case "$dpkgArch" in \ + arm) ARCH='arm' ;; \ + arm64) ARCH='arm64' ;; \ + amd64) ARCH='amd64' ;; \ + 386) ARCH='386' ;; \ + *) echo >&2 "error: unsupported architecture: $apkArch"; exit 1 ;; \ + esac -RUN random=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) && \ +# certificate +RUN mkdir -p /opt/rdpgw && cd /opt/rdpgw && \ + random=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) && \ openssl genrsa -des3 -passout pass:$random -out server.pass.key 2048 && \ openssl rsa -passin pass:$random -in server.pass.key -out key.pem && \ rm server.pass.key && \ @@ -15,33 +21,27 @@ RUN random=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) && -subj "/C=US/ST=VA/L=SomeCity/O=MyCompany/OU=MyDivision/CN=localhost" && \ openssl x509 -req -days 365 -in server.csr -signkey key.pem -out server.pem -RUN apkArch="$(apk --print-arch)"; \ - case "$apkArch" in \ - armhf) ARCH='arm' ;; \ - aarch64) ARCH='arm64' ;; \ - x86_64) ARCH='amd64' ;; \ - x86) ARCH='386' ;; \ - *) echo >&2 "error: unsupported architecture: $apkArch"; exit 1 ;; \ - esac && \ - git clone https://github.com/bolkedebruin/rdpgw.git && \ - cd rdpgw && \ - go mod tidy && \ - go build -trimpath -tags '' -ldflags '' -o '/rdpgw/bin/rdpgw' ./cmd/rdpgw && \ - mkdir -p /opt/rdpgw && \ - mv /rdpgw/bin/rdpgw /opt/rdpgw/rdpgw && \ - rm -rf /root/go && \ - rm -rf /rdpgw - -RUN rm -rf /go +# add user +RUN adduser --disabled-password --gecos "" --home /opt/rdpgw --uid 1001 rdgw +# build rdwgw and set rights +RUN git clone https://github.com/bolkedebruin/rdpgw.git /app && \ + cd /app && \ + go mod tidy && \ + CGO_ENABLED=0 GOOS=linux go build -trimpath -tags '' -ldflags '' -o '/opt/rdpgw/rdpgw' ./cmd/rdpgw && \ + chmod +x /opt/rdpgw/rdpgw && \ + chown -R 1001 /opt/rdpgw + +# FROM scratch +# FROM scratch is missing /bin/sh which is sadly needed to start the container. +FROM busybox +# Copy stuff from builder +COPY --from=builder /opt/rdpgw /opt/rdpgw +COPY --from=builder /etc/passwd /etc/passwd +# COPY --from=builder /bin/sh /bin/sh +# COPY rdpgw.yaml COPY rdpgw.yaml /opt/rdpgw/rdpgw.yaml -RUN adduser --disabled-password --gecos "" -h /opt/rdpgw -u 1001 rdgw && \ - mv server.pem /opt/rdpgw/server.pem && \ - mv key.pem /opt/rdpgw/key.pem && \ - chown -R 1001 /opt/rdpgw && \ - chmod +x /opt/rdpgw/rdpgw - USER 1001 WORKDIR /opt/rdpgw -ENTRYPOINT /opt/rdpgw/rdpgw +ENTRYPOINT /opt/rdpgw/rdpgw \ No newline at end of file