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