You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
5.0 KiB
168 lines
5.0 KiB
#!/bin/bash
|
|
|
|
# command info
|
|
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
|
|
echo "small rescue script to to backup or restore"
|
|
echo "lnd.rescue.sh [backup|restore] [?no-download]"
|
|
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
|
|
|
|
# delete old backups
|
|
rm /home/admin/lnd-rescue-*.tar.gz
|
|
|
|
# name with md5 checksum
|
|
md5checksum=$(md5sum /home/admin/lnd-rescue.tar.gz | head -n1 | cut -d " " -f1)
|
|
mv /home/admin/lnd-rescue.tar.gz /home/admin/lnd-rescue-${md5checksum}.tar.gz
|
|
|
|
# stop here in case of 'no-download' option
|
|
if [ "${2}" == "no-download" ]; then
|
|
echo "No download of LND data requested."
|
|
exit 0
|
|
fi
|
|
|
|
# offer SCP for download
|
|
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-rescue-*.tar.gz ./"
|
|
echo ""
|
|
echo "Use password A to authenticate file transfere."
|
|
echo
|
|
echo "BEWARE: Your Lightning node is now stopped. So its safe to backup the data and restore it"
|
|
echo "later on - for example on a fresh RaspiBlitz. But once this Lightning node gets started"
|
|
echo "again by 'sudo systemctl start lnd' or a reboot its not adviced to restore the backup file"
|
|
echo "anymore because it cointains outdated channel data and can lead to loss of channel funds."
|
|
|
|
elif [ ${mode} = "restore" ]; then
|
|
|
|
################################
|
|
# RESTORE
|
|
################################
|
|
|
|
echo "*** LND.RESCUE --> RESTORE"
|
|
echo ""
|
|
|
|
# delete old backups
|
|
rm /home/admin/lnd-rescue-*.tar.gz
|
|
|
|
filename=""
|
|
while [ ${#filename} -eq 0 ]
|
|
do
|
|
countZips=$(sudo ls /home/admin/lnd-rescue-*.tar.gz 2>/dev/null | grep -c 'lnd-rescue')
|
|
if [ ${countZips} -lt 1 ]; then
|
|
echo "**************************"
|
|
echo "* UPLOAD THE BACKUP 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 "CAUTION: Dont restore old LND states - risk of loosing funds!"
|
|
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:"
|
|
echo "scp -r ./lnd-rescue-*.tar.gz admin@${localip}:/home/admin/"
|
|
echo ""
|
|
echo "Use password A to authenticate file transfere."
|
|
echo "PRESS ENTER when upload is done. Enter x & ENTER to cancel."
|
|
fi
|
|
if [ ${countZips} -gt 1 ]; then
|
|
echo "!! WARNING !!"
|
|
echo "There are multiple lnd-rescue files in directory /home/admin."
|
|
echo "Make sure you upload only one tar.gz-file and start again."
|
|
echo
|
|
echo "PRESS ENTER to continue."
|
|
read key
|
|
exit 1
|
|
fi
|
|
if [ ${countZips} -eq 1 ]; then
|
|
|
|
clear
|
|
echo
|
|
echo "**************************"
|
|
echo "* RESTORING BACKUP FILE *"
|
|
echo "**************************"
|
|
echo
|
|
|
|
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."
|
|
echo "Maybe transfere failed? Continue on your own risk!"
|
|
echo "Recommend to abort and upload again!"
|
|
fi
|
|
|
|
echo
|
|
echo "WARNING: This will delete/overwrite the LND state/funds of this RaspiBlitz."
|
|
echo
|
|
echo "PRESS ENTER to start restore. Enter x & ENTER to cancel."
|
|
fi
|
|
read key
|
|
if [ "${key}" == "x" ]; then
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
# stop LND
|
|
echo "Stopping lnd..."
|
|
sudo systemctl stop lnd
|
|
sleep 5
|
|
echo "OK"
|
|
echo
|
|
|
|
# clean DIR
|
|
echo "Cleaning LND data ..."
|
|
sudo rm -r /mnt/hdd/lnd/*
|
|
echo "OK"
|
|
echo
|
|
|
|
# unpack zip
|
|
echo "Restoring LND data from ${filename} ..."
|
|
sudo tar -xf ${filename} -C /
|
|
sudo chown -R bitcoin:bitcoin /mnt/hdd/lnd
|
|
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."
|
|
echo "Keep in mind that some channels maybe forced closed in the meanwhile."
|
|
echo
|
|
|
|
else
|
|
echo "unknown parameter '${mode}' - exit"
|
|
fi
|