max / alloy
- Co-Authored-By
- Claude Opus 5 (1M context) <noreply@anthropic.com>
2 files changed,
+30 insertions,
-0 deletions
| @@ -378,6 +378,35 @@ | |||
| 378 | 378 | # perl helpers, which is the difference between a git that works | |
| 379 | 379 | # and a git that works when you ask it a question. | |
| 380 | 380 | git \ | |
| 381 | + | # Rust toolchain. The console is built in the rust-build stage above | |
| 382 | + | # and only its binary is copied into this image, so until now an | |
| 383 | + | # Alloy machine could run Rust programs and not build one. That is | |
| 384 | + | # the same gap git had and the same audience argument closes it. | |
| 385 | + | # | |
| 386 | + | # It is also a hard requirement for the build-host role. sandod | |
| 387 | + | # shells out to `cargo build --release` in its own workdir and | |
| 388 | + | # refuses to compile anywhere but its configured build host, so a | |
| 389 | + | # Sando host with no cargo is not a Sando host. Naming that here | |
| 390 | + | # because it is the reason the line landed now rather than later. | |
| 391 | + | # | |
| 392 | + | # No separate linker line: `rust` pulls gcc, binutils and | |
| 393 | + | # glibc-devel, so cc arrives with it. Fedora 43 carries 1.96.1, | |
| 394 | + | # ahead of the workspace's 1.86 floor and current enough for | |
| 395 | + | # crates tracking recent stable. | |
| 396 | + | # | |
| 397 | + | # The cost is 610 MiB installed across 16 packages, most of it | |
| 398 | + | # rust-std-static (164 MiB) and llvm-libs (139 MiB). That is an | |
| 399 | + | # order of magnitude above the hardware-health group above and by | |
| 400 | + | # a distance the largest thing in this block, so it is stated | |
| 401 | + | # rather than absorbed. Per-image language selection at mint time | |
| 402 | + | # is the way this stops being one number for everyone; see | |
| 403 | + | # docs/IMAGE.md. | |
| 404 | + | # | |
| 405 | + | # rustup is deliberately not here. It installs into $HOME, needs | |
| 406 | + | # nothing from the image, and stays the answer for a pinned or | |
| 407 | + | # nightly toolchain. Nor are project-specific -devel packages: | |
| 408 | + | # those belong to whatever is being built, not to the OS. | |
| 409 | + | rust cargo \ | |
| 381 | 410 | # xdg-user-dirs. Without it a new account gets a bare home and no | |
| 382 | 411 | # ~/Documents, ~/Downloads or ~/Pictures, which is what the GTK | |
| 383 | 412 | # file-chooser portal and yazi both open into. |
| @@ -104,5 +104,6 @@ | |||
| 104 | 104 | - [ ] `bootc-image-builder` for ISO generation. First-time-user path is `bootc install` from a live environment; the ISO is what makes that a smooth experience. Verify the ISO builder handles Alloy's specific package set. | |
| 105 | 105 | - [x] **Containerfile stage policy: multi-stage only where a non-Fedora Rust binary needs to ship.** Currently that is one stage, `rust-build`, and it builds the Alloy console. Everything else comes from RPM in the runtime stage. Do not add stages preemptively. Corrected 2026-07-19: this line named wl-screenrec as the stage's occupant, which was stale — wl-screenrec was deferred rather than shipped, so for a while there was no stage at all. The console is the case the policy was written for and did not anticipate: it is the one binary Alloy authors, so no repo can ever carry it, and a distro whose headline surface is its console cannot ship without one. It is built on `fedora:43` rather than on the dev box so the toolchain and glibc match the runtime stage. | |
| 106 | 106 | - [ ] **An always-on x86_64 builder.** The blocker under "CI" above, and the thing the signing key and the weekly base-update rebuild both wait on. astra is always-on and aarch64; fw13 is x86_64 and sleeps. | |
| 107 | + | - [ ] **Language toolchains selected per image rather than for everyone.** The Rust toolchain went into the base on 2026-07-26 because Alloy's audience is developers and because the build-host role needs cargo present (sandod compiles in its own workdir and will not run without it). It costs 610 MiB installed, which is the largest single line in the package block and roughly twelve times the hardware-health group. One number for every install is the wrong shape as soon as a second language is wanted: a Go or Python or C toolchain each carries a comparable bill, and no machine wants all of them. Minting is where this resolves, since a per-machine image is already being produced with a baked key, so the toolchain set is another mint-time input rather than a new mechanism. Open: whether the base keeps Rust as the default when selection exists, or drops to none and makes every toolchain a choice. See [[alloy-image-minting]]. | |
| 107 | 108 | - [x] Source hosting: **`makenot.work/git/max/alloy`**, our own platform. The old answer here was the sr.ht account `~maxmj` for v0 with LLC-owned `~makecreative` as the long-term target; sourcehut is now a backup remote and that migration question retires with it. | |
| 108 | 109 | - [x] **Publish `:latest`, `:<fedora-version>`, and `:<fedora-version>-YYYYMMDD` tags.** Currently `:latest`, `:43`, `:43-YYYYMMDD`. `:latest` for casual users, the bare version for version-pinned users, the dated tag for reproducibility. Wired up when distribution starts. |