Christian Rotzoll
6 years ago
6 changed files with 436 additions and 421 deletions
@ -0,0 +1,390 @@ |
|||
#!/bin/bash |
|||
echo "Starting the main menu ..." |
|||
|
|||
# CONFIGFILE - configuration of RaspiBlitz |
|||
configFile="/mnt/hdd/raspiblitz.conf" |
|||
|
|||
# INFOFILE - state data from bootstrap |
|||
infoFile="/home/admin/raspiblitz.info" |
|||
|
|||
# check if HDD is connected |
|||
hddExists=$(lsblk | grep -c sda1) |
|||
if [ ${hddExists} -eq 0 ]; then |
|||
|
|||
# check if there is maybe a HDD but woth no partitions |
|||
noPartition=$(lsblk | grep -c sda) |
|||
if [ ${noPartition} -eq 1 ]; then |
|||
echo "***********************************************************" |
|||
echo "WARNING: HDD HAS NO PARTITIONS" |
|||
echo "***********************************************************" |
|||
echo "Press ENTER to create a Partition - or CTRL+C to abort" |
|||
read key |
|||
echo "Creating Partition ..." |
|||
sudo parted -s /dev/sda unit s mkpart primary `sudo parted /dev/sda unit s print free | grep 'Free Space' | tail -n 1` |
|||
echo "DONE." |
|||
sleep 3 |
|||
else |
|||
echo "***********************************************************" |
|||
echo "WARNING: NO HDD FOUND -> Shutdown, connect HDD and restart." |
|||
echo "***********************************************************" |
|||
exit |
|||
fi |
|||
fi |
|||
|
|||
# check data from _bootstrap.sh that was running on device setup |
|||
bootstrapInfoExists=$(ls $infoFile | grep -c '.info') |
|||
if [ ${bootstrapInfoExists} -eq 0 ]; then |
|||
echo "***********************************************************" |
|||
echo "WARNING: NO raspiblitz.info FOUND -> bootstrap not running?" |
|||
echo "***********************************************************" |
|||
exit |
|||
fi |
|||
|
|||
# load the data from the info file (will get produced on every startup) |
|||
source ${infoFile} |
|||
|
|||
if [ "${state}" = "recovering" ]; then |
|||
echo "***********************************************************" |
|||
echo "WARNING: bootstrap still updating - close SSH, login later" |
|||
echo "To monitor progress --> tail -n1000 -f raspiblitz.log" |
|||
echo "***********************************************************" |
|||
exit |
|||
fi |
|||
|
|||
# signal that after bootstrap recover user dialog is needed |
|||
if [ "${state}" = "recovered" ]; then |
|||
echo "System recovered - needs final user settings" |
|||
/home/admin/20recoverDialog.sh |
|||
exit 1 |
|||
fi |
|||
|
|||
# signal that a reindex was triggered |
|||
if [ "${state}" = "reindex" ]; then |
|||
echo "Re-Index in progress ... start monitoring:" |
|||
/home/admin/config.scripts/network.reindex.sh |
|||
exit 1 |
|||
fi |
|||
|
|||
# singal that torrent is in re-download |
|||
if [ "${state}" = "retorrent" ]; then |
|||
echo "Re-Index in progress ... start monitoring:" |
|||
/home/admin/50torrentHDD.sh |
|||
sudo sed -i "s/^state=.*/state=repair/g" /home/admin/raspiblitz.info |
|||
/home/admin/00raspiblitz.sh |
|||
exit |
|||
fi |
|||
|
|||
# if pre-sync is running - stop it - before continue |
|||
if [ "${state}" = "presync" ]; then |
|||
# stopping the pre-sync |
|||
echo "" |
|||
# analyse if blockchain was detected broken by pre-sync |
|||
blockchainBroken=$(sudo tail /mnt/hdd/bitcoin/debug.log | grep -c "Please restart with -reindex or -reindex-chainstate to recover.") |
|||
if [ ${blockchainBroken} -eq 1 ]; then |
|||
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" |
|||
echo "Detected corrupted blockchain on pre-sync !" |
|||
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" |
|||
echo "Deleting blockchain data ..." |
|||
echo "(needs to get downloaded fresh during setup)" |
|||
sudo rm -f -r /mnt/hdd/bitcoin |
|||
else |
|||
echo "********************************************" |
|||
echo "Stopping pre-sync ... pls wait (up to 1min)" |
|||
echo "********************************************" |
|||
sudo -u root bitcoin-cli -conf=/home/admin/assets/bitcoin.conf stop |
|||
echo "bitcoind called to stop .." |
|||
sleep 50 |
|||
fi |
|||
|
|||
# unmount the temporary mount |
|||
echo "Unmount HDD .." |
|||
sudo umount -l /mnt/hdd |
|||
sleep 3 |
|||
|
|||
# update info file |
|||
state=waitsetup |
|||
sudo sed -i "s/^state=.*/state=waitsetup/g" $infoFile |
|||
sudo sed -i "s/^message=.*/message='Pre-Sync Stopped'/g" $infoFile |
|||
fi |
|||
|
|||
# if state=ready -> setup is done or started |
|||
if [ "${state}" = "ready" ]; then |
|||
configExists=$(ls ${configFile} | grep -c '.conf') |
|||
if [ ${configExists} -eq 1 ]; then |
|||
echo "loading config data" |
|||
source ${configFile} |
|||
else |
|||
echo "setup still in progress - setupStep(${setupStep})" |
|||
fi |
|||
fi |
|||
|
|||
## default menu settings |
|||
# to fit the main menu without scrolling: |
|||
# HEIGHT=23 |
|||
# CHOICE_HEIGHT=20 |
|||
HEIGHT=13 |
|||
WIDTH=64 |
|||
CHOICE_HEIGHT=6 |
|||
BACKTITLE="RaspiBlitz" |
|||
TITLE="" |
|||
MENU="Choose one of the following options:" |
|||
OPTIONS=() |
|||
|
|||
# check if RTL web interface is installed |
|||
runningRTL=$(sudo ls /etc/systemd/system/RTL.service 2>/dev/null | grep -c 'RTL.service') |
|||
|
|||
# get the local network IP to be displayed on the lCD |
|||
localip=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/') |
|||
|
|||
# function to use later |
|||
waitUntilChainNetworkIsReady() |
|||
{ |
|||
echo "checking ${network}d - please wait .." |
|||
echo "can take longer if device was off or first time" |
|||
while : |
|||
do |
|||
|
|||
# check for error on network |
|||
sudo -u bitcoin ${network}-cli -datadir=/home/bitcoin/.${network} getblockchaininfo 1>/dev/null 2>error.tmp |
|||
clienterror=`cat error.tmp` |
|||
rm error.tmp |
|||
|
|||
# check for missing blockchain data |
|||
minSize=250000000000 |
|||
if [ "${network}" = "litecoin" ]; then |
|||
minSize=20000000000 |
|||
fi |
|||
blockchainsize=$(sudo du -shbc /mnt/hdd/${network} | head -n1 | awk '{print $1;}') |
|||
if [ ${#blockchainsize} -gt 0 ]; then |
|||
if [ ${blockchainsize} -lt ${minSize} ]; then |
|||
echo "blockchainsize(${blockchainsize})" |
|||
echo "Missing Blockchain Data (<${minSize}) ..." |
|||
clienterror="missing blockchain" |
|||
sleep 3 |
|||
fi |
|||
fi |
|||
|
|||
if [ ${#clienterror} -gt 0 ]; then |
|||
|
|||
# analyse LOGS for possible reindex |
|||
reindex=$(sudo cat /mnt/hdd/${network}/debug.log | grep -c 'Please restart with -reindex or -reindex-chainstate to recover') |
|||
if [ ${reindex} -gt 0 ] || [ "${clienterror}" = "missing blockchain" ]; then |
|||
echo "!! DETECTED NEED FOR RE-INDEX in debug.log ... starting repair options." |
|||
sudo sed -i "s/^state=.*/state=repair/g" /home/admin/raspiblitz.info |
|||
sleep 3 |
|||
|
|||
dialog --backtitle "RaspiBlitz - Repair Script" --msgbox "Your blockchain data needs to be repaired. |
|||
This can be due to power problems or a failing HDD. |
|||
Please check the FAQ on RaspiBlitz Github |
|||
'My blockchain data is corrupted - what can I do?' |
|||
https://github.com/rootzoll/raspiblitz/blob/master/FAQ.md |
|||
|
|||
The RaspiBlitz will now try to help you on with the repair. |
|||
To run a BACKUP of funds & channels first is recommended. |
|||
" 13 65 |
|||
|
|||
clear |
|||
# Basic Options |
|||
OPTIONS=(TORRENT "Redownload Prepared Torrent (DEFAULT)" \ |
|||
COPY "Copy from another Computer (SKILLED)" \ |
|||
REINDEX "Resync thru ${network}d (TAKES VERY VERY LONG)" \ |
|||
BACKUP "Run Backup LND data first (optional)" |
|||
) |
|||
|
|||
CHOICE=$(dialog --backtitle "RaspiBlitz - Repair Script" --clear --title "Repair Blockchain Data" --menu "Choose a repair/recovery option:" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) |
|||
|
|||
clear |
|||
if [ "${CHOICE}" = "TORRENT" ]; then |
|||
echo "Starting TORRENT ..." |
|||
sudo sed -i "s/^state=.*/state=retorrent/g" /home/admin/raspiblitz.info |
|||
/home/admin/50torrentHDD.sh |
|||
sudo sed -i "s/^state=.*/state=repair/g" /home/admin/raspiblitz.info |
|||
/home/admin/00raspiblitz.sh |
|||
exit |
|||
|
|||
elif [ "${CHOICE}" = "COPY" ]; then |
|||
echo "Starting COPY ..." |
|||
sudo sed -i "s/^state=.*/state=recopy/g" /home/admin/raspiblitz.info |
|||
/home/admin/50copyHDD.sh |
|||
sudo sed -i "s/^state=.*/state=repair/g" /home/admin/raspiblitz.info |
|||
/home/admin/00raspiblitz.sh |
|||
exit |
|||
|
|||
elif [ "${CHOICE}" = "REINDEX" ]; then |
|||
echo "Starting REINDEX ..." |
|||
sudo /home/admin/config.scripts/network.reindex.sh |
|||
exit |
|||
|
|||
elif [ "${CHOICE}" = "BACKUP" ]; then |
|||
sudo /home/admin/config.scripts/lnd.rescue.sh backup |
|||
echo "PRESS ENTER to return to menu." |
|||
read key |
|||
/home/admin/00raspiblitz.sh |
|||
exit |
|||
|
|||
else |
|||
echo "CANCEL" |
|||
exit |
|||
fi |
|||
|
|||
else |
|||
echo "${network} error: ${clienterror}" |
|||
fi |
|||
|
|||
# normal info |
|||
boxwidth=40 |
|||
l1="Waiting for ${network}d to get ready.\n" |
|||
l2="---> ${clienterror/error*:/}\n" |
|||
l3="Can take longer if device was off." |
|||
uptimeSeconds="$(cat /proc/uptime | grep -o '^[0-9]\+')" |
|||
# after 2 min show complete long string (full detail) |
|||
if [ ${uptimeSeconds} -gt 120 ]; then |
|||
boxwidth=80 |
|||
l2="${clienterror}\n" |
|||
l3="CTRL+C => terminal" |
|||
fi |
|||
dialog --backtitle "RaspiBlitz ${localip} - Welcome" --infobox "$l1$l2$l3" 5 ${boxwidth} |
|||
else |
|||
locked=$(sudo -u bitcoin /usr/local/bin/lncli --chain=${network} --network=${chain}net getinfo 2>&1 | grep -c unlock) |
|||
if [ ${locked} -gt 0 ]; then |
|||
/home/admin/AAunlockLND.sh |
|||
echo "please wait ... update to next screen can be slow" |
|||
fi |
|||
lndSynced=$(sudo -u bitcoin /usr/local/bin/lncli --chain=${network} --network=${chain}net getinfo 2>/dev/null | jq -r '.synced_to_chain' | grep -c true) |
|||
if [ ${lndSynced} -eq 0 ]; then |
|||
/home/admin/80scanLND.sh |
|||
else |
|||
# everything is ready - return from loop |
|||
return |
|||
fi |
|||
fi |
|||
sleep 5 |
|||
done |
|||
} |
|||
|
|||
if [ ${#setupStep} -eq 0 ]; then |
|||
echo "WARN: no setup step found in raspiblitz.info" |
|||
setupStep=0 |
|||
fi |
|||
if [ ${setupStep} -eq 0 ]; then |
|||
|
|||
# check data from boostrap |
|||
# TODO: when olddata --> CLEAN OR MANUAL-UPDATE-INFO |
|||
if [ "${state}" = "olddata" ]; then |
|||
|
|||
# old data setup |
|||
BACKTITLE="RaspiBlitz - Manual Update" |
|||
TITLE="⚡ Found old RaspiBlitz Data on HDD ⚡" |
|||
MENU="\n ATTENTION: OLD DATA COULD CONTAIN FUNDS\n" |
|||
OPTIONS+=(MANUAL "read how to recover your old funds" \ |
|||
DELETE "erase old data, keep blockchain, reboot" ) |
|||
HEIGHT=11 |
|||
|
|||
else |
|||
|
|||
# show hardware test |
|||
/home/admin/05hardwareTest.sh |
|||
|
|||
# start setup |
|||
BACKTITLE="RaspiBlitz - Setup" |
|||
TITLE="⚡ Welcome to your RaspiBlitz ⚡" |
|||
MENU="\nChoose how you want to setup your RaspiBlitz: \n " |
|||
OPTIONS+=(BITCOIN "Setup BITCOIN and Lightning (DEFAULT)" \ |
|||
LITECOIN "Setup LITECOIN and Lightning (EXPERIMENTAL)" ) |
|||
HEIGHT=11 |
|||
|
|||
fi |
|||
|
|||
elif [ ${setupStep} -lt 100 ]; then |
|||
|
|||
# see function above |
|||
if [ ${setupStep} -gt 59 ]; then |
|||
waitUntilChainNetworkIsReady |
|||
fi |
|||
|
|||
# continue setup |
|||
BACKTITLE="${hostname} / ${network} / ${chain}" |
|||
TITLE="⚡ Welcome to your RaspiBlitz ⚡" |
|||
MENU="\nThe setup process is not finished yet: \n " |
|||
OPTIONS+=(CONTINUE "Continue Setup of your RaspiBlitz") |
|||
HEIGHT=10 |
|||
|
|||
else |
|||
/home/admin/00mainMenu.sh |
|||
exit 0 |
|||
fi |
|||
|
|||
CHOICE=$(dialog --clear \ |
|||
--backtitle "$BACKTITLE" \ |
|||
--title "$TITLE" \ |
|||
--menu "$MENU" \ |
|||
$HEIGHT $WIDTH $CHOICE_HEIGHT \ |
|||
"${OPTIONS[@]}" \ |
|||
2>&1 >/dev/tty) |
|||
|
|||
clear |
|||
case $CHOICE in |
|||
CLOSE) |
|||
exit 1; |
|||
;; |
|||
BITCOIN) |
|||
sed -i "s/^network=.*/network=bitcoin/g" ${infoFile} |
|||
sed -i "s/^chain=.*/chain=main/g" ${infoFile} |
|||
/home/admin/10setupBlitz.sh |
|||
exit 1; |
|||
;; |
|||
LITECOIN) |
|||
sed -i "s/^network=.*/network=litecoin/g" ${infoFile} |
|||
sed -i "s/^chain=.*/chain=main/g" ${infoFile} |
|||
/home/admin/10setupBlitz.sh |
|||
exit 1; |
|||
;; |
|||
CONTINUE) |
|||
/home/admin/10setupBlitz.sh |
|||
exit 1; |
|||
;; |
|||
OFF) |
|||
echo "" |
|||
echo "LCD turns white when shutdown complete." |
|||
echo "Then wait 5 seconds and disconnect power." |
|||
echo "-----------------------------------------------" |
|||
echo "stop lnd - please wait .." |
|||
sudo systemctl stop lnd |
|||
echo "stop ${network}d (1) - please wait .." |
|||
sudo -u bitcoin ${network}-cli stop |
|||
sleep 10 |
|||
echo "stop ${network}d (2) - please wait .." |
|||
sudo systemctl stop ${network}d |
|||
sleep 3 |
|||
sync |
|||
echo "starting shutdown ..." |
|||
sudo shutdown now |
|||
exit 0 |
|||
;; |
|||
MANUAL) |
|||
echo "************************************************************************************" |
|||
echo "PLEASE go to RaspiBlitz FAQ:" |
|||
echo "https://github.com/rootzoll/raspiblitz" |
|||
echo "And check: How can I recover my coins from a failing RaspiBlitz?" |
|||
echo "************************************************************************************" |
|||
exit 0 |
|||
;; |
|||
DELETE) |
|||
sudo /home/admin/XXcleanHDD.sh |
|||
sudo shutdown -r now |
|||
exit 0 |
|||
;; |
|||
X) |
|||
lncli -h |
|||
echo "OK you now on the command line." |
|||
echo "You can return to the main menu with the command:" |
|||
echo "raspiblitz" |
|||
;; |
|||
R) |
|||
/home/admin/00raspiblitz.sh |
|||
;; |
|||
U) # unlock |
|||
/home/admin/AAunlockLND.sh |
|||
/home/admin/00raspiblitz.sh |
|||
;; |
|||
esac |
Loading…
Reference in new issue