anchorage_layer_simple/export-backup.sh
ncantu 937646cc45 Daily backup to git cron, backup/restore scripts, docs
**Motivations:**
- Export Signet and mining wallet backups to git with only 2 versions kept
- Document and add backup/restore scripts for signet and mining wallet

**Correctifs:**
- Backup-to-git uses SSH URL for passwordless cron; copy timestamped files only; prune to 2 versions; remove *-latest from backup repo

**Evolutions:**
- data/backup-to-git-cron.sh: daily export to git.4nkweb.com/4nk/backup
- save-signet-datadir-backup.sh, restore-signet-from-backup.sh, export-mining-wallet.sh, import-mining-wallet.sh
- features/backup-to-git-daily-cron.md, docs/MAINTENANCE.md backup section
- .gitignore: data/backup-to-git.log

**Pages affectées:**
- .gitignore, data/backup-to-git-cron.sh, docs/MAINTENANCE.md, features/backup-to-git-daily-cron.md
- save-signet-datadir-backup.sh, restore-signet-from-backup.sh, export-mining-wallet.sh, import-mining-wallet.sh
- Plus autres fichiers modifiés ou non suivis déjà présents dans le working tree
2026-02-04 03:07:57 +01:00

173 lines
5.1 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"
# Use BITCOIN_DIR from container so we talk to the same datadir as bitcoind
DATADIR=""
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
DATADIR=$(sudo docker exec "$CONTAINER_NAME" printenv BITCOIN_DIR 2>/dev/null || echo "/root/.bitcoin")
# 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 ""