Files
AXP-Resurection/docs/axp-sunfish-preservation.md
T
sunfish-admin 12d2179c20 AXP Magisk resurrection track: Speckit 009 port AXP/LOS22 to LOS23.
Ship Magisk like GOLDEN; KernelSU optional recycle only; parallel to sunfish-a16-rom standby.
2026-09-16 21:56:22 +00:00

15 KiB

AXP.OS sunfish preservation / reference archive

Parent overview (Lineage + AXP + GrapheneOS): 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.

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.).

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):

Website hosting: Codeberg.

Website source:

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

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.

"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)

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:

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):

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:

e3tx35xwvqoihx36tjmnzurjcghs6kjwrwnen55jg7ujqilbaicutpid.onion
HTTP :8008  (main documented alias)
HTTPS :9009 (historical)

Example:

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

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):

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:

~/Archives/AXP.OS/
  website-rendered/
  codeberg/
  disroot-repositories.jsonl
  mirror-forgejo-org.sh
  …

Do not redownload blindly.

Once rom-dev01 is available:

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

/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)

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)

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:

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)

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):

# 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:

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

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.