# 003 — Build notes (LOS 23.2 sunfish vanilla) > Vanilla bring-up **done** 2026-09-14. For Magisk ship rebacon after a new > LOS sync, use [`009-upstream-rebase-ota.md`](009-upstream-rebase-ota.md) and > `scripts/009-bacon-axp-stage1-combo4-cve-hi-releasekeys.sh` — not a bare > `mka bacon` from this note alone. **Host:** `rom-dev01` as `android-build` **Tree:** `/srv/rom/src/lineage` **Artifacts:** `/srv/rom/artifacts/003-…` **Logs:** `/srv/rom/logs/003-…` **ccache:** `CCACHE_DIR=/srv/rom/ccache` (export in build shell) ## Parallelism — squeeze the HW Guest is **8 vCPU / ~62 GiB**. Policy for this host: | Job | Default | Notes | |-----|---------|--------| | `mka bacon` / Soong ninja | **`-j8`** | Match `nproc`; do not leave `-j4` idle | | `repo sync` | `-j8` OK | Network-bound; `-j4` fine if flaky | | OOM during link | try `-j6` | Only then; document why | Do **not** pass `-j` to `brunch` (it eats extra args as variant). Use `breakfast` + `mka bacon -j8`, or `/srv/rom/logs/003-build/run-brunch.sh`. If `mpstat` shows high **%steal**, the Proxmox host is oversubscribed — fix outside this repo (pin/dedicate vCPUs); guest governors usually unavailable. ## Manifest (wiki-verified 2026-09-13) ```bash mkdir -p /srv/rom/src/lineage && cd /srv/rom/src/lineage repo init -u https://github.com/LineageOS/android.git -b lineage-23.2 --git-lfs --no-clone-bundle repo sync -c -j8 ``` Primary: https://wiki.lineageos.org/devices/sunfish/build/ Branch `lineage-23.2` listed for sunfish. ## Build (after sync + proprietary blobs) ```bash export CCACHE_DIR=/srv/rom/ccache export USE_CCACHE=1 cd /srv/rom/src/lineage source build/envsetup.sh breakfast sunfish userdebug # extract proprietary blobs: TheMuppets lineage-23.2 → vendor/google/sunfish mka bacon -j8 # do NOT pass -j to brunch; wrapper: /srv/rom/logs/003-build/run-brunch.sh ``` Target expected: `lineage_sunfish-userdebug` (confirm after `breakfast`). ## Metadata to capture on success - `repo manifest -r` → artifacts dir - SHA-256 of zip/images - compressed build log - `-j` used, wall time, host `nproc`/RAM note ## Status - [x] repo init (`/srv/rom/src/lineage`, `lineage-23.2`, 2026-09-13) - [x] repo sync (`finished 2026-09-13T21:27:26Z exit=0`; ~180G; log `/srv/rom/logs/003-sync/sync.log`) - [x] proprietary blobs policy documented (factory base + AXP/GOS diffs later) - [x] TheMuppets `lineage-23.2` synced → `vendor/google/sunfish` - [x] first successful build — `#### build completed successfully` / `END … exit=0` (2026-09-14T13:52:46Z); j8 segment **06:45:43** - [x] artifacts + `repo manifest -r` + SHA-256 + `brunch.log.gz` → `/srv/rom/artifacts/003-vanilla/20260914-lineage-23.2-sunfish/` (rsync → `.local-artifacts/…` on laptop) - [x] flash LAB + smoke (`docs/003-flash-lab.md`) — done 2026-09-14; gate → `004` (`docs/003-gate-handoff.md`) ## R7 note (vanilla `003`) For the first vanilla build: **factory-equivalent blobs only**. AXP/Graphene diffs land in later hardening/compat features — not in the clean baseline. ## Proprietary blobs (qué son) Android open source **no** incluye todo lo que el Pixel necesita para radio, cámara, firmware, etc. Esos binarios cerrados de Google/Qualcomm se llaman **proprietary blobs** (o “vendor blobs”). Sin ellos, `brunch sunfish` no arranca hardware real. ### Decision (owner 2026-09-13) — no overthink | Layer | Approach | |-------|----------| | **Base blobs** | Factory Google / Lineage-equivalent extract (e.g. TheMuppets or `extract-files` from factory) — same hardware binaries stock uses | | **AXP diffs** | Only sunfish-relevant proprietary/packaging diffs from AXP A15 reference | | **GrapheneOS diffs** | Historical **sunfish A13** where still applicable; plus ideas from a **currently supported Pixel** when code is shared and still relevant (sunfish is EOL — do not assume every modern GOS change ports) | Do **not** chase exotic blob sets for location quality; NLP/services matter more than swapping vendor GPS blobs.