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 Definiciones

⎇ 476168bb077db780e49c83e3ca4f0d3d230bd58a scripts/kde/metal-desktop-image.sh Shell · 68 líneas · 3.4 KB Historia crudo

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

1#!/usr/bin/env bash
2# metal-desktop-image.sh — arma la IMAGEN DE DISCO EFI con el escritorio KDE completo, para METAL.
3#
4# Funde dos rootfs y delega el particionado en scripts/install-image-efi.sh (ADR 0010 paso 5: EFI-stub
5# soberano, initrd chico de pivote → switch_root a la ext4 real ⇒ el sistema NO vive en RAM, que es lo que
6# hace inviable el camino de metal-usb-sdboot.sh con un escritorio de ~7 GB).
7#
8#   work/metal-rootfs        base metal: arje-zero PID1 + busybox + firmware (i915 tgl_* + iwlwifi AX201)
9#   work/kde-metal-rootfs    KDE hidratado del store sellado (206 pkgs, cierre runtime completo)
10#   → work/metal-desktop-rootfs   (hardlinks, NO copia: no muta ninguno de los dos)
11#   → work/hammer-kde-metal.img   GPT: ESP(bzImage EFI-stub + initrd pivote) + ext4 / + /store + /var/lib/hammer
12#
13# Uso:   scripts/kde/metal-desktop-image.sh
14#        BOOT=1 KVM=1 scripts/kde/metal-desktop-image.sh    # + arranca en OVMF para validar antes de quemar
15set -euo pipefail
16ROOT="$(cd "$(dirname "$0")/../.." && pwd)"; cd "$ROOT"
17
18BASE="${BASE:-work/metal-rootfs}"
19KDE="${KDE:-work/kde-metal-rootfs}"
20MERGED="${MERGED:-work/metal-desktop-rootfs}"
21IMG="${IMG:-work/hammer-kde-metal.img}"
22
23[ -d "$BASE" ] || { echo "falta $BASE (scripts/metal-iso.sh lo arma)" >&2; exit 1; }
24[ -d "$KDE" ]  || { echo "falta $KDE (hidratá con scripts/kde/hydrate-recipes.py en el worker y bajalo)" >&2; exit 1; }
25
26echo "==> fundiendo rootfs por hardlinks (no muta los originales)"
27# Los dos árboles son COMPLEMENTARIOS, no rivales:
28#   base → musl libc + loader + busybox + arje-zero + firmware   (el "sustrato soberano")
29#   KDE  → Qt/KF6/Plasma/apps                                    (complete-closure.sh NO hidrata la libc:
30#          "los sonames del sustrato base los provee la base del sistema destino")
31# Se pone la base primero y KDE encima; en los pocos nombres que coincidan gana KDE.
32rm -rf "$MERGED"
33cp -al "$BASE" "$MERGED"
34cp -al --remove-destination "$KDE"/. "$MERGED"/
35
36. "$ROOT/scripts/lib/pid1-desde-store.sh"
37inyectar_pid1 "$MERGED" "$BASE"
38
39echo "==> instalando /usr/bin/plasma-start"
40install -Dm755 scripts/kde/plasma-start-metal.sh "$MERGED/usr/bin/plasma-start"
41
42# El escritorio necesita estos dirs runtime; el rootfs es de sólo-lectura hasta que switch_root monta la ext4.
43mkdir -p "$MERGED/root/.config" "$MERGED/root/.cache" "$MERGED/run/user/0" "$MERGED/tmp"
44chmod 1777 "$MERGED/tmp"
45
46# motd: que el usuario sepa qué correr al llegar al shell.
47cat > "$MERGED/etc/motd" <<'MOTD'
48
49  #-- takana :: escritorio KDE Plasma 6 (metal) ------------------------------
50   Todo construido desde fuente con hammer (musl + zig-cc), sin binarios ajenos.
51
52   Arrancar el escritorio:   plasma-start
53   Logs si algo falla:       /tmp/kwin.log  /tmp/plasmashell.log
54   Diagnóstico GPU:          dmesg | grep -iE 'i915|drm'
55  ---------------------------------------------------------------------------
56
57MOTD
58
59echo "==> rootfs fundido: $(du -sh "$MERGED" | cut -f1)  ($(find "$MERGED" -name '*.so*' | wc -l) .so, $(ls "$MERGED"/usr/bin | wc -l) bins)"
60
61# La ext4 de / debe entrar el rootfs + holgura. Se calcula del tamaño real y se redondea hacia arriba.
62need_mb=$(du -sm "$MERGED" | cut -f1)
63ROOT_SIZE="${ROOT_SIZE:-$(( need_mb + 1536 ))}"
64echo "==> ROOT_SIZE=${ROOT_SIZE} MiB (rootfs ${need_mb} MiB + holgura)"
65
66export ROOTFS="$MERGED" IMG ROOT_SIZE
67export ESP_MB="${ESP_MB:-128}" STORE_SIZE="${STORE_SIZE:-512}" STATE_SIZE="${STATE_SIZE:-768}"
68exec ./scripts/install-image-efi.sh