DOS ERRORES MÍOS, uno de dirección y otro técnico, los dos en la cosecha automática:
1. DIRECCIÓN: declaró `busybox` como dep en 29 recetas — cuando la Etapa C lo está
ELIMINANDO (USERLAND_COMPONENTS=[uutils,findutils,…], ya cerrada; joyas-reusables
§5 lo confirma: "uutils… Ubuntu 25.10 los envía como default"). Estaba cimentando
la deuda que el roadmap borra.
2. TÉCNICO: busybox YA está en el runtime base de harkaq (`ro /bin/busybox`, `ro
/bin/sh` — el sandbox corre `sh -c` y /bin/sh→/bin/busybox). Es CONTRATO, no dep.
Declararlo apila el busybox de hammer sobre el de Alpine y ROMPE el build:
binutils daba "cannot run C compiled programs" en las DOS máquinas. Verificado:
sin busybox declarado, binutils construye (b3:f4507dcd…). Y la cadena se explica:
binutils roto ⇒ zlib (que lo declara) tampoco construía.
Auditoría de la cosecha (diff real, no la línea completa del +): añadió sólo 5 deps
distintas — make ×73, busybox ×29, perl ×8, pkgconf ×5, binutils ×1. Sólo busybox
estaba mal; las otras 4 son deps reales medidas. busybox revertido de 30 recetas
(queda sólo en busybox.toml, pre-existente).
Es el mismo error que ya me habían señalado con otro disfraz: MEDIR BIEN Y ACCIONAR
MAL. harkaq midió correcto (el build toca /bin/busybox: es el shell); la acción
correcta no era declararlo sino reconocerlo como contrato.
+ COORDINACIÓN del §3 con Fable 5 (mismo diseño, tareas repartidas):
- Su lección casper queda CONFIRMADA y REFORZADA: la clausura de build no sólo le
FALTAN las clases del mundo (offline) — también le SOBRA casi todo (headers, gcc).
Medido: htop (estático, 0 NEEDED) no toca NADA al correr ⇒ política = su binario.
- Su "la clase viaja como campo de la ConcesionCapacidad, sin formato nuevo" se
cumple LITERALMENTE: lo firmado es format::Permisos = u32 bitmask en 36 bytes
canónicos (Ring 0) ⇒ las clases SON los bits. La cripto no se toca.
- Diseño unificado: frontera (clases, u32, declaradas) + detalle (paths, Landlock,
medidos). D3 rige en ambos.
- Reparto: clases→Fable 5; medición/harness→Opus. CONTACTO: runtime-policy.sh ahora
emite la CLASE detectada (/etc/resolv.conf→dns, /etc/ssl/certs→tls-certs, …), no
sólo el path: la medición alimenta la tabla, la tabla decide el bit.
- Consumidor esperando: plan-jaula-juegos F1 (Steam que no puede leer ~/.ssh).
+ juez.sh (§10): nombre único por corrida (con uno fijo pega en caché ⇒ falso
"sin evidencia"). Fue el juez quien destapó todo esto en su primera corrida real.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
101 lines
7.2 KiB
TOML
101 lines
7.2 KiB
TOML
# Linux kernel 6.16.12 — frente kernel-from-source (soberanía del bootstrap).
|
|
#
|
|
# Hoy la VM del selfhost-verify bootea un kernel importado pinned (/boot/vmlinuz-linux del host). Esta
|
|
# receta lo construye desde fuente con hammer: el último eslabón del bootstrap que no era hammer-built.
|
|
# Misma versión que recipes/linux-headers.toml (6.16.12) ⇒ coherencia headers↔kernel.
|
|
#
|
|
# Criterio de éxito: el bzImage hammer-built bootea el builder de selfhost-verify y la corrida da
|
|
# ✓ REPRODUCIBLE (KERNEL=<este bzImage> ./scripts/selfhost-verify.sh).
|
|
#
|
|
# Compilador: CC=gcc/HOSTCC=gcc (NO zig) — DECISIÓN FORMAL (2026-06-19): el kernel se queda en el GUETO
|
|
# GCC (junto con cmake). gcc se retiene EXCLUSIVAMENTE como herramienta de bootstrap heredada para el
|
|
# kernel, por incompatibilidad de la CAPA DE TRADUCCIÓN DE FLAGS de `zig cc` con el kbuild de x86_64.
|
|
# Verdict tras experimento exhaustivo (recipes/linux-zig-test.toml, ya retirado): zig 0.13.0 SÍ compila
|
|
# todos los HOST-TOOLS del kernel (fixdep/kconfig/objtool) con un wrapper que traduce el depfile de
|
|
# kbuild `-Wp,-MMD,PATH` → `-MMD -MF PATH` (zig cc malinterpreta la forma cc1 de GCC; además el cache de
|
|
# zig debe ir DESHABILITADO o rompe el self-bootstrap de flex). PERO el compile del TARGET choca en
|
|
# cascada con la traducción de flags x86 de zig cc: `-mtune=generic` → "unknown target CPU 'generic'",
|
|
# `-march=x86-64` → "unknown CPU: 'x86'" (zig parte mal el `x86-64`), y aún faltarían el realmode 16-bit
|
|
# (`-march=i386`) e inline-asm/objtool. Es el "riesgo clang-build-Linux" del roadmap: open-ended y de
|
|
# payoff incierto, con el kernel YA reproducible-bit-a-bit y booteando bajo gcc. Un futuro intento limpio
|
|
# pasaría por exponer el clang/LLVM que zig empaqueta y construir con `make LLVM=1` (evita la capa de
|
|
# traducción de zig cc, la fuente real de los bugs). El resto del userland C SÍ es gcc-free vía zig 0.13.
|
|
# No es input del 4/4 (es el kernel que BOOTEA la VM, no algo que el 4/4 enlace).
|
|
#
|
|
# Config: defconfig x86_64 (base PC booteable en QEMU: 8250 serial, initrd, PCI) + ajustes monolíticos
|
|
# - E1000/OVERLAY_FS/USER_NS =y (built-in): el builder usa e1000 (vendoring) + overlay (sandbox bwrap)
|
|
# + user namespaces (bwrap). Built-in ⇒ sin inyección de .ko ni version-magic.
|
|
# - VIRTIO_BLK/VIRTIO_PCI/VIRTIO_NET/EXT4_FS =y (Etapa B, imagen en disco real): permiten montar un
|
|
# disco virtio (`/dev/vda`, ext4) como root sin initramfs ⇒ `root=/dev/vda rw` directo, sin el hack
|
|
# /init+switch_root. Built-in (no módulos) porque no hay initramfs que cargue .ko antes del root.
|
|
# Aditivos: no tocan el camino initramfs del selfhost-verify (que sigue booteando igual).
|
|
# - MODULE_SIG/DEBUG_INFO_BTF off: evitan firma de módulos y pahole (BTF), ausente del toolchain.
|
|
# - UNWINDER_FRAME_POINTER en vez de ORC: reduce objtool pero NO lo elimina — en x86_64 las
|
|
# mitigaciones (RETHUNK/retpoline-validation) seleccionan CONFIG_OBJTOOL igual, y objtool necesita
|
|
# libelf (gelf.h). Además el defconfig fuerza CONFIG_SYSTEM_DATA_VERIFICATION=y (cadena KEYS←NFS/
|
|
# integrity/dns_resolver, no apagable sin desarmar media config) ⇒ su host-tool certs/extract-cert
|
|
# #incluye openssl. Por eso libelf + openssl se proveen como BOOTSTRAP-LIBS apk en bootstrap-devfs.sh
|
|
# (status g++/zlib-dev; SEGUROS para el of_tree: hammerd no usa openssl, arje-zero va preseeded).
|
|
# deps.build = [] son hammer-built; libelf/openssl quedan de-Alpinizables luego con
|
|
# recipes/{elfutils,openssl}.toml.
|
|
# - [DEUDA kikin, 2026-07-16] IO_URING + BPF_SYSCALL explícitos (contrato PLAN-KIKIN §4.bis) van
|
|
# en linux-metal/linux-generic; ACÁ NO todavía: este of_tree es LOAD-BEARING del selfhost-verify
|
|
# (baseline bit-repro) — se agregan cuando se re-ancle la baseline, no antes.
|
|
# - SECURITY_LANDLOCK + AUDIT: para que harkaq (SDD 16) corra DENTRO de hammer y no sólo en el
|
|
# laptop/la granja. El defconfig deja SECURITY_LANDLOCK off, pero el CONFIG_LSM ya lista
|
|
# `landlock` de primero ⇒ basta encenderlo, no hace falta tocar la cadena de LSMs. 6.16.12 da
|
|
# Landlock ABI 7 = el audit de denegaciones, que es de lo que cuelga toda la evidencia (§3.4).
|
|
# AUDIT ya venía =y por defconfig; se fija explícito porque sin él no se emite un solo
|
|
# registro y harkaq certificaría TODO como hermético en silencio.
|
|
# - FANOTIFY + OVERLAY_FS_{REDIRECT_DIR,INDEX,XINO_AUTO,METACOPY}: el defconfig los deja off; el
|
|
# kernel que booteaba (Arch/Artix) los tiene =y. FANOTIFY: hammerd lo usa para el watcher del
|
|
# diario (sin él: WARN ENOSYS, no fatal). Los overlay sub-features: hipótesis para el bwrap del
|
|
# sandbox (`--tmp-overlay /` falló con "pivot_root: Invalid argument" en el 1er boot).
|
|
# [WIP 2026-06-19: el bzImage BOOTEA (console ttyS0, arje-zero PID1, hammerd, red e1000 vendorea OK);
|
|
# falta que el sandbox bwrap pivote — iterando config. Build ~35min (defconfig grande, a optimizar).]
|
|
|
|
name = "linux"
|
|
version = "6.16.12"
|
|
|
|
[source]
|
|
tarball = "https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.16.12.tar.gz"
|
|
sha256 = "ffc6af80b014ddebd55e116aa29a9f7a5256c87a29a8a9dd97270b6d49625109"
|
|
|
|
[build]
|
|
compiler = "zig-cc"
|
|
target = "x86_64-linux-musl"
|
|
link = "dynamic"
|
|
|
|
[deps]
|
|
# flex (lexer kconfig) + bison (parser kconfig) + m4 (bison lo invoca en runtime) + openssl (libcrypto
|
|
# estática para certs/extract-cert). Se materializan como capa overlay en /usr (binarios en /usr/bin,
|
|
# skeletons de bison en /usr/share/bison, libcrypto.a + headers + pkgconfig en /usr/{lib,include}).
|
|
# openssl + elfutils de-Alpinizan los build-deps que antes venían de `apk add openssl-dev elfutils-dev`.
|
|
# elfutils.toml construye SÓLO libelf (lo que objtool enlaza) con shims musl (argp/error/libintl/fts/
|
|
# obstack/rawmemchr); ver su cabecera. Todo el camino del kernel es ahora hammer-from-source.
|
|
build = ["flex", "bison", "m4", "openssl", "elfutils", "busybox", "make"]
|
|
|
|
[build.phases]
|
|
configure = """
|
|
make ARCH=x86_64 defconfig && \
|
|
scripts/config -d MODULE_SIG -d MODULE_SIG_ALL -d DEBUG_INFO_BTF -d DEBUG_INFO \
|
|
-d UNWINDER_ORC -e UNWINDER_FRAME_POINTER \
|
|
-e BLK_DEV_INITRD -e DEVTMPFS -e DEVTMPFS_MOUNT -e TMPFS \
|
|
-e E1000 -e OVERLAY_FS -e USER_NS -e NAMESPACES \
|
|
-e FANOTIFY -e FANOTIFY_ACCESS_PERMISSIONS \
|
|
-e SECURITY -e SECURITY_LANDLOCK -e AUDIT \
|
|
-e OVERLAY_FS_REDIRECT_DIR -e OVERLAY_FS_INDEX -e OVERLAY_FS_XINO_AUTO -e OVERLAY_FS_METACOPY \
|
|
-e VIRTIO -e VIRTIO_PCI -e VIRTIO_BLK -e VIRTIO_NET -e EXT4_FS \
|
|
-d DRM -d AGP -d FB -d BACKLIGHT_CLASS_DEVICE -d SOUND -d SND \
|
|
-d USB_SUPPORT -d MEDIA_SUPPORT -d INFINIBAND -d BT -d NFC -d CAN \
|
|
-d WLAN -d WIRELESS -d CFG80211 -d MAC80211 -d RFKILL \
|
|
-d HID_SUPPORT -d HID -d INPUT_MOUSE -d INPUT_JOYSTICK -d INPUT_TABLET -d INPUT_TOUCHSCREEN \
|
|
-d WATCHDOG -d THUNDERBOLT -d FIREWIRE -d HWMON -d POWER_SUPPLY -d MEMSTICK -d MMC \
|
|
-d ATA -d SCSI -d NVME_CORE -d MD -d STAGING -d IIO -d PPS -d PTP_1588_CLOCK \
|
|
-d XFS_FS -d BTRFS_FS -d F2FS_FS -d JFS_FS -d REISERFS_FS -d GFS2_FS -d NTFS3_FS \
|
|
-d DRM_I915 -d DRM_AMDGPU -d DRM_NOUVEAU -d DRM_RADEON && \
|
|
make ARCH=x86_64 olddefconfig
|
|
"""
|
|
compile = "make ARCH=x86_64 CC=gcc HOSTCC=gcc -j\"$(nproc)\" bzImage"
|
|
install = "mkdir -p /out/boot && cp arch/x86/boot/bzImage /out/boot/bzImage && cp .config /out/boot/config-6.16.12"
|