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 815Rust 56Shell 37Markdown 291229 Definitions

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>

cba59e829b1571b26367279f59c743da0873f729 · by sergio · (3 months ago) · parent b122ded31 · browse the tree at this commit

Semantic delta

No definition changed: this change is text, documentation or data.

6 files · +91 −8

diff --git a/scripts/farm/farm-up.sh b/scripts/farm/farm-up.sh
index 7f938f0b..d70d4cd7 100755
--- a/scripts/farm/farm-up.sh
+++ b/scripts/farm/farm-up.sh
@@ -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}"
diff --git a/scripts/harkaq/harkaq-audit.c b/scripts/harkaq/harkaq-audit.c
index 3f068de7..e6ec0e2d 100644
--- a/scripts/harkaq/harkaq-audit.c
+++ b/scripts/harkaq/harkaq-audit.c
@@ -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>
diff --git a/scripts/harkaq/harkaq-exec.c b/scripts/harkaq/harkaq-exec.c
index 5d4aa4e2..5e7a9e0f 100644
--- a/scripts/harkaq/harkaq-exec.c
+++ b/scripts/harkaq/harkaq-exec.c
@@ -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>
diff --git a/scripts/harkaq/harkaq-uapi.h b/scripts/harkaq/harkaq-uapi.h
new file mode 100644
index 00000000..99e973e3
--- /dev/null
+++ b/scripts/harkaq/harkaq-uapi.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 */
diff --git a/scripts/harkaq/q1-audit.c b/scripts/harkaq/q1-audit.c
index cb6f3059..8f0aa5e2 100644
--- a/scripts/harkaq/q1-audit.c
+++ b/scripts/harkaq/q1-audit.c
@@ -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>
diff --git a/scripts/harkaq/q1b-attrib.c b/scripts/harkaq/q1b-attrib.c
index 5fe017a7..28fd0dd5 100644
--- a/scripts/harkaq/q1b-attrib.c
+++ b/scripts/harkaq/q1b-attrib.c
@@ -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>