**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
60 lines
2.2 KiB
Bash
Executable File
60 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Create a full datadir backup (blocks + chainstate + config) from the running
|
|
# Bitcoin Signet container. Use this on the machine that has the chain you want
|
|
# to keep (e.g. height ~11535), then copy the archive and run restore-signet-from-backup.sh
|
|
# on the target machine.
|
|
#
|
|
# Usage: ./save-signet-datadir-backup.sh [output_dir]
|
|
# Default output: backups/signet-datadir-YYYYMMDD-HHMMSS.tar.gz
|
|
#
|
|
# Author: 4NK Team
|
|
# Date: 2026-02-02
|
|
|
|
set -e
|
|
|
|
CONTAINER_NAME="bitcoin-signet-instance"
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
cd "$SCRIPT_DIR"
|
|
OUTPUT_DIR="${1:-$SCRIPT_DIR/backups}"
|
|
mkdir -p "$OUTPUT_DIR"
|
|
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
|
|
BACKUP_FILE="$OUTPUT_DIR/signet-datadir-$TIMESTAMP.tar.gz"
|
|
|
|
if ! docker ps --format "{{.Names}}" | grep -q "^${CONTAINER_NAME}$"; then
|
|
echo "Error: Container $CONTAINER_NAME is not running."
|
|
exit 1
|
|
fi
|
|
|
|
# Datadir inside container: use BITCOIN_DIR from container so backup matches actual bitcoind data
|
|
DATADIR=$(docker exec "$CONTAINER_NAME" printenv BITCOIN_DIR 2>/dev/null || echo "/root/.bitcoin")
|
|
DATADIR_REL="${DATADIR#/}"
|
|
|
|
echo "=== Full Signet datadir backup ==="
|
|
echo "Container: $CONTAINER_NAME"
|
|
echo "Datadir: $DATADIR"
|
|
echo "Output: $BACKUP_FILE"
|
|
echo ""
|
|
|
|
echo "Creating archive inside container..."
|
|
# tar may exit 1 if a file changed during read (e.g. wallet.dat); archive is usually still usable
|
|
sudo docker exec "$CONTAINER_NAME" tar czf /tmp/signet-datadir-backup.tar.gz -C / "$DATADIR_REL" || { e=$?; [ "$e" -eq 1 ] || exit "$e"; }
|
|
|
|
echo "Copying archive to host..."
|
|
sudo docker cp "$CONTAINER_NAME:/tmp/signet-datadir-backup.tar.gz" "$BACKUP_FILE"
|
|
|
|
echo "Removing temp file in container..."
|
|
sudo docker exec "$CONTAINER_NAME" rm -f /tmp/signet-datadir-backup.tar.gz
|
|
|
|
echo ""
|
|
echo "Backup saved: $BACKUP_FILE"
|
|
echo "Size: $(du -h "$BACKUP_FILE" | cut -f1)"
|
|
# Symlink for easy download (signet-datadir-latest.tar.gz)
|
|
ln -sf "$(basename "$BACKUP_FILE")" "$OUTPUT_DIR/signet-datadir-latest.tar.gz"
|
|
echo "Latest symlink: $OUTPUT_DIR/signet-datadir-latest.tar.gz -> $(basename "$BACKUP_FILE")"
|
|
echo ""
|
|
echo "To restore on this or another machine:"
|
|
echo " ./restore-signet-from-backup.sh $BACKUP_FILE"
|
|
echo " # or: ./restore-signet-from-backup.sh $OUTPUT_DIR/signet-datadir-latest.tar.gz"
|
|
echo ""
|