# AXP.OS sunfish preservation / reference archive Parent overview (Lineage + AXP + GrapheneOS): [`reference-sources.md`](reference-sources.md). ## Purpose AXP.OS is an important historical and functional reference for `sunfish-a16-rom`. Some AXP.OS infrastructure is self-hosted and may disappear. Preserve **useful publicly accessible material related to sunfish / AXP.OS A15** before relying on it during later ROM development. This archive is **REFERENCE** material. It is **not** the base ROM. ```text GOLDEN device: AXP.OS 22.2 / Android 15 on sunfish historical GOS: Android 13 sunfish (hardening reference only) new ROM base: LineageOS 23.2 / Android 16 AXP sources: reference inputs only ``` **Do not** block ROM development indefinitely on recovering unavailable AXP material. **Do not** archive all ~225 Disroot repositories (Sony, OnePlus, Fairphone, unrelated Pixels, etc.). ```text AXP archive != complete backup of AXP.OS AXP archive == what is needed to understand, reproduce, and port AXP.OS A15 for SUNFISH ``` Execute this work on **`rom-dev01`** under `/srv/rom/references/axp/`. Do not keep growing large mirrors on the laptop once the server copy is verified. --- ## When to run - After `001` has `/srv/rom` and `android-build` SSH working. - Before or in parallel with early `002` (does not replace GOLDEN live `adb`). - Prefer rsync of the existing laptop archive first, then fill gaps on the server. --- ## Architecture reminder | Role | Meaning | |------|---------| | GOLDEN | Live AXP.OS 22.2 / A15 — do not flash for experiments | | LAB | LOS / project ROM experiments only | | This archive | Offline docs + sunfish-related git/releases on `rom-dev01` | See also: `docs/device-roles.md`. --- ## 1. Known AXP.OS hosting ### Main website Preserve (rendered + git source): - https://axpos.org/ - https://axpos.org/news/ - https://axpos.org/docs/ - https://axpos.org/devices/ - https://axpos.org/devices/google/sunfish/ - https://axpos.org/devices/changelogs/2026/ - https://axpos.org/docs/knowledge/faq/ - https://axpos.org/docs/knowledge/reproducible/ - https://axpos.org/docs/knowledge/microg/ - https://axpos.org/docs/knowledge/callrec/ - https://axpos.org/docs/knowledge/features/ - https://axpos.org/docs/knowledge/technical-details/ Website hosting: Codeberg. Website source: - https://codeberg.org/AXP-OS/axpos-org - https://codeberg.org/AXP-OS/axpos-org.git Observed branches: `hugo`, `pages`. Official docs describe: | Host | Role | |------|------| | **Disroot** (`git.disroot.org/AXP.OS`) | Main **public** mirror of repos / APK releases / reproducible-build data | | **code.binbash.rocks/AXP.OS** | Complete self-hosted set (CI, internals) — **not** anonymously public | | **Codeberg** | Partial (website + fewer repos after Jan 2026 removals) | | **GitHub** (`github.com/AXP-OS`) | Mainly APK/release mirror | --- ### Public source mirror: Disroot - Org: https://git.disroot.org/AXP.OS - API: https://git.disroot.org/api/v1/orgs/AXP.OS/repos Snapshot **2026-08-09** (inventory only — not a mandate to clone everything): - Repos: **225** - Forgejo reported size: **49,908,145 KiB (~48 GiB)** Git metadata only - **Additional** space needed for LFS, releases, wikis, downloads Generate inventory dynamically from the API. Do **not** maintain a hard-coded full org clone list. --- ### Codeberg - https://codeberg.org/AXP-OS - Snapshot 2026-08-09: **14** public repos, complete attempt ~**38 GiB** - Includes `axpos-org` website source - **Not** a complete AXP source archive (100+ repos removed Jan 2026 per AXP docs) Known laptop archive: `~/Archives/AXP.OS/codeberg/` Known issue: `legacy_prebuilt_apps.git` has historical LFS pointers whose objects return **HTTP 404** on Codeberg. ```text "Git mirror valid" != "all historical LFS content preserved" ``` Do **not** delete the Codeberg archive just because Disroot is newer/larger. --- ### GitHub - https://github.com/AXP-OS - Documented focus: APK/release mirror (PhoneSky, AOSmium, OpenEUICC, …) - Lower priority; useful independent source for artifacts/public keys --- ### Self-hosted Gitea (not publicly readable) - https://code.binbash.rocks / https://code.binbash.rocks/AXP.OS - Observed DNS 2026-08-09: `148.251.225.181` - Site root HTTP 200; anonymous org API returned `[]` - Historical repo URLs request auth; web 404 **Do not** attempt to bypass access controls. Only use legitimately public material. Official docs: this host holds the complete private set. --- ## 2. Download / OTA infrastructure ### Clearnet downloads - https://download.axpos.org (DNS 2026-08-09 → `148.251.225.182`, PTR yes.binbash.rocks) - Root `/` may time out; **always probe exact paths** Sunfish paths: ```text PRO: https://download.axpos.org/axp/sunfish/ …/factory/ …/recovery/ …/tests/ SLIM: https://download.axpos.org/axp-slim/sunfish/ ``` Device page confirms **AXP.OS 22.2 / Android 15** for Pro and Slim, with links to OS zip, recovery, factory, and keys. When reachable, preserve for sunfish (Pro + Slim as available): - OS ZIPs, `.prop`, `.sha512sum` - recovery / factory packages - relevant test artifacts - signing / AVB **public** keys Never treat images as trusted without published checksums/signatures. Example filenames seen in indexes (verify live): ```text AXP.OS-22.2-20260324-PRO-sunfish.zip(+.prop+.sha512sum) AXP.OS-22.2-20260331-PRO-sunfish.zip(+.prop+.sha512sum) ``` ### Tor download mirror Onion advertised by AXP: ```text e3tx35xwvqoihx36tjmnzurjcghs6kjwrwnen55jg7ujqilbaicutpid.onion HTTP :8008 (main documented alias) HTTPS :9009 (historical) ``` Example: ```text http://…onion:8008/axp/sunfish/ http://…onion:8008/axp-slim/sunfish/ ``` Probe when preservation runs; do not assume availability. ### Legacy download host `leech.binbash.rocks` — observed unavailable 2026-08-09 (timeouts / refused). Treat as legacy; `download.axpos.org` replaced port-8008 URLs per changelog. ### OTA ```text https://update.axpos.org https://update-unstable.axpos.org ``` Both resolved to `148.251.225.182` (2026-08-09); `/` → HTTP 403 Apache. 403 on `/` ≠ OTA API dead (updater endpoints, not browsing). Older (pre build 2026.005): ```text https://sfxota.binbash.rocks:8010 https://sfxota-unstable.binbash.rocks:8010 ``` If needed: capture the exact OTA URL from **GOLDEN** via `adb logcat` while checking for updates — **do not modify GOLDEN** merely for discovery. --- ## 3. Historical IP snapshot (diagnostic only) Observed **2026-08-09** — **never hard-code**; re-resolve DNS before use: | Host | IPv4 | |------|------| | axpos.org | 217.197.84.141 | | code.binbash.rocks | 148.251.225.181 | | download.axpos.org | 148.251.225.182 | | update.axpos.org | 148.251.225.182 | | update-unstable.axpos.org | 148.251.225.182 | | leech.binbash.rocks | 162.55.66.39 | --- ## 4. Existing laptop archive → server first Laptop working location: ```text ~/Archives/AXP.OS/ website-rendered/ codeberg/ disroot-repositories.jsonl mirror-forgejo-org.sh … ``` **Do not** redownload blindly. Once `rom-dev01` is available: ```bash ssh android-build@rom-dev01 \ 'mkdir -p /srv/rom/references/axp/archive' rsync -aH --partial --info=progress2 \ "$HOME/Archives/AXP.OS/" \ android-build@rom-dev01:/srv/rom/references/axp/archive/ du -sh ~/Archives/AXP.OS ssh android-build@rom-dev01 'du -sh /srv/rom/references/axp/archive' ``` Keep the laptop copy until the server copy is verified. --- ## 5. Suggested server layout ```text /srv/rom/references/axp/archive/ ├── website-rendered/ ├── codeberg/ │ ├── git/ │ ├── releases/ │ └── metadata/ ├── disroot/ │ ├── git/ # sunfish-selected repos only (see §8) │ ├── releases/ │ └── metadata/ ├── github/ # optional APK/release mirrors ├── downloads/ │ ├── sunfish-pro/ │ └── sunfish-slim/ ├── status/ ├── tools/ # e.g. mirror-forgejo-org.sh └── README.md ``` Separate from any **working checkouts** used during active porting. --- ## 6. Storage preflight (mandatory) ```bash df -h /srv/rom du -sh /srv/rom/references/axp/archive 2>/dev/null || true ``` Preservation **must not** consume space needed for LOS tree, `out/`, ccache, artifacts. Full Disroot org (~48 GiB Git + LFS/releases) is **out of scope**. Prefer sunfish-selected set (typically far smaller) + website + sunfish images. --- ## 7. What to preserve (sunfish-scoped) ### Always (small / high value) 1. Rendered website (`axpos.org`) + `sitemap.xml` / `robots.txt` 2. `axpos-org.git` (Codeberg) 3. Existing Codeberg org archive (rsync; refresh optionally) 4. Disroot org **inventory JSONL** (metadata only) 5. Status probe snapshots under `status/` ### Highest priority if downloads work Sunfish Pro/Slim OS zip, recovery, factory, `.prop`, `.sha512sum`, public keys (clearnet path first; Tor fallback). ### Git (Disroot / public) — selection rule **Do not** clone all 225 repos. **Do** discover the exact set from **sunfish A15 / 22.2** reproducible-build / manifest / `axp_versioning` data, then clone **that** set (+ histories). Minimum explicit interest (seed list — expand from manifests): | Priority | Examples | |----------|----------| | Device/kernel | `android_device_google_sunfish`, `android_kernel_google_msm-4.14` | | Versioning | `axp_versioning`, sunfish-related manifests / `axp.xml` tags | | Likely port targets | `android_frameworks_base`, `android_packages_apps_Settings`, shared `build`/config **if** present in sunfish build | | Compat features | microG / signature spoofing / Phonesky-related public repos | | Features we want | call recording, FLAG_SECURE-related, hardening **used by sunfish A15** | Exclude by default: other OEMs/devices, unrelated Pixel generations, bulk device trees not referenced by the sunfish A15 build. ### Lower priority GitHub APK/release mirrors for apps we care about (Phonesky, etc.). ### Out of scope Private `code.binbash.rocks` content without credentials. --- ## 8. Manifest-driven repo selection (preferred workflow) 1. From archived docs / Disroot, locate sunfish **22.2 / A15** reproducible tags and `axp_versioning` / manifest (`axp.xml` or equivalent). 2. Extract the list of repositories + revisions for that build. 3. Clone `--mirror` **only those** repos (plus any tiny shared deps they need). 4. Record the selection in `/srv/rom/references/axp/archive/status/sunfish-repo-selection.txt` with tag/build id and date. 5. `git fsck --full` per mirror; `git lfs fetch --all` where applicable; log LFS failures separately (404s are expected for some historical objects). Fallback if manifests are incomplete: inventory API + name filters (`sunfish`, `msm-4.14`, `phonesky`, `microg`, `signature`, `spoof`, `callrec`, `versioning`, `manifest`, …) **plus** manual review — still not “clone org”. --- ## 9. Website commands (server refresh) ```bash mkdir -p /srv/rom/references/axp/archive/website-rendered wget \ --mirror --page-requisites --convert-links --adjust-extension \ --restrict-file-names=unix --domains=axpos.org \ --directory-prefix=/srv/rom/references/axp/archive/website-rendered \ https://axpos.org/ curl -fL https://axpos.org/sitemap.xml \ -o /srv/rom/references/axp/archive/website-sitemap.xml || true curl -fL https://axpos.org/robots.txt \ -o /srv/rom/references/axp/archive/website-robots.txt || true ``` Prefer transferring the existing laptop `website-rendered/` and `axpos-org.git` via rsync; refresh only if needed: ```bash git --git-dir=axpos-org.git remote update --prune git --git-dir=axpos-org.git show-ref git --git-dir=axpos-org.git fsck --full ``` --- ## 10. Forgejo inventory (Disroot / Codeberg) ```bash tmp="$(mktemp)"; page=1 while :; do data="$(curl -fsSL \ "https://git.disroot.org/api/v1/orgs/AXP.OS/repos?limit=50&page=$page")" count="$(jq 'length' <<<"$data")" [ "$count" -eq 0 ] && break jq -c '.[]' <<<"$data" >> "$tmp" page=$((page + 1)) done cp "$tmp" /srv/rom/references/axp/archive/disroot/metadata/disroot-repositories.jsonl rm "$tmp" ``` Useful queries: largest repos; name filter for sunfish-interest (see research notes). Same pattern for Codeberg org `AXP-OS`. If using `mirror-forgejo-org.sh` from the laptop archive: - **Codeberg**: OK to refresh the small org into `archive/codeberg/` - **Disroot**: do **not** invoke a full-org mirror by default; use manifest-selected clones into `archive/disroot/git/` Scripts must be resumable; one repo failure must not abort the batch; prefer `git remote update --prune` over delete/reclone. --- ## 11. Service / path probes Probe roots **and** exact sunfish paths (`/axp/sunfish/`, `/axp-slim/sunfish/`). Save under `archive/status/` with `date -Is`. Tor fallback (optional): ```bash # apt: tor torsocks — only if needed curl --socks5-hostname 127.0.0.1:9050 --connect-timeout 30 --max-time 120 -I \ 'http://e3tx35xwvqoihx36tjmnzurjcghs6kjwrwnen55jg7ujqilbaicutpid.onion:8008/axp/sunfish/' ``` Mine archived website for URLs: ```bash grep -RhoE 'https?://[^"<> ]+' \ /srv/rom/references/axp/archive/website-rendered/axpos.org 2>/dev/null | grep -Ei 'axpos|binbash|codeberg|disroot|github|sunfish' | sort -u \ > /srv/rom/references/axp/archive/discovered-urls.txt ``` --- ## 12. Verification ```bash find /srv/rom/references/axp/archive -type d -name '*.git' -prune | wc -l du -sh /srv/rom/references/axp/archive/* date -Is > /srv/rom/references/axp/archive/SNAPSHOT_DATE.txt ``` Document LFS/release errors. Do not claim 100% completeness if objects 404. --- ## 13. Priority order (execution) 1. rsync laptop `~/Archives/AXP.OS/` → server; verify `du` 2. Storage preflight (`df`) 3. Website rendered + `axpos-org.git` (if not already complete) 4. Probe/download **sunfish** Pro/Slim images + checksums/keys (clearnet → Tor) 5. Disroot inventory JSONL + **manifest-driven** sunfish repo mirrors 6. Optional Codeberg refresh; optional GitHub APK repos of interest 7. Status snapshot + selection file Skip: full Disroot org; private binbash Gitea; endless LFS 404 retries. --- ## 14. Later development use Do **not** blindly cherry-pick AXP into LOS 23.2. For each candidate: 1. Identify repo + AXP branch/tag/build (prefer sunfish 22.2 / A15) 2. Identify corresponding LOS/AOSP base 3. Inspect full diff 4. Classify: direct / port / obsolete / superseded / A16-incompatible 5. Record provenance; dedupe vs LOS / GrapheneOS / DivestOS 6. Apply one logical change; build; test on **LAB** only AXP A15 GOLDEN remains the live oracle. LOS 23.2 / Android 16 remains the base.