Commit Graph
1346 Commits
Author SHA1 Message Date
Sergio 92f7916b6b estado: cosecha granja 2026-09-16T22:31:27Z — avance del árbol KDE 2026-09-16 22:31:27 +00:00
Sergio aa3de89fd6 estado: cosecha granja 2026-09-16T22:02:03Z — avance del árbol KDE 2026-09-16 22:02:04 +00:00
Sergio b5c2260e0d estado: cosecha granja 2026-09-16T21:31:21Z — avance del árbol KDE 2026-09-16 21:31:21 +00:00
Sergio c88ce2a12c estado: cosecha granja 2026-09-16T21:01:36Z — avance del árbol KDE 2026-09-16 21:01:36 +00:00
SergioandClaude Opus 5 980839ab95 anotado el secreto en claro de la card de openclaw, comprobado sin imprimirlo
`/etc/arje/cards.d/openrc-openclaw.json` de gioser tiene una credencial en claro adentro del JSON —
2 coincidencias con patrón de api_key/token. Ese directorio está en `fuera_de_git`, así que la
mudanza lo copia y un respaldo lo multiplica.

No lo toco: rotar una credencial es del dueño. Queda anotado con las dos salidas (rotarla y moverla
a un fichero 600 que la Card EXIJA, como hace thasnuna; o que openclaw muera y se revoque igual), y
con la que no es opción: copiarla tal cual.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 20:58:47 +00:00
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
Sergio 42b53d4fdb estado: cosecha granja 2026-09-16T20:31:35Z — avance del árbol KDE 2026-09-16 20:31:35 +00:00
Sergio 96d27a8ed7 estado: cosecha granja 2026-09-16T20:01:39Z — avance del árbol KDE 2026-09-16 20:01:39 +00:00
SergioandClaude Opus 5 cec3c06ace las decisiones de la mudanza pasan al repo, y el corral de respaldo queda armado
`work/` está en .gitignore, así que el fichero donde vive lo que el usuario decidió —con el motivo de
cada línea— no sobrevivía a la máquina que la mudanza borra. Ahora es `docs/state/`.

Nueve entradas marcadas `respalda`: terapeuta.ec (279 M, sin DNS hace tiempo), los cuatro «valens»,
`los-grandes-mensajes.pdf`, `kkk` (46 B, credencial en claro) y los tres clones de terceros CON
cambios sin commitear — lo commiteado se vuelve a clonar, lo de encima existe sólo en este disco.

Juntas en `/mnt/cosecha/respaldo-mudanza` (475 M) con LEEME y SHA256SUMS de 5472 ficheros. El
control se hizo ANTES del manifiesto: ficheros contados en origen y en corral, las nueve coinciden
(3805, 1243, 183, 1, 164, 1, 1, 72, 1).

⚠ NO entraron `~/hammer`, `~/takana` ni `~/tawasuyu`: son SYMLINKS a /mnt/vvv. El censo los veía
como entradas de 0 bytes CON remoto git —porque `git -C` sigue el enlace— y la recomendación
automática decía «respalda» por tener cambios sin commitear. Respaldarlos habría guardado tres
enlaces rotos. Un dato que parece del objeto y es del enlace.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 19:49:08 +00:00
Sergio cf13ac2155 estado: cosecha granja 2026-09-16T19:31:26Z — avance del árbol KDE 2026-09-16 19:31:26 +00:00
sergioandClaude Opus 5 11a9ead671 perfiles: metal-tigerlake es una CAPA DE HARDWARE componible, no otra lista por escritorio
El SDD 27 §2 dice que el repo mezcla tres capas —piso, escritorio, extras— en una sola
lista por escritorio, y que esa es la causa de que la composición no esté definida. El
firmware es un cuarto caso que el SDD no nombra y que sigue la misma lógica: no es un
escritorio ni un toolbox, es lo que hace falta para que un METAL CONCRETO arranque con todo
su hardware vivo.

Por eso va como perfil propio y se compone, en vez de duplicarse en los cuatro escritorios:

    scripts/targets.py cli metal-tigerlake escritorio-kde

Otro metal = otro perfil de estos con su propia receta firmware-<plataforma> derivada del
mismo linux-firmware. Ese es el punto de haber partido el firmware en base + derivada.

La máquina, medida con lspci/cpuinfo sobre el metal real:

    CPU    i7-11370H · family 6 · model 140 (0x8c) · stepping 1   ⇒ intel-ucode/06-8c-01
    GPU    TigerLake-LP GT2 [Iris Xe] [8086:9a49]                 ⇒ i915 / xe
    WiFi   Intel Wi-Fi 6 AX201 [8086:a0f0]                        ⇒ iwlwifi
    Audio  500 Series HD Audio [8086:a0c8]                        ⇒ snd_sof_pci_intel_tgl

Y zsh entra en `cli`, no en `base`: base define el shell del SISTEMA (bash) y esto es el
del usuario. Dos hechos distintos, como `paquetes` y `servicios` un piso más abajo.

El runbook deja el encargo para el worker, y su parte útil son los dos muros que aparecieron
al cruzar ficheros que nadie había leído juntos:

  1. takana-live-install.sh:275 bifurca «UEFI ⇒ rama EFI-stub soberana», y metal-usb-sdboot.sh
     dice que el EFI-stub «en el firmware del usuario se cuelga tras Measured initrd PCR 9».
     ES EL MISMO FIRMWARE. El lazo de instalación EFI está validado en OVMF, que no tiene ese
     quirk ⇒ el instalador va a pasar la prueba y colgarse en el metal de destino. La salida
     es llevar el instalador a systemd-boot, que es el camino ya probado en esta máquina.
  2. El instalador reparticiona en MBR el disco entero, y ese disco tiene /home con 893 G
     usados. Si la instalación conserva /home o se lleva el disco con respaldo previo es
     decisión del usuario, no del runbook — y hasta que se decida, no correrlo sobre el NVMe.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 15:12:29 -04:00
SergioandClaude Opus 5 f32b28c63e CUTOVER de sergio.gioser.net: el último vhost sale de gioser — ya no queda ninguno
`https://sergio.gioser.net/` y `/shuma/` contestan 200 contra 2.29.29.217, con TLS público.
**Ningún dominio resuelve ya a gioser.**

⚠ Y el 200 de `/shuma/` había que mirarlo dos veces: el bloque termina en `try_files … /index.html`,
así que CUALQUIER ruta inexistente devuelve 200 con la SPA — un `curl -o /dev/null` habría dado el
mismo verde con el proxy mal puesto. Lo que decide es el cuerpo (17 bytes: «shuma-gateway ok») y el
control es compararlo con lo que el origen viejo sigue sirviendo. Igual con `/shuma/rpc`: las dos
máquinas contestan el mismo 400 con el mismo JSON.

Lo construido, en orden: las dos recetas sellaron en el worker con los hashes anticipados y salen
`statically linked` (nada de cargador, que era lo que le faltaba al binario glibc de gioser) · la
cuenta `shuma` declarada con `[[user]]`, uid 967, y el descenso con `setuidgid` en el argv de la
Card porque el payload Native de arje NO tiene campo de usuario · la config que no se regenera
(`gateway-token`, `identity.x25519`) instalada, y la guarda de la Card la EXIGE en vez de crearla:
un token nuevo deja fuera a los clientes ya emparejados · las dos Cards en `cards.d` Y en el genesis
de la semilla · las dos recetas y los dos labels declarados en `perfil.servidor`.

⚠ LA SHELL DE LA CUENTA NO ES UN DETALLE: el default de `[[user]]` es `/bin/false` —correcto para
gitea o squid, exactamente lo contrario para un demonio que abre PTYs—. Con la shell inerte el
servicio arranca, se supervisa, contesta 200 y cada pestaña muere al instante: un fallo que no se ve
al desplegar, se ve al usarlo. Va `shell = "/bin/sh"`.

`[[user]]` y `[[service]]` están fuera de `hash_inputs`: declarar todo eso no movió ningún
ArtifactHash, comprobado antes y después en los dos.

Y una corrección al §6.25: para cambiar el VALOR de un rrset no hace falta DELETE+POST (que deja una
ventana sin registro). La API tiene
`POST /v1/zones/<id>/rrsets/<n>/<t>/actions/set_records`, que es atómica. Con TTL 60 la resolución
pública cambió en menos de 8 segundos.

El origen de gioser sigue corriendo a propósito, como en §6.26: volver atrás es una llamada.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 19:07:20 +00:00
Sergio 15157f8cfe estado: cosecha granja 2026-09-16T19:02:01Z — avance del árbol KDE 2026-09-16 19:02:01 +00:00
Sergio 6da0173498 estado: cosecha granja 2026-09-16T18:31:37Z — avance del árbol KDE 2026-09-16 18:31:37 +00:00
Sergio aa36ecc0b9 estado: cosecha granja 2026-09-16T18:01:53Z — avance del árbol KDE 2026-09-16 18:01:53 +00:00
Sergio b057c057db estado: cosecha granja 2026-09-16T17:32:03Z — avance del árbol KDE 2026-09-16 17:32:03 +00:00
Sergio ae2a73a9ae estado: cosecha granja 2026-09-16T17:01:33Z — avance del árbol KDE 2026-09-16 17:01:33 +00:00
Sergio b0879acdb0 estado: cosecha granja 2026-09-16T16:31:33Z — avance del árbol KDE 2026-09-16 16:31:33 +00:00
Sergio 9816fb98fd estado: cosecha granja 2026-09-16T16:01:56Z — avance del árbol KDE 2026-09-16 16:01:56 +00:00
Sergio faa9e0f952 estado: cosecha granja 2026-09-16T15:32:40Z — avance del árbol KDE 2026-09-16 15:32:40 +00:00
Sergio fff28ad53f estado: cosecha granja 2026-09-16T15:01:36Z — avance del árbol KDE 2026-09-16 15:01:36 +00:00
Sergio ffe959d567 estado: cosecha granja 2026-09-16T14:31:36Z — avance del árbol KDE 2026-09-16 14:31:36 +00:00
Sergio 216b981484 estado: cosecha granja 2026-09-16T14:02:14Z — avance del árbol KDE 2026-09-16 14:02:14 +00:00
Sergio 9923aa2779 estado: cosecha granja 2026-09-16T13:32:44Z — avance del árbol KDE 2026-09-16 13:32:45 +00:00
SergioandClaude Opus 5 e903f486d9 el enlazador va DENTRO del compilador — /etc/cargo/config.toml es una ruta que cargo no lee
La prueba de la caja recién instalada —`cargo build` en un proyecto nuevo, sin flags ni rutas a
mano— falló con `linker `cc` not found`, y destapó que la pieza que había empaquetado era falsa:
**cargo NO LEE `/etc/cargo/config.toml`**. Sólo lee `$CARGO_HOME/config.toml`, los
`.cargo/config.toml` del proyecto y sus padres, y lo que se le pase con `--config` — que es lo que yo
venía pasando a mano en cada prueba, y por eso «funcionaba».

Y el arreglo no era mover el fichero: **el que enlaza es `rustc`, y rustc no lee la config de
cargo**. Las flags van DENTRO del compilador, en el spec del triple:

· `linker = "ld.lld"` + `linker_flavor = Gnu(Cc::No, Lld::Yes)` — sin esto rustc busca `cc`, que una
  caja takana no tiene.
· `crt_static_default = true` — sin esto enlaza dinámico y pide `-lgcc`, que no existe (la distro se
  construye con zig, que trae compiler-rt).
· `crt_static_allows_dylibs = true` — su pareja obligatoria: sin ella `crt-static` apaga los dylibs
  y con ellos los PROC-MACROS (serde_derive, clap_derive, las 44 recetas `cargo-*` con `derive`).
  El compilador en sí sigue dinámico: el `bootstrap.toml` fija `crt-static = false` para el build, y
  eso gana sobre el default del spec.

⇒ `cargo-config` (receta, árbol y copia en scripts/) se van enteros: un paquete que instala un
fichero que nadie abre es peor que no tenerlo.

Y de paso, `lld21` instala los cuatro alias como SYMLINKS y no como copias: cmake los duplicaba, 5 ×
96 M = 478 M de artefacto para 97 M de enlazador. Ahora 108 M, y `ld.lld` sigue despachando por
`argv[0]`, que es como upstream lo diseñó.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 13:07:56 +00:00
Sergio c57fcb214f estado: cosecha granja 2026-09-16T13:02:56Z — avance del árbol KDE 2026-09-16 13:02:56 +00:00
SergioandClaude Opus 5 0a894cfac1 perfil.servidor: fuera el prebuilt ajeno, entra el toolchain propio
Sale `rust-toolchain-bin` —799 M de bytes AJENOS sellados tal cual (`foreign`)—, que era el escalón 1
del SDD 31 y cumplió su función: con él se construyó el escalón 2, y el escalón 2 ya compila,
enlaza y corre.

Entran TRES, que son el mismo hecho («esta caja compila Rust») partido en piezas:
· `rust` (353 M) — el compilador y cargo, de la granja, desde fuente.
· `lld21` — el enlazador. NO es opcional: una caja takana no tiene `cc`, y sin enlazador `rustc`
  compila objetos y no produce un ejecutable.
· `cargo-config` — receta nueva que publica `/etc/cargo/config.toml` con las tres flags que unen a
  los dos. Sin ellas `cargo build` muere con «linker `cc` not found»: el toolchain estaría completo
  y MUDO, que es [[subcomando-sin-driver]] otra vez. Es config de SISTEMA y no de usuario a
  propósito — un `~/.cargo/config.toml` funcionaría para quien lo escribió y no para el siguiente.

⚠ Y `rust` se re-hashea otra vez (702094a8 → fe277b32) por una línea que descubrió el control de
PATH: **x.py instala en `/usr/local` por defecto, y el PATH de una caja takana es
`/bin:/usr/bin:/sbin:/usr/sbin`** — medido en la caja. O sea que el perfil habría proyectado un
`rustc` perfecto que nadie puede invocar: «existe ≠ se encuentra». Ahora `[install] prefix = "/usr"`,
como el resto del corpus.

Control previo que sí pasó: `rustc` y `cargo` corren SIN `LD_LIBRARY_PATH` — su `RUNPATH` es
`$ORIGIN/../lib`, así que la proyección del artefacto basta.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 12:38:15 +00:00
Sergio 240069801e estado: cosecha granja 2026-09-16T12:32:03Z — avance del árbol KDE 2026-09-16 12:32:03 +00:00
Sergio d22bc8443a estado: cosecha granja 2026-09-16T12:02:13Z — avance del árbol KDE 2026-09-16 12:02:13 +00:00
Sergio f8a900a923 estado: cosecha granja 2026-09-16T11:32:14Z — avance del árbol KDE 2026-09-16 11:32:15 +00:00
Sergio 3a68db44b8 estado: cosecha granja 2026-09-16T11:02:38Z — avance del árbol KDE 2026-09-16 11:02:38 +00:00
Sergio 2ff2a31150 estado: cosecha granja 2026-09-16T10:31:47Z — avance del árbol KDE 2026-09-16 10:31:47 +00:00
Sergio 5d30ef4b58 estado: cosecha granja 2026-09-16T10:01:44Z — avance del árbol KDE 2026-09-16 10:01:44 +00:00
Sergio 10878bf4a7 estado: cosecha granja 2026-09-16T09:31:22Z — avance del árbol KDE 2026-09-16 09:31:22 +00:00
Sergio c936d55675 estado: cosecha granja 2026-09-16T09:02:07Z — avance del árbol KDE 2026-09-16 09:02:07 +00:00
Sergio 83f5ec6e66 estado: cosecha granja 2026-09-16T08:31:20Z — avance del árbol KDE 2026-09-16 08:31:20 +00:00
Sergio 3a58cc6cbe estado: cosecha granja 2026-09-16T08:01:51Z — avance del árbol KDE 2026-09-16 08:01:51 +00:00
Sergio c0fbf75353 estado: cosecha granja 2026-09-16T07:31:21Z — avance del árbol KDE 2026-09-16 07:31:21 +00:00
Sergio ba6680c7b2 estado: cosecha granja 2026-09-16T07:01:54Z — avance del árbol KDE 2026-09-16 07:01:55 +00:00
Sergio 611d420f99 estado: cosecha granja 2026-09-16T06:31:20Z — avance del árbol KDE 2026-09-16 06:31:20 +00:00
Sergio 60e6197970 estado: cosecha granja 2026-09-16T06:01:45Z — avance del árbol KDE 2026-09-16 06:01:45 +00:00
Sergio afae751e65 estado: cosecha granja 2026-09-16T05:31:21Z — avance del árbol KDE 2026-09-16 05:31:21 +00:00
Sergio 4a6696bb52 estado: cosecha granja 2026-09-16T05:01:35Z — avance del árbol KDE 2026-09-16 05:01:35 +00:00
Sergio 8f3bc54f55 estado: cosecha granja 2026-09-16T04:31:36Z — avance del árbol KDE 2026-09-16 04:31:36 +00:00
Sergio cea668376c estado: cosecha granja 2026-09-16T04:02:11Z — avance del árbol KDE 2026-09-16 04:02:11 +00:00
Sergio 3f3bb2ed16 estado: cosecha granja 2026-09-16T03:31:40Z — avance del árbol KDE 2026-09-16 03:31:40 +00:00
Sergio ffe26377fb estado: cosecha granja 2026-09-16T03:01:33Z — avance del árbol KDE 2026-09-16 03:01:34 +00:00
Sergio 4f78a80c47 estado: cosecha granja 2026-09-16T02:31:35Z — avance del árbol KDE 2026-09-16 02:31:35 +00:00
Sergio 0ffcf4ed65 estado: cosecha granja 2026-09-16T02:01:47Z — avance del árbol KDE 2026-09-16 02:01:47 +00:00
Sergio 6b72d8d57b estado: cosecha granja 2026-09-16T01:31:45Z — avance del árbol KDE 2026-09-16 01:31:45 +00:00