harkaq: la granja VPS ya puede ser el compilador continuo — golden bumpeada a 6.17 (ABI 7)
El VPS va a ser el compilador permanente ⇒ harkaq TIENE que correr ahí o el
frente queda como decoración de laptop. Verificado de punta a punta en un worker
efímero desde la golden, no en el papel:
antes: kernel 6.8.0-134 → Landlock ABI 4 → sin audit → SinEvidencia siempre
después: kernel 6.17.0-40 → Landlock ABI 7 → AUDIT ✓
`apt install linux-image-generic-hwe-24.04` (archivo estándar de Ubuntu 24.04, sin
PPA ni cambiar distro), reboot, y la cadena COMPLETA de evidencia corre igual que
en el laptop:
same-exec 2 registros · new-exec 0 (el ciego) · new-exec-logon 4
domain=14e9f83c2 blockers=fs.read_file path="/etc/passwd" dev="sda1" ino=133259
El store del catálogo (103 artefactos) sobrevivió el bump intacto.
NUEVA GOLDEN: snapshot 408909310 "hammer-golden-harkaq-6.17-2026-07-15".
farm-up.sh pasa a usarla por defecto. La vieja (405120842) queda como fallback.
+ harkaq-uapi.h — EL HALLAZGO QUE IMPORTA para un compilador continuo: **el kernel
y los headers envejecen por separado**. El worker corre 6.17 pero su
linux-libc-dev es 6.8 y NO define NADA de lo necesario: ni los flags de log de ABI
7/8, ni AUDIT_LANDLOCK_ACCESS/DOMAIN (¡los tipos de registro!), ni IOCTL_DEV de
ABI 5. El kernel puede; el compilador no sabe pedírselo.
Es el mismo error de §3.1 al revés: allá, deducir el ABI de la versión del kernel;
acá, de la versión de los headers. NINGUNA de las dos dice la verdad — la única
fuente es el syscall en runtime. Estas constantes son números de contrato de UAPI,
estables por definición, seguros de fijar con #ifndef.
Sin esto harkaq sólo compila en distros con headers al día, que es justo lo que un
compilador continuo NO puede exigir. Y el modo de falla habría sido el peor: sin
AUDIT_LANDLOCK_ACCESS el lector filtraría por un número que no conoce y vería CERO
denegaciones — el falso `Hermetico` de D9, esta vez por headers viejos.
Nota: ABI 7 da el audit (lo que el proyecto necesita); TSYNC (ABI 8) pide 7.0 y no
está — es robustez opcional de D5, no un bloqueo.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -12,13 +12,14 @@
|
||||
# La flota viva se registra en scripts/farm/.fleet ("<name> <ip>" por línea; gitignored).
|
||||
# Idempotente al escalar: re-correr con más N agrega workers sin pisar los vivos.
|
||||
#
|
||||
# Env: IMAGE (snapshot, def 405120842=hammer-golden-2026-07-05), TYPE (def ccx23), LOCATION
|
||||
# Env: IMAGE (snapshot, def 408909310=hammer-golden-harkaq-6.17-2026-07-15), TYPE (def ccx23),
|
||||
# LOCATION
|
||||
# (def hel1), SSHKEY (llave del proyecto Hetzner, def desarrollo@jlsoltech.com), SSH_KEY
|
||||
# (privada local p/ SSH, def ~/.ssh/github5), REMOTE (def /opt/hammer).
|
||||
set -euo pipefail
|
||||
|
||||
N="${1:-1}"
|
||||
IMAGE="${IMAGE:-405120842}"
|
||||
IMAGE="${IMAGE:-408909310}"
|
||||
TYPE="${TYPE:-ccx23}"
|
||||
LOCATION="${LOCATION:-hel1}"
|
||||
SSHKEY="${SSHKEY:-desarrollo@jlsoltech.com}"
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
// de desarrollo: sudo setcap cap_audit_read,cap_audit_control+ep harkaq-audit
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <linux/audit.h>
|
||||
#include "harkaq-uapi.h"
|
||||
#include <linux/netlink.h>
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
|
||||
@@ -30,8 +30,8 @@
|
||||
// Nunca se afirma evidencia que el kernel no respaldó.
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include "harkaq-uapi.h"
|
||||
#include <fcntl.h>
|
||||
#include <linux/landlock.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
/* harkaq-uapi.h — las constantes del ABI de Landlock/audit, con respaldo propio.
|
||||
*
|
||||
* Por qué existe: **el kernel y los headers envejecen por separado**. El worker de la granja
|
||||
* corre kernel 6.17 (Landlock ABI 7, con audit de denegaciones) pero su `linux-libc-dev` es
|
||||
* 6.8 y no define NADA de lo que hace falta — ni los flags de log de ABI 7/8, ni
|
||||
* `AUDIT_LANDLOCK_ACCESS`, ni `IOCTL_DEV` de ABI 5. El kernel puede; el compilador no sabe
|
||||
* pedírselo. Medido en Ubuntu 24.04 + HWE 6.17 (SDD 16 §4.8).
|
||||
*
|
||||
* Es el mismo error de fondo que §3.1 advierte al revés: allá, deducir el ABI de la versión del
|
||||
* kernel; acá, deducirlo de la versión de los headers. **Ninguna de las dos dice la verdad.** La
|
||||
* única fuente es el syscall en runtime (`LANDLOCK_CREATE_RULESET_VERSION`), y estas constantes
|
||||
* son números de contrato del kernel — estables por definición de UAPI, seguros de fijar.
|
||||
*
|
||||
* Sin esto, harkaq sólo compila en distros con headers al día, que es justo lo que un
|
||||
* compilador continuo NO puede exigir.
|
||||
*/
|
||||
#ifndef HARKAQ_UAPI_H
|
||||
#define HARKAQ_UAPI_H
|
||||
|
||||
#include <linux/audit.h>
|
||||
#include <linux/landlock.h>
|
||||
|
||||
/* ABI 1 */
|
||||
#ifndef LANDLOCK_CREATE_RULESET_VERSION
|
||||
#define LANDLOCK_CREATE_RULESET_VERSION (1U << 0)
|
||||
#endif
|
||||
|
||||
/* ABI 2 — sin REFER no compila software real (D7) */
|
||||
#ifndef LANDLOCK_ACCESS_FS_REFER
|
||||
#define LANDLOCK_ACCESS_FS_REFER (1ULL << 13)
|
||||
#endif
|
||||
|
||||
/* ABI 3 */
|
||||
#ifndef LANDLOCK_ACCESS_FS_TRUNCATE
|
||||
#define LANDLOCK_ACCESS_FS_TRUNCATE (1ULL << 14)
|
||||
#endif
|
||||
|
||||
/* ABI 5 */
|
||||
#ifndef LANDLOCK_ACCESS_FS_IOCTL_DEV
|
||||
#define LANDLOCK_ACCESS_FS_IOCTL_DEV (1ULL << 15)
|
||||
#endif
|
||||
|
||||
/* ABI 6 — scoping de IPC (D8) */
|
||||
#ifndef LANDLOCK_SCOPE_ABSTRACT_UNIX_SOCKET
|
||||
#define LANDLOCK_SCOPE_ABSTRACT_UNIX_SOCKET (1ULL << 0)
|
||||
#endif
|
||||
#ifndef LANDLOCK_SCOPE_SIGNAL
|
||||
#define LANDLOCK_SCOPE_SIGNAL (1ULL << 1)
|
||||
#endif
|
||||
|
||||
/* ABI 7 — los flags de logging. LOG_NEW_EXEC_ON es del que cuelga TODO el proyecto: sin él el
|
||||
* kernel no audita ninguna denegación posterior al execve y harkaq certificaría como herméticos
|
||||
* todos los builds, sin un solo error visible (§3.4). */
|
||||
#ifndef LANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF
|
||||
#define LANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF (1U << 0)
|
||||
#endif
|
||||
#ifndef LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON
|
||||
#define LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON (1U << 1)
|
||||
#endif
|
||||
#ifndef LANDLOCK_RESTRICT_SELF_LOG_SUBDOMAINS_OFF
|
||||
#define LANDLOCK_RESTRICT_SELF_LOG_SUBDOMAINS_OFF (1U << 2)
|
||||
#endif
|
||||
|
||||
/* ABI 8 */
|
||||
#ifndef LANDLOCK_RESTRICT_SELF_TSYNC
|
||||
#define LANDLOCK_RESTRICT_SELF_TSYNC (1U << 3)
|
||||
#endif
|
||||
|
||||
/* Tipos de registro de audit. Sin éstos el lector no reconoce la evidencia AUNQUE el kernel la
|
||||
* emita: filtraría por un número que no conoce y vería cero denegaciones — el falso `Hermetico`
|
||||
* de D9, esta vez por headers viejos. */
|
||||
#ifndef AUDIT_LANDLOCK_ACCESS
|
||||
#define AUDIT_LANDLOCK_ACCESS 1423
|
||||
#endif
|
||||
#ifndef AUDIT_LANDLOCK_DOMAIN
|
||||
#define AUDIT_LANDLOCK_DOMAIN 1424
|
||||
#endif
|
||||
|
||||
/* Grupo multicast de sólo-lectura del audit (requiere CAP_AUDIT_READ). */
|
||||
#ifndef AUDIT_NLGRP_READLOG
|
||||
#define AUDIT_NLGRP_READLOG 1
|
||||
#endif
|
||||
|
||||
#endif /* HARKAQ_UAPI_H */
|
||||
@@ -16,8 +16,7 @@
|
||||
#define _GNU_SOURCE
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <linux/audit.h>
|
||||
#include <linux/landlock.h>
|
||||
#include "harkaq-uapi.h"
|
||||
#include <linux/netlink.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
@@ -19,8 +19,7 @@
|
||||
#define _GNU_SOURCE
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <linux/audit.h>
|
||||
#include <linux/landlock.h>
|
||||
#include "harkaq-uapi.h"
|
||||
#include <linux/netlink.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
Reference in New Issue
Block a user