From d40382ad01dd91b7b7a8d55e58e7d62ddb168a67 Mon Sep 17 00:00:00 2001 From: sergio Date: Sat, 23 May 2026 02:51:07 +0000 Subject: [PATCH] =?UTF-8?q?feat(arje):=20cadena=20DM=20activa=20=E2=80=94?= =?UTF-8?q?=20kmod=20virtio=5Fgpu=20+=20carmen-dm=20en=20arje-prod?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- scripts/install-arje-as-init.sh | 32 +++++++++++++++++++++++++ seeds/arje-prod.card.json | 41 +++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) 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",