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 Sutichaykuna

⎇ 476168bb077db780e49c83e3ca4f0d3d230bd58a scripts/lib/pid1-desde-store.sh Shell · 44 siq'ikuna · 2.8 KB Ñawpa willay ch'uya

takana etapa 5c: comentarios de scripts, MOTD, y un BUG que introdujo la etapa 4 476168bb0 · Sergio ·

1# pid1-desde-store.sh — helper compartido por los scripts de imagen: poner en el rootfs fundido el
2# arje-zero SELLADO, no el que venga arrastrado del directorio base.
3#
4# ── POR QUÉ EXISTE ──────────────────────────────────────────────────────────────────────────────
5# `work/metal-rootfs` se armó a mano en la campaña de metal y quedó CONGELADO: su `arje-zero` era del
6# 2026-06-19. Nadie lo regeneraba al re-sellar la receta, así que cada imagen de escritorio —GNOME,
7# KDE, metal, dual— arrancaba con un PID1 de hace mes y medio **sin que nada lo dijera**.
8#
9# Así se comió un fix real: el `identity mismatch` del bus del fractal estaba arreglado río arriba
10# (tawasuyu ce96cfa8d) y la VM seguía imprimiendo el mensaje viejo, porque el binario de la imagen no
11# venía de la receta. Se pasaron sesiones creyendo que era un bug nuestro por arreglar.
12#
13# El síntoma es engañoso porque el directorio base es LEGÍTIMO para todo lo demás —busybox, firmware,
14# el kernel EFI-stub, la estructura de /etc—: sólo la pieza que TAMBIÉN es receta se queda atrás, y
15# justo esa es PID1. De ahí la regla:
16#
17#   **si algo del rootfs tiene receta, la imagen lo toma del artefacto sellado, no de la copia
18#   congelada.**
19#
20# El artefacto se elige por `takana hash` sobre la receta —el que corresponde a la receta de HOY—, no
21# por el más reciente del store: con dos artefactos del mismo paquete conviviendo, la fecha miente.
22# Mismo criterio que ya usaban los inyectores de arje-logind-compat y arje-polkit-compat.
23#
24# ABORTA si no hay artefacto. Es deliberado: seguir con el PID1 congelado es exactamente el modo de
25# falla que este helper existe para cerrar, y un aviso que no corta se lee como ruido.
26#
27# Uso:  . scripts/lib/pid1-desde-store.sh ; inyectar_pid1 "$MERGED" "$BASE"
28# Var:  AZ=<dir del store>  fuerza un artefacto concreto (diagnóstico).
29
30inyectar_pid1() {
31  local merged="$1" base="${2:-}" az
32  echo "==> PID1: arje-zero desde el store${base:+ (no desde $base)}"
33  az="${AZ:-store/$(./target/release/takana --store store hash recipes/arje-zero.toml 2>/dev/null | tail -1 | sed 's/^b3://')-arje-zero}"
34  if [ -d "$az" ] && [ -x "$az/usr/bin/arje-zero" ]; then
35    install -Dm755 "$az"/usr/bin/arje-zero "$merged"/usr/bin/arje-zero
36    local viejo=""
37    [ -n "$base" ] && viejo=$(stat -c '%y' "$base"/usr/bin/arje-zero 2>/dev/null | cut -d' ' -f1)
38    echo "   ✓ $(basename "$az" | cut -c1-12)${viejo:+  (el de $base era de $viejo)}"
39  else
40    echo "   ✗ falta arje-zero sellado en store/ — la imagen usaría el PID1 CONGELADO${base:+ de $base}" >&2
41    echo "     construílo:  ./target/release/takana build recipes/arje-zero.toml --store store" >&2
42    return 1
43  fi
44}