157 lines
12 KiB
Markdown
157 lines
12 KiB
Markdown
# HANDOFF — sesión nocturna autónoma KDE (2026-07-13→14)
|
||
|
||
Trabajo desatendido continuando la campaña KDE Plasma 6 tras cerrar H-QML. Estado y próximos pasos.
|
||
|
||
## Lo logrado esta noche (todo committeado+pusheado a main)
|
||
|
||
1. **Hidratación FHS del escritorio COMPLETO, rebuild-free** (commit d6944b2). `hammer hydrate <hash>
|
||
--into` proyecta artefactos SELLADOS del store sin reproduce (el `install`-reproduce rebuildеa qtbase
|
||
por consumidor — hashing frágil bajo régimen dinámico). `scripts/kde/hydrate-from-store.sh` →
|
||
`work/kde-store-rootfs`: 137 pkgs, hashes = los sellados de la campaña (kwin 3a674cb6, plasma-workspace
|
||
284c862f, libplasma 963403fe, etc.).
|
||
|
||
2. **Cierre runtime COMPLETO + zlib soberano shared** (commit a7449a0).
|
||
- `scripts/kde/complete-closure.sh`: escanea DT_NEEDED de todos los ELF del rootfs y proyecta del store
|
||
lo que falte (libmount.so.1/util-linux, libltdl, libzstd, libQt6UiTools). **1269 .so, 0 faltantes.**
|
||
- `recipes/incoming-kde/zlib-shared.toml` (bd559f41): el stack GUI NEEDED `libz.so.1` por soname y
|
||
ningún artefacto lo proveía → caía al de Alpine (fuga de soberanía). `.so` fabricado del `libz.a`
|
||
PIC vía `--whole-archive`.
|
||
- **kwin_wayland ahora resuelve TODAS sus libs** y carga su plugin QPA (antes fallaba por libs faltantes).
|
||
|
||
3. **mesa-swrast construido** (softpipe/swrast, GL por software SIN LLVM, sello c59738eb; la receta
|
||
`recipes/mesa-swrast.toml` ya existía). Provee `swrast_dri.so` + `kms_swrast_dri.so` + libEGL/GLESv2
|
||
software, para render sin GPU.
|
||
|
||
4. **`scripts/kde/run-plasma-headless.sh`**: lanzador de la sesión Plasma headless (software EGL/softpipe
|
||
sobre el KMS del worker). NO funciona aún (ver abajo).
|
||
|
||
## 🎉 LANDMARK: kwin + plasmashell CORREN HEADLESS end-to-end (software, rootfs soberano)
|
||
|
||
El hack `loader --library-path` rompía el `dlopen` de plugins de kwin (QPA `create()` → core dump). **Fix
|
||
= bwrap con el rootfs merged como `/`** (`--overlay-src .dev-fs/alpine --overlay-src kde-store-rootfs
|
||
--tmp-overlay /` + `LD_LIBRARY_PATH=/usr/lib64:/usr/lib/qt6:/usr/lib:/lib`), paths FHS nativos. Con eso:
|
||
- **`kwin_wayland --virtual --width 1280 --height 800` LEVANTA el compositor** (backend virtual, framebuffer
|
||
en memoria; gbm sobre renderD128 falla pero cae a compositing por software y sigue) → **`Accepting client
|
||
connections on sockets: QList("wayland-0")`**, socket `/run/wayland-0` creado.
|
||
- **`plasmashell` CONECTA a wayland-0 y arranca** (proceso vivo, frameworkintegration/QtQuick-software
|
||
cargados). El stack Plasma 6 SOBERANO (musl/zig-cc) EJECUTA end-to-end sin GPU real.
|
||
- Se traba en `starting invalid corona "org.kde.plasma.desktop"` → **falta el paquete SHELL
|
||
`org.kde.plasma.desktop`, que provee `plasma-desktop` (NO construido aún)**. plasma-workspace da el
|
||
binario plasmashell, no el shell/corona. Ese es el único gran gap a "escritorio prende" (H-shell).
|
||
|
||
Env que funciona (bwrap): `GALLIUM_DRIVER=swrast LIBGL_ALWAYS_SOFTWARE=1 LIBGL_DRIVERS_PATH=/usr/lib/dri
|
||
MESA_LOADER_DRIVER_OVERRIDE=swrast QT_QUICK_BACKEND=software` + mesa-swrast hidratado. Gaps menores
|
||
detectados (no-fatales para arrancar, sí para un desktop limpio): D-Bus session (crear `/run/dbus` antes de
|
||
`dbus-daemon --session`), xkeyboard-config (`/usr/share/X11/xkb`), breeze-icons (icon theme), fuentes.
|
||
|
||
## Próximo directo a H-shell: plasma-desktop (EN CONSTRUCCIÓN al cierre de la noche)
|
||
`plasma-desktop` (shell org.kde.plasma.desktop) es lo único que falta para H-shell. Progreso nocturno:
|
||
- **Receta `recipes/incoming-kde/plasma-desktop.toml` DRAFTED** (patrón KF6, WITH_X11=OFF wayland-puro).
|
||
**Configura OK y COMPILA** (155 objetos). Deps nuevas que pedía: `qt5compat`, `knotifyconfig`,
|
||
`plasma5support` (las 2 últimas: qt5compat/plasma5support ya sellados; knotifyconfig lo SELLÉ, ver abajo).
|
||
- **`knotifyconfig` 6.27.0 SELLADO** (7db820f8, commit 726b309) — framework KF6 nuevo, dep de plasma-desktop.
|
||
- **Al cierre (CAVEAT IMPORTANTE)**: `hammer build plasma-desktop` dispara un **rebuild casi TOTAL del
|
||
stack KDE** — la deriva de hashes (riesgo de reproducibilidad del ADR) hace cache-MISS de casi todos los
|
||
deps ya sellados (qtdeclarative, breeze, baloo, kwidgetsaddons, ktexteditor… rebuildeándose; 0 sellados
|
||
en 1.5h al cierre). Va nohup'd y **puede sellar recién en varias horas** (rebuildеa el mundo). Si por la
|
||
mañana NO selló o sigue rebuildeando deps, esta vía es inviable tal cual — ver alternativas:
|
||
- **(a) Build en un farm-up desde el snapshot de la campaña** (`hammer-kde-plasma-workspace-2026-07-13` u
|
||
otro `hammer-kde-*`): ahí los deps sellados cache-hitean (mismo entorno que la campaña) ⇒ sólo compila
|
||
los 155 objetos de plasma-desktop (~10 min). `IMAGE=<id> scripts/farm/farm-up.sh 1` + build.
|
||
- **(b) Extraer SÓLO el shell** `org.kde.plasma.desktop` (QML/data puro) si se puede aislar del build C++.
|
||
- **(c) Investigar/arreglar la deriva de hashes** de los deps (por qué hworker-4 ya no cache-hitea los
|
||
artefactos que él mismo selló en la campaña — ¿el store cambió? ¿resolución de deps de la receta?).
|
||
El artefacto plasma-desktop, cuando exista, se hidrata SOLO (su shell+applets), sin importar los deps
|
||
rebuildeados. Matar el build runaway: `$W 'pkill -f plasma-desktop; pkill ninja; pkill -f cmake'`.
|
||
|
||
### plasma-desktop — ESTADO FINAL de la noche (~08:40) + BUG CLAVE
|
||
**BUG CLAVE resuelto (aplica a TODA la campaña):** el sandbox de build usa **busybox grep, que NO soporta
|
||
`--include`** ⇒ un `sed` vía `grep -rl ... --include=CMakeLists.txt` falla SILENCIOSO (for-loop vacío).
|
||
Usar seds DIRECTOS sobre el fichero (`sed -i '...' CMakeLists.txt`). Esto me costó ~5 intentos creyendo
|
||
que el patch de libwacom no aplicaba.
|
||
|
||
**Cadena de configure resuelta** (todo en la receta, seds directos + deps): `qt5compat`✓ `knotifyconfig`✓
|
||
(SELLADO 7db820f8) `plasma5support`✓ `qqc2-desktop-style`✓ `plasma-workspace`✓(añadido — provee
|
||
LibKLookAndFeel/LibKWorkspace/LibTaskManager/LibNotificationManager) `xkeyboard-config`✓(SELLADO 37756ac8,
|
||
para ConfigureChecks `xkb_base`) + patches a opcional: KF6NetworkManagerQt, KF6DocTools, libwacom,
|
||
KSMServerDBusInterface (wayland-puro no tiene ksmserver), xkbregistry + `add_subdirectory(kcms)` removido.
|
||
**BLOCKER VIVO al cerrar**: `feature_summary` aborta por REQUIRED no hallados: **XCB-XKB** (kcm/keyboard),
|
||
**KF6Kirigami**, **KF6QQC2DesktopStyle** (¡ambos EN deps — no deberían faltar!), **EGL** (mesa lo provee),
|
||
**Qt6QuickWidgets** (módulo de qtdeclarative). Que kirigami/qqc2 falten pese a estar en deps sugiere una
|
||
interacción de la remoción de kcms o del régimen wayland-puro (o falta materializar EGL/QuickWidgets .pc).
|
||
**Investigar con cabeza fresca**: (1) ¿por qué kirigami/qqc2 no se hallan si están en deps y otros KF6 sí?
|
||
(2) EGL → ¿egl.pc de mesa en PKG_CONFIG_PATH? (3) Qt6QuickWidgets → ¿dep explícito? (4) XCB-XKB es del
|
||
kcm/keyboard: si molesta, hay find_package/set_package_properties REQUIRED top-level que sobreviven a la
|
||
remoción del subdir — patchearlos. Receta muy avanzada; falta este último tramo de feature_summary.
|
||
|
||
### (referencia previa) Cadena de blockers de plasma-desktop
|
||
Los deps CACHE-HITEAN (no hay cascada — el build compila ~155 obj en ~15 min); el problema es la
|
||
de-Alpinización del configure. Blockers resueltos en la receta: `qt5compat`✓ `knotifyconfig`✓(SELLADO
|
||
7db820f8) `plasma5support`✓ `qqc2-desktop-style`✓ + patches a opcional de `KF6NetworkManagerQt`/`KF6DocTools`
|
||
+ `libwacom`→sin-REQUIRED + `add_subdirectory(kcms)` REMOVIDO (el shell vive en containments/applets, no en
|
||
los KCMs de System Settings, que traen el infierno kaccounts/wacom/touchpad). **Blocker vivo al parar**:
|
||
`libwacom` + `KAccounts6` REQUIRED los piden subdirs NO-kcms (applets/containments). **Recomendación para
|
||
cerrar**: podar los subdirs/applets que exigen accounts/wacom (mismo patrón: `sed -i '/add_subdirectory(X)/d'`)
|
||
o buildear SHELL-ONLY. El objetivo mínimo es que el artefacto contenga
|
||
`/usr/share/plasma/shells/org.kde.plasma.desktop/` + los containments base (desktop/panel) + applets core
|
||
(kickoff/taskmanager/systemtray/folder) — con eso plasmashell carga la corona. Una vez que selle:
|
||
hidratar SOLO el artefacto plasma-desktop al rootfs y re-correr `run-plasma-headless.sh`.
|
||
Build detenido al cierre (no dejar corriendo: el estado del build-dir se enredó entre intentos).
|
||
|
||
### Comandos de la mañana (retomar plasma-desktop → intentar H-shell)
|
||
```
|
||
W="ssh -i ~/.ssh/github5 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@95.217.179.242"
|
||
# 1) ¿selló plasma-desktop?
|
||
$W 'cd /opt/hammer; grep -E "sealed.*plasma-desktop|PD_EXIT=" work/build-plasma-desktop.log | tail -3'
|
||
# si NO selló y no hay build vivo (ps), relanzar:
|
||
# $W 'cd /opt/hammer; nohup sh -c "NO_PROXY=localhost NIX_STORE=\$HOME/.nixstore ./target/release/hammer --store ./store build recipes/incoming-kde/plasma-desktop.toml; echo PD_EXIT=\$?" > work/build-plasma-desktop.log 2>&1 &'
|
||
# 2) al sellar: hidratar plasma-desktop al rootfs headless + su cierre
|
||
$W 'cd /opt/hammer; H=$(ls -dt store/*-plasma-desktop|head -1|sed -E "s|store/([0-9a-f]+)-.*|\1|"); \
|
||
./target/release/hammer --store ./store hydrate $H --into work/kde-store-rootfs --link static; \
|
||
RFS=work/kde-store-rootfs scripts/kde/complete-closure.sh'
|
||
# 3) correr la sesión (¿carga la corona org.kde.plasma.desktop ahora?):
|
||
$W 'cd /opt/hammer; SECS=40 scripts/kde/run-plasma-headless.sh 2>&1 | tail -40'
|
||
# Buscar en client.log: ¿desapareció "invalid corona"? ¿aparecen containments/panel?
|
||
```
|
||
Posibles blockers restantes de plasma-desktop (si el build falla más adelante): más frameworks KF6 no
|
||
construidos (mismo método: configure delata `Could NOT find KF6Xxx` → draftar receta clonando
|
||
knotifyconfig.toml → sellar → añadir a deps). Candidatos: kpeople, baloo (→lmdb), kaccounts, libxkbfile.
|
||
Opcionales pesados a apagar por flag si aparecen REQUIRED: ibus, packagekit, pulseaudio/pipewire.
|
||
|
||
### Piezas de datos que faltan para un desktop LIMPIO (no bloquean el arranque)
|
||
- **fuentes**: `xkeyboard-config-2.44.tar.xz` sha `54d2c33eeebb031d48fa590c543e54c9bcbd0f00386ebc6489b2f47a0da4342a`
|
||
(para `/usr/share/X11/xkb`, quita el error xkb); una receta de fuentes dejavu (Qt ya no las trae).
|
||
- **breeze-icons** (icon theme "breeze not found").
|
||
|
||
## Camino paralelo: METAL (tu laptop TigerLake/Intel)
|
||
|
||
El rootfs está hecho para **GPU Intel real (`iris_dri.so`)**, no software. Donde kwin renderiza de verdad
|
||
es tu laptop. Para probar H-shell mañana:
|
||
|
||
1. **Regenerar el rootfs de producto con Mesa IRIS** (NO swrast — esta noche se le hizo swap a swrast para
|
||
el intento headless; revertir):
|
||
```
|
||
# en el worker (o local con el store):
|
||
RFS=work/kde-metal-rootfs TARGETS="plasma-workspace kwin kscreenlocker breeze frameworkintegration \
|
||
qqc2-desktop-style plasma-integration" scripts/kde/hydrate-from-store.sh
|
||
RFS=work/kde-metal-rootfs scripts/kde/complete-closure.sh # cierra libmount/libz/etc.
|
||
# asegurar iris (mesa canónico) hidratado, NO mesa-swrast
|
||
```
|
||
2. **Fuentes**: falta desplegar TTFs (dejavu) — Qt ya no las trae (`QFontDatabase: Cannot find font
|
||
directory`). Cosmético pero necesario para texto. (Pendiente: receta dejavu-fonts.)
|
||
3. **Empaquetar como imagen booteable EFI** (`scripts/install-image-efi.sh` / `disk-image.sh`) con
|
||
kernel-metal ([[etapa-metal-usb]]) + un init que lance `startplasma-wayland`, y bootear en el laptop
|
||
(Secure Boot OFF).
|
||
|
||
## Alternativa productiva (si se prefiere seguir en el worker)
|
||
|
||
- **Capa 2 KF6 / apps núcleo**: importar+construir `konsole`/`dolphin`/`kate` vía granja (extiende el
|
||
escritorio usable). Verificable (sellan o no).
|
||
- **Seguir debug headless**: correr kwin bajo gdb en el worker para el backtrace del core dump del QPA;
|
||
probar `KWIN_DRM_NO_AMS=1`, `WLR_RENDERER=pixman`-equivalentes, o el backend `--virtual` con distinto
|
||
EGL (`EGL_PLATFORM=surfaceless`).
|
||
|
||
## Comandos útiles
|
||
- Worker: `ssh -i ~/.ssh/github5 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@95.217.179.242` (cd /opt/hammer). zsh: `${=VAR}` para splitear.
|
||
- Rootfs actual: `work/kde-store-rootfs` (con mesa-swrast swapped). Rehidratar limpio con los scripts de arriba.
|