Files
SergioandClaude Opus 5 ec469aef6b los nueve daemons propios declarados — y la línea entre «se muda» y «se INTERCAMBIA»
Nueve de las diez sellaron y están promovidas. Cinco corren en la caja (matilda, tupu, pacha,
pacha-secretos, willay-daemon, más el par de shuma de ayer); cuatro quedan instaladas y FRENADAS a
propósito, cada una con su guarda diciendo qué falta.

⚠ LA PAUTA DE LOS VHOSTS NO SIRVE PARA UNA IDENTIDAD. Con los sitios la regla fue «mudá el DNS y
dejá el origen encendido, así volver cuesta un minuto» (§6.26). Con `tejido` es justo lo contrario:
su README dice que la clave que el roster atesta ES la identidad de transporte libp2p
(`~/.tejido/device.seed`), así que dos máquinas con la misma semilla no son dos réplicas — son el
MISMO PeerId en dos sitios, dos impostores mutuos para la flota. `tejido` se INTERCAMBIA: se apaga
allá, se enciende acá, en ese orden. Todo listo para el intercambio (binario, cuenta 964, identidad
700 instalada) y su Card en `cards.d` pero NO en el `genesis`, para que un reinicio no lo encienda.

Y arrastra a `willay-crosscheck`, que no es independiente: corriendo su línea a mano dice «no hay
roster en /root/.tejido/roster.postcard — emparejá primero». Vive dentro de la red de tejido.

`thasnuna` tampoco puede: su INSTALAR.md —escrito hoy por el frente tawasuyu para esta mudanza—
pide `sandokan-mcp` y `claude` AUTENTICADO, y el CLI de claude es glibc de ~300 M (jaula qorpa).
De ahí sale un hallazgo que vale para el respaldo entero: la Card `openrc-openclaw` de gioser lleva
la API key de su proveedor EN CLARO dentro del JSON de /etc/arje/cards.d/, que se respalda y se
copia. Un secreto dentro de una Card viaja a todas partes.

`--label` de willay-crosscheck NOMBRA A LA MÁQUINA: en gioser decía `momento`. Ahora sale de
`hostname` y la guarda frena si no hay.

Y tres veredictos FALSOS en una tarde, los tres por probar con lo que la caja no tiene: `/dev/tcp`
(busybox ash no lo tiene) dio los 5 puertos de gioser «cerrados»; la expansión de llaves dijo que
los artefactos no habían llegado; y `find -newermt "-2 minutes"` dijo que tupu no escribía. Tupu SÍ
escribe: su fichero tiene tamaño CONSTANTE —es una serie fija— así que ni los bytes ni ese find
prueban nada; lo que decide es el mtime, medido dos veces con 40 s de por medio.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 20:57:44 +00:00

53 lines
3.4 KiB
TOML

# 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 `<dep>-<sha>`, 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"]
# ── LA CUENTA Y EL SERVICIO (SDD 30) ────────────────────────────────────────────────────────────
[[user]]
name = "thasnuna"
uid = 963
home = "/var/lib/thasnuna"
# ⚠ **HOY NO PUEDE CORRER EN LA CAJA, y conviene que lo diga él y no que lo descubra alguien.**
# Su propio `INSTALAR.md` —escrito el 2026-09-16 para esta misma mudanza— lista tres requisitos, y
# dos no están: `sandokan-mcp` en el PATH (sin él «el agente contesta pero no tiene herramientas») y
# **`claude` instalado Y AUTENTICADO** (sin él «no hay anfitrión»). El CLI de claude es un binario
# glibc de ~300 M: en una caja musl pide jaula qorpa, igual que `sergioh-api`.
#
# Las tres guardas salen 78 nombrando lo que falta. El token NO se genera: lo da @BotFather y vive
# en un fichero 600 del usuario. Su INSTALAR.md explica por qué no va en la Card, y el motivo está
# medido en la máquina vieja: la Card `openrc-openclaw` de gioser lleva **la API key de su proveedor
# EN CLARO dentro del JSON de `/etc/arje/cards.d/`**, que es un directorio que se respalda y se copia.
[[service]]
label = "thasnuna"
id = "01M2EKDA00THA5NVNAB0T00001"
exec = "/bin/busybox"
argv = ["sh", "-c", "/bin/grep -q '^thasnuna:' /etc/passwd || { echo 'thasnuna: falta el usuario `thasnuna` en /etc/passwd' >&2; exit 78; }; test -s /var/lib/thasnuna/.config/thasnuna/telegram-token || { echo 'thasnuna: falta el token (~/.config/thasnuna/telegram-token, 600). Lo da @BotFather y NO va en esta Card: un JSON de cards.d se respalda y se copia' >&2; exit 78; }; command -v sandokan-mcp >/dev/null || { echo 'thasnuna: falta `sandokan-mcp` en el PATH — sin él el agente contesta pero NO TIENE HERRAMIENTAS (su INSTALAR.md §0)' >&2; exit 78; }; command -v claude >/dev/null || { echo 'thasnuna: falta `claude` instalado y AUTENTICADO — sin anfitrión el daemon cae al eco. Es glibc: en musl pide jaula qorpa' >&2; exit 78; }; cd /var/lib/thasnuna || exit 78; exec /usr/bin/setuidgid thasnuna /usr/bin/thasnuna run --wait 25"]
envp = [["PATH", "/usr/bin:/bin"], ["HOME", "/var/lib/thasnuna"], ["USER", "thasnuna"]]
networking = "full"
cgroup = "arje.slice/thasnuna"
restart = { initial_ms = 1000, max_ms = 30000 }