chore(ops,docs): first-boot containers, image versions, design docs, android remote-input

- first-boot-containers + image-versions for fmcd/fedimint
- dual-ecash, meshroller-integration, and remaining-issues design docs
- Android remote-input two-finger scroll + external-open handling

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
archipelago
2026-06-17 19:22:02 -04:00
co-authored by Claude Opus 4.8
parent 87769cbfbf
commit 705e2436ba
8 changed files with 622 additions and 1 deletions
+52 -1
View File
@@ -172,6 +172,31 @@ FBEOF
chown -R 1000:1000 /var/lib/archipelago/secrets
fi
# Create Fedimint Client (fmcd) alongside FileBrowser so ecash / networking
# sats work out of the box even on unbundled images. Image is pulled (not
# pre-loaded). Resilient entrypoint retries on join failure → never crash-loops.
if ! $DOCKER ps -a --format '{{.Names}}' 2>/dev/null | grep -q '^fedimint-clientd$'; then
log "Creating Fedimint Client (fmcd)..."
mkdir -p /var/lib/archipelago/fmcd
FMCD_PW_FILE=/var/lib/archipelago/fmcd/password
[ -s "$FMCD_PW_FILE" ] || head -c 24 /dev/urandom | base64 | tr -dc 'A-Za-z0-9' > "$FMCD_PW_FILE"
FMCD_PW="$(cat "$FMCD_PW_FILE")"
FMCD_DEFAULT_INVITE="fed11qgqyj3mfwfhksw309uuxywtxxfjrjc35xuexverpxdsnxcnrxucxvenzveskgc3kvvun2c34xp3k2ep38yunzdpexcekxe3hvd3rvvmx8pnrvdenx5mnzvtzqqqjqt0t6pc3s5z0ynqjw9s4njf6svwgu59kweawc0vvrddcjeemw6yyn4pcdp"
pull_with_fallback "${FMCD_IMAGE}"
$DOCKER run -d --name fedimint-clientd --restart unless-stopped \
--network archy-net \
--cap-drop ALL --cap-add CHOWN --cap-add SETUID --cap-add SETGID --cap-add DAC_OVERRIDE \
--security-opt no-new-privileges:true \
--health-cmd='curl -sf http://localhost:8080/health || exit 1' \
--health-interval=120s --health-timeout=10s --health-retries=3 \
--memory=256m \
-p 8178:8080 \
-v /var/lib/archipelago/fmcd:/data \
-e FMCD_ADDR=0.0.0.0:8080 -e FMCD_MODE=rest -e FMCD_DATA_DIR=/data \
-e FMCD_PASSWORD="$FMCD_PW" -e FMCD_INVITE_CODE="$FMCD_DEFAULT_INVITE" \
${FMCD_IMAGE} 2>>"$LOG" && log " fmcd created" || log " WARNING: fmcd creation failed"
fi
# Generate WireGuard keys for standalone VPN (archipelago-wg service)
WG_DIR="/var/lib/archipelago/wireguard"
if [ ! -f "$WG_DIR/private.key" ]; then
@@ -532,6 +557,7 @@ mem_limit() {
homeassistant) echo "512m";;
fedimint) echo "512m";;
fedimint-gateway) echo "512m";;
fedimint-clientd) echo "256m";;
photoprism) $LOW_MEM && echo "512m" || echo "1g";;
mempool-api) echo "512m";;
jellyfin) echo "1g";;
@@ -560,7 +586,7 @@ MISSING_IMAGES=""
for img_var in BITCOIN_KNOTS_IMAGE MARIADB_IMAGE ELECTRUMX_IMAGE \
MEMPOOL_BACKEND_IMAGE MEMPOOL_WEB_IMAGE BTCPAY_POSTGRES_IMAGE \
NBXPLORER_IMAGE BTCPAY_IMAGE LND_IMAGE FEDIMINT_IMAGE \
FEDIMINT_GATEWAY_IMAGE HOMEASSISTANT_IMAGE GRAFANA_IMAGE \
FEDIMINT_GATEWAY_IMAGE FMCD_IMAGE HOMEASSISTANT_IMAGE GRAFANA_IMAGE \
UPTIME_KUMA_IMAGE JELLYFIN_IMAGE VAULTWARDEN_IMAGE \
NEXTCLOUD_IMAGE SEARXNG_IMAGE FILEBROWSER_IMAGE; do
img="${!img_var}"
@@ -1019,6 +1045,31 @@ if ! $DOCKER ps --format '{{.Names}}' 2>/dev/null | grep -q fedimint-gateway; th
fi
track_container "fedimint-gateway"
# 5c. Fedimint Client (fmcd) — ecash client daemon; auto-joins the default
# federation. The image's resilient entrypoint retries on join failure (fmcd
# needs >=1 federation to boot), so an unreachable default never crash-loops the
# node. The archipelago wallet bridge reads the password from
# /var/lib/archipelago/fmcd/password and talks to it on host port 8178.
if ! $DOCKER ps --format '{{.Names}}' 2>/dev/null | grep -q '^fedimint-clientd$'; then
log "Creating Fedimint Client (fmcd)..."
mkdir -p /var/lib/archipelago/fmcd
FMCD_PW_FILE=/var/lib/archipelago/fmcd/password
[ -s "$FMCD_PW_FILE" ] || head -c 24 /dev/urandom | base64 | tr -dc 'A-Za-z0-9' > "$FMCD_PW_FILE"
FMCD_PW="$(cat "$FMCD_PW_FILE")"
FMCD_DEFAULT_INVITE="fed11qgqyj3mfwfhksw309uuxywtxxfjrjc35xuexverpxdsnxcnrxucxvenzveskgc3kvvun2c34xp3k2ep38yunzdpexcekxe3hvd3rvvmx8pnrvdenx5mnzvtzqqqjqt0t6pc3s5z0ynqjw9s4njf6svwgu59kweawc0vvrddcjeemw6yyn4pcdp"
$DOCKER run -d --name fedimint-clientd --restart unless-stopped \
--health-cmd="curl -sf http://localhost:8080/health || exit 1" --health-interval=120s --health-timeout=10s --health-retries=3 \
--memory=$(mem_limit fedimint-clientd) --network archy-net --network-alias fedimint-clientd \
--cap-drop ALL --cap-add CHOWN --cap-add SETUID --cap-add SETGID --cap-add DAC_OVERRIDE \
--security-opt no-new-privileges:true \
-p 8178:8080 \
-v /var/lib/archipelago/fmcd:/data \
-e FMCD_ADDR=0.0.0.0:8080 -e FMCD_MODE=rest -e FMCD_DATA_DIR=/data \
-e FMCD_PASSWORD="$FMCD_PW" -e FMCD_INVITE_CODE="$FMCD_DEFAULT_INVITE" \
"$FMCD_IMAGE" 2>>"$LOG" || true
fi
track_container "fedimint-clientd"
# (Bitcoin-dependent containers created above regardless of BITCOIN_READY)
# ── Tier 3: Applications (independent — always attempt) ───────────────────
+5
View File
@@ -57,6 +57,11 @@ ADGUARDHOME_IMAGE="$ARCHY_REGISTRY/adguardhome:v0.107.55"
# Fedimint
FEDIMINT_IMAGE="$ARCHY_REGISTRY/fedimintd:v0.10.0"
FEDIMINT_GATEWAY_IMAGE="$ARCHY_REGISTRY/gatewayd:v0.10.0"
# fmcd = Fedimint client daemon (iroh-capable, fedimint-client 0.8.2). Built
# from minmoto/fmcd. NOT yet added to the bundled CONTAINER_IMAGES list / first-
# boot auto-create: bundling fleet-wide needs a fleet-reachable default
# federation first (the interim default is node-local). See docs/dual-ecash-design.md.
FMCD_IMAGE="$ARCHY_REGISTRY/fmcd:0.8.0"
# Media
REDIS_IMAGE="$ARCHY_REGISTRY/redis:7.4.8"