@@ -2,27 +2,28 @@ FROM rust:slim AS rust-utils
2
2
# Install rust helper programs
3
3
# ENV CARGO_NET_GIT_FETCH_WITH_CLI=true
4
4
ENV CARGO_INSTALL_ROOT=/tmp/
5
- RUN cargo install exa bat ripgrep typos-cli watchexec-cli
5
+ RUN cargo install exa bat ripgrep typos-cli watchexec-cli && \
6
+ # Reduce image size.
7
+ rm -rf /usr/local/cargo/registry
6
8
7
9
FROM ubuntu:jammy AS go
8
10
9
- RUN apt-get update && apt-get install --yes curl gcc
10
11
# Install Go manually, so that we can control the version
11
12
ARG GO_VERSION=1.22.5
12
- RUN mkdir --parents /usr/local/go
13
13
14
14
# Boring Go is needed to build FIPS-compliant binaries.
15
15
RUN curl --silent --show-error --location \
16
16
"https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz" \
17
17
-o /usr/local/go.tar.gz
18
18
19
- RUN tar --extract --gzip --directory=/usr/local/go --file=/usr/local/go.tar.gz --strip-components=1
20
-
21
19
ENV PATH=$PATH:/usr/local/go/bin
22
-
23
- # Install Go utilities.
24
20
ARG GOPATH="/tmp/"
25
- RUN mkdir --parents"$GOPATH" && \
21
+ # Install Go utilities.
22
+ RUN apt-get update && \
23
+ apt-get install --yes curl gcc && \
24
+ mkdir --parents /usr/local/go && \
25
+ tar --extract --gzip --directory=/usr/local/go --file=/usr/local/go.tar.gz --strip-components=1 && \
26
+ mkdir --parents"$GOPATH" && \
26
27
# moq for Go tests.
27
28
go install github.com/matryer/moq@v0.2.3 && \
28
29
# swag for Swagger doc generation
@@ -73,34 +74,44 @@ RUN mkdir --parents "$GOPATH" && \
73
74
# yq v3 used in v1.
74
75
go install github.com/mikefarah/yq/v4@v4.30.6 && \
75
76
mv /tmp/bin/yq /tmp/bin/yq4 && \
76
- go install go.uber.org/mock/mockgen@v0.4.0
77
+ go install go.uber.org/mock/mockgen@v0.4.0 && \
78
+ # Reduce image size.
79
+ apt-get remove --yes curl gcc && \
80
+ apt-get autoremove --yes && \
81
+ apt-get clean && \
82
+ rm -rf /var/lib/apt/lists && \
83
+ rm -rf /usr/local/go && \
84
+ rm -rf /tmp/go/pkg && \
85
+ rm -rf /tmp/go/src
77
86
78
87
FROM gcr.io/coder-dev-1/alpine:3.18 as proto
79
88
WORKDIR /tmp
80
89
RUN apk add curl unzip
81
- RUN curl -L -o protoc.zip https://github.com/protocolbuffers/protobuf/releases/download/v23.3/protoc-23.3-linux-x86_64.zip
82
- RUN unzip protoc.zip
90
+ RUN curl -L -o protoc.zip https://github.com/protocolbuffers/protobuf/releases/download/v23.3/protoc-23.3-linux-x86_64.zip && \
91
+ unzip protoc.zip && \
92
+ rm protoc.zip
83
93
84
94
FROM ubuntu:jammy
85
95
86
96
SHELL ["/bin/bash" ,"-c" ]
87
97
98
+ # Install packages from apt repositories
99
+ ARG DEBIAN_FRONTEND="noninteractive"
100
+
88
101
# Updated certificates are necessary to use the teraswitch mirror.
89
102
# This must be ran before copying in configuration since the config replaces
90
103
# the default mirror with teraswitch.
91
104
RUN apt-get update && apt-get install --yes ca-certificates
92
105
93
106
COPY files /
107
+
94
108
# We used to copy /etc/sudoers.d/* in from files/ but this causes issues with
95
109
# permissions and layer caching. Instead, create the file directly.
96
110
RUN mkdir -p /etc/sudoers.d && \
97
111
echo'coder ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/nopasswd && \
98
112
chmod 750 /etc/sudoers.d/ && \
99
113
chmod 640 /etc/sudoers.d/nopasswd
100
114
101
- # Install packages from apt repositories
102
- ARG DEBIAN_FRONTEND="noninteractive"
103
-
104
115
RUN apt-get update --quiet && apt-get install --yes \
105
116
ansible \
106
117
apt-transport-https \
@@ -231,7 +242,9 @@ RUN systemctl disable \
231
242
# Configure systemd services for CVMs
232
243
RUN systemctl enable \
233
244
docker \
234
- ssh
245
+ ssh && \
246
+ # Workaround for envbuilder cache probing not working unless the filesystem is modified.
247
+ touch /tmp/.envbuilder-systemctl-enable-docker-ssh-workaround
235
248
236
249
# Install tools with published releases, where that is the
237
250
# preferred/recommended installation method.