tawasuyu

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1181Shell 82Rust 62Markdown 521515 Sutichaykuna

⎇ 34f2c0abc1dfd9ad859d36afbf4a70a0784a5b77 recipes/htop.toml TOML · 49 siq'ikuna · 2.9 KB Ñawpa willay ch'uya

htop: `link = "static"` era mentira por el `-rdynamic` de upstream db002ede6 · Sergio ·

1# htop 3.5.1 — monitor de procesos interactivo. Etapa G, tier-2 C. Consumidor TUI canónico de
2# ncurses: valida la capa CURSES real (ventanas/teclado/colores), no sólo el lookup de terminfo de less.
3#
4# Importada de Alpine aports (release tarball, trae configure). Ajustes:
5#   - deps.build = ["ncurses", "linux-headers"]: htop usa la API de curses widec (-lncursesw) y headers
6#     de Linux (taskstats/cgroup). Quito lm-sensors del makedepends de Alpine: el soporte de sensores
7#     es OPCIONAL (libsensors auto-detectado) y no está en el corpus ⇒ `--disable-sensors` explícito.
8#   - compiler=zig-cc (migrado de gcc, matar-gcc 2026-07-16) (gueto, igual que ncurses/less): zig-cc miscompila estos C clásicos.
9#   - link=static + sin libtool en el link del binario ⇒ LDFLAGS=-static del lab basta (htop static-pie).
10#     htop auto-detecta ncursesw (widec) para soporte unicode — la ncurses del corpus es widec.
11#
12# $CBUILD/$CHOST los da el lab (build==host ⇒ nativo).
13
14name    = "htop"
15version = "3.5.1"
16license = "GPL-2.0-or-later"
17
18[source]
19tarball = "https://github.com/htop-dev/htop/releases/download/3.5.1/htop-3.5.1.tar.xz"
20sha256  = "526cecd62870aa8d14d2a79a35ea197e4e2b5317d275b567cee0574b2ddb2e9a"
21
22[build]
23compiler = "zig-cc"
24target   = "x86_64-linux-musl"
25link     = "static"
26
27# Split de la info de depuración (SDD 23 etapa 4, tanda de HOJAS). Entra en `hash_inputs`.
28strip_debug = true
29
30# `AM_LDFLAGS=-static` en compile Y en install — la QUINTA causa de que `link = "static"` mienta,
31# y la única que NO es culpa de la receta: `Makefile.am:243` hace `AM_LDFLAGS += -rdynamic` bajo
32# `if HTOP_LINUX`, y el wrapper de cc del lab (`sandbox.rs:597`) quita el `-static` inyectado ante
33# `-rdynamic`/`--export-dynamic`/un `.so` en la línea. La regla del wrapper es correcta —`-static`
34# no puede sostenerse contra un link intrínsecamente dinámico—, pero acá el `-rdynamic` de upstream
35# es sólo para simbolizar el backtrace del manejador de fallos, no una necesidad de enlace. Con
36# `-static` el backtrace pierde nombres; es exactamente lo que `link = "static"` ya pedía.
37# Resultado sin esto: `-lncursesw` resolvía a la `libncursesw.so.6` DEL ROOTFS de Alpine — una
38# entrada no declarada, que es lo que el audit destapó (2026-08-31, 4 mintiendo).
39# En `install` no es opcional: si `make install` relinkea sin el override, devuelve el binario
40# dinámico y el arreglo se pierde (la lección de `parted`).
41# Seguro porque el ÚNICO `dlopen` del árbol está en `linux/LibSensors.c` y acá va `--disable-sensors`;
42# delayacct (que usaría libnl) queda en `no` por no estar libnl en `[deps]`.
43[build.phases]
44configure = "./configure --build=$CBUILD --host=$CHOST --prefix=/usr --sysconfdir=/etc --mandir=/usr/share/man --enable-cgroup --enable-taskstats --disable-sensors"
45compile   = "make -j\"$(nproc)\" AM_LDFLAGS=-static"
46install   = "make DESTDIR=/out install AM_LDFLAGS=-static"
47
48[deps]
49build = ["binutils", "ncurses", "linux-headers", "make"]