anchorage_layer_simple/export-backup.sh
ncantu dde1ccbb07 fix: Improve .env loading and add backup/startup scripts
**Motivations:**
- Fix 401 error on anchorage API due to .env not being loaded correctly
- Fix 502 error on dashboard due to service not running
- Add backup script for mining keys and wallet descriptors
- Improve service management with startup scripts and systemd services

**Root causes:**
- dotenv.config() was called without explicit path, causing .env to be loaded from wrong directory
- Services were not started automatically, causing 502 errors
- No backup mechanism for critical keys and wallet data

**Correctifs:**
- Improved .env loading in api-anchorage/src/server.js with explicit path
- Improved .env loading in signet-dashboard/src/server.js with explicit path
- Added backups/ directory to .gitignore to prevent committing sensitive data
- Created export-backup.sh script for backing up mining keys and wallet descriptors

**Evolutions:**
- Added api-anchorage/start.sh script for proper service startup
- Added api-anchorage/anchorage-api.service systemd service file
- Added fixKnowledge/api-anchorage-401-error.md documentation
- Added fixKnowledge/dashboard-502-error.md documentation
- Updated mempool submodule

**Pages affectées:**
- .gitignore (added backups/)
- api-anchorage/src/server.js (improved .env loading)
- api-anchorage/start.sh (new)
- api-anchorage/anchorage-api.service (new)
- signet-dashboard/src/server.js (improved .env loading)
- export-backup.sh (new)
- fixKnowledge/api-anchorage-401-error.md (new)
- fixKnowledge/dashboard-502-error.md (new)
- mempool (submodule updated)
2026-01-24 03:17:48 +01:00

170 lines
5.0 KiB
Bash
Executable File

#!/bin/bash
# Script to export mining private key and wallet descriptors with private keys for backup
# Author: 4NK Team
# Date: 2026-01-23
set -e
CONTAINER_NAME="bitcoin-signet-instance"
DATADIR="/root/.bitcoin"
WALLET_NAME="custom_signet"
BACKUP_DIR="./backups"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="${BACKUP_DIR}/backup_${TIMESTAMP}.txt"
# Create backup directory if it doesn't exist
mkdir -p "${BACKUP_DIR}"
echo "=== Exporting Bitcoin Signet Backup ==="
echo "Container: ${CONTAINER_NAME}"
echo "Backup file: ${BACKUP_FILE}"
echo ""
# Check if container is running
if ! sudo docker ps --format "{{.Names}}" | grep -q "^${CONTAINER_NAME}$"; then
echo "Error: Container ${CONTAINER_NAME} is not running"
exit 1
fi
# Start backup file with header
cat > "${BACKUP_FILE}" << EOF
# Bitcoin Signet Backup
# Generated: $(date -Iseconds)
# Container: ${CONTAINER_NAME}
#
# WARNING: This file contains private keys. Keep it secure and encrypted.
# ======================================================================
EOF
# Export PRIVKEY (mining private key)
echo "1. Exporting mining private key (PRIVKEY)..."
PRIVKEY=$(sudo docker exec ${CONTAINER_NAME} cat ${DATADIR}/PRIVKEY.txt 2>/dev/null || echo "")
if [[ -n "${PRIVKEY}" ]]; then
cat >> "${BACKUP_FILE}" << EOF
## Mining Private Key (PRIVKEY)
PRIVKEY=${PRIVKEY}
EOF
echo " ✓ PRIVKEY exported"
else
echo " ⚠ PRIVKEY not found in container"
cat >> "${BACKUP_FILE}" << EOF
## Mining Private Key (PRIVKEY)
# PRIVKEY not found in container
EOF
fi
# Export SIGNETCHALLENGE
echo "2. Exporting SIGNETCHALLENGE..."
SIGNETCHALLENGE=$(sudo docker exec ${CONTAINER_NAME} cat ${DATADIR}/SIGNETCHALLENGE.txt 2>/dev/null || echo "")
if [[ -n "${SIGNETCHALLENGE}" ]]; then
cat >> "${BACKUP_FILE}" << EOF
## Signet Challenge
SIGNETCHALLENGE=${SIGNETCHALLENGE}
EOF
echo " ✓ SIGNETCHALLENGE exported"
else
echo " ⚠ SIGNETCHALLENGE not found in container"
cat >> "${BACKUP_FILE}" << EOF
## Signet Challenge
# SIGNETCHALLENGE not found in container
EOF
fi
# Export wallet descriptors with private keys
echo "3. Exporting wallet descriptors with private keys..."
cat >> "${BACKUP_FILE}" << EOF
## Wallet Descriptors (with private keys)
# Wallet name: ${WALLET_NAME}
# Command: bitcoin-cli -datadir=${DATADIR} listdescriptors true
EOF
# Get descriptors with private keys (true parameter includes private keys)
DESCRIPTORS=$(sudo docker exec ${CONTAINER_NAME} bitcoin-cli -datadir=${DATADIR} listdescriptors true 2>/dev/null || echo "")
if [[ -n "${DESCRIPTORS}" ]]; then
echo "${DESCRIPTORS}" | jq '.' >> "${BACKUP_FILE}" 2>/dev/null || echo "${DESCRIPTORS}" >> "${BACKUP_FILE}"
echo " ✓ Wallet descriptors exported"
else
echo " ⚠ Failed to export wallet descriptors"
cat >> "${BACKUP_FILE}" << EOF
# Failed to export wallet descriptors
# Make sure the wallet is loaded and accessible
EOF
fi
# Export wallet info
echo "4. Exporting wallet information..."
cat >> "${BACKUP_FILE}" << EOF
## Wallet Information
EOF
WALLET_INFO=$(sudo docker exec ${CONTAINER_NAME} bitcoin-cli -datadir=${DATADIR} getwalletinfo 2>/dev/null || echo "")
if [[ -n "${WALLET_INFO}" ]]; then
echo "${WALLET_INFO}" | jq '.' >> "${BACKUP_FILE}" 2>/dev/null || echo "${WALLET_INFO}" >> "${BACKUP_FILE}"
echo " ✓ Wallet info exported"
else
echo " ⚠ Failed to export wallet info"
cat >> "${BACKUP_FILE}" << EOF
# Failed to export wallet info
EOF
fi
# Export network info
echo "5. Exporting network information..."
cat >> "${BACKUP_FILE}" << EOF
## Network Information
EOF
NETWORK_INFO=$(sudo docker exec ${CONTAINER_NAME} bitcoin-cli -datadir=${DATADIR} getnetworkinfo 2>/dev/null || echo "")
if [[ -n "${NETWORK_INFO}" ]]; then
echo "${NETWORK_INFO}" | jq '.' >> "${BACKUP_FILE}" 2>/dev/null || echo "${NETWORK_INFO}" >> "${BACKUP_FILE}"
echo " ✓ Network info exported"
else
echo " ⚠ Failed to export network info"
fi
# Export blockchain info
echo "6. Exporting blockchain information..."
cat >> "${BACKUP_FILE}" << EOF
## Blockchain Information
EOF
BLOCKCHAIN_INFO=$(sudo docker exec ${CONTAINER_NAME} bitcoin-cli -datadir=${DATADIR} getblockchaininfo 2>/dev/null || echo "")
if [[ -n "${BLOCKCHAIN_INFO}" ]]; then
echo "${BLOCKCHAIN_INFO}" | jq '.' >> "${BACKUP_FILE}" 2>/dev/null || echo "${BLOCKCHAIN_INFO}" >> "${BACKUP_FILE}"
echo " ✓ Blockchain info exported"
else
echo " ⚠ Failed to export blockchain info"
fi
# Add footer
cat >> "${BACKUP_FILE}" << EOF
# ======================================================================
# End of Backup
# ======================================================================
EOF
echo ""
echo "=== Backup completed ==="
echo "Backup file: ${BACKUP_FILE}"
echo "File size: $(du -h "${BACKUP_FILE}" | cut -f1)"
echo ""
echo "⚠ WARNING: This file contains private keys. Keep it secure!"
echo " Recommended: Encrypt this file before storing or transferring."
echo ""
echo "To encrypt the backup:"
echo " gpg -c ${BACKUP_FILE}"
echo ""