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>
53 lines
3.4 KiB
TOML
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 }
|