mirror of
https://github.com/rootzoll/raspiblitz.git
synced 2024-11-19 01:40:16 +01:00
395 lines
14 KiB
Bash
Executable File
395 lines
14 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#######################################
|
|
# SSH USER INTERFACE
|
|
# gets called when user logins per SSH
|
|
# or calls 'raspiblitz' on the terminal
|
|
#######################################
|
|
echo "Starting SSH user interface ... (please wait)"
|
|
|
|
# CONFIGFILE - configuration of RaspiBlitz
|
|
source /mnt/hdd/raspiblitz.conf 2>/dev/null
|
|
|
|
# INFOFILE - state data from bootstrap
|
|
infoFile="/home/admin/raspiblitz.info"
|
|
source ${infoFile}
|
|
source <(/home/admin/_cache.sh get state message)
|
|
|
|
# check that basic system phase/state information is available
|
|
if [ "${setupPhase}" == "" ] || [ "${state}" == "" ]; then
|
|
echo "setupPhase(${setupPhase}) state(${state})"
|
|
echo "FAIL: ${infoFile} does not exist or missing state."
|
|
echo "Check logs & bootstrap.service for errors and report to devs."
|
|
exit 1
|
|
fi
|
|
|
|
# special state: copysource
|
|
if [ "${state}" = "stop" ]; then
|
|
echo "OK ready for manual provision - run 'release' at the end."
|
|
exit
|
|
fi
|
|
|
|
# special state: copysource
|
|
if [ "${state}" = "copysource" ]; then
|
|
echo "***********************************************************"
|
|
echo "INFO: You lost connection during copying the blockchain"
|
|
echo "You have the following options:"
|
|
echo "a) continue/check progress with command: sourcemode"
|
|
echo "b) return to normal mode with command: restart"
|
|
echo "***********************************************************"
|
|
exit
|
|
fi
|
|
|
|
# special state: copytarget
|
|
source <(/home/admin/config.scripts/blitz.copychain.sh status)
|
|
if [ "${copyInProgress}" = "1" ]; then
|
|
echo "Detected interrupted COPY blochain process ..."
|
|
/home/admin/config.scripts/blitz.copychain.sh target
|
|
exit
|
|
fi
|
|
|
|
# special state: reindex was triggered
|
|
if [ "${state}" = "reindex" ]; then
|
|
echo "Re-Index in progress ... start monitoring:"
|
|
/home/admin/config.scripts/network.reindex.sh
|
|
exit
|
|
fi
|
|
|
|
# special state: copystation
|
|
if [ "${state}" = "copystation" ]; then
|
|
echo "Copy Station is Running ..."
|
|
echo "reboot to return to normal"
|
|
sudo /home/admin/XXcopyStation.sh
|
|
exit
|
|
fi
|
|
|
|
#####################################
|
|
# SSH MENU LOOP
|
|
# this loop runs until user exits or
|
|
# an error drops user to terminal
|
|
#####################################
|
|
|
|
# listen to CTRL-c & CTRL-z to break loop
|
|
quit() {
|
|
echo "SIGINT or SIGTERM received, exiting..."
|
|
kill -9 $$
|
|
}
|
|
trap quit INT
|
|
trap quit TERM
|
|
|
|
echo "# start ssh menu loop"
|
|
# put some values on higher scan rate for 10 minute
|
|
/home/admin/_cache.sh focus ln_default_ready 2 600 >/dev/null
|
|
/home/admin/_cache.sh focus ln_default_locked 2 600 >/dev/null
|
|
/home/admin/_cache.sh focus btc_default_synced 2 600 >/dev/null
|
|
|
|
echo "# starting ssh menu loop ... "
|
|
exitMenuLoop=0
|
|
doneIBD=0
|
|
while [ ${exitMenuLoop} -eq 0 ]
|
|
do
|
|
|
|
#####################################
|
|
# Access fresh system info on every loop
|
|
|
|
# refresh system state information
|
|
source <(/home/admin/_cache.sh get \
|
|
systemscan_runtime \
|
|
state \
|
|
setupPhase \
|
|
btc_default_synced \
|
|
ln_default_sync_chain \
|
|
ln_default_locked \
|
|
ln_default_ready \
|
|
ln_default_sync_initial_done \
|
|
message \
|
|
network \
|
|
chain \
|
|
lightning \
|
|
internet_localip \
|
|
system_vm_vagrant \
|
|
)
|
|
|
|
# background.scan is not ready yet
|
|
if [ "${systemscan_runtime}" == "" ]; then
|
|
echo "# background.scan not ready yet ... (please wait)"
|
|
sleep 4
|
|
continue
|
|
fi
|
|
|
|
#####################################
|
|
# ALWAYS: Handle System States
|
|
#####################################
|
|
|
|
############################
|
|
# Wallet Unlock
|
|
|
|
if [ "${state}" == "ready" ] && [ "${setupPhase}" == "done" ] && [ "${ln_default_locked}" == "1" ]; then
|
|
|
|
# unlock lnd
|
|
if [ "${lightning}" == "lnd" ]; then
|
|
/home/admin/config.scripts/lnd.unlock.sh
|
|
fi
|
|
|
|
# unlock c-lightning
|
|
if [ "${lightning}" == "cl" ]; then
|
|
/home/admin/config.scripts/cl.hsmtool.sh unlock
|
|
sleep 5
|
|
fi
|
|
|
|
fi
|
|
|
|
#####################################
|
|
# SETUP MENU
|
|
#####################################
|
|
|
|
# when is needed & bootstrap process signals that it waits for user dialog
|
|
if [ "${setupPhase}" != "done" ] && [ "${state}" == "waitsetup" ]; then
|
|
# push user to main menu
|
|
echo "# controlSetupDialog.sh"
|
|
/home/admin/setup.scripts/controlSetupDialog.sh
|
|
# use the exit code from setup menu as signal if menu loop should exited
|
|
# 0 = continue loop / everything else = break loop and exit to terminal
|
|
exitMenuLoop=$?
|
|
if [ "${exitMenuLoop}" != "0" ]; then break; fi
|
|
fi
|
|
|
|
#####################################
|
|
# SETUP DONE DIALOGS
|
|
#####################################
|
|
|
|
# when is needed & bootstrap process signals that it waits for user dialog
|
|
if [ "${setupPhase}" != "done" ] && [ "${state}" == "waitfinal" ]; then
|
|
# push to final setup gui dialogs
|
|
#echo "# controlFinalDialog.sh"
|
|
/home/admin/setup.scripts/controlFinalDialog.sh
|
|
# exit because controller will reboot at the end
|
|
exit 0
|
|
fi
|
|
|
|
# exit loop/script in case if system shutting down
|
|
if [ "${state}" == "reboot" ] || [ "${state}" == "shutdown" ]; then
|
|
dialog --pause " Prepare Reboot ..." 8 58 4
|
|
clear
|
|
echo "***********************************************************"
|
|
echo "RaspiBlitz going to ${state}"
|
|
echo "***********************************************************"
|
|
if [ "${state}" == "reboot" ]; then
|
|
echo "SSH again into system with:"
|
|
echo "ssh admin@${internet_localip}"
|
|
echo "Use your password A"
|
|
echo "***********************************************************"
|
|
fi
|
|
sleep 10
|
|
exit 0
|
|
fi
|
|
|
|
#####################################
|
|
# MAKE SURE BLOCKCHAIN/LN IS SYNC
|
|
#####################################
|
|
if [ "${setupPhase}" == "done" ] && [ "${state}" == "ready" ]; then
|
|
if [ "${lightning}" = "cl" ]; then
|
|
if [ "${btc_default_synced}" != "1" ] || [ "${ln_default_ready}" == "0" ] || [ "${ln_default_sync_chain}" == "0" ]; then
|
|
/home/admin/setup.scripts/eventBlockchainSync.sh ssh
|
|
sleep 3
|
|
continue
|
|
fi
|
|
else
|
|
if [ "${btc_default_synced}" != "1" ] || [ "${ln_default_ready}" == "0" ] || [ "${ln_default_sync_chain}" == "0" ] || [ "${ln_default_sync_initial_done}" == "0" ]; then
|
|
/home/admin/setup.scripts/eventBlockchainSync.sh ssh
|
|
sleep 3
|
|
continue
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
#####################################
|
|
# SCB ACTIVATION
|
|
#####################################
|
|
|
|
# when setup is done & state is ready .. check for SCB activation
|
|
if [ "${setupPhase}" == "done" ] && [ "${state}" == "ready" ]; then
|
|
|
|
# check if there is a channel.backup to activate
|
|
gotSCB=$(ls /home/admin/channel.backup 2>/dev/null | grep -c 'channel.backup')
|
|
if [ "${gotSCB}" == "1" ]; then
|
|
|
|
clear
|
|
echo
|
|
echo "*** channel.backup Recovery ***"
|
|
echo "Running ... (please wait)"
|
|
lncli --chain=${network} restorechanbackup --multi_file=/home/admin/channel.backup 2>/home/admin/.error.tmp
|
|
error=`cat /home/admin/.error.tmp`
|
|
rm /home/admin/.error.tmp 2>/dev/null
|
|
|
|
if [ ${#error} -gt 0 ]; then
|
|
|
|
# output error message
|
|
echo ""
|
|
echo "# FAIL # SOMETHING WENT WRONG:"
|
|
echo "${error}"
|
|
|
|
# check if its possible to give background info on the error
|
|
notMachtingSeed=$(echo $error | grep -c 'unable to unpack chan backup')
|
|
if [ ${notMachtingSeed} -gt 0 ]; then
|
|
echo "--> ERROR BACKGROUND:"
|
|
echo "The WORD SEED is not matching the channel.backup file."
|
|
echo "Either there was an error in the word seed list or"
|
|
echo "or the channel.backup file is from another RaspiBlitz."
|
|
echo
|
|
fi
|
|
|
|
# basic info on error
|
|
echo "#################"
|
|
echo "To try upload of channel.backup again:"
|
|
echo "MAINMENU > REPAIR > REPAIR-LND > RETRYSCB"
|
|
echo
|
|
echo "Press ENTER to continue for now ..."
|
|
rm /home/admin/channel.backup
|
|
read key
|
|
else
|
|
rm /home/admin/channel.backup
|
|
dialog --title " OK Static-Channel-Backup IMPORT " --msgbox "
|
|
LND accepted the channel.backup file you uploaded.
|
|
It can now take up to an hour until you can see,
|
|
if LND was able to recover funds from your channels.
|
|
|
|
If you dont see any pending on-chain incoming funds
|
|
within the next hour or you still missing funds, you
|
|
can always retry the upload again under:
|
|
MAINMENU > REPAIR > REPAIR-LND > RETRYSCB
|
|
" 14 58
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
#####################################
|
|
# MAIN MENU or BLOCKCHAIN SYNC
|
|
#####################################
|
|
|
|
# when setup is done & state is ready .. jump to main menu
|
|
if [ "${setupPhase}" == "done" ] && [ "${state}" == "ready" ]; then
|
|
# MAIN MENU
|
|
# remove higher scan rate on values
|
|
/home/admin/_cache.sh focus ln_default_locked -1
|
|
/home/admin/_cache.sh focus btc_default_synced -1
|
|
echo "# 00mainMenu.sh"
|
|
/home/admin/00mainMenu.sh
|
|
# use the exit code from main menu as signal if menu loop should exited
|
|
# 0 = continue loop / everything else = break loop and exit to terminal
|
|
exitMenuLoop=$?
|
|
if [ "${exitMenuLoop}" != "0" ]; then break; fi
|
|
fi
|
|
|
|
#####################################
|
|
# DURING SETUP: Handle System States
|
|
#####################################
|
|
|
|
if [ "${setupPhase}" != "done" ]; then
|
|
|
|
#echo "# DURING SETUP: Handle System State (${state})"
|
|
|
|
# when no HDD on Vagrant - just print info & exit (admin info & exit)
|
|
if [ "${state}" == "noHDD" ] && [ ${system_vm_vagrant} != "0" ]; then
|
|
echo "***********************************************************"
|
|
echo "VAGRANT INFO"
|
|
echo "***********************************************************"
|
|
echo "To connect a HDD data disk to your VagrantVM:"
|
|
echo "- shutdown VM with command: off"
|
|
echo "- open your VirtualBox GUI and select RaspiBlitzVM"
|
|
echo "- change the 'mass storage' settings"
|
|
echo "- add a second 'Primary Slave' drive to the already existing controller"
|
|
echo "- close VirtualBox GUI and run: vagrant up & vagrant ssh"
|
|
echo "***********************************************************"
|
|
echo "You can either create a new dynamic VDI with around 900GB or download"
|
|
echo "a VDI with a presynced blockchain to speed up setup. If you dont have 900GB"
|
|
echo "space on your laptop you can store the VDI file on an external drive."
|
|
echo "***********************************************************"
|
|
exit 1
|
|
fi
|
|
|
|
# for all critical errors (admin info & exit)
|
|
if [ "${state}" == "error" ] || [ "${state}" == "errorHDD" ]; then
|
|
clear
|
|
echo "###########################################################"
|
|
echo "# /home/admin/raspiblitz.log"
|
|
cat /home/admin/raspiblitz.log
|
|
if [ "${state}" == "errorHDD" ]; then
|
|
# print some debug detail info on HDD/SSD error
|
|
echo "###########################################################"
|
|
echo "# blitz.datadrive.sh status"
|
|
sudo /home/admin/config.scripts/blitz.datadrive.sh status
|
|
fi
|
|
if [ "${message}" == "_provision.setup.sh fail" ]; then
|
|
echo "# /home/admin/raspiblitz.provision-setup.log"
|
|
cat /home/admin/raspiblitz.provision-setup.log
|
|
fi
|
|
echo "***********************************************************"
|
|
echo "ERROR - please report to development team"
|
|
echo "***********************************************************"
|
|
echo "state(${state}) message(${message})"
|
|
echo "https://github.com/rootzoll/raspiblitz#support"
|
|
echo "command to shutdown --> off"
|
|
exit 1
|
|
else
|
|
# every other state just push as event to SSH frontend
|
|
/home/admin/setup.scripts/eventInfoWait.sh "${state}" "${message}"
|
|
fi
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
echo "# menu loop received exit code ${exitMenuLoop} --> exit to terminal"
|
|
echo
|
|
echo " -==@@@====@===-- --===@====@@@==- "
|
|
echo " -@@=====-----=-===@@=====@@=====-----=====@@- -==@- "
|
|
echo " -@@------==---------@@@@@=--------==------@@- --=@@@@= "
|
|
echo " @@=------======-----@@@-----======------=@@=@@===@@= "
|
|
echo " =@@=---------=======@@@=======-----===@@@==- =@@- "
|
|
echo " -=@@==@@=----------=@@@@@@@@@=----==@@@==-- -=@@- "
|
|
echo " -@@@=----=@@===--====@@@@@@@@@@@@@@@@=-- -=@@@@= "
|
|
echo " =@@=--------@@@@@@@@@@@@@@@@@@@@@=-- -@@=---=@@- "
|
|
echo " -@@=-------=@@@=====@@@@@@@@@@=-- =@@=-------@@@ "
|
|
echo " =@@=-------=@@====@@@@@@@@==- -=@@@@=--------=@@- "
|
|
echo " =@@---------@@==@@@@@@==- -=@@@=@@@---------=@@ "
|
|
echo " -@@=--------=@@@@@@=- -@@@@@@@@@@=---------=@@ "
|
|
echo " @@=-------@@@@@@@@@=- =@@@===@@@@=@@@@--------@@- "
|
|
echo " -@@=------@@====@@@=@@@=- -=@@@======@@====@@@-------=@@ "
|
|
echo " -@@------@@@====@@@====@@@=- =@@@======@@@=====@@=------=@@ "
|
|
echo " -@@------=@@====@@@@@=====@@@=- -=@@@=@@@@@@===@@@=------=@@ "
|
|
echo " -@@-------@@@=@@@@@@@@@@@@@@@=- -=@@@@@@@@=@@@=-------=@@ "
|
|
echo " @@=-------=@@@@@@@@@@@@@@@= -=@@@=@@@@=--------@@= "
|
|
echo " -@@--------=@@======@@@@- -=@@@@@@=--------=@@ "
|
|
echo " =@@--------@@@===@@@=- --=@@@@@@=@@@--------=@@- "
|
|
echo " =@@--------@@@@@@=- -==@@@@@=====@@@--------=@@- "
|
|
echo " =@@=-------@@@= -==@@@@@@@=====@@@@=--------=@@- "
|
|
echo " -@@=----=@@- -==@@@@@@@@@@@@@@@@@==---------=@@= "
|
|
echo " =@@==@@- -==@@@@@=========@@@@@=-----------=@@@- "
|
|
echo " -@@=- --=@@@==-=@@@@@@@@@@@@@=-------------=@@=- "
|
|
echo " -@@= --=@@@==----------=======-------------==@@@= "
|
|
echo " -@@=-==@==-=@@@===------------------------==@@@@= "
|
|
echo " =@@@@==- -==@@@@@======----======@@@@@=-- "
|
|
echo " =@@=-- --===@@@@@@@@@@@===-- "
|
|
echo
|
|
echo "***********************************"
|
|
echo "* RaspiBlitz Commandline"
|
|
echo "* Here be dragons .. have fun :)"
|
|
echo "***********************************"
|
|
if [ "${setupPhase}" == "done" ]; then
|
|
echo "Bitcoin command line options: ${network}-cli help"
|
|
if [ "${lightning}" == "lnd" ]; then
|
|
echo "LND command line options: lncli -h"
|
|
fi
|
|
if [ "${lightning}" == "cl" ]; then
|
|
echo "Core Lightning command line options: lightning-cli help"
|
|
fi
|
|
else
|
|
echo "Your setup is not finished."
|
|
echo "For setup logs: cat raspiblitz.log"
|
|
echo "or call the command 'debug' to see bigger report."
|
|
fi
|
|
echo "Blitz command line options: blitzhelp"
|
|
echo "Back to menus use command: raspiblitz"
|
|
echo
|
|
exit 0 |