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.3 KiB
TOML
53 lines
3.3 KiB
TOML
# 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 `<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 = "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"]
|
|
|
|
# ── EL SERVICIO (SDD 30) ────────────────────────────────────────────────────────────────────────
|
|
# ⚠ `--label` NOMBRA A LA MÁQUINA. En gioser decía `momento`, y copiarlo tal cual habría puesto a la
|
|
# caja nueva a identificarse con el nombre de la que se borra. Sale de `hostname`, que desde hoy la
|
|
# caja tiene de verdad (§6.38: antes decía `(none)`) — y si algún día vuelve a no tenerlo, la guarda
|
|
# lo dice en vez de anunciarse como «(none)» en la red.
|
|
[[service]]
|
|
label = "willay-crosscheck"
|
|
id = "01M2EKDA00W1YCR055CHK00012"
|
|
exec = "/bin/busybox"
|
|
argv = ["sh", "-c", "h=$(hostname); case \"$h\" in \"\"|\"(none)\") echo 'willay-crosscheck: la máquina no tiene hostname y `--label` es como se anuncia en la red — arreglá /etc/hostname (hay una Card OneShot que lo aplica)' >&2; exit 78;; esac; test -s /root/.tejido/roster.postcard || { echo 'willay-crosscheck: no hay roster en /root/.tejido/roster.postcard — este servicio vive DENTRO de la red de tejido y sin padrón no tiene con quién cruzar. Llega con el intercambio de tejido, no antes' >&2; exit 78; }; exec /usr/bin/willay-crosscheck --listen /ip4/0.0.0.0/tcp/4103 --label \"$h\""]
|
|
envp = [["PATH", "/usr/bin:/bin"], ["HOME", "/root"]]
|
|
networking = "full"
|
|
cgroup = "arje.slice/willay-crosscheck"
|
|
restart = { initial_ms = 1000, max_ms = 30000 }
|
|
|
|
# ⚠ MEDIDO AL ARRANCARLO (2026-09-16): **no es independiente de `tejido`**. Corriendo la misma línea
|
|
# a mano en la caja:
|
|
#
|
|
# Error: no hay roster en /root/.tejido/roster.postcard — emparejá primero (`tejido serve` / `tejido join`)
|
|
#
|
|
# O sea que `willay-crosscheck` vive DENTRO de la red de tejido y hereda su condición: **se enciende
|
|
# en el mismo movimiento en que tejido se intercambia**, no antes y no en paralelo con el de gioser.
|
|
# Por eso sale del `genesis` y queda sólo en `cards.d`, como `tejido`.
|