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

674 lines
21 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?
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
echo "# managing the RaspiBlitz data - import, export, backup."
2021-04-05 13:14:56 +02:00
echo "# blitz.migration.sh [status|export|import|export-gui|import-gui|migration-umbrel|migration-mynode]"
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
###################
# STATUS
###################
2020-02-14 23:18:49 +01:00
# check if data drive is mounted - other wise cannot operate
isMounted=$(sudo df | grep -c /mnt/hdd)
2019-12-10 20:48:28 +01:00
# 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
2021-05-01 18:27:23 +02:00
defaultUploadPath="/mnt/hdd/temp/migration"
2019-12-10 20:48:28 +01:00
# get local ip
source <(/home/admin/config.scripts/internet.sh status local)
2019-12-10 20:48:28 +01:00
# SCP download and upload links
2021-05-01 18:27:23 +02:00
scpDownloadUnix="scp -r 'bitcoin@${localip}:${defaultUploadPath}/raspiblitz-*.tar.gz' ./"
scpDownloadWin="scp -r bitcoin@${localip}:${defaultUploadPath}/raspiblitz-*.tar.gz ."
scpUploadUnix="scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultUploadPath}"
scpUploadWin="scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultUploadPath}"
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}"
2021-04-30 23:54:16 +02:00
echo "localip=\"${localip}\""
2021-05-01 18:27:23 +02:00
echo "defaultUploadPath=\"${defaultUploadPath}\""
echo "scpDownloadUnix=\"${scpDownloadUnix}\""
echo "scpUploadUnix=\"${scpUploadUnix}\""
echo "scpDownloadWin=\"${scpDownloadWin}\""
echo "scpUploadWin=\"${scpUploadWin}\""
2019-12-10 20:48:28 +01:00
exit 1
fi
2021-04-05 13:14:56 +02:00
########################
# MIGRATION BASICS
########################
migrate_btc_conf () {
# keep old conf als backup
sudo mv /mnt/hdd/bitcoin/bitcoin.conf /mnt/hdd/bitcoin/bitcoin.conf.migration
# start from fresh configuration template
sudo cp /home/admin/assets/bitcoin.conf /mnt/hdd/bitcoin/bitcoin.conf
}
migrate_lnd_conf () {
# 1st parameter can be an alias to set
nodename=$1
if [ ${#nodename} -eq 0 ]; then
nodename="raspiblitz"
fi
# keep old conf als backup
sudo mv /mnt/hdd/lnd/lnd.conf /mnt/hdd/lnd/lnd.conf.migration
# start from fresh configuration template (user will set password B on recovery)
sudo cp /home/admin/assets/lnd.bitcoin.conf /mnt/hdd/lnd/lnd.conf
sudo sed -i "s/^alias=.*/alias=${nodename}/g" /mnt/hdd/lnd/lnd.conf
}
migrate_raspiblitz_conf () {
# 1st parameter can be an nodename to set
nodename=$1
if [ ${#nodename} -eq 0 ]; then
nodename="raspiblitz"
fi
# write default raspiblitz config
source /home/admin/_version.info
echo "# RASPIBLITZ CONFIG FILE" > /home/admin/raspiblitz.conf
echo "raspiBlitzVersion='${codeVersion}'" >> /home/admin/raspiblitz.conf
echo "network=bitcoin" >> /home/admin/raspiblitz.conf
echo "chain=main" >> /home/admin/raspiblitz.conf
echo "hostname=${nodename}" >> /home/admin/raspiblitz.conf
echo "displayClass=lcd" >> /home/admin/raspiblitz.conf
2021-04-05 13:14:56 +02:00
echo "lcdrotate=1" >> /home/admin/raspiblitz.conf
echo "runBehindTor=on" >> /home/admin/raspiblitz.conf
sudo mv /home/admin/raspiblitz.conf /mnt/hdd/raspiblitz.conf
sudo chown root:root /mnt/hdd/raspiblitz.conf
sudo chmod 777 /mnt/hdd/raspiblitz.conf
# rename ext4 data drive
sudo e2label /dev/sda1 BLOCKCHAIN
}
########################
# MIGRATION from Umbrel
########################
if [ "$1" = "migration-umbrel" ]; then
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status)
# can olny migrate unmonted data disks
if [ "${isMounted}" == "1" ]; then
echo "err='cannot migrate mounted drive'"
exit 1
fi
# check if the HDD is an umbrel data disk
if [ "${hddGotMigrationData}" == "umbrel" ]; then
echo "# found UMBREL data disk at ${hddPartitionCandidate}"
else
echo "err='not an umbrel disk'"
exit 1
fi
# temp mount the data drive
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddPartitionCandidate})
if [ "${isMounted}" == "1" ]; then
echo "# mounted ${hddPartitionCandidate} to /mnt/hdd"
else
echo "err='failed temp mounting disk'"
exit 1
fi
# checking basic data disk layout
if [ -f /mnt/hdd/umbrel/bitcoin/bitcoin.conf ] && [ -f /mnt/hdd/umbrel/lnd/lnd.conf ]; then
echo "# found bitcoin & lnd data"
else
echo "err='umbrel data layout changed'"
exit 1
fi
echo "# starting to rearrange the data drive for raspiblitz .."
# determine version
version=$(sudo cat /mnt/hdd/umbrel/info.json | jq -r '.version')
if [ "${version}" == "" ]; then
echo "err='not able to get version'"
exit 1
fi
versionMajor=$(echo "${version}" | cut -d "." -f1)
versionMiner=$(echo "${version}" | cut -d "." -f2)
versionPatch=$(echo "${version}" | cut -d "." -f3)
if [ "${versionMajor}" == "" ] || [ "${versionMiner}" == "" ] || [ "${versionPatch}" == "" ]; then
echo "err='not able processing version'"
exit 1
fi
# since 0.3.9 umbrel uses a fixed/default password for lnd wallet (before it was the user set one)
if [ ${versionMajor} -eq 0 ] && [ ${versionMiner} -lt 4 ] && [ ${versionPatch} -lt 9 ]; then
echo "# umbrel before 0.3.9 --> password c is old user set password"
else
echo "# umbrel 0.3.9 or higher --> password c is fixed 'moneyprintergobrrr'"
# set flag with standard password to be changed on final recovery setup
sudo touch /mnt/hdd/passwordc.flag
sudo chmod 777 /mnt/hdd/passwordc.flag
echo "moneyprintergobrrr" >> /mnt/hdd/passwordc.flag
sudo chown admin:admin /mnt/hdd/passwordc.flag
fi
# extract detailed data
2021-04-05 13:14:56 +02:00
nameNode=$(sudo jq -r '.name' /mnt/hdd/umbrel/db/user.json)
# move bitcoin/blockchain & call function to migrate config
sudo mv /mnt/hdd/bitcoin /mnt/hdd/backup_bitcoin 2>/dev/null
sudo mv /mnt/hdd/umbrel/bitcoin /mnt/hdd/
sudo rm /mnt/hdd/bitcoin/.walletlock 2>/dev/null
sudo chown bitcoin:bitcoin -R /mnt/hdd/bitcoin
migrate_btc_conf
# move lnd & call function to migrate config
sudo mv /mnt/hdd/lnd /mnt/hdd/backup_lnd 2>/dev/null
sudo mv /mnt/hdd/umbrel/lnd /mnt/hdd/
sudo chown bitcoin:bitcoin -R /mnt/hdd/lnd
migrate_lnd_conf ${nameNode}
# backup & rename the rest of the data
sudo mv /mnt/hdd/umbrel /mnt/hdd/backup_migration
# call function for final migration
migrate_raspiblitz_conf ${nameNode}
echo "# OK ... data disk converted to RaspiBlitz - reboot with fresh sd card to recover"
exit 0
fi
########################
# MIGRATION from myNode
2021-04-08 00:02:57 +02:00
# see manual steps: https://btc21.de/bitcoin/raspiblitz-migration/
2021-04-05 13:14:56 +02:00
########################
if [ "$1" = "migration-mynode" ]; then
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status)
# can olny migrate unmonted data disks
if [ "${isMounted}" == "1" ]; then
echo "err='cannot migrate mounted drive'"
exit 1
fi
# check if the HDD is an umbrel data disk
if [ "${hddGotMigrationData}" == "mynode" ]; then
echo "# found MYNODE data disk at ${hddPartitionCandidate}"
else
echo "err='not an mynode disk'"
exit 1
fi
# temp mount the data drive
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddPartitionCandidate})
if [ "${isMounted}" == "1" ]; then
echo "# mounted ${hddPartitionCandidate} to /mnt/hdd"
else
echo "err='failed temp mounting disk'"
exit 1
fi
# checking basic data disk layout
if [ -f /mnt/hdd/mynode/bitcoin/bitcoin.conf ] && [ -f /mnt/hdd/mynode/lnd/lnd.conf ]; then
echo "# found bitcoin & lnd data"
else
echo "err='mynode data layout changed'"
exit 1
fi
echo "# starting to rearrange the data drive for raspiblitz .."
# move bitcoin/blockchain & call function to migrate config
sudo mv /mnt/hdd/bitcoin /mnt/hdd/backup_bitcoin 2>/dev/null
sudo mv /mnt/hdd/mynode/bitcoin /mnt/hdd/
sudo chown bitcoin:bitcoin -R /mnt/hdd/bitcoin
migrate_btc_conf
# move lnd & call function to migrate config
sudo mv /mnt/hdd/lnd /mnt/hdd/backup_lnd 2>/dev/null
sudo mv /mnt/hdd/mynode/lnd /mnt/hdd/
sudo chown bitcoin:bitcoin -R /mnt/hdd/lnd
migrate_lnd_conf
# copy lnd wallet password - so that user can set own on final setup
sudo cp /mnt/hdd/mynode/settings/.lndpw /mnt/hdd/passwordc.flag
2021-04-05 13:14:56 +02:00
# backup & rename the rest of the data
sudo mv /mnt/hdd/mynode /mnt/hdd/backup_migration
# call function for final migration
migrate_raspiblitz_conf
echo "# OK ... data disk converted to RaspiBlitz"
exit 0
fi
2019-12-10 20:48:28 +01:00
#########################
# 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 -f /hdd/temp/raspiblitz-*.tar.gz 2>/dev/null
2019-12-10 20:48:28 +01:00
# 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
2020-11-01 11:38:58 +01:00
blitzname="-${hostname}-"
2019-12-10 20:48:28 +01:00
fi
echo "# blitzname=${blitzname}"
# zip it
echo "# Building the Export File (this can take some time) .."
2021-05-01 18:27:23 +02:00
sudo tar -zcvf ${defaultUploadPath}/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) ..."
2021-05-01 18:27:23 +02:00
md5checksum=$(md5sum ${defaultUploadPath}/raspiblitz-export-temp.tar.gz | head -n1 | cut -d " " -f1)
2020-11-10 23:40:54 +01:00
echo "md5checksum=${md5checksum}"
2019-12-10 20:48:28 +01:00
2020-11-10 23:40:54 +01:00
# get byte size
2021-05-01 18:27:23 +02:00
bytesize=$(wc -c ${defaultUploadPath}/raspiblitz-export-temp.tar.gz | cut -d " " -f 1)
2020-11-10 23:40:54 +01:00
echo "bytesize=${bytesize}"
2019-12-10 20:48:28 +01:00
# final renaming
name="raspiblitz${blitzname}${datestamp}-${md5checksum}.tar.gz"
2021-05-01 18:27:23 +02:00
echo "exportpath='${defaultUploadPath}'"
2019-12-10 20:48:28 +01:00
echo "filename='${name}'"
2021-05-01 18:27:23 +02:00
sudo mv ${defaultUploadPath}/raspiblitz-export-temp.tar.gz ${defaultUploadPath}/${name}
sudo chown bitcoin:bitcoin ${defaultUploadPath}/${name}
2019-12-10 20:48:28 +01:00
# delete temp files
rm ~/.exclude.temp
rm ~/.include.temp
echo "scpDownloadUnix=\"${scpDownloadUnix}\""
echo "scpDownloadWin=\"${scpDownloadWin}\""
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
2021-05-01 18:27:23 +02:00
sudo rm ${defaultUploadPath}/*.tar.gz 2>/dev/null
2020-02-14 14:35:11 +01:00
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
2020-02-14 23:42:27 +01:00
clear
2020-02-14 14:35:11 +01:00
echo
echo "*******************************"
echo "* DOWNLOAD THE MIGRATION FILE *"
echo "*******************************"
echo
echo "On yoz Linux or MacOS Laptop - RUN IN NEW TERMINAL:"
echo "${scpDownloadUnix}"
echo "On Windows use command:"
echo "${scpDownloadWin}"
2020-02-14 14:35:11 +01:00
echo ""
2020-02-23 19:44:27 +01:00
echo "Use password A to authenticate file transfer."
2020-11-10 23:40:54 +01:00
echo
echo "To check if you downloaded the file correctly:"
echo "md5-checksum --> ${md5checksum}"
echo "byte-size --> ${bytesize}"
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
2020-07-26 03:00:21 +02:00
echo "Shutting down ...."
sleep 4
2020-02-14 15:00:43 +01:00
/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
2021-05-01 18:27:23 +02:00
importFile="${defaultUploadPath}/raspiblitz-*.tar.gz"
2019-12-10 20:48:28 +01:00
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"
2021-05-01 18:27:23 +02:00
importFile="${defaultUploadPath}/${2}"
2019-12-10 20:48:28 +01:00
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 "scpUploadUnix=\"${scpUploadUnix}\""
echo "scpUploadWin=\"${scpUploadWin}\""
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}"
2020-02-23 19:44:57 +01:00
echo "# Maybe transfer/upload failed?"
2019-12-10 20:48:28 +01:00
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 .."
2020-02-16 00:46:06 +01:00
sudo mkdir /mnt/hdd/bitcoin
2019-12-15 12:30:00 +01:00
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
2020-02-16 00:46:06 +01:00
sudo chown bitcoin:bitcoin -R /mnt/hdd/bitcoin
2020-11-30 14:14:49 +01:00
sudo chown bitcoin:bitcoin -R /mnt/storage/bitcoin 2>/dev/null
2019-12-15 12:30:00 +01:00
fi
if [ -d "/mnt/hdd/backup_litecoin" ]; then
echo "# Copying back litecoin backup data .."
2020-02-16 00:46:06 +01:00
sudo mkdir /mnt/hdd/litecoin
2019-12-15 12:30:00 +01:00
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
2020-02-16 00:46:06 +01:00
sudo chown bitcoin:bitcoin -R /mnt/hdd/litecoin
2020-11-30 14:14:49 +01:00
sudo chown bitcoin:bitcoin -R /mnt/storage/litecoin 2>/dev/null
2019-12-15 12:30:00 +01:00
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
2020-11-01 19:58:50 +01:00
echo "# Gathering HDD/SSD info ..."
2020-02-14 22:30:21 +01:00
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status)
# make sure HDD/SSD is not mounted
# because importing migration just works during early setup
if [ ${isMounted} -eq 1 ]; then
2020-07-26 03:00:21 +02:00
echo "FAIL --> cannot import migration data when HDD/SSD is mounted"
2020-02-14 22:30:21 +01:00
exit 1
fi
2020-02-14 23:07:36 +01:00
# make sure a HDD/SSD is connected
if [ ${#hddCandidate} -eq 0 ]; then
echo "FAIL --> there is no HDD/SSD connected to migrate data to"
exit 1
fi
2020-02-14 23:21:53 +01:00
# check if HDD/SSD is big enough
if [ ${hddGigaBytes} -lt 120 ]; then
echo "FAIL --> connected HDD/SSD is too small"
exit 1
fi
2020-02-14 22:30:21 +01:00
# ask format for new HDD/SSD
2020-07-26 13:16:06 +02:00
OPTIONS=()
2020-07-26 03:00:21 +02:00
# check if HDD/SSD contains Bitcoin Blockchain
if [ "${hddBlocksBitcoin}" == "1" ]; then
2020-07-26 13:16:06 +02:00
OPTIONS+=(KEEP "Dont format & use Blockchain")
2020-07-26 03:00:21 +02:00
fi
2020-07-26 13:16:06 +02:00
OPTIONS+=(EXT4 "Ext4 & 1 Partition (default)")
OPTIONS+=(BTRFS "BTRFS & 3 Partitions (experimental)")
2020-07-26 03:00:21 +02:00
2020-07-26 13:27:18 +02:00
useBlockchain=0
hddFormat=None
2020-07-26 13:06:18 +02:00
CHOICE=$(whiptail --clear --title "Formatting ${hddCandidate}" --menu "" 10 52 3 "${OPTIONS[@]}" 2>&1 >/dev/tty)
2020-02-14 22:30:21 +01:00
clear
case $CHOICE in
EXT4)
hddFormat=ext4
2020-02-14 23:33:34 +01:00
echo "EXT4 FORMAT -->"
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh format ext4 ${hddPartitionCandidate})
2020-02-14 23:33:34 +01:00
if [ ${#error} -gt 0 ]; then
echo "FAIL --> ${error}"
exit 1
fi
2020-02-14 22:30:21 +01:00
;;
BTRFS)
hddFormat=btrfs
2020-02-14 22:30:21 +01:00
echo "BTRFS FORMAT"
2020-02-14 23:33:34 +01:00
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh format btrfs ${hddCandidate})
if [ ${#error} -gt 0 ]; then
echo "FAIL --> ${error}"
exit 1
fi
2020-02-14 22:30:21 +01:00
;;
2020-07-26 13:16:06 +02:00
KEEP)
echo "Keep HDD & Blockchain"
2020-07-26 13:27:18 +02:00
useBlockchain=1
2020-07-26 03:00:21 +02:00
;;
2020-02-14 23:26:40 +01:00
*)
echo "CANCEL"
exit 0
;;
2020-02-14 22:30:21 +01:00
esac
if [ ${useBlockchain} -eq 1 ]; then
if [ ${isBTRFS} -eq 1 ]; then
hddFormat=btrfs
else
hddFormat=ext4
fi
fi
2020-02-14 23:07:36 +01:00
# now temp mount the HDD/SSD
if [ "$hddFormat" == "btrfs" ]; then
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddCandidate})
else
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddPartitionCandidate})
fi
2020-02-14 23:07:36 +01:00
if [ ${#error} -gt 0 ]; then
echo "FAIL: Was not able to temp mount the HDD/SSD --> ${error}"
exit 1
fi
2020-02-14 14:35:11 +01:00
2020-11-30 14:14:49 +01:00
# make sure all directories betare propper linked
sudo /home/admin/config.scripts/blitz.datadrive.sh link
2020-02-14 14:35:11 +01:00
# make sure that temp directory exists and can be written by admin
2021-05-01 18:27:23 +02:00
sudo mkdir -p ${defaultUploadPath}
sudo chmod 777 -R ${defaultUploadPath}
2020-02-14 14:35:11 +01:00
2020-02-14 23:48:13 +01:00
clear
echo
2020-02-16 00:46:06 +01:00
echo "*****************************"
echo "* UPLOAD THE MIGRATION FILE *"
echo "*****************************"
echo "If you have a migration file on your laptop you can now"
echo "upload it and restore on the new HDD/SSD."
2020-02-14 14:35:11 +01:00
echo
echo "ON YOUR LAPTOP open a new terminal and change into"
echo "the directory where your migration file is and"
2020-11-10 23:40:54 +01:00
echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:"
2021-05-01 18:27:23 +02:00
echo "scp -r ./raspiblitz-*.tar.gz admin@${localip}:${defaultUploadPath}"
2020-02-14 14:35:11 +01:00
echo ""
2020-02-23 19:44:27 +01:00
echo "Use password 'raspiblitz' to authenticate file transfer."
2020-02-14 14:35:11 +01:00
echo "PRESS ENTER when upload is done."
read key
2021-05-01 18:27:23 +02:00
countZips=$(sudo ls ${defaultUploadPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz-')
2020-02-14 14:35:11 +01:00
# in case no upload found
if [ ${countZips} -eq 0 ]; then
echo
2021-05-01 18:27:23 +02:00
echo "FAIL: Was not able to detect uploaded file in ${defaultUploadPath}"
2020-11-30 14:14:49 +01:00
echo "error='no file found'"
sleep 3
exit 1
2020-02-14 14:35:11 +01:00
fi
# in case of multiple files
if [ ${countZips} -gt 1 ]; then
echo
2021-05-01 18:27:23 +02:00
echo "# FAIL: Multiple possible files detected in ${defaultUploadPath}"
2020-11-30 14:14:49 +01:00
echo "error='multiple files'"
sleep 3
exit 1
2020-02-14 14:35:11 +01:00
fi
# restore upload
echo
2021-05-01 18:27:23 +02:00
echo "OK: Upload found in ${defaultUploadPath} - restoring data ... (please wait)"
2020-02-14 14:35:11 +01:00
source <(sudo /home/admin/config.scripts/blitz.migration.sh "import")
if [ ${#error} -gt 0 ]; then
2020-02-14 23:07:36 +01:00
echo
2020-11-30 14:14:49 +01:00
echo "# FAIL: Was not able to restore data"
echo "error='${error}'"
sleep 3
2020-02-14 23:07:36 +01:00
exit 1
fi
# check & load config
source /mnt/hdd/raspiblitz.conf
if [ ${#network} -eq 0 ]; then
2020-02-14 23:07:36 +01:00
echo
echo "FAIL: No raspiblitz.conf found afer migration restore"
2020-11-30 14:14:49 +01:00
echo "error='migration contains no raspiblitz.conf'"
sleep 3
exit 1
fi
echo
echo "OK: Migration data was imported"
echo "PRESS ENTER"
read key
# Copy from other computer is only option for Bitcoin
2020-07-26 13:27:18 +02:00
if [ "${network}" == "bitcoin" ] && [ ${useBlockchain} -eq 0 ]; then
OPTIONS=(SYNC "Re-Sync & Validate Blockchain" \
COPY "Copy over LAN from other Computer"
)
CHOICE=$(whiptail --clear --title "How to get Blockchain?" --menu "" 9 52 2 "${OPTIONS[@]}" 2>&1 >/dev/tty)
clear
case $CHOICE in
COPY)
echo "Copy Blockchain Data -->"
/home/admin/50copyHDD.sh stop-after-script
;;
esac
fi
# if there is no blockchain yet - fallback to syncing
2020-02-16 00:27:07 +01:00
if [ $(sudo ls /mnt/hdd/bitcoin/ 2>/dev/null | grep -c blocks) -eq 0 ]; then
echo "Setting Blockchain Data to resync ..."
sudo -u bitcoin mkdir /mnt/hdd/${network}/blocks 2>/dev/null
sudo -u bitcoin mkdir /mnt/hdd/${network}/chainstate 2>/dev/null
2020-02-16 00:46:06 +01:00
sudo -u bitcoin touch /mnt/hdd/${network}/blocks/.selfsync
2020-02-14 14:35:11 +01:00
fi
echo "--> Now rebooting and kicking your node in to recovery/update mode ..."
sudo shutdown -r now
2020-02-14 14:35:11 +01:00
exit 0
fi
2019-12-10 20:48:28 +01:00
echo "error='unkown command'"
exit 1