8.2 KiB
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
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:
https://wiki.lineageos.org/devices/sunfish/build/.
5. Preparar LineageOS
El último pin oficial usado por AXPR23 corresponde al nightly 20261008 de
LineageOS 23.2:
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:
/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:
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:
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:
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:
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.
10. Sideload de prueba
Hazlo solo en un Pixel desbloqueado, con copia de seguridad y nunca como primer paso en un teléfono personal:
adb devices
adb reboot recovery
En recovery selecciona Apply update from ADB y ejecuta:
adb sideload /ruta/al/AXP-Resurection-Pro-23.2-YYYYMMDD-sunfish.zip
Tras arrancar:
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 |