Skip to content

Commit 4ddb3a5

Browse files
committed
feat(justfile, Dockerfile): make apt cache sharing configurable
This is useful to avoid locking the cache, which is desirable if using buildah, since it has had bugs around this feature. The tradeoff is that you could potentially find locking issues if running multiple parallel apt commands (such as in CI).
1 parent 5ae7231 commit 4ddb3a5

File tree

2 files changed

+28
-18
lines changed

2 files changed

+28
-18
lines changed

Dockerfile

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -277,11 +277,13 @@ COPY --link --from=tools-script /bin/* /bin/
277277
## Base images
278278
##
279279

280+
ARG APT_CACHE_SHARING=",sharing=locked"
281+
280282
# A Go build environment.
281283
FROM docker.io/library/golang:${GO_TAG} as go
282284
RUN --mount=type=cache,from=apt-base,source=/etc/apt,target=/etc/apt,ro \
283-
--mount=type=cache,from=apt-base,source=/var/cache/apt,target=/var/cache/apt,sharing=locked \
284-
--mount=type=cache,from=apt-base,source=/var/lib/apt/lists,target=/var/lib/apt/lists,sharing=locked \
285+
--mount=type=cache,from=apt-base,source=/var/cache/apt,target=/var/cache/apt${APT_CACHE_SHARING} \
286+
--mount=type=cache,from=apt-base,source=/var/lib/apt/lists,target=/var/lib/apt/lists${APT_CACHE_SHARING} \
285287
DEBIAN_FRONTEND=noninteractive apt-get install -y file jo jq
286288
COPY --link --from=tools-script /bin/* /usr/local/bin/
287289
COPY --link --from=tools-go /bin/* /usr/local/bin/
@@ -294,8 +296,8 @@ ENV PROTOC_NO_VENDOR=1 \
294296
# A Rust build environment.
295297
FROM docker.io/library/rust:${RUST_TAG}-slim-bookworm as rust
296298
RUN --mount=type=cache,from=apt-base,source=/etc/apt,target=/etc/apt,ro \
297-
--mount=type=cache,from=apt-base,source=/var/cache/apt,target=/var/cache/apt,sharing=locked \
298-
--mount=type=cache,from=apt-base,source=/var/lib/apt/lists,target=/var/lib/apt/lists,sharing=locked \
299+
--mount=type=cache,from=apt-base,source=/var/cache/apt,target=/var/cache/apt${APT_CACHE_SHARING} \
300+
--mount=type=cache,from=apt-base,source=/var/lib/apt/lists,target=/var/lib/apt/lists${APT_CACHE_SHARING} \
299301
DEBIAN_FRONTEND=noninteractive apt-get install -y \
300302
cmake \
301303
curl \
@@ -307,8 +309,8 @@ RUN --mount=type=cache,from=apt-base,source=/etc/apt,target=/etc/apt,ro \
307309
libssl-dev \
308310
pkg-config
309311
RUN --mount=type=cache,from=apt-llvm,source=/etc/apt,target=/etc/apt,ro \
310-
--mount=type=cache,from=apt-llvm,source=/var/cache/apt,target=/var/cache/apt,sharing=locked \
311-
--mount=type=cache,from=apt-llvm,source=/var/lib/apt/lists,target=/var/lib/apt/lists,sharing=locked \
312+
--mount=type=cache,from=apt-llvm,source=/var/cache/apt,target=/var/cache/apt${APT_CACHE_SHARING} \
313+
--mount=type=cache,from=apt-llvm,source=/var/lib/apt/lists,target=/var/lib/apt/lists${APT_CACHE_SHARING} \
312314
DEBIAN_FRONTEND=noninteractive apt-get install -y clang-19 llvm-19
313315
RUN rustup component add clippy rustfmt
314316
COPY --link --from=tools-lint /bin/checksec /usr/local/bin/
@@ -332,8 +334,8 @@ RUN rustup target add \
332334
aarch64-unknown-linux-musl \
333335
x86_64-unknown-linux-musl
334336
RUN --mount=type=cache,from=apt-base,source=/etc/apt,target=/etc/apt,ro \
335-
--mount=type=cache,from=apt-base,source=/var/cache/apt,target=/var/cache/apt,sharing=locked \
336-
--mount=type=cache,from=apt-base,source=/var/lib/apt/lists,target=/var/lib/apt/lists,sharing=locked \
337+
--mount=type=cache,from=apt-base,source=/var/cache/apt,target=/var/cache/apt${APT_CACHE_SHARING} \
338+
--mount=type=cache,from=apt-base,source=/var/lib/apt/lists,target=/var/lib/apt/lists${APT_CACHE_SHARING} \
337339
DEBIAN_FRONTEND=noninteractive apt-get install -y \
338340
binutils-aarch64-linux-gnu \
339341
g++-aarch64-linux-gnu \
@@ -346,8 +348,8 @@ RUN --mount=type=cache,from=apt-base,source=/etc/apt,target=/etc/apt,ro \
346348

347349
FROM docker.io/library/debian:bookworm as devcontainer
348350
RUN --mount=type=cache,from=apt-base,source=/etc/apt,target=/etc/apt,ro \
349-
--mount=type=cache,from=apt-base,source=/var/cache/apt,target=/var/cache/apt,sharing=locked \
350-
--mount=type=cache,from=apt-base,source=/var/lib/apt/lists,target=/var/lib/apt/lists,sharing=locked \
351+
--mount=type=cache,from=apt-base,source=/var/cache/apt,target=/var/cache/apt${APT_CACHE_SHARING} \
352+
--mount=type=cache,from=apt-base,source=/var/lib/apt/lists,target=/var/lib/apt/lists${APT_CACHE_SHARING} \
351353
DEBIAN_FRONTEND=noninteractive apt-get install -y \
352354
cmake \
353355
curl \
@@ -384,13 +386,13 @@ RUN groupadd --gid=1000 code \
384386

385387
# git v2.34+ has new subcommands and supports code signing via SSH.
386388
RUN --mount=type=cache,from=apt-base,source=/etc/apt,target=/etc/apt,ro \
387-
--mount=type=cache,from=apt-base,source=/var/cache/apt,target=/var/cache/apt,sharing=locked \
388-
--mount=type=cache,from=apt-base,source=/var/lib/apt/lists,target=/var/lib/apt/lists,sharing=locked \
389+
--mount=type=cache,from=apt-base,source=/var/cache/apt,target=/var/cache/apt${APT_CACHE_SHARING} \
390+
--mount=type=cache,from=apt-base,source=/var/lib/apt/lists,target=/var/lib/apt/lists${APT_CACHE_SHARING} \
389391
DEBIAN_FRONTEND=noninteractive apt-get install -y -t bookworm-backports git
390392

391393
RUN --mount=type=cache,from=apt-llvm,source=/etc/apt,target=/etc/apt,ro \
392-
--mount=type=cache,from=apt-llvm,source=/var/cache/apt,target=/var/cache/apt,sharing=locked \
393-
--mount=type=cache,from=apt-llvm,source=/var/lib/apt/lists,target=/var/lib/apt/lists,sharing=locked \
394+
--mount=type=cache,from=apt-llvm,source=/var/cache/apt,target=/var/cache/apt${APT_CACHE_SHARING} \
395+
--mount=type=cache,from=apt-llvm,source=/var/lib/apt/lists,target=/var/lib/apt/lists${APT_CACHE_SHARING} \
394396
DEBIAN_FRONTEND=noninteractive apt-get install -y clang-19 llvm-19
395397
ENV CC=clang-19 \
396398
CXX=clang++-19
@@ -408,16 +410,16 @@ RUN --mount=type=cache,id=apt-docker,from=apt-base,source=/etc/apt,target=/etc/a
408410
#
409411
# TODO(ver): replace this with a devcontainer feature?
410412
RUN --mount=type=cache,id=apt-docker,from=apt-base,source=/etc/apt,target=/etc/apt \
411-
--mount=type=cache,id=apt-docker,from=apt-base,source=/var/cache/apt,target=/var/cache/apt,sharing=locked \
412-
--mount=type=cache,id=apt-docker,from=apt-base,source=/var/lib/apt/lists,target=/var/lib/apt/lists,sharing=locked \
413+
--mount=type=cache,id=apt-docker,from=apt-base,source=/var/cache/apt,target=/var/cache/apt${APT_CACHE_SHARING} \
414+
--mount=type=cache,id=apt-docker,from=apt-base,source=/var/lib/apt/lists,target=/var/lib/apt/lists${APT_CACHE_SHARING} \
413415
--mount=type=bind,from=tools,source=/bin/scurl,target=/usr/local/bin/scurl \
414416
scurl https://raw.githubusercontent.com/microsoft/vscode-dev-containers/main/script-library/docker-debian.sh | bash -s
415417
ENV DOCKER_BUILDKIT=1
416418

417419
ARG MARKDOWNLINT_VERSION=0.15.0
418420
RUN --mount=type=cache,from=apt-node,source=/etc/apt,target=/etc/apt,ro \
419-
--mount=type=cache,from=apt-node,source=/var/cache/apt,target=/var/cache/apt,sharing=locked \
420-
--mount=type=cache,from=apt-node,source=/var/lib/apt/lists,target=/var/lib/apt/lists,sharing=locked \
421+
--mount=type=cache,from=apt-node,source=/var/cache/apt,target=/var/cache/apt${APT_CACHE_SHARING} \
422+
--mount=type=cache,from=apt-node,source=/var/lib/apt/lists,target=/var/lib/apt/lists${APT_CACHE_SHARING} \
421423
DEBIAN_FRONTEND=noninteractive apt-get install -y nodejs
422424
RUN npm install "markdownlint-cli2@${MARKDOWNLINT_VERSION}" --global
423425

justfile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,13 @@ _pull_policy := if _docker_bin_name == 'podman' {
3333
''
3434
}
3535

36+
# apt cache sharing mode hits a bug in buildah
37+
_apt_cache_sharing := if _docker_bin_name == 'podman' {
38+
''
39+
} else {
40+
',sharing=locked'
41+
}
42+
3643
targets := 'go rust rust-musl tools devcontainer'
3744

3845
load := 'false'
@@ -163,6 +170,7 @@ _build *args='':
163170
--progress='{{ DOCKER_PROGRESS }}' \
164171
{{ output }} \
165172
{{ if docker_arch != '' { '--platform=' + docker_arch } else { '' } }} \
173+
--build-arg APT_CACHE_SHARING={{ _apt_cache_sharing }} \
166174
{{ args }}"
167175

168176
echo "{{ style('error') }}$cmd{{ NORMAL }}"

0 commit comments

Comments
 (0)