gioser

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 188Rust 55Shell 30Markdown 281211 Definiciones

⎇ ff78b3d54fb9786c53bf223dde4d428469948289 recipes/psmisc.toml TOML · 67 líneas · 4.1 KB Historia crudo

busybox 69 → 64: psmisc y bc, las dos piezas que el plan marcaba TRAER 4357b29cb · Sergio ·

1# psmisc 23.7 — `killall`, `pstree`, `fuser`, `prtstat`, `pslog`, `peekfd`.
2#
3# ── POR QUÉ ENTRA ───────────────────────────────────────────────────────────────────────────────
4# **`procps-ng` NO los trae**, y eso era lo que el plan de botar busybox daba por supuesto hasta que
5# se midió: `killall killall5 pstree fuser` eran cuatro de los applets que sólo proveía busybox, con
6# procps-ng declarado en los 7 perfiles. procps-ng da `ps top free kill pgrep pkill pidof uptime
7# vmstat w watch` — matar por NOMBRE y el árbol de procesos son de este paquete, no de aquél.
8#
9# ⚠ `killall5` NO lo trae psmisc: es de sysvinit (`/sbin/killall5`, el «mata todo menos PID 1» que
10# usan los guiones de apagado). Acá lo cubre arje-zero por FUNCIÓN —es PID 1 y apaga él— así que el
11# applet se retirará con los indultos, no se reemplaza. Son 3 de los 4, y decirlo así evita que la
12# tabla vuelva a prometer lo que no hay.
13#
14# ── EL DETALLE QUE MUERDE: `-lncurses` no existe acá ────────────────────────────────────────────
15# `pstree` pide `tgetent`, y el `configure` la busca por NOMBRE DE LIBRERÍA: `-ltinfo`, `-lncurses`,
16# `-ltermcap`. Nuestra ncurses es `--enable-widec`, o sea **`libncursesw.a`**, y ninguno de los tres
17# nombres existe ⇒ `configure: error: Cannot find tinfo, ncurses or termcap libraries`.
18#
19# Se probaron dos caminos que NO sirven, y conviene dejarlos escritos para no repetirlos:
20#   · `LIBS=-lncursesw` — el `AC_CHECK_LIB` no pregunta «¿resuelve tgetent?»: **compila un programa
21#     de prueba con `-lncurses`** y mira si enlaza. Otra librería en LIBS no cambia eso.
22#   · `ac_cv_lib_ncurses_tgetent=yes` + `make TERMCAP_LIB=-lncursesw` — la variable de caché sí
23#     salta la prueba, pero después falla el enlace igual: `src_pstree_LDADD = @LIBINTL@
24#     @TERMCAP_LIB@` se SUSTITUYE en tiempo de configure, así que el Makefile queda con `-lncurses`
25#     LITERAL, no con una referencia a `$(TERMCAP_LIB)`. Sobreescribir esa variable en la línea de
26#     `make` no toca nada. (Medido: `error: unable to find static system library 'ncurses'`.)
27#
28# Lo que sí funciona es darle el nombre que busca: un enlace `libncurses.a → libncursesw.a` en un
29# directorio propio del árbol, y `-L` a ese directorio. Así el `AC_CHECK_LIB` pasa de verdad —sin
30# mentirle a la caché— y el enlace resuelve contra la ncursesw real. El enlace vive en el scratch
31# del build, no viaja al artefacto.
32#
33# ⚠ Y el `-L` se AÑADE a `$LDFLAGS`, no lo reemplaza. El harness inyecta `LDFLAGS=-static` para las
34# recetas `link = "static"` (`takana-build/src/lib.rs:285`), así que un `LDFLAGS="-L…"` a secas se
35# lo come y los seis binarios salen DINÁMICOS sin que nada falle — medido acá: sellaron, `killall`
36# corría, y `pstree` moría con `Error relocating /lib/libncursesw.so.6` al tomar la librería del
37# sistema anfitrión. Es la misma forma que [[cgo-sin-baseline-sigill]]: redefinir una variable que
38# el harness ya puebla pierde en silencio lo que el harness había puesto.
39
40name    = "psmisc"
41version = "23.7"
42license = "GPL-2.0-or-later"
43
44[source]
45tarball = "https://downloads.sourceforge.net/project/psmisc/psmisc/psmisc-23.7.tar.xz"
46sha256  = "58c55d9c1402474065adae669511c191de374b0871eec781239ab400b907c327"
47
48[build]
49compiler = "zig-cc"
50target   = "x86_64-linux-musl"
51link     = "static"
52flags    = []
53
54[deps]
55build = ["ncurses", "make", "pkgconf"]
56
57[build.phases]
58# `--disable-nls`: musl no trae <libintl.h>, y es lo que hace el resto del corpus.
59# SELinux viene apagado por defecto en este configure (lo dice su configure.ac), no hace falta flag.
60configure = '''
61mkdir -p "$PWD/.compat-ncurses"
62ln -sf /usr/lib/libncursesw.a "$PWD/.compat-ncurses/libncurses.a"
63./configure --build=$CBUILD --host=$CHOST --prefix=/usr \
64	--disable-nls LDFLAGS="$LDFLAGS -L$PWD/.compat-ncurses"
65'''
66compile = 'make'
67install = 'make DESTDIR=/out install'