Ship Magisk like GOLDEN; KernelSU optional recycle only; parallel to sunfish-a16-rom standby.
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
001has/srv/romandandroid-buildSSH working. - Before or in parallel with early
002(does not replace GOLDEN liveadb). - 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:
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-orgwebsite 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)
- 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:
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)
- Rendered website (
axpos.org) +sitemap.xml/robots.txt axpos-org.git(Codeberg)- Existing Codeberg org archive (rsync; refresh optionally)
- Disroot org inventory JSONL (metadata only)
- 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)
- From archived docs / Disroot, locate sunfish 22.2 / A15 reproducible
tags and
axp_versioning/ manifest (axp.xmlor equivalent). - Extract the list of repositories + revisions for that build.
- Clone
--mirroronly those repos (plus any tiny shared deps they need). - Record the selection in
/srv/rom/references/axp/archive/status/sunfish-repo-selection.txt
with tag/build id and date. git fsck --fullper mirror;git lfs fetch --allwhere 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)
- rsync laptop
~/Archives/AXP.OS/→ server; verifydu - Storage preflight (
df) - Website rendered +
axpos-org.git(if not already complete) - Probe/download sunfish Pro/Slim images + checksums/keys (clearnet → Tor)
- Disroot inventory JSONL + manifest-driven sunfish repo mirrors
- Optional Codeberg refresh; optional GitHub APK repos of interest
- 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:
- Identify repo + AXP branch/tag/build (prefer sunfish 22.2 / A15)
- Identify corresponding LOS/AOSP base
- Inspect full diff
- Classify: direct / port / obsolete / superseded / A16-incompatible
- Record provenance; dedupe vs LOS / GrapheneOS / DivestOS
- Apply one logical change; build; test on LAB only
AXP A15 GOLDEN remains the live oracle.
LOS 23.2 / Android 16 remains the base.