Apagados en gioser (relay, serve y willay-crosscheck), encendidos en la caja: `tejido` en :4102 y `willay-crosscheck` en :4103, los dos alcanzables desde fuera. La prueba de que la identidad VIAJÓ no es que el servicio arranque —eso pasaría igual con semillas nuevas, que es el fallo silencioso que esto existe para evitar— sino que la semilla sea la misma: `device.seed` y `roster.postcard` con sha256 IDÉNTICO a los dos lados. El PeerId sale de ahí, así que sigue siendo 12D3KooWBw2u…. ⚠ LO QUE SÍ CAMBIA: el multiaddr que los clientes tienen configurado lleva la IP. antes /ip4/204.168.193.248/tcp/4102/p2p/12D3KooWBw2u… ahora /ip4/2.29.29.217/tcp/4102/p2p/12D3KooWBw2u… (mismo PeerId, otra IP) 🧱 SIN EL CORTAFUEGOS HABRÍA SIDO UN VERDE FALSO: el reglaset abría 80/443/1137/2345/22022 y nada más. Con el relay encendido y el 4102 filtrado, `status` diría «corriendo · 0 reinicios» y la flota no llegaría. Abiertos 4102 y 4103 con su ban por tasa; NO el 33097, que era el puerto efímero de un `tejido serve` cliente. Y el fichero quedó IDEMPOTENTE (crear+borrar la tabla antes de definirla), que era deuda del §6.33: 15 reglas dport antes, 21 después — no 36. ⚠ La política que genera ese reglaset NO EXISTE en ningún disco: ni la ruta que su cabecera nombra ni el binario `cortafuegos`. El generado sobrevivió a su fuente, así que hoy se edita a mano. 🆔 Y takana acepta ULIDs que arje-zero RECHAZA: la card no encarnaba por `invalid character`, y era la `L` de «RELAY» — carácter excluido del alfabeto Crockford. `service-cards` lo dio por bueno («26 alfanuméricos») y el consumidor lo tiró. El validador del productor más laxo que el del consumidor siempre termina en un fallo lejos de donde se escribió. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
64 lines
4.1 KiB
TOML
64 lines
4.1 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 $HOME/.tejido/roster.postcard || { echo 'willay-crosscheck: no hay roster en $HOME/.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; }; mkdir -p /run/willay; exec /usr/bin/willay-crosscheck --listen /ip4/0.0.0.0/tcp/4103 --label \"$h\""]
|
|
envp = [["PATH", "/usr/bin:/bin"], ["HOME", "/var/lib/tejido"], ["XDG_RUNTIME_DIR", "/run/willay"], ["XDG_DATA_HOME", "/var/lib"]]
|
|
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`.
|
|
|
|
# ⚠ EL ENTORNO NO SE ADIVINÓ: se leyó del proceso vivo en gioser (`/proc/<pid>/environ`), que lo
|
|
# arrancaron así:
|
|
#
|
|
# sudo sh -c 'setsid nohup env XDG_RUNTIME_DIR=/run/willay XDG_DATA_HOME=/var/lib \
|
|
# HOME=/home/sergio /usr/local/bin/willay-crosscheck --listen … --label momento …'
|
|
#
|
|
# O sea: **root, pero con `HOME` apuntando al home donde vive `~/.tejido`**. Acá esa identidad vive
|
|
# en `/var/lib/tejido`, así que `HOME` va ahí — y por eso la guarda mira `$HOME/.tejido`, no una
|
|
# ruta fija. Sin ese `HOME` el binario busca en `/root/.tejido`, que no existe ni acá ni allá: el
|
|
# servicio arrancaría y no encontraría padrón, que es exactamente el fallo que se midió primero.
|