Files
raspiblitz/home.admin/config.scripts/blitz.migration.sh
2025-11-11 15:48:02 +01:00

294 lines
9.6 KiB
Bash
Executable File

#!/bin/bash
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
echo "# managing the RaspiBlitz data - import, export, backup."
echo "# blitz.migration.sh [status|export|import|export-gui|import-gui]"
echo "error='missing parameters'"
exit 1
fi
# file to print debug info on longer processes to
logFile="/home/admin/raspiblitz.log"
# check if started with sudo
if [ "$EUID" -ne 0 ]; then
echo "error='missing sudo'"
exit 1
fi
###################
# STATUS
###################
# check if data drive is mounted - other wise cannot operate
isMounted=0
if [ -L /mnt/hdd/app-data ]; then
isMounted=1
fi
# set place where zipped TAR file gets stored
defaultDownloadPath="/mnt/hdd/temp/migration"
defaultUploadPath="/mnt/upload/temp"
# get local ip
source <(/home/admin/config.scripts/internet.sh status local)
# SCP download and upload links
downloadUnix="scp -r 'bitcoin@${localip}:${defaultDownloadPath}/raspiblitz-*.tar.gz' ./"
downloadWin="scp -r bitcoin@${localip}:${defaultDownloadPath}/raspiblitz-*.tar.gz ."
uploadUnix="scp -r ./raspiblitz-*.tar.gz admin@${localip}:${defaultUploadPath}"
uploadWin="scp -r ./raspiblitz-*.tar.gz admin@${localip}:${defaultUploadPath}"
# check for a filename in the upload path
firstMigrationFile=$(ls -1 ${defaultUploadPath}/raspiblitz-*.tar.gz 2>/dev/null | head -n 1)
if [ -n "$firstMigrationFile" ]; then
echo "# Found migration file: ${firstMigrationFile}"
migrationFilename=$(basename "$firstMigrationFile")
else
echo "# No migration files found"
migrationFilename=""
fi
# output status data & exit
if [ "$1" = "status" ]; then
echo "# RASPIBLITZ Data Import & Export"
echo "localip=\"${localip}\""
echo "defaultDownloadPath=\"${defaultDownloadPath}\""
echo "defaultUploadPath=\"${defaultUploadPath}\""
echo "downloadUnix=\"${downloadUnix}\""
echo "uploadUnix=\"${uploadUnix}\""
echo "downloadWin=\"${downloadWin}\""
echo "uploadWin=\"${uploadWin}\""
echo "migrationFile=\"${migrationFilename}\""
exit 1
fi
#########################
# EXPORT RaspiBlitz Data
#########################
if [ "$1" = "export" ]; then
echo "# RASPIBLITZ DATA --> EXPORT"
# clean all temp to make max space
rm -fr /mnt/hdd/temp/* 2>/dev/null
# collect files to exclude in export in temp file
echo "*.tar.gz" > ~/.exclude.temp
# get date stamp
datestamp=$(date "+%y-%m-%d-%H-%M")
echo "# datestamp=${datestamp}"
# get name of RaspiBlitz from config (optional if exists)
blitzname="-"
source /mnt/hdd/app-data/raspiblitz.conf 2>/dev/null
if [ ${#hostname} -gt 0 ]; then
blitzname="-${hostname}-"
fi
echo "# blitzname=${blitzname}"
# place info files into app-data for export
sudo touch /mnt/hdd/app-data/v2.migration.info
# zip it
dataPath=$(readlink -f /mnt/hdd/app-data)
echo "# Building the Export File - this can take some time (${dataPath}) .."
sudo mkdir -p ${defaultDownloadPath}
# sudo tar -zcvf ${defaultDownloadPath}/raspiblitz-export-temp.tar.gz "${dataPath}" 1>~/.include.temp 2>/dev/null
sudo tar -zcvf "${defaultDownloadPath}/raspiblitz-export-temp.tar.gz" -C "$(dirname "$dataPath")" "$(basename "$dataPath")" 1>~/.include.temp 2>/dev/null
# delete info files from app-data after export
sudo rm /mnt/hdd/app-data/v2.migration.info 2>/dev/null
# get md5 checksum
echo "# Building checksum (can take a while) ..."
md5checksum=$(md5sum ${defaultDownloadPath}/raspiblitz-export-temp.tar.gz | head -n1 | cut -d " " -f1)
echo "md5checksum=${md5checksum}"
# get byte size
bytesize=$(wc -c ${defaultDownloadPath}/raspiblitz-export-temp.tar.gz | cut -d " " -f 1)
echo "bytesize=${bytesize}"
# final renaming
name="raspiblitz${blitzname}${datestamp}-${md5checksum}.tar.gz"
echo "exportpath='${defaultDownloadPath}'"
echo "filename='${name}'"
sudo mv ${defaultDownloadPath}/raspiblitz-export-temp.tar.gz ${defaultDownloadPath}/${name}
sudo chown bitcoin:bitcoin ${defaultDownloadPath}/${name}
# delete temp files
rm ~/.exclude.temp
rm ~/.include.temp
echo "name=\"${defaultDownloadPath}/${name}\""
echo "# OK - Export done"
exit 0
fi
if [ "$1" = "export-gui" ]; then
# cleaning old migration files from blitz
sudo rm ${defaultDownloadPath}/*.tar.gz 2>/dev/null
source /mnt/hdd/app-data/raspiblitz.conf
# make sure bitcoin & lighning is stopped
sudo systemctl stop bitcoind 2>/dev/null
sudo systemctl stop tbitcoind 2>/dev/null
sudo systemctl stop sbitcoind 2>/dev/null
sudo systemctl stop lnd 2>/dev/null
sudo systemctl stop tlnd 2>/dev/null
sudo systemctl stop slnd 2>/dev/null
sudo systemctl stop lightningd 2>/dev/null
sudo systemctl stop tlightningd 2>/dev/null
sudo systemctl stop slightningd 2>/dev/null
# create new migration file
clear
echo "--> creating blitz migration file ... (please wait)"
source <(sudo /home/admin/config.scripts/blitz.migration.sh export)
if [ ${#filename} -eq 0 ]; then
echo "# Error: $"
echo "# FAIL: was not able to create migration file"
exit 0
fi
# show info for migration
clear
echo
echo "*******************************"
echo "* DOWNLOAD THE MIGRATION FILE *"
echo "*******************************"
echo
echo "On your Linux or MacOS Laptop - RUN IN NEW TERMINAL:"
echo "${downloadUnix}"
echo "On Windows use command:"
echo "${downloadWin}"
echo ""
echo "Use password A to authenticate file transfer."
echo
echo "To check if you downloaded the file correctly:"
echo "md5-checksum --> ${md5checksum}"
echo "byte-size --> ${bytesize}"
echo
echo "Your Lightning node is now stopped. After download press ENTER to shutdown your raspiblitz."
echo "To complete the data migration follow then instructions on the github FAQ."
echo
read key
echo "Shutting down ...."
sleep 4
sudo /home/admin/config.scripts/blitz.shutdown.sh
exit 0
fi
if [ "$1" = "import-gui" ]; then
source <(/home/admin/_cache.sh get ui_migration_upload ui_migration_uploadUnix ui_migration_uploadWin)
clear
echo
echo "*******************************"
echo "* UPLOAD THE MIGRATION FILE *"
echo "*******************************"
echo
echo "On your Linux or MacOS Laptop - OPEN NEW TERMINAL."
echo "Go into the folder where you have stored your raspiblitz-*.tar.gz file and run:"
echo "${ui_migration_uploadUnix}"
echo "Or on Windows use command:"
echo "${ui_migration_uploadWin}"
echo
echo "Use password 'raspiblitz' to authenticate file transfer."
echo
echo "After upload command press ENTER to process."
echo
read key
echo "Processing ...."
exit 0
fi
#########################
# IMPORT RaspiBlitz Data
#########################
if [ "$1" = "import" ]; then
# INFO: the migration import is only called during setup phase - assume a prepared but clean HDD
# 2nd PARAMETER: file to import (expect that the file was valid checked from calling script)
importFile=$2
if [ "${importFile}" == "" ]; then
echo "error='filename missing'"
exit 1
fi
fileExists=$(sudo ls ${importFile} 2>/dev/null | grep -c "${importFile}")
if [ "${fileExists}" != "1" ]; then
echo "error='filename not found'"
exit 1
fi
echo "importFile='${importFile}'"
echo "# Importiere Dateien (kann einige Zeit dauern)..." >> ${logFile}
# Temporäres Verzeichnis erstellen
sudo mkdir -p /mnt/hdd/temp/migration_extract
# Datei zuerst in temporäres Verzeichnis entpacken
sudo tar -xf ${importFile} -C /mnt/hdd/temp/migration_extract >> ${logFile}
if [ "$?" != "0" ]; then
echo "error='migration tar failed'"
exit 1
fi
sudo rm ${importFile}
isV2Migration=1
# check if its a v2 migration if /mnt/hdd/temp/migration_extract/v2.migration.info exists
if [ -f "/mnt/hdd/temp/migration_extract/app-data/v2.migration.info" ]; then
migrationVersion=2
fi
echo "# Migration Version: ${migrationVersion}" >> ${logFile}
if [ "${migrationVersion}" == "1" ]; then
echo "# Detected OLD migration file ..." >> ${logFile}
# Mit rsync übertragen und dabei symbolische Links erhalten
sudo rsync -avK --keep-dirlinks /mnt/hdd/temp/migration_extract/mnt/hdd/ /mnt/hdd/ 2>>${logFile}
if [ "$?" != "0" ]; then
echo "error='migration rsync failed'"
exit 1
fi
if [ "${migrationVersion}" == "2" ]; then
echo "# Detected v2 migration file ..." >> ${logFile}
# Mit rsync übertragen und dabei symbolische Links erhalten
sudo rsync -avK /mnt/hdd/temp/migration_extract/app-data/ /mnt/hdd/app-data/ 2>>${logFile}
if [ "$?" != "0" ]; then
echo "error='migration rsync failed'"
exit 1
fi
sudo rm /mnt/hdd/app-data/v2.migration.info
fi
sudo rm -rf /mnt/hdd/temp/migration_extract
# copy bitcoin data backups back to original places (if part of backup before v1.12)
if [ -d "/mnt/hdd/backup_bitcoin" ]; then
echo "# Copying back bitcoin backup data .."
sudo mkdir -p /mnt/app-data/bitcoin
sudo chown -R bitcoin:bitcoin /mnt/hdd/app-data/bitcoin
sudo cp /mnt/hdd/backup_bitcoin/bitcoin.conf /mnt/hdd/app-data/bitcoin/bitcoin.conf
sudo cp /mnt/hdd/backup_bitcoin/wallet.dat /mnt/hdd/app-data/bitcoin/wallet.dat 2>/dev/null
rm -rf /mnt/hdd/backup_bitcoin
fi
# make sure all imported data is linked correctly (also moves old data layouts)
sudo /home/admin/config.scripts/blitz.data.sh link
#4073 if migration is imported on VM - make sure to set displayClass to headless
source /home/admin/raspiblitz.info
if [ "${vm}" == "1" ]; then
/home/admin/config.scripts/blitz.conf.sh set displayClass "headless"
fi
# correcting all user rights on data will be done by provisioning process
echo "# OK import done - provisioning process needed"
exit 0
fi
echo "error='unkown command'"
exit 1