From 42187b82543da6d6c2055c408190900ea326f1d3 Mon Sep 17 00:00:00 2001 From: Guido Schmit Date: Thu, 16 Jul 2026 19:09:31 +0200 Subject: [PATCH] docs: F-Droid own-repo hosting on a Proxmox LXC (build on Mac, index+serve on LXC) --- FDROID.md | 55 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/FDROID.md b/FDROID.md index 78da5b9..0169fae 100644 --- a/FDROID.md +++ b/FDROID.md @@ -19,40 +19,51 @@ so it is F-Droid-eligible. Store-listing metadata lives in `fastlane/metadata/ ## A) Your own repo (fdroid.scarriffle.com) -Needs the `fdroidserver` tool + Android SDK build-tools (for `aapt`). +The repo is just static files (APKs + a signed index). Host + generate it on an +always-on **Debian/Ubuntu LXC on Proxmox**, and keep the APK build/signing on the +Mac (where the keystore lives). + +### One-time: set up the LXC ```bash -# 1. Install the tool (macOS) -brew install fdroidserver # or: pipx install fdroidserver +# Debian/Ubuntu LXC — fdroidserver + the Android build-tools it reads APKs with, +# plus a webserver. +apt update +apt install -y fdroidserver android-sdk-build-tools default-jdk nginx +# (if the distro has no android-sdk-build-tools pkg, install Android command-line +# tools and `sdkmanager "build-tools;34.0.0"`, then point $ANDROID_HOME at it) -# 2. Build a SIGNED release APK (uses keystore.properties; F-Droid repos serve -# APKs, not AABs) -./gradlew assembleRelease -# → app/build/outputs/apk/release/app-release.apk - -# 3. Create the repo (once). Generates config.yml + an index-signing key. -mkdir -p ~/calendarr-fdroid && cd ~/calendarr-fdroid +# Create the repo once (generates config.yml + an index-signing key) +mkdir -p /srv/fdroid && cd /srv/fdroid fdroid init -# 4. Drop the signed APK in and copy the store metadata -cp "/path/to/Calendarr Android/app/build/outputs/apk/release/app-release.apk" repo/ -mkdir -p metadata -# copy the fastlane texts/icons so descriptions show in the client: -cp -r "/path/to/Calendarr Android/fastlane/metadata/android" metadata/com.scarriffle.calendarr +# Serve /srv/fdroid via nginx/caddy at https://fdroid.scarriffle.com/fdroid +# (document root = /srv/fdroid; TLS via your existing reverse proxy / certbot) +``` -# 5. Generate/refresh the signed index -fdroid update -c --pretty +### Each release -# 6. Upload the whole ~/calendarr-fdroid/repo directory to your webserver at: -# https://fdroid.scarriffle.com/fdroid/repo +```bash +# 1. On the MAC: build a SIGNED release APK (F-Droid repos serve APKs, not AABs) +./gradlew assembleRelease # → app/build/outputs/apk/release/app-release.apk + +# 2. Copy APK + store metadata to the LXC +scp app/build/outputs/apk/release/app-release.apk root@lxc:/srv/fdroid/repo/ +rsync -a "fastlane/metadata/android/" root@lxc:/srv/fdroid/metadata/com.scarriffle.calendarr/ + +# 3. On the LXC: regenerate the signed index +cd /srv/fdroid && fdroid update -c --pretty ``` Users then open F-Droid → Settings → Repositories → **+** → `https://fdroid.scarriffle.com/fdroid/repo` → Calendarr appears and auto-updates. -**Each new release:** bump `versionCode`/`versionName` in `app/build.gradle.kts`, -`./gradlew assembleRelease`, copy the new APK into `repo/`, `fdroid update -c`, -re-upload. Keep the OLD apks in `repo/` too (users on older versions still update). +Keep the OLD apks in `repo/` too (users on older versions still update). For each +new version bump `versionCode`/`versionName` in `app/build.gradle.kts` first. + +*(Fully hands-off alternative: build on the LXC too — then copy the keystore + +`keystore.properties` there and run `assembleRelease` in a checkout. The Mac +split above avoids putting the signing key on the server.)* ---