estado: cosecha granja 2026-07-30T23:20:59Z — avance del árbol KDE
This commit is contained in:
@@ -388,9 +388,22 @@ elige `/dev/dri/card0` como primaria sin quejarse. Es el rédito directo de la c
|
||||
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).
|
||||
2. ✅ **HECHO** — la política D-Bus de login1 (y la de PolicyKit1) viaja dentro del artefacto de su
|
||||
daemon, no en el script de imagen. Un servicio que no puede adueñarse de su nombre no es un
|
||||
servicio: la política es parte de lo que el paquete promete. El script de imagen ahora sólo las
|
||||
COPIA y **verifica que llegaron** — y esa verificación destapó de entrada que el script inyectaba
|
||||
el binario del shim de polkit sin su `.conf`.
|
||||
3. ✅ **HECHO, y este ítem estaba mal escrito en dos sentidos.** El `identity mismatch` no lo emite
|
||||
arje-logind-compat sino el `bus_mediator` de **arje-zero**; y no había nada que arreglar acá,
|
||||
porque **ya estaba arreglado río arriba** (tawasuyu `ce96cfa8d`, 2026-07-29). Lo que teníamos era
|
||||
un PID1 viejo: nuestro log decía `rechazando request` y la fuente actual dice `sigo como anónimo`.
|
||||
Tampoco era «sólo un WARN» — el commit del fix se llama *«apagar/reiniciar moría por un ENTE_ID
|
||||
heredado, no por permisos»*: `ENTE_ID` lo hereda todo el árbol de procesos, cualquier nieto
|
||||
reclamaba esa identidad con su propio pid y el mediador rechazaba la request **entera**.
|
||||
Se movió el pin de `recipes/arje-zero.toml` al mismo commit que ya usan los dos compat daemons
|
||||
(ver el comentario de la receta: por qué NO se cherry-pickeó, con la medición).
|
||||
**La lección general: antes de arreglar un WARN, buscá quién lo emite y si ya está arreglado
|
||||
upstream.** Nuestro pin estaba 3951 commits detrás y nadie lo había mirado.
|
||||
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]]).
|
||||
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
"totals": {
|
||||
"recipes": 849,
|
||||
"nodes": 849,
|
||||
"sealed": 843,
|
||||
"sealed": 842,
|
||||
"debt": 1,
|
||||
"never": 6
|
||||
},
|
||||
"by_class": {
|
||||
@@ -14,12 +15,13 @@
|
||||
"rust": 229
|
||||
},
|
||||
"debt_by_class": {
|
||||
"c": 3,
|
||||
"c": 4,
|
||||
"gui": 3
|
||||
},
|
||||
"by_queue": {
|
||||
"corpus": {
|
||||
"sealed": 761,
|
||||
"sealed": 760,
|
||||
"debt": 1,
|
||||
"never": 2
|
||||
},
|
||||
"incoming-gnome": {
|
||||
@@ -604,8 +606,8 @@
|
||||
"deps": [],
|
||||
"cls": "c",
|
||||
"queue": "corpus",
|
||||
"hash": "b3:69e2cab8ac00c33cde7680eb393952e2c7f9ae9af24c180c6593d7a86482efb9",
|
||||
"state": "sealed",
|
||||
"hash": "b3:e570c14824320ba5787cbcc756ea691a61c38f04ddc6dbb1eaf4b5567b2bc7fe",
|
||||
"state": "debt",
|
||||
"blocked_by": [],
|
||||
"unblocks": 0,
|
||||
"perfiles": [],
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
"totals": {
|
||||
"recipes": 963,
|
||||
"nodes": 967,
|
||||
"sealed": 914,
|
||||
"sealed": 913,
|
||||
"debt": 48,
|
||||
"never": 2,
|
||||
"debt": 47,
|
||||
"wanted": 4
|
||||
},
|
||||
"by_class": {
|
||||
@@ -17,12 +17,13 @@
|
||||
"wanted": 4
|
||||
},
|
||||
"debt_by_class": {
|
||||
"c": 48,
|
||||
"c": 49,
|
||||
"gui": 1
|
||||
},
|
||||
"by_queue": {
|
||||
"corpus": {
|
||||
"sealed": 756,
|
||||
"sealed": 755,
|
||||
"debt": 1,
|
||||
"never": 2
|
||||
},
|
||||
"incoming-kde": {
|
||||
@@ -554,8 +555,8 @@
|
||||
"deps": [],
|
||||
"cls": "c",
|
||||
"queue": "corpus",
|
||||
"hash": "b3:69e2cab8ac00c33cde7680eb393952e2c7f9ae9af24c180c6593d7a86482efb9",
|
||||
"state": "sealed",
|
||||
"hash": "b3:e570c14824320ba5787cbcc756ea691a61c38f04ddc6dbb1eaf4b5567b2bc7fe",
|
||||
"state": "debt",
|
||||
"blocked_by": [],
|
||||
"unblocks": 0,
|
||||
"perfiles": [],
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
"totals": {
|
||||
"recipes": 770,
|
||||
"nodes": 770,
|
||||
"sealed": 768,
|
||||
"sealed": 767,
|
||||
"debt": 1,
|
||||
"never": 2
|
||||
},
|
||||
"by_class": {
|
||||
@@ -14,11 +15,12 @@
|
||||
"rust": 228
|
||||
},
|
||||
"debt_by_class": {
|
||||
"c": 2
|
||||
"c": 3
|
||||
},
|
||||
"by_queue": {
|
||||
"corpus": {
|
||||
"sealed": 768,
|
||||
"sealed": 767,
|
||||
"debt": 1,
|
||||
"never": 2
|
||||
}
|
||||
},
|
||||
@@ -522,8 +524,8 @@
|
||||
"deps": [],
|
||||
"cls": "c",
|
||||
"queue": "corpus",
|
||||
"hash": "b3:69e2cab8ac00c33cde7680eb393952e2c7f9ae9af24c180c6593d7a86482efb9",
|
||||
"state": "sealed",
|
||||
"hash": "b3:e570c14824320ba5787cbcc756ea691a61c38f04ddc6dbb1eaf4b5567b2bc7fe",
|
||||
"state": "debt",
|
||||
"blocked_by": [],
|
||||
"unblocks": 0,
|
||||
"perfiles": [],
|
||||
|
||||
+28
-6
@@ -14,14 +14,36 @@
|
||||
name = "arje-zero"
|
||||
version = "0.0.1"
|
||||
|
||||
# ── POR QUÉ SE MOVIÓ EL PIN (2026-07-30) ────────────────────────────────────────────────────────
|
||||
# El runbook de GNOME pedía «arreglar el `identity mismatch` del Announce al bus del fractal (hoy
|
||||
# sólo un WARN)». Eran dos cosas mal: no lo emite arje-logind-compat sino el `bus_mediator` de
|
||||
# arje-zero, y **no había nada que arreglar acá — ya estaba arreglado río arriba**, en tawasuyu
|
||||
# `ce96cfa8d` (2026-07-29). Nuestro binario era viejo, nada más: el log de la VM decía
|
||||
# `identity mismatch — rechazando request` y la fuente actual dice `sigo como anónimo`.
|
||||
#
|
||||
# Y no era cosmético, aunque el log lo pareciera. El commit del fix se llama «apagar/reiniciar moría
|
||||
# por un ENTE_ID heredado, no por permisos»: `ENTE_ID` se inyecta en el entorno del Ente y **lo
|
||||
# hereda todo el árbol de procesos**, así que cualquier nieto reclamaba esa identidad con su propio
|
||||
# pid, el mediador veía pid distinto y RECHAZABA la request entera. Con el fix degrada a anónimo, que
|
||||
# es lo correcto: la identidad no se prueba, pero los verbos anónimos siguen andando.
|
||||
#
|
||||
# EL COMMIT ELEGIDO no es nuevo: es **el mismo que ya usa `arje-polkit-compat`**, de la rama
|
||||
# `selfhost/arje-zero-attest-lockfile`. Se llegó a él descartando el camino obvio: la rama vieja
|
||||
# (`selfhost/arje-zero-lockfile`, 9967b02c) está **3951 commits detrás de main** y el cherry-pick del
|
||||
# fix choca contra ficheros que allá ni existen — este mismo `bus_mediator.rs` creció 966 líneas en el
|
||||
# medio. O sea que arje-zero se reescribió, y traer «sólo el fix» era ficción. La rama de attest, en
|
||||
# cambio, ya CONTIENE `ce96cfa8d`, ya versiona el `Cargo.lock` de la raíz (lo mismo que motivaba la
|
||||
# rama vieja) y ya está probada: es el árbol del que salen los dos compat daemons. Las tres recetas
|
||||
# tawasuyu quedan en un solo commit, que es una propiedad que vale por sí sola.
|
||||
[source]
|
||||
# El `commit` es el identificador inmutable (la URL es sólo locator, no entra al hash). Fijado en
|
||||
# `selfhost/arje-zero-lockfile` = la migración A0 (arje-cas → BLAKE3, 35ec8ef9) + el Cargo.lock del
|
||||
# workspace committeado encima: sin lock, el monorepo lo gitignora y el fetch vendorea SIN --locked
|
||||
# ⇒ las deps derivan en el tiempo y arje-zero (y of_tree(stage1)) deja de ser reproducible. Con el
|
||||
# lock fijo el build es --locked y bit-reproducible.
|
||||
# El `commit` es el identificador inmutable (la URL es sólo locator, no entra al hash). Sin el
|
||||
# `Cargo.lock` del workspace el monorepo lo gitignora, el fetch vendorea SIN --locked ⇒ las deps
|
||||
# derivan en el tiempo y arje-zero (y of_tree(stage1)) deja de ser reproducible.
|
||||
repo = "gitea@git.tawasuyu.net:tawasuyu/tawasuyu.git"
|
||||
commit = "9967b02cf597df6d065edbad8d6669b5653d4928"
|
||||
commit = "98db584fd28d9ff2bf34c9cf7d7db2e1de0b3fd0"
|
||||
# Este árbol COMMITEA su propio `vendor/` (la copia parcheada de smithay que mirada necesita) y el
|
||||
# `cargo vendor` de hammer lo pisaría. Ver [[hammer-cargo-vendor-clobbers-project-vendor]].
|
||||
cargo_vendor_dir = ".hammer-cargo-vendor"
|
||||
|
||||
[build]
|
||||
compiler = "zig-cc"
|
||||
|
||||
@@ -31,6 +31,29 @@ rm -rf "$MERGED"
|
||||
cp -al "$BASE" "$MERGED"
|
||||
cp -al --remove-destination "$GNOME"/. "$MERGED"/
|
||||
|
||||
# ── PID1 DESDE EL STORE, no desde el directorio base ────────────────────────────────────────────
|
||||
# `work/metal-rootfs` se armó a mano en la campaña de metal y quedó CONGELADO: su `arje-zero` era de
|
||||
# 2026-06-19. Nadie lo re-generaba al re-sellar la receta, así que cada imagen de escritorio arrancaba
|
||||
# con un PID1 de hace mes y medio sin que nada lo dijera. Así se comió el fix del `identity mismatch`:
|
||||
# arje-zero se había arreglado río arriba y la VM seguía imprimiendo el mensaje viejo.
|
||||
#
|
||||
# El síntoma es engañoso porque el directorio base es LEGÍTIMO para todo lo demás (busybox, firmware,
|
||||
# el kernel EFI-stub): sólo la pieza que también es receta se queda atrás. Regla: **si algo del rootfs
|
||||
# tiene receta, la imagen lo toma del artefacto sellado, no de la copia congelada.**
|
||||
#
|
||||
# Se elige por `hammer hash` —el artefacto que corresponde a la receta de HOY—, mismo criterio que los
|
||||
# dos compat daemons de más abajo; el más reciente por fecha miente en cuanto conviven dos.
|
||||
echo "==> PID1: arje-zero desde el store (no desde $BASE)"
|
||||
AZ="${AZ:-store/$(./target/release/hammer --store store hash recipes/arje-zero.toml 2>/dev/null | tail -1 | sed 's/^b3://')-arje-zero}"
|
||||
if [ -d "$AZ" ] && [ -x "$AZ/usr/bin/arje-zero" ]; then
|
||||
install -Dm755 "$AZ"/usr/bin/arje-zero "$MERGED"/usr/bin/arje-zero
|
||||
echo " ✓ $(basename "$AZ" | cut -c1-12) (el de $BASE era de $(stat -c '%y' "$BASE"/usr/bin/arje-zero 2>/dev/null | cut -d' ' -f1))"
|
||||
else
|
||||
echo " ✗ falta arje-zero sellado en store/ — la imagen usaría el PID1 CONGELADO de $BASE" >&2
|
||||
echo " construílo: ./target/release/hammer build recipes/arje-zero.toml --store store" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "==> parcheando mesa software desde $MESA"
|
||||
# El cierre GNOME trae mesa con SÓLO iris_dri.so (Intel real). En QEMU no hay GPU: hace falta
|
||||
# kms_swrast. Se copian los .so de mesa-llvmpipe ENCIMA (--remove-destination rompe el hardlink).
|
||||
|
||||
Reference in New Issue
Block a user