raspiblitz/home.admin/config.scripts/lnd.check.sh
2020-04-17 20:21:47 +02:00

220 lines
No EOL
9.1 KiB
Bash

#!/bin/bash
if [ $# -eq 0 ]; then
echo "# script to check LND states"
echo "# lnd.check.sh basic-setup"
echo "# lnd.check.sh update-credentials"
exit 1
fi
# load raspiblitz conf
source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf
# check basic LND setup
if [ "$1" == "basic-setup" ]; then
# check TLS exits
tlsExists=$(sudo ls /mnt/hdd/lnd/tls.cert 2>/dev/null | grep -c 'tls.cert')
if [ ${tlsExists} -gt 0 ]; then
echo "tls=1"
else
echo "tls=0"
echo "err='tls.cert is missing in /mnt/hdd/lnd'"
fi
# check TLS exits (on SD card for admin)
tlsExists=$(sudo ls /home/admin/.lnd/tls.cert 2>/dev/null | grep -c 'tls.cert')
if [ ${tlsExists} -gt 0 ]; then
echo "tlsCopy=1"
# check if the same
orgChecksum=$(sudo shasum -a 256 /mnt/hdd/lnd/tls.cert 2>/dev/null | cut -d " " -f1)
cpyChecksum=$(sudo shasum -a 256 /home/admin/.lnd/tls.cert 2>/dev/null | cut -d " " -f1)
if [ "${orgChecksum}" == "${cpyChecksum}" ]; then
echo "tlsMismatch=0"
else
echo "tlsMismatch=1"
echo "err='tls.cert for user admin is old'"
fi
else
echo "tlsCopy=0"
echo "tlsMismatch=0"
echo "err='tls.cert is missing for user admin'"
fi
# check lnd.conf exits
lndConfExists=$(sudo ls /mnt/hdd/lnd/lnd.conf 2>/dev/null | grep -c 'lnd.conf')
if [ ${lndConfExists} -gt 0 ]; then
echo "config=1"
else
echo "config=0"
echo "err='lnd.conf is missing in /mnt/hdd/lnd'"
fi
# check lnd.conf exits (on SD card for admin)
lndConfExists=$(sudo ls /home/admin/.lnd/lnd.conf 2>/dev/null | grep -c 'lnd.conf')
if [ ${lndConfExists} -gt 0 ]; then
echo "configCopy=1"
# check if the same
orgChecksum=$(sudo shasum -a 256 /mnt/hdd/lnd/lnd.conf 2>/dev/null | cut -d " " -f1)
cpyChecksum=$(sudo shasum -a 256 /home/admin/.lnd/lnd.conf 2>/dev/null | cut -d " " -f1)
if [ "${orgChecksum}" == "${cpyChecksum}" ]; then
echo "configMismatch=0"
else
echo "configMismatch=1"
echo "err='lnd.conf for user admin is old'"
fi
else
echo "configCopy=0"
echo "configMismatch=0"
echo "err='lnd.conf is missing for user admin'"
fi
# get network from config (BLOCKCHAIN)
lndNetwork=""
source <(sudo cat /mnt/hdd/lnd/lnd.conf 2>/dev/null | grep 'bitcoin.active' | sed 's/^[a-z]*\./bitcoin_/g')
source <(sudo cat /mnt/hdd/lnd/lnd.conf 2>/dev/null | grep 'litecoin.active' | sed 's/^[a-z]*\./litecoin_/g')
if [ "${bitcoin_active}" == "1" ] && [ "${litecoin_active}" == "1" ]; then
echo "err='lnd.conf: bitcoin and litecoin are set active at the same time'"
elif [ "${bitcoin_active}" == "1" ]; then
lndNetwork="bitcoin"
elif [ "${litecoin_active}" == "1" ]; then
lndNetwork="litecoin"
else
echo "err='lnd.conf: no blockchain network is set'"
fi
echo "network='${lndNetwork}'"
# check if network is same the raspiblitz config
if [ "${network}" != "${lndNetwork}" ]; then
echo "err='lnd.conf: blockchain network in lnd.conf (${lndNetwork}) is different from raspiblitz.conf (${network})'"
fi
# get chain from config (TESTNET / MAINNET)
lndChain=""
source <(sudo cat /mnt/hdd/lnd/lnd.conf 2>/dev/null | grep "${lndNetwork}.mainnet" | sed 's/^[a-z]*\.//g')
source <(sudo cat /mnt/hdd/lnd/lnd.conf 2>/dev/null | grep "${lndNetwork}.testnet" | sed 's/^[a-z]*\.//g')
if [ "${mainnet}" == "1" ] && [ "${testnet}" == "1" ]; then
echo "err='lnd.conf: mainnet and testnet are set active at the same time'"
elif [ "${mainnet}" == "1" ]; then
lndChain="main"
elif [ "${testnet}" == "1" ]; then
lndChain="test"
else
echo "err='lnd.conf: neither testnet or mainnet is set active (raspiblitz needs one of them active in lnd.conf)'"
fi
echo "chain='${lndChain}'"
# check if chain is same the raspiblitz config
if [ "${chain}" != "${lndChain}" ]; then
echo "err='lnd.conf: testnet/mainnet in lnd.conf (${lndChain}) is different from raspiblitz.conf (${chain})'"
fi
# check for admin macaroon exist (on HDD)
adminMacaroonExists=$(sudo ls /mnt/hdd/lnd/data/chain/${network}/${chain}net/admin.macaroon 2>/dev/null | grep -c 'admin.macaroon')
if [ ${adminMacaroonExists} -gt 0 ]; then
echo "macaroon=1"
else
echo "macaroon=0"
echo "err='admin.macaroon is missing in /mnt/hdd/lnd/data/chain/${network}/${chain}net'"
fi
# check for admin macaroon exist (on SD card for admin)
adminMacaroonExists=$(sudo ls /home/admin/.lnd/data/chain/${network}/${chain}net/admin.macaroon 2>/dev/null | grep -c 'admin.macaroon')
if [ ${adminMacaroonExists} -gt 0 ]; then
echo "macaroonCopy=1"
# check if the same
orgChecksum=$(sudo shasum -a 256 /mnt/hdd/lnd/data/chain/${network}/${chain}net/admin.macaroon 2>/dev/null | cut -d " " -f1)
cpyChecksum=$(sudo shasum -a 256 /home/admin/.lnd/data/chain/${network}/${chain}net/admin.macaroon 2>/dev/null | cut -d " " -f1)
if [ "${orgChecksum}" == "${cpyChecksum}" ]; then
echo "macaroonMismatch=0"
else
echo "macaroonMismatch=1"
echo "err='admin.macaroon for user admin is old'"
fi
else
echo "macaroonCopy=0"
echo "macaroonMismatch=0"
echo "err='admin.macaroon is missing for user admin"
fi
# check for walletDB exist
walletExists=$(sudo ls /mnt/hdd/lnd/data/chain/${network}/${chain}net/wallet.db 2>/dev/null | grep -c 'wallet.db')
if [ ${walletExists} -gt 0 ]; then
echo "wallet=1"
else
echo "wallet=0"
fi
# check that RPC USER between Bitcoin and LND is correct
rpcusercorrect=0
source <(sudo cat /mnt/hdd/lnd/lnd.conf 2>/dev/null | grep "${lndNetwork}d.rpcuser" | sed 's/^[a-z]*\./lnd/g')
source <(sudo cat /mnt/hdd/${lndNetwork}/${lndNetwork}.conf 2>/dev/null | grep "rpcuser" | sed 's/^[a-z]*\./lnd/g')
if [ ${#lndrpcuser} -eq 0 ]; then
echo "err='lnd.conf: missing ${lndNetwork}d.rpcuser (needs to be same as set in ${lndNetwork}.conf)'"
elif [ ${#rpcuser} -eq 0 ]; then
echo "err='${lndNetwork}.conf: missing rpcuser (needs to be same as set in lnd.conf)'"
elif [ "${rpcuser}" != "${lndrpcuser}" ]; then
echo "err='${lndNetwork}.conf (${rpcuser}) & lnd.conf (${lndrpcuser}): RPC user missmatch! - LND cannot connect to blockchain RPC'"
else
# OK looks good
rpcusercorrect=1
fi
echo "rpcusercorrect=${rpcusercorrect}"
# check that RPC PASSWORD between Bitcoin and LND is correct
rpcpasscorrect=0
source <(sudo cat /mnt/hdd/lnd/lnd.conf 2>/dev/null | grep "${lndNetwork}d.rpcpass" | sed 's/^[a-z]*\./lnd/g')
source <(sudo cat /mnt/hdd/${lndNetwork}/${lndNetwork}.conf 2>/dev/null | grep "rpcpassword" | sed 's/^[a-z]*\./lnd/g')
if [ ${#lndrpcpass} -eq 0 ]; then
echo "err='lnd.conf: missing ${lndNetwork}d.rpcpass (needs to be same as set in ${lndNetwork}.conf)'"
elif [ ${#rpcpassword} -eq 0 ]; then
echo "err='${lndNetwork}.conf: missing rpcpassword (needs to be same as set in lnd.conf)'"
elif [ "${rpcpassword}" != "${lndrpcpass}" ]; then
echo "err='${lndNetwork}.conf (${rpcpassword}) & lnd.conf (${lndrpcpass}): RPC password missmatch! - should autofix on reboot'"
else
# OK looks good
rpcpasscorrect=1
fi
echo "rpcpasscorrect=${rpcpasscorrect}"
# enforce basic LND credentials for users
elif [ "$1" == "update-credentials" ]; then
echo "# making sure LND blockchain RPC password is set correct in lnd.conf"
source <(sudo cat /mnt/hdd/${network}/${network}.conf 2>/dev/null | grep "rpcpass" | sed 's/^[a-z]*\./lnd/g')
if [ ${#rpcpassword} -gt 0 ]; then
sudo sed -i "s/^${network}d.rpcpass=.*/${network}d.rpcpass=${rpcpassword}/g" /mnt/hdd/lnd/lnd.conf 2>/dev/null
else
echo "# WARN: could not get value 'rpcuser' from blockchain conf"
fi
echo "# make sure admin user LND data dirs exist"
sudo mkdir -p /home/admin/.lnd
sudo mkdir -p /home/admin/.lnd/data
sudo mkdir -p /home/admin/.lnd/data/chain
sudo mkdir -p /home/admin/.lnd/data/chain/${network}
sudo mkdir -p /home/admin/.lnd/data/chain/${network}/${chain}net
echo "# updating/cleaning admin user LND data"
sudo rm -R /home/admin/.lnd 2>/dev/null
sudo mkdir -p /home/admin/.lnd/data/chain/${network}/${chain}net 2>/dev/null
sudo cp /mnt/hdd/lnd/lnd.conf /home/admin/.lnd/lnd.conf
sudo cp /mnt/hdd/lnd/tls.cert /home/admin/.lnd/tls.cert
sudo sh -c "cat /mnt/hdd/lnd/data/chain/${network}/${chain}net/admin.macaroon > /home/admin/.lnd/data/chain/${network}/${chain}net/admin.macaroon"
sudo chown admin:admin -R /home/admin/.lnd
echo "# updating/cleaning pi user LND data (just read & invoice)"
sudo rm -R /home/pi/.lnd 2>/dev/null
sudo mkdir -p /home/pi/.lnd/data/chain/${network}/${chain}net/
sudo cp /mnt/hdd/lnd/tls.cert /home/pi/.lnd/tls.cert
sudo sh -c "cat /mnt/hdd/lnd/data/chain/${network}/${chain}net/readonly.macaroon > /home/pi/.lnd/data/chain/${network}/${chain}net/readonly.macaroon"
sudo sh -c "cat /mnt/hdd/lnd/data/chain/${network}/${chain}net/invoice.macaroon > /home/pi/.lnd/data/chain/${network}/${chain}net/invoice.macaroon"
sudo chown pi:pi -R /home/pi/.lnd
if [ "${LNBits}" = "on" ]; then
echo "# updating macaroons for LNBits fresh on start"
sudo -u admin /home/admin/config.scripts/bonus.lnbits.sh write-macaroons
sudo chown admin:admin -R /mnt/hdd/app-data/LNBits
fi
else
echo "# FAIL: parameter not known"
fi