From 6e3d8ff3eac57c47c0d631d2eb9befebbbf1e0ec Mon Sep 17 00:00:00 2001 From: Dorian Date: Wed, 18 Mar 2026 16:07:09 +0000 Subject: [PATCH] fix: ElectrumX sync detection + rootless podman infrastructure - ElectrumX status: detect "Connection reset" as syncing (not error) by using case-insensitive check on connect/reset/refused - Deploy script: auto-configure rootless podman prerequisites (sysctl unprivileged ports >= 80, loginctl linger, podman socket) - Marketplace: sort installed apps to bottom of list Co-Authored-By: Claude Opus 4.6 (1M context) --- core/archipelago/src/electrs_status.rs | 3 ++- scripts/deploy-to-target.sh | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/core/archipelago/src/electrs_status.rs b/core/archipelago/src/electrs_status.rs index 6f3dad7f..105560e2 100644 --- a/core/archipelago/src/electrs_status.rs +++ b/core/archipelago/src/electrs_status.rs @@ -174,7 +174,8 @@ pub async fn get_electrs_sync_status() -> ElectrsSyncStatus { Ok(Err(e)) => { // ElectrumX may not be ready on 50001 during initial sync let err_msg = e.to_string(); - let (status, error) = if err_msg.contains("connect") || err_msg.contains("Connection refused") { + let err_lower = err_msg.to_lowercase(); + let (status, error) = if err_lower.contains("connect") || err_lower.contains("reset") || err_lower.contains("refused") { // Estimate progress from data directory size let _est_pct = if data_bytes > 0 { ((data_bytes as f64 / ESTIMATED_FULL_INDEX_BYTES) * 100.0).min(99.0) diff --git a/scripts/deploy-to-target.sh b/scripts/deploy-to-target.sh index f86aa08f..132bf941 100755 --- a/scripts/deploy-to-target.sh +++ b/scripts/deploy-to-target.sh @@ -643,6 +643,21 @@ PYEOF # Create data directories for DWN, content sharing, federation, identities progress "Creating data directories" ssh $SSH_OPTS "$TARGET_HOST" ' + # Rootless podman: allow binding to ports >= 80 (default is 1024) + if ! grep -q "unprivileged_port_start=80" /etc/sysctl.d/99-rootless-podman.conf 2>/dev/null; then + echo "net.ipv4.ip_unprivileged_port_start=80" | sudo tee /etc/sysctl.d/99-rootless-podman.conf > /dev/null + sudo sysctl -p /etc/sysctl.d/99-rootless-podman.conf 2>/dev/null + echo " Rootless port binding enabled (>=80)" + fi + # Rootless podman: enable lingering for container persistence + if [ "$(loginctl show-user archipelago 2>/dev/null | grep Linger)" != "Linger=yes" ]; then + sudo loginctl enable-linger archipelago + echo " Linger enabled for archipelago user" + fi + # Rootless podman: enable podman socket + systemctl --user enable podman.socket 2>/dev/null || true + systemctl --user start podman.socket 2>/dev/null || true + sudo mkdir -p /var/lib/archipelago/dwn/messages sudo mkdir -p /var/lib/archipelago/dwn/protocols sudo mkdir -p /var/lib/archipelago/content/files