Commit Graph
1453 Commits
Author SHA1 Message Date
Sergio 1f5aef52df estado: cosecha granja 2026-08-27T22:32:48Z — avance del árbol KDE 2026-08-27 22:32:49 +00:00
Sergio ce797e52b6 estado: cosecha granja 2026-08-27T22:02:37Z — avance del árbol KDE 2026-08-27 22:02:37 +00:00
Sergio 81037a0812 estado: cosecha granja 2026-08-27T21:33:02Z — avance del árbol KDE 2026-08-27 21:33:03 +00:00
Sergio 4353ccdee5 estado: cosecha granja 2026-08-27T21:02:54Z — avance del árbol KDE 2026-08-27 21:02:54 +00:00
Sergio e7c2b0022c dwarves: CONSTRUYE — frontera libdw/musl cerrada
Cadena completa, cuatro recetas nuevas y una modificada:
  musl-obstack     -> libobstack (find_package(obstack REQUIRED))
  argp-standalone  -> libargp    (find_package(argp REQUIRED))
  musl-fts         -> fts(3), que usa libdwfl/linux-kernel-modules.c
  elfutils-libdw   -> libdw + libdwfl (VARIANTE: la canónica sólo hace libelf
                      porque de ella cuelgan los cuatro kernels)

Lo que costó, en orden de aparición:
· libdw a secas NO necesita argp/obstack/fts — la nota de la canónica es cierta
  de libdwfl y src/, no de libdw. El `obstack` de libdw estaba en un COMENTARIO.
· Pero dwarves SÍ usa libdwfl (15 dwfl_* en dwarf_loader.c) ⇒ vuelven argp y fts.
· libdwfl no compila suelto: hay que seguir el orden de SUBDIRS del raíz
  (lib → libelf → libcpu → backends → libebl → libdwelf → libdw → libdwfl →
  libdwfl_stacktrace).
· El compat/argp.h de la canónica TAPA el argp real y no declara argp_failure.
· libdw.a GORDA: FindDWARF.cmake pone DWARF_LIBRARIES = libdw + libelf y nada
  más, pero libdw necesita libdwfl/libebl/libdwelf/backends/libeu, que son libs
  internas. Se fusionan en un archive (patrón de la libgtk-4.a) junto con un
  `error()` real, que musl no trae y el shim de la receta sólo daba inline.
· Y al final, lzma/bz2: libdw descomprime .debug_* comprimidas.

Verificado de verdad, no por exit code: pahole v1.30 arranca (con el loader
musl del lab) y DECODIFICA DWARF — sobre un binario de prueba imprime los
offsets, los tamaños y hasta el agujero de 3 bytes de padding.
2026-08-27 20:47:54 +00:00
Sergio 84eff79411 elfutils-libdw: construir también libdwfl (dwarves lo necesita)
dwarves llama a 15 `dwfl_*` distintas desde dwarf_loader.c, así que libdw sola
no alcanza. libdwfl SÍ arrastra argp (argp-std.c) y fts (linux-kernel-modules.c)
⇒ la receta declara `argp-standalone` y `musl-fts`. Esos objetos casi nunca se
enlazan (dwarves no usa dwfl_standard_argp ni dwfl_linux_kernel_*) pero tienen
que COMPILAR.

Dos cosas que costaron:
· libdwfl no se puede construir suelto: su Makefile lee los .manifest de otros
  subdirs. Hay que seguir el orden de SUBDIRS del raíz:
  lib → libelf → libcpu → backends → libebl → libdwelf → libdw → libdwfl.
· `rm -f compat/argp.h`: el shim de la canónica es sólo tipos/decls y no declara
  `argp_failure`, que usa argp-std.c. Como esta variante trae argp de verdad, hay
  que BORRAR el shim para que gane el /usr/include/argp.h real — `-I$PWD/compat`
  va primero y si no lo tapa.
2026-08-27 20:41:23 +00:00
Sergio f147aab90e musl-fts: nueva receta — el fts(3) que musl no trae
Tercera pieza del frente libdw/musl. `libdwfl` de elfutils usa fts en
linux-kernel-modules.c, y dwarves necesita libdwfl.

⚠ Sus símbolos casi nunca se ENLAZAN (dwarves no llama dwfl_linux_kernel_*, así
que ese objeto no sale del archive), pero el fichero tiene que COMPILAR: hace
falta un <fts.h> real con los campos y constantes que usa. Escribir ese header
a mano es fácil de hacer mal en silencio; traer la implementación real es más
honesto.

Se compila a mano como musl-obstack. Gotcha menor: fts.c hace
`#include "config.h"` con COMILLAS (obstack.c lo hace con ÁNGULOS).
2026-08-27 20:36:04 +00:00
Sergio c030fcd837 elfutils-libdw: variante que construye libdw — la frontera era más chica de lo anotado
Tercera pata del frente libdw/musl, para `dwarves`.

VARIANTE y no tocar `recipes/elfutils.toml`: de la canónica cuelgan los CUATRO
kernels (su tools/objtool enlaza -lelf) y moverle el hash los invalidaría.
Mismo patrón que openssl-threads.

⚠ La canónica avisa que «libdw/libdwfl arrastran argp/obstack/fts, lo
verdaderamente difícil en musl». Es cierto de `libdwfl` y de `src/`, pero NO de
`libdw` a secas, que es lo único que pide dwarves. Verificado sobre el fuente:
· `argp_`/`fts_open` → sólo en libdwfl/, CERO en libdw/.
· `obstack` → en libdw/ aparece UNA vez y es dentro de un COMENTARIO de
  libdwP.h: elfutils lleva su propia «simplified thread-local reimplementation
  of obstacks» y no incluye <obstack.h> en ningún sitio.
⇒ los stubs de compat/ que ya montaba la receta bastan; libdw compila tal cual.

Verificado: sella y libdw.a exporta 129 símbolos `dwarf_*` reales
(dwarf_begin, dwarf_begin_elf, dwarf_getelf…), más dwarf.h/libdw.h/known-dwarf.h.
2026-08-27 20:33:31 +00:00
Sergio 60fcb34569 estado: cosecha granja 2026-08-27T20:32:36Z — avance del árbol KDE 2026-08-27 20:32:36 +00:00
Sergio 377eecc57a argp-standalone: nueva receta — la argp de glibc que musl no trae
Segunda pata del frente libdw/musl: `dwarves` hace `find_package(argp REQUIRED)`
y musl no trae argp. Es lo que Alpine empaqueta como `argp-standalone`.

Se compila a mano (sin autotools, como musl-obstack) y SÓLO los siete
`argp-*.c` que el propio Makefile.am pone en `libargp_a_SOURCES`. Los otros .c
del tarball (mempcpy/strchrnul/strndup/strcasecmp) son LIBOBJS de autoconf —
reemplazos para sistemas que NO los tienen— y musl SÍ los tiene, así que
incluirlos duplicaría símbolos de la libc.

Gotcha: `UNUSED` no es del código, lo define el `acinclude.m4` de autoconf. Sin
él las firmas `char* arg UNUSED` no parsean y salen `expected ')'` y varios
`undeclared identifier 'state'` — errores que parecen del código y son de
config. Va en el config.h a mano.
2026-08-27 20:30:03 +00:00
Sergio 2e56cf08c7 estado: cosecha granja 2026-08-27T20:02:54Z — avance del árbol KDE 2026-08-27 20:02:54 +00:00
Sergio 66048af2a0 musl-obstack: nueva receta — la obstack de glibc que musl no trae
Primera pieza del frente libdw/musl (para `dwarves`). La necesitan DOS cosas:
`libdw` de elfutils (su libdwP.h mete `struct obstack` en el Dwarf) y el propio
`dwarves`, que hace `find_package(obstack REQUIRED)`. Es lo que Alpine
empaqueta como `musl-obstack`.

Se compila A MANO: el tarball trae Makefile.am pero no un `configure` generado,
y el corpus no tiene autoconf/automake/libtool. Son dos .c.

Dos gotchas resueltos:
· `obstack.c` hace `#include <config.h>` SIN guarda (fuera de _LIBC) ⇒ hay que
  fabricarle uno. Lo único que mira es HAVE_LIBINTL_H, que musl no tiene, así
  que el config.h mínimo vale.
· Es `<config.h>` con ÁNGULOS, no comillas ⇒ no basta con dejarlo en el cwd,
  hace falta `-I.` en el compile.

El nombre importa: dwarves lo busca con `find_library(NAMES obstack)` en
/usr/lib ⇒ instala /usr/lib/libobstack.a y obstack.h.
2026-08-27 19:56:11 +00:00
Sergio 640422d000 estado: cosecha granja 2026-08-27T19:31:54Z — avance del árbol KDE 2026-08-27 19:31:54 +00:00
Sergio b07fd7a2ce estado: 571 selladas / 210 en deuda tras los arreglos de la noche 2026-08-27 19:26:14 +00:00
Sergio 75609c215b strace: quitar --enable-bundled=yes y el pin de zig — NINGUNO hacía falta
Los añadí durante el diagnóstico y luego los verifiqué uno a uno quitándolos:
la receta construye igual sin ellos. Dejarlos era cargo-cult, y encima el
comentario afirmaba cosas que mis propias pruebas ya habían desmentido.

La causa real es UNA y las dos únicas piezas necesarias siguen ahí: quitar la
dep `linux-headers` (Linux 6.16 tapando los headers 7.1 del rootfs) y el
cherry-pick de upstream para el `io_uring_buf_reg` de 7.1.

Ambos descartes quedan escritos en la receta para que nadie los re-intente:
`--enable-bundled=yes` no puede ganar porque zig-cc impone sus headers por
delante de cualquier `-isystem`, y la versión de zig es irrelevante porque los
headers que mandan son los del ROOTFS.

Verificado tras la limpieza: sella, y `strace -c /bin/true` traza 30 syscalls.
2026-08-27 19:15:41 +00:00
Sergio 1cbcac6600 strace: construye — headers del rootfs (Linux 7.1) contra strace 6.19
Dos cambios, una causa: el sandbox sirve headers UAPI MÁS NUEVOS de lo que
strace 6.19 espera, y la receta traía una dep que los ensombrecía con otros
más VIEJOS.

1) Fuera `linux-headers` de [deps]. Esa receta instala Linux 6.16 en
   /usr/include y TAPA los headers del rootfs (7.1). Con ella faltaban 35
   constantes —18 de btrfs.h, 17 de input-event-codes.h— y como los xlat de
   strace son `#unconditional` (sin guardas #ifdef), una constante ausente NO
   degrada la traza: rompe la compilación. Comprobado que no aporta NI UN
   header que el rootfs/zig no traigan ya (0 ficheros exclusivos).

2) `strace-io-uring-7.1.patch`: Linux 7.1 añadió `min_left` a
   `struct io_uring_buf_reg` y cambió `__u64 resv[3]` por `__u32 resv[5]`, así
   que `CHECK_TYPE_SIZE(arg.resv, sizeof(uint64_t)*3)` saltaba como
   `static assertion failed`. El cambio es el de UPSTREAM (strace master ya lo
   trae), mismo criterio que `linux-headers-7.0.patch`, que también es un
   cherry-pick.

⚠ El fallo se destapa POR CAPAS: make abortaba en btrfs.o, así que las 17
constantes de evdev ni se compilaban, y al arreglar btrfs "aparecían" las de
evdev como si el arreglo no hubiera servido. Y sólo tras resolver las 35 se
llegó a compilar io_uring.c y salió el static_assert. Una causa, tres caras.

⚠ `--enable-bundled=yes` NO sirve acá aunque el compilador lo sugiera: zig-cc
impone sus headers por delante de cualquier `-isystem`, así que los bundled de
strace no pueden ganar. Se probó: la opción se aplica (`checking whether to use
bundled linux kernel headers... yes`) y el assert sigue.

Verificado: sella, 0 undeclared, 0 asserts, y el binario TRAZA de verdad —
`strace -c /bin/true` cuenta 30 syscalls.
2026-08-27 19:10:54 +00:00
Sergio 6dc7b531fd estado: cosecha granja 2026-08-27T19:01:55Z — avance del árbol KDE 2026-08-27 19:01:55 +00:00
Sergio b80253c820 estado: cosecha granja 2026-08-27T18:31:52Z — avance del árbol KDE 2026-08-27 18:31:52 +00:00
Sergio 98ba0ce6fe estado: cosecha granja 2026-08-27T18:01:55Z — avance del árbol KDE 2026-08-27 18:01:55 +00:00
Sergio a09cc9fd60 gobetween: renombrar el binario de main a gobetween
El módulo es `github.com/yyyar/gobetween/main` y el paquete main está en la
raíz, así que `go install` —que nombra el binario por el último elemento de la
ruta del módulo— lo dejaba como `/usr/bin/main`. Un `/usr/bin/main` en una
distro choca con cualquier cosa y no dice qué es.

La fase `install` que genera hammer para Go es `true` (el binario ya lo puso
`go install` en GOBIN=/out/usr/bin), así que definirla sólo añade el renombrado.

Los `test -x` no son adorno: si `go install` cambiara el nombre, sin ellos el
`mv` fallaría y se sellaría un artefacto SIN binario — regla 3 del repo, que
falle ruidosamente.

Verificado: /usr/bin/gobetween (33 M), arranca e imprime su versión, y no queda
ningún fichero `main` en el artefacto.
2026-08-27 17:36:44 +00:00
Sergio 65c1579571 estado: cosecha granja 2026-08-27T17:31:51Z — avance del árbol KDE 2026-08-27 17:31:51 +00:00
Sergio f2a704df9c estado: cosecha granja 2026-08-27T17:02:04Z — avance del árbol KDE 2026-08-27 17:02:04 +00:00
Sergio 799438b81a estado: cosecha granja 2026-08-27T16:32:05Z — avance del árbol KDE 2026-08-27 16:32:05 +00:00
Sergio 23bb79f2ea gobetween: replace a illarion/udpfacade — la dep transitiva desapareció de internet
`github.com/eric-lindau/udpfacade` (que importa src/server/udp) ya no existe:
GitHub da «Repository not found» y proxy.golang.org 404 para esa versión, así
que `go mod vendor` moría y la receta era INCONSTRUIBLE. No se arregla subiendo
de versión: master de gobetween pinea el mismo módulo.

Se redirige con `replace` al único superviviente, illarion/udpfacade.

⚠ Apunta a MASTER (031998cc71fa), no al commit pineado. El original
(d8c1c27add169599654f71a6c62d13cde1c51e50) SÍ existe como objeto en illarion
—los forks comparten almacén y la API de GitHub lo muestra— pero NO es
alcanzable desde ninguna ref, y `go` sólo resuelve pseudo-versiones alcanzables
desde una ref. Comprobado: `unknown revision d8c1c27add16`. (`git fetch <sha>`
sí lo trae; `go` no usa esa vía.)

⚠ SEGURO y comprobado, no supuesto: entre master y el commit pineado hay TRES
commits y el diff entero es `udp.go` +2 y `udp_test.go` +2 —sólo la línea
`// +build !windows`— más `udp_windows.go` nuevo con `// +build windows`. Para
GOOS=linux el código compilado es IDÉNTICO, y esto construye x86_64-linux-musl.

Va como PATCH y no como fase porque `vendor_go_deps` corre en el fetch
(lib.rs:277), antes de las fases; los patches se aplican antes (lib.rs:224).

Verificado: el patch aplica limpio sobre un checkout pristino, hammer sella, y
el binario arranca e imprime su versión.
2026-08-27 16:30:56 +00:00
Sergio c1466de9d6 rsync: subir 3.4.4 → 3.5.0 — upstream podó el tarball viejo
samba.org borró `rsync-3.4.4.tar.gz` (404) y en ese directorio ya sólo queda
3.5.0. Tampoco estaba en nuestro mirror, así que la receta era INCONSTRUIBLE:
la única fuente MUERTA del corpus según docs/state/fuentes-vigia.json (1164
vivas / 3 muertas; las otras dos son un 502 transitorio de savannah).

⚠ NO es «cambiar el sha256 para tapar un 404» (lo prohibido por ADR 0013): el
tarball es OTRO, con su versión y su hash propios. Provenance verificada de
verdad, no asumida:

    gpg --verify rsync-3.5.0.tar.gz.asc rsync-3.5.0.tar.gz
    → Good signature from "Andrew Tridgell <andrew@tridgell.net>"
      RSA key 9FEF112DCE19A0DC7E882CB81BB24997A8535F6F

Clave traída de keys.openpgp.org; su fingerprint coincide con el `issuer` del
.asc. El aviso «User ID not certified» es esperable (no hay web-of-trust acá);
la firma en sí es válida.

Comprobado ANTES de subir: las diez opciones de configure siguen existiendo en
3.5.0, `rrsync.1` sigue en la raíz, y dont-use-nobody.patch aplica limpio
(`patch -p1 --dry-run` sin rechazos).

Verificado: sella, artefacto de 3,3 M con rsync/rrsync/rsync-ssl, y el binario
responde `rsync version 3.5.0 protocol version 32`.
2026-08-27 16:07:21 +00:00
Sergio 9472a3e260 estado: cosecha granja 2026-08-27T16:02:08Z — avance del árbol KDE 2026-08-27 16:02:08 +00:00
Sergio 177e6a9549 estado: cosecha granja 2026-08-27T15:32:05Z — avance del árbol KDE 2026-08-27 15:32:05 +00:00
Sergio 0a2f8916e6 python3: TRAE ssl — la causa era link=static, no openssl
CPython abortaba `_ssl` con «OPENSSL_THREADS is not defined, Python requires
thread-safe OpenSSL», y la receta lo daba por imposible sin rehacer openssl.

CAUSA RAÍZ, probada: no es openssl, es `link = "static"`.
`hammer-build/src/lib.rs:285` inyecta `LDFLAGS=-static`, y el Configure de
openssl (línea 1514) hace:

    if (grep { $_ =~ /(?:^|\s)-static(?:\s|$)/ } @{$config{LDFLAGS}}) {
        disable('static', 'pic', 'threads');
    }

⇒ el propio `-static` apaga los threads en silencio. Añadir `threads` explícito
NO sirve (el disable() va después y gana): el configuration.h salía byte a byte
idéntico. Dentro del sandbox `configdata.pm` decía `thread_scheme => pthreads`
pero `THREADS_DEFINE=0`; fuera del sandbox, los mismos flags —y hasta con el
perl del corpus— SÍ definían el macro. La diferencia era el entorno.

`openssl-threads`: misma receta con `link = "dynamic"` (mantiene `no-shared`,
sigue emitiendo .a). Verificado: OPENSSL_THREADS definido y 36 símbolos
pthread_ reales en libcrypto.a.

VARIANTE y no tocar `recipes/openssl.toml`: de la canónica cuelgan los CUATRO
kernels (linux, linux-generic, linux-metal, linux-metal-dual) y la reproducción
bit a bit del 6.16.12 es un resultado cerrado; moverle el hash lo invalidaría,
más 125 sellados.

Además `ssl` entra en la asserción del install. Sin ese guardián se volvería a
sellar un intérprete mudo — que es justo como esto estuvo escondido meses.

Verificado: `checking for stdlib extension module _ssl... yes`,
_ssl.cpython-312-x86_64-linux-musl.so instalada, y el propio install imprime
`modulos opcionales: OK` importando ssl.

⚠ Mueve el hash de python3: 251 dependientes directos, ~369 sellados en los
cinco grafos (161 en KDE). Es el coste aceptado de la decisión.
2026-08-27 15:26:38 +00:00
Sergio 2cd5453b64 estado: cosecha granja 2026-08-27T15:02:15Z — avance del árbol KDE 2026-08-27 15:02:15 +00:00
Sergio 5f6c062cd9 adwaita-hello, sourceview-hello, hammer-edit: añadir xz a [deps]
Con gtk4 ya sin objetivos compartidos, estas tres dejaron de fallar por PIC
(0 errores) y pasaron a morir en el link con `unable to find static system
library 'lzma'`.

Misma causa que appstream: declaran `appstream` y `libxmlb` pero no `xz`, y
`libxmlb.pc` trae `Requires: gio-2.0, liblzma, libzstd`. Al enlazar appstream
estática necesitan la liblzma igual. Patrón `.pc Requires`→[deps]; `xz` va
junto a `zstd`, que viene del mismo .pc.

Con esto cierra la clausura ENTERA de gtk4 en el grafo del corpus, las 6 que
colgaban de él: gtk4-hello, libadwaita, gtksourceview, adwaita-hello,
sourceview-hello y hammer-edit — todas SELLADAS y con binario real.
2026-08-27 14:50:10 +00:00
Sergio 0d6796e319 gtk4: no construir NINGÚN objetivo compartido — la .so era el muro PIC
`gtk/meson.build` declara dos hermanos con llamadas explícitas —`static_library('gtk')`
y `shared_library('gtk-4')`— y por ser explícita, `-Ddefault_library=static`
NO la suprime: no hay flag. Esa .so era el único objetivo compartido que se
enlazaba, arrastraba CINCO archives sin PIC (libtiff, libfreetype,
libfontconfig, libjpeg, libpng16) y moría con 13930 `relocation … recompile
with -fPIC`. Un ejecutable puede enlazar una .a no-PIC; una .so no.

Se apagan con `build_by_default: false` + `install: false` vía dos seds
acotados por rango (tocan 1 de 10 y 1 de 3 `install: true` respectivamente).

⚠ `build_by_default: false` NO BASTA SOLO: ninja construye igual lo que algo
NECESITA. El primer intento falló exactamente así — `shared_module('printbackend-file')`
depende de `libgtk_dep` y el fuente avisa «The 'file' print backend cannot be
disabled» (está fuera de los `if` de cpdb/cups), así que devolvía la .so al
grafo y re-aparecían los 13930 errores. Por eso se apagan LOS DOS.

En todo el árbol hay 5 objetivos compartidos: libgtk-4.so, printbackend-{cpdb,
cups,file} y media-gstreamer; las flags ya quitaban tres, estos seds los otros dos.

No se borra la declaración de libgtk: `pkg_config.generate(libgtk)` la necesita
para emitir el .pc con `-lgtk-4`, que es el nombre del archive GORDO que fabrica
la fase install. Nada la enlaza: los usuarios de `libgtk_dep` son demos, tests,
testsuite, examples y los backends de impresión/media, todos desactivados.

Verificado: sella, 0 errores PIC, 0 .so enlazadas, targets 997→993. Artefacto
con gtk4.pc `Libs: -lgtk-4`, libgtk-4.a de 808 objetos y `gtk_window_new` como
símbolo T definido. Las colas wlr/gnome tienen sus PROPIAS recetas de gtk4.
2026-08-27 14:46:55 +00:00
Sergio f08e13383e estado: cosecha granja 2026-08-27T14:31:55Z — avance del árbol KDE 2026-08-27 14:31:55 +00:00
Sergio 3a4da09851 estado: cosecha granja 2026-08-27T14:02:08Z — avance del árbol KDE 2026-08-27 14:02:08 +00:00
Sergio a8b7ec9ba9 estado: cosecha granja 2026-08-27T13:32:10Z — avance del árbol KDE 2026-08-27 13:32:11 +00:00
Sergio 9e4db8e6ca estado: cosecha granja 2026-08-27T13:01:47Z — avance del árbol KDE 2026-08-27 13:01:47 +00:00
Sergio 9a4689e568 estado: cosecha granja 2026-08-27T12:31:52Z — avance del árbol KDE 2026-08-27 12:31:52 +00:00
Sergio ead6dc2218 estado: cosecha granja 2026-08-27T12:01:57Z — avance del árbol KDE 2026-08-27 12:01:57 +00:00
Sergio b6bcdee006 dufs: añadir xz a [deps] — sys-crate de compresión exige liblzma
Quinta de la familia (appstream, cargo-deb, cargo-make, dprint). Sin `[deps]`
el link muere con `unable to find static system library 'lzma'`. Pendiente de
verificar en la próxima parada; el patrón está verificado tres veces.
2026-08-27 11:51:18 +00:00
Sergio f14322bd6b dprint: añadir xz y bzip2 a [deps] — sys-crates de compresión
Falla con las DOS a la vez: `unable to find static system library 'lzma'` y
`… 'bz2'`. La receta no tenía `[deps]`.

Cuarta de la misma familia esta noche (appstream, cargo-deb, cargo-make): el
lab trae el toolchain de Rust pero NO las libs C que los crates `*-sys`
esperan del sistema. El arreglo va en [deps], NUNCA engordando el rootfs
(regla de rootfs-laptop-worker-divergen).

NO se añade en bloque a las 220 recetas Cargo sin [deps]: la mayoría construye
bien y re-hashearlas invalidaría las ya selladas. Se arregla la que falla.

⚠ Pendiente de verificar como cargo-make en su momento; el patrón está
verificado tres veces (appstream, cargo-deb, cargo-make selladas tras el mismo
arreglo). Se verifica en la próxima parada.
2026-08-27 11:38:03 +00:00
Sergio e10615e60d estado: cosecha granja 2026-08-27T11:31:56Z — avance del árbol KDE 2026-08-27 11:31:56 +00:00
Sergio 2b7e51be3f estado: cosecha granja 2026-08-27T11:01:54Z — avance del árbol KDE 2026-08-27 11:01:54 +00:00
Sergio abfcd45cc3 estado: cosecha granja 2026-08-27T10:31:58Z — avance del árbol KDE 2026-08-27 10:31:58 +00:00
Sergio 729ad0d687 estado: cosecha granja 2026-08-27T10:01:56Z — avance del árbol KDE 2026-08-27 10:01:56 +00:00
Sergio ac506b4d1b estado: cosecha granja 2026-08-27T09:31:57Z — avance del árbol KDE 2026-08-27 09:31:57 +00:00
Sergio 1d32b034de estado: cosecha granja 2026-08-27T09:02:01Z — avance del árbol KDE 2026-08-27 09:02:01 +00:00
Sergio 6a0f3a1afe cargo-make: añadir bzip2 a [deps] — un sys-crate exige libbz2 del sistema
`unable to find static system library 'bz2' using strategy 'no_fallback'`. La
receta no tenía `[deps]`: el lab trae el toolchain de Rust pero no las libs C
que los crates `*-sys` esperan del sistema. bzip2 está sellado y aporta
/usr/lib/libbz2.a.

Tercera de la misma familia esta noche: appstream (lzma vía el .pc Requires de
libxmlb), cargo-deb (lzma vía lzma-sys) y ésta (bz2). El síntoma del linker es
idéntico en las tres y el arreglo también.

⚠ PENDIENTE DE VERIFICAR: las otras dos se construyeron y sellaron antes de
commitear; ésta no, para no parar el driver una vez por receta. Se verifica en
la próxima tanda de reanudación. Si fallara, el patrón —no la receta— es lo que
habría que revisar.
2026-08-27 08:42:47 +00:00
Sergio acd156de4d estado: cosecha granja 2026-08-27T08:31:58Z — avance del árbol KDE 2026-08-27 08:31:58 +00:00
Sergio 8eedd414e2 estado: cosecha granja 2026-08-27T08:02:12Z — avance del árbol KDE 2026-08-27 08:02:12 +00:00
Sergio 7934a82e36 cargo-deb: añadir xz a [deps] — lzma-sys exige la liblzma del sistema
La receta NO tenía `[deps]` en absoluto. El lab trae el toolchain de Rust pero
no las libs C que los crates `*-sys` esperan del sistema, así que el link moría
con `unable to find static system library 'lzma' using strategy 'no_fallback'`.
El log lo confirma: vendoriza y compila `lzma-sys v0.1.20`.

Mismo fallo y mismo arreglo que `appstream.toml` de hace un rato, por vías
distintas: allá liblzma entraba por el `.pc Requires` de libxmlb, acá por un
sys-crate. El síntoma del linker es idéntico.

Verificado: sella en 3m02s, artefacto de 4,6 M con un ELF real en
/usr/bin/cargo-deb. Blast radius nulo: en deuda en los cinco grafos con 0
dependientes sellados.
2026-08-27 07:52:20 +00:00
Sergio ae2cbc1c03 estado: cosecha granja 2026-08-27T07:31:55Z — avance del árbol KDE 2026-08-27 07:31:55 +00:00