diff --git a/home.admin/90finishSetup.sh b/home.admin/90finishSetup.sh index 783df94..d666eb7 100755 --- a/home.admin/90finishSetup.sh +++ b/home.admin/90finishSetup.sh @@ -2,7 +2,7 @@ echo "" # add bonus scripts (auto install deactivated to reduce third party repos) -# /home/admin/91addBonus.sh +/home/admin/91addBonus.sh ###### SWAP & FS echo "" diff --git a/home.admin/91addBonus.sh b/home.admin/91addBonus.sh index 7183693..0067ec8 100755 --- a/home.admin/91addBonus.sh +++ b/home.admin/91addBonus.sh @@ -1,23 +1,22 @@ -# https://github.com/Stadicus/guides/blob/master/raspibolt/raspibolt_67_additional-scripts.md - echo "" echo "*** Adding: raspibolt_67_additional-scripts.md" echo "Creating the command lnbalance as well as lnchannels which will give you a nicer output" cd -mkdir /home/admin/tmpScriptDL -cd /home/admin/tmpScriptDL -wget https://stadicus.github.io/RaspiBolt/resources/lnbalance -wget https://stadicus.github.io/RaspiBolt/resources/lnchannels +cd /home/admin/assets chmod +x lnbalance chmod +x lnchannels sudo cp lnchannels /usr/local/bin sudo cp lnbalance /usr/local/bin echo "OK" + +mkdir /home/admin/tmpScriptDL +cd /home/admin/tmpScriptDL echo "installing bash completion for bitcoin-cli and lncli" wget https://raw.githubusercontent.com/bitcoin/bitcoin/master/contrib/bitcoin-cli.bash-completion wget https://raw.githubusercontent.com/lightningnetwork/lnd/master/contrib/lncli.bash-completion sudo cp *.bash-completion /etc/bash_completion.d/ echo "OK - bash completion available after next login" echo "type \"bitcoin-cli getblockch\", press [Tab] → bitcoin-cli getblockchaininfo" -cd rm -r /home/admin/tmpScriptDL + +cd \ No newline at end of file diff --git a/home.admin/assets/lnbalance b/home.admin/assets/lnbalance new file mode 100644 index 0000000..c698d75 --- /dev/null +++ b/home.admin/assets/lnbalance @@ -0,0 +1,91 @@ +#!/bin/bash +# RaspiBolt channel balance display, by robclark56 + +# make executable & copy to +# /usr/local/bin/lnbalance +# current user must be able to execute bitcoin-cli and lncli + +# Usage +# $ lnbalance to display lnd mainnet status +# $ lnbalance --testnet to display lnd testnet status +# $ lnbalance litecoin to display lnd litecoin status + +# Set default (mainnet) +lncli='/usr/local/bin/lncli' +lnd_pid=$(systemctl show -p MainPID lnd | awk -F"=" '{print $2}') +chain='main' + +# read cli args +for i in "$@" +do +case $i in + --testnet*) + lncli="${lncli} --network=testnet" + lnd_pid=$(systemctl show -p MainPID lnd | awk -F"=" '{print $2}') + chain='test' + shift # past argument=value + ;; + *) + lncli="/usr/local/bin/lncli --chain=$i" + ;; +esac +done + +# set colors +color_red='\033[0;31m' +color_green='\033[0;32m' +color_yellow='\033[0;33m' +color_gray='\033[0;37m' + +# get LND info +wallet_color="${color_yellow}" +if [ "$lnd_pid" -ne "0" ]; then + ${lncli} getinfo 2>&1 | grep "Please unlock" >/dev/null + wallet_unlocked=$? + if [ "$wallet_unlocked" -eq 0 ] ; then + wallet_color="${color_red}" + ln_walletbalance="Locked" + else + ln_walletbalance="$(${lncli} walletbalance | jq -r '.confirmed_balance')" 2>/dev/null + ln_channelbalance="$(${lncli} channelbalance | jq -r '.balance')" 2>/dev/null + ln_channels_active="$(${lncli} listchannels --active_only| jq '.[] | length')" 2>/dev/null + ln_channels_inactive="$(${lncli} listchannels --inactive_only| jq '.[] | length')" 2>/dev/null + active_remote="$(${lncli} listchannels --active_only | jq -r '.channels |.[] | .remote_balance ' | jq -s 'add')" + active_local="$(${lncli} listchannels --active_only | jq -r '.channels |.[] | .local_balance ' | jq -s 'add')" + inactive_remote="$(${lncli} listchannels --inactive_only | jq -r '.channels |.[] | .remote_balance ' | jq -s 'add')" + active_fees="$(${lncli} listchannels --active_only | jq -r '.channels |.[] | .commit_fee ' | jq -s 'add')" + inactive_fees="$(${lncli} listchannels --inactive_only | jq -r '.channels |.[] | .commit_fee ' | jq -s 'add')" + inactive_local="$(${lncli} listchannels --inactive_only | jq -r '.channels |.[] | .local_balance ' | jq -s 'add')" + if [ "${active_local}" = 'null' ];then active_local=0;fi + if [ "${active_remote}" = 'null' ];then active_remote=0;fi + if [ "${inactive_local}" = 'null' ];then inactive_local=0;fi + if [ "${active_fees}" = 'null' ];then active_fees=0;fi + if [ "${inactive_fees}" = 'null' ];then inactive_fees=0;fi + if [ "${inactive_remote}" = 'null' ];then inactive_remote=0;fi + if [ "${ln_walletbalance}" = 'null' ];then ln_walletbalance=0;fi + if [ "${ln_walletbalance}" = 'Locked' ];then ln_walletbalance=0;fi + total_local=$(( ${ln_walletbalance} + ${active_local} + ${inactive_local} )) + total_remote=$(( ${active_remote} + ${inactive_remote} )) + total_fees=$(( ${active_fees} + ${inactive_fees} )) + ln_channels=$(( ${ln_channels_active} + ${ln_channels_inactive} )) + fi +else + wallet_color="${color_red}" + ln_walletbalance="Not Running" +fi + +margin='' +printf " +${margin}${color_yellow}%-21s${color_gray}| ${color_yellow}Local${color_gray}| ${color_yellow}Remote${color_gray}|${color_yellow}Commitment Fees${color_gray}| +${margin}${color_gray}%-21s|${color_green}%12s${color_gray}|%12s|%15s| +${margin}${color_gray}%-18s%3s|${color_green}%12s${color_gray}|${color_yellow}%12s${color_gray}|${color_red}%15s${color_gray}| +${margin}${color_gray}%-18s%3s|${color_red}%12s${color_gray}|${color_red}%12s${color_gray}|${color_red}%15s${color_gray}| +${margin}${color_gray}%-18s%3s|%12s|%12s|${color_red}%15s${color_gray}| +" \ +"${chain}net (sat)" \ +"Wallet" "${ln_walletbalance}" "" "" \ +"Active Channels" "${ln_channels_active}" "${active_local}" "${active_remote}" "${active_fees}" \ +"Inactive Channels" "${ln_channels_inactive}" "${inactive_local}" "${inactive_remote}" "${inactive_fees}" \ +"Total" "${ln_channels}" "${total_local}" "${total_remote}" "${total_fees}" + +echo "$(tput -T xterm sgr0)" diff --git a/home.admin/assets/lnchannels b/home.admin/assets/lnchannels new file mode 100644 index 0000000..1bdb719 --- /dev/null +++ b/home.admin/assets/lnchannels @@ -0,0 +1,106 @@ +#!/bin/bash +# RaspiBolt channel overview display, by robclark56 + +# make executable & copy to +# /usr/local/bin/lnchannels +# current user must be able to execute bitcoin-cli and lncli + +# Usage +# $ lnchannels to display lnd mainnet channels +# $ lnchannels --testnet to display lnd testnet channels +# $ lnchannels litecoin to display lnd litecoin channels + +# Set default (mainnet) +lncli='/usr/local/bin/lncli' +lnd_pid=$(systemctl show -p MainPID lnd | awk -F"=" '{print $2}') +chain='main' + +# read cli args +for i in "$@" +do +case $i in + --testnet*) + lncli="${lncli} --network=testnet" + lnd_pid=$(systemctl show -p MainPID lnd | awk -F"=" '{print $2}') + chain='test' + shift # past argument=value + ;; + *) + lncli="/usr/local/bin/lncli --chain=$i" + ;; +esac +done + +if [ "$lnd_pid" -eq "0" ]; then + echo lnd not runnning. + exit +fi + +# set colors +color_red='\033[0;31m' +color_green='\033[0;32m' +color_yellow='\033[0;33m' +color_gray='\033[0;37m' + +# gather values +a_active=( $(${lncli} listchannels | jq -r ' .channels[].active')) +a_remote_pubkey=( $(${lncli} listchannels | jq -r ' .channels[].remote_pubkey')) +a_capacity=( $(${lncli} listchannels | jq -r ' .channels[].capacity')) +a_local_balance=( $(${lncli} listchannels | jq -r ' .channels[].local_balance')) +a_remote_balance=( $(${lncli} listchannels | jq -r ' .channels[].remote_balance')) +a_commit_fee=( $(${lncli} listchannels | jq -r ' .channels[].commit_fee')) +a_channel_point=( $(${lncli} listchannels | jq -r ' .channels[].channel_point')) + +total=${#a_active[*]} +total_capacity=0 +total_fee=0 +total_local=0 +total_remote=0 + +#display +printf "\n${color_yellow}%-7s%60s %11s\n" "${chain}net" 'Commit ------- Balance ---------' '--- Fee ----' +printf "%-21s %12s %5s %12s %12s %6s %5s\n" 'Alias or Pubkey' 'Capacity' 'Fee' 'Local' 'Remote' 'Base' 'PerMil' +horiz_line="-------------------- ------------- ------ ------------ ------------ ----- ------" +echo $horiz_line +for (( i=0; i<=$(( $total -1 )); i++ ));do + addr_port=$(${lncli} getnodeinfo ${a_remote_pubkey[$i]} | jq -r .node.addresses[0].addr) + addr=${addr_port/:/ } + if [ ${a_active[$i]} == 'true' ]; then + color_line=${color_gray} + public_check='' + else + color_line=${color_red} + public_check='0'; + if [ "$addr" != 'null' ]; then public_check=$(timeout 2s nc -z ${addr}; echo $?);fi + if [ "${public_check}" == '0' ];then public_check='';else public_check='X';fi + fi + alias=$(${lncli} getnodeinfo ${a_remote_pubkey[$i]} | jq -r .node.alias) + if [ "${alias}" == "" ] ; then + alias_short=$(echo ${a_remote_pubkey[$i]} | cut -c-17)... + else + alias_short=$(echo ${alias} | cut -c-20) + fi + active_short=$(echo ${a_active[$i]} | cut -c1) + # get fee report details + base_fee_msat=$(${lncli} feereport | jq -r ".channel_fees[] | select(.channel_point | test(\"${a_channel_point[$i]}\")) | .base_fee_msat") + fee_per_mil=$(${lncli} feereport | jq -r ".channel_fees[] | select(.channel_point | + test(\"${a_channel_point[$i]}\")) | .fee_per_mil") + # Display line + printf "${color_line}%-21s %12s %6s %12s %12s %5s %6s\r%-21s\n" \ + "" "${a_capacity[$i]}" "${a_commit_fee[$i]}" "${a_local_balance[$i]}" \ + "${a_remote_balance[$i]}" "${base_fee_msat}" "${fee_per_mil}" "${alias_short}" + total_capacity=$(( ${total_capacity} + ${a_capacity[$i]} )) + total_fee=$(( ${total_fee} + ${a_commit_fee[$i]} )) + total_local=$(( ${total_local} + ${a_local_balance[$i]} )) + total_remote=$(( ${total_remote} + ${a_remote_balance[$i]} )) + if [ ${#public_check} != 0 ] ; then echo " > No response from Addr:Port ${addr_port}";fi +done +printf "${color_yellow}%s\n" "${horiz_line}" +printf "Totals%14s %13s %6s %12s %12s Day: %7s\n" \ + "${total} ch" "${total_capacity}" "${total_fee}" \ + "${total_local}" "${total_remote}" \ + "$(${lncli} feereport |jq -r ".day_fee_sum" )" +printf "%74s %5s\n" 'Week: ' "$(${lncli} feereport |jq -r ".week_fee_sum" )" +printf "%74s %5s\n" 'Month:' "$(${lncli} feereport |jq -r ".month_fee_sum" )" +echo "$(tput -T xterm sgr0)" +