| Carry the worker's own image, rather than borrow one that had the parts 089e6f7 nandi 18d ago | 1 | # The remote executor's image. |
| 2 | # |
| 3 | # buck2 fetches its own toolchains — zig, rustc, the Rust standard library, the |
| 4 | # NDK — from the pins in scripts/*.dotslash, so almost nothing here has to be |
| 5 | # installed. Almost: a handful of `-sys` crates ask pkg-config where a system |
| 6 | # library is, and one of them then links against it. |
| 7 | # |
| 8 | # That is why this image exists rather than gcr.io/flame-public/rbe-ubuntu24-04, |
| 9 | # which carries neither. Without pkg-config, alsa-sys's build script panics |
| 10 | # before it can emit a single link directive; without libasound2-dev, the flags |
| 11 | # it emits name a library the linker cannot find. |
| 12 | # |
| 13 | # 24.04 for the same reason the public image was pinned to it: a build script is |
| 14 | # compiled here and *run* on the worker, and 22.04's glibc 2.35 is old enough to |
| 15 | # fail that before a crate is compiled. |
| 16 | FROM ubuntu:24.04 |
| 17 | |
| 18 | # ca-certificates because an action fetches over TLS, and python3 because the |
| 19 | # prelude's own Rust rules shell out to it — a dep-file pass runs on the worker, |
| 20 | # not here. The rest is the system half of what the graph's build scripts look |
| 21 | # for: alsa-sys asks pkg-config for libasound, and v4l2r runs bindgen over |
| 22 | # `linux/videodev2.h`, which needs libclang to parse it and the kernel's own |
| 23 | # headers to find it — and libc's own, since videodev2.h includes <sys/time.h>. A cargo build takes both from the justfile's environment, |
| 24 | # which names this machine's zig headers — nothing a remote action inherits, so |
| 25 | # the worker has to carry them. |
| 26 | # |
| 27 | # libclang1 and its builtin headers rather than libclang-dev, which drags the |
| 28 | # whole clang toolchain in and took the image from 130 MB to 731 MB. bindgen |
| 29 | # loads the library and reads those headers; it has no use for the compiler. |
| 30 | # |
| 31 | # Kept to what a build has actually asked for: an unused package here is an |
| 32 | # image every action pulls. |
| 33 | RUN apt-get update && apt-get install --no-install-recommends -y \ |
| 34 | ca-certificates \ |
| 35 | libasound2-dev \ |
| 36 | libc6-dev \ |
| 37 | libclang1-18 \ |
| 38 | libclang-common-18-dev \ |
| 39 | linux-libc-dev \ |
| 40 | pkg-config \ |
| 41 | python3 \ |
| 42 | && rm -rf /var/lib/apt/lists/* |