From 699bbe8475bb40289fb7cb297ddb1478e351a242 Mon Sep 17 00:00:00 2001 From: Sergio Date: Sun, 6 Sep 2026 06:23:47 +0000 Subject: [PATCH] =?UTF-8?q?waterfox:=20BuildID=20determinista=20=E2=80=94?= =?UTF-8?q?=20SELL=C3=93=20EN=20VERDE=20sin=20reproducir?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit waterfox selló (b3:e65c0221, 377 M, 43 ficheros) y el artefacto NO reproduce: BuildID=20260906062042 o sea la hora del build. Y selló en VERDE, que es lo peor: el ArtifactHash es input-addressed y no se mueve por esto, así que build-state.json lo contaba como bueno. Es EXACTAMENTE el modo de fallo que el comentario de firefox.toml describe desde ayer —«el artefacto deja de reproducir SIN QUE NADA LO DIGA»— ocurriendo en la receta de al lado por no haber copiado cuatro líneas. Se exporta MOZ_BUILD_DATE en las TRES fases (son shells distintos y mach re-ejecuta configure) y se pone el mismo guardián que firefox: si el BuildID no es el que obliga SOURCE_DATE_EPOCH, el build muere. Quedan escritas en la receta otras dos cosas medidas en el application.ini del sellado, que son decisión y no bug, y por eso se documentan en vez de cambiarse: 1. El branding «oficial» de ESTE commit es el de MOZILLA, no el de Waterfox. El comentario de la receta afirmaba lo contrario. Comprobado en el árbol: branding/official/configure.sh pone MOZ_APP_DISPLAYNAME=Firefox, brand.ftl da -brand-full-name = Mozilla Firefox, y el ID es el canónico de Firefox. Hoy esto sella un binario parcheado que se presenta como «Mozilla Firefox», justo lo que firefox.toml evita yendo sin marca. La salida probable es `unofficial`, pero es política de marcas, no una perilla. 2. Colisiona de ruta con firefox: instala en usr/lib/firefox/ y usr/bin/firefox porque no se fija MOZ_APP_NAME. Hoy no rompe nada porque ninguna imagen incluye las dos; el día que una lo haga, las dos capas overlay se pelean el mismo fichero y gana una en silencio. --- recipes/waterfox.toml | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/recipes/waterfox.toml b/recipes/waterfox.toml index 3566179e..6c188625 100644 --- a/recipes/waterfox.toml +++ b/recipes/waterfox.toml @@ -43,6 +43,28 @@ # Se aparca a propósito: la prioridad pasó a `firefox` con la cadena de optimización y a `atuq` # (SDD 26). Cuando se retome, el primer paso es mirar si `browser/locales` existe en el commit # pineado — un minuto de `git ls-tree`, no un build. +# ══ ⚠ DOS COSAS MEDIDAS EN EL ARTEFACTO, SIN RESOLVER — SON DECISIÓN, NO BUG ══════════════════ +# Del `application.ini` del artefacto `b3:e65c0221` (2026-09-06), leído del sellado, no de la doc: +# +# Vendor=BrowserWorks Name=Firefox RemotingName=firefox-default +# Profile=Waterfox ID={ec8030f7-c20a-464f-9b0e-13a3a9e97384} +# +# 1) EL BRANDING «OFICIAL» DE ESTE COMMIT ES EL DE MOZILLA, NO EL DE WATERFOX. El comentario de +# más abajo dice que `browser/branding/official` es «la marca del propio Waterfox»; en ESTE +# commit no lo es. Comprobado en el árbol: `branding/official/configure.sh` pone +# `MOZ_APP_DISPLAYNAME=Firefox`, y `brand.ftl` da `-brand-short-name = Firefox` y +# `-brand-full-name = Mozilla Firefox`. El `ID` es además el ID canónico de Firefox. O sea que +# hoy esto sella un binario parcheado que se presenta como «Mozilla Firefox» — justo lo que +# `firefox.toml` evita a propósito yendo SIN marca (la historia de Iceweasel). La salida +# probable es `unofficial`, pero es una decisión de política de marcas, no una perilla técnica, +# y por eso se deja escrita en vez de cambiada. +# +# 2) COLISIONA DE RUTA CON `firefox`. El artefacto instala en `usr/lib/firefox/` y `usr/bin/firefox` +# —las MISMAS rutas que la receta `firefox`— porque el árbol no fija `MOZ_APP_NAME`. Hoy no +# rompe nada porque ninguna imagen incluye las dos, pero el día que una lo haga, las dos capas +# overlay se pelean el mismo fichero y gana una en silencio. El arreglo es `MOZ_APP_NAME` en el +# mozconfig, que es un rebuild y puede arrastrar branding: su propia unidad de trabajo. +# name = "waterfox" version = "6.7.1.1" license = "MPL-2.0" @@ -118,6 +140,7 @@ strip_debug = true [build.phases] configure = ''' export MOZBUILD_STATE_PATH="$PWD/.mozbuild" +export MOZ_BUILD_DATE="$(date -u -d "@${SOURCE_DATE_EPOCH:-1}" +%Y%m%d%H%M%S)" # ver el guardián del install export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system export MOZ_NOSPAM=1 # ── RUST_TARGET: lo EXIGE el parche de Alpine, no Firefox ───────────────────────────────────── @@ -180,6 +203,7 @@ MOZ compile = ''' export RUST_TARGET=x86_64-alpine-linux-musl # ver la nota en la fase configure export MOZBUILD_STATE_PATH="$PWD/.mozbuild" +export MOZ_BUILD_DATE="$(date -u -d "@${SOURCE_DATE_EPOCH:-1}" +%Y%m%d%H%M%S)" # ver el guardián del install export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system export MOZ_NOSPAM=1 gib=$(awk "/MemTotal/{printf \"%d\", \$2/1024/1024}" /proc/meminfo) @@ -211,8 +235,24 @@ exit 1 install = ''' export RUST_TARGET=x86_64-alpine-linux-musl # ver la nota en la fase configure export MOZBUILD_STATE_PATH="$PWD/.mozbuild" +export MOZ_BUILD_DATE="$(date -u -d "@${SOURCE_DATE_EPOCH:-1}" +%Y%m%d%H%M%S)" # ver el guardián del install export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system DESTDIR=/out ./mach install + +# ── GUARDIÁN: QUE EL BuildID NO SEA UNA FECHA ──────────────────────────────────────────────── +# Copiado de `firefox.toml`, y no por simetría: SIN ESTO YA SELLÓ MAL. El artefacto +# `b3:e65c0221` del 2026-09-06 salió con `BuildID=20260906062042` —la hora del build— o sea que +# NO REPRODUCE. Y selló en VERDE: el ArtifactHash es input-addressed y no se mueve por esto, así +# que `build-state.json` lo contaba como bueno. Es exactamente el modo de fallo que el comentario +# de firefox describe, ocurriendo en la receta de al lado por no haber copiado las cuatro líneas. +esperado="$(date -u -d "@${SOURCE_DATE_EPOCH:-1}" +%Y%m%d%H%M%S)" +real="$(sed -n 's/^BuildID=//p' /out/usr/lib/firefox/application.ini)" +if [ "$real" != "$esperado" ]; then + echo "guardián: BuildID=$real y esperaba $esperado — el artefacto NO reproduce." >&2 + echo " Revisá que MOZ_BUILD_DATE se exporte en TODAS las fases." >&2 + exit 1 +fi +echo "guardián: BuildID = $real (determinista, de SOURCE_DATE_EPOCH)" ''' [deps]