raspiblitz/home.admin/config.scripts/blitz.migration.sh

343 lines
11 KiB
Bash
Raw Normal View History

2019-12-10 20:48:28 +01:00
#!/bin/bash
# TODO: check if services/apps are running and stop all ... or let thet to outside?
# TODO: check if old data ... or let this to outside?
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
echo "# managing the RaspiBlitz data - import, export, backup."
2020-02-14 14:35:11 +01:00
echo "# blitz.migration.sh [status|export|import|export-gui|import-gui]"
echo "error='missing parameters'"
2019-12-10 20:48:28 +01:00
exit 1
fi
# check if started with sudo
if [ "$EUID" -ne 0 ]; then
echo "error='missing sudo'"
2019-12-10 20:48:28 +01:00
exit 1
fi
# check if data drive is mounted - other wise cannot operate
isMounted=$(sudo df | grep -c /mnt/hdd)
if [ ${isMounted} -eq 0 ]; then
echo "# FAIL check why /mnt/hdd is not available/mounted"
echo "error='datadrive not found'"
exit 1
fi
###################
# STATUS
###################
# gathering system info
isBTRFS=$(lsblk -o FSTYPE,MOUNTPOINT | grep /mnt/hdd | awk '$1=$1' | cut -d " " -f 1 | grep -c btrfs)
# set place where zipped TAR file gets stored
2019-12-15 01:34:51 +01:00
defaultZipPath="/mnt/hdd/temp"
2019-12-10 20:48:28 +01:00
# SCP download and upload links
localip=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/')
2019-12-15 12:53:42 +01:00
scpDownload="scp -r 'bitcoin@${localip}:${defaultZipPath}/raspiblitz-*.tar.gz' ./"
2020-02-14 22:30:21 +01:00
scpUpload="scp -r './raspiblitz-*.tar.gz bitcoin@${localip}:${defaultZipPath}'"
2019-12-10 20:48:28 +01:00
# output status data & exit
if [ "$1" = "status" ]; then
echo "# RASPIBLITZ Data Import & Export"
2020-02-14 22:30:21 +01:00
echo "isBTRFS=${isBTRFS}"
echo "scpDownload=\"${scpDownload}\""
echo "scpUpload=\"${scpUpload}\""
2019-12-10 20:48:28 +01:00
exit 1
fi
#########################
# EXPORT RaspiBlitz Data
#########################
if [ "$1" = "export" ]; then
echo "# RASPIBLITZ DATA --> EXPORT"
# collect files to exclude in export in temp file
echo "*.tar.gz" > ~/.exclude.temp
echo "/mnt/hdd/bitcoin" >> ~/.exclude.temp
echo "/mnt/hdd/litecoin" >> ~/.exclude.temp
echo "/mnt/hdd/swapfile" >> ~/.exclude.temp
2019-12-14 18:38:11 +01:00
echo "/mnt/hdd/temp" >> ~/.exclude.temp
echo "/mnt/hdd/lost+found" >> ~/.exclude.temp
2019-12-10 20:48:28 +01:00
echo "/mnt/hdd/snapshots" >> ~/.exclude.temp
2019-12-14 18:38:11 +01:00
echo "/mnt/hdd/torrent" >> ~/.exclude.temp
echo "/mnt/hdd/app-storage" >> ~/.exclude.temp
2019-12-10 20:48:28 +01:00
2019-12-15 12:30:00 +01:00
# copy bitcoin data files to backup dir (if bitcoin active)
if [ -f "/mnt/hdd/bitcoin/bitcoin.conf" ]; then
sudo mkdir -p /mnt/hdd/backup_bitcoin
sudo cp /mnt/hdd/bitcoin/bitcoin.conf /mnt/hdd/backup_bitcoin/bitcoin.conf
sudo cp /mnt/hdd/bitcoin/wallet.dat /mnt/hdd/backup_bitcoin/wallet.dat 2>/dev/null
fi
# copy litecoin data files to backup dir (if litecoin active)
if [ -f "/mnt/hdd/litecoin/litecoin.conf" ]; then
sudo mkdir -p /mnt/hdd/backup_litecoin
sudo cp /mnt/hdd/bitcoin/litecoin.conf /mnt/hdd/backup_litecoin/litecoin.conf
sudo cp /mnt/hdd/bitcoin/wallet.dat /mnt/hdd/backup_litecoin/wallet.dat 2>/dev/null
fi
2019-12-10 20:48:28 +01:00
# clean old backups from temp
rm /hdd/temp/raspiblitz-*.tar.gz 2>/dev/null
# 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/raspiblitz.conf 2>/dev/null
if [ ${#hostname} -gt 0 ]; then
blitzname=$(echo "${hostname}" | sed 's/[^0-9a-z]*//g')
blitzname=$(echo "-${blitzname}-")
fi
echo "# blitzname=${blitzname}"
# zip it
echo "# Building the Export File (this can take some time) .."
2020-02-14 22:30:21 +01:00
sudo tar -zcvf ${defaultZipPath}/raspiblitz-export-temp.tar.gz -X ~/.exclude.temp /mnt/hdd 1>~/.include.temp 2>/dev/null
2019-12-10 20:48:28 +01:00
# get md5 checksum
echo "# Building checksum (can take also a while) ..."
md5checksum=$(md5sum ${defaultZipPath}/raspiblitz-export-temp.tar.gz | head -n1 | cut -d " " -f1)
echo "# md5checksum=${md5checksum}"
# final renaming
name="raspiblitz${blitzname}${datestamp}-${md5checksum}.tar.gz"
echo "exportpath='${defaultZipPath}'"
echo "filename='${name}'"
2020-02-14 14:35:11 +01:00
sudo mv ${defaultZipPath}/raspiblitz-export-temp.tar.gz ${defaultZipPath}/${name}
2019-12-15 12:53:42 +01:00
sudo chown bitcoin:bitcoin ${defaultZipPath}/${name}
2019-12-10 20:48:28 +01:00
# delete temp files
rm ~/.exclude.temp
rm ~/.include.temp
2020-02-14 22:30:21 +01:00
echo "scpDownload=\"${scpDownload}\""
2019-12-10 20:48:28 +01:00
echo "# OK - Export done"
exit 0
fi
2020-02-14 14:35:11 +01:00
if [ "$1" = "export-gui" ]; then
# cleaning old migration files from blitz
sudo rm ${defaultZipPath}/*.tar.gz
2020-02-14 15:00:43 +01:00
# stopping lnd / bitcoin
echo "--> stopping services ..."
sudo systemctl stop lnd
sudo systemctl stop bitcoind
2020-02-14 14:35:11 +01:00
# 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 "# FAIL: was not able to create migration file"
exit 0
fi
# show info for migration
echo
echo "*******************************"
echo "* DOWNLOAD THE MIGRATION FILE *"
echo "*******************************"
echo
echo "ON YOUR LAPTOP - RUN IN NEW TERMINAL:"
echo "${scpDownload}"
echo ""
echo "Use password A to authenticate file transfere."
echo
2020-02-14 15:00:43 +01:00
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
/home/admin/XXshutdown.sh
2020-02-14 14:35:11 +01:00
exit 0
fi
2019-12-10 20:48:28 +01:00
#########################
# IMPORT RaspiBlitz Data
#########################
if [ "$1" = "import" ]; then
# check second parameter for path and/or filename of import
importFile="${defaultZipPath}/raspiblitz-*.tar.gz"
if [ ${#2} -gt 0 ]; then
# check if and/or filename of import
containsPath=$(echo $2 | grep -c '/')
if [ ${containsPath} -gt 0 ]; then
startsOnPath=$(echo $2 | grep -c '^/')
if [ ${startsOnPath} -eq 0 ]; then
echo "# needs to be an absolut path: ${2}"
echo "error='invalid path'"
exit 1
else
if [ -d "$2" ]; then
echo "# using path from parameter to search for import"
endsOnPath=$(echo $2 | grep -c '/$')
if [ ${endsOnPath} -eq 1 ]; then
importFile="${2}raspiblitz-*.tar.gz"
else
importFile="${2}/raspiblitz-*.tar.gz"
fi
else
echo "# using path+file from parameter for import"
importFile=$2
fi
fi
else
# is just filename - to use with default path
echo "# using file from parameter for import"
importFile="${defaultZipPath}/${2}"
fi
fi
# checking if file exists and unique
echo "# checking for file with: ${importFile}"
countZips=$(sudo ls ${importFile} 2>/dev/null | grep -c '.tar.gz')
if [ ${countZips} -eq 0 ]; then
echo "# can just find file when ends on .tar.gz and exists"
2020-02-14 22:30:21 +01:00
echo "scpUpload=\"${scpUpload}\""
2019-12-10 20:48:28 +01:00
echo "error='file not found'"
exit 1
elif [ ${countZips} -eq 1 ]; then
importFile=$(sudo ls ${importFile})
else
echo "# Multiple files found. Not sure which to use."
echo "# Please use absolut-path+file as second parameter."
echo "error='file not unique'"
exit 1
fi
echo "importFile='${importFile}'"
echo "# Validating Checksum (can take some time) .."
md5checksum=$(md5sum ${importFile} | head -n1 | cut -d " " -f1)
isCorrect=$(echo ${importFile} | grep -c ${md5checksum})
if [ ${isCorrect} -eq 1 ]; then
echo "# OK -> checksum looks good: ${md5checksum}"
else
echo "# FAIL -> Checksum not correct: ${md5checksum}"
echo "# Maybe transfere/upload failed?"
echo "error='bad checksum'"
exit 1
fi
echo "# Importing (overwrite) (can take some time) .."
sudo tar -xf ${importFile} -C /
2019-12-15 02:16:46 +01:00
2019-12-15 12:30:00 +01:00
# copy bitcoin/litecoin data backups back to orgplaces (if part of backup)
if [ -d "/mnt/hdd/backup_bitcoin" ]; then
echo "# Copying back bitcoin backup data .."
sudo cp /mnt/hdd/backup_bitcoin/bitcoin.conf /mnt/hdd/bitcoin/bitcoin.conf
sudo cp /mnt/hdd/backup_bitcoin/wallet.dat /mnt/hdd/bitcoin/wallet.dat 2>/dev/null
fi
if [ -d "/mnt/hdd/backup_litecoin" ]; then
echo "# Copying back litecoin backup data .."
sudo cp /mnt/hdd/backup_litecoin/litecoin.conf /mnt/hdd/litecoin/litecoin.conf
sudo cp /mnt/hdd/backup_litecoin/wallet.dat /mnt/hdd/litecoin/wallet.dat 2>/dev/null
fi
echo "# OK done - you may now want to:"
echo "# make sure that HDD is not registered in /etc/fstab & reboot"
echo "# to kickstart recovering system based in imported data"
2019-12-10 20:48:28 +01:00
exit 0
fi
2020-02-14 14:35:11 +01:00
if [ "$1" = "import-gui" ]; then
2020-02-14 22:30:21 +01:00
# get info about HDD
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status)
# make sure a HDD/SSD is connected
if [ ${isMounted} -eq 1 ]; then
fi
# make sure HDD/SSD is not mounted
# because importing migration just works during early setup
if [ ${isMounted} -eq 1 ]; then
echo "FAIL --> cannot import migration data when HDD(SDD is mounted"
exit 1
fi
# ask format for new HDD/SSD
OPTIONS=(EXT4 "Ext4 & 1 Partition (default)" \
BTRFS "BTRFS & 3 Partinions (experimental)"
)
CHOICE=$(whiptail --clear --title "Repair Options" --menu "" 9 52 2 "${OPTIONS[@]}" 2>&1 >/dev/tty)
clear
case $CHOICE in
EXT4)
echo "EXT4 FORMAT"
;;
BTRFS)
echo "BTRFS FORMAT"
;;
esac
exit 0
2020-02-14 14:35:11 +01:00
# cleaning old migration files from blitz
sudo rm ${defaultZipPath}/*.tar.gz
# make sure that temp directory exists and can be written by admin
sudo mkdir -p ${defaultZipPath}
chmod 777 -R ${defaultZipPath}
echo "**************************"
echo "* UPLOAD THE RESCUE FILE *"
echo "**************************"
echo "If you have a lnd-rescue backup file on your laptop you can now"
echo "upload it and restore the your latest LND state."
echo
echo "ON YOUR LAPTOP open a new terminal and change into"
echo "the directory where your migration file is and"
echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:"
echo "scp -r ./raspiblitz-*.tar.gz admin@${localip}:${defaultZipPath}"
echo ""
echo "Use password A to authenticate file transfere."
echo "PRESS ENTER when upload is done."
read key
countZips=$(sudo ls ${defaultZipPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz-')
# in case no upload found
if [ ${countZips} -eq 0 ]; then
echo
echo "FAIL: Was not able to detect uploaded file in ${defaultZipPath}"
exit 0
fi
# in case of multiple files
if [ ${countZips} -gt 1 ]; then
echo
echo "FAIL: Multiple possible files detected in ${defaultZipPath}"
exit 0
fi
# restore upload
echo
echo "OK: Upload found in ${defaultZipPath} - restoring data ... (please wait)"
source <(sudo /home/admin/config.scripts/blitz.migration.sh "import")
# check result
echo
if [ ${#error} -gt 0 ]; then
echo "FAIL: Was not able to restore data --> ${error}"
else
echo "OK: Migration data was imported"
echo "You may need to redownload/validate/build blockchain data & indexes."
fi
exit 0
fi
2019-12-10 20:48:28 +01:00
echo "error='unkown command'"
exit 1