gnome: la frontera de runtime MEDIDA — 7 typelibs, 6 proveedores, y la regla que la destapó
Venía cerrando typelibs de a uno: AccountsService → DBus-1.0 → cairo-1.0 → Gdm-1.0,
un rebuild de imagen y un arranque completo por cada uno. Cuatro rondas para
descubrir que la lista estaba escrita todo el tiempo.
`js/misc/dependencies.js` de gnome-shell ENUMERA lo que el shell exige al arrancar.
Cruzada contra el rootfs hidratado, la frontera completa es exacta:
GnomeDesktop-4.0 + GnomeBG-4.0 → gnome-desktop (YA sellada, pero -Dintrospection=false
y estática ⇒ falta la variante de isla dinámica)
Geoclue-2.0 → geoclue (sin receta)
GWeather-4.0 → libgweather (sin receta)
IBus-1.0 → ibus (sin receta)
Rsvg-2.0 → librsvg (sin receta; es Rust)
UPowerGlib-1.0 → upower (sin receta)
Los otros veinte de la lista ya están. GnomeBluetooth, NM/NMA4 y Malcontent son
condicionales y no bloquean.
REGLA, y es el precio de no haberla aplicado antes: cuando el muro es `Requiring X`,
no cierres X y vuelvas a arrancar — leé el fichero donde el programa DECLARA sus deps
de runtime y cerralas todas de una.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -48,19 +48,37 @@ gdb -batch -q -ex "set sysroot $PWD/work/gnome-qemu-rootfs" \
|
||||
-ex "core-file /tmp/core.gnome-shell" -ex "bt 25" work/gnome-qemu-rootfs/usr/bin/gnome-shell
|
||||
```
|
||||
|
||||
## EL MURO DE HOY — el typelib de AccountsService
|
||||
## EL MURO DE HOY — los typelibs de runtime de la capa JS
|
||||
|
||||
```
|
||||
Gjs-CRITICAL: JS ERROR: Error: Requiring AccountsService, version 1.0:
|
||||
Typelib file for namespace 'AccountsService', version '1.0' not found
|
||||
Execution of main.js threw exception → gnome-shell sale con código 1
|
||||
```
|
||||
No es un cuelgue ni un crash: el compositor sube, expone `wayland-0`, y el shell sale con código 1
|
||||
porque a `imports.gi.*` le falta un typelib. Cada vez que se cierra uno, aparece el siguiente.
|
||||
|
||||
No es un cuelgue: es una dep de RUNTIME que falta. La receta está escrita y medida en
|
||||
`recipes/incoming-gnome/accountsservice.toml` y **no sella todavía** por dos huecos de NUESTRA capa
|
||||
de compatibilidad, contados símbolo por símbolo en el comentario de esa receta: ocho símbolos
|
||||
`sd-*` que `libelogind` no exporta (los cinco `sd_login_monitor_*` son una API de notificación, no
|
||||
getters) y `fgetspent_r`, que es extensión de glibc y musl no tiene.
|
||||
**Y ESA ITERACIÓN ES INNECESARIA — la lista está declarada en el propio shell.**
|
||||
`js/misc/dependencies.js` enumera EXACTAMENTE lo que el shell exige al arrancar. Cruzada contra el
|
||||
rootfs hidratado, la frontera completa es de **siete typelibs**, de cinco recetas nuevas y una a
|
||||
rehacer (medido, no estimado):
|
||||
|
||||
| typelib | lo provee | estado |
|
||||
|---|---|---|
|
||||
| `GnomeDesktop-4.0`, `GnomeBG-4.0` | `gnome-desktop` | **ya sellada, pero con `-Dintrospection=false` y estática** ⇒ hace falta la variante de isla dinámica |
|
||||
| `Geoclue-2.0` | geoclue | sin receta |
|
||||
| `GWeather-4.0` | libgweather | sin receta |
|
||||
| `IBus-1.0` | ibus | sin receta |
|
||||
| `Rsvg-2.0` | librsvg | sin receta (**es Rust**) |
|
||||
| `UPowerGlib-1.0` | upower | sin receta |
|
||||
|
||||
Lo demás de esa lista ya está: AccountsService, Atk, Atspi, Gcr, Gdk, Gdm, Gio, GioUnix,
|
||||
GDesktopEnums, GdkPixbuf, Graphene, Pango, Polkit, PolkitAgent, Soup, y los cinco de mutter/shell
|
||||
(Meta, Clutter, Cogl, Shell, St). `GnomeBluetooth`, `NM`/`NMA4` y `Malcontent` son condicionales de
|
||||
compilación o de runtime y no bloquean.
|
||||
|
||||
**La regla que sale de acá, y es el precio de no haberla aplicado antes: cuando el muro es
|
||||
`Requiring X`, no cierres X y vuelvas a arrancar — leé el fichero donde el programa DECLARA sus
|
||||
dependencias de runtime y cerralas todas de una.** Cada ronda de este bucle cuesta un rebuild de
|
||||
imagen y un arranque completo.
|
||||
|
||||
Cerrados por este camino hasta hoy, en orden: `AccountsService` → `DBus-1.0` (que incluye `Atspi`) →
|
||||
`cairo-1.0` (que incluyen `Gdk` y `Pango`) → `Gdm-1.0`.
|
||||
|
||||
## CÓMO CAYÓ EL MURO ANTERIOR — la hebra de input (cerrado 2026-07-29)
|
||||
|
||||
@@ -134,12 +152,20 @@ elige `/dev/dri/card0` como primaria sin quejarse. Es el rédito directo de la c
|
||||
|
||||
## Lo que falta, en orden
|
||||
|
||||
1. **`AccountsService`** (el muro de hoy): cerrar los ocho símbolos `sd-*` en `arje-sdlogin-compat`
|
||||
y `fgetspent_r`, sellar `accountsservice`, y hidratar su typelib. Ojo al costo: re-sellar
|
||||
`libelogind` re-hashea todo lo que lo declara (mutter, gnome-shell, polkit…) ⇒ pasar
|
||||
`yupana radio libelogind` ANTES de tocarlo.
|
||||
1. **Los seis proveedores de typelib de la tabla de arriba**, en una sola tanda. `gnome-desktop`
|
||||
dinámica+introspectada primero (ya está sellada, sólo cambia el modo), después geoclue,
|
||||
libgweather, upower, librsvg e ibus. Ojo al costo de `libelogind`: re-sellarla re-hashea todo lo
|
||||
que la declara (mutter, gnome-shell…) ⇒ pasar `yupana radio libelogind` ANTES de tocarla — ya
|
||||
pasó dos veces en esta campaña.
|
||||
2. **Empaquetar la política D-Bus de login1** dentro del artefacto de arje-logind-compat (hoy la
|
||||
escribe el script de imagen).
|
||||
3. Arreglar el `identity mismatch` del `Announce` al bus del fractal (hoy sólo un WARN).
|
||||
4. Con la capa JS viva: validar CON PANTALLA (`DISP=gtk`), nunca sólo por serial — regla heredada de
|
||||
KDE ([[metal-dual-desktop-en-curso]]).
|
||||
|
||||
## Recetas nuevas de esta etapa
|
||||
|
||||
`accountsservice` (b3:0328b0d0, + parche `fgetspent_r` para musl) · `gi-foreign-typelibs`
|
||||
(b3:c8a4d2f8 — un `.gir` NO es un typelib: gjs resuelve contra el compilado) · `libgdm`
|
||||
(b3:46fac484 — sólo la librería cliente; el demonio sigue aparcado por linux-pam).
|
||||
`libelogind` pasó de 14 a 25 símbolos en tres tandas.
|
||||
|
||||
Reference in New Issue
Block a user