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

216 lines
7.1 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."
echo "# blitz.rescue.sh [status|export|import]"
echo "ERROR='missing parameters'"
exit 1
fi
# check if started with sudo
if [ "$EUID" -ne 0 ]; then
echo "ERROR='missing sudo'"
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'/')
scpDownload="scp -r 'admin@${localip}:${defaultZipPath}/raspiblitz-*.tar.gz' ./"
scpUpload="scp -r './raspiblitz-*.tar.gz' admin@${localip}:${defaultZipPath}"
# output status data & exit
if [ "$1" = "status" ]; then
echo "# RASPIBLITZ Data Import & Export"
echo "isBTRFS=${isBTRFS}"
echo "scpDownload='${scpDownload}'"
echo "scpUpload='${scpUpload}'"
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) .."
sudo tar -zcvf ${defaultZipPath}/raspiblitz-export-temp.tar.gz -X ~/.exclude.temp /mnt/hdd 1>~/.include.temp
# 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}'"
sudo ${defaultZipPath}/raspiblitz-export-temp.tar.gz
mv ${defaultZipPath}/raspiblitz-export-temp.tar.gz ${defaultZipPath}/${name}
# delete temp files
rm ~/.exclude.temp
rm ~/.include.temp
echo "scpDownload='${scpDownload}'"
echo "# OK - Export done"
exit 0
fi
#########################
# 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"
echo "scpUpload='${scpUpload}'"
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
echo "error='unkown command'"
exit 1