perfiles: el diagnóstico de makewhatis, corregido con strace
Lo que escribí ayer sobre este fallo tenía dos afirmaciones que la traza
desmiente, y una memoria con un dato falso es peor que no tenerla.
· NO es endianness. Era mi hipótesis y se descarta leyendo el propio chequeo
del lector (dbm_map.c:82-100): el mágico 0x3a7d0cdb y la versión se validan
con be32toh ANTES del tamaño, y los dos PASAN. Con la endianness mal fallaría
el primero, y el mensaje sería «Bad initial magic».
· NO «discrepan escritor y lector». El fichero queda INCOMPLETO: dba_write()
reserva dos enteros, escribe las tablas y al final hace un seek hacia atrás
para rellenarlos; medido sobre el resultado, int[2]=0 e int[3]=0 con 552
bytes de contenido detrás. El lector deduce el tamaño de int[3], de ahí
«expected 4». Esa queja es el SÍNTOMA del aborto.
· Y no falla ninguna llamada al sistema: todos los write y lseek de la traza
tienen éxito. El aborto está entre escribir las tablas y rellenar punteros.
⚠ Dos cosas que valen más que el bug concreto:
1. strace NO corre dentro de la jaula (ptrace: Operation not permitted). Hay
que trazar desde el anfitrión con `raiz`. Eso me costó dos intentos.
2. El mensaje de error de makewhatis es BASURA: su say() termina en
perror(NULL), que imprime el último errno que hubiera por ahí — en este caso
el ENOENT de un open("/etc/localtime") de veinte líneas antes. Probado:
con TZ=UTC el MISMO fallo pasa a decir «No error information» mientras el
índice sigue sin generarse. Persigui el /etc/localtime varias vueltas antes
de darme cuenta de que sólo coloreaba el texto. Un programa que reporta
errno en un fallo que no es de errno manda a investigar el sitio equivocado.
Semántico sayk'uy
Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.
1 qillqakuna · +18 −5
- docs/state/targets.toml +18 −5
diff --git a/docs/state/targets.toml b/docs/state/targets.toml
index b35cc4d6..5bf96277 100644
--- a/docs/state/targets.toml
+++ b/docs/state/targets.toml
@@ -399,11 +399,24 @@ paquetes = [
# escritorios grandes y a servidor. `mandoc` —que publica `man`, `apropos` y `whatis`— ya viaja
# en `base`, así que el lector estaba puesto y sólo faltaba qué leer.
#
- # ⚠ Lo que esto NO arregla: `apropos` y `man -k` siguen sin funcionar, y no es culpa de este
- # paquete. `makewhatis` (de mandoc, en /usr/sbin) muere al escribir el índice, y su lector dice
- # `dbm_map(mandoc.db): Inconsistent file size 260 (expected 4)` — escritor y lector discrepan
- # SIENDO EL MISMO BINARIO. Es un defecto del empaquetado de mandoc, con su propia unidad de
- # trabajo: tocarlo reconstruye `base` y cascadea a todas las imágenes.
+ # ⚠ Lo que esto NO arregla: `apropos`, `whatis` y `man -k` siguen sin funcionar, y no es culpa de
+ # este paquete. `makewhatis` (de mandoc, en /usr/sbin) aborta a mitad de escribir el índice.
+ # Diagnóstico medido con strace desde el anfitrión (dentro de la jaula no se puede: ptrace está
+ # prohibido), y corrige dos cosas que creí antes:
+ #
+ # · NO es endianness. El mágico (0x3a7d0cdb) y la versión se leen BIEN con be32toh.
+ # · NO falla ninguna llamada al sistema: todos los write y lseek de la traza tienen éxito.
+ # · El fichero queda INCOMPLETO: `int[2]` y `int[3]` —los punteros que `dba_write()` rellena
+ # AL FINAL con un seek hacia atrás— quedan en CERO con 552 bytes de contenido detrás. Por eso
+ # el lector dice «Inconsistent file size 552 (expected 4)»: calcula el tamaño desde int[3].
+ # Es un SÍNTOMA del aborto, no un desacuerdo de formato.
+ # · El mensaje de error es INÚTIL: sale del `perror(NULL)` final de su `say()` y muestra un
+ # errno RANCIO. Probado: con `TZ=UTC` el mismo fallo pasa a decir «No error information»
+ # mientras el índice sigue sin generarse. El `/etc/localtime` ausente sólo COLOREA el texto.
+ #
+ # ⇒ El aborto ocurre entre escribir las tablas de páginas/macros y rellenar los punteros, y sale
+ # con 6 (SYSERR). Pinchar la línea exacta pide una sesión de depurador sobre mandoc: es su propia
+ # unidad de trabajo, y además tocar mandoc reconstruye `base` y cascadea a las diez imágenes.
"man-pages",
# ── SELLADAS DESDE HACE MESES Y EN NINGUNA IMAGEN (2026-09-12) ───────────────────────────────
# editor, multiplexor, gestor de ficheros e historial de shell: las cuatro piezas con las que se