tawasuyu

tawasuyu/brahman

Rust 582TOML 222Markdown 73JSON 198595 Definitions

feat(arje): cadena DM activa — kmod virtio_gpu + carmen-dm en arje-prod

- seed arje-prod gana dos Cards antes de getty-tty1:
  * kmod-gpu (OneShot): modprobe virtio_gpu — pone /dev/dri/card0
    listo antes de que el compositor intente abrir DRM/KMS.
  * carmen-dm (Restart): /usr/bin/mirada-compositor --greeter --drm,
    con MIRADA_GREETER_BIN apuntando a /usr/bin/mirada-greeter.

- install-arje-as-init.sh gana paso 1b: build nativo (no-musl) de
  mirada-compositor y mirada-greeter. GPUI/Mesa/EGL son dinámicos
  contra glibc — la cadena DM no puede vivir en el binario musl
  estático de arje-zero. Si el build falla por dev-libs ausentes,
  se imprime la lista de paquetes Fedora que faltan y se sigue
  (la instalación de arje-zero no se rompe).

- En el paso de instalación, los binarios del compositor se copian
  a /usr/bin/ sólo si el build de paso 1b tuvo éxito; ldconfig
  comprueba libEGL en runtime y avisa si falta.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

d40382ad01dd91b7b7a8d55e58e7d62ddb168a67 · by sergio · (5 months ago) · parent 28c2e6af1 · browse the tree at this commit

Semantic delta

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

2 files · +73 −0

diff --git a/scripts/install-arje-as-init.sh b/scripts/install-arje-as-init.sh
index d9b378c..a34fa6a 100755
--- a/scripts/install-arje-as-init.sh
+++ b/scripts/install-arje-as-init.sh
@@ -85,6 +85,21 @@ echo "  (la PRIMERA vez tarda 10-20 minutos en una VPS de 4 GB; la salida"
 echo "   de cargo va a fluir directo a esta terminal — no es un cuelgue)"
 "$SCRIPT_DIR/build-arje-initrd.sh" "$SEED" /tmp/arje-noop.cpio.gz
 rm -f /tmp/arje-noop.cpio.gz
+
+# Paso 1b: compositor + greeter (target nativo, no musl — arrastran
+# Mesa/EGL/Wayland dinámicos). Si fallan, el resto del install sigue:
+# arje-zero y los shims andan sin la cadena DM.
+echo "[install-arje] paso 1b/5: compilar mirada-compositor + mirada-greeter (target nativo)"
+HOST_BIN_DIR=""
+if cargo build --release -p mirada-compositor -p mirada-greeter; then
+  HOST_BIN_DIR="$REPO_DIR/target/release"
+else
+  echo "[install-arje] WARN: el compositor no compiló — la cadena DM no se va a activar." >&2
+  echo "  Probablemente faltan dev-libs en Fedora. Instalá y reintentá:" >&2
+  echo "    dnf install -y mesa-libGL-devel mesa-libgbm-devel libdrm-devel \\" >&2
+  echo "      libxkbcommon-devel wayland-devel libinput-devel systemd-devel \\" >&2
+  echo "      libseat-devel" >&2
+fi
 BIN_DIR="$REPO_DIR/target/$TARGET/release"
 EX_DIR="$BIN_DIR/examples"
 
@@ -105,6 +120,23 @@ done
 # espera. Lo invoca el Card `net-up` del seed.
 install -m 0755 "$SCRIPT_DIR/arje-net-up.sh" /usr/sbin/arje-net-up
 
+# Compositor + greeter, si compilaron en el paso 1b.
+if [ -n "$HOST_BIN_DIR" ]; then
+  for b in mirada-compositor mirada-greeter; do
+    if [ -f "$HOST_BIN_DIR/$b" ]; then
+      install -m 0755 "$HOST_BIN_DIR/$b" "/usr/bin/$b"
+    else
+      echo "[install-arje] WARN: $HOST_BIN_DIR/$b no existe — no se instala" >&2
+    fi
+  done
+fi
+# Aviso de libs runtime — no son fatales para arje-zero, pero sí para
+# que el compositor pueda dibujar.
+if ! ldconfig -p 2>/dev/null | grep -q 'libEGL'; then
+  echo "[install-arje] aviso: libEGL no detectada en runtime — el compositor no podrá renderear" >&2
+  echo "  Para activar la cadena DM: dnf install -y mesa-dri-drivers mesa-libgbm mesa-libEGL libxkbcommon libseat" >&2
+fi
+
 echo "[install-arje] paso 3/5: instalar seed en /ente/seed.card.json"
 mkdir -p /ente
 # Backup del seed previo (si lo hay) — nunca sobrescribimos sin guardar.
diff --git a/seeds/arje-prod.card.json b/seeds/arje-prod.card.json
index 8d1fd84..fac008d 100644
--- a/seeds/arje-prod.card.json
+++ b/seeds/arje-prod.card.json
@@ -302,6 +302,47 @@
       "lifecycle": "daemon", "priority": "high",
       "flow": { "input": [], "output": [] }, "genesis": []
     },
+    {
+      "schema_version": 1,
+      "id": "01J8YVKZQ0M0M0M0M0M0M0M0K0",
+      "lineage": null,
+      "label": "kmod-gpu",
+      "provides": [], "requires": [],
+      "permissions": { "networking": "none", "filesystem": "read-write", "ipc": { "allow": [] }, "processes": true },
+      "soma": { "namespaces": {"mount":false,"pid":false,"net":false,"uts":false,"ipc":false,"user":false,"cgroup":false},
+                "rlimits": {"mem_bytes":null,"nproc":null,"nofile":null},
+                "cgroup": {"path":"ente.slice/kmod","cpu_weight":null,"io_weight":null},
+                "cpu_affinity": null },
+      "payload": { "Native": { "exec": "/usr/sbin/modprobe", "argv": ["virtio_gpu"], "envp": [] } },
+      "supervision": "OneShot",
+      "lifecycle": "oneshot",
+      "priority": "critical",
+      "flow": { "input": [], "output": [] }, "genesis": []
+    },
+    {
+      "schema_version": 1,
+      "id": "01J8YVKZQ0M0M0M0M0M0M0M0CM",
+      "lineage": null,
+      "label": "carmen-dm",
+      "provides": [], "requires": [],
+      "permissions": { "networking": "loopback", "filesystem": "read-write", "ipc": { "allow": [] }, "processes": true },
+      "soma": { "namespaces": {"mount":false,"pid":false,"net":false,"uts":false,"ipc":false,"user":false,"cgroup":false},
+                "rlimits": {"mem_bytes":null,"nproc":null,"nofile":null},
+                "cgroup": {"path":"ente.slice/carmen","cpu_weight":null,"io_weight":null},
+                "cpu_affinity": null },
+      "payload": { "Native": {
+        "exec": "/usr/bin/mirada-compositor",
+        "argv": ["--greeter", "--drm"],
+        "envp": [
+          ["PATH", "/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin"],
+          ["XDG_RUNTIME_DIR", "/run"],
+          ["MIRADA_GREETER_BIN", "/usr/bin/mirada-greeter"]
+        ]
+      } },
+      "supervision": { "Restart": { "initial": 2000, "max": 60000 } },
+      "lifecycle": "daemon", "priority": "high",
+      "flow": { "input": [], "output": [] }, "genesis": []
+    },
     {
       "schema_version": 1,
       "id": "01J8YVKZQ0M0M0M0M0M0M0M0G0",