Files
AXP-Resurection/docs/009-axpr-rom-presentation.md
sunfish-adminandCursor 2d145c2878 009: Polish bacon fixes, OTA host scripts, and migration docs.
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>
2026-10-16 21:06:45 +02:00

373 lines
18 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`](public/AXP-Resurrection-Pro-sunfish.md) y lista CVE [`public/kernel-cve-backport-list.txt`](public/kernel-cve-backport-list.txt).
---
### Exportar a PDF (en el laptop)
```bash
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
1. [Resumen ejecutivo](#1-resumen-ejecutivo)
2. [Arco del proyecto (punto 0 → hoy)](#2-arco-del-proyecto-punto-0--hoy)
3. [Línea base LineageOS vs identidad AXPR](#3-línea-base-lineageos-vs-identidad-axpr)
4. [Qué se clonó de AXP.OS / EXTENDROM](#4-qué-se-clonó-de-axpos--extendrom)
5. [Kernel: AXP, GrapheneOS-class, CVE](#5-kernel-axp-grapheneos-class-cve)
6. [Userspace: parches AXP en Android 16](#6-userspace-parches-axp-en-android-16)
7. [Debloob / de-Google selectivo](#7-debloob--de-google-selectivo)
8. [microG, Play y apps empaquetadas](#8-microg-play-y-apps-empaquetadas)
9. [Magisk preroot (sin KernelSU en ship)](#9-magisk-preroot-sin-kernelsu-en-ship)
10. [Hardening userspace y malloc](#10-hardening-userspace-y-malloc)
11. [Toggles y políticas de privacidad](#11-toggles-y-políticas-de-privacidad)
12. [Firma, AVB y actualizaciones](#12-firma-avb-y-actualizaciones)
13. [Inspiración GrapheneOS (qué sí / qué no)](#13-inspiración-grapheneos-qué-sí--qué-no)
14. [Verificación y hitos en LAB](#14-verificación-y-hitos-en-lab)
15. [Build de referencia actual (oct 2026)](#15-build-de-referencia-actual-oct-2026)
16. [Abierto / no objetivo](#16-abierto--no-objetivo)
17. [Apéndice: scripts de integración](#17-apéndice-scripts-de-integración)
18. [Apéndice: lecciones LAB (Magisk / flash)](#18-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.14` de 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.sh` ciego de AXP.
- **Magisk** embebido en **build** (EXTENDROM `EXTENDROM_PREROOT_BOOT`), manager **dormant** hasta activación; **KernelSU/SusFS** fuera del bacon de ship (`007` en paralelo).
- **Firma** `release-keys` de 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.version` UNOFFICIAL, 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 de `lineage-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 en `apply_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](https://github.com/AXP-OS/build/wiki/Frequently-Asked-Questions#magisk-requires-additional-setup-on-start).
---
## 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=y` y 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_YAMA` **no** activado (Yama `ptrace_scope=2` rompió **PairIP** / anti-debug)
- `SLAB_FREELIST_RANDOM=y`, USERFAULTFD off
- `KSYM_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 &lt; `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)
1. **Sideload completo** tras wipe es el camino principal; no depender de reflashear solo `boot` salvo recovery rota.
2. **`boot.img` del artefacto** = Magisk; **`boot-make-out.img`** = stock.
3. Tras preroot: **download/install** del manager; **no** insistir en Additional setup que re-parchea boot ni **Install inactive slot** (conflicto slots / UI Ramdisk).
4. **Ramdisk: No** en la app **no** implica ROM sin Magisk si `magiskd` y **30.7** están activos.
5. Flash manual **boot+vbmeta+dtbo** debe ser **juego completo del mismo artefacto**; si no, riesgo de **fastboot loop**.
6. **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`.*