tawasuyu

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 1572Shell 203Rust 109Markdown 993728 Definiciones

⎇ f32b28c63e0f0b95a21cb1a7bdebbfea84712a45 recipes/shuma-gateway.toml TOML · 55 líneas · 4.2 KB Historia crudo

CUTOVER de `sergio.gioser.net`: el último vhost sale de gioser — ya no queda ninguno f32b28c63 · Sergio ·

1# shuma-gateway — el puente HTTP/JSON + WebSocket de shuma: lo que `sergio.gioser.net/shuma/*`
2# atraviesa para hablarle al daemon. Traduce JSON ↔ postcard y empalma WS ↔ ExecPty.
3#
4# ── POR QUÉ EXISTE ESTA RECETA (2026-09-16) ─────────────────────────────────────────────────────
5# Es el ÚLTIMO vhost atado a gioser (SDD 28 §6.34): de los 29 dominios del Caddyfile, `sergio` es el
6# único que todavía resuelve a la máquina que se borra, y lo que lo ata no es el sitio —su frontend
7# ya está copiado en la caja— sino esta consola. El binario que corre allá hoy es **glibc, puesto a
8# mano, y su inodo está BORRADO del disco**: vive sólo mientras el proceso no muera. Un servicio así
9# no se muda copiándolo; se DECLARA y se reconstruye, que es lo que decidió el usuario cuando se le
10# ofrecieron las tres salidas (jaula glibc / construirlo desde tawasuyu / que muera).
11#
12# ── EL PIN ──────────────────────────────────────────────────────────────────────────────────────
13# `23a292863` es el MISMO commit que ya usa `puriy-costura` (subido hoy). Compartir el pin no es
14# cosmético: el árbol de fuentes de una dep se comparte entre recetas (`work/sources/<dep>-<sha>`),
15# así que dos pines distintos del monorepo son dos árboles de 2,4 G vendoreados en vez de uno.
16name    = "shuma-gateway"
17version = "0.1.0"
18license = "MIT OR Apache-2.0"
19
20[source]
21repo   = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git"
22commit = "23a292863f53b355c5c02d6185904f2c33d8ab42"
23# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR
24# RUTA) y el `cargo vendor` de takana lo pisaría, con un error que habla de `taffy` y no de esto.
25# Ver [[takana-cargo-vendor-clobbers-project-vendor]] y el cabezal de `puriy-costura`.
26cargo_vendor_dir = ".hammer-cargo-vendor"
27
28[build]
29compiler = "zig-cc"
30target   = "x86_64-linux-musl"
31# Estático musl: lo arranca el init de la caja y no puede depender de encontrar un cargador. Es
32# exactamente lo que le falta hoy al binario de gioser, que es ELF dinámico contra glibc.
33link     = "static"
34flags    = ["-p", "shuma-gateway", "--bin", "shuma-gateway"]
35
36# ── EL SERVICIO (SDD 30) ────────────────────────────────────────────────────────────────────────
37# Fuera de `hash_inputs`: declarar esto NO re-hashea el gateway.
38#
39# La cuenta la declara `shuma-daemon` —es la misma— y por eso acá no va otro `[[user]]`: dos recetas
40# declarando la misma cuenta con distinto uid abortan la imagen a propósito (`takana users --merge`).
41#
42# ⚠ DOS GUARDAS, Y LAS DOS SALEN 78 DICIENDO EL ARREGLO:
43#   1. sin el usuario, esto correría de root — y es el puente HTTP hacia un demonio que abre shells;
44#   2. sin `gateway-token` no autentica a nadie. El fichero son 32 bytes que en gioser viven en
45#      `~/.config/shuma/gateway-token`; si se genera uno nuevo, los clientes ya emparejados dejan de
46#      entrar. Por eso la guarda no lo crea: lo EXIGE y nombra de dónde sale.
47[[service]]
48label      = "shuma-gateway"
49id         = "01M2EKDA00SH0MAGATEWAY4K21"
50exec       = "/bin/busybox"
51argv = ["sh", "-c", "/bin/grep -q '^shuma:' /etc/passwd || { echo 'shuma-gateway: falta el usuario `shuma` — lo declara recipes/shuma-daemon.toml' >&2; exit 78; }; test -s /var/lib/shuma/.config/shuma/gateway-token || { echo 'shuma-gateway: falta /var/lib/shuma/.config/shuma/gateway-token (32 B) — viene de ~/.config/shuma/gateway-token del origen; si generás uno nuevo, los clientes emparejados dejan de entrar' >&2; exit 78; }; cd /var/lib/shuma || exit 78; exec /usr/bin/setuidgid shuma /usr/bin/shuma-gateway"]
52envp       = [["PATH", "/usr/bin:/bin"], ["HOME", "/var/lib/shuma"], ["USER", "shuma"], ["XDG_RUNTIME_DIR", "/run/shuma"]]
53networking = "full"
54cgroup     = "arje.slice/shuma-gateway"
55restart    = { initial_ms = 1000, max_ms = 30000 }