# 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"] # ── EL SERVICIO (SDD 30) ──────────────────────────────────────────────────────────────────────── # Fuera de `hash_inputs`: declararlo no re-hashea. # # ⚠ **CORRE COMO ROOT, Y NO ES UN DESCUIDO — ES UNA RESTRICCIÓN MEDIDA.** Lo natural sería una # cuenta propia sin privilegio, como `shuma` o `gitea`. Acá no se puede, por dos hechos: # # 1. `matilda` lee `/var/log/caddy/requests.json`, que caddy crea **`-rw------- root root`** y # recrea igual en cada rotación. Un grupo con lectura se pierde en la próxima rotación. # 2. Los tres —`tupu`, `matilda`, `sandokan-watch`— escriben en el MISMO `/var/lib/tupu`, y en # gioser sus 322 ficheros son `root:root`. Bajar a uno solo deja mezcla de dueños en un árbol # compartido, que es la trampa de siempre: escribe el primero y los otros fallan al modificar. # # ⇒ o los tres como root, o ninguno. La salida limpia existe y está anotada para el día que se # quiera: que caddy escriba su log con lectura de grupo (`output file … { mode 640 }`) y que el # árbol sea de una cuenta `tupu`. Mientras tanto, esto es lo que HACE la máquina vieja, declarado # en vez de heredado. [[service]] label = "tupu" id = "01M2EKDA00TVPV000000000001" exec = "/bin/busybox" argv = ["sh", "-c", "test -d /var/lib/tupu || mkdir -p /var/lib/tupu || exit 78; exec /usr/bin/tupu collect --interval 10 --root /var/lib/tupu"] envp = [["PATH", "/usr/bin:/bin"], ["HOME", "/root"]] networking = "full" cgroup = "arje.slice/tupu" restart = { initial_ms = 1000, max_ms = 30000 }