merge: bring the open-source readiness work onto the phase-13 branch
Merges gitea-ai/main (65 commits) into the phase-13 branch (419) so one
build carries both lines — the AIUI/assistant/container work and the
open-source readiness work (licensing, the marketplace DID signature layer,
the registry domain migration, the secrets and infrastructure scrub).
Every Rust file auto-merged. The container fixes from this branch and main's
registry-domain migration and node-name genericisation coexist without
manual intervention.
Conflict resolution — all of them were modify/delete, and all were resolved
in main's favour deliberately:
`.planning/**`, `scripts/deploy-to-target.sh` and `scripts/setup-aiui-server.sh`
were deleted by main's `6ba05996` ("security: remove all infrastructure and
internal process material from the repo") and added to .gitignore there.
Keeping this branch's copies would have re-committed internal process and
infrastructure material into a repo being prepared for publication, silently
undoing that cleanup. Resolved with `git rm --cached`, so every file remains
on disk locally and in this branch's history — it is untracked, not lost.
The remaining .planning files this branch added after the merge base were
untracked the same way, so the result is consistent rather than half-tracked.
Container suite 221/221 on the merged tree.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -112,7 +112,7 @@ jobs:
|
||||
run: |
|
||||
sudo mkdir -p /etc/containers/registries.conf.d
|
||||
echo '[[registry]]
|
||||
location = "146.59.87.168:3000"
|
||||
location = "source.archipelago-foundation.org"
|
||||
insecure = true' | sudo tee /etc/containers/registries.conf.d/archipelago.conf
|
||||
|
||||
- name: Build unbundled ISO
|
||||
@@ -243,7 +243,7 @@ jobs:
|
||||
|
||||
# Build download base URL (FileBrowser serves from /Builds/)
|
||||
HOST=$(hostname -I 2>/dev/null | awk '{print $1}')
|
||||
BASE_URL="http://${HOST:-192.168.1.228}:8083/Builds/releases/v${VERSION}"
|
||||
BASE_URL="http://${HOST:-192.0.2.10}:8083/Builds/releases/v${VERSION}"
|
||||
|
||||
# Generate manifest JSON
|
||||
python3 -c "
|
||||
|
||||
@@ -18,7 +18,7 @@ The script will automatically:
|
||||
```bash
|
||||
# From your Mac (captures from remote dev server):
|
||||
cd image-recipe
|
||||
DEV_SERVER=archipelago@192.168.1.228 sudo bash build-auto-installer-iso.sh
|
||||
DEV_SERVER=archipelago@192.0.2.10 sudo bash build-auto-installer-iso.sh
|
||||
|
||||
# From the dev server itself:
|
||||
cd ~/archy/image-recipe
|
||||
@@ -40,7 +40,7 @@ BUILD_FROM_SOURCE=1 sudo bash build-auto-installer-iso.sh
|
||||
```bash
|
||||
# Instead of building on the server, build from your Mac:
|
||||
cd ~/Projects/archy/image-recipe
|
||||
DEV_SERVER=archipelago@192.168.1.228 sudo bash build-auto-installer-iso.sh
|
||||
DEV_SERVER=archipelago@192.0.2.10 sudo bash build-auto-installer-iso.sh
|
||||
```
|
||||
|
||||
### Issue: Podman registry not configured
|
||||
@@ -49,7 +49,7 @@ DEV_SERVER=archipelago@192.168.1.228 sudo bash build-auto-installer-iso.sh
|
||||
|
||||
**Fix**:
|
||||
```bash
|
||||
ssh archipelago@192.168.1.228
|
||||
ssh archipelago@192.0.2.10
|
||||
sudo tee -a /etc/containers/registries.conf <<EOF
|
||||
[registries.search]
|
||||
registries = ['docker.io']
|
||||
@@ -65,7 +65,7 @@ cd ~/Projects/archy/image-recipe
|
||||
|
||||
## What Gets Captured
|
||||
|
||||
From your dev server (192.168.1.228):
|
||||
From your dev server (192.0.2.10):
|
||||
- ✅ Backend binary: `/usr/local/bin/archipelago` (6.2M)
|
||||
- ✅ Frontend: `/opt/archipelago/web-ui` (~64M)
|
||||
- ✅ Nginx config: `/etc/nginx/sites-available/default`
|
||||
|
||||
@@ -8,7 +8,6 @@ This checklist ensures that all changes from the live development server are pro
|
||||
|
||||
```bash
|
||||
cd image-recipe
|
||||
./sync-from-live.sh
|
||||
```
|
||||
|
||||
This captures:
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
# Set DEV_SERVER to point to your development server.
|
||||
#
|
||||
# Usage:
|
||||
# DEV_SERVER=archipelago@192.168.1.228 ./build-auto-installer-iso.sh
|
||||
# DEV_SERVER=archipelago@192.0.2.10 ./build-auto-installer-iso.sh
|
||||
# OR just: ./build-auto-installer-iso.sh (uses default server)
|
||||
#
|
||||
# To build from source instead:
|
||||
@@ -49,7 +49,7 @@ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
[ -f "$SCRIPT_DIR/../../scripts/image-versions.sh" ] && . "$SCRIPT_DIR/../../scripts/image-versions.sh"
|
||||
|
||||
# Configuration
|
||||
DEV_SERVER="${DEV_SERVER:-archipelago@192.168.1.228}"
|
||||
DEV_SERVER="${DEV_SERVER:-archipelago@192.0.2.10}"
|
||||
BUILD_FROM_SOURCE="${BUILD_FROM_SOURCE:-0}"
|
||||
UNBUNDLED="${UNBUNDLED:-0}"
|
||||
ARCH="${ARCH:-x86_64}"
|
||||
@@ -223,7 +223,7 @@ check_tools() {
|
||||
fi
|
||||
if mkdir -p "$REGCONF_DIR" 2>/dev/null && cat > "$REGCONF_DIR/archipelago.conf" 2>/dev/null <<'REGCONF'
|
||||
[[registry]]
|
||||
location = "146.59.87.168:3000"
|
||||
location = "source.archipelago-foundation.org"
|
||||
insecure = true
|
||||
REGCONF
|
||||
then
|
||||
@@ -241,7 +241,7 @@ mkdir -p "$OUTPUT_DIR"
|
||||
|
||||
container_pull() {
|
||||
local image="$1"
|
||||
if [[ "$CONTAINER_CMD" == podman* && "$image" == 146.59.87.168:3000/* ]]; then
|
||||
if [[ "$CONTAINER_CMD" == podman* && "$image" == source.archipelago-foundation.org/* ]]; then
|
||||
$CONTAINER_CMD pull --tls-verify=false --platform "$CONTAINER_PLATFORM" "$image"
|
||||
else
|
||||
$CONTAINER_CMD pull --platform "$CONTAINER_PLATFORM" "$image"
|
||||
@@ -1270,7 +1270,7 @@ fi
|
||||
# copies everything in archipelago/bin/ to /usr/local/bin, and the mesh
|
||||
# listener spawns /usr/local/bin/archy-reticulum-daemon for RNode radios —
|
||||
# a node imaged without it can never connect a Reticulum stick
|
||||
# (framework-pt, 2026-07-22: silent connect failures until hand-copied).
|
||||
# (a test node, 2026-07-22: silent connect failures until hand-copied).
|
||||
RETICULUM_DAEMON="${ARCHY_RETICULUM_DAEMON:-/usr/local/bin/archy-reticulum-daemon}"
|
||||
if [ -f "$RETICULUM_DAEMON" ]; then
|
||||
cp "$RETICULUM_DAEMON" "$ARCH_DIR/bin/archy-reticulum-daemon"
|
||||
@@ -1283,7 +1283,7 @@ fi
|
||||
# archy-rnodeconf drives the in-app "Flash LoRa" flow for RNode firmware
|
||||
# (mesh/flash.rs spawns /usr/local/bin/archy-rnodeconf --autoinstall). A node
|
||||
# imaged without it fails every RNode flash with "No such file or directory"
|
||||
# (framework-pt, 2026-07-29, v1.7.117).
|
||||
# (a test node, 2026-07-29, v1.7.117).
|
||||
RNODECONF="${ARCHY_RNODECONF:-/usr/local/bin/archy-rnodeconf}"
|
||||
if [ -f "$RNODECONF" ]; then
|
||||
cp "$RNODECONF" "$ARCH_DIR/bin/archy-rnodeconf"
|
||||
@@ -1330,11 +1330,11 @@ fi
|
||||
|
||||
# Extract nostr-rs-relay binary from container image (native system service for VPN signaling)
|
||||
echo " Extracting nostr-rs-relay binary..."
|
||||
RELAY_IMAGE="$($CONTAINER_CMD images -q 146.59.87.168:3000/lfg2025/nostr-rs-relay:0.9.0 2>/dev/null)"
|
||||
RELAY_IMAGE="$($CONTAINER_CMD images -q source.archipelago-foundation.org/lfg2025/nostr-rs-relay:0.9.0 2>/dev/null)"
|
||||
if [ -z "$RELAY_IMAGE" ]; then
|
||||
$CONTAINER_CMD pull 146.59.87.168:3000/lfg2025/nostr-rs-relay:0.9.0 2>/dev/null || true
|
||||
$CONTAINER_CMD pull source.archipelago-foundation.org/lfg2025/nostr-rs-relay:0.9.0 2>/dev/null || true
|
||||
fi
|
||||
RELAY_CONTAINER=$($CONTAINER_CMD create 146.59.87.168:3000/lfg2025/nostr-rs-relay:0.9.0 2>/dev/null) || true
|
||||
RELAY_CONTAINER=$($CONTAINER_CMD create source.archipelago-foundation.org/lfg2025/nostr-rs-relay:0.9.0 2>/dev/null) || true
|
||||
if [ -n "$RELAY_CONTAINER" ]; then
|
||||
# The relay image builds to its WORKDIR /usr/src/app and execs
|
||||
# ./nostr-rs-relay from there (not /usr/local/bin — that path was from an
|
||||
@@ -1359,7 +1359,7 @@ if [ -n "$MISSING_VPN_BINARIES" ]; then
|
||||
echo " ⚠ Building WITHOUT:$MISSING_VPN_BINARIES (ALLOW_MISSING_VPN_BINARIES=1)"
|
||||
else
|
||||
echo " ❌ Required binaries not extracted:$MISSING_VPN_BINARIES"
|
||||
echo " The registry (146.59.87.168:3000) must be reachable and hold the images,"
|
||||
echo " The registry (source.archipelago-foundation.org) must be reachable and hold the images,"
|
||||
echo " or set ALLOW_MISSING_VPN_BINARIES=1 to ship without VPN signaling."
|
||||
exit 1
|
||||
fi
|
||||
@@ -2512,7 +2512,7 @@ if [ -f /var/lib/archipelago/tor-hostnames/bitcoin ]; then
|
||||
BOOTSTRAP_ONION=$(cat /var/lib/archipelago/tor-hostnames/bitcoin 2>/dev/null)
|
||||
fi
|
||||
if [ -n "$BOOTSTRAP_RPC_PASS" ]; then
|
||||
DEV_IP="${DEV_SERVER:-192.168.1.228}"
|
||||
DEV_IP="${DEV_SERVER:-192.0.2.10}"
|
||||
cat > "$ARCH_DIR/bootstrap.conf" <<BSTRAP
|
||||
# Bootstrap Bitcoin node — used during Initial Block Download
|
||||
# Services connect here until the local node is fully synced
|
||||
@@ -3028,11 +3028,11 @@ cat > /mnt/target/home/archipelago/.config/containers/registries.conf <<'REGCONF
|
||||
unqualified-search-registries = ["docker.io"]
|
||||
|
||||
[[registry]]
|
||||
location = "146.59.87.168:3000"
|
||||
location = "source.archipelago-foundation.org"
|
||||
insecure = true
|
||||
|
||||
[[registry]]
|
||||
location = "146.59.87.168:3000"
|
||||
location = "source.archipelago-foundation.org"
|
||||
insecure = true
|
||||
REGCONF
|
||||
chown -R 1000:1000 /mnt/target/home/archipelago/.config
|
||||
@@ -3042,8 +3042,8 @@ mkdir -p /mnt/target/var/lib/archipelago/config
|
||||
cat > /mnt/target/var/lib/archipelago/config/registries.json <<'DYNREG'
|
||||
{
|
||||
"registries": [
|
||||
{"url": "146.59.87.168:3000/lfg2025", "name": "Archipelago Primary", "tls_verify": false, "enabled": true, "priority": 0},
|
||||
{"url": "146.59.87.168:3000/lfg2025", "name": "Archipelago Fallback", "tls_verify": true, "enabled": true, "priority": 10}
|
||||
{"url": "source.archipelago-foundation.org/lfg2025", "name": "Archipelago Primary", "tls_verify": false, "enabled": true, "priority": 0},
|
||||
{"url": "source.archipelago-foundation.org/lfg2025", "name": "Archipelago Fallback", "tls_verify": true, "enabled": true, "priority": 10}
|
||||
]
|
||||
}
|
||||
DYNREG
|
||||
@@ -3217,7 +3217,7 @@ if [ -d "$REPO_DIR/.git" ]; then
|
||||
exit 0 # Already cloned
|
||||
fi
|
||||
echo "[update] Cloning Archipelago repo for self-updates..."
|
||||
su - archipelago -c "git clone https://146.59.87.168:3000/lfg2025/archy $REPO_DIR" 2>/dev/null || {
|
||||
su - archipelago -c "git clone https://source.archipelago-foundation.org/lfg2025/archy $REPO_DIR" 2>/dev/null || {
|
||||
echo "[update] Git clone failed (network?). Updates will retry on next boot."
|
||||
exit 0
|
||||
}
|
||||
@@ -3266,7 +3266,8 @@ if [ -t 0 ] && [ -z "$ARCHIPELAGO_WELCOMED" ]; then
|
||||
if [ -n "$IP" ]; then
|
||||
echo -e " ${W}web ui http://$IP${N}"
|
||||
echo -e " ${W}ssh archipelago@$IP${N}"
|
||||
echo -e " ${W}password archipelago (SSH) / password123 (Web)${N}"
|
||||
echo -e " ${W}password archipelago (SSH)${N}"
|
||||
echo -e " ${OD}web ui asks you to create a password on first visit${N}"
|
||||
else
|
||||
echo -e " ${OD}Waiting for network...${N}"
|
||||
fi
|
||||
@@ -4102,7 +4103,7 @@ p "${ORANGE} http://<this machine's IP>${NC}"
|
||||
echo ""
|
||||
p "${WHITE} SSH ssh archipelago@<IP>${NC}"
|
||||
p "${WHITE} Password archipelago${NC}"
|
||||
p "${WHITE} Web Login password123${NC}"
|
||||
p "${WHITE} Web Login create your password on first visit${NC}"
|
||||
echo ""
|
||||
hrule
|
||||
echo ""
|
||||
|
||||
@@ -16,14 +16,14 @@
|
||||
#
|
||||
# Usage:
|
||||
# sudo ./build-unbundled-iso.sh
|
||||
# DEV_SERVER=archipelago@192.168.1.228 sudo ./build-unbundled-iso.sh
|
||||
# DEV_SERVER=archipelago@192.0.2.10 sudo ./build-unbundled-iso.sh
|
||||
# BUILD_FROM_SOURCE=1 sudo ./build-unbundled-iso.sh
|
||||
#
|
||||
|
||||
set -e
|
||||
|
||||
# Configuration
|
||||
DEV_SERVER="${DEV_SERVER:-archipelago@192.168.1.228}"
|
||||
DEV_SERVER="${DEV_SERVER:-archipelago@192.0.2.10}"
|
||||
BUILD_FROM_SOURCE="${BUILD_FROM_SOURCE:-0}"
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
|
||||
Reference in New Issue
Block a user