gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1373Shell 116Rust 74Markdown 641915 Definiciones

⎇ 64005efcbd7f4aa6d6f2ab9d3a6fec8ec1bc30d4 recipes/steam-runtime-sniper.toml TOML · 90 líneas · 5.8 KB Historia crudo

takana etapa 5a: los comentarios de las 741 recetas e852f4849 · Sergio ·

1# steam-runtime-sniper — el runtime en el que Valve corre los juegos, SELLADO al store.
2# ADR 0015 (qorpa) D8: es la única imagen ajena de la terna que puede entrar acá, y esta receta
3# es lo que hace cierto ese renglón.
4#
5# ══ ESTO NO ES UNA RECETA NORMAL, Y LA DIFERENCIA IMPORTA ══════════════════════════════════════
6# No construye nada: **sella bytes ajenos ya compilados**. Por eso lleva `foreign = true`, que no
7# cambia el build en nada y sí cambia cómo la cuenta el grafo — pasa a clase `ajeno`, se resta del
8# denominador de las imágenes y NO engorda «cuántas recetas construimos». Sin esa marca, sellar un
9# prebuilt inflaría la cifra que todo el mundo lee como corpus, que es exactamente el riesgo que el
10# ADR 0015 se puso por escrito para no cometer.
11#
12# ══ POR QUÉ ESTA SÍ Y LAS OTRAS DOS NO ═════════════════════════════════════════════════════════
13# La invariante D1 dice que las imágenes ajenas NO entran al store, y el motivo es que un rootfs
14# mutable —Arch, Ubuntu, al que le instalás cosas— no reproduce: meterlo haría que el store mienta.
15# Sniper es distinto por una propiedad, no por simpatía: **no muta**. Nadie le instala nada adentro;
16# pressure-vessel lo monta de sólo lectura. Así que el mismo tarball pineado produce siempre el
17# mismo árbol, y sellarlo es una afirmación verdadera.
18#
19# ══ QUÉ SE GANA SELLÁNDOLO ═════════════════════════════════════════════════════════════════════
20# Cadena de custodia NUESTRA: el artefacto se replica con `takana mirror push`, su digest puede ir
21# al índice firmado (ADR 0014) y una instancia se arma sin depender de que la CDN de Valve siga
22# viva. Se consume con:
23#
24#     takana qorpa import --from-store <hash>        # ⇒ images/<sha256 de Valve>/{image.toml,rootfs}
25#
26# La identidad de la imagen sigue siendo **el sha256 del ARCHIVO de Valve**, no el ArtifactHash: es
27# lo que hace que dos máquinas coincidan aunque una lo traiga del store y la otra de upstream. Por
28# eso el `image.toml` viaja DENTRO del artefacto, escrito acá y no adivinado por el importador.
29#
30# ══ POR QUÉ EL ÁRBOL VA A /usr/share/qorpa Y NO A LA RAÍZ ══════════════════════════════════════
31# Un rootfs glibc entero volcado en `/` pisaría el sistema; y aunque la tentación sea dejarlo en la
32# raíz del artefacto para que `hydrate` lo escupa con la forma exacta de una imagen qorpa, un
33# artefacto tiene que ser inofensivo si alguien lo compone en un rootfs por error. Namespaceado no
34# colisiona con nada. **Esta receta NO va en ningún perfil de `targets.toml`**: no es parte de
35# ninguna imagen nuestra, es carga para qorpa.
36#
37# ══ LICENCIA ══════════════════════════════════════════════════════════════════════════════════
38# `LicenseRef-…-no-enumerable` a propósito: adentro hay cientos de paquetes Debian con sus términos
39# y no podemos enumerarlos. Poner "MIT" o dejarlo vacío sería peor — vacío se lee como «todavía no
40# la poblamos». SDD 20 ya dice que las ajenas no entran al reporte de licencias; esto lo hace
41# visible desde la receta.
42name    = "steam-runtime-sniper"
43version = "3.0.20260805.254768"
44license = "LicenseRef-qorpa-ajena-no-enumerable"
45foreign = true
46
47[source]
48# El snapshot NO es «el último»: es el que `latest-container-runtime-depot.txt` dice que despliega
49# el cliente de Steam. Pinear otro sería pinear algo que nadie corre. Digest verificado contra el
50# SHA256SUMS del propio snapshot el 2026-09-03 (ver docs/state/qorpa-imagenes.toml).
51tarball = "https://repo.steampowered.com/steamrt-images-sniper/snapshots/3.0.20260805.254768/com.valvesoftware.SteamRuntime.Platform-amd64%2Ci386-sniper-runtime.tar.gz"
52sha256  = "1a293c312215c59e4e5348ce210594cd7967d1a1fcaec6248a024e0878776f2b"
53# CERO, no el 1 de siempre: el archivo trae DOS entradas arriba —`files/` (el rootfs) y `metadata`
54# (la ficha de build de Valve)—. Con strip 1 el rootfs se fundiría con su hermano y el árbol
55# quedaría mal anclado, que es el fallo que no rompe al traerlo sino después, cuando la instancia
56# no encuentra su loader.
57strip_components = 0
58
59[build]
60compiler = "zig-cc"
61target   = "x86_64-linux-musl"
62link     = "dynamic"
63
64[build.phases]
65configure = "true"
66compile   = "true"
67# `cp -a` y no `cp -r`: hay que preservar symlinks, modos y tiempos o el rootfs deja de ser un
68# rootfs. `metadata` se deja fuera igual que hace `takana qorpa pull`, para que el árbol sellado y
69# el traído de upstream sean el MISMO árbol y no dos primos.
70install = '''
71set -e
72D=/out/usr/share/qorpa/images/steam-runtime-sniper
73mkdir -p "$D"
74cp -a files "$D/rootfs"
75test -x "$D/rootfs/usr/bin/env" || { echo "el árbol no parece un rootfs" >&2; exit 1; }
76cat > "$D/image.toml" <<'EOF'
77# Lo sella `recipes/steam-runtime-sniper.toml` (ADR 0015 D8) y lo consume `hammer qorpa import`.
78# La identidad de la imagen es el sha256 del ARCHIVO de Valve, no el ArtifactHash de este
79# artefacto: es lo que hace que coincida con la que otra máquina traiga de upstream.
80sha256 = "1a293c312215c59e4e5348ce210594cd7967d1a1fcaec6248a024e0878776f2b"
81url = "https://repo.steampowered.com/steamrt-images-sniper/snapshots/3.0.20260805.254768/com.valvesoftware.SteamRuntime.Platform-amd64%2Ci386-sniper-runtime.tar.gz"
82label = "sniper-platform-3.0.20260805.254768"
83archive_bytes = 302423522
84rootfs_subdir = "files"
85dropped_siblings = ["metadata"]
86EOF
87'''
88
89[deps]
90build = []