Ship Magisk like GOLDEN; KernelSU optional recycle only; parallel to sunfish-a16-rom standby.
511 lines
15 KiB
Markdown
511 lines
15 KiB
Markdown
# 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.
|