mold b3:9ce9fe3194982cc2b28d0fa547b037d7d36dae773fbd033ad252d7f11cb92dd2
wireguard-tools b3:086d0837e30e8a7a5e05c61c2df47987c2574645c03226e0020f35635ba8ba41
Los dos sellaban, reproducían y NO CORRÍAN. Se descubrió ejecutando el binario; ni el sellado, ni
`takana hash`, ni la reproducibilidad lo veían.
mold — dos causas independientes, las dos leídas en su CMakeLists.txt:
1. `:149` — `if(ZLIB_FOUND AND NOT MOLD_MOSTLY_STATIC)` enlaza la zlib COMPARTIDA del sistema
(ídem zstd `:179` y blake3 `:161`). El binario salía pidiendo `libz.so.1`/`libzstd.so.1`, que
el corpus no publica (`zlib` canónica es `.a`), y al correrlo tomaba la del anfitrión:
`Error relocating /lib/libz.so.1: __snprintf_chk: symbol not found` — símbolo de
_FORTIFY_SOURCE de glibc que musl no tiene. `-DMOLD_MOSTLY_STATIC=ON` usa las que trae en tree.
2. El `LDFLAGS=-static` que el lab exporta para `link = "static"` NO llegaba a la línea de enlace
de CMake ⇒ hace falta `-DCMAKE_EXE_LINKER_FLAGS=-static` explícito.
Ahora: `statically linked`, y `mold --version` contesta 2.42.1.
Y antes de eso, otro defecto que tampoco fallaba: el primer sello pesaba 629 MB, de los cuales
628 eran UN SOLO FICHERO — /usr/bin/mold con el DWARF adentro, que CMAKE_BUILD_TYPE=Release no
quita. Con `strip_debug = true` (SDD 23) quedó en 41 MB. Un artefacto obeso no rompe nada: entra
en el store, en la imagen y en el respaldo, y nadie mira el tamaño.
wireguard-tools — acá el error era del razonamiento, y el artefacto lo desmintió. La receta iba
`link = "dynamic"` con [deps] build=["libmnl"] argumentando «wg enlaza libmnl y no hay libmnl.a en
el store». `readelf -d wg` da UN solo NEEDED, `libc.so`, y los `mnl_*` están definidos adentro.
La razón está en la fuente, `src/netlink.h:1`:
/* This is a minimized version of libmnl meant to be #include'd */
Upstream embebe el subconjunto que usa para no arrastrar la dependencia. Pasa a `link = "static"`
y pierde la dep: declarar una que no se usa ata esta receta al hash de otra y haría que un rebuild
de libmnl la re-selle para nada.
REGLA, escrita en las dos recetas: `link = "static"` es una DECLARACIÓN. Lo único que la comprueba
es `readelf -d` sobre el artefacto, o correrlo.
46 lines
2.6 KiB
TOML
46 lines
2.6 KiB
TOML
# wireguard-tools 1.0.20260223 — `wg` y `wg-quick`, el userland de WireGuard. C, Makefile a secas.
|
|
#
|
|
# ── POR QUÉ ENTRA ──────────────────────────────────────────────────────────────────────────────
|
|
# El VPN ya está en el kernel (`CONFIG_WIREGUARD`, ver SDD 22); lo que faltaba era con qué
|
|
# configurarlo. Sin esto una caja takana puede hablar WireGuard y no hay forma de decirle con quién.
|
|
# Pesa dos binarios y un puñado de scripts.
|
|
#
|
|
# ── NO DEPENDE DE libmnl: LA TRAE ADENTRO ────────────────────────────────────────────────────
|
|
# La primera versión de esta receta iba `link = "dynamic"` con `[deps] build = ["libmnl"]`, y el
|
|
# razonamiento era razonable y FALSO: «wg enlaza libmnl, la libmnl canónica es --disable-static, en
|
|
# el store no hay libmnl.a ⇒ dinámico». Lo desmintió el artefacto: `readelf -d wg` da **un solo
|
|
# NEEDED, `libc.so`**, y los símbolos `mnl_*` están DEFINIDOS adentro. El porqué está escrito en la
|
|
# fuente, en `src/netlink.h:1`:
|
|
#
|
|
# /* This is a minimized version of libmnl meant to be #include'd */
|
|
#
|
|
# Upstream embebe el subconjunto de libmnl que usa, justamente para no arrastrar la dependencia.
|
|
# ⇒ `link = "static"` y sin `libmnl` en `[deps]`. Declarar una dep que no se usa no es inocuo: ata
|
|
# esta receta al hash de otra y hace que un rebuild de libmnl re-selle wireguard-tools para nada.
|
|
#
|
|
# ⚠ `wg-quick` es un script bash y pide `bash`, `ip` (iproute2) y `resolvconf`/`openresolv` en
|
|
# RUNTIME. `wg` a secas no necesita nada de eso. Se declara lo que existe en el corpus; el día que
|
|
# `wg-quick` falle por `ip`, el que falta es iproute2, no esta receta.
|
|
name = "wireguard-tools"
|
|
version = "1.0.20260223"
|
|
license = "GPL-2.0-only"
|
|
|
|
[source]
|
|
repo = "https://git.zx2c4.com/wireguard-tools"
|
|
commit = "49ce333da02056ae7b22ee2aeb6afe8aaed79b19"
|
|
|
|
[build]
|
|
compiler = "zig-cc"
|
|
target = "x86_64-linux-musl"
|
|
link = "static"
|
|
|
|
[build.phases]
|
|
# WITH_SYSTEMDUNITS=no: esta distro no tiene systemd (arje). WITH_BASHCOMPLETION/WITH_WGQUICK van
|
|
# explícitos para que el paquete no cambie de contenido si upstream mueve un default.
|
|
compile = 'make -C src WITH_WGQUICK=yes WITH_BASHCOMPLETION=yes WITH_SYSTEMDUNITS=no'
|
|
install = 'make -C src DESTDIR=/out PREFIX=/usr WITH_WGQUICK=yes WITH_BASHCOMPLETION=yes WITH_SYSTEMDUNITS=no install'
|
|
|
|
[deps]
|
|
build = ["pkgconf"]
|
|
runtime = ["bash"]
|