# AXPR23 — guía de usuario y compilación ## 1. Introducción AXPR23 es una ROM terminada para el **Google Pixel 4a (`sunfish`)**, basada en LineageOS 23.2 / Android 16. El objetivo fue recuperar el comportamiento de AXP.OS sobre una base LineageOS mantenible, no crear una ROM genérica desde cero. La línea final validada integra, según la variante de publicación: - empaquetado AXP y preroot Magisk; - firma de release y configuración AVB del proyecto; - adaptaciones de compatibilidad de microG y Google; - AOSmium como proveedor principal de WebView; - cambios de privacidad, hardening y kernel en `vendor/sunfish-a16/`; - overlays de producto y aplicaciones incluidas por el proyecto. AXPR23 está **finalizado y en EOL**. LineageOS ya no mantiene una rama 23.2 nueva para `sunfish`, por lo que no debe considerarse una ROM con parches de seguridad actuales. AXPR24 / Android 17 es una línea separada. ## 2. Qué contiene este repositorio Sí contiene código, parches, overlays, scripts, tests y documentación del proyecto. No contiene: - claves privadas de firma o AVB; - APK propietarios de Google, microG, Magisk o WebView; - blobs propietarios de Google/Qualcomm ni firmware; - árboles completos de Android, `.repo`, `out/` o ccache; - ZIPs de ROM generados. Esto es intencionado. Para generar una imagen propia hay que conseguir los insumos de forma legal y firmarla con claves propias. No se deben copiar claves de otra instalación ni publicar APK propietarios en Git. ## 3. Estructura principal ```text vendor/sunfish-a16/ overlays, product files y parches AXPR23 scripts/009-*.sh wrappers de build y postflight specs/009-axp-los23-port/ alcance funcional y aceptación docs/ runbooks, evidencias y decisiones tests/ comprobaciones automáticas del proyecto ``` El árbol LineageOS y sus artefactos deben vivir fuera del checkout, en un worker Linux dedicado. ## 4. Requisitos del build host La compilación completa necesita Linux x86_64, mucho espacio libre, memoria y CPU. La configuración histórica validada usaba 8 vCPU, unos 62 GiB de RAM, ccache y un árbol Android grande. Un portátil no es un buen lugar para el build completo. Instala las dependencias oficiales de LineageOS para Android 16 y Git, Git LFS, `repo`, Python 3, OpenJDK 17, `ccache` y las herramientas `adb`/`fastboot` si vas a probar el dispositivo. Consulta siempre la guía oficial de `sunfish`: . ## 5. Preparar LineageOS El último pin oficial usado por AXPR23 corresponde al nightly `20261008` de LineageOS 23.2: ```bash mkdir -p /srv/rom/src/lineage cd /srv/rom/src/lineage repo init \ -u https://github.com/LineageOS/android.git \ -b lineage-23.2 \ --git-lfs \ --no-clone-bundle repo sync -c -j8 ``` Prepara después los blobs propietarios de `sunfish` siguiendo LineageOS. Sin ellos la ROM puede compilar parcialmente, pero no tendrá el stack completo de hardware del Pixel. Para una reconstrucción histórica exacta, usa el `build-manifest.xml` oficial del nightly elegido y conserva su SHA-256. No llames reproducible a un build basado solo en una rama flotante sin comparar revisiones. ## 6. Preparar los insumos AXPR23 El maintainer debe proporcionar fuera de Git los APK/blobs permitidos por sus licencias, las versiones fijadas de Magisk/WebView y sus propias claves de firma Android y AVB. El layout histórico del worker es: ```text /srv/rom/src/lineage árbol LineageOS /srv/rom/src/AXP_Resurection este repositorio /srv/rom/prebuilts/ insumos no versionados /srv/rom/secrets/android-certs/ claves privadas, solo host /srv/rom/ccache/ ccache /srv/rom/artifacts/ ZIPs y manifiestos generados /srv/rom/logs/ logs de build ``` Varios wrappers históricos asumen este layout; revísalos antes de moverlo. ## 7. Ejecutar el build Comprueba primero que no haya otro build usando el mismo `out/`. Desde el checkout del proyecto: ```bash cd /srv/rom/src/AXP_Resurection git checkout 009-axp-los23-port git status --short export LINEAGE_TREE=/srv/rom/src/lineage export AXP_PROJECT_SOURCE=/srv/rom/src/AXP_Resurection export LOS_SYNC=0 export LOS_DATE=20261008 bash scripts/009-rebuild-from-los.sh ``` La entrada canónica comprueba el árbol, captura el manifiesto, copia `vendor/sunfish-a16/`, aplica kernel/userspace/product/WebView, compila los componentes necesarios de `hardened_malloc`, ejecuta el bacon de release y corre los gates post-build. Para sincronizar y pinnear todos los proyectos se necesita un manifest oficial: ```bash export LOS_SYNC=1 export LOS_MANIFEST=/ruta/al/build-manifest.xml export LOS_DATE=20261008 bash scripts/009-rebuild-from-los.sh ``` `LOS_SYNC=1` limpia los worktrees Android antes de sincronizar. No lo uses sobre cambios locales sin guardar. Si falta el manifiesto, el script debe fallar; no lo sustituyas por una rama flotante. ## 8. Builds largos No dejes un `mka` unido a una sesión SSH del portátil. Usa `tmux`, systemd o el wrapper de detach del worker: ```bash tmux new -s axpr23-build cd /srv/rom/src/AXP_Resurection export AXP_PROJECT_SOURCE=/srv/rom/src/AXP_Resurection export LOS_SYNC=0 export LOS_DATE=20261008 bash scripts/009-rebuild-from-los.sh 2>&1 | tee /srv/rom/logs/axpr23-build.log ``` Desconecta con `Ctrl-b d` y vuelve a entrar con `tmux attach -t axpr23-build`. El worker histórico también usaba `/srv/rom/artifacts/bin/rom-detach`. ## 9. Verificar el resultado No aceptes un build solo porque termine con código 0: ```bash find /srv/rom/artifacts/009-axp-los23-port -type f -name '*.zip' -print sha256sum /ruta/al/AXP-Resurection-Pro-23.2-YYYYMMDD-sunfish.zip unzip -t /ruta/al/AXP-Resurection-Pro-23.2-YYYYMMDD-sunfish.zip repo -C /srv/rom/src/lineage manifest -r \ -o /srv/rom/artifacts/009-axp-los23-port/manifest-final.xml ``` Revisa nombre y SHA-256, `FLASH_READY`, firma de release, Magisk preroot, AOSmium WebView, microG/Phonesky, aplicaciones esperadas, SPL y propiedades de build. Debe haber cero errores de patch, `.rej` o componentes omitidos. La lista completa está en [`docs/009-ota-rebuild-checklist.md`](docs/009-ota-rebuild-checklist.md). ## 10. Sideload de prueba Hazlo solo en un Pixel desbloqueado, con copia de seguridad y nunca como primer paso en un teléfono personal: ```bash adb devices adb reboot recovery ``` En recovery selecciona **Apply update from ADB** y ejecuta: ```bash adb sideload /ruta/al/AXP-Resurection-Pro-23.2-YYYYMMDD-sunfish.zip ``` Tras arrancar: ```bash adb shell getprop ro.product.device adb shell getprop ro.lineage.version adb shell getprop ro.build.type adb shell getprop ro.build.tags adb shell pm list packages | grep -E 'gms|finsky|aosmium|jelly' ``` Completa el smoke test de boot, radio/Wi-Fi, almacenamiento, Magisk, Island/perfil de trabajo, WebView y aplicaciones antes de aceptar el ZIP. ## 11. Rollback y fallos frecuentes Conserva la última ROM que arrancaba, el ZIP stock/rescue, el manifiesto y el SHA-256 de cada intento, además del acceso a recovery y fastboot. Si no arranca, no borres datos inmediatamente: captura boot reason, slot A/B, `logcat`, `dmesg` disponible y estado de verity/AVB; después vuelve al ZIP conocido como bueno. | Síntoma | Causa habitual | Acción | |---|---|---| | Faltan claves de release | No se distribuyen con el proyecto | Configura claves propias solo en el host | | Falta `vendor/sunfish-a16` | No se definió `AXP_PROJECT_SOURCE` | Ejecuta el wrapper desde un checkout válido | | Falla `repo sync` | Drift u worktree sucio | Guarda cambios y usa `--force-sync` solo en el árbol Android | | Faltan APK o JNI | Prebuilts no preparados | Revisa el inventario del worker y rechaza archivos corruptos | | `.rej` o marcador ausente | El parche no coincide | Detén el build y adapta el parche explícitamente | | ZIP con test-keys | Identidad de release ausente | No lo flashees como release; corrige y repite | ## 12. Referencias - [LineageOS — build sunfish](https://wiki.lineageos.org/devices/sunfish/build/) - [`docs/009-eol-20261026.md`](docs/009-eol-20261026.md) - [`docs/009-ota-rebuild-checklist.md`](docs/009-ota-rebuild-checklist.md) - [`scripts/009-rebuild-from-los.sh`](scripts/009-rebuild-from-los.sh) - [`specs/009-axp-los23-port/spec.md`](specs/009-axp-los23-port/spec.md)