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

246 lines
7.5 KiB
Bash
Raw Normal View History

2019-03-16 23:47:22 +01:00
#!/bin/bash
2019-04-26 14:14:27 +02:00
source /mnt/hdd/raspiblitz.conf
2019-03-16 23:47:22 +01:00
# command info
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
2019-04-26 16:36:03 +02:00
echo "# small rescue script to to backup or restore LND data"
echo "# -> backup all LND data in a tar.gz file for download:"
echo "# lnd.rescue.sh backup [?no-download]"
echo "# -> upload a LND data tar.gz file to replace LND data:"
echo "# lnd.rescue.sh restore"
echo "# -> download the LND channel.backup file from SD card:"
echo "# lnd.rescue.sh scb-down"
echo "# -> upload the LND channel.backup to recover wallet:"
echo "# lnd.rescue.sh scb-up"
2019-03-16 23:47:22 +01:00
exit 1
fi
localip=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/')
mode="$1"
if [ ${mode} = "backup" ]; then
################################
# BACKUP
################################
echo "*** LND.RESCUE --> BACKUP"
# stop LND
echo "Stopping lnd..."
sudo systemctl stop lnd
sleep 5
echo "OK"
echo
# zip it
sudo tar -zcvf /home/admin/lnd-rescue.tar.gz /mnt/hdd/lnd
sudo chown admin:admin /home/admin/lnd-rescue.tar.gz
2019-04-16 13:22:29 +01:00
# delete old backups
2019-04-26 14:04:51 +02:00
rm /home/admin/lnd-rescue-*.tar.gz 2>/dev/null
2019-04-16 13:22:29 +01:00
2019-03-16 23:47:22 +01:00
# name with md5 checksum
2019-03-17 00:19:31 +01:00
md5checksum=$(md5sum /home/admin/lnd-rescue.tar.gz | head -n1 | cut -d " " -f1)
2019-03-16 23:47:22 +01:00
mv /home/admin/lnd-rescue.tar.gz /home/admin/lnd-rescue-${md5checksum}.tar.gz
2019-04-16 18:05:03 +01:00
# stop here in case of 'no-download' option
if [ "${2}" == "no-download" ]; then
echo "No download of LND data requested."
exit 0
fi
2019-03-16 23:47:22 +01:00
# offer SCP for download
2019-04-26 14:04:51 +02:00
clear
2019-03-17 03:33:42 +01:00
echo
2020-02-14 14:35:11 +01:00
echo "*****************************"
echo "* DOWNLOAD THE REASCUE FILE *"
echo "*****************************"
2019-03-16 23:47:22 +01:00
echo
2020-02-14 14:35:11 +01:00
echo "ON YOUR LAPTOP - RUN IN NEW TERMINAL:"
2019-12-10 20:29:15 +01:00
echo "scp -r 'admin@${localip}:/home/admin/lnd-rescue-*.tar.gz' ./"
2019-03-16 23:47:22 +01:00
echo ""
2020-02-23 19:44:27 +01:00
echo "Use password A to authenticate file transfer."
2019-03-16 23:47:22 +01:00
echo
2020-02-18 14:16:08 +01:00
echo "BEWARE: Your Lightning node is now stopped. Its safe to backup the data and"
echo "restore it on a fresh RaspiBlitz. But once this Lightning node gets started"
echo "again or rebooted its not adviced to restore the backup file anymore because"
echo "it cointains then outdated channel data & can lead to loss of channel funds."
2019-03-16 23:47:22 +01:00
elif [ ${mode} = "restore" ]; then
################################
# RESTORE
################################
2019-04-26 16:36:03 +02:00
echo "# LND.RESCUE --> RESTORE"
2019-03-16 23:47:22 +01:00
echo ""
2019-04-26 16:36:03 +02:00
# delete old backups
2019-04-16 13:22:29 +01:00
rm /home/admin/lnd-rescue-*.tar.gz
2019-03-16 23:47:22 +01:00
filename=""
while [ ${#filename} -eq 0 ]
do
2019-03-17 00:24:06 +01:00
countZips=$(sudo ls /home/admin/lnd-rescue-*.tar.gz 2>/dev/null | grep -c 'lnd-rescue')
2019-03-16 23:47:22 +01:00
if [ ${countZips} -lt 1 ]; then
echo "**************************"
2020-02-14 14:35:11 +01:00
echo "* UPLOAD THE RESCUE FILE *"
2019-03-16 23:47:22 +01:00
echo "**************************"
echo "If you have a lnd-rescue backup file on your laptop you can now"
2019-04-16 02:57:18 +01:00
echo "upload it and restore the your latest LND state."
echo
echo "CAUTION: Dont restore old LND states - risk of loosing funds!"
2019-03-16 23:47:22 +01:00
echo
echo "To make upload open a new terminal on your laptop,"
echo "change into the directory where your lnd-rescue file is and"
echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:"
2019-12-10 22:03:24 +01:00
echo "scp -r ./lnd-rescue-*.tar.gz admin@${localip}:/home/admin/"
2019-03-16 23:47:22 +01:00
echo ""
2020-02-23 19:44:27 +01:00
echo "Use password A to authenticate file transfer."
2020-02-14 14:35:11 +01:00
echo "PRESS ENTER when upload is done."
2019-03-16 23:47:22 +01:00
fi
if [ ${countZips} -gt 1 ]; then
echo "!! WARNING !!"
echo "There are multiple lnd-rescue files in directory /home/admin."
2019-04-16 13:22:29 +01:00
echo "Make sure you upload only one tar.gz-file and start again."
2019-03-17 00:24:06 +01:00
echo
2019-04-16 13:22:29 +01:00
echo "PRESS ENTER to continue."
read key
2019-03-16 23:47:22 +01:00
exit 1
fi
if [ ${countZips} -eq 1 ]; then
2019-03-17 00:28:14 +01:00
clear
2019-03-17 00:29:58 +01:00
echo
echo "**************************"
echo "* RESTORING BACKUP FILE *"
echo "**************************"
echo
2019-03-17 00:31:20 +01:00
2019-03-16 23:47:22 +01:00
filename=$(sudo ls /home/admin/lnd-rescue-*.tar.gz)
echo "OK -> found file to restore: ${filename}"
md5checksum=$(md5sum ${filename} | head -n1 | cut -d " " -f1)
isCorrect=$(echo ${filename} | grep -c ${md5checksum})
if [ ${isCorrect} -eq 1 ]; then
echo "OK -> checksum looks good: ${md5checksum}"
else
echo "!!! FAIL -> Checksum not correct."
2020-02-23 19:44:57 +01:00
echo "Maybe transfer failed? Continue on your own risk!"
2019-03-16 23:47:22 +01:00
echo "Recommend to abort and upload again!"
fi
2019-04-26 14:14:27 +02:00
oldWalletExists=$(sudo ls /mnt/hdd/lnd/data/chain/${network}/${chain}net/wallet.db 2>/dev/null | grep -c "wallet.db")
if [ ${oldWalletExists} -gt 0 ]; then
echo
echo "WARNING: This will delete/overwrite the LND state/funds of this RaspiBlitz."
fi
2019-03-16 23:47:22 +01:00
echo
2019-04-16 13:22:29 +01:00
echo "PRESS ENTER to start restore. Enter x & ENTER to cancel."
2019-03-16 23:47:22 +01:00
fi
read key
2019-04-16 13:22:29 +01:00
if [ "${key}" == "x" ]; then
exit 1
fi
2019-03-16 23:47:22 +01:00
done
# stop LND
echo "Stopping lnd..."
2019-03-17 00:28:14 +01:00
sudo systemctl stop lnd
2019-03-16 23:47:22 +01:00
sleep 5
echo "OK"
echo
# clean DIR
echo "Cleaning LND data ..."
sudo rm -r /mnt/hdd/lnd/*
echo "OK"
echo
# unpack zip
2019-03-17 00:31:20 +01:00
echo "Restoring LND data from ${filename} ..."
2019-03-17 00:32:03 +01:00
sudo tar -xf ${filename} -C /
2019-03-17 00:34:25 +01:00
sudo chown -R bitcoin:bitcoin /mnt/hdd/lnd
2019-03-16 23:47:22 +01:00
echo "OK"
echo
# start LND
echo "Starting lnd..."
sudo systemctl start lnd
echo "OK"
echo
echo "DONE - please check if LND starts up correctly with restored state and funds."
2019-04-16 02:57:18 +01:00
echo "Keep in mind that some channels maybe forced closed in the meanwhile."
2019-03-16 23:47:22 +01:00
echo
2019-04-26 16:36:03 +02:00
elif [ ${mode} = "scb-down" ]; then
echo
echo "****************************"
echo "* DOWNLOAD THE BACKUP FILE *"
echo "****************************"
echo
echo "RUN THE FOLLOWING COMMAND ON YOUR LAPTOP IN NEW TERMINAL:"
echo "scp -r admin@${localip}:/home/admin/.lnd/data/chain/${network}/${chain}net/channel.backup ./"
echo ""
2020-02-23 19:44:27 +01:00
echo "Use password A to authenticate file transfer."
2019-04-26 16:36:03 +02:00
echo
echo "NOTE: Use this file when setting up a fresh RaspiBlitz by choosing"
echo "option OLD WALLET and then SCB+SEED -> Seed & channel.backup file"
echo "Will just recover on-chain & channel-funds, but closing all channels"
elif [ ${mode} = "scb-up" ]; then
gotFile=-1
while [ ${gotFile} -lt 1 ]
do
# show info
clear
sleep 1
echo "**********************************"
echo "* UPLOAD THE channel.backup FILE *"
echo "**********************************"
echo
if [ ${gotFile} -eq -1 ]; then
echo "If you have the channel.backup file on your laptop or on"
echo "another server you can now upload it to the RaspiBlitz."
elif [ ${gotFile} -eq 0 ]; then
echo "NO channel.backup FOUND IN /home/admin"
echo "Please try upload again."
fi
echo
echo "To make upload open a new terminal and change,"
echo "into the directory where your lnd-rescue file is and"
echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:"
echo "scp ./channel.backup admin@${localip}:/home/admin/"
echo ""
2020-02-23 19:44:27 +01:00
echo "Use password A to authenticate file transfer."
2019-04-26 16:36:03 +02:00
echo "PRESS ENTER when upload is done. Enter x & ENTER to cancel."
# wait user interaction
echo "Please upload file. Press ENTER to try again or (x & ENTER) to cancel."
read key
if [ "${key}" == "x" ]; then
# EXIT with CODE 1 --> USER CANCEL
echo "# CANCEL upload"
exit 1
fi
# test upload
gotFile=$(ls /home/admin/channel.backup | grep -c 'channel.backup')
done
# EXIT with CODE 1 --> FILE UPLOADED
2020-02-19 10:56:53 +01:00
echo
2019-04-26 16:36:03 +02:00
echo "# OK channel.backup uploaded"
2020-02-19 10:56:53 +01:00
sleep 2
2019-04-26 16:36:03 +02:00
exit 0
2019-03-16 23:47:22 +01:00
else
echo "unknown parameter '${mode}' - exit"
fi