rig updates

This commit is contained in:
2026-09-16 09:31:13 -03:00
parent b9238040a6
commit fed5d92034
3 changed files with 53 additions and 18 deletions

View File

@@ -353,8 +353,8 @@ DEV_TOOLS="kind tilt ctlptl docker-compose"
# A tool already on PATH at its pinned version is left where it is. Without # A tool already on PATH at its pinned version is left where it is. Without
# this, install downloads a second copy into OUT_BIN and then reports the first # this, install downloads a second copy into OUT_BIN and then reports the first
# one as shadowed — noise, and wrong, when both are the same version. That is # one as shadowed — noise, and wrong, when both are the same version. That is
# the normal state of any machine someone set up by hand: the AWS Workspace # the normal state of any machine someone set up by hand, whatever directory
# keeps its toolchain in ~/wdir/bin, all five at exactly these pins. # they happened to choose.
pin_of() { pin_of() {
case "$1" in case "$1" in

View File

@@ -6,7 +6,7 @@ install first.
| file | does | full-rig equivalent | | file | does | full-rig equivalent |
| --- | --- | --- | | --- | --- | --- |
| `rigdeps.sh` | installs kind, kubectl, tilt, ctlptl and jq at rig's pins, checksum-verified, no sudo | `make deps` (`ctrl/deps.sh`) | | `rigdeps.sh` | installs kind, kubectl, tilt, ctlptl, jq and docker compose at rig's pins, checksum-verified, no sudo | `make deps` (`ctrl/deps.sh`) |
| `rigmini.sh` | reports how much memory the machine *advertises* and what caps it; `push` measures what it will actually *survive* | `make mem`, and the memory section of `make check` | | `rigmini.sh` | reports how much memory the machine *advertises* and what caps it; `push` measures what it will actually *survive* | `make mem`, and the memory section of `make check` |
**These are transitional.** Where the full rig is installed, use its own **These are transitional.** Where the full rig is installed, use its own
@@ -26,6 +26,12 @@ it. `status` reads the caps; `push` allocates until something stops it.
## Use ## Use
**These two files are the whole setup.** No folder to create, no PATH to edit by
hand, nothing else to download first. The toolchain goes into `~/.local/bin`,
which Ubuntu already puts on PATH at login once the directory exists — so a new
shell after `install` is all it takes. If it is not on PATH, `install` says so
and prints the one line to add.
```bash ```bash
bash rigdeps.sh detect # report, change nothing bash rigdeps.sh detect # report, change nothing
bash rigdeps.sh install dev # install into ~/.local/bin bash rigdeps.sh install dev # install into ~/.local/bin
@@ -33,5 +39,17 @@ bash rigmini.sh status # advertised memory and caps; safe
bash rigmini.sh push # allocates until it stops — not on a machine you need bash rigmini.sh push # allocates until it stops — not on a machine you need
``` ```
If an earlier setup already put these tools in some other directory on PATH,
remove that directory and the line that added it — do not rely on `install` to
notice. It only reports shadowing once `~/.local/bin` is itself on PATH, which on
a fresh machine it is not until the next login. After a new shell, check which
copy wins:
```bash
command -v kind kubectl tilt # each should be ~/.local/bin/...
```
One toolchain, in the one place everyone else will also look.
`rigmini.sh push` deliberately consumes memory. Run `status` first, and only run `rigmini.sh push` deliberately consumes memory. Run `status` first, and only run
`push` somewhere it is acceptable for other processes to be squeezed. `push` somewhere it is acceptable for other processes to be squeezed.

View File

@@ -469,19 +469,25 @@ verify_tools() {
for b in $(tier_tools "$tier"); do for b in $(tier_tools "$tier"); do
bin="$OUT_BIN/$b" bin="$OUT_BIN/$b"
if [ ! -x "$bin" ]; then if [ ! -x "$bin" ]; then
printf ' %-8s not installed\n' "$b" printf ' %-14s not installed\n' "$b"
continue continue
fi fi
# Not piped into `head`. With `pipefail` set, a tool that prints more
# than one line gets SIGPIPE when head closes the pipe, and the
# pipeline reports 141 — so a working kubectl was announced as "does
# not run here", with its own correct version string as the evidence.
# Take the first line afterwards, from the string.
rc=0 rc=0
case "$b" in case "$b" in
kubectl) out=$("$bin" version --client 2>&1 | head -1) || rc=$? ;; kubectl) out=$("$bin" version --client 2>&1) || rc=$? ;;
jq) out=$("$bin" --version 2>&1 | head -1) || rc=$? ;; jq) out=$("$bin" --version 2>&1) || rc=$? ;;
*) out=$("$bin" version 2>&1 | head -1) || rc=$? ;; *) out=$("$bin" version 2>&1) || rc=$? ;;
esac esac
out=${out%%$'\n'*}
if [ "$rc" -eq 0 ]; then if [ "$rc" -eq 0 ]; then
printf ' %-8s %s\n' "$b" "$out" printf ' %-14s %s\n' "$b" "$out"
else else
printf ' ! %-6s does not run here: %s\n' "$b" "$out" printf ' ! %-12s does not run here: %s\n' "$b" "$out"
broke=1 broke=1
fi fi
done done
@@ -502,7 +508,7 @@ verify_tools() {
# unrelated work — kubectl more than one minor away from its cluster is the # unrelated work — kubectl more than one minor away from its cluster is the
# common one. Say so; never decide it. # common one. Say so; never decide it.
warn_shadowing() { warn_shadowing() {
local b existing shadowed="" tier="${1:-dev}" local b existing shadowed="" paths="" tier="${1:-dev}"
case ":${PATH}:" in case ":${PATH}:" in
*":$OUT_BIN:"*) ;; *":$OUT_BIN:"*) ;;
*) return 0 ;; # not on PATH, so nothing is being shadowed yet *) return 0 ;; # not on PATH, so nothing is being shadowed yet
@@ -513,7 +519,10 @@ warn_shadowing() {
command -v "$b" 2>/dev/null || true) command -v "$b" 2>/dev/null || true)
[ -n "$existing" ] || continue [ -n "$existing" ] || continue
[ "$existing" = "$OUT_BIN/$b" ] && continue [ "$existing" = "$OUT_BIN/$b" ] && continue
shadowed+=" $b $existing"$'\n' shadowed+=$(printf ' %-14s %s' "$b" "$existing")$'\n'
# Only the shadowing copies are the user's to remove. Listing the whole
# tier would delete tools that shadow nothing and are the only copy.
paths+="$OUT_BIN/$b "
done done
[ -n "$shadowed" ] || return 0 [ -n "$shadowed" ] || return 0
@@ -521,9 +530,10 @@ warn_shadowing() {
echo " ! these were already installed elsewhere and are now shadowed:" echo " ! these were already installed elsewhere and are now shadowed:"
printf '%s' "$shadowed" printf '%s' "$shadowed"
MANUAL+=("Decide which toolchain wins. To keep the previous one: MANUAL+=("Decide which toolchain wins. To keep the previous one:
rm -f $(for b in $(tier_tools "$tier"); do printf '%s ' "$OUT_BIN/$b"; done) rm -f ${paths% }
Or install somewhere private instead: Or keep both, and let the existing one win by putting $OUT_BIN
OUT_BIN=\$PWD/bin $0 install") last on PATH instead of first:
export PATH=\"\$PATH:$OUT_BIN\"")
return 0 return 0
} }
@@ -606,12 +616,19 @@ list() {
require_linux require_linux
case "${1:-install}" in # Read the command, THEN shift — and shift only if there is something there.
# A bare `shift` with no positional parameters returns 1, and under `set -e`
# that ended the script before a single line was printed: running this with no
# arguments at all, the documented default, did nothing and said nothing.
cmd="${1:-install}"
[ $# -gt 0 ] && shift
case "$cmd" in
detect) detect; report_manual ;; detect) detect; report_manual ;;
list) list ;; list) list ;;
verify) verify_tools "${2:-dev}" ;; verify) verify_tools "${1:-dev}" ;;
fetch) shift; require_amd64; pick_downloader; pick_sha; fetch "$@" ;; fetch) require_amd64; pick_downloader; pick_sha; fetch "$@" ;;
install) shift; require_amd64; pick_downloader; pick_sha; install "${1:-dev}" ;; install) require_amd64; pick_downloader; pick_sha; install "${1:-dev}" ;;
*) echo "usage: $0 [detect|list|install|fetch|verify]" >&2 *) echo "usage: $0 [detect|list|install|fetch|verify]" >&2
echo " install [core|dev] (default dev)" >&2 echo " install [core|dev] (default dev)" >&2
echo " fetch [core|dev] [--to DIR]" >&2 echo " fetch [core|dev] [--to DIR]" >&2