From 0ab57ba0fba86298ada2eee39a25da4f32e3f070 Mon Sep 17 00:00:00 2001 From: Sergio Date: Wed, 16 Sep 2026 19:27:29 +0000 Subject: [PATCH] =?UTF-8?q?los=209=20daemons=20propios=20entran=20al=20cat?= =?UTF-8?q?=C3=A1logo,=20m=C3=A1s=20el=20askpass=20que=20shuma=20pidi?= =?UTF-8?q?=C3=B3=20al=20arrancar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Decisión del usuario: «viven todos los tawasuyu». Se construyen, no se copian — y no es preferencia: tres de ellos (`tejido`, `pacha-secretos` y el `shuma-gateway` de ayer) corren en gioser desde un INODO BORRADO, o sea que el binario ya no existe en disco y el proceso vive porque nadie lo mató. Las diez, todas contra el mismo pin `23a292863` que `shuma-*` y `puriy-costura` — el árbol de fuentes se comparte por `-`, así que un pin distinto es otro vendoreo de 2,4 G: willay-daemon · willay-crosscheck · tejido · tupu · matilda · thasnuna · sandokan-watch · pacha · pacha-secretos · shuma-askpass ⚠ CUATRO NO SE LLAMAN COMO SU PAQUETE, y por eso `-p` y `--bin` no son redundantes: `willay-crosscheck`←`willay-cruce`, `tupu`←`tupu-cli`, `thasnuna`←`thasnuna-daemon`, `sandokan-watch`←`sandokan-seguridad-core`, `pacha`←`pacha-cli`. Comprobado crate por crate en el commit pinneado: los diez son miembros del workspace, así que `-p` resuelve. Cada cabecera lleva lo que MIDIÓ el censo y que la receta sola no dice: `willay-crosscheck` escucha con `--label momento`, que nombra a la MÁQUINA y no puede viajar tal cual; `tupu`, `matilda` y `sandokan-watch` escriben los tres en `/var/lib/tupu`, así que necesitan el mismo dueño o dos fallan en silencio; `matilda` lee el access log de caddy; `tejido` y `thasnuna` tienen identidad y token que NO son reproducibles —generar otros es ser otra máquina para la flota, o un bot sin sus teléfonos—, así que su Card tendrá que exigirlos, no crearlos. `takana hash` da los diez sin construir. Van a `recipes/incoming/`, que es la cola que el worker muele; se promueven a canónicas cuando sellen, como shuma. Co-Authored-By: Claude Opus 5 (1M context) --- recipes/incoming/matilda.toml | 28 +++++++++++++++++++++++++ recipes/incoming/pacha-secretos.toml | 28 +++++++++++++++++++++++++ recipes/incoming/pacha.toml | 26 +++++++++++++++++++++++ recipes/incoming/sandokan-watch.toml | 26 +++++++++++++++++++++++ recipes/incoming/shuma-askpass.toml | 28 +++++++++++++++++++++++++ recipes/incoming/tejido.toml | 28 +++++++++++++++++++++++++ recipes/incoming/thasnuna.toml | 26 +++++++++++++++++++++++ recipes/incoming/tupu.toml | 28 +++++++++++++++++++++++++ recipes/incoming/willay-crosscheck.toml | 28 +++++++++++++++++++++++++ recipes/incoming/willay-daemon.toml | 26 +++++++++++++++++++++++ 10 files changed, 272 insertions(+) create mode 100644 recipes/incoming/matilda.toml create mode 100644 recipes/incoming/pacha-secretos.toml create mode 100644 recipes/incoming/pacha.toml create mode 100644 recipes/incoming/sandokan-watch.toml create mode 100644 recipes/incoming/shuma-askpass.toml create mode 100644 recipes/incoming/tejido.toml create mode 100644 recipes/incoming/thasnuna.toml create mode 100644 recipes/incoming/tupu.toml create mode 100644 recipes/incoming/willay-crosscheck.toml create mode 100644 recipes/incoming/willay-daemon.toml diff --git a/recipes/incoming/matilda.toml b/recipes/incoming/matilda.toml new file mode 100644 index 00000000..08290814 --- /dev/null +++ b/recipes/incoming/matilda.toml @@ -0,0 +1,28 @@ +# matilda — grabador: `matilda record --interval 60 --root /var/lib/tupu --access-log …`. +# +# ⚠ Lee el ACCESS LOG de caddy (`/var/log/caddy/requests.json`). En la caja nueva ese fichero +# existe sólo si el Caddyfile importa el snippet `acceso` — que sí lo hace. Si algún día deja +# de hacerlo, matilda no falla: graba vacío. +# El crate vive en `02_ruway/shuma/baremetal/matilda-app` y su paquete se llama `matilda`. +# +# Receta Cargo contra el monorepo de tawasuyu, pinneada al MISMO commit que `shuma-*` y +# `puriy-costura`: el árbol de fuentes se comparte por `-`, así que un pin distinto es otro +# vendoreo de 2,4 G. Estática musl con zig-cc — la caja la arranca el init y no puede depender de +# encontrar un cargador, que es justo lo que le falta al binario glibc de gioser. + +name = "matilda" +version = "0.1.0" +license = "MIT OR Apache-2.0" + +[source] +repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git" +commit = "23a292863f53b355c5c02d6185904f2c33d8ab42" +# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR +# RUTA); el `cargo vendor` de takana lo pisaría y el error habla de `taffy`, no de esto. +cargo_vendor_dir = ".hammer-cargo-vendor" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "static" +flags = ["-p", "matilda", "--bin", "matilda"] diff --git a/recipes/incoming/pacha-secretos.toml b/recipes/incoming/pacha-secretos.toml new file mode 100644 index 00000000..a64acea4 --- /dev/null +++ b/recipes/incoming/pacha-secretos.toml @@ -0,0 +1,28 @@ +# pacha-secretos — el guardián de secretos de pacha. +# +# ⚠ En gioser corre desde un INODO BORRADO: el binario ya no existe en disco y el proceso vive +# porque nadie lo mató (SDD 28 §6.34). Reconstruirlo es la única forma de tenerlo del otro lado. +# Y por lo que hace, su cuenta tiene que ser propia y sin privilegio: no comparte usuario con +# la telemetría. +# +# Receta Cargo contra el monorepo de tawasuyu, pinneada al MISMO commit que `shuma-*` y +# `puriy-costura`: el árbol de fuentes se comparte por `-`, así que un pin distinto es otro +# vendoreo de 2,4 G. Estática musl con zig-cc — la caja la arranca el init y no puede depender de +# encontrar un cargador, que es justo lo que le falta al binario glibc de gioser. + +name = "pacha-secretos" +version = "0.1.0" +license = "MIT OR Apache-2.0" + +[source] +repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git" +commit = "23a292863f53b355c5c02d6185904f2c33d8ab42" +# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR +# RUTA); el `cargo vendor` de takana lo pisaría y el error habla de `taffy`, no de esto. +cargo_vendor_dir = ".hammer-cargo-vendor" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "static" +flags = ["-p", "pacha-secretos", "--bin", "pacha-secretos"] diff --git a/recipes/incoming/pacha.toml b/recipes/incoming/pacha.toml new file mode 100644 index 00000000..714eb6cc --- /dev/null +++ b/recipes/incoming/pacha.toml @@ -0,0 +1,26 @@ +# pacha — `pacha daemon`, corriendo en gioser sin que nadie lo declare. +# +# El paquete es `pacha-cli` y el binario `pacha`. Sus reglas viven en `~/.config/pacha/reglas*.ron`: +# son DECISIONES del usuario, no defaults, y no las genera nada. +# +# Receta Cargo contra el monorepo de tawasuyu, pinneada al MISMO commit que `shuma-*` y +# `puriy-costura`: el árbol de fuentes se comparte por `-`, así que un pin distinto es otro +# vendoreo de 2,4 G. Estática musl con zig-cc — la caja la arranca el init y no puede depender de +# encontrar un cargador, que es justo lo que le falta al binario glibc de gioser. + +name = "pacha" +version = "0.1.0" +license = "MIT OR Apache-2.0" + +[source] +repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git" +commit = "23a292863f53b355c5c02d6185904f2c33d8ab42" +# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR +# RUTA); el `cargo vendor` de takana lo pisaría y el error habla de `taffy`, no de esto. +cargo_vendor_dir = ".hammer-cargo-vendor" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "static" +flags = ["-p", "pacha-cli", "--bin", "pacha"] diff --git a/recipes/incoming/sandokan-watch.toml b/recipes/incoming/sandokan-watch.toml new file mode 100644 index 00000000..971ca4fa --- /dev/null +++ b/recipes/incoming/sandokan-watch.toml @@ -0,0 +1,26 @@ +# sandokan-watch — vigía: `--every 60 --state /var/lib/sandokan-watch.json --record --root /var/lib/tupu`. +# +# El paquete es `sandokan-seguridad-core` y el binario `sandokan-watch`. +# ⚠ Escribe en `/var/lib/tupu`, el mismo directorio que `tupu` y `matilda` (ver esa receta). +# +# Receta Cargo contra el monorepo de tawasuyu, pinneada al MISMO commit que `shuma-*` y +# `puriy-costura`: el árbol de fuentes se comparte por `-`, así que un pin distinto es otro +# vendoreo de 2,4 G. Estática musl con zig-cc — la caja la arranca el init y no puede depender de +# encontrar un cargador, que es justo lo que le falta al binario glibc de gioser. + +name = "sandokan-watch" +version = "0.1.0" +license = "MIT OR Apache-2.0" + +[source] +repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git" +commit = "23a292863f53b355c5c02d6185904f2c33d8ab42" +# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR +# RUTA); el `cargo vendor` de takana lo pisaría y el error habla de `taffy`, no de esto. +cargo_vendor_dir = ".hammer-cargo-vendor" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "static" +flags = ["-p", "sandokan-seguridad-core", "--bin", "sandokan-watch"] diff --git a/recipes/incoming/shuma-askpass.toml b/recipes/incoming/shuma-askpass.toml new file mode 100644 index 00000000..4d785d6a --- /dev/null +++ b/recipes/incoming/shuma-askpass.toml @@ -0,0 +1,28 @@ +# shuma-askpass — el que pide la contraseña cuando una sesión de shuma corre `sudo` o `ssh`. +# +# Lo pidió el propio daemon al arrancar en la caja nueva (SDD 28 §6.37): +# askpass: no encontré `shuma-askpass` … — sudo/ssh pedirán la clave por el TTY +# No bloquea la consola; sin él, una sesión web que pide contraseña se queda esperando en un TTY +# que nadie está mirando. +# +# Receta Cargo contra el monorepo de tawasuyu, pinneada al MISMO commit que `shuma-*` y +# `puriy-costura`: el árbol de fuentes se comparte por `-`, así que un pin distinto es otro +# vendoreo de 2,4 G. Estática musl con zig-cc — la caja la arranca el init y no puede depender de +# encontrar un cargador, que es justo lo que le falta al binario glibc de gioser. + +name = "shuma-askpass" +version = "0.1.0" +license = "MIT OR Apache-2.0" + +[source] +repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git" +commit = "23a292863f53b355c5c02d6185904f2c33d8ab42" +# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR +# RUTA); el `cargo vendor` de takana lo pisaría y el error habla de `taffy`, no de esto. +cargo_vendor_dir = ".hammer-cargo-vendor" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "static" +flags = ["-p", "shuma-askpass", "--bin", "shuma-askpass"] diff --git a/recipes/incoming/tejido.toml b/recipes/incoming/tejido.toml new file mode 100644 index 00000000..56ecdd28 --- /dev/null +++ b/recipes/incoming/tejido.toml @@ -0,0 +1,28 @@ +# tejido — el relay de la flota: `tejido relay` en gioser, sirviendo :4102 y :33097. +# +# ⚠ Su IDENTIDAD no es reproducible: `~/.tejido/{persona,device,relay}.seed` + el padrón +# (`roster.postcard`). Generar semillas nuevas no es «reinstalar»: es ser OTRA máquina para el +# resto de la flota y perder los teléfonos dados de alta. El binario se construye; la identidad +# se MUDA. La Card tiene que exigirla, no crearla. +# +# Receta Cargo contra el monorepo de tawasuyu, pinneada al MISMO commit que `shuma-*` y +# `puriy-costura`: el árbol de fuentes se comparte por `-`, así que un pin distinto es otro +# vendoreo de 2,4 G. Estática musl con zig-cc — la caja la arranca el init y no puede depender de +# encontrar un cargador, que es justo lo que le falta al binario glibc de gioser. + +name = "tejido" +version = "0.1.0" +license = "MIT OR Apache-2.0" + +[source] +repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git" +commit = "23a292863f53b355c5c02d6185904f2c33d8ab42" +# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR +# RUTA); el `cargo vendor` de takana lo pisaría y el error habla de `taffy`, no de esto. +cargo_vendor_dir = ".hammer-cargo-vendor" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "static" +flags = ["-p", "tejido", "--bin", "tejido"] diff --git a/recipes/incoming/thasnuna.toml b/recipes/incoming/thasnuna.toml new file mode 100644 index 00000000..1b77e740 --- /dev/null +++ b/recipes/incoming/thasnuna.toml @@ -0,0 +1,26 @@ +# thasnuna — el bot: `thasnuna run --wait 25`. +# +# ⚠ Su config NO está en el repo a propósito (lo dice su INSTALAR.md): el token de telegram y el +# roster de teléfonos viven en `~/.config/thasnuna/`. Sin eso el binario está y el bot no existe. +# +# Receta Cargo contra el monorepo de tawasuyu, pinneada al MISMO commit que `shuma-*` y +# `puriy-costura`: el árbol de fuentes se comparte por `-`, así que un pin distinto es otro +# vendoreo de 2,4 G. Estática musl con zig-cc — la caja la arranca el init y no puede depender de +# encontrar un cargador, que es justo lo que le falta al binario glibc de gioser. + +name = "thasnuna" +version = "0.1.0" +license = "MIT OR Apache-2.0" + +[source] +repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git" +commit = "23a292863f53b355c5c02d6185904f2c33d8ab42" +# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR +# RUTA); el `cargo vendor` de takana lo pisaría y el error habla de `taffy`, no de esto. +cargo_vendor_dir = ".hammer-cargo-vendor" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "static" +flags = ["-p", "thasnuna-daemon", "--bin", "thasnuna"] diff --git a/recipes/incoming/tupu.toml b/recipes/incoming/tupu.toml new file mode 100644 index 00000000..cabab521 --- /dev/null +++ b/recipes/incoming/tupu.toml @@ -0,0 +1,28 @@ +# tupu — el colector de telemetría: `tupu collect --interval 10 --root /var/lib/tupu`. +# +# El paquete es `tupu-cli` y el binario `tupu`. +# ⚠ `/var/lib/tupu` es un directorio COMPARTIDO: escriben ahí `tupu`, `matilda` y +# `sandokan-watch`. Los tres necesitan el mismo dueño, o dos de ellos fallan al escribir y el +# tercero se lleva los datos incompletos sin que nada lo diga. +# +# Receta Cargo contra el monorepo de tawasuyu, pinneada al MISMO commit que `shuma-*` y +# `puriy-costura`: el árbol de fuentes se comparte por `-`, así que un pin distinto es otro +# vendoreo de 2,4 G. Estática musl con zig-cc — la caja la arranca el init y no puede depender de +# encontrar un cargador, que es justo lo que le falta al binario glibc de gioser. + +name = "tupu" +version = "0.1.0" +license = "MIT OR Apache-2.0" + +[source] +repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git" +commit = "23a292863f53b355c5c02d6185904f2c33d8ab42" +# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR +# RUTA); el `cargo vendor` de takana lo pisaría y el error habla de `taffy`, no de esto. +cargo_vendor_dir = ".hammer-cargo-vendor" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "static" +flags = ["-p", "tupu-cli", "--bin", "tupu"] diff --git a/recipes/incoming/willay-crosscheck.toml b/recipes/incoming/willay-crosscheck.toml new file mode 100644 index 00000000..3b7674f4 --- /dev/null +++ b/recipes/incoming/willay-crosscheck.toml @@ -0,0 +1,28 @@ +# willay-crosscheck — el cruce de willay, que ESCUCHA en la red. +# +# ⚠ El paquete NO se llama como el binario: el crate es `willay-cruce` y el ejecutable +# `willay-crosscheck`. Por eso van `-p` y `--bin`, que no son redundantes acá. +# Medido en gioser: `--listen /ip4/0.0.0.0/tcp/4103 --label momento`. La etiqueta nombra a la +# MÁQUINA, así que en la caja nueva no puede decir `momento` — se decide al escribir la Card. +# +# Receta Cargo contra el monorepo de tawasuyu, pinneada al MISMO commit que `shuma-*` y +# `puriy-costura`: el árbol de fuentes se comparte por `-`, así que un pin distinto es otro +# vendoreo de 2,4 G. Estática musl con zig-cc — la caja la arranca el init y no puede depender de +# encontrar un cargador, que es justo lo que le falta al binario glibc de gioser. + +name = "willay-crosscheck" +version = "0.1.0" +license = "MIT OR Apache-2.0" + +[source] +repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git" +commit = "23a292863f53b355c5c02d6185904f2c33d8ab42" +# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR +# RUTA); el `cargo vendor` de takana lo pisaría y el error habla de `taffy`, no de esto. +cargo_vendor_dir = ".hammer-cargo-vendor" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "static" +flags = ["-p", "willay-cruce", "--bin", "willay-crosscheck"] diff --git a/recipes/incoming/willay-daemon.toml b/recipes/incoming/willay-daemon.toml new file mode 100644 index 00000000..1bfced3d --- /dev/null +++ b/recipes/incoming/willay-daemon.toml @@ -0,0 +1,26 @@ +# willay-daemon — el demonio de willay, que en gioser corre declarado y vivo. +# +# Su estado son 5,3 M en `/var/lib/willay/indice`, que viajan con la mudanza. Corre sin +# argumentos: toda su configuración sale de su estado y del entorno. +# +# Receta Cargo contra el monorepo de tawasuyu, pinneada al MISMO commit que `shuma-*` y +# `puriy-costura`: el árbol de fuentes se comparte por `-`, así que un pin distinto es otro +# vendoreo de 2,4 G. Estática musl con zig-cc — la caja la arranca el init y no puede depender de +# encontrar un cargador, que es justo lo que le falta al binario glibc de gioser. + +name = "willay-daemon" +version = "0.1.0" +license = "MIT OR Apache-2.0" + +[source] +repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git" +commit = "23a292863f53b355c5c02d6185904f2c33d8ab42" +# tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR +# RUTA); el `cargo vendor` de takana lo pisaría y el error habla de `taffy`, no de esto. +cargo_vendor_dir = ".hammer-cargo-vendor" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "static" +flags = ["-p", "willay-daemon", "--bin", "willay-daemon"]