#!/bin/bash ## get basic info source /home/admin/raspiblitz.info source /mnt/hdd/raspiblitz.conf # CHECK ######### echo "*** Check Basic Config ***" if [ ${#network} -eq 0 ]; then echo "FAIL - missing: network" exit 1 fi if [ ${#chain} -eq 0 ]; then echo "FAIL - missing: chain" exit 1 fi # CHECK ######### echo "*** Check ${network} Running ***" bitcoinRunning=$(systemctl status ${network}d.service 2>/dev/null | grep -c running) if [ ${bitcoinRunning} -eq 0 ]; then bitcoinRunning=$(sudo -u bitcoin ${network}-cli -datadir=/home/bitcoin/.${network} getblockchaininfo | grep -c verificationprogress) fi if [ ${bitcoinRunning} -eq 0 ]; then whiptail --title "70initLND - WARNING" --yes-button "Retry" --no-button "EXIT+Logs" --yesno "Service ${network}d is not running." 8 50 if [ $? -eq 0 ]; then /home/admin/70initLND.sh else /home/admin/XXdebugLogs.sh fi exit 1 fi # CHECK ######### echo "*** Check ${network} Responding ***" chainIsReady=0 loopCount=0 while [ ${chainIsReady} -eq 0 ] do loopCount=$(($loopCount +1)) result=$(sudo -u bitcoin ${network}-cli -datadir=/home/bitcoin/.${network} getblockchaininfo 2>error.out) error=`cat error.out` rm error.out if [ ${#error} -gt 0 ]; then if [ ${loopCount} -gt 33 ]; then echo "*** TAKES LONGER THEN EXCEPTED ***" date +%s echo "result(${result})" echo "error(${error})" testnetAdd="" if [ "${chain}" = "test" ]; then testnetAdd="testnet3/" fi sudo tail -n 5 /mnt/hdd/${network}/${testnetAdd}debug.log echo "If you see an error -28 relax, just give it some time." echo "Waiting 1 minute and then trying again ..." sleep 60 else echo "(${loopCount}/33) still waiting .." sleep 10 fi else echo "OK - chainnetwork is working" echo "" chainIsReady=1 break fi done # CHECK ######### echo "*** Check LND Config ***" configExists=$( sudo ls /mnt/hdd/lnd/ | grep -c lnd.conf ) if [ ${configExists} -eq 0 ]; then sudo cp /home/admin/assets/lnd.${network}.conf /mnt/hdd/lnd/lnd.conf sudo chown bitcoin:bitcoin /mnt/hdd/lnd/lnd.conf if [ -d /home/bitcoin/.lnd ]; then echo "OK - LND config written" else echo "FAIL - Was not able to setup LND" exit 1 fi else echo "OK - exists" fi echo "" ###### Start LND echo "*** Starting LND ***" lndRunning=$(sudo systemctl status lnd.service 2>/dev/null | grep -c running) if [ ${lndRunning} -eq 0 ]; then sed -i "5s/.*/Wants=${network}d.service/" ./assets/lnd.service sed -i "6s/.*/After=${network}d.service/" ./assets/lnd.service sudo cp /home/admin/assets/lnd.service /etc/systemd/system/lnd.service sudo chmod +x /etc/systemd/system/lnd.service sudo systemctl enable lnd sudo systemctl start lnd echo "" dialog --pause " Starting LND - please wait .." 8 58 120 fi ###### Check LND starting while [ ${lndRunning} -eq 0 ] do lndRunning=$(sudo systemctl status lnd.service | grep -c running) if [ ${lndRunning} -eq 0 ]; then date +%s echo "LND not ready yet ... waiting another 60 seconds." echo "If this takes too long (more then 10min total) --> CTRL+c and report Problem" sleep 60 fi done echo "OK - LND is running" echo "" ###### Check LND health/fails (to be extended) fail="" tlsExists=$(sudo ls /mnt/hdd/lnd/tls.cert 2>/dev/null | grep -c "tls.cert") if [ ${tlsExists} -eq 0 ]; then fail="LND was starting, but missing /mnt/hdd/lnd/tls.cert" fi if [ ${#fail} -gt 0 ]; then whiptail --title "70initLND - WARNING" --yes-button "Retry" --no-button "EXIT+Logs" --yesno "${fail}" 8 50 if [ $? -eq 0 ]; then /home/admin/70initLND.sh else /home/admin/XXdebugLogs.sh fi exit 1 fi ###### Instructions on Creating/Restoring LND Wallet walletExists=$(sudo ls /mnt/hdd/lnd/data/chain/${network}/${chain}net/wallet.db 2>/dev/null | grep wallet.db -c) echo "walletExists(${walletExists})" sleep 2 if [ ${walletExists} -eq 0 ]; then # UI: Ask if user wants NEW wallet or RECOVER a wallet OPTIONS=(NEW "Setup a brand new Lightning Node (DEFAULT)" \ OLD "I had a old Node I want to recover/restore") CHOICE=$(dialog --backtitle "RaspiBlitz" --clear --title "LND Setup" --menu "LND Data & Wallet" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) echo "choice($CHOICE)" if [ "${CHOICE}" == "NEW" ]; then # let user enter password c sudo shred /home/admin/.pass.tmp 2>/dev/null sudo ./config.scripts/blitz.setpassword.sh x "Set your Password C for the LND Wallet Unlock" /home/admin/.pass.tmp passwordC=`sudo cat /home/admin/.pass.tmp` sudo shred /home/admin/.pass.tmp 2>/dev/null # make sure passwordC is set if [ ${#passwordC} -eq 0 ]; then /home/admin/70initLND.sh exit 1 fi # generate wallet with seed and set passwordC source /home/admin/python-env-lnd/bin/activate python /home/admin/config.scripts/lnd.initwallet.py new ${passwordC} > /home/admin/.seed.tmp source /home/admin/.seed.tmp sudo shred /home/admin/.pass.tmp 2>/dev/null # in case of error - retry if [ ${#err} -gt 0 ]; then whiptail --title "lnd.initwallet.py - ERROR" --msgbox "${err}" 8 50 /home/admin/70initLND.sh exit 1 else if [ ${#seedwords} -eq 0 ]; then echo "FAIL!! -> MISSING seedwords data - but also no err data ?!?" echo "CHECK output data above - PRESS ENTER to restart 70initLND.sh" read key /home/admin/70initLND.sh exit 1 fi fi if [ ${#seedwords6x4} -eq 0 ]; then seedwords6x4="${seedwords}" fi ack=0 while [ ${ack} -eq 0 ] do whiptail --title "IMPORTANT - PLEASE WRITE DOWN" --msgbox "LND Wallet got created. Store these numbered words in a safe location:\n${seedwords6x4}" 8 76 whiptail --title "Please Confirm" --yes-button "Show Again" --no-button "CONTINUE" --yesno " Are you sure that you wrote down the word list?" 8 55 if [ $? -eq 1 ]; then ack=1 fi done sudo sed -i "s/^setupStep=.*/setupStep=65/g" /home/admin/raspiblitz.info else # TODO: IMPLEMENT # - Recover with Seed Word List # --> (ask if seed word list was password D protected) # - Recover with Seed Word List & Channel Backup Snapshot File # --> (ask if seed word list was password D protected) # - Restore LND backup made with Rescue-Script (tar.gz-file) # --> run retsore script # FALLBACK TO lncli create FOR NOW dialog --title "OK" --msgbox "\nI will start 'lncli create' for you ..." 7 44 sudo -u bitcoin /usr/local/bin/lncli --chain=${network} create /home/admin/70initLND.sh exit 1 fi else echo "OK - LND wallet already exists." fi dialog --pause " Waiting for LND - please wait .." 8 58 60 ###### Copy LND macaroons to admin echo "" echo "*** Copy LND Macaroons to user admin ***" macaroonExists=$(sudo -u bitcoin ls -la /home/bitcoin/.lnd/data/chain/${network}/${chain}net/admin.macaroon 2>/dev/null | grep -c admin.macaroon) if [ ${macaroonExists} -eq 0 ]; then ./AAunlockLND.sh sleep 3 fi macaroonExists=$(sudo -u bitcoin ls -la /home/bitcoin/.lnd/data/chain/${network}/${chain}net/admin.macaroon 2>/dev/null | grep -c admin.macaroon) if [ ${macaroonExists} -eq 0 ]; then sudo -u bitcoin ls -la /home/bitcoin/.lnd/data/chain/${network}/${chain}net/admin.macaroon echo "" echo "FAIL - LND Macaroons not created" echo "Please check the following LND issue:" echo "https://github.com/lightningnetwork/lnd/issues/890" echo "You may want try again with starting ./70initLND.sh" exit 1 fi macaroonExists=$(sudo ls -la /home/admin/.lnd/data/chain/${network}/${chain}net/ | grep -c admin.macaroon) if [ ${macaroonExists} -eq 0 ]; then sudo mkdir /home/admin/.lnd sudo mkdir /home/admin/.lnd/data sudo mkdir /home/admin/.lnd/data/chain sudo mkdir /home/admin/.lnd/data/chain/${network} sudo mkdir /home/admin/.lnd/data/chain/${network}/${chain}net sudo cp /home/bitcoin/.lnd/tls.cert /home/admin/.lnd sudo cp /home/bitcoin/.lnd/lnd.conf /home/admin/.lnd sudo cp /home/bitcoin/.lnd/data/chain/${network}/${chain}net/admin.macaroon /home/admin/.lnd/data/chain/${network}/${chain}net sudo chown -R admin:admin /home/admin/.lnd/ echo "OK - LND Macaroons created" echo "" else echo "OK - Macaroons are already copied" echo "" fi ###### Unlock Wallet (if needed) echo "*** Check Wallet Lock ***" locked=$(sudo tail -n 1 /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log | grep -c unlock) if [ ${locked} -gt 0 ]; then echo "OK - Wallet is locked ... starting unlocking dialog" ./AAunlockLND.sh else echo "OK - Wallet is already unlocked" fi # set SetupState (scan is done - so its 80%) sudo sed -i "s/^setupStep=.*/setupStep=80/g" /home/admin/raspiblitz.info ###### finishSetup sudo ./90finishSetup.sh sudo ./95finalSetup.sh