diff --git a/Dockerfile.astera b/Dockerfile.astera index 4ff01a8a..3bfb7ba2 100644 --- a/Dockerfile.astera +++ b/Dockerfile.astera @@ -26,6 +26,35 @@ ENV DEBIAN_FRONTEND=noninteractive \ SHELL=/bin/bash \ SAMPLEWORKS_PIXI_PROJECT_DIR=/app \ SAMPLEWORKS_REQUIRE_PREBUILT_PIXI=1 \ + SAMPLEWORKS_SKIP_ENV_PREPARE=1 \ + EXT_REPLAY_BASE_IMAGE=${PIXI_WITH_CHECKPOINTS_IMAGE} \ + PIXI_CACHE_DIR=/var/cache/pixi + +# Keep pixi's cache off the NFS-backed home volume. +# +# ACTL mounts $HOME from an nfs-shared PVC whose export squashes every write to +# nobody (65534), while the workspace container runs as root. pixi puts uv's git +# cache under its own cache dir, so a `git+https://` dependency gets cloned into +# a tree root does not own, and git refuses to touch it: +# +# fatal: detected dubious ownership in repository at +# '/home/dev/.cache/rattler/cache/uv-cache/git-v0/db/' +# +# which surfaces as an unrelated-looking "failed to solve the pypi requirements" +# and blocks any environment with a git dependency (protpardelle, today). +# +# `git config --global --add safe.directory` is not a usable fix here: this +# image ships git 2.34.1, where only an exact path or the bare `*` is honoured — +# prefix globs are silently ignored (verified). The cache paths are +# content-hashed, so exact entries are whack-a-mole, and `*` would disable the +# ownership check on genuinely shared volumes like /mnt/diffuse-shared too. +# +# pixi already redirects its repodata and pypi-mapping caches off network +# filesystems on its own; it just does not do the same for the uv cache. Setting +# the cache root to container-local disk covers all of them. The trade-off is +# that the download cache no longer survives a pod restart — environments +# themselves live in the synced checkout and are unaffected. +RUN mkdir -p /var/cache/pixi SAMPLEWORKS_SKIP_ENV_PREPARE=1 RUN apt-get update && apt-get install -y --no-install-recommends \