Restore disable_configstore, EuiccDisabler and thermal CDEV guards, branding and rebuild/sync helpers; document device roles, laptop migration, and Gitea. Co-authored-by: Cursor <cursoragent@cursor.com>
18 KiB
AXP Resurrection Pro (AXPR) — Presentación de la ROM
Dispositivo: Google Pixel 4a (sunfish)
Base upstream: LineageOS 23.2 / Android 16 (BP4a, lineage_sunfish-user)
Producto: AXP Resurrection Pro — clon funcional de AXP.OS Pro (LOS22 / GOLDEN) sobre LOS23
Repositorio: AXP_Resurection (rama Magisk / 009)
Documento: síntesis enriquecida para lectura o exportación a PDF — 2026-10-11
Público / usuarios: ver public/AXP-Resurrection-Pro-sunfish.md y lista CVE public/kernel-cve-backport-list.txt.
Exportar a PDF (en el laptop)
cd /home/aventura/Workspaces/AXP_Resurection
# Opción A — pandoc (si está instalado)
pandoc docs/009-axpr-rom-presentation.md -o docs/009-axpr-rom-presentation.pdf \
--pdf-engine=xelatex -V geometry:margin=2.5cm -V lang=es
# Opción B — navegador / VS Code: vista previa Markdown → Imprimir → Guardar como PDF
Fuentes normativas: specs/009-axp-los23-port/spec.md, .specify/memory/constitution.md, docs/009-handoff-20261008.md. Este archivo es presentación; no sustituye el spec.
Tabla de contenidos
- Resumen ejecutivo
- Arco del proyecto (punto 0 → hoy)
- Línea base LineageOS vs identidad AXPR
- Qué se clonó de AXP.OS / EXTENDROM
- Kernel: AXP, GrapheneOS-class, CVE
- Userspace: parches AXP en Android 16
- Debloob / de-Google selectivo
- microG, Play y apps empaquetadas
- Magisk preroot (sin KernelSU en ship)
- Hardening userspace y malloc
- Toggles y políticas de privacidad
- Firma, AVB y actualizaciones
- Inspiración GrapheneOS (qué sí / qué no)
- Verificación y hitos en LAB
- Build de referencia actual (oct 2026)
- Abierto / no objetivo
- Apéndice: scripts de integración
- Apéndice: lecciones LAB (Magisk / flash)
1. Resumen ejecutivo
AXP Resurrection Pro (AXPR) no es un LineageOS con “algunos APKs”: es un resurrection track que toma LineageOS 23.2 vanilla probado en LAB (003) y reintegra el conjunto de capacidades AXP.OS Pro (referencia GOLDEN en Pixel 4a con AXP 22.2 / Android 15), adaptado a Android 16 y Magisk 30.7, con:
- Kernel
msm-4.14de LOS + Stage 1 Graphene/AXP (~30 parches) + FORTIFY + ~429 CVE “clean-offset” + lotes high-offset + endurecimiento US-S5-1 (sin Yama como GOLDEN). - Userspace microG + Phonesky parcheado del proyecto + sigspoof y call recording con toggles + DNS privado / connectivity check al estilo AXP (sin servidores
axp.os). - Debloob en 4 oleadas (euicc Google, carrier/RCS, herramientas Lineage, comandos solo-LAB) — no el
Deblob.shciego de AXP. - Magisk embebido en build (EXTENDROM
EXTENDROM_PREROOT_BOOT), manager dormant hasta activación; KernelSU/SusFS fuera del bacon de ship (007en paralelo). - Firma
release-keysde proyecto, AVB flags=0 (track desbloqueado + Magisk), SPL vendor fijado en 2023-09-05 (guardia anti-downgrade).
Paridad bancaria Swissquote en Island: PASS en cierre 2026-10-09; Yuh sigue abierto.
2. Arco del proyecto (punto 0 → hoy)
| Fase | Feature | Qué se logró |
|---|---|---|
| Host | 001 |
rom-dev01, artefactos bajo /srv/rom/artifacts/, builds largos en tmux (rom-detach) |
| Oracle | 002 |
Inventario GOLDEN (11071JEC203839) — solo lectura adb |
| Baseline | 003 |
LOS 23.2 UNOFFICIAL vanilla en LAB (20260914), smoke hardware, sin AXP/microG |
| MicroG track (standby) | 004–008 |
microG, spoof, call rec, etc. — reutilizado por 009 |
| KernelSU track (paralelo) | 007 |
Boot OK sept 2026; no mezclar en bacon Magisk |
| Ship activo | 009 |
AXP → LOS23 resurrection; spec 009-axp-los23-port |
Dispositivos:
| Rol | Serial | Uso |
|---|---|---|
| GOLDEN | 11071JEC203839 |
Oracle AXP 22.2 — nunca flashear |
| LAB | 11231JEC207477 |
Flash, sideload, Magisk, banca en Island |
3. Línea base LineageOS vs identidad AXPR
3.1 Vanilla LOS (003)
- Build:
lineage-23.2-20260914-UNOFFICIAL-sunfish ro.lineage.versionUNOFFICIAL, test-keys, sin microG ni Magisk AXP- Vendor SPL 2023-09-05 (EOL Pixel; documentado)
- Gate: smoke LAB OK → autoriza integración AXP
3.2 Pin upstream OTA (oct 2026)
- Manifest pin: Lineage nightly
20261008(lineage-23.2-20261008-nightly-sunfish) - Zip de producto:
AXP-Resurection-Pro-23.2-20261008-sunfish.zip(hermano delineage-23.2-20261008-PRO-sunfish.zip) LINEAGE_BUILDTYPE=PRO,user,TARGET_RELEASE=bp4a- Platform SPL: 2026-09-01 (merges LOS)
- Vendor SPL ship: 2023-09-05 (deliberado vs GOLDEN
2023-08-05— guardia enapply_009_axp_identity.py)
3.3 Branding
- Nombre producto: AXP Resurrection Pro
- Bootanimation: fullscreen sunfish (mejora de tamaño vs banda Lineage); assets AXP PRO en payload aún limitados — animación puede seguir siendo clase Lineage en algunos builds
- No NeoLauncher — Launcher3 Lineage
- No servidores OTA AXP ni repos de mercado externos (EOL)
4. Qué se clonó de AXP.OS / EXTENDROM
Regla del repo (AGENTS.md): copiar método AXP/EXTENDROM/GOLDEN antes de inventar política local.
| Área | Mecanismo AXP | Implementación AXPR |
|---|---|---|
| Magisk en boot | EXTENDROM_PREROOT_BOOT, patch.sh, hook releasetools |
vendor/sunfish-a16/magisk/, out/.magisk/READY, SUNFISH_A16_MAGISK_PREROOT |
| Magisk no en PRODUCT | Root dormant hasta activación | Stub manager; no PRODUCT_PACKAGE Magisk |
| Env patcher | PREINITDEVICE=userdata, KEEPVERITY, KEEPFORCEENCRYPT |
Mismo en vendor/sunfish-a16/magisk/patch.sh |
| Product wiring | gms.mk, magisk.mk, apps.mk |
apply_009_product_includes.py en cada bacon |
| Identidad / certs | vendor/lineage-priv/keys, avb.pem |
apply_009_axp_identity.py + /srv/rom/secrets/android-certs |
| Phonesky | APK parcheado (exact alarm, etc.) | /srv/rom/prebuilts/phonesky/ — no en git |
| Toggles EXTENDROM | allow_signature_fake, extendrom_call_recording |
005 sigspoof, 008 call rec / FLAG_SECURE |
| Private DNS lista | AXP Settings providers | apply_009_private_dns_providers.py |
| Connectivity / INTERNET UX | AXP-class | apply_009_connectivity_check.py |
| Disable app clásico | vs Archive A16 | apply_009_disable_user_apps.py |
| OpenSSH en product | Binarios fuera; init.openssh.rc queda |
US-S4-1 + hardening.mk |
| Referencias build | EXTENDROM en rom-dev01 |
/srv/rom/references/extendrom/ |
FAQ AXP (Magisk): tras flash, sí a descargar/instalar el APK del manager; el paso Additional setup que re-parchea boot suele no hacer falta en preroot (el boot ya va parcheado en bacon). Ver AXP FAQ.
5. Kernel: AXP, GrapheneOS-class, CVE
Base: kernel/google/msm-4.14 @ 4.14.357-openela (pin LOS 28f9290ae067), non-GKI.
5.1 Ya en LOS (no duplicar)
CFI, shadow call stack, stack protector, KASLR, PAN, hardened usercopy, restricción perf events, etc. (docs/009-kernel-hardening-map.md).
5.2 Stage 1 — parches Graphene/AH vía AXP kernel_patches
~30 parches aplicados (deny USB toggle, allocsize, BUG_ON, FORTIFY intra-object, randomize, ro_after_init, sanitize, slab hardened, unused-fn, …).
Omitido por política: location lockdown (FR-018), LinuxIncrementals, mega CVE hasta fase estable.
5.3 Combo4 + Clang FORTIFY
CONFIG_FORTIFY_SOURCE=yy opciones slab/init/on alloc tras Stage 1- Fixes de build (LTO/modules qcacld, stubs acotados en bisect histórico)
5.4 CVE
| Etapa | Contenido |
|---|---|
| CVE clean-offset | ~429 IDs en cve-clean-offset.list (strict apply en bacon) |
| High-offset batches 1–3 | Offsets grandes con max_abs_offset elevado |
| Denylist | p.ej. CVE-2022-49980 (lock-scope USB) |
| Política | Atribución en logs cve-stage/; no megapatch opaco |
5.5 US-S5-1 (como GOLDEN)
CONFIG_SECURITY_YAMAno activado (Yamaptrace_scope=2rompió PairIP / anti-debug)SLAB_FREELIST_RANDOM=y, USERFAULTFD offKSYM_NAME_LEN=192; sin KernelSU en defconfig ship
5.6 hardened_malloc (012)
- Integrado en bacon OTA (
009-bacon-hardened-malloc.sh) - Exclusiones SurfaceFlinger/cámara documentadas en árbol bionic
6. Userspace: parches AXP en Android 16
Scripts bajo vendor/sunfish-a16/patches/009-axp-los23-port/ (puertos desde árbol AXP legacy a A16, no “SDK 35”):
| Script | Función |
|---|---|
apply_009_product_includes.py |
gms.mk + magisk.mk + apps.mk + BoardConfig |
apply_009_axp_identity.py |
release keys, AVB, SPL vendor guard |
apply_009_axp_branding.py |
branding Pro |
apply_009_private_dns_providers.py |
lista DNS privado AXP |
apply_009_connectivity_check.py |
checks de conectividad |
apply_009_disable_user_apps.py |
Disable clásico |
apply_009_supl_privacy.py |
SUPL / ubicación (sin lockdown extra FR-018) |
apply_009_cmdline_mode.py |
cmdline / modo debug (Magisk track) |
apply_009_yama_ptrace.py |
Yama inerte si no hay Yama en kernel |
apply_009_a15_* |
timeouts reboot/Wi‑Fi/BT, settings |
apply_005 / apply_008 |
sigspoof, call recording, FLAG_SECURE DO |
apply_009_drop_* |
deblob waves (ver §7) |
WMS / FLAG_SECURE: override global opcional (proyecto 008), default off.
7. Debloob / de-Google selectivo
No se ejecuta Deblob.sh por defecto AXP. Oleadas controladas (AXP_DEBLOB_WAVE4=1 en OTA):
| Wave | Contenido |
|---|---|
| 1 | Drop Google EUICC / LPA (apply_009_drop_euicc_google.py) — OpenEUICC en system_ext |
| 2 | Carrier Google + AOSP RCS (apply_009_drop_carrier_google.py) |
| 3 | Herramientas Lineage en system (bash, htop, nano, unrar, addon.d/50-lineage.sh) — Swissquote fallaba con estas en system |
| 4 | Comandos solo-LAB / diag (apply_009_drop_lab_only_commands.py) |
Se mantiene (radio/IMS): ims, QtiTelephonyService, xtra-daemon, Widevine, EuiccSupportPixel donde el spec lo exige, Qualcomm diag en wave 4 parcial según cierre.
8. microG, Play y apps empaquetadas
8.1 Stack deGoogle (servicios)
| Componente | Ubicación | Versión pin (ej.) |
|---|---|---|
| GmsCore (microG) | system_ext/app/GmsCore |
0.3.17.252432 |
| GsfProxy | system_ext |
0.1.0 |
| Phonesky | system/priv-app/Phonesky |
52.9.22-24 (artifact host) |
| JNI GmsCore | .../lib/arm64/*.so |
Extraído en bacon (obligatorio para Maps) |
8.2 Apps usuario (system_ext / product)
| App | Paquete | Notas |
|---|---|---|
| Aurora Store | com.aurora.store |
system_ext |
| Droidify | com.looker.droidify |
sustituye cliente F-Droid |
| Fossify Gallery | org.fossify.gallery |
no Gallery2/Glimpse |
| Jelly | org.lineageos.jelly |
product |
| OpenEUICC | im.angry.openeuicc |
LPA privilegiada |
| WebView | com.android.webview |
LOS 23 — no Aosmium (EOL); selector multi-proveedor en Dev options |
Postflight bacon: US-S4-2 (Jelly), US-S4-3 (Aurora/Droidify/Fossify en system_ext).
9. Magisk preroot (sin KernelSU en ship)
| Tema | Detalle |
|---|---|
| Versión | 30.7 (pin; GOLDEN oracle 29.0) |
| Build | Hook common.py + patch.sh en empaquetado target_files/IMAGES/boot.img |
| Verificación host | magiskboot cpio ramdisk.cpio test ≠ 0 en ship boot.img |
| Artefacto forensics | boot-make-out.img = out/.../boot.img sin Magisk — no flashear |
| Activación | Abrir app → download/install APK real; evitar re-parchear boot (Install / inactive slot) |
| UI Ramdisk Yes/No | Clasificación de método de instalación; con preroot puede quedar No sin impedir root |
| Módulos GOLDEN | No empaquetados (PIF, hosts, tee sim, …) — usuario instala después |
| KernelSU | Prohibido en mismo boot que Magisk ship |
10. Hardening userspace y malloc
| ID | Medida |
|---|---|
| US-S4-1 | Sin sshd/ssh/rsync/procmem en product; sí init.openssh.rc |
| US-S4-2/3 | Superficie apps (Jelly + Fossify + stores) |
| US-S6 | lineage_sunfish-user lunch |
| 012 | hardened_malloc en bionic (ship OTA) |
| SELinux | Enforcing (medido en LAB) |
| Encryption | FBE/file encryption estándar |
| Bootloader lock | Wont — AXP/LOS/Magisk asumen unlock |
11. Toggles y políticas de privacidad
| Toggle / setting | Origen | Comportamiento |
|---|---|---|
| Signature spoofing | AXP / 005 |
Restricted; Developer Options |
| Call recording unlock | EXTENDROM / 008 |
SQLite / settings key |
| FLAG_SECURE override | Proyecto 008 |
Default off |
| Private DNS providers | AXP lista | Sin endpoints axp.os |
| Connectivity check | AXP-class | Sin branding AXP en URLs |
| SUPL / XTRA / IZat | AXP timeouts + switches | Precisión GPS (no extra-cap FR-018) |
| Native debug / Yama props | apply_009_yama_ptrace |
Inerte sin Yama en kernel |
| Disable app | AXP vs Archive A16 | Restaurar disable clásico |
12. Firma, AVB y actualizaciones
| Tema | Valor ship |
|---|---|
| Firma APK/OAT | vendor/lineage-priv/keys/releasekey |
| AVB key | vendor/sunfish-a16/certs/avb.pem (SHA256_RSA4096) |
| AVB flags | 0 (runtime unlocked; no “hardened verified boot” Magisk track) |
| Zip OTA | payload.bin sideload; no OTA servidor AXP |
| FR-019 | microG, Phonesky, apps — actualización sideload cada ~2–3 meses (stub doc) |
| Downgrade | User builds rechazan SPL vendor < 2023-09-05 |
Flash LAB recomendado: recovery → factory reset → sideload zip completo.
Evitar: fastboot -w; mezclar vbmeta/boot de otro build; flashear solo boot-make-out.img.
13. Inspiración GrapheneOS (qué sí / qué no)
| GrapheneOS / AH | En AXPR |
|---|---|
| Parches kernel hardening (alloc, fortify, slab, sanitize, …) | Sí — vía AXP kernel_patches + Stage1 |
| hardened_malloc | Sí (012) |
| Árbol kernel A13 Graphene sunfish | No — base es LOS msm-4.14 |
| Lockdown ubicación Graphene | No (FR-018) |
| Auditoría attestation bancaria tipo Graphene | No como gate; banking deferred |
| WebView Vanadium por defecto | No — WebView LOS + elección usuario |
14. Verificación y hitos en LAB
| Hito | Fecha / evidencia |
|---|---|
| Vanilla LOS boot | 003 — 2026-09-14 |
| Stage1 kernel bacon | 20260918T180359Z-axp-kh-stage1 |
| CVE bacon | 20260918T215034Z-axp-kh-cve |
| Closure baseline wave 3 | 20261009T145241Z — Swissquote Island PASS |
| Final ship wave4 + malloc | 20261009T172104Z, bacon009final |
OTA rebacon pin 20261008 |
20261011T092526Z — bacon009ota-r13, bacon_exit=0 |
Matrices: docs/009-capability-matrix.md, docs/009-closure-parity-20261009.md, docs/axp-pro-parity.md.
15. Build de referencia actual (oct 2026)
| Campo | Valor |
|---|---|
| Directorio | /srv/rom/artifacts/009-axp-los23-port/20261011T092526Z-axp-stage1-combo4-cve-hi-releasekeys |
| Zip | AXP-Resurection-Pro-23.2-20261008-sunfish.zip |
| SHA256 zip | 91d7adf5435c4e7279123bca4ce72793754384bb341cfbb61522f3411eea2847 |
| boot.img (ship) | 9e6ec52543445b10279b681f69c055fb240f6910616f569914fe598d77ef7d4f |
| README artefacto | Stage1+combo4+FORTIFY+CVE+hi1-3+US-S4+US-S5-1+wave1-4+malloc+releasekeys |
| Script bacon | scripts/009-bacon-axp-stage1-combo4-cve-hi-releasekeys.sh |
16. Abierto / no objetivo
Abierto: rebase LOS periódico (009-upstream-rebase-ota.md), Yuh en Island, FR-019 sideload playbook, llamada SIM física gate radio, postflight OTA boot hash = ship boot, animación AXP completa en payload.
No objetivo / wont: KernelSU en ship, NeoLauncher, Aosmium WebView, OTA/repositorios AXP externos, backup ROM integrado, bootloader relock, flash GOLDEN, mezclar track 007 en bacon Magisk.
Paralelo: 007 KernelSU/SusFS — docs/007-parallel-on-009.md.
17. Apéndice: scripts de integración
Bacon entry (host): scripts/009-rebuild-from-los.sh → rsync vendor/sunfish-a16 → 009-bacon-axp-stage1-combo4-cve-hi-releasekeys.sh.
Wrappers OTA: 009-bacon-hardened-malloc.sh, 009-bacon-wave4-deblob.sh.
Kernel: vendor/sunfish-a16/patches/009-kernel-hardening/apply_stage1.sh, apply-cve-strict.sh, listas cve-clean-offset.list, cve-high-offset-batch*.list.
Checklist pre-bacon: docs/009-ota-rebuild-checklist.md.
18. Apéndice: lecciones LAB (Magisk / flash)
- Sideload completo tras wipe es el camino principal; no depender de reflashear solo
bootsalvo recovery rota. boot.imgdel artefacto = Magisk;boot-make-out.img= stock.- Tras preroot: download/install del manager; no insistir en Additional setup que re-parchea boot ni Install inactive slot (conflicto slots / UI Ramdisk).
- Ramdisk: No en la app no implica ROM sin Magisk si
magiskdy 30.7 están activos. - Flash manual boot+vbmeta+dtbo debe ser juego completo del mismo artefacto; si no, riesgo de fastboot loop.
- No bajar vendor SPL bajo 2023-09-05 en upgrades (
init_user0_failed/ rollback Keymaster).
Fin del documento. Para el día a día del equipo: docs/README.md → 009-handoff-20261008.md.