big merge of 2388redis & 2669tor (#2790)

This commit is contained in:
/rootzoll 2021-12-14 23:34:35 +01:00 committed by GitHub
parent 1cdb50d38f
commit 85b0c97d41
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
132 changed files with 4895 additions and 4106 deletions

2
.shellcheckrc Normal file
View File

@ -0,0 +1,2 @@
shell=bash
source=/dev/null

9
FAQ.md
View File

@ -390,6 +390,14 @@ If your RaspiBlitz is not working correctly and you like to get help from the co
*PLEASE NOTICE: It's possible that these logs can contain private information (like IPs, node IDs, ...) - just share publicly what you feel OK with.*
### Can I run my RaspiBlitz on Solar Energy?
Yes - take a look at the project of [Chimezie Chuta](https://twitter.com/mezie16/status/1264513274080636928?s=20)
![RaspiSolar](pictures/raspisolar.jpg)
More details in his book ["A-Z of Building your own Full Bitcoin Lightning Node: A hand Book for Enthusiasts"](https://blockspace.shop/products/a-z-of-building-your-own-full-bitcoin-lightning-node-a-hand-book-for-enthusiasts)
### Why is my "final sync" taking so long?
First of all if you see a final sync over 90% and you can see from time to time small increase - you should be OK ... this can take a looong time to catch up with the network. Only in the case that you actively choose the `SYNC` option in the `Getting the Blockchain` is a final sync under 90% OK. If you did a torrent or a copy from another computer and you are seeing under 90% something went wrong, and the setup process is ignoring your prepared Blockchain and doing a full sync - which can almost take forever on a raspberryPi.
@ -909,7 +917,6 @@ It is currently considered completely fine to leave this field empty and not pro
The `acme.sh` script is installed in `/home/admin/.acme.sh/` - the configuration and the certificates are stored on the
external hard disk in `/mnt/hdd/app-data/letsencrypt`.
### What is this mnemonic seed word list?
With the 24 word list given you by LND upon wallet creation you can recover your private key. You should write it down and store it at a safe place. Bear in mind that *this 24 word mnemonic seed is not based on the BIP 39* and therefore cannot be recovered using a Bitcoin wallet.

View File

@ -10,7 +10,7 @@ cp /vagrant/home.admin/config.scripts/blitz.github.sh /home/admin/config.scripts
# execute 'patch' command to sync laptop with VM
/home/admin/config.scripts/blitz.github.sh -run
source <(/home/admin/config.scripts/internet.sh status)
source <(/home/admin/config.scripts/internet.sh status local)
echo
echo "************* NEXT ********************"

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,72 @@
#!/bin/bash
# 00infoBlitz.sh <cl|lnd> <testnet|mainnet|signet>
source <(/home/admin/_cache.sh get \
state \
setupPhase \
network \
chain \
lightning \
codeVersion \
hostname \
undervoltageReports \
hdd_used_info \
internet_localip \
internet_public_ip_clean \
internet_rx \
internet_tx \
system_ram_available_mb \
system_ram_mb \
system_ups_status \
system_cpu_load \
system_temp_celsius \
system_temp_fahrenheit \
runBehindTor \
ups \
ElectRS \
BTCRPCexplorer \
)
# load code software version
source /home/admin/_version.info
# PARAMETER 1: forcing view on a lightning implementation
PARAMETER_LIGHTNING=$1
if [ "${PARAMETER_LIGHTNING}" == "lnd" ]; then
lightning="lnd"
fi
if [ "${PARAMETER_LIGHTNING}" == "cl" ]; then
lightning="cl"
fi
if [ "${PARAMETER_LIGHTNING}" == "none" ]; then
lightning=""
fi
# PARAMETER 2: forcing view on a given network
PARAMETER_CHAIN=$2
if [ "${PARAMETER_CHAIN}" == "mainnet" ]; then
chain="main"
fi
if [ "${PARAMETER_CHAIN}" == "testnet" ]; then
chain="test"
fi
if [ "${PARAMETER_CHAIN}" == "signet" ]; then
chain="sig"
fi
# generate netprefix
netprefix=${chain:0:1}
if [ "${netprefix}" == "m" ]; then
netprefix=""
fi
## get UPS info
upsInfo=""
if [ "${system_ups_status}" = "ONLINE" ]; then
upsInfo="${color_gray}${upsBattery}"
fi
if [ "$system_ups_status}" = "ONBATT" ]; then
upsInfo="${color_red}${upsBattery}"
fi
if [ "${system_ups_status}" = "SHUTTING DOWN" ]; then
upsInfo="${color_red}DOWN"
fi
# set colors
color_red='\033[0;31m'
@ -12,33 +75,6 @@ color_amber='\033[0;33m'
color_yellow='\033[1;93m'
color_gray='\033[0;37m'
## get basic info
source /home/admin/raspiblitz.info 2>/dev/null
source /mnt/hdd/raspiblitz.conf 2>/dev/null
source <(/home/admin/config.scripts/network.aliases.sh getvars $1 $2)
## get HDD/SSD info
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status)
hdd="${hddUsedInfo}"
## get internet info
source <(sudo /home/admin/config.scripts/internet.sh status)
cleanip=$(echo "${publicIP}" | tr -d '[]')
## get UPS info
source <(/home/admin/config.scripts/blitz.ups.sh status)
upsInfo=""
if [ "${upsStatus}" = "ONLINE" ]; then
upsInfo="${color_gray}${upsBattery}"
fi
if [ "${upsStatus}" = "ONBATT" ]; then
upsInfo="${color_red}${upsBattery}"
fi
if [ "${upsStatus}" = "SHUTTING DOWN" ]; then
upsInfo="${color_red}DOWN"
fi
# check hostname
if [ ${#hostname} -eq 0 ]; then hostname="raspiblitz"; fi
@ -48,347 +84,175 @@ if [ ${#chain} -eq 0 ]; then
chain="main"
fi
# set datadir
lnd_dir="/home/bitcoin/.lnd"
lnd_macaroon_dir="/home/bitcoin/.lnd/data/chain/${network}/${chain}net"
# get uptime & load
load=$(w | head -n 1 | cut -d 'v' -f2 | cut -d ':' -f2)
# get CPU temp - no measurement in a VM
cpu=0
if [ -d "/sys/class/thermal/thermal_zone0/" ]; then
cpu=$(cat /sys/class/thermal/thermal_zone0/temp)
fi
if [ $cpu = 0 ];then
tempC=""
tempF=""
else
tempC=$((cpu/1000))
tempF=$(((tempC * 18 + 325) / 10))
fi
# get memory
ram_avail=$(free -m | grep Mem | awk '{ print $7 }')
ram=$(printf "%sM / %sM" "${ram_avail}" "$(free -m | grep Mem | awk '{ print $2 }')")
if [ ${ram_avail} -lt 50 ]; then
# ram info string
ram=$(printf "%sM / %sM" "${system_ram_available_mb}" "${system_ram_mb}")
if [ "${system_ram_available_mb}" != "" ] && [ ${system_ram_available_mb} -lt 50 ]; then
color_ram="${color_red}\e[7m"
else
color_ram=${color_green}
fi
# Bitcoin blockchain
btc_path=$(command -v ${network}-cli)
blockInfo="-"
if [ -n "${btc_path}" ]; then
btc_title=$network
blockchaininfo="$($bitcoincli_alias getblockchaininfo 2>/dev/null)"
if [ ${#blockchaininfo} -gt 0 ]; then
btc_title="${btc_title} (${chain}net)"
# get sync status
headers="$(echo "${blockchaininfo}" | jq -r '.headers')"
block_verified="$(echo "${blockchaininfo}" | jq -r '.blocks')"
block_diff=$(expr ${headers} - ${block_verified})
blockInfo="${block_verified}/${headers}"
progress="$(echo "${blockchaininfo}" | jq -r '.verificationprogress')"
sync_percentage=$(echo $progress | awk '{printf( "%.2f%%", 100 * $1)}')
if [ ${block_diff} -eq 0 ]; then # fully synced
sync="OK"
sync_color="${color_green}"
sync_behind=" "
elif [ ${block_diff} -eq 1 ]; then # fully synced
sync="OK"
sync_color="${color_green}"
sync_behind="-1 block"
elif [ ${block_diff} -le 10 ]; then # <= 2 blocks behind
sync=""
sync_color="${color_red}"
sync_behind="-${block_diff} blocks"
else
sync=""
sync_color="${color_red}"
sync_behind="${sync_percentage}"
fi
# get last known block
if [ ! -z "${last_block}" ]; then
btc_line2="${btc_line2} ${color_gray}(block ${last_block})"
fi
# get mem pool transactions
mempool="$($bitcoincli_alias getmempoolinfo 2>/dev/null | jq -r '.size')"
else
btc_line2="${color_red}NOT RUNNING\t\t"
fi
fi
# get IP address & port
networkInfo=$($bitcoincli_alias getnetworkinfo 2>/dev/null)
local_ip="${localip}" # from internet.sh
public_ip="${cleanip}"
public_port="$(echo ${networkInfo} | jq -r '.localaddresses [0] .port')"
if [ "${public_port}" = "null" ]; then
if [ "${chain}" = "test" ]; then
public_port="18333"
else
public_port="8333"
fi
fi
# check if RTL web interface is installed
webinterfaceInfo=""
runningRTL=$(systemctl status ${netprefix}${typeprefix}RTL.service 2>/dev/null | grep -c active)
if [ ${runningRTL} -eq 1 ]; then
if [ "${lightning}" == "cl" ]; then
RTLHTTP=${portprefix}7000
elif [ "${lightning}" == "lnd" ];then
RTLHTTP=${portprefix}3000
fi
webinterfaceInfo="Web admin --> ${color_green}http://${local_ip}:${RTLHTTP}"
fi
# CHAIN NETWORK
public_addr_pre="Public "
public_addr="??"
# Tor info string
torInfo=""
# Version
networkVersion=$($bitcoincli_alias -version 2>/dev/null | cut -d ' ' -f6)
# TOR or IP
networkConnections=$(echo ${networkInfo} | jq -r '.connections')
networkConnectionsInfo="${color_green}${networkConnections} ${color_gray}connections"
if [ "${runBehindTor}" = "on" ]; then
# TOR address
onionAddress=$(echo ${networkInfo} | jq -r '.localaddresses [0] .address')
networkConnectionsInfo="${color_green}${networkConnections} ${color_gray}peers"
public_addr="${onionAddress}:${public_port}"
public=""
public_color="${color_green}"
torInfo="+ Tor"
else
# IP address
networkConnectionsInfo="${color_green}${networkConnections} ${color_gray}connections"
public_addr="${publicIP}:${public_port}"
public_check=$(nc -z -w6 ${cleanip} ${public_port} 2>/dev/null; echo $?)
if [ $public_check = "0" ] || [ "${ipv6}" == "on" ] ; then
public=""
# only set yellow/normal because netcat can only say that the port is open - not that it points to this device for sure
public_color="${color_amber}"
else
public=""
public_color="${color_red}"
fi
# DynDomain
if [ ${#dynDomain} -gt 0 ]; then
#check if dynamic domain resolves to correct IP
ipOfDynDNS=$(getent hosts ${dynDomain} | awk '{ print $1 }')
if [ "${ipOfDynDNS}:${public_port}" != "${public_addr}" ]; then
public_color="${color_red}"
else
public_color="${color_amber}"
fi
# replace IP display with dynDN
public_addr_pre="DynDN "
public_addr="${dynDomain}"
fi
if [ ${#public_addr} -gt 25 ]; then
# if a IPv6 address dont show peers to save space
networkConnectionsInfo=""
fi
if [ ${#public_addr} -gt 35 ]; then
# if a LONG IPv6 address dont show "Public" in front to save space
public_addr_pre=""
fi
fi
# LIGHTNING NETWORK
if [ "${lightning}" == "cl" ]; then
ln_getInfo=$($lightningcli_alias getinfo 2>/dev/null)
ln_baseInfo="-"
ln_channelInfo="\n"
ln_external="\n"
ln_alias="$(sudo cat "${CLCONF}" | grep "^alias=*" | cut -f2 -d=)"
if [ ${#ln_alias} -eq 0 ];then
ln_alias=$(echo "${ln_getInfo}" | grep '"alias":' | cut -d '"' -f4)
fi
if [ ${#ln_alias} -eq 0 ];then
ln_alias=${hostname}
fi
ln_publicColor=""
ln_port=$(sudo cat "${CLCONF}" | grep "^bind-addr=*" | cut -f2 -d':')
if [ ${#ln_port} -eq 0 ]; then
ln_port=$(echo "${ln_getInfo}" | grep '"port":' | cut -d: -f2 | tail -1 | bc)
fi
wallet_unlocked=0 #TODO
if [ "$wallet_unlocked" -gt 0 ] ; then
ln_alias="Wallet Locked"
else
pubkey=$(echo "${ln_getInfo}" | grep '"id":' | cut -d '"' -f4)
address=$(echo "${ln_getInfo}" | grep '.onion' | cut -d '"' -f4)
if [ ${#address} -eq 0 ];then
address=$(echo "${ln_getInfo}" | grep '"ipv4"' -A 1 | tail -1 | cut -d '"' -f4)
fi
ln_external="${pubkey}@${address}:${ln_port}"
ln_tor=$(echo "${ln_external}" | grep -c ".onion")
if [ ${ln_tor} -eq 1 ]; then
ln_publicColor="${color_green}"
else
public_check=$(nc -z -w6 ${public_ip} ${ln_port} 2>/dev/null; echo $?)
if [ $public_check = "0" ] || [ "${ipv6}" == "on" ]; then
# only set yellow/normal because netcat can only say that the port is open - not that it points to this device for sure
ln_publicColor="${color_amber}"
else
ln_publicColor="${color_red}"
fi
#######################
# BITCOIN INFO
# get block data - use meta on cache to call dynamic variable name
source <(/home/admin/_cache.sh meta btc_${chain}net_blocks_headers)
btc_blocks_headers="${value}"
source <(/home/admin/_cache.sh meta btc_${chain}net_blocks_verified)
btc_blocks_verified="${value}"
source <(/home/admin/_cache.sh meta btc_${chain}net_blocks_behind)
btc_blocks_behind="${value}"
source <(/home/admin/_cache.sh meta btc_${chain}net_sync_percentage)
if [ "${value}" != "" ]; then
sync_percentage="${value}%"
fi
# construct blockinfo string
if [ "${btc_blocks_behind}" == "" ]; then
sync="WAIT"
sync_color="${color_yellow}"
elif [ ${btc_blocks_behind} -lt 2 ]; then
sync="OK"
sync_color="${color_green}"
else
sync=""
sync_color="${color_red}"
fi
blockInfo="Blocks ${btc_blocks_verified}/${btc_blocks_headers} ${color_gray}Sync ${sync_color}${sync}"
if [ "${btc_blocks_headers}" == "" ]; then
blockInfo="${color_red}Not Started | Not Ready Yet | No Data${color_gray}"
fi
# get address data - use meta on cache to call dynamic variable name
source <(/home/admin/_cache.sh meta btc_${chain}net_version)
networkVersion="${value} "
source <(/home/admin/_cache.sh meta btc_${chain}net_peers)
btc_peers=${value}
if [ "${btc_peers}" == "" ]; then
networkConnectionsInfo=""
elif [ ${btc_peers} -gt 0 ]; then
networkConnectionsInfo="${color_green}${btc_peers} ${color_gray}peers"
else
networkConnectionsInfo="${color_red}${btc_peers} ${color_gray}peers"
fi
#######################
# LIGHTNING INFO
# default values
ln_alias=${hostname}
ln_baseInfo="-"
ln_channelInfo="\n"
ln_external="\n"
ln_feeReport=""
ln_peersInfo=""
ln_version=""
ln_publicColor="${color_green}"
if [ "${lightning}" != "" ]; then
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_version)
ln_version="${value}"
# get alias
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_alias)
if [ "${value}" != "" ]; then
ln_alias="${value}"
fi
BLOCKHEIGHT=$(echo "$blockchaininfo"|grep blocks|awk '{print $2}'|cut -d, -f1)
CLHEIGHT=$(echo "${ln_getInfo}" | jq .blockheight)
if [ "$BLOCKHEIGHT" == "$CLHEIGHT" ];then
ln_sync=1
else
ln_sync=0
# consider tor address green for public
# when not Tor use yellow because not sure if public
if [ "${runBehindTor}" != "on" ]; then
ln_publicColor="${color_yellow}"
fi
ln_version=$($lightningcli_alias -V)
if [ ${ln_sync} -eq 0 ]; then
if [ ${#ln_getInfo} -eq 0 ]; then
ln_baseInfo="${color_red} Not Started | Not Ready Yet"
else
ln_baseInfo="
${color_amber}Scanning blocks: ${CLHEIGHT}/${BLOCKHEIGHT}"
fi
else
ln_walletbalance=0
cl_listfunds=$($lightningcli_alias listfunds 2>/dev/null)
for i in $(echo "$cl_listfunds" \
|jq .outputs[]|jq 'select(.status=="confirmed")'|grep value|awk '{print $2}'|cut -d, -f1);do
ln_walletbalance=$((ln_walletbalance+i))
done
for i in $(echo "$cl_listfunds" \
|jq .outputs[]|jq 'select(.status=="unconfirmed")'|grep value|awk '{print $2}'|cut -d, -f1);do
ln_walletbalance_wait=$((ln_walletbalance_wait+i))
done
# ln_closedchannelbalance: "state": "ONCHAIN" funds in channels
for i in $(echo "$cl_listfunds" \
|jq .channels[]|jq 'select(.state=="ONCHAIN")'|grep channel_sat|awk '{print $2}'|cut -d, -f1);do
ln_closedchannelbalance=$((ln_closedchannelbalance+i))
done
# ln_pendingonchain: waiting onchain + waiting closed channel funds
ln_pendingonchain=$((ln_walletbalance_wait+ln_closedchannelbalance))
if [ "${ln_pendingonchain}" = "0" ]; then ln_pendingonchain=""; fi
if [ ${#ln_pendingonchain} -gt 0 ]; then ln_pendingonchain="(+${ln_pendingonchain})"; fi
# ln_channelbalance: "state": "CHANNELD_NORMAL" funds in channels
for i in $(echo "$cl_listfunds" \
|jq .channels[]|jq 'select(.state=="CHANNELD_NORMAL")'|grep channel_sat|awk '{print $2}'|cut -d, -f1);do
ln_channelbalance=$((ln_channelbalance+i))
done
if [ ${#ln_channelbalance} -eq 0 ];then
ln_channelbalance=0
fi
# ln_channelbalance_all: all funds in channels
for i in $(echo "$cl_listfunds" \
|jq .channels[]|grep channel_sat|awk '{print $2}'|cut -d, -f1);do
ln_channelbalance_all=$((ln_channelbalance_all+i))
done
ln_channelbalance_pending=$((ln_channelbalance_all-ln_channelbalance-ln_closedchannelbalance))
if [ "${ln_channelbalance_pending}" = "0" ]; then ln_channelbalance_pending=""; fi
if [ ${#ln_channelbalance_pending} -gt 0 ]; then ln_channelbalance_pending=" (+${ln_channelbalance_pending})"; fi
# - **num_peers** (u32): The total count of peers, connected or with channels
# - **num_pending_channels** (u32): The total count of channels being opened
# - **num_active_channels** (u32): The total count of channels in normal state
# - **num_inactive_channels** (u32): The total count of channels waiting for opening or closing
ln_channels_online="$(echo "${ln_getInfo}" | jq -r '.num_active_channels')" 2>/dev/null
cl_num_pending_channels="$(echo "${ln_getInfo}" | jq -r '.num_pending_channels')" 2>/dev/null
cl_num_inactive_channels="$(echo "${ln_getInfo}" | jq -r '.num_inactive_channels')" 2>/dev/null
ln_channels_total=$((ln_channels_online+cl_num_pending_channels+cl_num_inactive_channels))
ln_baseInfo="${color_gray}Wallet ${ln_walletbalance} ${netprefix}sat ${ln_pendingonchain}"
ln_peers="$(echo "${ln_getInfo}" | jq -r '.num_peers')" 2>/dev/null
ln_channelInfo="${ln_channels_online}/${ln_channels_total} Channels ${ln_channelbalance} ${netprefix}sat${ln_channelbalance_pending}"
ln_peersInfo="${color_green}${ln_peers} ${color_gray}peers"
# - **fees_collected_msat** (msat): Total routing fees collected by this node
#ln_dailyfees="$($lncli_alias feereport | jq -r '.day_fee_sum')" 2>/dev/null
#ln_weeklyfees="$($lncli_alias feereport | jq -r '.week_fee_sum')" 2>/dev/null
#ln_monthlyfees="$($lncli_alias feereport | jq -r '.month_fee_sum')" 2>/dev/null
#ln_feeReport="Fee Report (D-W-M): ${color_green}${ln_dailyfees}-${ln_weeklyfees}-${ln_monthlyfees} ${color_gray}sat"
ln_feeReport="Fees collected: $(echo "${ln_getInfo}" | jq -r '.fees_collected_msat')"
fi
fi
elif [ "${lightning}" == "lnd" ];then
ln_baseInfo="-"
ln_channelInfo="\n"
ln_external="\n"
ln_alias="$(sudo cat /mnt/hdd/lnd/${netprefix}lnd.conf | grep "^alias=*" | cut -f2 -d=)"
if [ ${#ln_alias} -eq 0 ];then
ln_alias=${hostname}
fi
ln_publicColor=""
ln_port=$(sudo cat /mnt/hdd/lnd/${netprefix}lnd.conf | grep "^listen=*" | cut -f2 -d':')
if [ ${#ln_port} -eq 0 ]; then
ln_port="9735"
fi
wallet_unlocked=$(sudo tail -n 1 /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log 2> /dev/null | grep -c unlock)
if [ "$wallet_unlocked" -gt 0 ] ; then
ln_alias="Wallet Locked"
else
ln_getInfo=$($lncli_alias --macaroonpath=${lnd_macaroon_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert getinfo 2>/dev/null)
ln_external=$(echo "${ln_getInfo}" | grep "uris" -A 1 | tr -d '\n' | cut -d '"' -f4)
ln_tor=$(echo "${ln_external}" | grep -c ".onion")
if [ ${ln_tor} -eq 1 ]; then
ln_publicColor="${color_green}"
else
public_check=$(nc -z -w6 ${public_ip} ${ln_port} 2>/dev/null; echo $?)
if [ $public_check = "0" ] || [ "${ipv6}" == "on" ]; then
# only set yellow/normal because netcat can only say that the port is open - not that it points to this device for sure
ln_publicColor="${color_amber}"
else
ln_publicColor="${color_red}"
fi
# get the public address/URI
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_address)
ln_external="${value}"
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_peers)
if [ "${value}" != "" ]; then
ln_peersInfo="${color_green}${value} ${color_gray}peers"
fi
ln_sync=$(echo "${ln_getInfo}" | grep "synced_to_chain" | grep "true" -c)
ln_version=$(echo "${ln_getInfo}" | jq -r '.version' | cut -d' ' -f1)
if [ ${ln_sync} -eq 0 ]; then
if [ ${#ln_getInfo} -eq 0 ]; then
ln_baseInfo="${color_red} Not Started | Not Ready Yet"
else
ln_baseInfo="${color_amber} Waiting for Chain Sync"
fi
else
lnd_walletbalance=$($lncli_alias --macaroonpath=${lnd_macaroon_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert walletbalance 2>/dev/null)
ln_walletbalance="$(echo "$lnd_walletbalance" | jq -r '.confirmed_balance')" 2>/dev/null
ln_walletbalance_wait="$(echo "$lnd_walletbalance" | jq -r '.unconfirmed_balance')" 2>/dev/null
if [ "${ln_walletbalance_wait}" = "0" ]; then ln_walletbalance_wait=""; fi
if [ ${#ln_walletbalance_wait} -gt 0 ]; then ln_walletbalance_wait="(+${ln_walletbalance_wait})"; fi
lnd_channelbalance=$($lncli_alias --macaroonpath=${lnd_macaroon_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert channelbalance 2>/dev/null)
ln_channelbalance="$(echo "$lnd_channelbalance" | jq -r '.balance')" 2>/dev/null
ln_channelbalance_pending="$(echo "$lnd_channelbalance" | jq -r '.pending_open_balance')" 2>/dev/null
if [ "${ln_channelbalance_pending}" = "0" ]; then ln_channelbalance_pending=""; fi
if [ ${#ln_channelbalance_pending} -gt 0 ]; then ln_channelbalance_pending=" (+${ln_channelbalance_pending})"; fi
ln_channels_online="$(echo "${ln_getInfo}" | jq -r '.num_active_channels')" 2>/dev/null
ln_channels_total="$($lncli_alias --macaroonpath=${lnd_macaroon_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert listchannels | jq '.[] | length')" 2>/dev/null
ln_baseInfo="${color_gray}wallet ${ln_walletbalance} ${netprefix}sat ${ln_walletbalance_wait}"
ln_peers="$(echo "${ln_getInfo}" | jq -r '.num_peers')" 2>/dev/null
ln_channelInfo="${ln_channels_online}/${ln_channels_total} Channels ${ln_channelbalance} ${netprefix}sat${ln_channelbalance_pending}"
ln_peersInfo="${color_green}${ln_peers} ${color_gray}peers"
lnd_feereport=$($lncli_alias --macaroonpath=${lnd_macaroon_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert feereport 2>/dev/null)
ln_dailyfees="$(echo "$lnd_feereport" | jq -r '.day_fee_sum')" 2>/dev/null
ln_weeklyfees="$(echo "$lnd_feereport" | jq -r '.week_fee_sum')" 2>/dev/null
ln_monthlyfees="$(echo "$lnd_feereport" | jq -r '.month_fee_sum')" 2>/dev/null
ln_feeReport="Fee Report (D-W-M): ${color_green}${ln_dailyfees}-${ln_weeklyfees}-${ln_monthlyfees} ${color_gray}sat"
fi
fi
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_ready)
ln_ready="${value}"
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_sync_chain)
ln_sync="${value}"
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_locked)
ln_locked="${value}"
# lightning is still starting
if [ "${ln_ready}" != "1" ]; then
ln_baseInfo="\n ${color_red}Not Started | Not Ready Yet | No Data"
ln_peersInfo=""
# lightning is still syncing
elif [ "${ln_locked}" == "1" ]; then
ln_baseInfo="${color_amber}Wallet Locked"
ln_peersInfo=""
# lightning is still syncing
elif [ "${ln_sync}" != "1" ]; then
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_sync_progress)
ln_syncprogress="${value}"
ln_baseInfo="${color_amber}Scanning blocks: ${ln_syncprogress}"
ln_peersInfo=""
# OK lightning is ready - get more details
else
# create fee report
if [ "${lightning}" == "lnd" ]; then
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_fees_daily)
ln_dailyfees="${value}"
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_fees_weekly)
ln_weeklyfees="${value}"
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_fees_month)
ln_monthlyfees="${value}"
ln_feeReport="Fee Report (D-W-M): ${color_green}${ln_dailyfees}-${ln_weeklyfees}-${ln_monthlyfees} ${color_gray}${netprefix}sat"
else
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_fees_total)
ln_totalfees="${value}"
ln_feeReport="Fee Report: ${color_green}${ln_totalfees} ${color_gray}${netprefix}sat"
fi
# on-chain wallet info
ln_pendingonchain=""
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_wallet_onchain_pending)
ln_onchain_pending="${value}"
if [ "${ln_onchain_pending}" != "" ] && [ ${ln_onchain_pending} -gt 0 ]; then ln_pendingonchain=" (+${ln_onchain_pending})"; fi
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_wallet_onchain_balance)
ln_walletbalance="${value}"
ln_baseInfo="${color_gray}Wallet ${ln_walletbalance} ${netprefix}sat ${ln_pendingonchain}"
# channel pending info
ln_channelbalance_pending=""
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_wallet_channels_pending)
ln_channels_pending="${value}"
if [ "${ln_channels_pending}" != "" ] && [ ${ln_channels_pending} -gt 0 ]; then ln_channelbalance_pending=" (+${ln_channels_pending})"; fi
# get channel infos
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_wallet_channels_balance)
ln_channels_balance="${value}"
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_channels_active)
ln_channels_online="${value}"
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_channels_total)
ln_channels_total="${value}"
# construct channel info string
ln_channelInfo="${ln_channels_online}/${ln_channels_total} Channels ${ln_channels_balance} ${netprefix}sat${ln_channelbalance_pending}"
fi
fi
# show JoinMarket stats in place of the LND URI only if the Yield Generator is running
@ -411,28 +275,19 @@ else
lastLine="\
${color_yellow}
${color_yellow}${ln_publicColor}${ln_external}${color_gray}"
fi
fi
if [ "${lightning}" == "cl" ];then
LNline="C-LIGHTNING ${color_green}${ln_version}\n ${ln_baseInfo}"
elif [ "${lightning}" == "lnd" ];then
if [ "${lightning}" == "cl" ]; then
LNline="C-LIGHTNING ${color_green}${ln_version} ${ln_baseInfo}"
elif [ "${lightning}" == "lnd" ]; then
LNline="LND ${color_green}${ln_version} ${ln_baseInfo}"
fi
if [ $cpu = 0 ];then
templine="on $(uname -m) VM%s%s"
else
templine="temp %s°C %s°F"
fi
sleep 5
LNinfo=" + Lightning Network"
if [ "${lightning}" == "" ]; then
LNinfo=""
fi
## get uptime and current date & time
uptime=$(uptime --pretty)
datetime=$(date -R)
stty sane
@ -449,10 +304,10 @@ ${color_yellow} ,/ ${color_yellow}%s
${color_yellow} ,'/ ${color_gray}%s
${color_yellow} ,' / ${color_gray}%s, temp %s°C %s°F
${color_yellow} ,' /_____ ${color_gray}Free Mem ${color_ram}${ram} ${color_gray} HDDuse ${color_hdd}%s${color_gray}
${color_yellow},'_____ ,' ${color_gray}SSH admin@${color_green}${local_ip}${color_gray} d${network_rx} u${network_tx}
${color_yellow} / ,' ${color_gray}${webinterfaceInfo}
${color_yellow} / ,' ${color_gray}${network} ${color_green}${networkVersion} ${color_gray}${chain}net ${networkConnectionsInfo}
${color_yellow} /,' ${color_gray}Blocks ${blockInfo} ${color_gray}Sync ${sync_color}${sync} %s
${color_yellow},'_____ ,' ${color_gray}SSH admin@${color_green}${internet_localip}${color_gray} d${internet_rx} u${internet_tx}
${color_yellow} / ,' ${color_gray}
${color_yellow} / ,' ${color_gray}${network} ${color_green}${networkVersion}${color_gray}${chain}net ${networkConnectionsInfo}
${color_yellow} /,' ${color_gray}${blockInfo} %s
${color_yellow} /' ${color_gray}
${color_yellow} ${color_gray}${LNline}
${color_yellow} ${color_gray}${ln_channelInfo} ${ln_peersInfo}
@ -462,8 +317,8 @@ $lastLine
"RaspiBlitz v${codeVersion}" \
"-------------------------------------------" \
"Refreshed: ${datetime}" \
"CPU load${load##up*, }" "${tempC}" "${tempF}" \
"${hdd}" "${sync_percentage}"
"CPU load${system_cpu_load##up*, }" "${system_temp_celsius}" "${system_temp_fahrenheit}" \
"${hdd_used_info}" "${sync_percentage}"
if [ ${#undervoltageReports} -gt 0 ] && [ "${undervoltageReports}" != "0" ]; then
echo "${undervoltageReports} undervoltage reports - run 'Hardware Test' in menu"
@ -500,4 +355,3 @@ else
fi
# EOF

View File

@ -86,6 +86,8 @@ while :
# get config info if already available (with state value)
source ${infoFile}
source <(/home/admin/_cache.sh get state message)
configExists=$(ls ${configFile} 2>/dev/null | grep -c '.conf')
if [ ${configExists} -eq 1 ]; then
source ${configFile}
@ -101,18 +103,24 @@ while :
fi
# TODO: ALSO SEPARATE GUI/ACTION FOR THE SCANNING / WALLET UNLOCK / ERROR DETECTION
# if lightning is syncing or scanning
source <(sudo /home/admin/config.scripts/blitz.statusscan.sh $lightning)
if [ "${walletLocked}" == "1" ] || [ "${CLwalletLocked}" == "1" ]; then
source <(/home/admin/_cache.sh get \
lightning \
ln_default_locked \
btc_default_synced \
btc_default_sync_initialblockdownload \
btc_default_blocks_behind \
)
if [ "${lightning}" != "" ] && [ "${lightning}" != "none" ] && [ "${ln_default_locked}" == "1" ]; then
/home/admin/setup.scripts/eventInfoWait.sh "walletlocked" "" lcd
sleep 3
continue
fi
if [ "${syncedToChain}" != "1" ]; then
if [ "${btc_default_synced}" != "1" ]; then
/home/admin/setup.scripts/eventBlockchainSync.sh lcd
sleep 10
sleep 3
continue
fi

View File

@ -2,15 +2,9 @@
echo "Starting the main menu ..."
# CONFIGFILE - configuration of RaspiBlitz
configFile="/mnt/hdd/raspiblitz.conf"
# INFOFILE - state data from bootstrap
infoFile="/home/admin/raspiblitz.info"
# MAIN MENU AFTER SETUP
source ${infoFile}
source ${configFile}
source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf
# FUNCTIONS
@ -38,7 +32,7 @@ confirmation()
}
# get the local network IP to be displayed on the LCD
source <(/home/admin/config.scripts/internet.sh status local)
source <(/home/admin/_cache.sh get internet_localip)
if [ ${chain} = test ];then
netprefix="t"
@ -64,7 +58,7 @@ fi
if [ ${#lightning} -gt 0 ]; then
plus="/ ${lightning} ${plus}"
fi
BACKTITLE="${localip} / ${hostname} / ${network} ${plus}"
BACKTITLE="${internet_localip} / ${hostname} / ${network} ${plus}"
# Basic Options
OPTIONS+=(INFO "RaspiBlitz Status Screen")

View File

@ -6,9 +6,6 @@
source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf
# get the local network IP to be displayed on the LCD
source <(/home/admin/config.scripts/internet.sh status local)
# BASIC MENU INFO
WIDTH=64
BACKTITLE="RaspiBlitz"

View File

@ -8,23 +8,24 @@
echo "Starting SSH user interface ... (please wait)"
# CONFIGFILE - configuration of RaspiBlitz
configFile="/mnt/hdd/raspiblitz.conf"
source ${configFile} 2>/dev/null
source /mnt/hdd/raspiblitz.conf 2>/dev/null
# INFOFILE - state data from bootstrap
infoFile="/home/admin/raspiblitz.info"
# check if raspiblitz.info exists
systemInfoExists=$(ls ${infoFile} | grep -c "${infoFile}")
if [ "${systemInfoExists}" != "1" ]; then
echo "systemInfoExists(${systemInfoExists})"
echo "FAIL: ${infoFile} does not exist .. which it should at this point."
echo "Check logs & bootstrap.service for errors and report to devs."
exit 1
fi
# get system state information raspiblitz.info
source ${infoFile}
source <(/home/admin/_cache.sh get state message)
# only check when first pramater is "newsshsession" (calling from bash.rc)
if [ "$1" == "newsshsession" ]; then
# if already one ssh session is open - ask on the second to exit to terminal
source <(sudo /home/admin/config.scripts/blitz.ssh.sh sessions)
if [ "${ssh_session_count}" != "" ] && [ "${ssh_session_count}" != "1" ]; then
echo "####################################################################"
echo "# You already have another SSH session open ... exiting to terminal."
echo "# To open main menu type command: raspiblitz"
exit 0
fi
fi
# check that basic system phase/state information is available
if [ "${setupPhase}" == "" ] || [ "${state}" == "" ]; then
@ -74,13 +75,6 @@ if [ "${state}" = "copystation" ]; then
exit
fi
# prepare status file
# TODO: this is to be replaced and unified together with raspiblitz.info
# when we move to a background monitoring thread & redis for WebUI with v1.8
sudo touch /var/cache/raspiblitz/raspiblitz.status
sudo chown admin:admin /var/cache/raspiblitz/raspiblitz.status
sudo chmod 740 /var/cache/raspiblitz/raspiblitz.status
#####################################
# SSH MENU LOOP
# this loop runs until user exits or
@ -96,6 +90,11 @@ 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_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 ]
@ -105,56 +104,47 @@ do
# Access fresh system info on every loop
# refresh system state information
source ${infoFile}
# gather fresh status scan and store results in memory
# TODO: move this into background loop and unify with redis data storage later
#echo "# blitz.statusscan.sh"
firstStatusScanExists=$(ls /var/cache/raspiblitz/raspiblitz.status | grep -c "raspiblitz.status")
#echo "firstStatusScanExists(${firstStatusScanExists})"
if [ ${firstStatusScanExists} -eq 1 ]; then
# run statusscan with timeout - if status scan was not killed it will copy over the
timeout 15 /home/admin/config.scripts/blitz.statusscan.sh ${lightning} > /var/cache/raspiblitz/raspiblitz.status.tmp
result=$?
#echo "result(${result})"
if [ "${result}" == "0" ]; then
# statusscan finished in under 10 seconds - use results
cp /var/cache/raspiblitz/raspiblitz.status.tmp /var/cache/raspiblitz/raspiblitz.status
else
# statusscan blocked and was killed - fallback to old results
echo "statusscan blocked (${result}) - fallback to old results"
sleep 1
fi
else
# first time run statusscan without timeout
echo "# running statusscan for the first time ... can take time"
/home/admin/config.scripts/blitz.statusscan.sh ${lightning} > /var/cache/raspiblitz/raspiblitz.status
source <(/home/admin/_cache.sh get \
systemscan_runtime \
state \
setupPhase \
btc_default_synced \
ln_default_locked \
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
# load statusscan results
source /var/cache/raspiblitz/raspiblitz.status 2>/dev/null
#####################################
# ALWAYS: Handle System States
#####################################
############################
# LND Wallet Unlock
# Wallet Unlock
if [ "${lndActive}" == "1" ] && [ "${walletLocked}" == "1" ] && [ "${state}" == "ready" ] && [ "${setupPhase}" == "done" ]; then
#echo "# lnd.unlock.sh"
/home/admin/config.scripts/lnd.unlock.sh
fi
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
# CL Wallet Unlock
if [ "${CLwalletLocked}" == "1" ] && [ "${state}" == "ready" ] && [ "${setupPhase}" == "done" ]; then
/home/admin/config.scripts/cl.hsmtool.sh unlock
sleep 5
fi
#####################################
@ -194,7 +184,7 @@ do
echo "***********************************************************"
if [ "${state}" == "reboot" ]; then
echo "SSH again into system with:"
echo "ssh admin@${localip}"
echo "ssh admin@${internet_localip}"
echo "Use your password A"
echo "***********************************************************"
fi
@ -203,12 +193,11 @@ do
fi
#####################################
# INITIAL BLOCKCHAIN SYNC (SUBLOOP)
# MAKE SURE BLOCKCHAIN IS SYNC
#####################################
if [ "${lightning}" == "" ]; then syncedToChain=1; fi
if [ "${setupPhase}" == "done" ] && [ "${state}" == "ready" ] && [ "${syncedToChain}" != "1" ]; then
if [ "${setupPhase}" == "done" ] && [ "${state}" == "ready" ] && [ "${btc_default_synced}" != "1" ]; then
/home/admin/setup.scripts/eventBlockchainSync.sh ssh
sleep 10
sleep 3
continue
fi
@ -219,6 +208,9 @@ do
# 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
@ -236,7 +228,7 @@ do
#echo "# DURING SETUP: Handle System State (${state})"
# when no HDD on Vagrant - just print info & exit (admin info & exit)
if [ "${state}" == "noHDD" ] && [ ${vagrant} -gt 0 ]; then
if [ "${state}" == "noHDD" ] && [ ${system_vm_vagrant} != "0" ]; then
echo "***********************************************************"
echo "VAGRANT INFO"
echo "***********************************************************"
@ -338,4 +330,4 @@ fi
echo "Blitz command line options: blitzhelp"
echo "Back to menus use command: raspiblitz"
echo
exit 0
exit 0

View File

@ -110,8 +110,8 @@ OPTIONS=()
# LCD options (only when running with LCD screen)
if [ "${displayClass}" == "lcd" ]; then
OPTIONS+=(s 'Touchscreen' ${touchscreenMenu})
OPTIONS+=(r 'LCD Rotate' ${lcdrotateMenu})
OPTIONS+=(s 'Touchscreen' ${touchscreenMenu})
OPTIONS+=(r 'LCD Rotate' ${lcdrotateMenu})
fi
# Important basic options
@ -120,24 +120,24 @@ OPTIONS+=(z 'ZeroTier' ${zerotierSwitch})
if [ ${#runBehindTor} -eq 0 ] || [ "${runBehindTor}" = "off" ]; then
OPTIONS+=(y ${dynDomainMenu} ${domainValue})
OPTIONS+=(b 'BTC UPnP (AutoNAT)' ${networkUPnP})
OPTIONS+=(b 'BTC UPnP (AutoNAT)' ${networkUPnP})
fi
OPTIONS+=(p 'Parallel Testnet/Signet' ${parallelTestnets})
# LND & options (only when running LND)
OPTIONS+=(m 'LND LIGHTNING LABS NODE' ${lndNode})
OPTIONS+=(m 'LND LIGHTNING LABS NODE' ${lndNode})
if [ "${lndNode}" == "on" ]; then
OPTIONS+=(a '-LND Channel Autopilot' ${autoPilot})
OPTIONS+=(k '-LND Accept Keysend' ${keysend})
OPTIONS+=(c '-LND Circuitbreaker (firewall)' ${circuitbreaker})
OPTIONS+=(u '-LND Auto-Unlock' ${autoUnlock})
OPTIONS+=(a '-LND Channel Autopilot' ${autoPilot})
OPTIONS+=(k '-LND Accept Keysend' ${keysend})
OPTIONS+=(c '-LND Circuitbreaker (firewall)' ${circuitbreaker})
OPTIONS+=(u '-LND Auto-Unlock' ${autoUnlock})
OPTIONS+=(x '-LND StaticChannelBackup on Nextcloud' ${NextcloudBackup})
OPTIONS+=(e '-LND StaticChannelBackup USB Drive' ${LocalBackup})
OPTIONS+=(l '-LND UPnP (AutoNAT)' ${autoNatDiscovery})
fi
# C-Lightning & options/PlugIns
OPTIONS+=(n 'CL C-LIGHTNING NODE' ${clNode})
OPTIONS+=(n 'CL C-LIGHTNING NODE' ${clNode})
if [ "${clNode}" == "on" ]; then
OPTIONS+=(o '-CL CLBOSS Automatic Node Manager' ${clbossMenu})
OPTIONS+=(h '-CL Wallet Encryption' ${clEncryptedHSMMenu})
@ -254,7 +254,7 @@ Please keep in mind that thru your LND node id & your previous IP history with y
# change Tor
anychange=1
sudo /home/admin/config.scripts/internet.tor.sh ${choice}
sudo /home/admin/config.scripts/tor.network.sh ${choice}
needsReboot=1
else
@ -272,7 +272,7 @@ if [ "${autoUnlock}" != "${choice}" ] && [ "${lndNode}" == "on" ]; then
l1="AUTO-UNLOCK IS NOW OFF"
if [ "${choice}" = "on" ]; then
l1="AUTO-UNLOCK IS NOW ACTIVE"
fi
fi
dialog --title 'OK' --msgbox "\n${l1}\n" 9 50
needsReboot=1
fi
@ -378,7 +378,7 @@ if [ "${zerotierSwitch}" != "${choice}" ]; then
else
dialog --msgbox "ZeroTier is now OFF." 5 46
fi
else
echo "ZeroTier setting unchanged."
fi
@ -496,9 +496,9 @@ if [ "${testnet}" != "${choice}" ] || \
if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then
/home/admin/config.scripts/cl.install.sh on testnet
/home/admin/config.scripts/cl.install.sh on signet
fi
fi
else
# just turn al lightning testnets off (even if not on before)
# just turn all lightning testnets off (even if not on before)
/home/admin/config.scripts/lnd.install.sh off testnet
/home/admin/config.scripts/lnd.install.sh off signet
/home/admin/config.scripts/cl.install.sh off testnet

View File

@ -130,7 +130,7 @@ case $CHOICE in
# make sure host is named like in the raspiblitz config
echo "Setting the Name/Alias/Hostname .."
sudo /home/admin/config.scripts/lnd.setname.sh mainnet ${result}
sudo sed -i "s/^hostname=.*/hostname=${result}/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set hostname "${result}"
echo "stopping lnd ..."
sudo systemctl stop lnd

View File

@ -7,9 +7,6 @@ source /mnt/hdd/raspiblitz.conf
source <(/home/admin/config.scripts/network.aliases.sh getvars cl $1)
# get the local network IP to be displayed on the LCD
source <(/home/admin/config.scripts/internet.sh status local)
# BASIC MENU INFO
WIDTH=64
BACKTITLE="RaspiBlitz"
@ -108,7 +105,7 @@ case $CHOICE in
clear
echo
# setting value in the raspiblitz.conf
sudo sed -i "s/^lightning=.*/lightning=cl/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set lightning "cl"
echo "# OK - lightning=cl is set in /mnt/hdd/raspiblitz.conf"
echo
echo "Press ENTER to return to main menu."

View File

@ -7,8 +7,6 @@ source /mnt/hdd/raspiblitz.conf
source <(/home/admin/config.scripts/network.aliases.sh getvars cl $1)
# get the local network IP to be displayed on the LCD
source <(/home/admin/config.scripts/internet.sh status local)
NETclEncryptedHSM="${netprefix}clEncryptedHSM"
# BASIC MENU INFO
@ -100,12 +98,8 @@ case $CHOICE in
sudo rm /home/bitcoin/.lightning/${CLNETWORK}/hsm_secret
sudo rm /home/bitcoin/.lightning/${CLNETWORK}/*.*
# make sure the new hsm_secret is treated as unencrypted and clear autounlock
sudo sed -i \
"s/^${netprefix}clEncryptedHSM=.*/${netprefix}clEncryptedHSM=off/g" \
/mnt/hdd/raspiblitz.conf
sudo sed -i \
"s/^${netprefix}clAutoUnlock=.*/${netprefix}clEncryptedHSM=off/g" \
/mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}clEncryptedHSM "off"
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}clAutoUnlock "off"
# new
/home/admin/config.scripts/cl.hsmtool.sh new $CHAIN
# set the lightningd service file on each active network

View File

@ -5,8 +5,9 @@ echo "get raspiblitz config"
source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf
# get the local network IP to be displayed on the LCD
source <(/home/admin/config.scripts/internet.sh status local)
source <(/home/admin/_cache.sh get internet_localip internet_localiprange)
localIP="${internet_localip}"
localIPrange="${internet_localiprange}"
# BASIC MENU INFO
WIDTH=64
@ -163,10 +164,6 @@ HiddenServicePort 8333 127.0.0.1:8333" | sudo tee -a /etc/tor/torrc
fi
echo "# Running on ${chain}net"
echo
localIPrange=$(ip addr | grep 'state UP' -A2 | grep -E -v 'docker0|veth' |\
grep 'eth0\|wlan0\|enp0\|inet' | tail -n1 | awk '{print $2}' |\
awk -F. '{print $1"."$2"."$3".0/24"}')
localIP=$(hostname -I | awk '{print $1}')
allowIPrange=$(grep -c "rpcallowip=$localIPrange" < /mnt/hdd/${network}/${network}.conf)
bindIP=$(grep -c "${chain}.rpcbind=$localIP" < /mnt/hdd/${network}/${network}.conf)
rpcTorService=$(grep -c "HiddenServicePort ${BITCOINRPCPORT} 127.0.0.1:${BITCOINRPCPORT}" < /etc/tor/torrc)
@ -226,10 +223,10 @@ HiddenServicePort 8333 127.0.0.1:8333" | sudo tee -a /etc/tor/torrc
case $CHOICE in
ADDRPCLAN)
clear
clear
echo "# Make sure the bitcoind wallet is on"
/home/admin/config.scripts/network.wallet.sh on
restartCore=0
if [ $allowIPrange -eq 0 ]; then
echo "rpcallowip=$localIPrange" | sudo tee -a /mnt/hdd/${network}/${network}.conf
@ -254,7 +251,7 @@ HiddenServicePort 8333 127.0.0.1:8333" | sudo tee -a /etc/tor/torrc
clear
echo "# Make sure the bitcoind wallet is on"
/home/admin/config.scripts/network.wallet.sh on
/home/admin/config.scripts/internet.hiddenservice.sh bitcoin${BITCOINRPCPORT} ${BITCOINRPCPORT} ${BITCOINRPCPORT}
/home/admin/config.scripts/tor.onion-service.sh bitcoin${BITCOINRPCPORT} ${BITCOINRPCPORT} ${BITCOINRPCPORT}
echo
echo "The address of the local node is: $TorRPCaddress"
echo
@ -267,7 +264,7 @@ HiddenServicePort 8333 127.0.0.1:8333" | sudo tee -a /etc/tor/torrc
CREDENTIALS)
clear
showRPCcredentials
echo
echo
echo "Press ENTER to return to the menu."
read key
;;
@ -275,7 +272,7 @@ HiddenServicePort 8333 127.0.0.1:8333" | sudo tee -a /etc/tor/torrc
# remove old entry
sudo sed -i "/# Hidden Service for BITCOIN RPC (mainnet, testnet, signet)/,/^\s*$/{d}" /etc/tor/torrc
# remove Hidden Service
/home/admin/config.scripts/internet.hiddenservice.sh off bitcoin${BITCOINRPCPORT}
/home/admin/config.scripts/tor.onion-service.sh off bitcoin${BITCOINRPCPORT}
sudo ufw deny from $localIPrange to any port ${BITCOINRPCPORT}
restartCore=0
if [ $allowIPrange -gt 0 ]; then

View File

@ -5,9 +5,6 @@ echo "get raspiblitz config"
source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf
# get the local network IP to be displayed on the LCD
source <(/home/admin/config.scripts/internet.sh status local)
source <(/home/admin/config.scripts/network.aliases.sh getvars lnd $1)
# make sure lnd wallet is unlocked
@ -136,7 +133,7 @@ case $CHOICE in
clear
echo
# setting value in raspi blitz config
sudo sed -i "s/^lightning=.*/lightning=lnd/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set lightning "lnd"
echo "# OK - lightning=lnd is set in /mnt/hdd/raspiblitz.conf"
echo
echo "Press ENTER to return to main menu."

View File

@ -14,7 +14,7 @@ release()
- Download the new SD card image to your laptop:
https://github.com/rootzoll/raspiblitz
- Flash that SD card image to a new SD card (best)
or override old SD card after shutdown (fallback)
or override old SD card after shutdown (fallback)
- Choose 'Start Update' below.
No need to close channels or download blockchain again.
@ -100,9 +100,9 @@ patchNotice()
It means it will sync the program code with the
GitHub repo for your version branch v${codeVersion}.
This can be useful if there are important updates
This can be useful if there are important updates
in between releases to fix severe bugs. It can also
be used to sync your own code with your RaspiBlitz
be used to sync your own code with your RaspiBlitz
if you are developing on your own GitHub Repo.
BUT BEWARE: This means RaspiBlitz will contact GitHub,
@ -268,7 +268,7 @@ grab the latest LND release published on the LND GitHub page (also release candi
There will be no security checks on signature, etc.
This update mode is only recommended for testing and
development nodes with no serious funding.
development nodes with no serious funding.
Do you really want to update LND now?
" 16 58
@ -337,7 +337,7 @@ grab the latest C-lightning release published on the C-lightning GitHub page (al
There will be no security checks on signature, etc.
This update mode is only recommended for testing and
development nodes with no serious funding.
development nodes with no serious funding.
Do you really want to update C-lightning now?
" 16 58
@ -404,9 +404,8 @@ Do you really want to update Bitcoin Core now?
source <(sudo -u admin /home/admin/config.scripts/bitcoin.update.sh tested)
if [ ${#error} -gt 0 ]; then
whiptail --title "ERROR" --msgbox "${error}" 8 30
else
sleep 8
fi
/home/admin/config.scripts/blitz.shutdown.sh reboot
;;
RECKLESS)
whiptail --title "UNTESTED Bitcoin Core update to ${bitcoinLatestVersion}" --yes-button "Cancel" \
@ -426,12 +425,12 @@ Do you really want to update Bitcoin Core now?
source <(sudo -u admin /home/admin/config.scripts/bitcoin.update.sh reckless)
if [ ${#error} -gt 0 ]; then
whiptail --title "ERROR" --msgbox "${error}" 8 30
else
sleep 8
fi
/home/admin/config.scripts/blitz.shutdown.sh reboot
;;
CUSTOM)
sudo -u admin /home/admin/config.scripts/bitcoin.update.sh custom
/home/admin/config.scripts/blitz.shutdown.sh reboot
;;
esac
}
@ -490,7 +489,7 @@ if [ "${runBehindTor}" == "on" ]; then
fi
CHOICE_HEIGHT=$(("${#OPTIONS[@]}/2+1"))
HEIGHT=$((CHOICE_HEIGHT+6))
HEIGHT=$((CHOICE_HEIGHT+6))
CHOICE=$(dialog --clear \
--backtitle "" \
--title " Update Options " \
@ -536,9 +535,9 @@ case $CHOICE in
/home/admin/config.scripts/bonus.pyblock.sh update
;;
TOR)
sudo /home/admin/config.scripts/internet.tor.sh update
sudo /home/admin/config.scripts/tor.network.sh update
;;
MEMPOOL)
/home/admin/config.scripts/bonus.mempool.sh update
/home/admin/config.scripts/bonus.mempool.sh update
;;
esac

View File

@ -90,6 +90,10 @@ echo "******************************"
echo "Sweep all possible Funds"
echo "******************************"
# raise high focus on onchain wallet balance & pending for the next 15min
/home/admin/_cache.sh focus ln_${LNTYPE}_${$chain}net_wallet_onchain_pending 0 900
/home/admin/_cache.sh focus ln_${LNTYPE}_${$chain}net_wallet_onchain_balance 0 900
# execute command
if [ ${LNTYPE} = "cl" ];then
# withdraw destination satoshi [feerate] [minconf] [utxos]

View File

@ -67,6 +67,11 @@ else
echo "# OK - the chain is synced"
fi
# raise high focus on lightning channels next 1 hour
/home/admin/_cache.sh focus ln_${LNTYPE}_${$CHAIN}_channels_active 0 3600
/home/admin/_cache.sh focus ln_${LNTYPE}_${$CHAIN}_channels_inactive 0 3600
/home/admin/_cache.sh focus ln_${LNTYPE}_${$CHAIN}_channels_total 0 3600
echo "#####################################"
echo "# Closing All Channels (EXPERIMENTAL)"
echo "#####################################"

View File

@ -16,6 +16,9 @@ fi
source <(/home/admin/config.scripts/network.aliases.sh getvars $1 $2)
# raise high focus on lightning peers next 5min
/home/admin/_cache.sh focus ln_${LNTYPE}_${$CHAIN}_peers 0 300
# let user enter a <pubkey>@host
l1="Enter the node pubkey address with host information:"
l2="example -----> 024ddf33[...]1f5f9f3@91.65.1.38:9735"

View File

@ -17,7 +17,6 @@ if [ ${#chain} -eq 0 ]; then
fi
source <(/home/admin/config.scripts/network.aliases.sh getvars $1 $2)
source <(/home/admin/config.scripts/network.aliases.sh getvars $LNTYPE ${chain}net)
# check if chain is in sync
@ -127,6 +126,9 @@ else
sudo apt-get install qrencode -y > /dev/null
fi
# raise high focus on lightning channel balance next 5min
/home/admin/_cache.sh focus ln_${LNTYPE}_${$CHAIN}_channels_balance 0 300
echo
echo "********************"
echo "Here is your invoice"

View File

@ -81,6 +81,10 @@ fi
echo "generating QR code ... please wait"
/home/admin/config.scripts/blitz.display.sh qr "$network:${address}"
# raise high focus on onchain wallet balance & pending for the next 15min
/home/admin/_cache.sh focus ln_${LNTYPE}_${$chain}net_wallet_onchain_pending 0 900
/home/admin/_cache.sh focus ln_${LNTYPE}_${$chain}net_wallet_onchain_balance 0 900
# dialog with instructions while QR code is shown on LCD
whiptail --backtitle "Fund your onchain wallet" \
--title "Send ${coininfo}" \

View File

@ -79,6 +79,11 @@ if [ ${numConnectedPeers} -eq 0 ]; then
exit 0
fi
# raise high focus on lightning channels next 1 hour
/home/admin/_cache.sh focus ln_${LNTYPE}_${$CHAIN}_channels_pending 0 3600
/home/admin/_cache.sh focus ln_${LNTYPE}_${$CHAIN}_channels_total 0 3600
/home/admin/_cache.sh focus ln_${LNTYPE}_${$CHAIN}_channels_active 0 3600
# let user pick a peer to open a channels with
OPTIONS=()
if [ $LNTYPE = cl ];then

View File

@ -104,6 +104,9 @@ elif [ $LNTYPE = lnd ];then
command="$lncli_alias sendpayment --force --pay_req=${invoice}"
fi
# raise high focus on lightning channel balance next 5min
/home/admin/_cache.sh focus ln_${LNTYPE}_${$CHAIN}_channels_balance 0 300
# info output
clear
echo "************************************************************"

938
home.admin/_background.scan.sh Executable file
View File

@ -0,0 +1,938 @@
#!/bin/bash
# This script will loop in the background to gather basic system information.
# It will place those values in the `_cache.sh` system and take care about updates.
# You can use `_cache.sh focus` to make the scanning of a certain value more often.
# LOGS see: sudo journalctl -f -u background.scan
# start with parameter "only-one-loop" (use for testing)
ONLY_ONE_LOOP="0"
if [ "$1" == "only-one-loop" ]; then
ONLY_ONE_LOOP="1"
fi
# start with parameter "install" (to setup service as systemd background running)
if [ "$1" == "install" ]; then
# write systemd service
cat > /etc/systemd/system/background.scan.service <<EOF
# Monitor the RaspiBlitz State
# /etc/systemd/system/background.scan.service
[Unit]
Description=RaspiBlitz Background Monitoring Service
Wants=redis.service
After=redis.service
[Service]
User=root
Group=root
Type=simple
ExecStart=/home/admin/_background.scan.sh
Restart=always
TimeoutSec=10
RestartSec=10
StandardOutput=journal
[Install]
WantedBy=multi-user.target
EOF
# enable systemd service & exit
sudo systemctl enable background.scan
echo "# background.scan.service will start after reboot or calling: sudo systemctl start background.scan"
exit
fi
# check user running
if [ "$EUID" -ne 0 ]; then
echo "FAIL: need to be run as root user"
exit 1
fi
# CONFIGFILE - configuration of RaspiBlitz
configFile="/mnt/hdd/raspiblitz.conf"
# INFOFILE - persited state data
infoFile="/home/admin/raspiblitz.info"
# better readbale seconds (slightly off to reduce same time window trigger)
MINUTE=60
MINUTE2=115
MINUTE5=290
MINUTE10=585
HOURQUATER=880
HOURHALF=1775
HOUR=3570
DAYHALF=43165
DAY=86360
WEEK=604800
MONTH=2592000
YEAR=31536000
####################################################################
# INIT
####################################################################
# init values
/home/admin/_cache.sh set system_temp_celsius "0"
/home/admin/_cache.sh set system_temp_fahrenheit "0"
/home/admin/_cache.sh set system_count_longscan "0"
/home/admin/_cache.sh set system_count_undervoltage "0"
/home/admin/_cache.sh set system_count_start_blockchain "0"
/home/admin/_cache.sh set system_count_start_lightning "0"
/home/admin/_cache.sh set system_count_start_tui "0"
# import all base values from raspiblitz.info
echo "importing: ${infoFile}"
/home/admin/_cache.sh import $infoFile
# import all base values from raspiblitz.config (if exists)
configFileExists=$(ls ${configFile} | grep -c "${configFile}")
if [ "${configFileExists}" != "0" ]; then
echo "importing: ${configFile}"
/home/admin/_cache.sh import ${configFile}
fi
# version info
echo "importing: _version.info"
/home/admin/_cache.sh import /home/admin/_version.info
# basic hardware info (will not change)
source <(/home/admin/_cache.sh valid \
system_board \
system_ram_mb \
system_ram_gb \
)
if [ "${stillvalid}" == "0" ]; then
source <(/home/admin/config.scripts/blitz.hardware.sh status)
/home/admin/_cache.sh set system_board "${board}"
/home/admin/_cache.sh set system_ram_mb "${ramMB}"
/home/admin/_cache.sh set system_ram_gb "${ramGB}"
fi
# VM detect vagrant
source <(/home/admin/_cache.sh valid system_vm_vagrant)
if [ "${stillvalid}" == "0" ]; then
vagrant=$(df | grep -c "/vagrant")
/home/admin/_cache.sh set system_vm_vagrant "${vagrant}"
fi
# flag that init was done (will be checked on each loop)
/home/admin/_cache.sh set system_init_time "$(date +%s)"
while [ 1 ]
do
####################################################################
# LOOP DATA (BASIC SYSTEM)
# data that is always available
####################################################################
# check that redis contains init data (detect possible restart of redis)
source <(/home/admin/_cache.sh get system_init_time)
if [ "${system_init_time}" == "" ]; then
echo "FAIL: CACHE IS MISSING INIT DATA ... exiting to let systemd restart"
exit 1
fi
# measure time of loop scan
startTime=$(date +%s)
#################
# BASIC SYSTEM
# uptime just do on every run
system_up=$(cat /proc/uptime | grep -o '^[0-9]\+')
/home/admin/_cache.sh set system_up "${system_up}"
# cpu load
cpu_load=$(w | head -n 1 | cut -d 'v' -f2 | cut -d ':' -f2)
/home/admin/_cache.sh set system_cpu_load "${cpu_load}"
# cpu temp - no measurement in a VM
if [ -d "/sys/class/thermal/thermal_zone0/" ]; then
cpu=$(cat /sys/class/thermal/thermal_zone0/temp)
tempC=$((cpu/1000))
tempF=$(((tempC * 18 + 325) / 10))
/home/admin/_cache.sh set system_temp_celsius "${tempC}"
/home/admin/_cache.sh set system_temp_fahrenheit "${tempF}"
fi
# ram
ram=$(free -m | grep Mem | awk '{ print $2 }')
ram_avail=$(free -m | grep Mem | awk '{ print $7 }')
/home/admin/_cache.sh set system_ram_mb "${ram}"
/home/admin/_cache.sh set system_ram_available_mb "${ram_avail}"
# undervoltage
source <(/home/admin/_cache.sh valid system_count_undervoltage)
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${MINUTE} ]; then
echo "updating: undervoltage"
countReports=$(cat /var/log/syslog | grep -c "Under-voltage detected!")
/home/admin/_cache.sh set system_count_undervoltage "${countReports}"
fi
#################
# TOR
source <(/home/admin/_cache.sh valid tor_web_addr)
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${MINUTE5} ]; then
echo "updating: tor"
/home/admin/_cache.sh set tor_web_addr "$(cat /mnt/hdd/tor/web80/hostname 2>/dev/null)"
fi
#################
# UPS (uninterruptible power supply)
source <(/home/admin/_cache.sh valid system_ups_status)
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${MINUTE} ]; then
echo "updating: /home/admin/config.scripts/blitz.ups.sh status"
source <(/home/admin/config.scripts/blitz.ups.sh status)
/home/admin/_cache.sh set system_ups_status "${upsStatus}"
fi
#################
# DATADRIVE
source <(/home/admin/_cache.sh valid \
hdd_mounted \
hdd_ssd \
hdd_btrfs \
hdd_raid \
hdd_uasp \
hdd_capacity_bytes \
hdd_capacity_gb \
hdd_free_bytes \
hdd_free_gb \
hdd_used_info \
hdd_blockchain_data \
)
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${MINUTE2} ]; then
echo "updating: /home/admin/config.scripts/blitz.datadrive.sh status"
source <(/home/admin/config.scripts/blitz.datadrive.sh status)
/home/admin/_cache.sh set hdd_mounted "${isMounted}"
/home/admin/_cache.sh set hdd_ssd "${isSSD}"
/home/admin/_cache.sh set hdd_btrfs "${isBTRFS}"
/home/admin/_cache.sh set hdd_raid "${isRaid}"
/home/admin/_cache.sh set hdd_uasp "${hddAdapterUSAP}"
/home/admin/_cache.sh set hdd_capacity_bytes "${hddBytes}"
/home/admin/_cache.sh set hdd_capacity_gb "${hddGigaBytes}"
/home/admin/_cache.sh set hdd_free_bytes "${hddDataFreeBytes}"
/home/admin/_cache.sh set hdd_free_gb "${hddDataFreeGB}"
/home/admin/_cache.sh set hdd_used_info "${hddUsedInfo}"
/home/admin/_cache.sh set hdd_blockchain_data "${hddBlocksBitcoin}"
fi
#################
# INTERNET
# GLOBAL & PUBLIC IP
source <(/home/admin/_cache.sh get runBehindTor)
if [ "${runBehindTor}" == "off" ]; then
source <(/home/admin/_cache.sh valid \
internet_public_ipv6 \
internet_public_ip_detected \
internet_public_ip_forced \
internet_public_ip_clean \
)
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${HOUR} ]; then
echo "updating: /home/admin/config.scripts/internet.sh status global"
source <(/home/admin/config.scripts/internet.sh status global)
/home/admin/_cache.sh set internet_public_ipv6 "${ipv6}"
# globalip --> ip detected from the outside
/home/admin/_cache.sh set internet_public_ip_detected "${globalip}"
# publicip --> may consider the static IP overide by raspiblitz config
/home/admin/_cache.sh set internet_public_ip_forced "${publicip}"
# cleanip --> the publicip with no brackets like used on IPv6
/home/admin/_cache.sh set internet_public_ip_clean "${cleanip}"
fi
fi
# LOCAL IP & data
source <(/home/admin/_cache.sh valid \
internet_localip \
internet_localiprange \
internet_dhcp \
internet_rx \
internet_tx \
)
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${MINUTE} ]; then
echo "updating: /home/admin/config.scripts/internet.sh status local"
source <(/home/admin/config.scripts/internet.sh status local)
/home/admin/_cache.sh set internet_localip "${localip}"
/home/admin/_cache.sh set internet_localiprange "${localiprange}"
/home/admin/_cache.sh set internet_dhcp "${dhcp}"
/home/admin/_cache.sh set internet_rx "${network_rx}"
/home/admin/_cache.sh set internet_tx "${network_tx}"
fi
# connection to internet
source <(/home/admin/_cache.sh valid internet_online)
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${HOURQUATER} ]; then
echo "updating: /home/admin/config.scripts/internet.sh status online"
source <(/home/admin/config.scripts/internet.sh status online)
/home/admin/_cache.sh set internet_online "${online}"
fi
# exit if still setup or higher system stopped
source <(/home/admin/_cache.sh get setupPhase state)
if [ "${setupPhase}" != "done" ] ||
[ "${state}" == "" ] ||
[ "${state}" == "copysource" ] ||
[ "${state}" == "copytarget" ]; then
# dont skip when setup/recovery is in "waitsync" state
if [ "${state}" != "waitsync" ]; then
endTime=$(date +%s)
runTime=$((${endTime}-${startTime}))
# write info on scan runtime into cache (use as signal that the first systemscan worked)
/home/admin/_cache.sh set systemscan_runtime "${runTime}"
echo "Skipping deeper system scan - setupPhase(${setupPhase}) state(${state})"
sleep 1
continue
fi
fi
####################################################################
# LOOP DATA (DEEPER SYSTEM)
# data that may be based on setup phase or configuration
####################################################################
# by default will only scan the btc & lightning instances that are set to default
# but can scan/monitor all that are switched on when `system_scan_all=on` in config
# read/update config values
source /mnt/hdd/raspiblitz.conf
# check if a one time `system_scan_all_once=1` is set on cache
# will trigger a scan_all for one loop
source <(/home/admin/_cache.sh get system_scan_all_once)
if [ "${system_scan_all_once}" == "1" ]; then
echo "system_scan_all_once found --> TRIGGER system_scan_all for one loop"
/home/admin/_cache.sh set system_scan_all_once "0"
system_scan_all="on"
fi
# check if a temporary `system_scan_all_temp=1` is set on cache
# will trigger a scan_all until its gone or `0`
source <(/home/admin/_cache.sh get system_scan_all_temp)
if [ "${system_scan_all_temp}" == "1" ]; then
echo "system_scan_all_temp found --> TRIGGER system_scan_all"
system_scan_all="on"
fi
###################
# BITCOIN
if [ "${network}" == "bitcoin" ]; then
# loop thru mainet, testnet & signet
networks=( "main" "test" "sig" )
for CHAIN in "${networks[@]}"
do
# check if is default chain (multiple networks can run at the same time - but only one is default)
isDefaultChain=$(echo "${CHAIN}" | grep -c "${chain}")
# skip if network is not on by config
if [ "${CHAIN}" == "main" ] && [ "${mainnet}" != "on" ] && [ "${isDefaultChain}" != "1" ]; then
#echo "skip btc ${CHAIN}net scan - because its off"
continue
fi
if [ "${CHAIN}" == "test" ] && [ "${testnet}" != "on" ]; then
#echo "skip btc ${CHAIN}net scan - because its off"
continue
fi
if [ "${CHAIN}" == "sig" ] && [ "${signet}" != "on" ]; then
#echo "skip btc ${CHAIN}net scan - because its off"
continue
fi
# only scan non defaults when set by parameter from config
if [ "${system_scan_all}" != "on" ]; then
if [ "${isDefaultChain}" != "1" ]; then
#echo "skip btc ${CHAIN}net scan - because its not default"
continue
fi
fi
# update basic status values always
source <(/home/admin/_cache.sh valid \
btc_${CHAIN}net_version \
btc_${CHAIN}net_running \
btc_${CHAIN}net_ready \
btc_${CHAIN}net_online \
btc_${CHAIN}net_error_short \
btc_${CHAIN}net_error_full \
)
if [ "${isDefaultChain}" == "1" ] && [ "${stillvalid}" == "1" ]; then
source <(/home/admin/_cache.sh valid \
btc_default_version \
btc_default_running \
btc_default_ready \
btc_default_online \
btc_default_error_short \
btc_default_error_full \
)
fi
if [ "${stillvalid}" == "0" ] || [ ${age} -gt 30 ]; then
echo "updating: /home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net status"
source <(/home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net status)
/home/admin/_cache.sh set btc_${CHAIN}net_activated "1"
/home/admin/_cache.sh set btc_${CHAIN}net_version "${btc_version}"
/home/admin/_cache.sh set btc_${CHAIN}net_running "${btc_running}"
/home/admin/_cache.sh set btc_${CHAIN}net_ready "${btc_ready}"
/home/admin/_cache.sh set btc_${CHAIN}net_online "${btc_online}"
/home/admin/_cache.sh set btc_${CHAIN}net_error_short "${btc_error_short}"
/home/admin/_cache.sh set btc_${CHAIN}net_error_full "${btc_error_full}"
# when default chain transfere values
if [ "${isDefaultChain}" == "1" ]; then
/home/admin/_cache.sh set btc_default_activated "1"
/home/admin/_cache.sh set btc_default_version "${btc_version}"
/home/admin/_cache.sh set btc_default_running "${btc_running}"
/home/admin/_cache.sh set btc_default_ready "${btc_ready}"
/home/admin/_cache.sh set btc_default_online "${btc_online}"
/home/admin/_cache.sh set btc_default_error_short "${btc_error_short}"
/home/admin/_cache.sh set btc_default_error_full "${btc_error_full}"
fi
fi
# update detail infos only when ready (get as value from cache)
source <(/home/admin/_cache.sh meta btc_${CHAIN}net_ready)
if [ "${value}" == "1" ]; then
# check if network needs update
source <(/home/admin/_cache.sh valid \
btc_${CHAIN}net_synced \
btc_${CHAIN}net_blocks_headers \
btc_${CHAIN}net_blocks_verified \
btc_${CHAIN}net_blocks_behind \
btc_${CHAIN}net_sync_progress \
btc_${CHAIN}net_sync_percentage \
btc_${CHAIN}net_sync_initialblockdownload \
)
if [ "${isDefaultChain}" == "1" ] && [ "${stillvalid}" == "1" ]; then
source <(/home/admin/_cache.sh valid \
btc_default_synced \
btc_default_blocks_headers \
btc_default_blocks_verified \
btc_default_blocks_behind \
btc_default_sync_progress \
btc_default_sync_percentage \
btc_default_sync_initialblockdownload \
)
fi
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${MINUTE} ]; then
error=""
echo "updating: /home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net info"
source <(/home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net info)
if [ "${error}" == "" ]; then
/home/admin/_cache.sh set btc_${CHAIN}net_synced "${btc_synced}"
/home/admin/_cache.sh set btc_${CHAIN}net_blocks_headers "${btc_blocks_headers}"
/home/admin/_cache.sh set btc_${CHAIN}net_blocks_verified "${btc_blocks_verified}"
/home/admin/_cache.sh set btc_${CHAIN}net_blocks_behind "${btc_blocks_behind}"
/home/admin/_cache.sh set btc_${CHAIN}net_sync_progress "${btc_sync_progress}"
/home/admin/_cache.sh set btc_${CHAIN}net_sync_percentage "${btc_sync_percentage}"
/home/admin/_cache.sh set btc_${CHAIN}net_sync_initialblockdownload "${btc_sync_initialblockdownload}"
if [ "${isDefaultChain}" == "1" ]; then
/home/admin/_cache.sh set btc_default_synced "${btc_synced}"
/home/admin/_cache.sh set btc_default_blocks_headers "${btc_blocks_headers}"
/home/admin/_cache.sh set btc_default_blocks_verified "${btc_blocks_verified}"
/home/admin/_cache.sh set btc_default_blocks_behind "${btc_blocks_behind}"
/home/admin/_cache.sh set btc_default_sync_progress "${btc_sync_progress}"
/home/admin/_cache.sh set btc_default_sync_percentage "${btc_sync_percentage}"
/home/admin/_cache.sh set btc_default_sync_initialblockdownload "${btc_sync_initialblockdownload}"
fi
else
echo "!! ERROR --> ${error}"
fi
fi
# check if network needs update
source <(/home/admin/_cache.sh valid \
btc_${CHAIN}net_peers \
btc_${CHAIN}net_address \
btc_${CHAIN}net_port \
)
if [ "${isDefaultChain}" == "1" ] && [ "${stillvalid}" == "1" ]; then
source <(/home/admin/_cache.sh valid \
btc_default_peers \
btc_default_address \
btc_default_port \
)
fi
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${MINUTE} ]; then
error=""
echo "updating: /home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net network"
source <(/home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net network)
if [ "${error}" == "" ]; then
/home/admin/_cache.sh set btc_${CHAIN}net_peers "${btc_peers}"
/home/admin/_cache.sh set btc_${CHAIN}net_address "${btc_address}"
/home/admin/_cache.sh set btc_${CHAIN}net_port "${btc_port}"
if [ "${isDefaultChain}" == "1" ]; then
/home/admin/_cache.sh set btc_default_peers "${btc_peers}"
/home/admin/_cache.sh set btc_default_address "${btc_address}"
/home/admin/_cache.sh set btc_default_port "${btc_port}"
fi
else
echo "!! ERROR --> ${error}"
fi
fi
# check if mempool needs update
source <(/home/admin/_cache.sh valid \
btc_${CHAIN}net_mempool_transactions \
)
if [ "${isDefaultChain}" == "1" ] && [ "${stillvalid}" == "1" ]; then
source <(/home/admin/_cache.sh valid \
btc_default_mempool_transactions \
)
fi
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${MINUTE5} ]; then
error=""
echo "updating: /home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net mempool"
source <(/home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net mempool)
if [ "${error}" == "" ]; then
/home/admin/_cache.sh set btc_${CHAIN}net_mempool_transactions "${btc_mempool_transactions}"
if [ "${isDefaultChain}" == "1" ]; then
/home/admin/_cache.sh set btc_default_mempool_transactions "${btc_mempool_transactions}"
fi
else
echo "!! ERROR --> ${error}"
fi
fi
fi
done
fi
###################
# Lightning (lnd)
# loop thru mainet, testnet & signet
networks=( "main" "test" "sig" )
for CHAIN in "${networks[@]}"
do
# skip if network is not on by config
if [ "${CHAIN}" == "main" ] && [ "${lnd}" != "on" ]; then
#echo "skip lnd ${CHAIN}net scan - because its off"
continue
fi
if [ "${CHAIN}" == "test" ] && [ "${tlnd}" != "on" ]; then
#echo "skip lnd ${CHAIN}net scan - because its off"
continue
fi
if [ "${CHAIN}" == "sig" ] && [ "${slnd}" != "on" ]; then
#echo "skip lnd ${CHAIN}net scan - because its off"
continue
fi
# check if default chain & lightning
isDefaultChain=$(echo "${CHAIN}" | grep -c "${chain}")
isDefaultLightning=$(echo "${lightning}" | grep -c "lnd")
# only scan non defaults when set by parameter from config
if [ "${system_scan_all}" != "on" ]; then
if [ "${isDefaultChain}" != "1" ] || [ ${isDefaultLightning} != "1" ]; then
#echo "skip lnd ${CHAIN}net scan - because its not default"
continue
fi
fi
# update basic status values always
source <(/home/admin/_cache.sh valid \
ln_lnd_${CHAIN}net_locked \
ln_lnd_${CHAIN}net_version \
ln_lnd_${CHAIN}net_running \
ln_lnd_${CHAIN}net_ready \
ln_lnd_${CHAIN}net_online \
ln_lnd_${CHAIN}net_error_short \
ln_lnd_${CHAIN}net_error_full \
)
if [ "${isDefaultLightning}" == "1" ] && [ "${isDefaultChain}" == "1" ] && [ "${stillvalid}" == "1" ]; then
source <(/home/admin/_cache.sh valid \
ln_default_locked \
ln_default_version \
ln_default_running \
ln_default_ready \
ln_default_online \
ln_default_error_short \
ln_default_error_full \
)
fi
if [ "${stillvalid}" == "0" ] || [ ${age} -gt 30 ]; then
echo "updating: /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net status"
source <(/home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net status)
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_activated "1"
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_locked "${ln_lnd_locked}"
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_version "${ln_lnd_version}"
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_running "${ln_lnd_running}"
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_ready "${ln_lnd_ready}"
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_online "${ln_lnd_online}"
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_error_short "${ln_lnd_error_short}"
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_error_full "${ln_lnd_error_full}"
if [ "${isDefaultLightning}" == "1" ] && [ "${isDefaultChain}" == "1" ]; then
/home/admin/_cache.sh set ln_default_activated "1"
/home/admin/_cache.sh set ln_default_locked "${ln_lnd_locked}"
/home/admin/_cache.sh set ln_default_version "${ln_lnd_version}"
/home/admin/_cache.sh set ln_default_running "${ln_lnd_running}"
/home/admin/_cache.sh set ln_default_ready "${ln_lnd_ready}"
/home/admin/_cache.sh set ln_default_online "${ln_lnd_online}"
/home/admin/_cache.sh set ln_default_error_short "${ln_lnd_error_short}"
/home/admin/_cache.sh set ln_default_error_full "${ln_lnd_error_full}"
fi
fi
# update detail infos only when ready
source <(/home/admin/_cache.sh meta ln_lnd_${CHAIN}net_ready)
if [ "${value}" == "1" ]; then
# check if config needs update
source <(/home/admin/_cache.sh valid ln_lnd_${CHAIN}net_alias)
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${MINUTE5} ]; then
error=""
echo "updating: /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net config"
source <(/home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net config)
if [ "${error}" == "" ]; then
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_alias "${ln_lnd_alias}"
if [ "${isDefaultLightning}" == "1" ] && [ "${isDefaultChain}" == "1" ]; then
/home/admin/_cache.sh set ln_default_alias "${ln_lnd_alias}"
fi
else
echo "!! ERROR --> ${error}"
fi
fi
# check if info needs update
source <(/home/admin/_cache.sh valid \
ln_lnd_${CHAIN}net_address \
ln_lnd_${CHAIN}net_tor \
ln_lnd_${CHAIN}net_sync_chain \
ln_lnd_${CHAIN}net_sync_graph \
ln_lnd_${CHAIN}net_channels_pending \
ln_lnd_${CHAIN}net_channels_active \
ln_lnd_${CHAIN}net_channels_inactive \
ln_lnd_${CHAIN}net_channels_total \
ln_lnd_${CHAIN}net_peers \
)
if [ "${isDefaultLightning}" == "1" ] && [ "${isDefaultChain}" == "1" ] && [ "${stillvalid}" == "1" ]; then
source <(/home/admin/_cache.sh valid \
ln_default_address \
ln_default_tor \
ln_default_sync_chain \
ln_default_sync_progress \
ln_default_channels_pending \
ln_default_channels_active \
ln_default_channels_inactive \
ln_default_channels_total \
ln_default_peers \
)
fi
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${MINUTE} ]; then
error=""
echo "updating: /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net info"
source <(/home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net info)
if [ "${error}" == "" ]; then
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_address "${ln_lnd_address}"
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_tor "${ln_lnd_tor}"
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_sync_chain "${ln_lnd_sync_chain}"
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_sync_progress "${ln_lnd_sync_progress}"
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_sync_graph "${ln_lnd_sync_graph}"
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_channels_pending "${ln_lnd_channels_pending}"
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_channels_active "${ln_lnd_channels_active}"
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_channels_inactive "${ln_lnd_channels_inactive}"
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_channels_total "${ln_lnd_channels_total}"
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_peers "${ln_lnd_peers}"
if [ "${isDefaultLightning}" == "1" ] && [ "${isDefaultChain}" == "1" ]; then
/home/admin/_cache.sh set ln_default_address "${ln_lnd_address}"
/home/admin/_cache.sh set ln_default_tor "${ln_lnd_tor}"
/home/admin/_cache.sh set ln_default_sync_chain "${ln_lnd_sync_chain}"
/home/admin/_cache.sh set ln_default_sync_progress "${ln_lnd_sync_progress}"
/home/admin/_cache.sh set ln_default_channels_pending "${ln_lnd_channels_pending}"
/home/admin/_cache.sh set ln_default_channels_active "${ln_lnd_channels_active}"
/home/admin/_cache.sh set ln_default_channels_inactive "${ln_lnd_channels_inactive}"
/home/admin/_cache.sh set ln_default_channels_total "${ln_lnd_channels_total}"
/home/admin/_cache.sh set ln_default_peers "${ln_lnd_peers}"
fi
else
echo "!! ERROR --> ${error}"
fi
fi
# check if wallet needs update
source <(/home/admin/_cache.sh valid \
ln_lnd_${CHAIN}net_wallet_onchain_balance \
ln_lnd_${CHAIN}net_wallet_onchain_pending \
ln_lnd_${CHAIN}net_wallet_channels_balance \
ln_lnd_${CHAIN}net_wallet_channels_pending \
)
if [ "${isDefaultLightning}" == "1" ] && [ "${isDefaultChain}" == "1" ] && [ "${stillvalid}" == "1" ]; then
source <(/home/admin/_cache.sh valid \
ln_default_wallet_onchain_balance \
ln_default_wallet_onchain_pending \
ln_default_wallet_channels_balance \
ln_default_wallet_channels_pending \
)
fi
if [ "${stillvalid}" == "0" ] || [ ${age} -gt 22 ]; then
error=""
echo "updating: /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net wallet"
source <(/home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net wallet)
if [ "${error}" == "" ]; then
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_wallet_onchain_balance "${ln_lnd_wallet_onchain_balance}"
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_wallet_onchain_pending "${ln_lnd_wallet_onchain_pending}"
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_wallet_channels_balance "${ln_lnd_wallet_channels_balance}"
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_wallet_channels_pending "${ln_lnd_wallet_channels_pending}"
if [ "${isDefaultLightning}" == "1" ] && [ "${isDefaultChain}" == "1" ]; then
/home/admin/_cache.sh set ln_default_wallet_onchain_balance "${ln_lnd_wallet_onchain_balance}"
/home/admin/_cache.sh set ln_default_wallet_onchain_pending "${ln_lnd_wallet_onchain_pending}"
/home/admin/_cache.sh set ln_default_wallet_channels_balance "${ln_lnd_wallet_channels_balance}"
/home/admin/_cache.sh set ln_default_wallet_channels_pending "${ln_lnd_wallet_channels_pending}"
fi
else
echo "!! ERROR --> ${error}"
fi
fi
# check if fees needs update
source <(/home/admin/_cache.sh valid \
ln_lnd_${CHAIN}net_fees_daily \
ln_lnd_${CHAIN}net_fees_weekly \
ln_lnd_${CHAIN}net_fees_month \
ln_lnd_${CHAIN}net_fees_total \
)
if [ "${isDefaultLightning}" == "1" ] && [ "${isDefaultChain}" == "1" ] && [ "${stillvalid}" == "1" ]; then
source <(/home/admin/_cache.sh valid \
ln_default_fees_total \
)
fi
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${MINUTE5} ]; then
error=""
echo "updating: /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net fees"
source <(/home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net fees)
if [ "${error}" == "" ]; then
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_fees_daily "${ln_lnd_fees_daily}"
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_fees_weekly "${ln_lnd_fees_weekly}"
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_fees_month "${ln_lnd_fees_month}"
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_fees_total "${ln_lnd_fees_total}"
if [ "${isDefaultLightning}" == "1" ] && [ "${isDefaultChain}" == "1" ]; then
/home/admin/_cache.sh set ln_default_fees_total "${ln_lnd_fees_total}"
fi
else
echo "!! ERROR --> ${error}"
fi
fi
fi
done
###################
# Lightning (c-lightning)
# loop thru mainet, testnet & signet
networks=( "main" "test" "sig" )
for CHAIN in "${networks[@]}"
do
# skip if network is not on by config
if [ "${CHAIN}" == "main" ] && [ "${cl}" != "on" ]; then
#echo "skip c-lightning mainnet scan - because its off"
continue
fi
if [ "${CHAIN}" == "test" ] && [ "${tcl}" != "on" ]; then
#echo "skip c-lightning testnet scan - because its off"
continue
fi
if [ "${CHAIN}" == "sig" ] && [ "${scl}" != "on" ]; then
#echo "skip c-lightning signet scan - because its off"
continue
fi
# check if default chain & lightning
isDefaultChain=$(echo "${CHAIN}" | grep -c "${chain}")
isDefaultLightning=$(echo "${lightning}" | grep -c "cl")
# only scan non defaults when set by parameter from config
if [ "${system_scan_all}" != "on" ]; then
if [ "${isDefaultChain}" != "1" ] || [ ${isDefaultLightning} != "1" ]; then
#echo "skip cl ${CHAIN}net scan - because its not default"
continue
fi
fi
# TODO: c-lightning is seen as "always unlocked" for now - needs to be implemented later #2691
# update basic status values always
source <(/home/admin/_cache.sh valid \
ln_cl_${CHAIN}net_version \
ln_cl_${CHAIN}net_running \
ln_cl_${CHAIN}net_ready \
ln_cl_${CHAIN}net_online \
ln_cl_${CHAIN}net_error_short \
ln_cl_${CHAIN}net_error_full \
)
if [ "${isDefaultLightning}" == "1" ] && [ "${isDefaultChain}" == "1" ] && [ "${stillvalid}" == "1" ]; then
source <(/home/admin/_cache.sh valid \
ln_default_version \
ln_default_running \
ln_default_ready \
ln_default_online \
ln_default_error_short \
ln_default_error_full \
)
fi
if [ "${stillvalid}" == "0" ] || [ ${age} -gt 30 ]; then
echo "updating: /home/admin/config.scripts/cl.monitor.sh ${CHAIN}net status"
source <(/home/admin/config.scripts/cl.monitor.sh ${CHAIN}net status)
/home/admin/_cache.sh set ln_cl_${CHAIN}net_activated "1"
/home/admin/_cache.sh set ln_cl_${CHAIN}net_version "${ln_cl_version}"
/home/admin/_cache.sh set ln_cl_${CHAIN}net_running "${ln_cl_running}"
/home/admin/_cache.sh set ln_cl_${CHAIN}net_ready "${ln_cl_ready}"
/home/admin/_cache.sh set ln_cl_${CHAIN}net_online "${ln_cl_online}"
/home/admin/_cache.sh set ln_cl_${CHAIN}net_locked "0"
/home/admin/_cache.sh set ln_cl_${CHAIN}net_error_short "${ln_cl_error_short}"
/home/admin/_cache.sh set ln_cl_${CHAIN}net_error_full "${ln_cl_error_full}"
if [ "${isDefaultLightning}" == "1" ] && [ "${isDefaultChain}" == "1" ]; then
/home/admin/_cache.sh set ln_default_activated "1"
/home/admin/_cache.sh set ln_default_version "${cl_lnd_version}"
/home/admin/_cache.sh set ln_default_running "${lc_running}"
/home/admin/_cache.sh set ln_default_ready "${cl_ready}"
/home/admin/_cache.sh set ln_default_online "${cl_online}"
/home/admin/_cache.sh set ln_default_locked "0"
/home/admin/_cache.sh set ln_default_error_short "${cl_error_short}"
/home/admin/_cache.sh set ln_default_error_full "${cl_error_full}"
fi
fi
# update detail infos only when ready
source <(/home/admin/_cache.sh meta ln_cl_${CHAIN}net_ready)
if [ "${value}" == "1" ]; then
# check if info needs update
source <(/home/admin/_cache.sh valid \
ln_cl_${CHAIN}net_alias \
ln_cl_${CHAIN}net_address \
ln_cl_${CHAIN}net_tor \
ln_cl_${CHAIN}net_peers \
ln_cl_${CHAIN}net_sync_chain \
ln_cl_${CHAIN}net_channels_pending \
ln_cl_${CHAIN}net_channels_active \
ln_cl_${CHAIN}net_channels_inactive \
ln_cl_${CHAIN}net_channels_total \
ln_cl_${CHAIN}net_fees_total \
)
if [ "${isDefaultLightning}" == "1" ] && [ "${isDefaultChain}" == "1" ] && [ "${stillvalid}" == "1" ]; then
source <(/home/admin/_cache.sh valid \
ln_default_alias \
ln_default_address \
ln_default_tor \
ln_default_peers \
ln_default_sync_chain \
ln_default_channels_pending \
ln_default_channels_active \
ln_default_channels_inactive \
ln_default_channels_total \
ln_default_fees_total \
)
fi
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${MINUTE} ]; then
error=""
echo "updating: /home/admin/config.scripts/cl.monitor.sh ${CHAIN}net info"
source <(/home/admin/config.scripts/cl.monitor.sh ${CHAIN}net info)
if [ "${error}" == "" ]; then
/home/admin/_cache.sh set ln_cl_${CHAIN}net_alias "${ln_cl_alias}"
/home/admin/_cache.sh set ln_cl_${CHAIN}net_address "${ln_cl_address}"
/home/admin/_cache.sh set ln_cl_${CHAIN}net_tor "${ln_cl_tor}"
/home/admin/_cache.sh set ln_cl_${CHAIN}net_peers "${ln_cl_peers}"
/home/admin/_cache.sh set ln_cl_${CHAIN}net_sync_chain "${ln_cl_sync_chain}"
/home/admin/_cache.sh set ln_cl_${CHAIN}net_sync_progress "${ln_cl_sync_progress}"
/home/admin/_cache.sh set ln_cl_${CHAIN}net_channels_pending "${ln_cl_channels_pending}"
/home/admin/_cache.sh set ln_cl_${CHAIN}net_channels_active "${ln_cl_channels_active}"
/home/admin/_cache.sh set ln_cl_${CHAIN}net_channels_inactive "${ln_cl_channels_inactive}"
/home/admin/_cache.sh set ln_cl_${CHAIN}net_channels_total "${ln_cl_channels_total}"
/home/admin/_cache.sh set ln_cl_${CHAIN}net_fees_total "${ln_cl_fees_total}"
if [ "${isDefaultLightning}" == "1" ] && [ "${isDefaultChain}" == "1" ]; then
/home/admin/_cache.sh set ln_default_alias "${ln_cl_alias}"
/home/admin/_cache.sh set ln_default_address "${ln_cl_address}"
/home/admin/_cache.sh set ln_default_tor "${ln_cl_tor}"
/home/admin/_cache.sh set ln_default_peers "${ln_cl_fees_total}"
/home/admin/_cache.sh set ln_default_sync_chain "${ln_cl_sync_chain}"
/home/admin/_cache.sh set ln_default_sync_progress "${ln_cl_sync_progress}"
/home/admin/_cache.sh set ln_default_hannels_pending "${ln_cl_channels_pending}"
/home/admin/_cache.sh set ln_default_channels_active "${ln_cl_channels_active}"
/home/admin/_cache.sh set ln_default_channels_inactive "${ln_cl_channels_inactive}"
/home/admin/_cache.sh set ln_default_channels_total "${ln_cl_channels_total}"
/home/admin/_cache.sh set ln_default_fees_total "${ln_cl_fees_total}"
fi
else
echo "!! ERROR --> ${error}"
fi
fi
# check if wallet needs update
source <(/home/admin/_cache.sh valid \
ln_cl_${CHAIN}net_wallet_onchain_balance \
ln_cl_${CHAIN}net_wallet_onchain_pending \
ln_cl_${CHAIN}net_wallet_channels_balance \
ln_cl_${CHAIN}net_wallet_channels_pending \
)
if [ "${isDefaultLightning}" == "1" ] && [ "${isDefaultChain}" == "1" ] && [ "${stillvalid}" == "1" ]; then
source <(/home/admin/_cache.sh valid \
ln_default_wallet_onchain_balance \
ln_default_wallet_onchain_pending \
ln_default_wallet_channels_balance \
ln_default_wallet_channels_pending \
)
fi
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${MINUTE} ]; then
error=""
echo "updating: /home/admin/config.scripts/cl.monitor.sh ${CHAIN}net wallet"
source <(/home/admin/config.scripts/cl.monitor.sh ${CHAIN}net wallet)
if [ "${error}" == "" ]; then
/home/admin/_cache.sh set ln_cl_${CHAIN}net_wallet_onchain_balance "${ln_cl_wallet_onchain_balance}"
/home/admin/_cache.sh set ln_cl_${CHAIN}net_wallet_onchain_pending "${ln_cl_wallet_onchain_pending}"
/home/admin/_cache.sh set ln_cl_${CHAIN}net_wallet_channels_balance "${ln_cl_wallet_channels_balance}"
/home/admin/_cache.sh set ln_cl_${CHAIN}net_wallet_channels_pending "${ln_cl_wallet_channels_pending}"
if [ "${isDefaultLightning}" == "1" ] && [ "${isDefaultChain}" == "1" ]; then
/home/admin/_cache.sh set ln_default_wallet_onchain_balance "${ln_cl_wallet_onchain_balance}"
/home/admin/_cache.sh set ln_default_wallet_onchain_pending "${ln_cl_wallet_onchain_pending}"
/home/admin/_cache.sh set ln_default_wallet_channels_balance "${ln_cl_wallet_channels_balance}"
/home/admin/_cache.sh set ln_default_wallet_channels_pending "${ln_cl_wallet_channels_pending}"
fi
else
echo "!! ERROR --> ${error}"
fi
fi
fi
done
#################
# DONE
# calculate how many seconds the script was running
endTime=$(date +%s)
runTime=$((${endTime}-${startTime}))
# write info on scan runtime into cache (use as signal that the first systemscan worked)
/home/admin/_cache.sh set systemscan_runtime "${runTime}"
echo "SystemScan Loop done in ${runTime} seconds"
# log warning if script took too long
if [ ${runTime} -gt ${MINUTE} ]; then
echo "WARNING: HANGING SYSTEM ... systemscan loop took too long (${runTime} seconds)!" 1>&2
/home/admin/_cache.sh increment system_count_longscan
fi
# small sleep before next loop
sleep 2
# if was started with special parameter
if [ "${ONLY_ONE_LOOP}" == "1" ]; then
echo "Exiting because ONLY_ONE_LOOP==1"
exit 0
fi
done

View File

@ -12,19 +12,11 @@ configFile="/mnt/hdd/raspiblitz.conf"
# LOGS see: sudo journalctl -f -u background
# Check if HDD contains configuration
configExists=$(ls ${configFile} | grep -c '.conf')
if [ ${configExists} -eq 1 ]; then
source ${configFile}
else
source ${infoFile}
fi
echo "_background.sh STARTED"
# global vars
blitzTUIHeartBeatLine=""
blitzTUIRestarts=0
/home/admin/_cache.sh set blitzTUIRestarts "0"
counter=0
while [ 1 ]
@ -47,8 +39,10 @@ do
# gather the uptime seconds
upSeconds=$(cat /proc/uptime | grep -o '^[0-9]\+')
# source info file fresh on every loop
# source info & config file fresh on every loop
source ${infoFile} 2>/dev/null
source ${configFile} 2>/dev/null
source <(/home/admin/_cache.sh get state setupPhase)
####################################################
# SKIP BACKGROUND TASK LOOP ON CERTAIN SYSTEM STATES
@ -61,16 +55,6 @@ do
continue
fi
####################################################
# CHECK IF LOCAL IP CHANGED
####################################################
oldLocalIP="${localip}";
source <(/home/admin/config.scripts/internet.sh status)
if [ "${oldLocalIP}" != "${localip}" ]; then
echo "local IP changed old(${oldLocalIP}) new(${localip}) - updating in raspiblitz.info"
sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile}
fi
####################################################
# SKIP REST OF THE TASKS IF STILL IN SETUP PHASE
####################################################
@ -98,32 +82,13 @@ do
# detect a missing DHCP config
if [ "${localip:0:4}" = "169." ]; then
echo "Missing DHCP detected ... trying emergency reboot"
sudo /home/admin/config.scripts/blitz.shutdown.sh reboot
/home/admin/config.scripts/blitz.shutdown.sh reboot
else
echo "DHCP OK"
fi
fi
####################################################
# CHECK FOR UNDERVOLTAGE REPORTS
# every 1 hour scan for undervoltage reports
####################################################
recheckUndervoltage=$(($counter % 3600))
if [ ${recheckUndervoltage} -eq 1 ]; then
echo "*** RECHECK UNDERVOLTAGE ***"
countReports=$(sudo cat /var/log/syslog | grep -c "Under-voltage detected!")
echo "${countReports} undervoltage reports found in syslog"
if ! grep -Eq "^undervoltageReports=" ${infoFile}; then
# write new value to info file
undervoltageReports="${countReports}"
echo "undervoltageReports=${undervoltageReports}" >> ${infoFile}
else
# update value in info file
sed -i "s/^undervoltageReports=.*/undervoltageReports=${countReports}/g" ${infoFile}
fi
fi
####################################################
# RECHECK PUBLIC IP
#
@ -136,6 +101,7 @@ do
# every 15min - not too often
# because its a ping to external service
recheckPublicIP=$((($counter % 900)+1))
# prevent when lndAddress is set
if [ ${#lndAddress} -gt 3 ]; then
recheckPublicIP=0
@ -151,9 +117,7 @@ do
echo "*** RECHECK PUBLIC IP ***"
# execute only after setup when config exists
if [ ${configExists} -eq 1 ]; then
publicIPChanged=$(/home/admin/config.scripts/internet.sh update-publicip | grep -c 'ip_changed=1')
fi
publicIPChanged=$(/home/admin/config.scripts/internet.sh update-publicip | grep -c 'ip_changed=1')
# check if changed
if [ ${publicIPChanged} -gt 0 ]; then
@ -178,18 +142,18 @@ do
# and we will get more connections if this matches our real IP address
# otherwise the bitcoin-node connections will slowly decline
echo "IPv6 only is enabled => restart bitcoind to pickup up new publicIP as local IP"
sudo systemctl stop bitcoind
systemctl stop bitcoind
sleep 3
sudo systemctl start bitcoind
systemctl start bitcoind
# if BTCRPCexplorer is currently running
# it needs to be restarted to pickup the new IP for its "Node Status Page"
# but this is only needed in IPv6 only mode
breIsRunning=$(sudo systemctl status btc-rpc-explorer 2>/dev/null | grep -c 'active (running)')
breIsRunning=$(systemctl status btc-rpc-explorer 2>/dev/null | grep -c 'active (running)')
if [ ${breIsRunning} -eq 1 ]; then
echo "BTCRPCexplorer is running => restart BTCRPCexplorer to pickup up new publicIP for the bitcoin node"
sudo systemctl stop btc-rpc-explorer
sudo systemctl start btc-rpc-explorer
systemctl stop btc-rpc-explorer
systemctl start btc-rpc-explorer
else
echo "new publicIP but no BTCRPCexplorer restart because not running"
fi
@ -205,8 +169,8 @@ do
if [ "${autoUnlock}" = "on" ]; then
if [ "${publicIP_Old}" != "::1" ] && [ "${publicIP_New}" != "::1" ]; then
echo "restart LND to pickup up new publicIP"
sudo systemctl stop lnd
sudo systemctl start lnd
systemctl stop lnd
systemctl start lnd
else
echo "publicIP_Old OR publicIP_New is equal ::1 => no need to restart LND"
fi
@ -223,18 +187,39 @@ do
fi
###############################
# UPDATE DYNAMIC DOMAIN
# like afraid.org
# ! experimental
###############################
# if not activated above, update every 6 hours
if [ ${updateDynDomain} -eq 0 ]; then
# dont +1 so that it gets executed on first loop
updateDynDomain=$(($counter % 21600))
fi
if [ ${updateDynDomain} -eq 1 ]; then
echo "*** UPDATE DYNAMIC DOMAIN ***"
# check if update URL for dyn Domain is set
if [ ${#dynUpdateUrl} -gt 0 ]; then
/home/admin/config.scripts/internet.dyndomain.sh update
else
echo "'dynUpdateUrl' not set in ${configFile}"
fi
fi
###############################
# Blockchain Sync Monitor
###############################
# check every 1min
recheckSync=$(($counter % 60))
if [ ${recheckSync} -eq 1 ]; then
source <(sudo /home/admin/config.scripts/network.monitor.sh peer-status)
if [ ${recheckSync} -eq 1 ] && [ "${chain}" == "main" ]; then
source <(/home/admin/config.scripts/bitcoin.monitor.sh mainnet network)
echo "Blockchain Sync Monitoring: peers=${peers}"
if [ "${peers}" == "0" ] && [ "${running}" == "1" ]; then
if [ "${btc_peers}" == "0" ] && [ "${btc_running}" == "1" ]; then
echo "Blockchain Sync Monitoring: ZERO PEERS DETECTED .. doing out-of-band kickstart"
sudo /home/admin/config.scripts/network.monitor.sh peer-kickstart
/home/admin/config.scripts/bitcoin.monitor.sh mainnet peer-kickstart
fi
fi
@ -245,23 +230,20 @@ do
# check every 30sec
recheckBlitzTUI=$(($counter % 30))
if [ "${touchscreen}" == "1" ] && [ ${recheckBlitzTUI} -eq 1 ]; then
echo "BlitzTUI Monitoring Check"
if [ -d "/var/cache/raspiblitz" ]; then
latestHeartBeatLine=$(sudo tail -n 300 /var/cache/raspiblitz/pi/blitz-tui.log | grep beat | tail -n 1)
latestHeartBeatLine=$(tail -n 300 /var/cache/raspiblitz/pi/blitz-tui.log | grep beat | tail -n 1)
else
latestHeartBeatLine=$(sudo tail -n 300 /home/pi/blitz-tui.log | grep beat | tail -n 1)
latestHeartBeatLine=$(tail -n 300 /home/pi/blitz-tui.log | grep beat | tail -n 1)
fi
if [ ${#blitzTUIHeartBeatLine} -gt 0 ]; then
#echo "blitzTUIHeartBeatLine(${blitzTUIHeartBeatLine})"
#echo "latestHeartBeatLine(${latestHeartBeatLine})"
if [ "${blitzTUIHeartBeatLine}" == "${latestHeartBeatLine}" ]; then
echo "FAIL - still no new heart beat .. restarting BlitzTUI"
blitzTUIRestarts=$(($blitzTUIRestarts +1))
if [ $(sudo cat /home/admin/raspiblitz.info | grep -c 'blitzTUIRestarts=') -eq 0 ]; then
echo "blitzTUIRestarts=0" >> /home/admin/raspiblitz.info
fi
sudo sed -i "s/^blitzTUIRestarts=.*/blitzTUIRestarts=${blitzTUIRestarts}/g" /home/admin/raspiblitz.info
sudo init 3 ; sleep 2 ; sudo init 5
source <(/home/admin/_cache.sh increment system_count_start_tui)
init 3 ; sleep 2 ; init 5
fi
else
echo "blitzTUIHeartBeatLine is empty - skipping check"
@ -273,15 +255,19 @@ do
# SCB Monitoring
###############################
# check every 1min
recheckSCB=$(($counter % 60))
# check every 1min (only when lnd active)
recheckSCB=0
if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then
recheckSCB=$(($counter % 60))
fi
if [ ${recheckSCB} -eq 1 ]; then
#echo "SCB Monitoring ..."
source ${configFile}
# check if channel.backup exists
scbPath=/mnt/hdd/lnd/data/chain/${network}/${chain}net/channel.backup
scbExists=$(sudo ls $scbPath 2>/dev/null | grep -c 'channel.backup')
scbExists=$(ls $scbPath 2>/dev/null | grep -c 'channel.backup')
if [ ${scbExists} -eq 1 ]; then
# timestamp backup filename
timestampedFileName=channel-$(date "+%Y%m%d-%H%M%S").backup
localBackupDir=/home/admin/backups/scb
@ -289,16 +275,16 @@ do
localTimestampedPath=${localBackupDir}/${timestampedFileName}
#echo "Found Channel Backup File .. check if changed .."
md5checksumORG=$(sudo md5sum $scbPath 2>/dev/null | head -n1 | cut -d " " -f1)
md5checksumCPY=$(sudo md5sum $localBackupPath 2>/dev/null | head -n1 | cut -d " " -f1)
md5checksumORG=$(md5sum $scbPath 2>/dev/null | head -n1 | cut -d " " -f1)
md5checksumCPY=$(md5sum $localBackupPath 2>/dev/null | head -n1 | cut -d " " -f1)
if [ "${md5checksumORG}" != "${md5checksumCPY}" ]; then
echo "--> Channel Backup File changed"
# make copy to sd card (as local basic backup)
sudo mkdir -p /home/admin/backups/scb/ 2>/dev/null
sudo cp $scbPath $localBackupPath
sudo cp $scbPath $localTimestampedPath
sudo cp $scbPath /boot/channel.backup
mkdir -p /home/admin/backups/scb/ 2>/dev/null
cp $scbPath $localBackupPath
cp $scbPath $localTimestampedPath
cp $scbPath /boot/channel.backup
echo "OK channel.backup copied to '${localBackupPath}' and '{$localTimestampedPath}' and '/boot/channel.backup'"
# check if a additional local backup target is set
@ -310,8 +296,8 @@ do
if [ ${backupDeviceExists} -gt 0 ]; then
echo "--> Additional Local Backup Device"
sudo cp ${localBackupPath} /mnt/backup/
sudo cp ${localTimestampedPath} /mnt/backup/
cp ${localBackupPath} /mnt/backup/
cp ${localTimestampedPath} /mnt/backup/
# check results
result=$?
@ -337,11 +323,11 @@ do
echo "--> Offsite-Backup SCP Server"
if [ "${scpBackupOptions}" == "" ]; then
scpBackupOptions="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
fi
fi
# its ok to ignore known host, because data is encrypted (worst case of MiM would be: no offsite channel backup)
# but its more likely that without ignoring known host, script might not run thru and that way: no offsite channel backup
sudo scp ${scpBackupOptions} ${localBackupPath} ${scpBackupTarget}/
sudo scp ${scpBackupOptions} ${localTimestampedPath} ${scpBackupTarget}/
scp ${scpBackupOptions} ${localBackupPath} ${scpBackupTarget}/
scp ${scpBackupOptions} ${localTimestampedPath} ${scpBackupTarget}/
result=$?
if [ ${result} -eq 0 ]; then
echo "OK - SCP Backup exited with 0"
@ -350,27 +336,11 @@ do
fi
fi
# check if a DropBox backup target is set
# parameter in raspiblitz.conf:
# dropboxBackupTarget='[DROPBOX-APP-OAUTH2-TOKEN]'
# see dropbox setup: https://gist.github.com/vindard/e0cd3d41bb403a823f3b5002488e3f90
if [ ${#dropboxBackupTarget} -gt 0 ]; then
echo "--> Offsite-Backup Dropbox"
source <(sudo /home/admin/config.scripts/dropbox.upload.sh upload ${dropboxBackupTarget} ${localBackupPath})
source <(sudo /home/admin/config.scripts/dropbox.upload.sh upload ${dropboxBackupTarget} ${localTimestampedPath})
if [ ${#err} -gt 0 ]; then
echo "FAIL - ${err}"
echo "${errMore}"
else
echo "OK - ${upload}"
fi
fi
# check if Nextcloud backups are enabled
if [ $nextcloudBackupServer ] && [ $nextcloudBackupUser ] && [ $nextcloudBackupPassword ]; then
echo "--> Offsite-Backup Nextcloud"
source <(sudo /home/admin/config.scripts/nextcloud.upload.sh upload ${localBackupPath})
source <(sudo /home/admin/config.scripts/nextcloud.upload.sh upload ${localTimestampedPath})
source <(/home/admin/config.scripts/nextcloud.upload.sh upload ${localBackupPath})
source <(/home/admin/config.scripts/nextcloud.upload.sh upload ${localTimestampedPath})
if [ ${#err} -gt 0 ]; then
echo "FAIL - ${err}"
else
@ -406,14 +376,11 @@ do
recheckRAID=$((($counter % 3600)+1))
if [ ${recheckRAID} -eq 1 ]; then
# check if raid is active
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status)
if [ ${isRaid} -eq 1 ]; then
# will run in the background
# check if BTRTFS raid is active & scrub
source <(/home/admin/config.scripts/blitz.datadrive.sh status)
if [ "${isBTRFS}" == "1" ] && [ "${isRaid}" == "1" ]; then
echo "STARTING BTRFS RAID DATA CHECK ..."
sudo btrfs scrub start /mnt/hdd/
btrfs scrub start /mnt/hdd/
fi
fi
@ -422,8 +389,11 @@ do
# LND AUTO-UNLOCK
###############################
# check every 10secs
recheckAutoUnlock=$((($counter % 10)+1))
# check every 10secs (only if LND is active)
recheckAutoUnlock=0
if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then
recheckAutoUnlock=$((($counter % 10)+1))
fi
if [ ${recheckAutoUnlock} -eq 1 ]; then
# check if auto-unlock feature if activated
@ -434,33 +404,12 @@ do
if [ "${locked}" != "0" ]; then
echo "STARTING AUTO-UNLOCK ..."
sudo /home/admin/config.scripts/lnd.unlock.sh
/home/admin/config.scripts/lnd.unlock.sh
fi
fi
fi
###############################
# UPDATE DYNAMIC DOMAIN
# like afraid.org
# ! experimental
###############################
# if not activated above, update every 6 hours
if [ ${updateDynDomain} -eq 0 ]; then
# dont +1 so that it gets executed on first loop
updateDynDomain=$(($counter % 21600))
fi
if [ ${updateDynDomain} -eq 1 ]; then
echo "*** UPDATE DYNAMIC DOMAIN ***"
# check if update URL for dyn Domain is set
if [ ${#dynUpdateUrl} -gt 0 ]; then
/home/admin/config.scripts/internet.dyndomain.sh update
else
echo "'dynUpdateUrl' not set in ${configFile}"
fi
fi
####################################################
# CHECK FOR END OF IBD (self validation)
####################################################
@ -478,18 +427,22 @@ do
echo "CHECK FOR END OF IBD --> reduce RAM for next reboot"
# remove flag
sudo rm /mnt/hdd/${network}/blocks/selfsync.flag
rm /mnt/hdd/${network}/blocks/selfsync.flag
# set dbcache back to normal (to give room for other apps after reboot in the future)
kbSizeRAM=$(sudo cat /proc/meminfo | grep "MemTotal" | sed 's/[^0-9]*//g')
kbSizeRAM=$(cat /proc/meminfo | grep "MemTotal" | sed 's/[^0-9]*//g')
if [ ${kbSizeRAM} -gt 1500000 ]; then
echo "Detected RAM >1GB --> optimizing ${network}.conf"
sudo sed -i "s/^dbcache=.*/dbcache=512/g" /mnt/hdd/${network}/${network}.conf
sed -i "s/^dbcache=.*/dbcache=512/g" /mnt/hdd/${network}/${network}.conf
else
echo "Detected RAM 1GB --> optimizing ${network}.conf"
sudo sed -i "s/^dbcache=.*/dbcache=128/g" /mnt/hdd/${network}/${network}.conf
sed -i "s/^dbcache=.*/dbcache=128/g" /mnt/hdd/${network}/${network}.conf
fi
# relax sanning on sync progress (after 30 more secs)
/home/admin/_cache.sh focus btc_default_sync_progress 10 30
fi
fi
fi
@ -501,5 +454,4 @@ do
# sleep 1 sec
sleep 1
done
done

View File

@ -35,73 +35,78 @@ echo "Running RaspiBlitz Bootstrap ${codeVersion}" >> $logFile
date >> $logFile
echo "***********************************************" >> $logFile
# set default values for raspiblitz.info
network=""
chain=""
setupStep=0
setupPhase='boot'
fsexpanded=0
# see https://github.com/rootzoll/raspiblitz/issues/1265#issuecomment-813369284
displayClass="lcd"
displayType=""
fundRecovery=0
# make sure SSH server is configured & running
sudo /home/admin/config.scripts/blitz.ssh.sh checkrepair >> ${logFile}
################################
# INIT raspiblitz.info
################################
# raspiblitz.info contains the persisted system state
# that either given by build or has to survive a reboot
echo "## INIT raspiblitz.info" >> $logFile
# try to load old values if available (overwrites defaults)
# set default values for raspiblitz.info (that are not set by build_sdcard.sh)
setupPhase='boot'
setupStep=0
fsexpanded=0
fundRecovery=0
# load already persisted valued (overwriting defaults if exist)
source ${infoFile} 2>/dev/null
# write fresh raspiblitz.info file
echo "baseimage=${baseimage}" > $infoFile
echo "cpu=${cpu}" >> $infoFile
echo "displayClass=${displayClass}" >> $infoFile
echo "displayType=${displayType}" >> $infoFile
echo "setupPhase=${setupPhase}" >> $infoFile
echo "setupStep=${setupStep}" >> $infoFile
echo "fundRecovery=${fundRecovery}" >> $infoFile
echo "fsexpanded=${fsexpanded}" >> $infoFile
echo "state=starting" >> $infoFile
sudo chmod 664 ${infoFile}
# write content of raspiblitz.info to logs
cat $infoFile >> $logFile
#########################
# INIT RaspiBlitz Cache
#########################
echo "## INIT RaspiBlitz Cache ... wait background.scan.service to finsih first scan loop" >> $logFile
systemscan_runtime=""
while [ "${systemscan_runtime}" == "" ]
do
sleep 1
source <(/home/admin/_cache.sh get systemscan_runtime)
echo "- waiting for background.scan.service --> systemscan_runtime(${systemscan_runtime})" >> $logFile
done
# make sure latest info file is imported
/home/admin/_cache.sh import $infoFile
# setting basic status info
/home/admin/_cache.sh set state "starting"
/home/admin/_cache.sh set message "bootstrap"
# try to load config values if available (config overwrites info)
source ${configFile} 2>/dev/null
# get first basic network info
source <(/home/admin/config.scripts/internet.sh status)
# get basic hardware info
source <(/home/admin/config.scripts/blitz.hardware.sh status)
# get basic dns info
source <(sudo /home/admin/config.scripts/internet.dns.sh test nodialog)
# resetting info file
echo "Resetting the InfoFile: ${infoFile}"
echo "state=starting" > $infoFile
echo "message=" >> $infoFile
echo "baseimage=${baseimage}" >> $infoFile
echo "cpu=${cpu}" >> $infoFile
echo "board=${board}" >> $infoFile
echo "ramMB=${ramMB}" >> $infoFile
echo "ramGB=${ramGB}" >> $infoFile
echo "network=${network}" >> $infoFile
echo "chain=${chain}" >> $infoFile
echo "localip='${localip}'" >> $infoFile
echo "online='${online}'" >> $infoFile
echo "dnsworking=${dnsworking}" >> $infoFile
echo "fsexpanded=${fsexpanded}" >> $infoFile
echo "displayClass=${displayClass}" >> $infoFile
echo "displayType=${displayType}" >> $infoFile
echo "setupStep=${setupStep}" >> $infoFile
echo "setupPhase=${setupPhase}" >> $infoFile
echo "fundRecovery=${fundRecovery}" >> $infoFile
if [ "${setupStep}" != "100" ]; then
echo "hostname=${hostname}" >> $infoFile
fi
sudo chmod 664 ${infoFile}
# monitor LAN connection fast to display local IP changes
/home/admin/_cache.sh focus internet_localip 0
######################################
# CHECK SD CARD INCONSISTENT STATE
# make sure SSH server is configured & running
sudo /home/admin/config.scripts/blitz.ssh.sh checkrepair >> ${logFile}
# CHECK SD CARD STATE
# when a file 'stop' is on the sd card boot partition - stop for manual provision
flagExists=$(sudo ls /boot/stop | grep -c 'stop')
if [ "${flagExists}" == "1" ]; then
# remove flag
sudo rm /boot/stop
sed -i "s/^state=.*/state=stop/g" ${infoFile}
sed -i "s/^message=.*/message='stopped for manual provision'/g" ${infoFile}
# set state info
/home/admin/_cache.sh set state "stop"
/home/admin/_cache.sh set message "stopped for manual provision"
# log info
echo "INFO: 'bootstrap stopped - run release after manual provison'" >> ${logFile}
exit 0
fi
@ -110,13 +115,84 @@ fi
provisionFlagExists=$(sudo ls /home/admin/provision.flag | grep -c 'provision.flag')
if [ "${provisionFlagExists}" == "1" ]; then
sudo systemctl stop ${network}d 2>/dev/null
sudo systemctl stop lnd 2>/dev/null
sed -i "s/^state=.*/state=inconsistentsystem/g" ${infoFile}
sed -i "s/^message=.*/message='provision did not ran thru'/g" ${infoFile}
/home/admin/_cache.sh set state "inconsistentsystem"
/home/admin/_cache.sh set message "provision did not ran thru"
echo "FAIL: 'provision did not ran thru' - need fresh sd card!" >> ${logFile}
exit 1
fi
################################
# BOOT LOGO
################################
# display 3 secs logo - try to kickstart LCD
# see https://github.com/rootzoll/raspiblitz/issues/195#issuecomment-469918692
# see https://github.com/rootzoll/raspiblitz/issues/647
# see https://github.com/rootzoll/raspiblitz/pull/1580
randnum=$(shuf -i 0-7 -n 1)
/home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/startlogo${randnum}.png
sleep 5
/home/admin/config.scripts/blitz.display.sh hide
################################
# CLEANING BOOT SYSTEM
################################
# Emergency cleaning logs when over 1GB (to prevent SD card filling up)
# see https://github.com/rootzoll/raspiblitz/issues/418#issuecomment-472180944
echo "*** Checking Log Size ***"
logsMegaByte=$(sudo du -c -m /var/log | grep "total" | awk '{print $1;}')
if [ ${logsMegaByte} -gt 1000 ]; then
echo "WARN !! Logs /var/log in are bigger then 1GB" >> $logFile
# dont delete directories - can make services crash
sudo rm /var/log/*
sudo service rsyslog restart
/home/admin/_cache.sh set message "WARNING: /var/log/ >1GB"
echo "WARN !! Logs in /var/log in were bigger then 1GB and got emergency delete to prevent fillup." >> $logFile
echo "If you see this in the logs please report to the GitHub issues, so LOG config needs to be optimized." >> $logFile
sleep 10
else
echo "OK - logs are at ${logsMegaByte} MB - within safety limit" >> $logFile
fi
echo ""
# get the state of data drive
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status)
################################
# WAIT LOOP: HDD CONNECTED
################################
echo "Waiting for HDD/SSD ..." >> $logFile
sudo ls -la /etc/ssh >> $logFile
until [ ${isMounted} -eq 1 ] || [ ${#hddCandidate} -gt 0 ]
do
# recheck HDD/SSD
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status)
echo "isMounted: $isMounted" >> $logFile
echo "hddCandidate: $hddCandidate" >> $logFile
# in case of HDD analyse ERROR
if [ "${hddError}" != "" ]; then
echo "FAIL - error on HDD analysis: ${hddError}" >> $logFile
/home/admin/_cache.sh set state "errorHDD"
/home/admin/_cache.sh set message "${hddError}"
elif [ "${isMounted}" == "0" ] && [ "${hddCandidate}" == "" ]; then
/home/admin/_cache.sh set state "noHDD"
/home/admin/_cache.sh set message ">=1TB"
fi
# wait for next check
sleep 2
done
echo "HDD/SSD connected: ${$hddCandidate}" >> $logFile
# write info for LCD
/home/admin/_cache.sh set state "system-init"
/home/admin/_cache.sh set message "please wait"
######################################
# SECTION FOR POSSIBLE REBOOT ACTIONS
systemInitReboot=0
@ -136,7 +212,7 @@ if [ ${forceHDMIoutput} -eq 1 ]; then
echo "HDMI switch found ... activating HDMI display output & reboot" >> $logFile
sudo /home/admin/config.scripts/blitz.display.sh set-display hdmi >> $logFile
systemInitReboot=1
sed -i "s/^message=.*/message='HDMI'/g" ${infoFile}
/home/admin/_cache.sh set message "HDMI"
else
echo "No HDMI switch found. " >> $logFile
fi
@ -152,12 +228,12 @@ if [ "${needsExpansion}" == "1" ] && [ "${fsexpanded}" == "0" ]; then
sudo /home/admin/config.scripts/blitz.bootdrive.sh status >> $logFile
sudo /home/admin/config.scripts/blitz.bootdrive.sh fsexpand >> $logFile
systemInitReboot=1
sed -i "s/^message=.*/message='FSEXPAND'/g" ${infoFile}
/home/admin/_cache.sh set message "FSEXPAND"
elif [ "${tooSmall}" == "1" ]; then
echo "!!! FAIL !!!!!!!!!!!!!!!!!!!!" >> $logFile
echo "SDCARD TOO SMALL 16G minimum" >> $logFile
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >> $logFile
sed -i "s/^state=.*/state=sdtoosmall/g" ${infoFile}
/home/admin/_cache.sh set state "sdtoosmall"
echo "System stopped. Please cut power." >> $logFile
sleep 6000
sudo shutdown -r now
@ -167,6 +243,36 @@ else
echo "No FS EXPAND needed. needsExpansion(${needsExpansion}) fsexpanded(${fsexpanded})" >> $logFile
fi
# now that HDD/SSD is connected ... if relevant data from a previous RaspiBlitz was available
# /var/cache/raspiblitz/hdd-inspect exists with copy of config data to init system with
# NOTE: /var/cache/raspiblitz/hdd-inspect will not exist when HDD/SSD is already regulary mounted
####################################
# WIFI RESTORE from HDD works with
# mem copy from datadrive inspection
####################################
# check if there is a WIFI configuration to backup or restore
if [ -f "/var/cache/raspiblitz/hdd-inspect/wpa_supplicant.conf" ]; then
echo "WIFI RESTORE from /var/cache/raspiblitz/hdd-inspect/wpa_supplicant.conf" >> $logFile
/home/admin/config.scripts/internet.wifi.sh backup-restore >> $logFile
else
echo "No WIFI RESTORE because no /var/cache/raspiblitz/hdd-inspect/wpa_supplicant.conf" >> $logFile
fi
################################
# SSH SERVER CERTS RESTORE
# if backup is available on HDD/SSD
################################
if [ -d "/var/cache/raspiblitz/hdd-inspect/ssh" ]; then
# INIT OLD SSH HOST KEYS on Update/Recovery to prevent "Unknown Host" on ssh client
echo "SSH SERVER CERTS RESTORE activating old SSH host keys" >> $logFile
/home/admin/config.scripts/blitz.ssh.sh restore /var/cache/raspiblitz/hdd-inspect >> $logFile
else
echo "No SSH SERVER CERTS RESTORE because no /var/cache/raspiblitz/hdd-inspect/ssh" >> $logFile
fi
################################
# SSH SERVER CERTS RESET
# if a file called 'ssh.reset' gets
@ -177,29 +283,57 @@ fi
sshReset=$(sudo ls /boot/ssh.reset* 2>/dev/null | grep -c reset)
if [ ${sshReset} -eq 1 ]; then
# delete that file (to prevent loop)
sudo rm /boot/ssh.reset* >> $logFile
rm /boot/ssh.reset* >> $logFile
# delete ssh certs
echo "SSHRESET switch found ... stopping SSH and deleting old certs" >> $logFile
sudo /home/admin/config.scripts/blitz.ssh.sh renew >> $logFile
sudo /home/admin/config.scripts/blitz.ssh.sh backup >> $logFile
sudo ufw allow ssh
/home/admin/config.scripts/blitz.ssh.sh renew >> $logFile
/home/admin/config.scripts/blitz.ssh.sh backup >> $logFile
systemInitReboot=1
sed -i "s/^message=.*/message='SSHRESET'/g" ${infoFile}
/home/admin/_cache.sh set message "SSHRESET"
else
echo "No SSHRESET switch found. " >> $logFile
fi
##################################
# DISPLAY RESTORE (if needed)
##################################
if [ -f "/var/cache/raspiblitz/hdd-inspect/raspiblitz.conf" ]; then
echo "check that display class in raspiblitz.conf from HDD is different from as it is ow in raspiblitz.info ..." >> $logFile
# get display class value from raspiblitz.info
source <(cat ${infoFile} | grep "^displayClass=")
infoFileDisplayClass="${displayClass}"
echo "infoFileDisplayClass(${infoFileDisplayClass})" >> $logFile
# get display class value from raspiblitz.conf
source <(cat /var/cache/raspiblitz/hdd-inspect/raspiblitz.conf | grep "^displayClass=")
confFileDisplayClass="${displayClass}"
echo "confFileDisplayClass(${confFileDisplayClass})" >> $logFile
# check if values are different and need to change
if [ "${confFileDisplayClass}" != "" ] && [ "${infoFileDisplayClass}" != "${displayClass}" ]; then
echo "DISPLAY RESTORE - need to update displayClass from (${infoFileDisplayClass}) to (${confFileDisplayClass})'" >> ${logFile}
/home/admin/config.scripts/blitz.display.sh set-display ${confFileDisplayClass} >> ${logFile}
systemInitReboot=1
else
echo "No DISPLAY RESTORE because no need to change" >> $logFile
fi
else
echo "No DISPLAY RESTORE because no /var/cache/raspiblitz/hdd-inspect/raspiblitz.conf" >> $logFile
fi
################################
# UASP FIX - first try
# if HDD is connected on start
# UASP FIX
################################
/home/admin/_cache.sh set message "checking HDD"
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh uasp-fix)
if [ "${neededReboot}" == "1" ]; then
echo "UASP FIX applied (1st-try) ... reboot needed." >> $logFile
sed -i "s/^message=.*/message='UASP'/g" ${infoFile}
echo "UASP FIX applied ... reboot needed." >> $logFile
systemInitReboot=1
else
echo "No UASP FIX needed (1st-try)." >> $logFile
echo "No UASP FIX needed" >> $logFile
fi
######################################
@ -208,127 +342,13 @@ fi
if [ "${systemInitReboot}" == "1" ]; then
sudo cp ${logFile} /home/admin/raspiblitz.systeminit.log
sudo sed -i "s/^state=.*/state=reboot/g" ${infoFile}
/home/admin/_cache.sh set state "reboot"
sleep 8
sudo shutdown -r now
sleep 100
exit 0
fi
################################
# BOOT LOGO
################################
# display 3 secs logo - try to kickstart LCD
# see https://github.com/rootzoll/raspiblitz/issues/195#issuecomment-469918692
# see https://github.com/rootzoll/raspiblitz/issues/647
# see https://github.com/rootzoll/raspiblitz/pull/1580
randnum=$(shuf -i 0-7 -n 1)
/home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/startlogo${randnum}.png
sleep 5
/home/admin/config.scripts/blitz.display.sh hide
################################
# CLEANING BOOT SYSTEM
################################
# resetting start count files
echo "SYSTEMD RESTART LOG: blockchain (bitcoind)" > /home/admin/systemd.blockchain.log
echo "SYSTEMD RESTART LOG: lightning (LND)" > /home/admin/systemd.lightning.log
sudo chmod 666 /home/admin/systemd.blockchain.log
sudo chmod 666 /home/admin/systemd.lightning.log
# Emergency cleaning logs when over 1GB (to prevent SD card filling up)
# see https://github.com/rootzoll/raspiblitz/issues/418#issuecomment-472180944
echo "*** Checking Log Size ***"
logsMegaByte=$(sudo du -c -m /var/log | grep "total" | awk '{print $1;}')
if [ ${logsMegaByte} -gt 1000 ]; then
echo "WARN !! Logs /var/log in are bigger then 1GB"
echo "ACTION --> DELETED ALL LOGS"
if [ -d "/var/log/nginx" ]; then
nginxLog=1
echo "/var/log/nginx is present"
fi
sudo rm -r /var/log/*
sudo service rsyslog restart
if [ $nginxLog == 1 ]; then
sudo mkdir /var/log/nginx
echo "Recreated /var/log/nginx"
fi
sleep 3
echo "WARN !! Logs in /var/log in were bigger then 1GB and got emergency delete to prevent fillup."
echo "If you see this in the logs please report to the GitHub issues, so LOG config needs to be optimized."
else
echo "OK - logs are at ${logsMegaByte} MB - within safety limit"
fi
echo ""
###############################
# WAIT FOR ALL SERVICES
# get the state of data drive
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status)
################################
# WAIT LOOP: HDD CONNECTED
################################
echo "Waiting for HDD/SSD ..." >> $logFile
sudo ls -la /etc/ssh >> $logFile
until [ ${isMounted} -eq 1 ] || [ ${#hddCandidate} -gt 0 ]
do
# recheck HDD/SSD
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status)
echo "isMounted: $isMounted"
echo "hddCandidate: $hddCandidate"
# in case of HDD analyse ERROR
if [ "${hddError}" != "" ]; then
echo "FAIL - error on HDD analysis: ${hddError}" >> $logFile
sed -i "s/^state=.*/state=errorHDD/g" ${infoFile}
sed -i "s/^message=.*/message='${hddError}'/g" ${infoFile}
elif [ "${isMounted}" == "0" ] && [ "${hddCandidate}" == "" ]; then
sed -i "s/^state=.*/state=noHDD/g" ${infoFile}
sed -i "s/^message=.*/message='>=1TB'/g" ${infoFile}
fi
# wait for next check
sleep 2
done
echo "HDD/SSD connected: ${hddCandidate}" >> $logFile
# write info for LCD
sed -i "s/^state=.*/state=system-init/g" ${infoFile}
sed -i "s/^message=.*/message='please wait'/g" ${infoFile}
####################################
# WIFI RESTORE from HDD works with
# mem copy from datadrive inspection
####################################
# check if there is a WIFI configuration to backup or restore
/home/admin/config.scripts/internet.wifi.sh backup-restore >> $logFile
################################
# UASP FIX - second try
# when HDD gets connected later
################################
sed -i "s/^message=.*/message='checking HDD'/g" ${infoFile}
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh uasp-fix)
if [ "${neededReboot}" == "1" ]; then
echo "UASP FIX applied (2nd-try) ... reboot needed." >> $logFile
sudo cp ${logFile} ${logFile}.uasp
sudo sed -i "s/^state=.*/state=reboot/g" ${infoFile}
sleep 8
sudo shutdown -r now
sleep 100
exit 0
else
echo "No UASP FIX needed (2nd-try)." >> $logFile
fi
###################################
# WAIT LOOP: LOCALNET / INTERNET
# after HDD > can contain WIFI conf
@ -337,30 +357,28 @@ gotLocalIP=0
until [ ${gotLocalIP} -eq 1 ]
do
# get latest network info & update raspiblitz.info
source <(/home/admin/config.scripts/internet.sh status)
sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile}
# get latest network info directly
source <(/home/admin/config.scripts/internet.sh status online)
# check state of network
if [ ${dhcp} -eq 0 ]; then
# display user waiting for DHCP
sed -i "s/^state=.*/state=noDHCP/g" ${infoFile}
sed -i "s/^message=.*/message='Waiting for DHCP'/g" ${infoFile}
/home/admin/_cache.sh set state "noDHCP"
/home/admin/_cache.sh set message "Waiting for DHCP"
elif [ ${#localip} -eq 0 ]; then
configWifiExists=$(sudo cat /etc/wpa_supplicant/wpa_supplicant.conf 2>/dev/null| grep -c "network=")
if [ ${configWifiExists} -eq 0 ]; then
# display user to connect LAN
sed -i "s/^state=.*/state=noIP-LAN/g" ${infoFile}
sed -i "s/^message=.*/message='Connect the LAN/WAN'/g" ${infoFile}
/home/admin/_cache.sh set state "noIP-LAN"
/home/admin/_cache.sh set message "Connect the LAN/WAN"
else
# display user that wifi settings are not working
sed -i "s/^state=.*/state=noIP-WIFI/g" ${infoFile}
sed -i "s/^message=.*/message='WIFI Settings not working'/g" ${infoFile}
/home/admin/_cache.sh set state "noIP-WIFI"
/home/admin/_cache.sh set message "WIFI Settings not working"
fi
elif [ ${online} -eq 0 ]; then
# display user that wifi settings are not working
sed -i "s/^state=.*/state=noInternet/g" ${infoFile}
sed -i "s/^message=.*/message='No connection to Internet'/g" ${infoFile}
/home/admin/_cache.sh set state "noInternet"
/home/admin/_cache.sh set message "No connection to Internet"
else
gotLocalIP=1
fi
@ -368,40 +386,14 @@ do
done
# write info for LCD
sed -i "s/^state=.*/state=inspect-hdd/g" ${infoFile}
sed -i "s/^message=.*/message='please wait'/g" ${infoFile}
/home/admin/_cache.sh set state "inspect-hdd"
/home/admin/_cache.sh set message "please wait"
# get fresh info about data drive to continue
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status)
echo "isMounted: $isMounted" >> $logFile
# check if UASP is already deactivated (on RaspiOS)
# https://www.pragmaticlinux.com/2021/03/fix-for-getting-your-ssd-working-via-usb-3-on-your-raspberry-pi/
cmdlineExists=$(sudo ls /boot/cmdline.txt 2>/dev/null | grep -c "cmdline.txt")
if [ ${cmdlineExists} -eq 1 ] && [ ${#hddAdapterUSB} -gt 0 ] && [ ${hddAdapterUSAP} -eq 0 ]; then
echo "Checking for UASP deactivation ..." >> $logFile
usbQuirkActive=$(sudo cat /boot/cmdline.txt | grep -c "usb-storage.quirks=")
# check if its maybe other device
usbQuirkDone=$(sudo cat /boot/cmdline.txt | grep -c "usb-storage.quirks=${hddAdapterUSB}:u")
if [ ${usbQuirkActive} -gt 0 ] && [ ${usbQuirkDone} -eq 0 ]; then
# remove old usb-storage.quirks
sudo sed -i "s/usb-storage.quirks=[^ ]* //g" /boot/cmdline.txt
fi
if [ ${usbQuirkDone} -eq 0 ]; then
# add new usb-storage.quirks
sudo sed -i "1s/^/usb-storage.quirks=${hddAdapterUSB}:u /" /boot/cmdline.txt
sudo cat /boot/cmdline.txt >> $logFile
# go into reboot to activate new setting
echo "DONE deactivating UASP for ${hddAdapterUSB} ... one more reboot needed ... " >> $logFile
sudo cp ${logFile} ${logFile}.uasp
sudo shutdown -r now
sleep 100
fi
else
echo "Skipping UASP deactivation ... cmdlineExists(${cmdlineExists}) hddAdapterUSB(${hddAdapterUSB}) hddAdapterUSAP(${hddAdapterUSAP})" >> $logFile
fi
# check if the HDD is auto-mounted ( auto-mounted = setup-done)
echo "HDD already part of system: $isMounted" >> $logFile
@ -422,10 +414,11 @@ if [ ${isMounted} -eq 0 ]; then
echo "Temp mounting (1) result: ${isMounted}" >> $logFile
# write data needed for setup process into raspiblitz.info
echo "hddCandidate='${hddCandidate}'" >> ${infoFile}
echo "hddGigaBytes=${hddGigaBytes}" >> ${infoFile}
echo "hddBlocksBitcoin=${hddBlocksBitcoin}" >> ${infoFile}
echo "hddGotMigrationData=${hddGotMigrationData}" >> ${infoFile}
/home/admin/_cache.sh set hddCandidate "${hddCandidate}"
/home/admin/_cache.sh set hddGigaBytes "${hddGigaBytes}"
/home/admin/_cache.sh set hddBlocksBitcoin "${hddBlocksBitcoin}"
/home/admin/_cache.sh set hddBlocksLitecoin "${hddBlocksLitecoin}"
/home/admin/_cache.sh set hddGotMigrationData "${hddGotMigrationData}"
echo ""
echo "HDD is there but not AutoMounted yet - Waiting for user Setup/Update" >> $logFile
@ -445,10 +438,6 @@ if [ ${isMounted} -eq 0 ]; then
setupPhase="migration"
elif [ "${hddRaspiData}" == "1" ]; then
# INIT OLD SSH HOST KEYS on Update/Recovery to prevent "Unknown Host" on ssh client
echo "COPY und Activating old SSH host keys" >> $logFile
/home/admin/config.scripts/blitz.ssh.sh restore >> $logFile
# determine if this is a recovery or an update
# TODO: improve version/update detection later
isRecovery=$(echo "${hddRaspiVersion}" | grep -c "${codeVersion}")
@ -464,9 +453,9 @@ if [ ${isMounted} -eq 0 ]; then
# signal "WAIT LOOP: SETUP" to LCD, SSH & WEBAPI
echo "Displaying Info Message: ${infoMessage}" >> $logFile
sed -i "s/^state=.*/state=waitsetup/g" ${infoFile}
sed -i "s/^message=.*/message='${infoMessage}'/g" ${infoFile}
sed -i "s/^setupPhase=.*/setupPhase='${setupPhase}'/g" ${infoFile}
/home/admin/_cache.sh set state "waitsetup"
/home/admin/_cache.sh set message "${infoMessage}"
/home/admin/_cache.sh set setupPhase "${setupPhase}"
#############################################
# WAIT LOOP: USER SETUP/UPDATE/MIGRATION
@ -480,19 +469,16 @@ if [ ${isMounted} -eq 0 ]; then
# get fresh info about data drive (in case the hdd gets disconnected)
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status)
if [ "${hddCandidate}" == "" ]; then
echo "!!! WARNING !!! Lost HDD connection .. triggering reboot, to restart system-init." >> ${logFile}
sed -i "s/^state=.*/state=errorHDD/g" ${infoFile}
sed -i "s/^message=.*/message='lost HDD - rebooting'/g" ${infoFile}
sudo cp ${logFile} ${logFile}.error
/home/admin/config.scripts/blitz.error.sh _bootstrap.sh "lost-hdd" "Lost HDD connection .. triggering reboot." "happened during WAIT LOOP: USER SETUP/UPDATE/MIGRATION" ${logFile}
sleep 8
sudo shutdown -r now
sleep 100
exit 0
fi
# detect if network get deconnected again
# detect if network get deconnected again (call directly instead of cache)
# --> "removing network cable" can be used as signal to shutdown clean on test startup
source <(/home/admin/config.scripts/internet.sh status)
source <(/home/admin/config.scripts/internet.sh status local)
if [ "${localip}" == "" ]; then
sed -i "s/^state=.*/state=errorNetwork/g" ${infoFile}
sleep 8
@ -504,9 +490,8 @@ if [ ${isMounted} -eq 0 ]; then
# give the loop a little bed time
sleep 4
# check info file for updated values
# especially the state for checking loop
source ${infoFile}
# check for updated state value from SSH-UI or WEB-UI for loop
source <(/home/admin/_cache.sh get state)
done
@ -515,7 +500,7 @@ if [ ${isMounted} -eq 0 ]; then
#############################################
# refresh data from info file
source ${infoFile}
source <(/home/admin/_cache.sh get state setupPhase)
echo "# PROVISION PROCESS with setupPhase(${setupPhase})" >> ${logFile}
# mark system on sd card as in setup process
@ -548,17 +533,12 @@ if [ ${isMounted} -eq 0 ]; then
sudo cp /var/cache/raspiblitz/temp/raspiblitz.conf ${configFile}
fi
# kick-off provision process
sed -i "s/^state=.*/state=provision/g" ${infoFile}
sed -i "s/^message=.*/message='Starting Provision'/g" ${infoFile}
# enable tor service
sudo /home/admin/config.scripts/tor.install.sh enable >> ${logFile}
# load setup data
echo "# Sourcing ${configFile} " >> ${logFile}
source ${configFile}
cat ${configFile} >> ${logFile}
echo "# Sourcing ${setupFile} " >> ${logFile}
source ${setupFile}
sed -e '/^password/d' ${setupFile} >> ${logFile}
# kick-off provision process
/home/admin/_cache.sh set state "provision"
/home/admin/_cache.sh set message "Starting Provision"
# add some debug info to logfile
echo "# df " >> ${logFile}
@ -566,30 +546,45 @@ if [ ${isMounted} -eq 0 ]; then
echo "# lsblk -o NAME,FSTYPE,LABEL " >> ${logFile}
lsblk -o NAME,FSTYPE,LABEL >> ${logFile}
# make sure basic info is in raspiblitz.info
echo "# Update ${infoFile} " >> ${logFile}
sudo sed -i "s/^network=.*/network=${network}/g" ${infoFile}
sudo sed -i "s/^chain=.*/chain=${chain}/g" ${infoFile}
sudo sed -i "s/^lightning=.*/lightning=${lightning}/g" ${infoFile}
cat ${infoFile} >> ${logFile}
# if migrationFile was uploaded - now import it
echo "# migrationFile(${migrationFile})" >> ${logFile}
if [ "${migrationFile}" != "" ]; then
# unpack
sed -i "s/^message=.*/message='Unpacking Migration Data'/g" ${infoFile}
/home/admin/config.scripts/blitz.migration.sh import "${migrationFile}" >> ${logFile}
sed -i "s/^setupPhase=.*/setupPhase='recovery'/g" ${infoFile}
source <(/home/admin/config.scripts/blitz.migration.sh import "${migrationFile}")
# check for errors
if [ "${error}" != "" ]; then
/home/admin/config.scripts/blitz.error.sh _bootstrap.sh "migration-import-error" "blitz.migration.sh import exited with error" "/home/admin/config.scripts/blitz.migration.sh import ${migrationFile} --> ${error}" ${logFile}
exit 1
fi
# signal recovery provision phase
setupPhase="recovery"
/home/admin/_cache.sh set setupPhase "${setupPhase}"
fi
# load fresh config data
echo "# Sourcing ${configFile} " >> ${logFile}
cat ${configFile} >> ${logFile}
source ${configFile}
# load fresh setup data
echo "# Sourcing ${setupFile} " >> ${logFile}
cat ${setupFile} >> ${logFile}
source ${setupFile}
# make sure basic info is in raspiblitz.info
/home/admin/_cache.sh set network "${network}"
/home/admin/_cache.sh set chain "${chain}"
/home/admin/_cache.sh set lightning "${lightning}"
###################################
# Set Password A (in all cases)
if [ "${passwordA}" == "" ]; then
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='config: missing passwordA'/g" ${infoFile}
echo "FAIL see ${logFile}"
echo "FAIL: missing passwordA in (${setupFile})!" >> ${logFile}
/home/admin/config.scripts/blitz.error.sh _bootstrap.sh "missing-passworda" "missing passwordA in (${setupFile})" "" ${logFile}
exit 1
fi
@ -605,10 +600,11 @@ if [ ${isMounted} -eq 0 ]; then
errorState=$?
sudo cat /home/admin/raspiblitz.provision-setup.log
if [ "$errorState" != "0" ]; then
echo "EXIT _provision.setup.sh BECAUSE OF ERROR STATE ($errorState)" >> $logFile
echo "This can also happen if _provision.setup.sh has syntax errors" >> $logFile
sed -i "s/^state=.*/state='error'/g" ${infoFile}
sed -i "s/^message=.*/message='_provision.setup.sh fail'/g" ${infoFile}
# only trigger an error message if the script hasnt itself triggered an error message already
source <(/home/admin/_cache.sh get state)
if [ "${state}" != "error" ]; then
/home/admin/config.scripts/blitz.error.sh _bootstrap.sh "provision-setup-exit" "unknown or syntax error on (${errorState}) _provision.setup.sh" "" ${logFile}
fi
exit 1
fi
fi
@ -621,10 +617,11 @@ if [ ${isMounted} -eq 0 ]; then
errorState=$?
cat /home/admin/raspiblitz.provision-migration.log
if [ "$errorState" != "0" ]; then
echo "EXIT _provision.migration.sh BECAUSE OF ERROR STATE ($errorState)" >> $logFile
echo "This can also happen if _provision.migration.sh has syntax errros" >> $logFile
sed -i "s/^state=.*/state='error'/g" ${infoFile}
sed -i "s/^message=.*/message='_provision.migration.sh fail'/g" ${infoFile}
# only trigger an error message if the script hasnt itself triggered an error message already
source <(/home/admin/_cache.sh get state)
if [ "${state}" != "error" ]; then
/home/admin/config.scripts/blitz.error.sh _bootstrap.sh "provision-migration-exit" "unknown or syntax error on (${errorState}) _provision.migration.sh" "" ${logFile}
fi
exit 1
fi
fi
@ -637,10 +634,11 @@ if [ ${isMounted} -eq 0 ]; then
errorState=$?
cat /home/admin/raspiblitz.provision-update.log
if [ "$errorState" != "0" ]; then
echo "EXIT _provision.update.sh BECAUSE OF ERROR STATE ($errorState)" >> $logFile
echo "This can also happen if _provision.update.sh has syntax errors" >> $logFile
sed -i "s/^state=.*/state='error'/g" ${infoFile}
sed -i "s/^message=.*/message='_provision.update.sh fail'/g" ${infoFile}
# only trigger an error message if the script hasnt itself triggered an error message already
source <(/home/admin/_cache.sh get state)
if [ "${state}" != "error" ]; then
/home/admin/config.scripts/blitz.error.sh _bootstrap.sh "provision-update-exit" "unknown or syntax error on (${errorState}) _provision.update.sh" "" ${logFile}
fi
exit 1
fi
fi
@ -651,30 +649,32 @@ if [ ${isMounted} -eq 0 ]; then
/home/admin/_provision_.sh
errorState=$?
if [ "$errorState" != "0" ]; then
echo "EXIT _provision_.sh BECAUSE OF ERROR STATE ($errorState)" >> $logFile
echo "This can also happen if _provision_.sh has syntax errors" >> $logFile
sed -i "s/^state=.*/state='error'/g" ${infoFile}
sed -i "s/^message=.*/message='_provision_.sh fail'/g" ${infoFile}
# only trigger an error message if the script hasnt itself triggered an error message already
source <(/home/admin/_cache.sh get state)
if [ "${state}" != "error" ]; then
/home/admin/config.scripts/blitz.error.sh _bootstrap.sh "provision-exit" "unknown or syntax error on (${errorState}) _provision_.sh" "" ${logFile}
fi
exit 1
fi
# everyone can read the config but it can only be
# edited/written by root ot admin user (part of group sudo)
sudo chown root:sudo ${configFile}
sudo chmod 664 ${configFile}
chown root:sudo ${configFile}
chmod 664 ${configFile}
# delete provision in progress flag
sudo rm /home/admin/provision.flag
rm /home/admin/provision.flag
# mark provision process done
sed -i "s/^message=.*/message='Provision Done'/g" ${infoFile}
/home/admin/_cache.sh set message "Provision Done"
# wait until syncProgress is available (neeed for final dialogs)
while [ "${syncProgress}" == "" ]
/home/admin/_cache.sh set state "waitsync"
btc_default_ready="0"
while [ "${btc_default_ready}" != "1" ]
do
echo "# Waiting for blockchain sync progress info ..." >> $logFile
source <(sudo /home/admin/config.scripts/blitz.statusscan.sh)
sed -i "s/^state=.*/state=waitsync/g" ${infoFile}
source <(/home/admin/_cache.sh get btc_default_ready)
echo "# waitsync loop ... btc_default_ready(${btc_default_ready})" >> $logFile
sleep 2
done
@ -683,8 +683,8 @@ if [ ${isMounted} -eq 0 ]; then
###################################################
echo "# HANDOVER TO FINAL SETUP CONTROLLER ..." >> $logFile
sed -i "s/^state=.*/state=waitfinal/g" ${infoFile}
sed -i "s/^message=.*/message='Setup Done'/g" ${infoFile}
/home/admin/_cache.sh set state "waitfinal"
/home/admin/_cache.sh set message "Setup Done"
# system has to wait before reboot to present like seed words and other info/options to user
echo "BOOTSTRAP EXIT ... waiting for final setup controller to initiate final reboot." >> $logFile
@ -702,14 +702,14 @@ else
# FIX BLOCKCHAINDATA OWNER (just in case)
# https://github.com/rootzoll/raspiblitz/issues/239#issuecomment-450887567
#################################
sudo chown bitcoin:bitcoin -R /mnt/hdd/bitcoin 2>/dev/null
chown bitcoin:bitcoin -R /mnt/hdd/bitcoin 2>/dev/null
#################################
# FIX BLOCKING FILES (just in case)
# https://github.com/rootzoll/raspiblitz/issues/1901#issue-774279088
# https://github.com/rootzoll/raspiblitz/issues/1836#issue-755342375
sudo rm -f /mnt/hdd/bitcoin/bitcoind.pid 2>/dev/null
sudo rm -f /mnt/hdd/bitcoin/.lock 2>/dev/null
rm -f /mnt/hdd/bitcoin/bitcoind.pid 2>/dev/null
rm -f /mnt/hdd/bitcoin/.lock 2>/dev/null
################################
# DELETE LOG & LOCK FILES
@ -717,11 +717,11 @@ else
# LND and Blockchain Errors will be still in systemd journals
# /mnt/hdd/bitcoin/debug.log
sudo rm /mnt/hdd/${network}/debug.log 2>/dev/null
rm /mnt/hdd/${network}/debug.log 2>/dev/null
# /mnt/hdd/lnd/logs/bitcoin/mainnet/lnd.log
sudo rm /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log 2>/dev/null
rm /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log 2>/dev/null
# https://github.com/rootzoll/raspiblitz/issues/1700
sudo rm /mnt/storage/app-storage/electrs/db/mainnet/LOCK 2>/dev/null
rm /mnt/storage/app-storage/electrs/db/mainnet/LOCK 2>/dev/null
fi
@ -729,57 +729,23 @@ fi
##############################
# BOOSTRAP IN EVERY SITUATION
##############################
sed -i "s/^setupPhase=.*/setupPhase='starting'/g" ${infoFile}
# if a WIFI config exists backup to HDD
configWifiExists=$(sudo cat /etc/wpa_supplicant/wpa_supplicant.conf 2>/dev/null| grep -c "network=")
if [ ${configWifiExists} -eq 1 ]; then
echo "Making Backup Copy of WIFI config to HDD" >> $logFile
sudo cp /etc/wpa_supplicant/wpa_supplicant.conf /mnt/hdd/app-data/wpa_supplicant.conf
fi
# make sure lndAddress & lndPort exist in configfile
valueExists=$(cat ${configFile} | grep -c 'lndPort=')
if [ ${valueExists} -eq 0 ]; then
lndPort=$(sudo cat /mnt/hdd/lnd/lnd.conf | grep "^listen=*" | cut -f2 -d':')
if [ ${#lndPort} -eq 0 ]; then
lndPort="9735"
fi
echo "lndPort='${lndPort}'" >> ${configFile}
fi
valueExists=$(cat ${configFile} | grep -c 'lndAddress=')
if [ ${valueExists} -eq 0 ]; then
echo "lndAddress=''" >> ${configFile}
fi
/home/admin/_cache.sh set setupPhase "starting"
# load data from config file fresh
echo "load configfile data" >> $logFile
source ${configFile}
# update public IP on boot - set to domain if available
/home/admin/config.scripts/internet.sh update-publicip ${lndAddress}
# make constant UASP entry in raspiblitz.conf if still done by flag file
# uaspForced comes from blitz.datadrive.sh status
if [ ${uaspForced} -eq 1 ]; then
entryExists=$(cat /mnt/hdd/raspiblitz.conf 2>/dev/null | grep -c 'forceUasp=on')
if [ ${entryExists} -eq 0 ]; then
sudo sed -i '/forceUasp=.*/d' /mnt/hdd/raspiblitz.conf
echo "forceUasp=on" >> /mnt/hdd/raspiblitz.conf
echo "DONE forceUasp=on recorded in raspiblitz.conf" >> $logFile
fi
# if a WIFI config exists backup to HDD
source <(/home/admin/config.scripts/internet.sh status)
if [ ${configWifiExists} -eq 1 ]; then
echo "Making Backup Copy of WIFI config to HDD" >> $logFile
cp /etc/wpa_supplicant/wpa_supplicant.conf /mnt/hdd/app-data/wpa_supplicant.conf
fi
#################################
# MAKE SURE USERS HAVE LATEST LND CREDENTIALS
#################################
source ${configFile}
if [ ${#network} -gt 0 ] && [ ${#chain} -gt 0 ]; then
# make sure users have latest credentials (if lnd is on)
if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then
echo "running LND users credentials update" >> $logFile
sudo /home/admin/config.scripts/lnd.credentials.sh sync >> $logFile
/home/admin/config.scripts/lnd.credentials.sh sync >> $logFile
else
echo "skipping LND credentials sync" >> $logFile
fi
@ -789,11 +755,10 @@ fi
# if "localBackupDeviceUUID" is set in
# raspiblitz.conf mount it on boot
################################
source ${configFile}
echo "Checking if additional backup device is configured .. (${localBackupDeviceUUID})" >> $logFile
if [ "${localBackupDeviceUUID}" != "" ] && [ "${localBackupDeviceUUID}" != "off" ]; then
echo "Yes - Mounting BackupDrive: ${localBackupDeviceUUID}" >> $logFile
sudo /home/admin/config.scripts/blitz.backupdevice.sh mount >> $logFile
/home/admin/config.scripts/blitz.backupdevice.sh mount >> $logFile
else
echo "No additional backup device was configured." >> $logFile
fi
@ -801,7 +766,6 @@ fi
#####################################
# CLEAN HDD TEMP
#####################################
echo "CLEANING TEMP DRIVE/FOLDER" >> $logFile
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh clean temp)
if [ ${#error} -gt 0 ]; then
@ -818,7 +782,17 @@ fi
if [ ${isRaid} -eq 1 ]; then
echo "TRIGGERING BTRFS RAID DATA CHECK ..."
echo "Check status with: sudo btrfs scrub status /mnt/hdd/"
sudo btrfs scrub start /mnt/hdd/
btrfs scrub start /mnt/hdd/
fi
####################
# FORCE UASP FLAG
####################
# if uasp.force flag was set on sd card - now move into raspiblitz.conf
if [ -f "/boot/uasp.force" ]; then
/home/admin/config.scripts/blitz.conf.sh set forceUasp "on"
echo "DONE forceUasp=on recorded in raspiblitz.conf" >> $logFile
fi
######################################
@ -830,18 +804,27 @@ if [ -d "/mnt/hdd/app-data/subscriptions" ]; then
sudo chown admin:admin /mnt/hdd/app-data/subscriptions
else
echo "CREATE: subscription data directory"
sudo mkdir /mnt/hdd/app-data/subscriptions
sudo chown admin:admin /mnt/hdd/app-data/subscriptions
mkdir /mnt/hdd/app-data/subscriptions
chown admin:admin /mnt/hdd/app-data/subscriptions
fi
# make sure that bitcoin service is active
sudo systemctl enable ${network}d
# make sure setup/provision is marked as done
sudo rm /home/admin/provision.flag
sed -i "s/^setupPhase=.*/setupPhase='done'/g" ${infoFile}
sed -i "s/^state=.*/state=ready/g" ${infoFile}
sed -i "s/^message=.*/message='Node Running'/g" ${infoFile}
/home/admin/_cache.sh set setupPhase "done"
/home/admin/_cache.sh set state "ready"
/home/admin/_cache.sh set message "Node Running"
# relax systemscan on certain values
/home/admin/_cache.sh focus internet_localip -1
# if node is stil in inital blockchain download
source <(/home/admin/_cache.sh get btc_default_sync_initialblockdownload)
if [ "${btc_default_sync_initialblockdownload}" == "1" ]; then
echo "Node is still in IBD .. refresh btc_default_sync_progress faster" >> $logFile
/home/admin/_cache.sh focus btc_default_sync_progress 0
fi
echo "DONE BOOTSTRAP" >> $logFile
exit 0

474
home.admin/_cache.sh Executable file
View File

@ -0,0 +1,474 @@
#!/usr/bin/env bash
# the cache concept of RaspiBlitz has two options
# 1) RAMDISK for files under /var/cache/raspiblitz
# 2) KEY-VALUE STORE for system state infos (REDIS)
# SECURITY NOTE: The files on the RAMDISK can be set with unix file permissions and so restrict certain users access.
# But all data stored in the KEY-VALUE STORE has to be asumed as system-wide public information.
# command info
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "-help" ]; then
echo "RaspiBlitz Cache"
echo
echo "_cache.sh ramdisk [on|off]"
echo "_cache.sh keyvalue [on|off]"
echo
echo "_cache.sh set [key] [value] [?expire-seconds]"
echo "_cache.sh get [key1] [?key2] [?key3] ..."
echo
echo "_cache.sh increment [key1]"
echo
echo "_cache.sh focus [key] [update-seconds] [?duration-seconds]"
echo "# set in how many seconds value is marked to be rescanned"
echo "# -1 = slowest default update cycle"
echo "# 0 = update on every cycle"
echo "# set a 'duration-seconds' after defaults to -1 (optional)"
echo
echo "_cache.sh meta [key] [?default]"
echo "# get single key with additional metadata:"
echo "# updateseconds= see above"
echo "# stillvalid=0/1 if value is still valid or outdated"
echo "# lasttouch= last update timestamp in unix seconds"
echo
echo "_cache.sh valid [key1] [?key2] [?key3] ..."
echo "# check multiple keys if all are still not outdated"
echo "# use for example to check if a complex call needs"
echo "# to be made that covers multiple single data points"
echo
echo "_cache.sh import [bash-keyvalue-file]"
echo "# import a bash style key-value file into store"
echo
echo "_cache.sh export [?key-prefix]"
echo "# export bash-style key-value to stdout"
echo "# can be used with a key-prefix just get a subset"
echo
exit 1
fi
# BACKGROUND: we need to build outdated meta info manually,
# because there is nothing as "AGE" in redis: https://github.com/redis/redis/issues/1147
# only feature that can be used uis the EXPIRE feature to determine if a value is still valid
# postfixes for metadata in key/value store
META_OUTDATED_SECONDS=":out"
META_LASTTOUCH_TS=":ts"
META_VALID_FLAG=":val"
# path of the raspiblitz.info file (persiting cache values)
infoFile="/home/admin/raspiblitz.info"
###################
# RAMDISK
# will be available under /var/cache/raspiblitz
###################
# install
if [ "$1" = "ramdisk" ] && [ "$2" = "on" ]; then
echo "# Turn ON: RAMDISK"
if ! grep -Eq '^tmpfs.*/var/cache/raspiblitz' /etc/fstab; then
if grep -Eq '/var/cache/raspiblitz' /etc/fstab; then
# entry is in file but most likely just disabled -> re-enable it
sudo sed -i -E 's|^#(tmpfs.*/var/cache/raspiblitz.*)$|\1|g' /etc/fstab
else
# missing -> add
echo "" | sudo tee -a /etc/fstab >/dev/null
echo "tmpfs /var/cache/raspiblitz tmpfs nodev,nosuid,size=32M 0 0" | sudo tee -a /etc/fstab >/dev/null
fi
fi
if ! findmnt -l /var/cache/raspiblitz >/dev/null; then
sudo mkdir -p /var/cache/raspiblitz
sudo mount /var/cache/raspiblitz
fi
# uninstall
elif [ "$1" = "ramdisk" ] && [ "$2" = "off" ]; then
echo "# Turn OFF: RAMDISK"
if grep -Eq '/var/cache/raspiblitz' /etc/fstab; then
sudo sed -i -E 's|^(tmpfs.*/var/cache/raspiblitz.*)$|#\1|g' /etc/fstab
fi
if findmnt -l /var/cache/raspiblitz >/dev/null; then
sudo umount /var/cache/raspiblitz
fi
###################
# KEYVALUE (REDIS)
###################
# install
elif [ "$1" = "keyvalue" ] && [ "$2" = "on" ]; then
echo "# Turn ON: KEYVALUE-STORE (REDIS)"
sudo apt install -y redis-server
# edit config: dont save to disk
sudo sed -i "/^save .*/d" /etc/redis/redis.conf
# restart with new config
sudo systemctl restart redis-server
# clean old databases if exist
sudo rm /var/lib/redis/dump.rdb 2>/dev/null
# restart again this time there is no old data dump to load
sudo systemctl restart redis-server
# uninstall
elif [ "$1" = "keyvalue" ] && [ "$2" = "off" ]; then
echo "# Turn OFF: KEYVALUE-STORE (REDIS)"
sudo apt remove -y redis-server
###################
# SET/GET/IMPORT
# basic key value
###################
# set
elif [ "$1" = "set" ]; then
# get parameters
keystr=$2
valuestr=$3
expire=$4
# check that key & value are given
if [ "${keystr}" == "" ]; then
echo "# Fail: missing parameter"
exit 1
fi
# filter from expire just numbers
expire="${expire//[^0-9.]/}"
# add an expire flag if given
additionalParams=""
if [ "${expire}" != "" ]; then
additionalParams="EX ${expire}"
fi
# set in redis key value cache
redis-cli set ${keystr} "${valuestr}" ${additionalParams} 1>/dev/null
# set in redis the timestamp
timestamp=$(date +%s)
redis-cli set ${keystr}${META_LASTTOUCH_TS} "${timestamp}" ${additionalParams} 1>/dev/null
#echo "# lasttouch(${timestamp})"
# check if the value has a outdate policy
outdatesecs=$(redis-cli get ${keystr}${META_OUTDATED_SECONDS})
if [ "${outdatesecs}" == "" ]; then
outdatesecs="-1"
fi
#echo "# outdatesecs(${outdatesecs})"
if [ "${outdatesecs}" != "-1" ]; then
# set exipire valid flag (if its gone - value is considered as outdated)
redis-cli set ${keystr}${META_VALID_FLAG} "1" EX ${outdatesecs} 1>/dev/null
fi
# also update value if part of raspiblitz.info (persiting values to survice boot)
persistKey=$(cat ${infoFile} | grep -c "^${keystr}=")
if [ ${persistKey} -gt 0 ]; then
sudo sed -i "s/^${keystr}=.*/${keystr}='${valuestr}'/g" ${infoFile}
fi
# get
elif [ "$1" = "get" ]; then
position=0
for keystr in $@
do
# skip first parameter
((position++))
if [ $position -eq 1 ]; then
echo "# _cache.sh $@"
continue
fi
# get redis value
valuestr=$(redis-cli get ${keystr})
# output key value in bash script compatible way
echo "${keystr}=\"${valuestr}\""
done
# import values from bash key-value store
elif [ "$1" = "import" ]; then
# get parameter
filename=$2
# source values from given file (to be used for import later)
source ${filename}
# read file and go thru line by line
n=1
while read line; do
# skip comment lines
isComment=$(echo "${line}" | grep -c "^#")
if [ ${isComment} -eq 1 ]; then
continue
fi
# skip if not a value line
isValueLine=$(echo "${line}" | grep -c "=")
if [ ${isValueLine} -eq 0 ]; then
continue
fi
# import key from line & value from source above (that way quotes are habdled correctly)
keyValue=$(echo "$line" | cut -d "=" -f1)
echo "# redis-cli set ${keyValue} ${!keyValue}"
redis-cli set ${keyValue} "${!keyValue}" 1>/dev/null
# also set the timestamp on import for each value
timestamp=$(date +%s)
redis-cli set ${keyValue}${META_LASTTOUCH_TS} "${timestamp}" 1>/dev/null
done < $filename
# import values from bash key-value store
elif [ "$1" = "export" ]; then
# get parameter
keyfilter="${2}*"
# go thru all keys by keyfilter
keylist=$(redis-cli KEYS "${keyfilter}")
readarray -t arr <<< "${keylist}"
for key in "${arr[@]}";do
# skip empty keys
if [ "${key}" == "" ]; then
continue
fi
# skip metadata keys
isMeta=$(echo "${key}" | grep -c ":")
if [ ${isMeta} -gt 0 ]; then
continue
fi
# print out key/value
value=$(redis-cli get "${key}")
echo "${key}=\"${value}\""
done
##################################
# COUNT
# count value up
##################################
# set
elif [ "$1" = "increment" ]; then
# get parameters
keystr=$2
# check that key & value are given
if [ "${keystr}" == "" ]; then
echo "# Fail: missing parameter"
exit 1
fi
# set in redis key value cache
redis-cli incr ${keystr} 1>/dev/null
# set in redis the timestamp
timestamp=$(date +%s)
redis-cli set ${keystr}${META_LASTTOUCH_TS} "${timestamp}" 1>/dev/null
##################################
# FOCUS
# signal update rate on value
##################################
# focus (set outdated policy)
elif [ "$1" = "focus" ]; then
# get parameters
keystr=$2
outdatesecs=$3
durationsecs=$4
# if no further parameters - list all values with running focus
if [ "${keystr}" == "" ]; then
echo "# cache values with active focus:"
keylist=$(redis-cli KEYS "*:out")
readarray -t arr <<< "${keylist}"
for key in "${arr[@]}";do
if [ "${key}" == "" ]; then
continue
fi
keyClean=$(echo $key | cut -d ":" -f1)
value=$(redis-cli get "${key}")
echo "${keyClean}=${value}"
done
exit
fi
# delete outdate policy field ==> default
if [ "${outdatesecs}" == "-1" ]; then
echo "# redis-cli del ${keystr}${META_OUTDATED_SECONDS}"
redis-cli del ${keystr}${META_OUTDATED_SECONDS}
exit
fi
# sanatize parameters (if not -1)
outdatesecs="${outdatesecs//[^0-9.]/}"
# check that key & value are given
if [ "${outdatesecs}" == "" ]; then
echo "# Fail: missing parameter"
exit 1
fi
# add an expire flag if given
additionalParams=""
if [ "${durationsecs//[^0-9.]/}" != "" ]; then
additionalParams="EX ${durationsecs//[^0-9.]/}"
fi
# store the seconds policy
echo "# redis-cli set ${keystr}${META_OUTDATED_SECONDS} ${outdatesecs} ${additionalParams}"
redis-cli set ${keystr}${META_OUTDATED_SECONDS} "${outdatesecs}" ${additionalParams}
# set/renew exipire valid flag (important in case the key had before no expire)
redis-cli set ${keystr}${META_VALID_FLAG} "1" EX ${outdatesecs} 1>/dev/null
##################################
# META
# metadata on values
##################################
# meta
elif [ "$1" = "meta" ]; then
# get parameters
keystr=$2
default=$3
# check that key & value are given
if [ "${keystr}" == "" ]; then
echo "# Fail: missing parameter"
exit 1
fi
# get redis basic value
valuestr=$(redis-cli get ${keystr})
echo "value=\"${valuestr}\""
# get META_LASTTOUCH_TS
lasttouch=$(redis-cli get ${keystr}${META_LASTTOUCH_TS})
if [ "${lasttouch}" == "" ]; then
echo "initiated=0"
exit 0
fi
echo "initiated=1"
echo "lasttouch=\"${lasttouch}\""
# get META_OUTDATED_SECONDS
outdatesecs=$(redis-cli get ${keystr}${META_OUTDATED_SECONDS})
if [ "${outdatesecs}" == "" ]; then
# default is -1 --> never outdate
outdatesecs="-1"
fi
echo "outdatesecs=\"${outdatesecs}\""
# get META_VALID_FLAG
valuestr=$(redis-cli get ${keystr}${META_VALID_FLAG})
if [ "${valuestr}" == "" ] && [ "${outdatesecs}" != "-1" ]; then
stillvalid=0
else
stillvalid=1
fi
echo "stillvalid=\"${stillvalid}\""
##################################
# VALID
# check if a value needs update
##################################
# valid
elif [ "$1" = "valid" ]; then
position=0
lasttouch_overall=""
for keystr in $@
do
# skip first parameter from script - thats the action string
((position++))
if [ $position -eq 1 ]; then
echo "# _cache.sh $@"
continue
fi
# check lasttouch for value
lasttouch=$(redis-cli get ${keystr}${META_LASTTOUCH_TS})
#echo "# lasttouch(${lasttouch})"
# no lasttouch entry ==> was not initiated ==> not valid
if [ "${lasttouch}" == "" ]; then
# break loop on first unvalid value found
echo "stillvalid=\"0\""
exit 0
fi
# record the smallest timestamp (oldest date) of all values
if [ "${lasttouch}" != "" ]; then
# find smallest lasttouch
if [ "${lasttouch_overall}" == "" ] || [ ${lasttouch_overall} -gt ${lasttouch} ]; then
lasttouch_overall="${lasttouch}"
fi
fi
# get outdate police of value (outdated = not valid anymore)
outdatesecs=$(redis-cli get ${keystr}${META_OUTDATED_SECONDS})
#echo "# ${keystr}${META_OUTDATED_SECONDS}=\"${outdatesecs}\""
# if outdate policy is default or -1 ==> never outdated
if [ "${outdatesecs}" == "" ] || [ "${outdatesecs}" == "-1" ]; then
continue
fi
# so outdate policy is active - check if valid flag exists
validflag=$(redis-cli get ${keystr}${META_VALID_FLAG})
#echo "# ${keystr}${META_VALID_FLAG}=\"${validflag}\""
# if valid flag exists this value is valid
if [ "${valuestr}" != "" ]; then
continue
fi
# so valid flag does not exists anymore
# ==> this means value is outdated
# break loop and
echo "stillvalid=\"0\""
exit 0
done
# so if all were valid
echo "stillvalid=\"1\""
# calculate age in seconds of oldest entry
if [ "${lasttouch_overall}" != "" ]; then
timestamp=$(date +%s)
age=$(($timestamp-$lasttouch_overall))
echo "age=\"${age}\""
fi
else
echo "# FAIL: parameter not known - run with -h for help"
fi

View File

@ -33,6 +33,7 @@ function blitzhelp() {
echo " debug print debug logs"
echo " debug -l print debug logs with bin link"
echo " patch sync scripts with latest set github and branch"
echo " cache check on chache system state"
echo " github jumping directly into the options to change branch/repo/pr"
echo
echo "Power:"
@ -157,6 +158,11 @@ function headless() {
restart
}
# command: cache
function cache() {
sudo /home/admin/_cache.sh $@
}
# command: torthistx
function torthistx() {
if [ $(cat /mnt/hdd/raspiblitz.conf 2>/dev/null | grep -c "runBehindTor=on") -eq 1 ]; then
@ -164,14 +170,18 @@ function torthistx() {
curl --socks5-hostname localhost:9050 -d $1 -X POST http://explorerzydxu5ecjrkwceayqybizmpjjznk5izmitf2modhcusuqlid.onion/api/tx
else
echo "Not running behind Tor - to install run:"
echo "sudo /home/admin/config.scripts/internet.tor.sh on"
echo "sudo /home/admin/config.scripts/tor.network.sh on"
fi
}
# command: status
# start the status screen in the terminal
function status() {
echo "Gathering data - please wait a moment..."
echo
echo "Keep X pressed to EXIT loop ... (please wait)"
echo
/home/admin/_cache.sh set system_scan_all_temp "1"
sleep 4
while :
do
# show the same info as on LCD screen
@ -181,10 +191,10 @@ function status() {
#echo
#echo -en "Screen is updating in a loop .... press 'x' now to get back to menu."
read -n 1 -t 6 keyPressed
#echo -en "\rGathering information to update info ... please wait. \n"
# check if user wants to abort session
if [ "${keyPressed}" = "x" ]; then
echo
/home/admin/_cache.sh set system_scan_all_temp "0"
echo "Returning to menu ....."
sleep 4
break
@ -294,10 +304,10 @@ if [ -f "/mnt/hdd/raspiblitz.conf" ] && [ $(grep -c "lit=on" < /mnt/hdd/raspibl
--tlscertpath=/home/lit/.lit/tls.cert \
--macaroonpath=/home/lit/.faraday/${chain}net/faraday.macaroon"
alias lit-loop="sudo -u lit loop --rpcserver=localhost:8443 \\
--tlscertpath=/home/lit/.lit/tls.cert \\
--tlscertpath=/home/lit/.lit/tls.cert \\
--macaroonpath=/home/lit/.loop/${chain}net/loop.macaroon"
alias lit-pool="sudo -u lit pool --rpcserver=localhost:8443 \
--tlscertpath=/home/lit/.lit/tls.cert \
--tlscertpath=/home/lit/.lit/tls.cert \
--macaroonpath=/home/lit/.pool/${chain}net/pool.macaroon"
fi
@ -316,7 +326,7 @@ function gettx() {
# command: watchtx
# try to retrieve transaction from mempool or blockchain until certain confirmation target
# is reached and then exit cleanly. Default is to wait for 2 confs and to sleep for 60 secs.
# is reached and then exit cleanly. Default is to wait for 2 confs and to sleep for 60 secs.
# $ watchtx "f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16" 6 30
function watchtx() {
tx_id="${1}"
@ -348,8 +358,8 @@ function watchtx() {
}
# command: notifyme
# A wrapper for blitz.notify.sh that will send a notification using the configured
# method and settings.
# A wrapper for blitz.notify.sh that will send a notification using the configured
# method and settings.
# This makes sense when waiting for commands to finish and then sending a notification.
# $ notifyme "Hello there..!"
# $ ./run_job_which_takes_long.sh && notifyme "I'm done."

View File

@ -1,5 +1,11 @@
#!/bin/bash
# check if started with sudo
if [ "$EUID" -ne 0 ]; then
echo "error='run as root'"
exit 1
fi
# LOGFILE - store debug logs of bootstrap
logFile="/home/admin/raspiblitz.provision-migration.log"
@ -10,26 +16,20 @@ source ${infoFile}
# SETUPFILE - data from setup process
source /var/cache/raspiblitz/temp/raspiblitz.setup
# CONFIGFILE - configuration of RaspiBlitz
configFile="/mnt/hdd/raspiblitz.conf"
# log header
echo "" > ${logFile}
echo "###################################" >> ${logFile}
echo "# _provision.migration.sh" >> ${logFile}
echo "###################################" >> ${logFile}
sudo sed -i "s/^message=.*/message='Provision Migration'/g" ${infoFile}
/home/admin/_cache.sh set message "Provision Migration"
source <(/home/admin/config.scripts/blitz.datadrive.sh status)
if [ "${hddGotMigrationData}" == "" ]; then
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='config: missing hddGotMigrationData'/g" ${infoFile}
echo "FAIL see ${logFile}"
echo "FAIL: missing hddGotMigrationData in (${infoFile})!" >> ${logFile}
/home/admin/config.scripts/blitz.error.sh _provision.migration.sh "missing-hostnamemigrationdata" "missing hddGotMigrationData" "" ${logFile}
exit 2
fi
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status)
err=""
nodenameUpperCase=$(echo "${hddGotMigrationData}" | tr "[a-z]" "[A-Z]")
echo "**************************************************" >> ${logFile}
@ -38,16 +38,13 @@ echo "**************************************************" >> ${logFile}
echo "- started ..." >> ${logFile}
source <(sudo /home/admin/config.scripts/blitz.migration.sh migration-${hddGotMigrationData})
if [ "${err}" != "" ]; then
echo "MIGRATION FAILED: ${err}" >> ${logFile}
echo "Format data disk on laptop & recover funds with fresh sd card using seed words + static channel backup." >> ${logFile}
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='migration failed'/g" ${infoFile}
/home/admin/config.scripts/blitz.error.sh _provision.migration.sh "migration-failed" "${err}" "Recover funds with fresh sd card using seed words + static channel backup." ${logFile}
exit 3
fi
# make sure for the rest of the seup info is set correctly
sudo sed -i "s/^network=.*/network=bitcoin/g" ${infoFile}
sudo sed -i "s/^chain=.*/chain=main/g" ${infoFile}
/home/admin/config.scripts/blitz.conf.sh set network "bitcoin"
/home/admin/config.scripts/blitz.conf.sh set chain "main"
# set Password B
echo "## SETTING PASSWORD B" >> ${logFile}
@ -57,20 +54,21 @@ if [ "${setPasswordB}" == "1" ]; then
echo "# setting PASSWORD B" >> ${logFile}
/home/admin/config.scripts/blitz.setpassword.sh b "${passwordB}" >> ${logFile}
else
echo "FAIL: Password B should be set but was empty! Running with default." >> ${logFile}
/home/admin/config.scripts/blitz.error.sh _provision.migration.sh "missing-passwordb" "FAIL: Password B should be set but was empty! Running with default." "" ${logFile}
exit 4
fi
else
echo "WARN: setPasswordB!=1 this not normal on migration! Running with default." >> ${logFile}
/home/admin/config.scripts/blitz.error.sh _provision.migration.sh "missing-setpasswordb" "setPasswordB!=1 this not normal on migration! Running with default." "" ${logFile}
exit 5
fi
# if free space is lower than 100GB (100000000) delete backup files
if [ "${hddDataFreeKB}" != "" ] && [ ${hddDataFreeKB} -lt 407051412 ]; then
echo "- free space of data disk is low ... deleting 'backup_migration'" >> ${logFile}
sudo rm -R /mnt/hdd/backup_migration
rm -R /mnt/hdd/backup_migration
else
echo "- old data of ${nodenameUpperCase} can be found in '/mnt/hdd/backup_migration'" >> ${logFile}
fi
echo "OK MIGRATION" >> ${logFile}
echo "END Migration" >> ${logFile}
exit 0
exit 0

View File

@ -1,5 +1,11 @@
#!/bin/bash
# check if started with sudo
if [ "$EUID" -ne 0 ]; then
echo "error='run as root'"
exit 1
fi
# this provision file is just executed on fresh setups
# not on recoveries or updates
@ -23,35 +29,29 @@ echo "" > ${logFile}
echo "###################################" >> ${logFile}
echo "# _provision.setup.sh" >> ${logFile}
echo "###################################" >> ${logFile}
sudo sed -i "s/^message=.*/message='Provision Setup'/g" ${infoFile}
###################################
# Preserve SSH keys
# just copy dont link anymore
# see: https://github.com/rootzoll/raspiblitz/issues/1798
sed -i "s/^message=.*/message='SSH Keys'/g" ${infoFile}
/home/admin/_cache.sh set message "SSH Keys"
# link ssh directory from SD card to HDD
/home/admin/config.scripts/blitz.ssh.sh backup
###################################
# Prepare Blockchain Service
sed -i "s/^message=.*/message='Blockchain Setup'/g" ${infoFile}
/home/admin/_cache.sh set message "Blockchain Setup"
source <(/home/admin/_cache.sh get network chain hddBlocksBitcoin)
if [ "${network}" == "" ]; then
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='config: missing network'/g" ${infoFile}
echo "FAIL see ${logFile}"
echo "FAIL: missing network in (${setupFile})!" >> ${logFile}
exit 20
/home/admin/config.scripts/blitz.error.sh _provision.setup.sh "missing-network" "" "" ${logFile}
exit 2
fi
if [ "${chain}" == "" ]; then
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='config: missing chain'/g" ${infoFile}
echo "FAIL see ${logFile}"
echo "FAIL: missing chain in (${setupFile})!" >> ${logFile}
exit 2
/home/admin/config.scripts/blitz.error.sh _provision.setup.sh "missing-chain" "" "" ${logFile}
exit 3
fi
# copy configs files and directories
@ -74,7 +74,7 @@ chown -R admin:admin /home/admin/.${network} >>${logFile} 2>&1
confExists=$(sudo ls /mnt/hdd/${network}/${network}.conf | grep -c "${network}.conf")
echo "File Exists: /mnt/hdd/${network}/${network}.conf --> ${confExists}" >> ${logFile}
# set password B as RPC password
# set password B as RPC password (from setup file)
echo "# setting PASSWORD B" >> ${logFile}
/home/admin/config.scripts/blitz.setpassword.sh b "${passwordB}" >> ${logFile}
@ -119,9 +119,7 @@ do
sync
loopcount=$(($loopcount +1))
if [ ${loopcount} -gt 50 ]; then
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='setup: failed ${network}'/g" ${infoFile}
echo "FAIL: setup: failed ${network}" >> ${logFile}
/home/admin/config.scripts/blitz.error.sh _provision.setup.sh "btc-testrun-fail" "${network}d not running" "sudo -u bitcoin ${network}-cli getblockchaininfo | grep "initialblockdownload" -c --> ${bitcoinRunning}" ${logFile}
exit 4
fi
done
@ -130,14 +128,20 @@ echo "OK ${network} startup successful " >> ${logFile}
###################################
# Prepare Lightning
source /mnt/hdd/raspiblitz.conf
echo "Prepare Lightning (${lightning})" >> ${logFile}
if [ "${hostname}" == "" ]; then
/home/admin/config.scripts/blitz.error.sh _provision.setup.sh "missing-hostname" "" "" ${logFile}
exit 41
fi
if [ "${lightning}" != "lnd" ]; then
###################################
# Remove LND from systemd
echo "Remove LND" >> ${logFile}
sudo sed -i "s/^message=.*/message='Deactivate Lightning'/g" ${infoFile}
/home/admin/_cache.sh set message "Deactivate Lightning"
sudo systemctl disable lnd
sudo rm /etc/systemd/system/lnd.service 2>/dev/null
sudo systemctl daemon-reload
@ -148,30 +152,24 @@ if [ "${lightning}" == "lnd" ]; then
###################################
# LND
echo "############## Setup LND" >> ${logFile}
sudo sed -i "s/^message=.*/message='LND Setup'/g" ${infoFile}
/home/admin/_cache.sh set message "LND Setup"
# password C (raspiblitz.setup)
if [ "${passwordC}" == "" ]; then
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='config: missing passwordC'/g" ${infoFile}
echo "FAIL see ${logFile}"
echo "FAIL: missing passwordC in (${setupFile})!" >> ${logFile}
/home/admin/config.scripts/blitz.error.sh _provision.setup.sh "missing-passwordc" "config: missing passwordC" "" ${logFile}
exit 5
fi
# if user uploaded an LND rescue file
# if user uploaded an LND rescue file (raspiblitz.setup)
if [ "${lndrescue}" != "" ]; then
echo "Restore LND data from uploaded rescue file ${lndrescue} ..." >> ${logFile}
source <(sudo /home/admin/config.scripts/lnd.backup.sh lnd-import ${lndrescue})
if [ "${error}" != "" ]; then
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='setup: lnd import backup failed'/g" ${infoFile}
echo "FAIL see ${logFile}"
echo "FAIL: setup: lnd import backup failed" >> ${logFile}
echo "${error}" >> ${logFile}
/home/admin/config.scripts/blitz.error.sh _provision.setup.sh "lndrescue-import" "setup: lnd import backup failed" "${error}" ${logFile}
exit 6
fi
else
# preparing new LND config
# preparing new LND config (raspiblitz.setup)
echo "Creating new LND config ..." >> ${logFile}
sudo -u bitcoin mkdir /mnt/hdd/lnd 2> /dev/null
sudo cp /home/admin/assets/lnd.bitcoin.conf /mnt/hdd/lnd/lnd.conf
@ -186,16 +184,13 @@ if [ "${lightning}" == "lnd" ]; then
# check if now a config exists
configLinkedCorrectly=$(sudo ls sudo ls /home/bitcoin/.lnd/lnd.conf | grep -c "lnd.conf")
if [ "${configLinkedCorrectly}" != "1" ]; then
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='setup: lnd conf link broken'/g" ${infoFile}
echo "FAIL see ${logFile}"
echo "FAIL: setup: lnd conf link broken" >> ${logFile}
/home/admin/config.scripts/blitz.error.sh _provision.setup.sh "lnd-link-broken" "link /home/bitcoin/.lnd/lnd.conf broken" "" ${logFile}
exit 7
fi
# Init LND service & start
echo "*** Init LND Service & Start ***" >> ${logFile}
sudo sed -i "s/^message=.*/message='LND Testrun'/g" ${infoFile}
/home/admin/_cache.sh set message "LND Testrun"
# just in case
sudo systemctl stop lnd 2>/dev/null
@ -208,13 +203,14 @@ if [ "${lightning}" == "lnd" ]; then
echo "Starting LND Service ..." >> ${logFile}
sudo systemctl enable lnd >> ${logFile}
sudo systemctl start lnd >> ${logFile}
echo "Starting LND Service ... executed" >> ${logFile}
# check that lnd started
lndRunning=0
loopcount=0
while [ ${lndRunning} -eq 0 ]
do
lndRunning=$(sudo systemctl status lnd.service | grep -c running)
lndRunning=$(systemctl status lnd.service | grep -c running)
if [ ${lndRunning} -eq 0 ]; then
date +%s >> ${logFile}
echo "LND not ready yet ... waiting another 60 seconds." >> ${logFile}
@ -222,10 +218,7 @@ if [ "${lightning}" == "lnd" ]; then
fi
loopcount=$(($loopcount +1))
if [ ${loopcount} -gt 100 ]; then
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='setup: failed lnd start'/g" ${infoFile}
echo "FAIL see ${logFile}"
echo "FAIL: setup: failed lnd start" >> ${logFile}
/home/admin/config.scripts/blitz.error.sh _provision.setup.sh "lnd-start-fail" "lnd service not getting to running status" "sudo systemctl status lnd.service | grep -c running --> ${lndRunning}" ${logFile}
exit 8
fi
done
@ -233,25 +226,18 @@ if [ "${lightning}" == "lnd" ]; then
sleep 10
# Check LND health/fails (to be extended)
tlsExists=$(sudo ls /mnt/hdd/lnd/tls.cert 2>/dev/null | grep -c "tls.cert")
tlsExists=$(ls /mnt/hdd/lnd/tls.cert 2>/dev/null | grep -c "tls.cert")
if [ ${tlsExists} -eq 0 ]; then
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='setup: missing lnd tls'/g" ${infoFile}
echo "FAIL see ${logFile}"
echo "FAIL: setup: missing lnd tls" >> ${logFile}
/home/admin/config.scripts/blitz.error.sh _provision.setup.sh "lnd-no-tls" "lnd not created TLS cert" "no /mnt/hdd/lnd/tls.cert" ${logFile}
exit 9
fi
# import static channel backup if was uploaded
if [ "${staticchannelbackup}" != "" ]; then
echo "Preparing static channel backup file ${staticchannelbackup} ..." >> ${logFile}
source <(sudo /home/admin/config.scripts/lnd.backup.sh scb-import ${staticchannelbackup})
source <(/home/admin/config.scripts/lnd.backup.sh scb-import ${staticchannelbackup})
if [ "${error}" != "" ]; then
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='setup: lnd import SCB failed'/g" ${infoFile}
echo "FAIL see ${logFile}"
echo "FAIL: setup: lnd import SCB failed" >> ${logFile}
echo "${error}" >> ${logFile}
/home/admin/config.scripts/blitz.error.sh _provision.setup.sh "lnd-scb-import" "lnd.backup.sh scb-import returned error" "/home/admin/config.scripts/lnd.backup.sh scb-import ${staticchannelbackup} --> ${error}" ${logFile}
exit 10
fi
fi
@ -260,33 +246,23 @@ if [ "${lightning}" == "lnd" ]; then
if [ "${seedWords}" != "" ] && [ "${staticchannelbackup}" != "" ]; then
echo "WALLET --> SEED + SCB " >> ${logFile}
sudo sed -i "s/^message=.*/message='LND Wallet (SEED & SCB)'/g" ${infoFile}
if ! pip list | grep grpc; then sudo -H python3 -m pip install grpcio==1.38.1; fi
sudo /home/admin/config.scripts/lnd.initwallet.py scb mainnet ${passwordC} "${seedWords}" "${staticchannelbackup}" ${seedPassword}
/home/admin/_cache.sh set message "LND Wallet (SEED & SCB)"
if ! pip list | grep grpc; then sudo -H python3 -m pip install grpcio==1.38.1; fi
source <(/home/admin/config.scripts/lnd.initwallet.py scb mainnet ${passwordC} "${seedWords}" "${staticchannelbackup}" ${seedPassword})
if [ "${err}" != "" ]; then
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='setup: lnd wallet SCB failed'/g" ${infoFile}
echo "FAIL see ${logFile}"
echo "FAIL: setup: lnd wallet SCB failed" >> ${logFile}
echo "${err}" >> ${logFile}
echo "${errMore}" >> ${logFile}
/home/admin/config.scripts/blitz.error.sh _provision.setup.sh "lnd-wallet-seed+scb" "lnd.initwallet.py scb returned error" "/home/admin/config.scripts/lnd.initwallet.py scb mainnet ... --> ${err} + ${errMore}" ${logFile}
exit 11
fi
# WALLET --> SEED
elif [ "${seedWords}" != "" ]; then
echo "WALLET --> SEED" >> ${logFile}
sudo sed -i "s/^message=.*/message='LND Wallet (SEED)'/g" ${infoFile}
echo "WALLET --> SEED" >> ${logFile}
/home/admin/_cache.sh set message "LND Wallet (SEED)"
if ! pip list | grep grpc; then sudo -H python3 -m pip install grpcio==1.38.1; fi
sudo /home/admin/config.scripts/lnd.initwallet.py seed mainnet ${passwordC} "${seedWords}" ${seedPassword}
source <(/home/admin/config.scripts/lnd.initwallet.py seed mainnet ${passwordC} "${seedWords}" ${seedPassword})
if [ "${err}" != "" ]; then
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='setup: lnd wallet SEED failed'/g" ${infoFile}
echo "FAIL see ${logFile}"
echo "FAIL: setup: lnd wallet SEED failed" >> ${logFile}
echo "${err}" >> ${logFile}
echo "${errMore}" >> ${logFile}
/home/admin/config.scripts/blitz.error.sh _provision.setup.sh "lnd-wallet-seed" "lnd.initwallet.py seed returned error" "/home/admin/config.scripts/lnd.initwallet.py seed mainnet ... --> ${err} + ${errMore}" ${logFile}
exit 12
fi
@ -294,14 +270,15 @@ if [ "${lightning}" == "lnd" ]; then
else
echo "WALLET --> NEW" >> ${logFile}
sudo sed -i "s/^message=.*/message='LND Wallet (NEW)'/g" ${infoFile}
if ! pip list | grep grpc; then sudo -H python3 -m pip install grpcio==1.38.1; fi
source <(sudo /home/admin/config.scripts/lnd.initwallet.py new mainnet ${passwordC})
/home/admin/_cache.sh set message "LND Wallet (NEW)"
if ! pip list | grep grpc; then sudo -H python3 -m pip install grpcio==1.38.1; fi
source <(/home/admin/config.scripts/lnd.initwallet.py new mainnet ${passwordC})
if [ "${err}" != "" ]; then
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='setup: lnd wallet SEED failed'/g" ${infoFile}
/home/admin/config.scripts/blitz.error.sh _provision.setup.sh "lnd-wallet-new" "lnd.initwallet.py new returned error" "/home/admin/config.scripts/lnd.initwallet.py new mainnet ... --> ${err} + ${errMore}" ${logFile}
/home/admin/_cache.sh set state "error"
/home/admin/_cache.sh set message "setup: lnd wallet NEW failed"
echo "FAIL see ${logFile}"
echo "FAIL: setup: lnd wallet SEED failed" >> ${logFile}
echo "FAIL: setup: lnd wallet SEED failed (2)" >> ${logFile}
echo "${err}" >> ${logFile}
echo "${errMore}" >> ${logFile}
exit 13
@ -315,14 +292,12 @@ if [ "${lightning}" == "lnd" ]; then
# sync macaroons & TLS to other users
echo "*** Copy LND Macaroons to user admin ***" >> ${logFile}
sudo sed -i "s/^message=.*/message='LND Credentials'/g" ${infoFile}
/home/admin/_cache.sh set message "LND Credentials"
# check if macaroon exists now - if not fail
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
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='setup: lnd no macaroons'/g" ${infoFile}
echo "FAIL: setup: lnd no macaroons" >> ${logFile}
/home/admin/config.scripts/blitz.error.sh _provision.setup.sh "lnd-no-macaroons" "lnd did not create macaroons" "/home/bitcoin/.lnd/data/chain/${network}/${chain}net/admin.macaroon --> missing" ${logFile}
exit 14
fi
@ -332,10 +307,7 @@ if [ "${lightning}" == "lnd" ]; then
# make a final lnd check
source <(/home/admin/config.scripts/lnd.check.sh basic-setup)
if [ "${err}" != "" ]; then
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='setup: lnd wallet SEED failed'/g" ${infoFile}
echo "FAIL: setup: lnd wallet SEED failed" >> ${logFile}
echo "${err}" >> ${logFile}
/home/admin/config.scripts/blitz.error.sh _provision.setup.sh "lnd-check-error" "lnd.check.sh basic-setup with error" "/home/admin/config.scripts/lnd.check.sh basic-setup --> ${err}" ${logFile}
exit 15
fi
@ -351,21 +323,17 @@ if [ "${lightning}" == "cl" ]; then
# c-lightning
echo "############## c-lightning" >> ${logFile}
sudo sed -i "s/^message=.*/message='C-Lightning Install'/g" ${infoFile}
/home/admin/_cache.sh set message "C-Lightning Install"
sudo /home/admin/config.scripts/cl.install.sh on mainnet >> ${logFile}
sudo sed -i "s/^message=.*/message='C-Lightning Setup'/g" ${infoFile}
/home/admin/_cache.sh set message "C-Lightning Setup"
# OLD WALLET FROM CLIGHTNING RESCUE
if [ "${clrescue}" != "" ]; then
echo "Restore CL data from uploaded rescue file ${clrescue} ..." >> ${logFile}
source <(sudo /home/admin/config.scripts/cl.backup.sh cl-import ${clrescue})
source <(/home/admin/config.scripts/cl.backup.sh cl-import ${clrescue})
if [ "${error}" != "" ]; then
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='setup: cl import backup failed'/g" ${infoFile}
echo "FAIL see ${logFile}"
echo "FAIL: setup: cl import backup failed" >> ${logFile}
echo "${error}" >> ${logFile}
/home/admin/config.scripts/blitz.error.sh _provision.setup.sh "cl-import-backup" "cl.backup.sh cl-import with error" "/home/admin/config.scripts/cl.backup.sh cl-import ${clrescue} --> ${error}" ${logFile}
exit 16
fi
@ -373,14 +341,12 @@ if [ "${lightning}" == "cl" ]; then
elif [ "${seedWords}" != "" ]; then
echo "Restore CL wallet from seedWords ..." >> ${logFile}
source <(sudo /home/admin/config.scripts/cl.hsmtool.sh seed-force mainnet "${seedWords}" "${seedPassword}")
source <(/home/admin/config.scripts/cl.hsmtool.sh seed-force mainnet "${seedWords}" "${seedPassword}")
# check if wallet really got created
walletExistsNow=$(sudo ls /home/bitcoin/.lightning/bitcoin/hsm_secret 2>/dev/null | grep -c "hsm_secret")
walletExistsNow=$(ls /home/bitcoin/.lightning/bitcoin/hsm_secret 2>/dev/null | grep -c "hsm_secret")
if [ $walletExistsNow -eq 0 ]; then
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='setup: seed maybe wrong'/g" ${infoFile}
echo "FAIL: setup: no cl wallet created - seed maybe wrong" >> ${logFile}
/home/admin/config.scripts/blitz.error.sh _provision.setup.sh "cl-wallet-seed" "cl.hsmtool.sh seed-force not created wallet" "ls /home/bitcoin/.lightning/bitcoin/hsm_secret --> 0" ${logFile}
exit 17
fi
@ -390,22 +356,18 @@ if [ "${lightning}" == "cl" ]; then
echo "Generate new CL wallet ..." >> ${logFile}
# generate new wallet
source <(sudo /home/admin/config.scripts/cl.hsmtool.sh new-force mainnet)
source <(/home/admin/config.scripts/cl.hsmtool.sh new-force mainnet)
# check if got new seedwords
if [ "${seedwords}" == "" ] || [ "${seedwords6x4}" == "" ]; then
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='setup: no cl seedwords'/g" ${infoFile}
echo "FAIL: setup: no cl seedwords" >> ${logFile}
/home/admin/config.scripts/blitz.error.sh _provision.setup.sh "cl-wallet-new-noseeds" "cl.hsmtool.sh new-force did not returned seedwords" "/home/admin/config.scripts/cl.hsmtool.sh new-force mainnet --> seedwords=''" ${logFile}
exit 18
fi
# check if wallet really got created
walletExistsNow=$(sudo ls /home/bitcoin/.lightning/bitcoin/hsm_secret 2>/dev/null | grep -c "hsm_secret")
if [ $walletExistsNow -eq 0 ]; then
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='setup: no cl wallet created'/g" ${infoFile}
echo "FAIL: setup: no cl wallet created" >> ${logFile}
/home/admin/config.scripts/blitz.error.sh _provision.setup.sh "cl-wallet-new-nowallet" "cl.hsmtool.sh new-force did not created wallet" "/home/bitcoin/.lightning/bitcoin/hsm_secret --> missing" ${logFile}
exit 19
fi
@ -425,6 +387,6 @@ fi
echo "stopping bitcoind for the rest provision again (will start on next boot)" >> ${logFile}
systemctl stop bitcoind >> ${logFile}
sudo sed -i "s/^message=.*/message='Provision Setup Finish'/g" ${infoFile}
/home/admin/_cache.sh set message "Provision Setup Finish"
echo "END Setup" >> ${logFile}
exit 0

View File

@ -1,5 +1,11 @@
#!/bin/bash
# check if started with sudo
if [ "$EUID" -ne 0 ]; then
echo "error='run as root'"
exit 1
fi
# LOGFILE - store debug logs of bootstrap
logFile="/home/admin/raspiblitz.provision-update.log"
@ -18,7 +24,7 @@ echo "" > ${logFile}
echo "###################################" >> ${logFile}
echo "# _provision.update.sh" >> ${logFile}
echo "###################################" >> ${logFile}
sudo sed -i "s/^message=.*/message='Running Data Update'/g" ${infoFile}
/home/admin/_cache.sh set message "Running Data Update"
# HDD BTRFS RAID REPAIR IF NEEDED
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status)
@ -40,15 +46,13 @@ source ${configFile}
# check if config files contains basic: hostname
if [ ${#hostname} -eq 0 ]; then
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='config: missing hostname'/g" ${infoFile}
echo "FAIL see ${logFile}"
echo "FAIL: missing hostname in (${configFile})!" >> ${logFile}
/home/admin/config.scripts/blitz.error.sh _provision.update.sh "missing-hostname" "${setupFile} or ${configFile} contains no hostname" "" ${logFile}
exit 1
fi
# check if config files contain lightning (lnd is default)
if [ "${lightning}" == "" ]; then
# check if config files contain lightning (lnd is default) introduced in v1.7.1
entryExists=$(cat ${configFile} | grep -c "^lightning=")
if [ "${entryExists}" != "1" ]; then
lightning="lnd"
echo "lightning=${lightning}" >> ${configFile}
fi
@ -58,10 +62,7 @@ source /home/admin/_version.info
# check if code version was loaded
if [ ${#codeVersion} -eq 0 ]; then
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='missing /home/admin/_version.info'/g" ${infoFile}
echo "FAIL see ${logFile}"
echo "FAIL: no code version (/home/admin/_version.info) found!" >> ${logFile}
/home/admin/config.scripts/blitz.error.sh _provision.update.sh "missing-version" "missing /home/admin/_version.info" "" ${logFile}
exit 1
fi
@ -143,7 +144,7 @@ if [ "${raspiBlitzVersion}" != "${codeVersion}" ]; then
echo "detected version change ... starting migration script" >> ${logFile}
# nothing specific here yet
echo "OK Done - Updating version in config"
sudo sed -i "s/^raspiBlitzVersion=.*/raspiBlitzVersion='${codeVersion}'/g" ${configFile}
/home/admin/config.scripts/blitz.conf.sh set raspiBlitzVersion "${codeVersion}"
else
echo "OK - version of config data is up to date" >> ${logFile}
fi
@ -151,26 +152,25 @@ fi
# start network service
echo ""
echo "*** Start ${network} (UPDATE) ***" >> ${logFile}
sudo sed -i "s/^message=.*/message='Blockchain Testrun'/g" ${infoFile}
/home/admin/_cache.sh set message "Blockchain Testrun"
echo "- This can take a while .." >> ${logFile}
sudo chown -R bitcoin:bitcoin /mnt/hdd/${network} >>${logFile} 2>&1
sudo cp /home/admin/assets/${network}d.service /etc/systemd/system/${network}d.service
sudo systemctl daemon-reload >> ${logFile}
sudo systemctl enable ${network}d.service >> ${logFile}
sudo systemctl start ${network}d.service >> ${logFile}
chown -R bitcoin:bitcoin /mnt/hdd/${network} >>${logFile} 2>&1
cp /home/admin/assets/${network}d.service /etc/systemd/system/${network}d.service
systemctl daemon-reload >> ${logFile}
systemctl enable ${network}d.service >> ${logFile}
systemctl start ${network}d.service >> ${logFile}
# INSTALL LND on Upadte/Recovery
if [ "${lightning}" == "lnd" ]; then
if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then
# prepare lnd service
sudo cp /home/admin/assets/lnd.service /etc/systemd/system/lnd.service >> ${logFile} 2>&1
cp /home/admin/assets/lnd.service /etc/systemd/system/lnd.service >> ${logFile} 2>&1
# convert old keysend by lndExtraParameter to raspiblitz.conf setting (will be enforced by lnd.check.sh prestart) since 1.7.1
if [ "${lndExtraParameter}" == "--accept-keysend" ]; then
echo "# MIGRATION KEYSEND from lndExtraParameter --> raspiblitz.conf" >> ${logFile}
sudo sed -i '/lndKeysend=.*/d' /mnt/hdd/raspiblitz.conf
echo "lndKeysend=on" >> /mnt/hdd/raspiblitz.conf
sudo sed -i "/^lndExtraParameter=/d" /mnt/hdd/raspiblitz.conf 2>/dev/null
/home/admin/config.scripts/blitz.conf.sh set lndKeysend "on"
/home/admin/config.scripts/blitz.conf.sh delete lndExtraParameter
fi
# if old lnd.conf exists ...
@ -178,61 +178,61 @@ if [ "${lightning}" == "lnd" ]; then
if [ ${configExists} -eq 1 ]; then
# make sure correct file permisions are set
sudo chown bitcoin:bitcoin /mnt/hdd/lnd/lnd.conf
sudo chmod 664 /mnt/hdd/lnd/lnd.conf
chown bitcoin:bitcoin /mnt/hdd/lnd/lnd.conf
chmod 664 /mnt/hdd/lnd/lnd.conf
# make sure additional values are added to [Application Options] since v1.7
echo "- lnd.conf --> checking additional [Application Options] since v1.7" >> ${logFile}
applicationOptionsLineNumber=$(sudo grep -n "\[Application Options\]" /mnt/hdd/lnd/lnd.conf | cut -d ":" -f1)
applicationOptionsLineNumber=$(grep -n "\[Application Options\]" /mnt/hdd/lnd/lnd.conf | cut -d ":" -f1)
if [ "${applicationOptionsLineNumber}" != "" ]; then
applicationOptionsLineNumber="$(($applicationOptionsLineNumber+1))"
# Avoid historical graph data sync
# ignore-historical-gossip-filters=1
configParamExists=$(sudo grep -c "^ignore-historical-gossip-filters=" /mnt/hdd/lnd/lnd.conf)
configParamExists=$(grep -c "^ignore-historical-gossip-filters=" /mnt/hdd/lnd/lnd.conf)
if [ "${configParamExists}" == "0" ]; then
echo " - ADDING 'ignore-historical-gossip-filters'" >> ${logFile}
sudo sed -i "${applicationOptionsLineNumber}iignore-historical-gossip-filters=1" /mnt/hdd/lnd/lnd.conf
sed -i "${applicationOptionsLineNumber}iignore-historical-gossip-filters=1" /mnt/hdd/lnd/lnd.conf
else
echo " - OK 'ignore-historical-gossip-filters' exists (${configParamExists})" >> ${logFile}
fi
# Avoid slow startup time
# sync-freelist=1
configParamExists=$(sudo grep -c "^sync-freelist=" /mnt/hdd/lnd/lnd.conf)
configParamExists=$(grep -c "^sync-freelist=" /mnt/hdd/lnd/lnd.conf)
if [ "${configParamExists}" == "0" ]; then
echo " - ADDING 'sync-freelist'" >> ${logFile}
sudo sed -i "${applicationOptionsLineNumber}isync-freelist=1" /mnt/hdd/lnd/lnd.conf
sed -i "${applicationOptionsLineNumber}isync-freelist=1" /mnt/hdd/lnd/lnd.conf
else
echo " - OK 'sync-freelist' exists (${configParamExists})" >> ${logFile}
fi
# Avoid high startup overhead
# stagger-initial-reconnect=1
configParamExists=$(sudo grep -c "^stagger-initial-reconnect=" /mnt/hdd/lnd/lnd.conf)
configParamExists=$(grep -c "^stagger-initial-reconnect=" /mnt/hdd/lnd/lnd.conf)
if [ "${configParamExists}" == "0" ]; then
echo " - ADDING 'stagger-initial-reconnect'" >> ${logFile}
sudo sed -i "${applicationOptionsLineNumber}istagger-initial-reconnect=1" /mnt/hdd/lnd/lnd.conf
sed -i "${applicationOptionsLineNumber}istagger-initial-reconnect=1" /mnt/hdd/lnd/lnd.conf
else
echo " - OK 'stagger-initial-reconnect' exists (${configParamExists})" >> ${logFile}
fi
# Delete and recreate RPC TLS certificate when details change or cert expires
# tlsautorefresh=1
configParamExists=$(sudo grep -c "^tlsautorefresh=" /mnt/hdd/lnd/lnd.conf)
configParamExists=$(grep -c "^tlsautorefresh=" /mnt/hdd/lnd/lnd.conf)
if [ "${configParamExists}" == "0" ]; then
echo " - ADDING 'tlsautorefresh'" >> ${logFile}
sudo sed -i "${applicationOptionsLineNumber}itlsautorefresh=1" /mnt/hdd/lnd/lnd.conf
sed -i "${applicationOptionsLineNumber}itlsautorefresh=1" /mnt/hdd/lnd/lnd.conf
else
echo " - OK 'tlsautorefresh' exists (${configParamExists})" >> ${logFile}
fi
# Do not include IPs in the RPC TLS certificate
# tlsdisableautofill=1
configParamExists=$(sudo grep -c "^tlsdisableautofill=" /mnt/hdd/lnd/lnd.conf)
configParamExists=$(grep -c "^tlsdisableautofill=" /mnt/hdd/lnd/lnd.conf)
if [ "${configParamExists}" == "0" ]; then
echo " - ADDING 'tlsdisableautofill'" >> ${logFile}
sudo sed -i "${applicationOptionsLineNumber}itlsdisableautofill=1" /mnt/hdd/lnd/lnd.conf
sed -i "${applicationOptionsLineNumber}itlsdisableautofill=1" /mnt/hdd/lnd/lnd.conf
else
echo " - OK 'tlsdisableautofill' exists (${configParamExists})" >> ${logFile}
fi
@ -246,29 +246,19 @@ if [ "${lightning}" == "lnd" ]; then
# start LND service
echo "Starting LND Service ..." >> ${logFile}
sudo systemctl enable lnd >> ${logFile}
sudo systemctl start lnd >> ${logFile}
systemctl enable lnd >> ${logFile}
systemctl start lnd >> ${logFile}
elif [ "${lightning}" == "cl" ]; then
fi
if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then
echo "Install C-lightning on update" >> ${logFile}
sudo sed -i "s/^message=.*/message='C-Lightning Install'/g" ${infoFile}
sudo /home/admin/config.scripts/cl.install.sh on mainnet >> ${logFile}
sudo sed -i "s/^message=.*/message='C-Lightning Setup'/g" ${infoFile}
/home/admin/_cache.sh set message "C-Lightning Install"
/home/admin/config.scripts/cl.install.sh on mainnet >> ${logFile}
/home/admin/_cache.sh set message "C-Lightning Setup"
elif [ "${lightning}" == "none" ]; then
echo "No Lightning" >> ${logFile}
else
sed -i "s/^state=.*/state=error/g" ${infoFile}
sed -i "s/^message=.*/message='unknown lightning (${lightning})'/g" ${infoFile}
echo "FAIL see ${logFile}"
echo "FAIL: unknown lightning (${lightning}) in (${configFile})!" >> ${logFile}
exit 1
fi
fi
echo "END Migration/Init" >> ${logFile}

View File

@ -1,5 +1,11 @@
#!/bin/bash
# check if started with sudo
if [ "$EUID" -ne 0 ]; then
echo "error='run as root'"
exit 1
fi
# This script gets called from a fresh SD card
# starting up that has an config file on HDD
# from old RaspiBlitz or manufacturer to
@ -10,7 +16,6 @@ logFile="/home/admin/raspiblitz.log"
# INFOFILE - state data from bootstrap
infoFile="/home/admin/raspiblitz.info"
infoFileDisplayClass="${displayClass}"
# CONFIGFILE - configuration of RaspiBlitz
configFile="/mnt/hdd/raspiblitz.conf"
@ -25,78 +30,24 @@ echo "" >> ${logFile}
echo "###################################" >> ${logFile}
echo "# _provision_.sh" >> ${logFile}
echo "###################################" >> ${logFile}
sudo sed -i "s/^message=.*/message='Provisioning from Config'/g" ${infoFile}
/home/admin/_cache.sh set message "Provisioning from Config"
# check if there is a config file
configExists=$(ls ${configFile} 2>/dev/null | grep -c '.conf')
if [ ${configExists} -eq 0 ]; then
echo "FAIL: no config file (${configFile}) found to run provision!" >> ${logFile}
/home/admin/config.scripts/blitz.error.sh _provision_.sh "missing-config" "no config file (${configFile}) found to run provision" "" ${logFile}
exit 1
fi
# import config values
source ${configFile}
##########################
# DISPLAY SETTINGS
##########################
# check if the raspiblitz config has a different display mode than the build image
echo "### DISPLAY SETTINGS ###" >> ${logFile}
# OLD: when nothing is set in raspiblitz.conf (<1.7)
existsDisplayClass=$(sudo cat ${configFile} | grep -c "displayClass=")
if [ "${existsDisplayClass}" == "0" ]; then
displayClass="lcd"
fi
# OLD: lcd2hdmi (deprecated)
if [ "${lcd2hdmi}" == "on" ]; then
echo "Convert lcd2hdmi=on to displayClass='hdmi'" >> ${logFile}
sudo sed -i "s/^lcd2hdmi=.*//g" ${configFile}
echo "displayClass=hdmi" >> ${configFile}
displayClass="hdmi"
elif [ "${lcd2hdmi}" != "" ]; then
echo "Remove old lcd2hdmi pramater from config" >> ${logFile}
sudo sed -i "s/^lcd2hdmi=.*//g" ${configFile}
displayClass="lcd"
fi
# OLD: headless (deprecated)
if [ "${headless}" == "on" ]; then
echo "Convert headless=on to displayClass='headless'" >> ${logFile}
sudo sed -i "s/^headless=.*//g" ${configFile}
echo "displayClass=headless" >> ${configFile}
displayClass="headless"
elif [ "${headless}" != "" ]; then
echo "Remove old headless parameter from config" >> ${logFile}
sudo sed -i "s/^headless=.*//g" ${configFile}
displayClass="lcd"
fi
# NEW: decide by displayClass
echo "raspiblitz.info(${infoFileDisplayClass}) raspiblitz.conf(${displayClass})" >> ${logFile}
if [ "${infoFileDisplayClass}" != "" ] && [ "${displayClass}" != "" ]; then
if [ "${infoFileDisplayClass}" != "${displayClass}" ]; then
echo "Need to update displayClass from (${infoFileDisplayClass}) to (${displayClass})'" >> ${logFile}
sudo /home/admin/config.scripts/blitz.display.sh set-display ${displayClass} >> ${logFile}
echo "going into reboot" >> ${logFile}
sudo cp ${logFile} ${logFile}.display.recover
sudo shutdown -r now
exit 0
else
echo "Display Setting is correct ... no need for change" >> ${logFile}
fi
else
echo "WARN values in raspiblitz info and/or conf file seem broken" >> ${logFile}
fi
##########################
# BASIC SYSTEM SETTINGS
##########################
echo "### BASIC SYSTEM SETTINGS ###" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup System .'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup System ."
echo "# Make sure the user bitcoin is in the debian-tor group"
sudo usermod -a -G debian-tor bitcoin
@ -160,7 +111,7 @@ echo "" >> ${logFile}
##########################
# finish setup (SWAP, Benus, Firewall, Update, ..)
sudo sed -i "s/^message=.*/message='Setup System ..'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup System .."
# add bonus scripts (auto install deactivated to reduce third party repos)
mkdir /home/admin/tmpScriptDL
@ -231,7 +182,7 @@ sudo sed -i "s/^setupStep=.*/setupStep=100/g" /home/admin/raspiblitz.info
##########################
# PROVISIONING SERVICES
##########################
sudo sed -i "s/^message=.*/message='Installing Services'/g" ${infoFile}
/home/admin/_cache.sh set message "Installing Services"
echo "### RUNNING PROVISIONING SERVICES ###" >> ${logFile}
@ -241,7 +192,7 @@ echo "Provisioning BLITZ WEB SERVICE - run config script" >> ${logFile}
# BITCOIN INTERIMS UPDATE
if [ ${#bitcoinInterimsUpdate} -gt 0 ]; then
sudo sed -i "s/^message=.*/message='Provisioning Bitcoin Core update'/g" ${infoFile}
/home/admin/_cache.sh set message "Provisioning Bitcoin Core update"
if [ "${bitcoinInterimsUpdate}" == "reckless" ]; then
# recklessly update Bitcoin Core to latest release on GitHub
echo "Provisioning Bitcoin Core reckless interims update" >> ${logFile}
@ -250,7 +201,7 @@ if [ ${#bitcoinInterimsUpdate} -gt 0 ]; then
# when installing the same sd image - this will re-trigger the secure interims update
# if this a update with a newer RaspiBlitz version .. interims update will be ignored
# because standard Bitcoin Core version is most more up to date
echo "Provisioning BItcoin Core tested interims update" >> ${logFile}
echo "Provisioning Bitcoin Core tested interims update" >> ${logFile}
sudo /home/admin/config.scripts/bitcoin.update.sh tested ${bitcoinInterimsUpdate} >> ${logFile}
fi
else
@ -259,7 +210,7 @@ fi
# LND INTERIMS UPDATE
if [ ${#lndInterimsUpdate} -gt 0 ]; then
sudo sed -i "s/^message=.*/message='Provisioning LND update'/g" ${infoFile}
/home/admin/_cache.sh set message "Provisioning LND update"
if [ "${lndInterimsUpdate}" == "reckless" ]; then
# recklessly update LND to latest release on GitHub (just for test & dev nodes)
echo "Provisioning LND reckless interims update" >> ${logFile}
@ -277,7 +228,7 @@ fi
# CL INTERIMS UPDATE
if [ ${#clInterimsUpdate} -gt 0 ]; then
sudo sed -i "s/^message=.*/message='Provisioning CL update'/g" ${infoFile}
/home/admin/_cache.sh set message "Provisioning CL update"
if [ "${clInterimsUpdate}" == "reckless" ]; then
# recklessly update CL to latest release on GitHub (just for test & dev nodes)
echo "Provisioning CL reckless interims update" >> ${logFile}
@ -364,16 +315,16 @@ fi
# TOR
if [ "${runBehindTor}" == "on" ]; then
echo "Provisioning TOR - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup Tor (takes time)'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup Tor (takes time)"
sudo /home/admin/config.scripts/internet.tor.sh on >> ${logFile} 2>&1
else
echo "Provisioning TOR - keep default" >> ${logFile}
echo "Provisioning Tor - keep default" >> ${logFile}
fi
# AUTO PILOT
if [ "${autoPilot}" = "on" ]; then
echo "Provisioning AUTO PILOT - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup AutoPilot'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup AutoPilot"
sudo /home/admin/config.scripts/lnd.autopilot.sh on >> ${logFile} 2>&1
else
echo "Provisioning AUTO PILOT - keep default" >> ${logFile}
@ -382,7 +333,7 @@ fi
# NETWORK UPNP
if [ "${networkUPnP}" = "on" ]; then
echo "Provisioning NETWORK UPnP - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup UPnP'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup UPnP"
sudo /home/admin/config.scripts/network.upnp.sh on >> ${logFile} 2>&1
else
echo "Provisioning NETWORK UPnP - keep default" >> ${logFile}
@ -391,7 +342,7 @@ fi
# LND AUTO NAT DISCOVERY
if [ "${autoNatDiscovery}" = "on" ]; then
echo "Provisioning LND AUTO NAT DISCOVERY - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup AutoNAT'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup AutoNAT"
sudo /home/admin/config.scripts/lnd.autonat.sh on >> ${logFile} 2>&1
else
echo "Provisioning AUTO NAT DISCOVERY - keep default" >> ${logFile}
@ -400,7 +351,7 @@ fi
# DYNAMIC DOMAIN
if [ "${#dynDomain}" -gt 0 ]; then
echo "Provisioning DYNAMIC DOMAIN - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup DynamicDomain'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup DynamicDomain"
sudo /home/admin/config.scripts/internet.dyndomain.sh on ${dynDomain} ${dynUpdateUrl} >> ${logFile} 2>&1
else
echo "Provisioning DYNAMIC DOMAIN - keep default" >> ${logFile}
@ -409,7 +360,7 @@ fi
# RTL (LND)
if [ "${rtlWebinterface}" = "on" ]; then
echo "Provisioning RTL LND - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup RTL (takes time)'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup RTL LND (takes time)"
sudo -u admin /home/admin/config.scripts/bonus.rtl.sh on lnd mainnet >> ${logFile} 2>&1
else
echo "Provisioning RTL LND - keep default" >> ${logFile}
@ -418,7 +369,7 @@ fi
# RTL (CL)
if [ "${crtlWebinterface}" = "on" ]; then
echo "Provisioning RTL CL - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup RTL (takes time)'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup RTL CL (takes time)"
sudo -u admin /home/admin/config.scripts/bonus.rtl.sh on cl mainnet >> ${logFile} 2>&1
else
echo "Provisioning RTL CL - keep default" >> ${logFile}
@ -427,7 +378,7 @@ fi
# SPARKO
if [ "${sparko}" = "on" ]; then
echo "Provisioning Sparko - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup SPARKO'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup SPARKO"
sudo -u admin /home/admin/config.scripts/cl-plugin.sparko.sh on mainnet >> ${logFile} 2>&1
else
echo "Provisioning Sparko - keep default" >> ${logFile}
@ -436,7 +387,7 @@ fi
# clHTTPplugin
if [ "${clHTTPplugin}" = "on" ]; then
echo "Provisioning clHTTPplugin - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup clHTTPplugin'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup clHTTPplugin"
sudo -u admin /home/admin/config.scripts/cl-plugin.http.sh on >> ${logFile} 2>&1
else
echo "Provisioning clHTTPplugin - keep default" >> ${logFile}
@ -445,7 +396,7 @@ fi
# SPARK
if [ "${spark}" = "on" ]; then
echo "Provisioning Spark Wallet - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup SPARK WALLET'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup SPARK WALLET"
sudo -u admin /home/admin/config.scripts/cl.spark.sh on mainnet >> ${logFile} 2>&1
else
echo "Provisioning Spark Wallet - keep default" >> ${logFile}
@ -454,7 +405,7 @@ fi
#LOOP - install only if LiT won't be installed
if [ "${loop}" = "on" ] && [ "${lit}" != "on" ]; then
echo "Provisioning Lightning Loop - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup Lightning Loop'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup Lightning Loop"
sudo -u admin /home/admin/config.scripts/bonus.loop.sh on >> ${logFile} 2>&1
else
echo "Provisioning Lightning Loop - keep default" >> ${logFile}
@ -463,7 +414,7 @@ fi
#BTC RPC EXPLORER
if [ "${BTCRPCexplorer}" = "on" ]; then
echo "Provisioning BTCRPCexplorer - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup BTCRPCexplorer (takes time)'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup BTCRPCexplorer (takes time)"
sudo -u admin /home/admin/config.scripts/bonus.btc-rpc-explorer.sh on >> ${logFile} 2>&1
else
echo "Provisioning BTCRPCexplorer - keep default" >> ${logFile}
@ -472,19 +423,19 @@ fi
#ELECTRS
if [ "${ElectRS}" = "on" ]; then
echo "Provisioning ElectRS - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup ElectRS (takes time)'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup ElectRS (takes time)"
sudo -u admin /home/admin/config.scripts/bonus.electrs.sh on >> ${logFile} 2>&1
else
echo "Provisioning ElectRS - keep default" >> ${logFile}
fi
# BTCPAYSERVER
# BTCPAYSERVER
if [ "${BTCPayServer}" = "on" ]; then
echo "Provisioning BTCPAYSERVER on TOR - running setup" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup BTCPay (takes time)'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup BTCPay (takes time)"
sudo -u admin /home/admin/config.scripts/bonus.btcpayserver.sh on >> ${logFile} 2>&1
else
echo "Provisioning BTCPayServer - keep default" >> ${logFile}
fi
@ -493,7 +444,7 @@ fi
# LNDMANAGE
#if [ "${lndmanage}" = "on" ]; then
# echo "Provisioning lndmanage - run config script" >> ${logFile}
# sudo sed -i "s/^message=.*/message='Setup lndmanage '/g" ${infoFile}
# /home/admin/_cache.sh set message "Setup lndmanage"
# sudo -u admin /home/admin/config.scripts/bonus.lndmanage.sh on >> ${logFile} 2>&1
#else
# echo "Provisioning lndmanage - not active" >> ${logFile}
@ -526,6 +477,7 @@ fi
# CHANTOOLS
if [ "${chantools}" == "on" ]; then
echo "Provisioning chantools - run config script" >> ${logFile}
/home/admin/_cache.sh set message "Setup Chantools"
sudo /home/admin/config.scripts/bonus.chantools.sh on >> ${logFile} 2>&1
else
echo "Provisioning chantools - keep default" >> ${logFile}
@ -534,7 +486,7 @@ fi
# SSH TUNNEL
if [ "${#sshtunnel}" -gt 0 ]; then
echo "Provisioning SSH Tunnel - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup SSH Tunnel'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup SSH Tunnel"
sudo /home/admin/config.scripts/internet.sshtunnel.py restore ${sshtunnel} >> ${logFile} 2>&1
else
echo "Provisioning SSH Tunnel - not active" >> ${logFile}
@ -543,7 +495,7 @@ fi
# ZEROTIER
if [ "${#zerotier}" -gt 0 ] && [ "${zerotier}" != "off" ]; then
echo "Provisioning ZeroTier - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup ZeroTier'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup ZeroTier"
sudo /home/admin/config.scripts/bonus.zerotier.sh on ${zerotier} >> ${logFile} 2>&1
else
echo "Provisioning ZeroTier - not active" >> ${logFile}
@ -556,7 +508,7 @@ if [ ${#lcdrotate} -eq 0 ]; then
fi
if [ "${lcdrotate}" == "0" ]; then
echo "Provisioning LCD rotate - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='LCD Rotate'/g" ${infoFile}
/home/admin/_cache.sh set message "LCD Rotate"
sudo /home/admin/config.scripts/blitz.display.sh rotate ${lcdrotate} >> ${logFile} 2>&1
else
echo "Provisioning LCD rotate - not needed, keep default rotate on" >> ${logFile}
@ -565,7 +517,7 @@ fi
# TOUCHSCREEN
if [ "${#touchscreen}" -gt 0 ]; then
echo "Provisioning Touchscreen - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup Touchscreen'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup Touchscreen"
sudo /home/admin/config.scripts/blitz.touchscreen.sh ${touchscreen} >> ${logFile} 2>&1
else
echo "Provisioning Touchscreen - not active" >> ${logFile}
@ -574,7 +526,7 @@ fi
# UPS
if [ "${#ups}" -gt 0 ]; then
echo "Provisioning UPS - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup UPS'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup UPS"
sudo /home/admin/config.scripts/blitz.ups.sh on ${ups} >> ${logFile} 2>&1
else
echo "Provisioning UPS - not active" >> ${logFile}
@ -583,7 +535,7 @@ fi
# LNbits
if [ "${LNBits}" = "on" ]; then
echo "Provisioning LNbits - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup LNbits '/g" ${infoFile}
/home/admin/_cache.sh set message "Setup LNbits"
sudo -u admin /home/admin/config.scripts/bonus.lnbits.sh on >> ${logFile} 2>&1
else
echo "Provisioning LNbits - keep default" >> ${logFile}
@ -592,7 +544,7 @@ fi
# JoinMarket
if [ "${joinmarket}" = "on" ]; then
echo "Provisioning JoinMarket - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup JoinMarket'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup JoinMarket"
sudo /home/admin/config.scripts/bonus.joinmarket.sh on >> ${logFile} 2>&1
else
echo "Provisioning JoinMarket - keep default" >> ${logFile}
@ -601,7 +553,7 @@ fi
# Specter
if [ "${specter}" = "on" ]; then
echo "Provisioning Specter - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup Specter'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup Specter"
sudo -u admin /home/admin/config.scripts/bonus.specter.sh on >> ${logFile} 2>&1
else
echo "Provisioning Specter - keep default" >> ${logFile}
@ -610,7 +562,7 @@ fi
# Faraday
if [ "${faraday}" = "on" ]; then
echo "Provisioning Faraday - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup Faraday'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup Faraday"
sudo -u admin /home/admin/config.scripts/bonus.faraday.sh on >> ${logFile} 2>&1
else
echo "Provisioning Faraday - keep default" >> ${logFile}
@ -619,7 +571,7 @@ fi
# BOS
if [ "${bos}" = "on" ]; then
echo "Provisioning Balance of Satoshis - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup Balance of Satoshis'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup Balance of Satoshis"
sudo -u admin /home/admin/config.scripts/bonus.bos.sh on >> ${logFile} 2>&1
else
echo "Provisioning Balance of Satoshis - keep default" >> ${logFile}
@ -628,7 +580,7 @@ fi
# thunderhub
if [ "${thunderhub}" = "on" ]; then
echo "Provisioning ThunderHub - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup ThunderHub'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup ThunderHub"
sudo -u admin /home/admin/config.scripts/bonus.thunderhub.sh on >> ${logFile} 2>&1
else
echo "Provisioning ThunderHub - keep default" >> ${logFile}
@ -637,7 +589,7 @@ fi
# mempool space
if [ "${mempoolExplorer}" = "on" ]; then
echo "Provisioning MempoolSpace - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup Mempool Space'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup Mempool Space"
sudo -u admin /home/admin/config.scripts/bonus.mempool.sh on >> ${logFile} 2>&1
else
echo "Provisioning Mempool Explorer - keep default" >> ${logFile}
@ -646,7 +598,7 @@ fi
# letsencrypt
if [ "${letsencrypt}" = "on" ]; then
echo "Provisioning letsencrypt - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup letsencrypt'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup letsencrypt"
sudo -u admin /home/admin/config.scripts/bonus.letsencrypt.sh on >> ${logFile} 2>&1
else
echo "Provisioning letsencrypt - keep default" >> ${logFile}
@ -655,7 +607,7 @@ fi
# kindle-display
if [ "${kindleDisplay}" = "on" ]; then
echo "Provisioning kindle-display - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup kindle-display'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup kindle-display"
sudo -u admin /home/admin/config.scripts/bonus.kindle-display.sh on >> ${logFile} 2>&1
else
echo "Provisioning kindle-display - keep default" >> ${logFile}
@ -664,7 +616,7 @@ fi
# pyblock
if [ "${pyblock}" = "on" ]; then
echo "Provisioning pyblock - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup pyblock'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup pyblock"
sudo -u admin /home/admin/config.scripts/bonus.pyblock.sh on >> ${logFile} 2>&1
else
echo "Provisioning pyblock - keep default" >> ${logFile}
@ -673,7 +625,7 @@ fi
# stacking-sats-kraken
if [ "${stackingSatsKraken}" = "on" ]; then
echo "Provisioning Stacking Sats Kraken - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup Stacking Sats Kraken'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup Stacking Sats Kraken"
sudo -u admin /home/admin/config.scripts/bonus.stacking-sats-kraken.sh on >> ${logFile} 2>&1
else
echo "Provisioning Stacking Sats Kraken - keep default" >> ${logFile}
@ -682,7 +634,7 @@ fi
# Pool - install only if LiT won't be installed
if [ "${pool}" = "on" ] && [ "${lit}" != "on" ]; then
echo "Provisioning Pool - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup Pool'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup Pool"
sudo -u admin /home/admin/config.scripts/bonus.pool.sh on >> ${logFile} 2>&1
else
echo "Provisioning Pool - keep default" >> ${logFile}
@ -691,7 +643,7 @@ fi
# lit (make sure to be installed after RTL)
if [ "${lit}" = "on" ]; then
echo "Provisioning LIT - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup LIT'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup LIT"
sudo -u admin /home/admin/config.scripts/bonus.lit.sh on >> ${logFile} 2>&1
else
echo "Provisioning LIT - keep default" >> ${logFile}
@ -700,7 +652,7 @@ fi
# sphinxrelay
if [ "${sphinxrelay}" = "on" ]; then
echo "Sphinx-Relay - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup Sphinx-Relay'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup Sphinx-Relay"
sudo -u admin /home/admin/config.scripts/bonus.sphinxrelay.sh on >> ${logFile} 2>&1
else
echo "Sphinx-Relay - keep default" >> ${logFile}
@ -709,7 +661,7 @@ fi
# circuitbreaker
if [ "${circuitbreaker}" = "on" ]; then
echo "Provisioning CircuitBreaker - run config script" >> ${logFile}
sudo sed -i "s/^message=.*/message='Setup CircuitBreaker'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup CircuitBreaker"
sudo -u admin /home/admin/config.scripts/bonus.circuitbreaker.sh on >> ${logFile} 2>&1
else
echo "Provisioning CircuitBreaker - keep default" >> ${logFile}
@ -719,6 +671,7 @@ fi
customInstallAvailable=$(sudo ls /mnt/hdd/app-data/custom-installs.sh 2>/dev/null | grep -c "custom-installs.sh")
if [ ${customInstallAvailable} -gt 0 ]; then
echo "Running the custom install script .." >> ${logFile}
/home/admin/_cache.sh set message "Running Custom Install Script"
# copy script over to admin (in case HDD is not allowing exec)
sudo cp -av /mnt/hdd/app-data/custom-installs.sh /home/admin/custom-installs.sh >> ${logFile}
# make sure script is executable
@ -760,7 +713,7 @@ if [ ${confExists} -eq 0 ]; then
fi
# signal setup done
sudo sed -i "s/^message=.*/message='Setup Done'/g" ${infoFile}
/home/admin/_cache.sh set message "Setup Done"
# set the local network hostname (just if set in config - will not be set anymore by default in newer version)
# have at the end - see https://github.com/rootzoll/raspiblitz/issues/462
@ -811,7 +764,7 @@ if [ "${lightning}" == "lnd" ];then
oldPasswordC=$(sudo cat /mnt/hdd/passwordc.flag)
if ! pip list | grep grpc; then sudo -H python3 -m pip install grpcio==1.38.1; fi
sudo /home/admin/config.scripts/lnd.initwallet.py change-password mainnet "${oldPasswordC}" "${passwordC}" >> ${logFile}
sudo shred -u /mnt/hdd/passwordc.flag
sudo shred -u /mnt/hdd/passwordc.flag
else
echo "No /mnt/hdd/passwordc.flag" >> ${logFile}
fi

View File

@ -1,10 +1,8 @@
#!/bin/bash
# script for custom tmux status bar
configFile="/mnt/hdd/raspiblitz.conf"
if [ -f "$configFile" ]; then
source ${configFile} 2>/dev/null
if [ -f "/mnt/hdd/raspiblitz.conf" ]; then
source /mnt/hdd/raspiblitz.conf 2>/dev/null
echo "${hostname}"
else
#echo "$configFile does not exist"

View File

@ -1,10 +1,8 @@
#!/bin/bash
# script for custom tmux status bar
configFile="/mnt/hdd/raspiblitz.conf"
if [ -f "$configFile" ]; then
source ${configFile} 2>/dev/null
if [ -f "/mnt/hdd/raspiblitz.conf" ]; then
source /mnt/hdd/raspiblitz.conf 2>/dev/null
echo " ${chain}net "
else
#echo "$configFile does not exist"

View File

@ -1,12 +1,10 @@
#!/bin/bash
# script for custom tmux status bar
configFile="/mnt/hdd/raspiblitz.conf"
if [ -f "$configFile" ]; then
source ${configFile} 2>/dev/null
if [ -f "/mnt/hdd/raspiblitz.conf" ]; then
source /mnt/hdd/raspiblitz.conf 2>/dev/null
echo " ${network} "
else
#echo "$configFile does not exist"
echo " unknown "
fi
fi

View File

@ -185,48 +185,48 @@ datadir=/mnt/hdd/bitcoin
fi
# make sure rpcbind is correctly configured
sudo sed -i s/^rpcbind=/main.rpcbind=/g /mnt/hdd/${network}/${network}.conf
if [ $(grep -c "rpcallowip" < /mnt/hdd/${network}/${network}.conf) -gt 0 ];then
if [ $(grep -c "${bitcoinprefix}.rpcbind=" < /mnt/hdd/${network}/${network}.conf) -eq 0 ];then
sudo sed -i s/^rpcbind=/main.rpcbind=/g /mnt/hdd/bitcoin/bitcoin.conf
if [ $(grep -c "rpcallowip" < /mnt/hdd/bitcoin/bitcoin.conf) -gt 0 ];then
if [ $(grep -c "${bitcoinprefix}.rpcbind=" < /mnt/hdd/bitcoin/bitcoin.conf) -eq 0 ];then
echo "\
${bitcoinprefix}.rpcbind=127.0.0.1"|\
sudo tee -a /mnt/hdd/${network}/${network}.conf
sudo tee -a /mnt/hdd/bitcoin/bitcoin.conf
fi
fi
# correct rpcport entry
sudo sed -i s/^rpcport=/main.rpcport=/g /mnt/hdd/${network}/${network}.conf
if [ $(grep -c "${bitcoinprefix}.rpcport" < /mnt/hdd/${network}/${network}.conf) -eq 0 ];then
sudo sed -i s/^rpcport=/main.rpcport=/g /mnt/hdd/bitcoin/bitcoin.conf
if [ $(grep -c "${bitcoinprefix}.rpcport" < /mnt/hdd/bitcoin/bitcoin.conf) -eq 0 ];then
echo "\
${bitcoinprefix}.rpcport=${rpcprefix}8332"|\
sudo tee -a /mnt/hdd/${network}/${network}.conf
sudo tee -a /mnt/hdd/bitcoin/bitcoin.conf
fi
# correct zmq entry
sudo sed -i s/^zmqpubraw/main.zmqpubraw/g /mnt/hdd/${network}/${network}.conf
if [ $(grep -c "${bitcoinprefix}.zmqpubrawblock" < /mnt/hdd/${network}/${network}.conf) -eq 0 ];then
sudo sed -i s/^zmqpubraw/main.zmqpubraw/g /mnt/hdd/bitcoin/bitcoin.conf
if [ $(grep -c "${bitcoinprefix}.zmqpubrawblock" < /mnt/hdd/bitcoin/bitcoin.conf) -eq 0 ];then
echo "\
${bitcoinprefix}.zmqpubrawblock=tcp://127.0.0.1:${zmqprefix}332
${bitcoinprefix}.zmqpubrawtx=tcp://127.0.0.1:${zmqprefix}333"|\
sudo tee -a /mnt/hdd/${network}/${network}.conf
sudo tee -a /mnt/hdd/bitcoin/bitcoin.conf
fi
# addnode
if [ ${bitcoinprefix} = signet ];then
if [ $(grep -c "${bitcoinprefix}.addnode" < /mnt/hdd/${network}/${network}.conf) -eq 0 ];then
if [ $(grep -c "${bitcoinprefix}.addnode" < /mnt/hdd/bitcoin/bitcoin.conf) -eq 0 ];then
echo "\
signet.addnode=s7fcvn5rblem7tiquhhr7acjdhu7wsawcph7ck44uxyd6sismumemcyd.onion:38333
signet.addnode=6megrst422lxzsqvshkqkg6z2zhunywhyrhy3ltezaeyfspfyjdzr3qd.onion:38333
signet.addnode=jahtu4veqnvjldtbyxjiibdrltqiiighauai7hmvknwxhptsb4xat4qd.onion:38333
signet.addnode=f4kwoin7kk5a5kqpni7yqe25z66ckqu6bv37sqeluon24yne5rodzkqd.onion:38333
signet.addnode=nsgyo7begau4yecc46ljfecaykyzszcseapxmtu6adrfagfrrzrlngyd.onion:38333"|\
sudo tee -a /mnt/hdd/${network}/${network}.conf
sudo tee -a /mnt/hdd/bitcoin/bitcoin.conf
fi
fi
removeParallelService
if [ ${CHAIN} = mainnet ];then
sudo cp /home/admin/assets/${network}d.service /etc/systemd/system/${network}d.service
sudo cp /home/admin/assets/bitcoind.service /etc/systemd/system/bitcoind.service
else
# /etc/systemd/system/${prefix}bitcoind.service
echo "
@ -281,7 +281,8 @@ alias ${prefix}bitcoinlog=\"sudo tail -n 30 -f ${bitcoinlogpath}\"\
fi
sudo chown admin:admin /home/admin/_aliases
source /home/admin/raspiblitz.info
source <(/home/admin/_cache.sh get state)
if [ "${state}" == "ready" ]; then
echo "# OK - the ${prefix}bitcoind.service is enabled, system is ready so starting service"
sudo systemctl start ${prefix}bitcoind
@ -307,17 +308,11 @@ alias ${prefix}bitcoinlog=\"sudo tail -n 30 -f ${bitcoinlogpath}\"\
source /mnt/hdd/raspiblitz.conf
# add default value to raspi config if needed
if ! grep -Eq "^${CHAIN}=" /mnt/hdd/raspiblitz.conf; then
NEWENTRY="${CHAIN}=off"
sudo /bin/sh -c "echo '$NEWENTRY' >> /mnt/hdd/raspiblitz.conf"
fi
# switch on
if [ "$1" = "1" ] || [ "$1" = "on" ]; then
installParallelService
# setting value in raspi blitz config
sudo sed -i "s/^${CHAIN}=.*/${CHAIN}=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ${CHAIN} "on"
exit 0
fi
@ -326,7 +321,7 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
echo "# Uninstall Bitcoin Core instance on ${CHAIN}"
removeParallelService
# setting value in raspi blitz config
sudo sed -i "s/^${CHAIN}=.*/${CHAIN}=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ${CHAIN} "off"
exit 0
fi

View File

@ -0,0 +1,309 @@
#!/bin/bash
# command info
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
echo "monitor and troubleshot the bitcoin network"
echo "bitcoin.monitor.sh [mainnet|testnet|signet] status"
echo "bitcoin.monitor.sh [mainnet|testnet|signet] info"
echo "bitcoin.monitor.sh [mainnet|testnet|signet] mempool"
echo "bitcoin.monitor.sh [mainnet|testnet|signet] network"
echo "bitcoin.monitor.sh [mainnet] peer-kickstart [ipv4|ipv6|tor|auto]"
echo "bitcoin.monitor.sh [mainnet] peer-disconnectall"
exit 1
fi
# check if started with sudo
if [ "$EUID" -ne 0 ]; then
echo "error='run as root'"
exit 1
fi
# set based on network type
if [ "$1" == "mainnet" ]; then
bitcoincli_alias="/usr/local/bin/bitcoin-cli -datadir=/home/bitcoin/.bitcoin -rpcport=8332"
service_alias="bitcoind"
elif [ "$1" == "testnet" ]; then
bitcoincli_alias="/usr/local/bin/bitcoin-cli -datadir=/home/bitcoin/.bitcoin -rpcport=18332"
service_alias="tbitcoind"
elif [ "$1" == "signet" ]; then
bitcoincli_alias="/usr/local/bin/bitcoin-cli -datadir=/home/bitcoin/.bitcoin -rpcport=38332"
service_alias="sbitcoind"
else
echo "error='not supported net'"
exit 1
fi
######################################################
# STATUS
# check general status info
######################################################
if [ "$2" = "status" ]; then
btc_version=$($bitcoincli_alias -version 2>/dev/null | cut -d ' ' -f6)
btc_running=$(systemctl status $service_alias 2>/dev/null | grep -c "active (running)")
btc_ready="0"
btc_online="0"
btc_error_short=""
btc_error_full=""
if [ "${btc_running}" != "0" ]; then
btc_running="1"
# test connection - record win & fail info
randStr=$(echo "$RANDOM")
rm /var/cache/raspiblitz/.bitcoind-${randStr}.out 2>/dev/null
rm /var/cache/raspiblitz/.bitcoind-${randStr}.error 2>/dev/null
touch /var/cache/raspiblitz/.bitcoind-${randStr}.out
touch /var/cache/raspiblitz/.bitcoind-${randStr}.error
$bitcoincli_alias getnetworkinfo 1>/var/cache/raspiblitz/.bitcoind-${randStr}.out 2>/var/cache/raspiblitz/.bitcoind-${randStr}.error
winData=$(cat /var/cache/raspiblitz/.bitcoind-${randStr}.out 2>/dev/null)
failData=$(cat /var/cache/raspiblitz/.bitcoind-${randStr}.error 2>/dev/null)
rm /var/cache/raspiblitz/.bitcoind-${randStr}.out
rm /var/cache/raspiblitz/.bitcoind-${randStr}.error
# check for errors
if [ "${failData}" != "" ]; then
btc_ready="0"
btc_error_short=$(echo ${failData/error*:/} | sed 's/[^a-zA-Z0-9 ]//g')
btc_error_full=$(echo ${failData} | tr -d "'" | tr -d '"')
btc_ready="0"
# check results if proof for online
else
btc_ready="1"
connections=$( echo "${winData}" | grep "connections\"" | tr -cd '[[:digit:]]')
if [ "${connections}" != "" ] && [ "${connections}" != "0" ]; then
btc_online="1"
fi
fi
fi
# print results
echo "btc_version='${btc_version}'"
echo "btc_running='${btc_running}'"
echo "btc_ready='${btc_ready}'"
echo "btc_online='${btc_online}'"
echo "btc_error_short='${btc_error_short}'"
echo "btc_error_full='${btc_error_full}'"
exit 0
fi
######################################################
# NETWORK
######################################################
if [ "$2" = "network" ]; then
# get data
getnetworkinfo=$($bitcoincli_alias getnetworkinfo 2>/dev/null)
if [ "${getnetworkinfo}" == "" ]; then
echo "error='no data'"
exit 1
fi
# parse data
btc_peers=$(echo "${getnetworkinfo}" | grep "connections\"" | tr -cd '[[:digit:]]')
btc_address=$(echo ${getnetworkinfo} | jq -r '.localaddresses [0] .address')
btc_port=$(echo "${getnetworkinfo}" | jq -r '.localaddresses [0] .port')
# print data
echo "btc_peers='${btc_peers}'"
echo "btc_address='${btc_address}'"
echo "btc_port='${btc_port}'"
exit 0
fi
######################################################
# INFO
######################################################
if [ "$2" = "info" ]; then
# get data
blockchaininfo=$($bitcoincli_alias getblockchaininfo 2>/dev/null)
if [ "${blockchaininfo}" == "" ]; then
echo "error='no data'"
exit 1
fi
# parse data
btc_blocks_headers=$(echo "${blockchaininfo}" | jq -r '.headers')
btc_blocks_verified=$(echo "${blockchaininfo}" | jq -r '.blocks')
btc_blocks_behind=$((${btc_blocks_headers} - ${btc_blocks_verified}))
btc_sync_initialblockdownload=$(echo "${blockchaininfo}" | jq -r '.initialblockdownload' | grep -c 'true')
btc_sync_progress=$(echo "${blockchaininfo}" | jq -r '.verificationprogress')
btc_sync_percentage=$(echo ${btc_sync_progress} | awk '{printf( "%.2f%%", 100 * $1)}')
if [ "${btc_blocks_headers}" != "" ] && [ "${btc_blocks_headers}" == "${btc_blocks_verified}" ]; then
btc_sync_percentage="100.00"
fi
# determine if synced (tolerate falling 1 block behind)
# and be sure that initial blockdownload is done
btc_synced=0
if [ "${btc_sync_initialblockdownload}" == "0" ] && [ ${btc_blocks_behind} -lt 2 ]; then
btc_synced=1
fi
# print data
echo "btc_synced='${btc_synced}'"
echo "btc_blocks_headers='${btc_blocks_headers}'"
echo "btc_blocks_verified='${btc_blocks_verified}'"
echo "btc_blocks_behind='${btc_blocks_behind}'"
echo "btc_sync_progress='${btc_sync_progress}'"
echo "btc_sync_percentage='${btc_sync_percentage//[^0-9\..]/}'"
echo "btc_sync_initialblockdownload='${btc_sync_initialblockdownload}'"
exit 0
fi
######################################################
# MEMPOOL
######################################################
if [ "$2" = "mempool" ]; then
# get data
mempoolinfo=$($bitcoincli_alias getmempoolinfo 2>/dev/null)
if [ "${mempoolinfo}" == "" ]; then
echo "error='no data'"
exit 1
fi
# parse data
btc_mempool_transactions=$(echo "${mempoolinfo}" | jq -r '.size')
# print data
echo "btc_mempool_transactions=${btc_mempool_transactions}"
exit 0
fi
###################
# PEER KICK START
###################
if [ "$2" = "peer-kickstart" ]; then
# check calling only for mainnet
if [ "$1" != "mainnet" ]; then
echo "error='only available for mainnet yet'"
exit 1
fi
# get raw node data from bitnodes.io (use Tor if available)
#if [ "${runBehindTor}" == "on" ]; then
# call over tor proxy (CAPTCHA BLOCKED)
#bitnodesRawData=$(curl --socks5-hostname 127.0.0.1:9050 -H "Accept: application/json; indent=4" https://bitnodes.io/api/v1/snapshots/latest/ 2>/dev/null)
#else
# call over clearnet
# bitnodesRawData=$(curl -H "Accept: application/json; indent=4" https://bitnodes.io/api/v1/snapshots/latest/ 2>/dev/null)
#fi
bitnodesRawData=$(sudo -u admin cat /home/admin/fallback.nodes)
if [ ${#bitnodesRawData} -lt 100 ]; then
echo "error='no valid data from bitnodes.io'"
exit 1
fi
# determine which address to choose
addressFormat="$3"
# set default to auto
if [ "${addressFormat}" == "" ]; then
addressFormat="auto"
fi
# check valid value
if [ "${addressFormat}" != "ipv4" ] && [ "${addressFormat}" != "ipv6" ] && [ "${addressFormat}" != "tor" ] && [ "${addressFormat}" != "auto" ]; then
echo "error='invalid address type'"
exit 1
fi
# if auto then determine whats running
if [ "${addressFormat}" == "auto" ]; then
source <()
if [ "$(cat /mnt/hdd/raspiblitz.conf | grep -c "^runBehindTor=on")" != "0" ]; then
addressFormat="tor"
else
source <(sudo ./config.scripts/internet.sh status global)
if [ "${ipv6}" == "off" ]; then
addressFormat="ipv4"
else
addressFormat="ipv6"
fi
fi
fi
echo "addressFormat='${addressFormat}'"
# filter raw data for node addresses based on what kind of connection is running
if [ "${addressFormat}" == "tor" ]; then
# get Tor nodes (v2 or v3)
nodeList=$(echo "${bitnodesRawData}" | grep -o '[0-9a-z]\{16,56\}\.onion')
elif [ "${addressFormat}" == "ipv4" ]; then
# get IPv4 nodes
nodeList=$(echo "${bitnodesRawData}" | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\:[0-9]\{3,5\}')
elif [ "${addressFormat}" == "ipv6" ]; then
# get IPv6 nodes
nodeList=$(echo "${bitnodesRawData}" | grep -o '\[.\{5,45\}\]\:[0-9]\{3,5\}')
else
# invalid address
echo "error='invalid address format'"
exit 1
fi
#echo "${nodeList}"
nodesAvailable=$(echo "${nodeList}" | wc -l)
echo "nodesAvailable=${nodesAvailable}"
if [ "${nodesAvailable}" == "0" ]; then
echo "error='no nodes available'"
exit 1
fi
# pick random node from list
randomLineNumber=$((1 + RANDOM % ${nodesAvailable}))
echo "randomNumber=${randomLineNumber}"
nodeAddress=$(echo "${nodeList}" | sed -n "${randomLineNumber}p")
if [ "${nodeAddress}" == "" ]; then
# if random pick fails pick first line
nodeAddress=$(echo "${nodeList}" | sed -n "1p")
fi
if [ "${nodeAddress}" == "" ]; then
echo "error='selecting node from list failed'"
exit 1
fi
echo "newpeer='${nodeAddress}"
# kick start node with
$bitcoincli_alias addnode "${nodeAddress}" "onetry" 1>/dev/null
echo "exitcode=$?"
exit 0
fi
###################
# DISCONNECT ALL PEERS
# for testing peer kick-start
###################
if [ "$2" = "peer-disconnectall" ]; then
# check calling only for mainnet
if [ "$1" != "mainnet" ]; then
echo "error='only available for mainnet yet'"
exit 1
fi
# get all peer id and disconnect them
$bitcoincli_alias getpeerinfo | grep '"addr": "' | while read line
do
peerID=$(echo $line | cut -d '"' -f4)
echo "# disconnecting peer with ID: ${peerID}"
$bitcoincli_alias disconnectnode ${peerID}
done
echo "#### FINAL PEER INFO FROM BITCOIND"
$bitcoincli_alias getpeerinfo
exit 0
fi
echo "FAIL - Unknown Parameter $2"
exit 1

View File

@ -13,8 +13,6 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
exit 1
fi
source /home/admin/raspiblitz.info
# 1. parameter [info|tested|reckless]
mode="$1"
@ -231,9 +229,10 @@ fi
if [ "${mode}" = "tested" ]||[ "${mode}" = "reckless" ]||[ "${mode}" = "custom" ];then
# install
echo "# Stopping bitcoind and lnd ..."
sudo systemctl stop lnd
sudo systemctl stop bitcoind
echo "# Stopping bitcoind ..."
sudo systemctl stop bitcoind 2>/dev/null
sudo systemctl stop tbitcoind 2>/dev/null
sudo systemctl stop sbitcoind 2>/dev/null
echo
echo "# Installing Bitcoin Core v${bitcoinVersion}"
tar -xvf ${binaryName}
@ -245,29 +244,11 @@ if [ "${mode}" = "tested" ]||[ "${mode}" = "reckless" ]||[ "${mode}" = "custom"
echo "# !!! BUILD FAILED --> Was not able to install bitcoind version(${bitcoinVersion})"
exit 1
fi
echo "# flag update in raspiblitz config"
source /mnt/hdd/raspiblitz.conf
if [ ${#bitcoinInterimsUpdate} -eq 0 ]; then
echo "bitcoinInterimsUpdate='${bitcoinInterimsUpdateNew}'" >> /mnt/hdd/raspiblitz.conf
else
sudo sed -i "s/^bitcoinInterimsUpdate=.*/bitcoinInterimsUpdate='${bitcoinInterimsUpdateNew}'/g" /mnt/hdd/raspiblitz.conf
fi
echo "# mark update in raspiblitz config"
/home/admin/config.scripts/blitz.conf.sh set bitcoinInterimsUpdate "${bitcoinInterimsUpdateNew}"
echo "# OK Bitcoin Core ${bitcoinVersion} is installed"
if [ "${state}" == "ready" ]; then
echo
echo "# Starting ..."
sudo systemctl start bitcoind
sleep 10
echo
sudo systemctl start lnd
echo "# Starting LND ..."
sleep 10
echo
echo "# Press ENTER to proceed to unlock the LND wallet ..."
read key
sudo /home/admin/config.scripts/lnd.unlock.sh
fi
exit 0
else

View File

@ -169,11 +169,7 @@ THIS WILL DELETE ALL DATA ON THAT DEVICE!
fi
# change raspiblitz.conf
entryExists=$(cat /mnt/hdd/raspiblitz.conf | grep -c 'localBackupDeviceUUID=')
if [ ${entryExists} -eq 0 ]; then
echo "localBackupDeviceUUID='off'" >> /mnt/hdd/raspiblitz.conf
fi
sudo sed -i "s/^localBackupDeviceUUID=.*/localBackupDeviceUUID='${uuid}'/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set localBackupDeviceUUID "${uuid}"
echo "activated=1"
# mount device (so that no reboot is needed)
@ -188,7 +184,7 @@ THIS WILL DELETE ALL DATA ON THAT DEVICE!
if [ ${userinteraction} -eq 1 ]; then
if [ ${isMounted} -eq 0 ]; then
sudo sed -i "s/^localBackupDeviceUUID=.*/localBackupDeviceUUID=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set localBackupDeviceUUID "off"
dialog --title ' Adding Backup Device ' --msgbox '\nFAIL - Not able to add device.' 7 40
else
dialog --title ' Adding Backup Device ' --msgbox '\nOK - Device added for Backup.' 7 40
@ -240,7 +236,7 @@ fi
if [ "$1" = "off" ]; then
echo "# BACKUP DEVICE REMOVE"
sudo sed -i "s/^localBackupDeviceUUID=.*/localBackupDeviceUUID=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set localBackupDeviceUUID "off"
sudo umount /mnt/backup 2>/dev/null
echo "# OK backup device is off"
exit 0

View File

@ -61,7 +61,7 @@ if [ "${action}" == "fsexpand" ]; then
echo "# starting expand of file system of sd card"
sudo sed -i "s/^fsexpanded=.*/fsexpanded=1/g" /home/admin/raspiblitz.info
if [ "${baseimage}" = "raspbian" ] || [ "${baseimage}" = "raspios_arm64" ]; then
if [ "${baseimage}" = "raspios_arm64" ]; then
resizeRaspbian="/usr/bin/raspi-config"
if [ -x ${resizeRaspbian} ]; then
echo "# RUNNING EXPAND RASPBERRYPI: ${resizeRaspbian}"

View File

@ -1,52 +0,0 @@
#!/usr/bin/env bash
# command info
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "-help" ]; then
echo "RaspiBlitz Cache RAM disk"
echo "blitz.cache.sh [on|off]"
exit 1
fi
###################
# SWITCH ON
###################
if [ "$1" = "1" ] || [ "$1" = "on" ]; then
echo "Turn ON: Cache"
if ! grep -Eq '^tmpfs.*/var/cache/raspiblitz' /etc/fstab; then
if grep -Eq '/var/cache/raspiblitz' /etc/fstab; then
# entry is in file but most likely just disabled -> re-enable it
sudo sed -i -E 's|^#(tmpfs.*/var/cache/raspiblitz.*)$|\1|g' /etc/fstab
else
# missing -> add
echo "" | sudo tee -a /etc/fstab >/dev/null
echo "tmpfs /var/cache/raspiblitz tmpfs nodev,nosuid,size=32M 0 0" | sudo tee -a /etc/fstab >/dev/null
fi
fi
if ! findmnt -l /var/cache/raspiblitz >/dev/null; then
sudo mkdir -p /var/cache/raspiblitz
sudo mount /var/cache/raspiblitz
fi
###################
# SWITCH OFF
###################
elif [ "$1" = "0" ] || [ "$1" = "off" ]; then
echo "Turn OFF: Cache"
if grep -Eq '/var/cache/raspiblitz' /etc/fstab; then
sudo sed -i -E 's|^(tmpfs.*/var/cache/raspiblitz.*)$|#\1|g' /etc/fstab
fi
if findmnt -l /var/cache/raspiblitz >/dev/null; then
sudo umount /var/cache/raspiblitz
fi
else
echo "# FAIL: parameter not known - run with -h for help"
fi

View File

@ -0,0 +1,78 @@
#!/usr/bin/env bash
configFile="/mnt/hdd/raspiblitz.conf"
# command info
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "-help" ]; then
echo "RaspiBlitz Config Edit - adds value to file & cache and creates entries if needed:"
echo "blitz.conf.sh set [key] [value]"
echo "blitz.conf.sh delete [key]"
echo "To use values use in shell scripts: source ${configFile}"
echo
exit 1
fi
if [ "$1" = "set" ]; then
# get parameters
keystr=$2
valuestr=$3
overflow=$4
# check that key & value are given
if [ "${keystr}" == "" ] || [ "${valuestr}" == "" ]; then
echo "# blitz.conf.sh $@"
echo "# FAIL: missing parameter"
exit 1
fi
# check if input quotes are missing (there should be no 4th parameter)
if [ "${overflow}" != "" ]; then
echo "# blitz.conf.sh $@"
echo "# FAIL: possible missing quotes in value string"
exit 2
fi
# update config value in cache
/home/admin/_cache.sh set ${keystr} "${valuestr}"
# check that config file exists
raspiblitzConfExists=$(ls ${configFile} 2>/dev/null | grep -c "${configFile}")
if [ ${raspiblitzConfExists} -eq 0 ]; then
echo "# blitz.conf.sh $@"
echo "# FAIL: missing config file: ${configFile}"
exit 3
fi
# check if key needs to be added (prepare new entry)
entryExists=$(grep -c "^${keystr}=" ${configFile})
if [ ${entryExists} -eq 0 ]; then
echo "${keystr}=" | tee -a ${configFile}
fi
# add valuestr quotes if not standard values
if [ "${valuestr}" != "on" ] && [ "${valuestr}" != "off" ] && [ "${valuestr}" != "1" ] && [ "${valuestr}" != "0" ]; then
valuestr="'${valuestr}'"
fi
# set value (sed needs sudo to operate when user is not root)
sudo sed -i "s/^${keystr}=.*/${keystr}=${valuestr}/g" ${configFile}
elif [ "$1" = "delete" ]; then
# get parameters
keystr=$2
# check that key & value are given
if [ "${keystr}" == "" ]; then
echo "# FAIL: missing parameter"
exit 1
fi
# delete value
sudo sed -i "/^${keystr}=/d" ${configFile} 2>/dev/null
else
echo "# FAIL: parameter not known - run with -h for help"
fi

View File

@ -22,7 +22,7 @@ fi
# check if started with sudo
if [ "$EUID" -ne 0 ]; then
echo "error='missing sudo'"
echo "error='run as root'"
exit 1
fi
@ -218,26 +218,32 @@ if [ "$1" = "status" ]; then
#####################################
# Pre-Setup Investigation of DATA-PART
# make copy of raspiblitz.conf &
# check for recoverable RaspiBlitz data (if config file exists) and raid
hddRaspiData=$(sudo ls -l /mnt/hdd${subVolumeDir} 2>/dev/null | grep -c raspiblitz.conf)
#isRaid=$(btrfs filesystem df /mnt/hdd 2>/dev/null | grep -c "Data, RAID1")
hddRaspiData=$(ls -l /mnt/hdd${subVolumeDir} 2>/dev/null | grep -c raspiblitz.conf)
echo "hddRaspiData=${hddRaspiData}"
hddRaspiVersion=""
if [ ${hddRaspiData} -eq 1 ]; then
# output version data from raspiblitz.conf
source /mnt/hdd${subVolumeDir}/raspiblitz.conf
hddRaspiVersion="${raspiBlitzVersion}"
fi
echo "hddRaspiVersion='${hddRaspiVersion}'"
echo "hddRaspiVersion='${raspiBlitzVersion}'"
# check if there is a wifi configuration as backup
hddGotWifiConf=$(ls /mnt/hdd${subVolumeDir}/app-data/wpa_supplicant.conf 2>/dev/null | grep -c "wpa_supplicant.conf")
if [ ${hddGotWifiConf} -eq 1 ]; then
# make a copy to the mem cache drive (so that Wifi can be connected before setup & final HDD mount)
sudo cp /mnt/hdd${subVolumeDir}/app-data/wpa_supplicant.conf /var/cache/raspiblitz/wpa_supplicant.conf
echo "wifiBackupConfigCopy='/var/cache/raspiblitz/wpa_supplicant.conf'"
fi
# create hdd-inspect data dir on RAMDISK
mkdir /var/cache/raspiblitz/hdd-inspect
# make copy of raspiblitz.conf to RAMDISK
cp /mnt/hdd${subVolumeDir}/raspiblitz.conf /var/cache/raspiblitz/hdd-inspect/raspiblitz.conf
# make copy of WIFI config to RAMDISK (if available)
cp /mnt/hdd${subVolumeDir}/app-data/wpa_supplicant.conf /var/cache/raspiblitz/hdd-inspect/wpa_supplicant.conf 2>/dev/null
# make copy of SSH keys to RAMDISK (if available)
cp /mnt/hdd${subVolumeDir}/ssh /var/cache/raspiblitz/hdd-inspect/ssh 2>/dev/null
fi
# comment this line out if case to study the contect of the data section
sudo umount /mnt/hdd
fi
@ -277,7 +283,11 @@ if [ "$1" = "status" ]; then
# BRTS
hdd_data_free1Kblocks=$(df -h -k /dev/${hdd}1 | grep "/dev/${hdd}1" | sed -e's/ */ /g' | cut -d" " -f 4 | tr -dc '0-9')
fi
hddDataFreeBytes=$((${hdd_data_free1Kblocks} * 1024))
hddDataFreeGB=$((${hdd_data_free1Kblocks} / (1024 * 1024)))
echo "hddDataFreeBytes=${hddDataFreeBytes}"
echo "hddDataFreeKB=${hdd_data_free1Kblocks}"
echo "hddDataFreeGB=${hddDataFreeGB}"
# check if its another fullnode implementation data disk
hddGotMigrationData=""
@ -372,7 +382,11 @@ if [ "$1" = "status" ]; then
hddUsedInfo="${datadrive} & ${storageDrive}"
fi
echo "hddUsedInfo='${hddUsedInfo}'"
hddDataFreeBytes=$((${hdd_data_free1Kblocks} * 1024))
hddDataFreeGB=$((${hdd_data_free1Kblocks} / (1024 * 1024)))
echo "hddDataFreeBytes=${hddDataFreeBytes}"
echo "hddDataFreeKB=${hdd_data_free1Kblocks}"
echo "hddDataFreeGB=${hddDataFreeGB}"
fi
@ -393,11 +407,12 @@ if [ "$1" = "status" ]; then
hddAdapterUSAP=0
# check if user wants to force UASP on
# check if force UASP flag is set on sd card
if [ -f "/boot/uasp.force" ]; then
hddAdapterUSAP=1
echo "uaspForced=1"
fi
# or UASP is set by config file
if [ $(cat /mnt/hdd/raspiblitz.conf 2>/dev/null | grep -c "forceUasp=on") -eq 1 ]; then
hddAdapterUSAP=1
fi
@ -411,6 +426,7 @@ if [ "$1" = "status" ]; then
# SupTronics 2.5" SATA HDD Shield X825 v1.5
hddAdapterUSAP=1
fi
echo "hddAdapterUSAP=${hddAdapterUSAP}"
fi

View File

@ -7,6 +7,7 @@ source /home/admin/_version.info
## get basic info (its OK if not set yet)
source /home/admin/raspiblitz.info 2>/dev/null
source <(/home/admin/_cache.sh get state setupPhase)
source /mnt/hdd/raspiblitz.conf 2>/dev/null
# for old nodes
@ -54,7 +55,6 @@ echo
echo "*** LAST BLOCKCHAIN (MAINNET) ERROR LOGS ***"
echo "sudo journalctl -u ${network}d -b --no-pager -n8"
sudo journalctl -u ${network}d -b --no-pager -n8
cat /home/admin/systemd.blockchain.log | grep "ERROR" | tail -n -2
echo
echo "*** LAST BLOCKCHAIN (MAINNET) 20 INFO LOGS ***"
echo "sudo tail -n 20 /mnt/hdd/${network}/debug.log"
@ -68,7 +68,6 @@ if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ] || [ "${lnd}" == "1" ]; t
echo "*** LAST LND (MAINNET) ERROR LOGS ***"
echo "sudo journalctl -u lnd -b --no-pager -n12"
sudo journalctl -u lnd -b --no-pager -n12
cat /home/admin/systemd.lightning.log | grep "ERROR" | tail -n -1
echo
echo "*** LAST 30 LND (MAINNET) INFO LOGS ***"
echo "sudo tail -n 30 /mnt/hdd/lnd/logs/${network}/mainnet/lnd.log"
@ -337,19 +336,22 @@ sudo /home/admin/config.scripts/internet.sh status | grep 'network_device\|local
echo
echo "*** HARDWARE TEST RESULTS ***"
source <(/home/admin/_cache.sh get system_count_undervoltage)
showImproveInfo=0
if [ ${#undervoltageReports} -gt 0 ]; then
echo "UndervoltageReports in Logs: ${undervoltageReports}"
if [ ${undervoltageReports} -gt 0 ]; then
if [ ${#system_count_undervoltage} -gt 0 ]; then
echo "UndervoltageReports in Logs: ${system_count_undervoltage}"
if [ ${system_count_undervoltage} -gt 0 ]; then
showImproveInfo=1
fi
fi
echo
echo "*** SYSTEM STATUS (can take some seconds to gather) ***"
sudo /home/admin/config.scripts/blitz.statusscan.sh
echo
echo "*** SYSTEM CACHE STATUS ***"
/home/admin/_cache.sh "export" system_
/home/admin/_cache.sh "export" ln_default | grep -v "ln_default_address"
/home/admin/_cache.sh "export" btc_default | grep -v "btc_default_address"
echo
echo "*** OPTION: SHARE THIS DEBUG OUTPUT ***"
echo "An easy way to share this debug output on GitHub or on a support chat"
echo "use the following command and share the resulting link:"

View File

@ -3,19 +3,23 @@
# command info
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
echo "# make changes to the LCD screen"
echo "# blitz.display.sh rotate [on|off]"
echo
echo "# blitz.display.sh image [path]"
echo "# blitz.display.sh qr [datastring]"
echo "# blitz.display.sh qr-console [datastring]"
echo "# blitz.display.sh hide"
echo "# blitz.display.sh hdmi [on|off] ---> DEPRECATED use set-display"
echo
echo "# blitz.display.sh rotate [on|off]"
echo "# blitz.display.sh test-lcd-connect"
echo "# blitz.display.sh set-display [hdmi|lcd|headless]"
exit 1
fi
# load config
source /home/admin/raspiblitz.info 2>/dev/null
# 1. Parameter: lcd command
command=$1
# its OK if its not exist yet
source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf 2>/dev/null
# Make sure needed packages are installed
@ -26,9 +30,6 @@ if [ $(sudo dpkg-query -l | grep "ii qrencode" | wc -l) = 0 ]; then
sudo apt-get install qrencode -y > /dev/null
fi
# 1. Parameter: lcd command
command=$1
# check if LCD (/dev/fb1) or HDMI (/dev/fb0)
# see https://github.com/rootzoll/raspiblitz/pull/1580
# but basically this just says if the driver for GPIO LCD is installed - not if connected
@ -44,18 +45,12 @@ if [ "${command}" == "rotate" ]; then
# TURN ROTATE ON (the new default)
if [ "$2" = "1" ] || [ "$2" = "on" ]; then
# add default 'lcdrotate' raspiblitz.conf if needed
if [ ${#lcdrotate} -eq 0 ]; then
echo "lcdrotate=0" >> /mnt/hdd/raspiblitz.conf
fi
# change rotation config
echo "# Turn ON: LCD ROTATE"
sudo sed -i "s/^dtoverlay=.*/dtoverlay=waveshare35a:rotate=90/g" /boot/config.txt
sudo rm /etc/X11/xorg.conf.d/40-libinput.conf >/dev/null
# update raspiblitz conf file
sudo sed -i "s/^lcdrotate=.*/lcdrotate=1/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set lcdrotate 1
echo "# OK - a restart is needed: sudo shutdown -r now"
# TURN ROTATE OFF
@ -79,8 +74,8 @@ EndSection
EOF
fi
# update raspiblitz conf file
sudo sed -i "s/^lcdrotate=.*/lcdrotate=0/g" /mnt/hdd/raspiblitz.conf
# update raspiblitz conf
/home/admin/config.scripts/blitz.conf.sh set lcdrotate 0
echo "OK - a restart is needed: sudo shutdown -r now"
else
@ -133,14 +128,14 @@ if [ "${command}" == "qr" ]; then
exit 1
fi
qrencode -l L -o /home/admin/qr.png "${datastring}" > /dev/null
qrencode -l L -o /var/cache/raspiblitz/qr.png "${datastring}" > /dev/null
# see https://github.com/rootzoll/raspiblitz/pull/1580
if [ ${lcdExists} -eq 1 ] ; then
# LCD
sudo fbi -a -T 1 -d /dev/fb1 --noverbose /home/admin/qr.png 2> /dev/null
sudo fbi -a -T 1 -d /dev/fb1 --noverbose /var/cache/raspiblitz/qr.png 2> /dev/null
else
# HDMI
sudo fbi -a -T 1 -d /dev/fb0 --noverbose /home/admin/qr.png 2> /dev/null
sudo fbi -a -T 1 -d /dev/fb0 --noverbose /var/cache/raspiblitz/qr.png 2> /dev/null
fi
exit 0
fi
@ -175,7 +170,7 @@ fi
if [ "${command}" == "hide" ]; then
sudo killall -3 fbi
shred -u /home/admin/qr.png 2> /dev/null
rm /var/cache/raspiblitz/qr.png 2> /dev/null
exit 0
fi
@ -201,22 +196,6 @@ if [ "${command}" == "test-lcd-connect" ]; then
exit 0
fi
###############################
# HDMI (deprecated - redirect)
###############################
if [ "${command}" == "hdmi" ]; then
secondParameter=$2
if [ "${secondParameter}" == "on" ]; then
sudo /home/admin/config.scripts/blitz.display.sh set-display hdmi
elif [ "${secondParameter}" == "off" ]; then
sudo /home/admin/config.scripts/blitz.display.sh set-display lcd
else
echo "error='unknown second parameter'"
exit 1
fi
exit 0
fi
#######################################
# DISPLAY TYPED INSTALLS & UN-INSTALLS
# HDMI is the default - every added
@ -360,36 +339,7 @@ function uninstall_lcd() {
# not being used - can be deleted after mid 2021
function install_lcd_legacy() {
if [ "${baseimage}" = "raspbian" ] || [ "${baseimage}" = "dietpi" ]; then
echo "*** 32bit LCD DRIVER ***"
echo "--> Downloading LCD Driver from Github"
cd /home/admin/
sudo -u admin git clone https://github.com/MrYacha/LCD-show.git
sudo -u admin chmod -R 755 LCD-show
sudo -u admin chown -R admin:admin LCD-show
cd LCD-show/
# not signed
sudo -u admin git reset --hard 53dd0bf || exit 1
# install xinput calibrator package
echo "--> install xinput calibrator package"
sudo apt install -y libxi6
sudo dpkg -i xinput-calibrator_0.7.5-1_armhf.deb
if [ "${baseimage}" = "dietpi" ]; then
echo "--> dietpi preparations"
sudo rm -rf /etc/X11/xorg.conf.d/40-libinput.conf
sudo mkdir /etc/X11/xorg.conf.d
sudo cp ./usr/tft35a-overlay.dtb /boot/overlays/
sudo cp ./usr/tft35a-overlay.dtb /boot/overlays/tft35a.dtbo
sudo cp -rf ./usr/99-calibration.conf-35 /etc/X11/xorg.conf.d/99-calibration.conf
sudo cp -rf ./usr/99-fbturbo.conf /usr/share/X11/xorg.conf.d/
sudo cp ./usr/cmdline.txt /DietPi/
sudo cp ./usr/inittab /etc/
sudo cp ./boot/config-35.txt /DietPi/config.txt
# make LCD screen rotation correct
sudo sed -i "s/dtoverlay=tft35a/dtoverlay=tft35a:rotate=270/" /DietPi/config.txt
fi
elif [ "${baseimage}" = "raspios_arm64" ] || [ "${baseimage}" = "debian_rpi64" ]; then
if [ "${baseimage}" = "raspios_arm64" ] || [ "${baseimage}" = "debian_rpi64" ]; then
echo "*** 64bit LCD DRIVER ***"
echo "--> Downloading LCD Driver from Github"
cd /home/admin/
@ -433,13 +383,7 @@ function install_lcd_legacy() {
# activate LCD and trigger reboot
# dont do this on dietpi to allow for automatic build
if [ "${baseimage}" = "raspbian" ]; then
echo "Installing 32-bit LCD drivers ..."
sudo chmod +x -R /home/admin/LCD-show
cd /home/admin/LCD-show/
sudo apt-mark hold raspberrypi-bootloader
sudo ./LCD35-show
elif [ "${baseimage}" = "raspios_arm64" ] || [ "${baseimage}" = "debian_rpi64" ]; then
if [ "${baseimage}" = "raspios_arm64" ] || [ "${baseimage}" = "debian_rpi64" ]; then
echo "Installing 64-bit LCD drivers ..."
sudo chmod +x -R /home/admin/wavesharelcd-64bit-rpi
cd /home/admin/wavesharelcd-64bit-rpi
@ -452,7 +396,7 @@ function install_lcd_legacy() {
}
function install_headless() {
if [ "${baseimage}" = "raspbian" ]||[ "${baseimage}" = "raspios_arm64" ]|| [ "${baseimage}" = "debian_rpi64" ]; then
if [ "${baseimage}" = "raspios_arm64" ]|| [ "${baseimage}" = "debian_rpi64" ]; then
modificationExists=$(sudo cat /etc/systemd/system/getty@tty1.service.d/autologin.conf | grep -c "autologin pi")
if [ "${modificationExists}" == "1" ]; then
echo "# deactivating auto-login of pi user"
@ -476,7 +420,7 @@ function install_headless() {
}
function uninstall_headless() {
if [ "${baseimage}" = "raspbian" ]||[ "${baseimage}" = "raspios_arm64" ]|| [ "${baseimage}" = "debian_rpi64" ]; then
if [ "${baseimage}" = "raspios_arm64" ] || [ "${baseimage}" = "debian_rpi64" ]; then
# activate auto-login
sudo raspi-config nonint do_boot_behaviour B2
modificationExists=$(sudo cat /etc/systemd/system/getty@tty1.service.d/autologin.conf | grep -c "autologin pi")
@ -510,19 +454,6 @@ function uninstall_headless() {
fi
}
function prepareDisplayClassEntryRaspiblitzConf() {
# check if file exists / hdd is mounted
if [ -f "/mnt/hdd/raspiblitz.conf" ]; then
echo "file does exists"
entryExists=$(grep -c "displayClass=" /mnt/hdd/raspiblitz.conf)
if [ ${entryExists} -eq 0 ]; then
echo "displayClass=${displayClass}" >> /mnt/hdd/raspiblitz.conf
fi
else
echo "# /mnt/hdd/raspiblitz.conf does not exists (yet) - change is just part of raspiblitz.info"
fi
}
###################
# SET DISPLAY TYPE
###################
@ -532,6 +463,7 @@ if [ "${command}" == "set-display" ]; then
paramDisplayClass=$2
paramDisplayType=$3
echo "# blitz.display.sh set-display ${paramDisplayClass} ${paramDisplayType}"
echo "baseimage(${baseimage})"
# check if started with sudo
if [ "$EUID" -ne 0 ]; then
@ -539,6 +471,12 @@ if [ "${command}" == "set-display" ]; then
exit 1
fi
# check if display class parameter is given
if [ "${baseimage}" == "" ]; then
echo "err='missing baseimage info'"
exit 1
fi
# check if display class parameter is given
if [ "${paramDisplayClass}" == "" ]; then
echo "err='missing parameter'"
@ -561,10 +499,9 @@ if [ "${command}" == "set-display" ]; then
exit 1
fi
# mark new display class in configs
prepareDisplayClassEntryRaspiblitzConf
# mark new display class in config (if exist)
/home/admin/config.scripts/blitz.conf.sh set displayClass ${paramDisplayClass}
sudo sed -i "s/^displayClass=.*/displayClass=${paramDisplayClass}/g" /home/admin/raspiblitz.info
sudo sed -i "s/^displayClass=.*/displayClass=${paramDisplayClass}/g" /mnt/hdd/raspiblitz.conf 2>/dev/null
exit 0
fi

View File

@ -13,11 +13,6 @@ fi
source /mnt/hdd/raspiblitz.conf
# add default value to raspi config if needed
if ! grep -Eq "^docker=" /mnt/hdd/raspiblitz.conf; then
echo "docker=off" >> /mnt/hdd/raspiblitz.conf
fi
# switch on
if [ "$1" = "1" ] || [ "$1" = "on" ]; then
@ -48,7 +43,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
sudo pip3 install docker-compose
# setting value in raspi blitz config
sudo sed -i "s/^docker=.*/docker=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set docker "on"
echo "# docker install done"
exit 0
fi
@ -56,7 +51,7 @@ fi
# switch off
if [ "$1" = "0" ] || [ "$1" = "off" ]; then
# setting value in raspiblitz config
sudo sed -i "s/^docker=.*/docker=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set docker "off"
echo "*** REMOVING docker & docker-compose ***"
sudo pip3 uninstall -y docker-compose
sudo apt-get purge -y docker-ce docker-ce-cli

View File

@ -0,0 +1,66 @@
#!/usr/bin/env bash
# command info
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "-help" ]; then
echo "RaspiBlitz Error Handling"
echo
echo "blitz.error.sh [source-script-name] [fixed-short-code] [?detail-message] [?additional-debugdata] [?logfile]"
echo
exit 1
fi
###################
# ERROR HANDLING
###################
# get required parameters
script=$2
shortcode=$3
# check reqired parameters
if [ "${script}" == "" ]; then
/home/admin/config.scripts/blitz.error.sh blitz.error.sh "error-missing-script" "missing any parameter" "$@"
exit 1
fi
if [ "${shortcode}" == "" ]; then
/home/admin/config.scripts/blitz.error.sh blitz.error.sh "error-missing-code" "script ${script} missing error code" "$@"
exit 1
fi
# set error info in cache system state (for DISPLAY on lcd, report to webui, etc)
/home/admin/_cache.sh set state "error"
/home/admin/_cache.sh set message "${shortcode}"
# prepare log error report
dateStr=$(date)
errorReport="ERROR in ${script} --> ${shortcode} on ${dateStr}"
# get optional parameters & extend error report if given
detail=$4
debugdata=$5
if [ "${detail}" != "" ] || [ "${debugdata}" != "" ]; then
errorReport="${errorReport}\nDETAIL --> ${detail}\nDEBUG --> ${debugdata}"
fi
# A) write error reports to /home/admin
timestampStr=$(date +%s)
filename="/home/admin/error-${script}-${timestampStr}.log"
echo "${errorReport}" > ${filename}
chown admin:admin ${filename}
# B) write error to std outs
>&2 echo "${errorReport} --> ${filename}"
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
echo "${errorReport}"
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
# C) write error report to given logfile (optional)
logfile=$6
if [ "${logfile}" != "" ]; then
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >> ${logFile}
echo "${errorReport}" >> ${logFile}
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >> ${logFile}
fi
# on serial calls make sure that at least a second is between error reports
sleep 1

View File

@ -86,17 +86,18 @@ migrate_raspiblitz_conf () {
# write default raspiblitz config
source /home/admin/_version.info
echo "# RASPIBLITZ CONFIG FILE" > /home/admin/raspiblitz.conf
echo "raspiBlitzVersion='${codeVersion}'" >> /home/admin/raspiblitz.conf
echo "network=bitcoin" >> /home/admin/raspiblitz.conf
echo "chain=main" >> /home/admin/raspiblitz.conf
echo "hostname=${nodename}" >> /home/admin/raspiblitz.conf
echo "displayClass=lcd" >> /home/admin/raspiblitz.conf
echo "lcdrotate=1" >> /home/admin/raspiblitz.conf
echo "runBehindTor=on" >> /home/admin/raspiblitz.conf
sudo mv /home/admin/raspiblitz.conf /mnt/hdd/raspiblitz.conf
sudo chown root:sudo /mnt/hdd/raspiblitz.conf
sudo chmod 664 /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set raspiBlitzVersion "${codeVersion}"
/home/admin/config.scripts/blitz.conf.sh set network "bitcoin"
/home/admin/config.scripts/blitz.conf.sh set chain "main"
/home/admin/config.scripts/blitz.conf.sh set hostname "${nodename}"
/home/admin/config.scripts/blitz.conf.sh set displayClass "lcd"
/home/admin/config.scripts/blitz.conf.sh set lcdrotate "1"
/home/admin/config.scripts/blitz.conf.sh set runBehindTor "on"
# rename ext4 data drive
sudo e2label /dev/sda1 BLOCKCHAIN
}

View File

@ -12,65 +12,43 @@ fi
# load config values
source /home/admin/raspiblitz.info 2>/dev/null
source /mnt/hdd/raspiblitz.conf 2>/dev/null
if [ ${#network} -eq 0 ]; then
echo "FAIL - was not able to load config data / network"
exit 1
fi
# make sure main "notify" setting is present (add with default if not)
if ! grep -Eq "^notify=.*" /mnt/hdd/raspiblitz.conf; then
echo "notify=off" | sudo tee -a /mnt/hdd/raspiblitz.conf >/dev/null
fi
# check all other settings and add if missing
# write default values if no custum values in raspiblitz config yet
if ! grep -Eq "^notifyMethod=.*" /mnt/hdd/raspiblitz.conf; then
echo "notifyMethod=mail" | sudo tee -a /mnt/hdd/raspiblitz.conf >/dev/null
/home/admin/config.scripts/blitz.conf.sh set notifyMethod "mail"
fi
# Mail
if ! grep -Eq "^notifyMailTo=.*" /mnt/hdd/raspiblitz.conf; then
echo "notifyMailTo=mail@example.com" | sudo tee -a /mnt/hdd/raspiblitz.conf >/dev/null
/home/admin/config.scripts/blitz.conf.sh set notifyMailTo "mail@example.com"
fi
if ! grep -Eq "^notifyMailServer=.*" /mnt/hdd/raspiblitz.conf; then
echo "notifyMailServer=mail.example.com" | sudo tee -a /mnt/hdd/raspiblitz.conf >/dev/null
/home/admin/config.scripts/blitz.conf.sh set notifyMailServer "mail.example.com"
fi
if ! grep -Eq "^notifyMailPort=.*" /mnt/hdd/raspiblitz.conf; then
echo "notifyMailPort=587" | sudo tee -a /mnt/hdd/raspiblitz.conf >/dev/null
/home/admin/config.scripts/blitz.conf.sh set notifyMailPort "587"
fi
if ! grep -Eq "^notifyMailHostname=.*" /mnt/hdd/raspiblitz.conf; then
echo "notifyMailHostname=$(hostname)" | sudo tee -a /mnt/hdd/raspiblitz.conf >/dev/null
/home/admin/config.scripts/blitz.conf.sh set notifyMailHostname "${hostname}"
fi
if ! grep -Eq "^notifyMailFromAddress=.*" /mnt/hdd/raspiblitz.conf; then
echo "notifyMailFromAddress=rb@example.com" | sudo tee -a /mnt/hdd/raspiblitz.conf >/dev/null
/home/admin/config.scripts/blitz.conf.sh set notifyMailFromAddress "rb@example.com"
fi
if ! grep -Eq "^notifyMailFromName=.*" /mnt/hdd/raspiblitz.conf; then
echo "notifyMailFromName=\"RB User\"" | sudo tee -a /mnt/hdd/raspiblitz.conf >/dev/null
/home/admin/config.scripts/blitz.conf.sh set notifyMailFromName "RB User"
fi
if ! grep -Eq "^notifyMailUser=.*" /mnt/hdd/raspiblitz.conf; then
echo "notifyMailUser=username" | sudo tee -a /mnt/hdd/raspiblitz.conf >/dev/null
/home/admin/config.scripts/blitz.conf.sh set notifyMailUser "username"
fi
if ! grep -Eq "^notifyMailPass=.*" /mnt/hdd/raspiblitz.conf; then
echo "notifyMailPass=password" | sudo tee -a /mnt/hdd/raspiblitz.conf >/dev/null
/home/admin/config.scripts/blitz.conf.sh set notifyMailPass "password"
fi
if ! grep -Eq "^notifyMailEncrypt=.*" /mnt/hdd/raspiblitz.conf; then
echo "notifyMailEncrypt=off" | sudo tee -a /mnt/hdd/raspiblitz.conf >/dev/null
/home/admin/config.scripts/blitz.conf.sh set notifyMailEncrypt "off"
fi
if ! grep -Eq "^notifyMailToCert=.*" /mnt/hdd/raspiblitz.conf; then
echo "notifyMailToCert=/mnt/hdd/notify_mail_cert.pem" | sudo tee -a /mnt/hdd/raspiblitz.conf >/dev/null
/home/admin/config.scripts/blitz.conf.sh set notifyMailToCert "/mnt/hdd/notify_mail_cert.pem"
fi
# Ext
if ! grep -Eq "^notifyExtCmd=.*" /mnt/hdd/raspiblitz.conf; then
echo "notifyExtCmd=/usr/bin/printf" | sudo tee -a /mnt/hdd/raspiblitz.conf >/dev/null
/home/admin/config.scripts/blitz.conf.sh set notifyExtCmd "/usr/bin/printf"
fi
# reload settings
@ -114,7 +92,7 @@ EOF
# edit raspi blitz config
echo "editing /mnt/hdd/raspiblitz.conf"
sudo sed -i "s/^notify=.*/notify=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set notify "on"
exit 0
fi
@ -126,7 +104,7 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
echo "switching the NOTIFY OFF"
# edit raspi blitz config
echo "editing /mnt/hdd/raspiblitz.conf"
sudo sed -i "s/^notify=.*/notify=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set notify "off"
exit 0
fi

View File

@ -3,15 +3,21 @@
# Just run this script once after a fresh sd card build
# to prepare the image for release as a downloadable sd card image
# raspiblitz.info & logs
echo "cleaning raspiblitz info .."
# cleaning logs
echo "deleting raspiblitz & system logs .."
sudo rm /var/log/* 2>/dev/null
sudo rm /var/log/redis/* 2>/dev/null
sudo rm /var/log/private/* 2>/dev/null
sudo rm /var/log/nginx/* 2>/dev/null
sudo rm /home/admin/*.log 2>/dev/null
echo "OK"
# clean raspiblitz.info toward the values set by sd card build script
echo "cleaning raspiblitz.info"
source /home/admin/raspiblitz.info
echo "baseimage=${baseimage}" > /home/admin/raspiblitz.info
echo "cpu=${cpu}" >> /home/admin/raspiblitz.info
echo "displayClass=${displayClass}" >> /home/admin/raspiblitz.info
echo "deleting raspiblitz logs .."
sudo rm /home/admin/*.log
echo "OK"
# SSH Pubkeys (make unique for every sd card image install)
echo ""

View File

@ -5,15 +5,7 @@
# 1) give UI the info that a reboot/shutdown is now happening
# 2) shutdown/reboot in a safe way to prevent data corruption
# INFOFILE - state data from bootstrap
infoFile="/home/admin/raspiblitz.info"
# get network info from config
source ${infoFile} 2>/dev/null
source /mnt/hdd/raspiblitz.conf 2>/dev/null
if [ ${#network} -eq 0 ]; then
network=bitcoin
fi
source <(/home/admin/_cache.sh get network)
# display info
echo ""
@ -21,13 +13,13 @@ echo "Green activity light stays dark and LCD turns white when shutdown complete
if [ "$1" = "reboot" ]; then
shutdownParams="-h -r now"
echo "It will then reboot again automatically."
sed -i "s/^state=.*/state=reboot/g" ${infoFile}
sed -i "s/^message=.*/message='$2'/g" ${infoFile}
/home/admin/_cache.sh set state "reboot"
/home/admin/_cache.sh set message "$2"
else
shutdownParams="-h now"
echo "Then wait 5 seconds and disconnect power."
sed -i "s/^state=.*/state=shutdown/g" ${infoFile}
sed -i "s/^message=.*/message=''/g" ${infoFile}
/home/admin/_cache.sh set state "shutdown"
/home/admin/_cache.sh set message ""
fi
# do shutdown/reboot

View File

@ -7,7 +7,8 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "-help" ];
echo "blitz.ssh.sh clear --> make sure old sshd host certs are cleared"
echo "blitz.ssh.sh checkrepair --> check sshd & repair just in case"
echo "blitz.ssh.sh backup --> copy ssh keys to backup (if exist)"
echo "blitz.ssh.sh restore --> restore ssh keys from backup (if exist)"
echo "blitz.ssh.sh sessions --> count open sessions"
echo "blitz.ssh.sh restore [?backup-root] --> restore ssh keys from backup (if exist)"
exit 1
fi
@ -42,6 +43,16 @@ if [ "$1" = "clear" ]; then
exit 0
fi
###################
# SESSIONS
###################
if [ "$1" = "sessions" ]; then
echo "# *** blitz.ssh.sh sessions"
sessionsCount=$(ss | grep -c ":ssh")
echo "ssh_session_count=${sessionsCount}"
exit 0
fi
###################
# CHECK & REPAIR
###################
@ -117,6 +128,13 @@ fi
###################
if [ "$1" = "restore" ]; then
echo "# *** blitz.ssh.sh restore"
# second parameter (optional)
ALTBACKUPBASEDIR=$2
if [ "${ALTBACKUPBASEDIR}" != "" ]; then
DEFAULTBACKUPBASEDIR="${ALTBACKUPBASEDIR}"
fi
echo "# backup dir: ${DEFAULTBACKUPBASEDIR}/ssh"
if [ -d "${DEFAULTBACKUPBASEDIR}/ssh" ]; then

View File

@ -1,327 +0,0 @@
#!/bin/bash
source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf 2>/dev/null
# LNTYPE is lnd | cl
if [ $# -gt 0 ];then
LNTYPE=$1
else
LNTYPE=${lightning}
fi
source <(/home/admin/config.scripts/network.aliases.sh getvars $LNTYPE ${chain}net)
# command info
if [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
echo "# script to scan the state of the system after setup"
exit 1
fi
# measure time of scan
startTime=$(date +%s)
# localIP
localip=$(hostname -I | awk '{print $1}')
echo "localIP='${localip}'"
# temp - no measurement in a VM
tempC=0
if [ -d "/sys/class/thermal/thermal_zone0/" ]; then
tempC=$(echo "scale=1; $(cat /sys/class/thermal/thermal_zone0/temp)/1000" | bc)
echo "tempCelsius='${tempC}'"
fi
# uptime in seconds
uptime=$(awk '{printf("%d\n",$1 + 0.5)}' /proc/uptime)
echo "uptime=${uptime}"
# get UPS info (if configured)
/home/admin/config.scripts/blitz.ups.sh status
# count restarts of bitcoind/litecoind
startcountBlockchain=$(cat /home/admin/systemd.blockchain.log 2>/dev/null | grep -c "STARTED")
echo "startcountBlockchain=${startcountBlockchain}"
# is bitcoind running
bitcoinRunning=$(systemctl status ${network}d.service 2>/dev/null | grep -c running)
echo "bitcoinActive=${bitcoinRunning}"
if [ ${bitcoinRunning} -eq 1 ]; then
# get blockchain info
sudo touch /var/cache/raspiblitz/.bitcoind.out
sudo touch /var/cache/raspiblitz/.bitcoind.error
sudo chown root:sudo /var/cache/raspiblitz/.bitcoind.out
sudo chown root:sudo /var/cache/raspiblitz/.bitcoind.error
sudo chmod 660 /var/cache/raspiblitz/.bitcoind.out
sudo chmod 660 /var/cache/raspiblitz/.bitcoind.error
$bitcoincli_alias getblockchaininfo 1>/var/cache/raspiblitz/.bitcoind.out 2>/var/cache/raspiblitz/.bitcoind.error
# check if error on request
blockchaininfo=$(cat /var/cache/raspiblitz/.bitcoind.out 2>/dev/null)
bitcoinError=$(cat /var/cache/raspiblitz/.bitcoind.error 2>/dev/null)
#rm /var/cache/raspiblitz/.bitcoind.error 2>/dev/null
if [ ${#bitcoinError} -gt 0 ]; then
bitcoinErrorShort=$(echo ${bitcoinError/error*:/} | sed 's/[^a-zA-Z0-9 ]//g')
echo "bitcoinErrorShort='${bitcoinErrorShort}'"
bitcoinErrorFull=$(echo ${bitcoinError} | tr -d "'")
echo "bitcoinErrorFull='${bitcoinErrorFull}'"
else
###################################
# Get data from blockchain network
###################################
source <(sudo /home/admin/config.scripts/network.monitor.sh peer-status)
echo "blockchainPeers=${peers}"
##############################
# Get data from blockchaininfo
##############################
# get total number of blocks
total=$(echo ${blockchaininfo} | jq -r '.blocks')
echo "blockchainHeight=${total}"
# is initial sync of blockchain
initialSync=$(echo ${blockchaininfo} | jq -r '.initialblockdownload' | grep -c 'true')
echo "initialSync=${initialSync}"
# get blockchain sync progress
syncProgress="$(echo ${blockchaininfo} | jq -r '.verificationprogress')"
syncProgress=$(echo $syncProgress | awk '{printf( "%.2f%%", 100 * $1)}' | tr '%' ' ' | tr -s " ")
echo "syncProgress=${syncProgress}"
fi
else
# find out why Bitcoin not running
pathAdd=""
if [ "${chain}" = "test" ]; then
pathAdd="/testnet3"
fi
#### POSSIBLE/SOFT PROBLEMS
# place here in future analysis
#### HARD PROBLEMS
# LOW DISK SPACE
lowDiskSpace=$(sudo tail -n 100 /mnt/hdd/${network}${pathAdd}/debug.log 2>/dev/null | grep -c "Error: Disk space is low!")
if [ ${lowDiskSpace} -gt 0 ]; then
bitcoinErrorShort="HDD DISK SPACE LOW"
bitcoinErrorFull="HDD DISK SPACE LOW - check what data you can delete on HDD and restart"
fi
#### GENERIC ERROR FIND
# if still no error identified - search logs for generic error (after 4min uptime)
if [ ${#bitcoinErrorShort} -eq 0 ] && [ ${uptime} -gt 240 ]; then
bitcoinErrorFull=$(sudo tail -n 100 /mnt/hdd/${network}${pathAdd}/debug.log 2>/dev/null | grep -c "Error:" | tail -1 | tr -d "'")
if [ ${#bitcoinErrorFull} -gt 0 ]; then
bitcoinErrorShort="Error found in Logs"
fi
fi
# output error if found
if [ ${#bitcoinErrorShort} -gt 0 ]; then
echo "bitcoinErrorShort='${bitcoinErrorShort}'"
echo "bitcoinErrorFull='${bitcoinErrorFull}'"
/home/admin/config.scripts/blitz.systemd.sh log blockchain "ERROR: ${bitcoinErrorShort}"
fi
fi
# count restarts of bitcoind/litecoind
startcountLightning=$(cat /home/admin/systemd.lightning.log 2>/dev/null | grep -c "STARTED")
echo "startcountLightning=${startcountLightning}"
# is LND running
lndRunning=$(systemctl status ${netprefix}lnd.service 2>/dev/null | grep -c running)
echo "lndActive=${lndRunning}"
if [ ${lndRunning} -eq 1 ] && [ "${LNTYPE}" == "lnd" ]; then
# get LND info
lndRPCReady=1
sudo touch /var/cache/raspiblitz/.lnd.error
sudo chown root:sudo /var/cache/raspiblitz/.lnd.error
sudo chmod 660 /var/cache/raspiblitz/.lnd.error
lndinfo=$($lncli_alias getinfo 2>/var/cache/raspiblitz/.lnd.error)
# check if error on request
lndErrorFull=$(cat /var/cache/raspiblitz/.lnd.error 2>/dev/null)
lndErrorShort=''
#rm /var/cache/raspiblitz/.lnd.error 2>/dev/null
if [ ${#lndErrorFull} -gt 0 ]; then
# flag if error could be resoled by analysis
errorResolved=0
### analyse LND logs since start
# find a the line number in logs of start of LND
# just do this on error case to save on processing memory
lndStartLineNumber=$(sudo cat /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log 2>/dev/null | grep -in "LTND: Active chain:" | tail -1 | cut -d ":" -f1)
# get logs of last LND start
lndLogsAfterStart=$(sudo tail --lines=+${lndStartLineNumber} /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log 2>/dev/null)
# check RPC server ready (can take some time after wallet was unlocked)
lndRPCReady=$(echo "${lndLogsAfterStart}" | grep -c "RPCS: RPC server listening on")
echo "lndRPCReady=${lndRPCReady}"
# check wallet if wallet was opened (after correct password)
lndWalletOpened=$(echo "${lndLogsAfterStart}" | grep -c "LNWL: Opened wallet")
echo "walletOpened=${lndWalletOpened}"
# check wallet if wallet is ready (can take some time after wallet was opened)
lndWalletReady=$(echo "${lndLogsAfterStart}" | grep -c "LTND: LightningWallet opened")
echo "walletReady=${lndWalletReady}"
### check errors
# scan error for walletLocked as common error
locked=$(echo ${lndErrorFull} | grep -c 'Wallet is encrypted')
if [ "${locked}" == "0" ]; then
locked=$(echo ${lndErrorFull} | grep -c 'wallet locked')
fi
if [ ${locked} -gt 0 ]; then
echo "walletLocked=1"
else
echo "walletLocked=0"
rpcNotWorking=$(echo ${lndErrorFull} | grep -c 'connection refused')
if [ ${rpcNotWorking} -gt 0 ]; then
# this can happen for a long time when LND is starting fresh sync
# on first startup - check if logs since start signaled RPC ready before
if [ ${lndRPCReady} -eq 0 ]; then
# nullify error - this is normal
lndErrorFull=""
errorResolved=1
# output basic data because no error
echo "# LND RPC is still warming up - no scan progress: prepare scan"
echo "scanTimestamp=-2"
echo "syncedToChain=0"
else
echo "# LND RPC was started - some other problem going on"
lndErrorShort='LND RPC not responding'
lndErrorFull=$(echo "LND RPC is not responding. LND may have problems starting up. Check logs, config files and systemd service. Org-Error: ${lndErrorFull}" | tr -d "'")
fi
fi
# if not known error and not resolved before - keep generic
if [ ${#lndErrorShort} -eq 0 ] && [ ${errorResolved} -eq 0 ]; then
lndErrorShort='Unknown Error - see logs'
lndErrorFull=$(echo ${lndErrorFull} | tr -d "'")
fi
# write to results
if [ ${#lndErrorFull} -gt 0 ]; then
echo "lndErrorShort='${lndErrorShort}'"
echo "lndErrorFull='${lndErrorFull}'"
/home/admin/config.scripts/blitz.systemd.sh log lightning "ERROR: ${lndErrorFull}"
fi
fi
else
# check if wallet is locked
locked=$(echo ${lndinfo} | grep -c unlock)
if [ ${locked} -gt 0 ]; then
echo "walletLocked=1"
else
echo "walletLocked=0"
fi
# number of lnd peers
lndPeers=$(echo ${lndinfo} | jq -r '.num_peers')
echo "lndPeers=${lndPeers}"
# synced to chain
syncedToChain=$(echo ${lndinfo} | jq -r '.synced_to_chain' | grep -c 'true')
echo "syncedToChain=${syncedToChain}"
# lnd scan progress
scanTimestamp=$(echo ${lndinfo} | jq -r '.best_header_timestamp')
nowTimestamp=$(date +%s)
if [ ${#scanTimestamp} -gt 0 ] && [ ${scanTimestamp} -gt ${nowTimestamp} ]; then
scanTimestamp=${nowTimestamp}
fi
if [ ${#scanTimestamp} -gt 0 ]; then
echo "scanTimestamp=${scanTimestamp}"
scanDate=$(date -d @${scanTimestamp} 2>/dev/null)
echo "scanDate='${scanDate}'"
# calculate LND scan progress by seconds since Genesis block
genesisTimestamp=1230940800
totalSeconds=$(echo "${nowTimestamp}-${genesisTimestamp}" | bc)
scannedSeconds=$(echo "${scanTimestamp}-${genesisTimestamp}" | bc)
scanProgress=$(echo "scale=2; $scannedSeconds*100/$totalSeconds" | bc)
echo "scanProgress=${scanProgress}"
else
echo "# was not able to parse 'best_header_timestamp' from: lncli getinfo"
echo "scanTimestamp=-1"
fi
fi
# output if lnd-RPC is ready
echo "lndRPCReady=${lndRPCReady}"
fi
# is CL running
clRunning=$(systemctl status ${netprefix}lightningd.service 2>/dev/null | grep -c running)
echo "clActive=${clRunning}"
echo "CLwalletLocked=0"
if [ "${clRunning}" != "1" ] && [ "${LNTYPE}" == "cl" ]; then
# check if locked
if [ "$(sudo journalctl -n5 -u ${netprefix}lightningd | \
grep -cE 'Could not read pass from stdin|pass the --encrypted-hsm|Wrong password')" -gt 0 ];then
echo "CLwalletLocked=1"
fi
fi
if [ "${clRunning}" == "1" ] && [ "${LNTYPE}" == "cl" ]; then
clInfo=$($lightningcli_alias getinfo 2>&1)
clBlockHeight=$(echo "${clInfo}" | jq -r '.blockheight' | tr -cd '[[:digit:]]')
scanProgress=$(echo "scale=2; $clBlockHeight*100/$total" | bc)
echo "scanProgress=${scanProgress}"
clBlockHeightPlusOne=$(expr $clBlockHeight + 1)
if [ "${total}" == "${clBlockHeight}" ] || [ "${total}" == "${clBlockHeightPlusOne}" ]; then
echo "syncedToChain=1"
else
echo "syncedToChain=0"
fi
fi
# touchscreen statistics
if [ "${touchscreen}" == "1" ]; then
echo "blitzTUIActive=1"
if [ ${#blitzTUIRestarts} -gt 0 ]; then
echo "blitzTUIRestarts=${blitzTUIRestarts}"
else
echo "blitzTUIRestarts=0"
fi
else
echo "blitzTUIActive=0"
echo "blitzTUIRestarts=0"
fi
# check if runnig in vagrant
vagrant=$(df | grep -c "/vagrant")
echo "vagrant=${vagrant}"
# check if online if problem with other stuff
# info on scan run time
endTime=$(date +%s)
runTime=$(echo "${endTime}-${startTime}" | bc)
echo "scriptRuntime=${runTime}"

View File

@ -13,7 +13,5 @@ if [ "${1}" != "log" ]; then
echo "# FAIL: unknown parameter"
fi
# writing log file entry
logFile="/home/admin/systemd.${2}.log"
echo "$(date +%s) ${3}" >> ${logFile}
echo "# OK: log '${3}' written to ${logFile}"
# count for statistics in cache
/home/admin/_cache.sh increment system_count_start_${2}

View File

@ -1,7 +1,6 @@
#!/bin/bash
# see issue: https://github.com/rootzoll/raspiblitz/issues/646
# and issue: https://github.com/rootzoll/raspiblitz/issues/809
# to work it needs to be based on Raspbian Desktop base image
# to check debug logs: sudo cat /home/pi/.cache/lxsession/LXDE-pi/run.log
source /home/admin/raspiblitz.info
@ -136,11 +135,7 @@ EOF
echo "LCD is rotated into default - no touchscreen rotate"
fi
# mark touchscreen as switched ON in config
if [ ${#touchscreen} -eq 0 ]; then
echo "touchscreen=0" >> /mnt/hdd/raspiblitz.conf
fi
sudo sed -i 's/^touchscreen=.*/touchscreen=1/g' /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set touchscreen "1"
echo "OK - a restart is needed: sudo shutdown -r now"
exit 0
@ -236,7 +231,7 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
sudo rm -f /etc/X11/xorg.conf.d/40-libinput.conf >/dev/null
# mark touchscreen as switched OFF in config
sudo sed -i 's/^touchscreen=.*/touchscreen=0/g' /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set touchscreen "0"
echo "OK - a restart is needed: sudo shutdown -r now"
exit 0

View File

@ -53,8 +53,9 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
if [ ${#ups} -eq 0 ]; then
echo "ups=on" >> /mnt/hdd/raspiblitz.conf
fi
# set ups config value (in case of update)
sudo sed -i "s/^ups=.*/ups='apcusb'/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ups "apcusb"
echo "OK - UPS is now connected"
echo "Check status/connection with command: apcaccess"
@ -116,7 +117,7 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
sudo systemctl stop apcupsd
sudo systemctl disable apcupsd
sudo apt-get remove -y apcupsd
sudo sed -i "s/^ups=.*/ups=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ups "off"
else
echo "FAIL: unknown UPSTYPE: ${ups}"
exit 1

View File

@ -57,6 +57,9 @@ EOF
# ToDo(frennkie) verify this
sudo sed -i -E '/^.*server_names_hash_bucket_size [0-9]*;$/a \\tserver_names_hash_bucket_size 128;' /etc/nginx/nginx.conf
fi
if [ $(sudo cat /etc/nginx/nginx.conf | grep -c "# server_tokens off") -gt 0 ]; then
sudo sed -i "s/# server_tokens off;/server_tokens off;/g" /etc/nginx/nginx.conf
fi
echo "# Checking dhparam.pem ..."
if [ ! -f /etc/ssl/certs/dhparam.pem ]; then

View File

@ -9,11 +9,6 @@ fi
source /mnt/hdd/raspiblitz.conf
# add default value to raspi config if needed
if ! grep -Eq "^angular_cli=" /mnt/hdd/raspiblitz.conf; then
echo "angular_cli=off" >> /mnt/hdd/raspiblitz.conf
fi
# switch on
if [ "$1" = "1" ] || [ "$1" = "on" ]; then
# check if angular_cli was installed
@ -62,7 +57,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
fi
fi
# setting value in raspi blitz config
sudo sed -i "s/^angular_cli=.*/angular_cli=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set angular_cli "on"
echo "Installed angular_cli $(node -v)"
exit 0
fi
@ -70,7 +65,7 @@ fi
# switch off
if [ "$1" = "0" ] || [ "$1" = "off" ]; then
# setting value in raspiblitz config
sudo sed -i "s/^angular_cli=.*/angular_cli=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set angular_cli "off"
echo "*** REMOVING angular_cli ***"
npm uninstall @angular/cli -g
echo "OK angular_cli removed."

View File

@ -13,11 +13,6 @@ fi
source /mnt/hdd/raspiblitz.conf
# add default value to raspi config if needed
if ! grep -Eq "^bos=" /mnt/hdd/raspiblitz.conf; then
echo "bos=off" >> /mnt/hdd/raspiblitz.conf
fi
# show info menu
if [ "$1" = "menu" ]; then
dialog --title " Info Balance of Satoshis " --msgbox "
@ -86,7 +81,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
sudo -u bos bash -c 'echo "source <(bos completion bash)" >> /home/bos/.bashrc'
# setting value in raspi blitz config
sudo sed -i "s/^bos=.*/bos=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set bos "on"
echo "# Usage: https://github.com/alexbosworth/balanceofsatoshis/blob/master/README.md"
echo "# To start type: 'sudo su bos' in the command line."
@ -101,8 +96,8 @@ fi
if [ "$1" = "0" ] || [ "$1" = "off" ]; then
# setting value in raspi blitz config
sudo sed -i "s/^bos=.*/bos=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set bos "off"
echo "*** REMOVING BALANCE OF SATOSHIS ***"
sudo userdel -rf bos
echo "# OK, bos is removed."

View File

@ -80,11 +80,6 @@ Activate TOR to access the web block explorer from outside your local network.
exit 0
fi
# add default value to raspi config if needed
if ! grep -Eq "^BTCRPCexplorer=" /mnt/hdd/raspiblitz.conf; then
echo "BTCRPCexplorer=off" >> /mnt/hdd/raspiblitz.conf
fi
# status
if [ "$1" = "status" ]; then
@ -188,7 +183,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
# make sure that txindex of blockchain is switched on
/home/admin/config.scripts/network.txindex.sh on
# add btcrpcexplorer user
sudo adduser --disabled-password --gecos "" btcrpcexplorer
@ -212,7 +207,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
PASSWORD_B=$(sudo cat /mnt/hdd/${network}/${network}.conf | grep rpcpassword | cut -c 13-)
touch /home/admin/btc-rpc-explorer.env
sudo chmod 600 /home/admin/btc-rpc-explorer.env || exit 1
sudo chmod 600 /home/admin/btc-rpc-explorer.env || exit 1
cat > /home/admin/btc-rpc-explorer.env <<EOF
# Host/Port to bind to
# Defaults: shown
@ -255,7 +250,7 @@ EOF
sudo ufw allow 3021 comment 'btc-rpc-explorer HTTPS'
echo ""
##################
# NGINX
##################
@ -305,16 +300,16 @@ PrivateDevices=true
WantedBy=multi-user.target
EOF
sudo mv /home/admin/btc-rpc-explorer.service /etc/systemd/system/btc-rpc-explorer.service
sudo mv /home/admin/btc-rpc-explorer.service /etc/systemd/system/btc-rpc-explorer.service
sudo systemctl enable btc-rpc-explorer
echo "# OK - the BTC-RPC-explorer service is now enabled"
else
else
echo "# BTC-RPC-explorer already installed."
fi
# setting value in raspi blitz config
sudo sed -i "s/^BTCRPCexplorer=.*/BTCRPCexplorer=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set BTCRPCexplorer "on"
echo "# needs to finish creating txindex to be functional"
echo "# monitor with: sudo tail -n 20 -f /mnt/hdd/bitcoin/debug.log"
@ -325,8 +320,8 @@ EOF
# Hidden Service for BTC-RPC-explorer if Tor is active
source /mnt/hdd/raspiblitz.conf
if [ "${runBehindTor}" = "on" ]; then
# make sure to keep in sync with internet.tor.sh script
/home/admin/config.scripts/internet.hiddenservice.sh btc-rpc-explorer 80 3022 443 3023
# make sure to keep in sync with tor.network.sh script
/home/admin/config.scripts/tor.onion-service.sh btc-rpc-explorer 80 3022 443 3023
fi
exit 0
fi
@ -339,7 +334,7 @@ fi
if [ "$1" = "0" ] || [ "$1" = "off" ]; then
# setting value in raspi blitz config
sudo sed -i "s/^BTCRPCexplorer=.*/BTCRPCexplorer=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set BTCRPCexplorer "off"
isInstalled=$(sudo ls /etc/systemd/system/btc-rpc-explorer.service 2>/dev/null | grep -c 'btc-rpc-explorer.service')
if [ ${isInstalled} -eq 1 ]; then
@ -361,13 +356,13 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
# Hidden Service if Tor is active
if [ "${runBehindTor}" = "on" ]; then
# make sure to keep in sync with internet.tor.sh script
/home/admin/config.scripts/internet.hiddenservice.sh off btc-rpc-explorer
# make sure to keep in sync with tor.network.sh script
/home/admin/config.scripts/tor.onion-service.sh off btc-rpc-explorer
fi
echo "# OK BTC-RPC-explorer removed."
else
else
echo "# BTC-RPC-explorer is not installed."
fi

View File

@ -26,6 +26,7 @@ fi
source /mnt/hdd/raspiblitz.conf
# get cpu architecture
source /home/admin/raspiblitz.info
source <(/home/admin/_cache.sh get state)
if [ "$1" = "status" ]; then
@ -123,11 +124,11 @@ if [ "$1" = "menu" ]; then
if [ ${#publicDomain} -gt 0 ]; then
text="${text}
Public Domain: https://${publicDomain}:${httpsPort}
port forwarding on router needs to be active & may change port"
port forwarding on router needs to be active & may change port"
fi
text="${text}
SHA1 ${sslFingerprintIP}"
SHA1 ${sslFingerprintIP}"
if [ "${runBehindTor}" = "on" ] && [ ${#toraddress} -gt 0 ]; then
/home/admin/config.scripts/blitz.display.sh qr "${toraddress}"
@ -135,7 +136,7 @@ SHA1 ${sslFingerprintIP}"
TOR Browser Hidden Service address (see the QR onLCD):
${toraddress}"
fi
if [ ${#ip2torDomain} -gt 0 ]; then
text="${text}\n
IP2TOR+LetsEncrypt: https://${ip2torDomain}:${ip2torPort}
@ -156,20 +157,12 @@ To get the 'Connection String' to activate Lightning Payments:
MAINMENU > CONNECT > BTCPay Server"
whiptail --title " BTCPay Server " --msgbox "${text}" 17 69
/home/admin/config.scripts/blitz.display.sh hide
echo "# please wait ..."
exit 0
fi
# add default values to raspi config if needed
if ! grep -Eq "^BTCPayServer=" /mnt/hdd/raspiblitz.conf; then
echo "BTCPayServer=off" >> /mnt/hdd/raspiblitz.conf
fi
if ! grep -Eq "^BTCPayDomain=" /mnt/hdd/raspiblitz.conf; then
echo "BTCPayDomain=off" >> /mnt/hdd/raspiblitz.conf
fi
# write-tls-macaroon
if [ "$1" = "write-tls-macaroon" ]; then
@ -211,7 +204,7 @@ BTC.lightning=type=lnd-rest;server=https://127.0.0.1:8080/;macaroonfilepath=/hom
s="BTC.lightning=type=lnd-rest\;server=https\://127.0.0.1:8080/\;macaroonfilepath=/home/btcpay/admin.macaroon\;"
sudo -u btcpay sed -i "s|^${s}certthumbprint=.*|${s}certthumbprint=$FINGERPRINT|g" /home/btcpay/.btcpayserver/Main/settings.config
fi
if [ "${state}" == "ready" ]; then
sudo systemctl restart btcpayserver
fi
@ -240,7 +233,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
sudo ln -sf /etc/nginx/sites-available/btcpay_tor_ssl.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
# open the firewall
echo "# Updating the firewall"
sudo ufw allow 23000 comment 'allow BTCPay HTTP'
@ -249,8 +242,8 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
# Hidden Service for BTCPay if Tor is active
if [ "${runBehindTor}" = "on" ]; then
# make sure to keep in sync with internet.tor.sh script
/home/admin/config.scripts/internet.hiddenservice.sh btcpay 80 23002 443 23003
# make sure to keep in sync with tor.network.sh script
/home/admin/config.scripts/tor.onion-service.sh btcpay 80 23002 443 23003
fi
# check for $BTCPayDomain
@ -278,13 +271,13 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
sudo ln -s /mnt/hdd/app-data/.btcpayserver /home/btcpay/ 2>/dev/null
sudo chown -R btcpay:btcpay /home/btcpay/.btcpayserver
echo
echo
echo "# Installing .NET"
echo
echo
# https://dotnet.microsoft.com/download/dotnet-core/3.1
# dependencies
sudo apt-get -y install libunwind8 gettext libssl1.0
if [ "${cpu}" = "arm" ]; then
binaryVersion="arm"
dotNetdirectLink="https://download.visualstudio.microsoft.com/download/pr/40edd52f-b1ca-4f0c-8d50-34433202ce9d/2b8f5b881c239a706f271f010e56159c/dotnet-sdk-3.1.413-linux-arm.tar.gz"
@ -422,7 +415,7 @@ btc.rpc.password=$PASSWORD_B
sudo systemctl restart bitcoind
fi
sudo systemctl restart nbxplorer
fi
fi
# BTCPayServer
echo
@ -453,7 +446,7 @@ After=nbxplorer.service
[Service]
ExecStart=/home/btcpay/dotnet/dotnet run --no-launch-profile --no-build \
-c Release -p \"/home/btcpay/btcpayserver/BTCPayServer/BTCPayServer.csproj\" \
-- --sqlitefile=sqllite.db
-- --sqlitefile=sqllite.db
User=btcpay
Group=btcpay
Type=simple
@ -487,7 +480,7 @@ WantedBy=multi-user.target
else
echo "# Because the system is not 'ready' the service 'btcpayserver' will not be started at this point .. its enabled and will start on next reboot"
fi
sudo -u btcpay mkdir -p /home/btcpay/.btcpayserver/Main/
/home/admin/config.scripts/bonus.btcpayserver.sh write-tls-macaroon
@ -502,7 +495,7 @@ WantedBy=multi-user.target
fi
# setting value in raspi blitz config
sudo sed -i "s/^BTCPayServer=.*/BTCPayServer=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set BTCPayServer "on"
exit 0
fi
@ -525,11 +518,11 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
echo "# deleteData(${deleteData})"
# setting value in raspi blitz config
sudo sed -i "s/^BTCPayServer=.*/BTCPayServer=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set BTCPayServer "off"
# Hidden Service if Tor is active
if [ "${runBehindTor}" = "on" ]; then
/home/admin/config.scripts/internet.hiddenservice.sh off btcpay
/home/admin/config.scripts/tor.onion-service.sh off btcpay
fi
isInstalled=$(sudo ls /etc/systemd/system/btcpayserver.service 2>/dev/null | grep -c 'btcpayserver.service')

View File

@ -25,11 +25,6 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
exit 1
fi
# add default value to raspi config if needed
if ! grep -Eq "^chantools=" /mnt/hdd/raspiblitz.conf; then
echo "chantools=off" >> /mnt/hdd/raspiblitz.conf
fi
# show info menu
if [ "$1" = "menu" ]; then
dialog --title " Channel Tools ${pinnedVersion} " --msgbox "\n
@ -130,7 +125,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
exit 1
fi
# setting value in raspi blitz config
sudo sed -i "s/^chantools=.*/chantools=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set chantools "on"
echo
echo "Installed ${installed}"
@ -147,7 +142,7 @@ fi
if [ "$1" = "0" ] || [ "$1" = "off" ]; then
# setting value in raspi blitz config
sudo sed -i "s/^chantools=.*/chantools=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set chantools "off"
echo "# REMOVING Channel Tools"
sudo rm -rf /home/admin/download/chantools*

View File

@ -18,11 +18,6 @@ fi
source /mnt/hdd/raspiblitz.conf
# add default value to raspiblitz.conf if needed
if ! grep -Eq "^circuitbreaker=" /mnt/hdd/raspiblitz.conf; then
echo "circuitbreaker=off" >> /mnt/hdd/raspiblitz.conf
fi
isInstalled=$(sudo ls /etc/systemd/system/circuitbreaker.service 2>/dev/null | grep -c 'circuitbreaker.service')
# switch on
@ -124,13 +119,13 @@ WantedBy=multi-user.target
fi
# setting value in raspi blitz config
sudo sed -i "s/^circuitbreaker=.*/circuitbreaker=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set circuitbreaker "on"
isInstalled=$(sudo -u circuitbreaker /home/circuitbreaker/go/bin/circuitbreaker --version | grep -c "circuitbreaker version")
if [ ${isInstalled} -eq 1 ]; then
echo
source /home/admin/raspiblitz.info
source <(/home/admin/_cache.sh get state)
if [ "${state}" == "ready" ]; then
echo "# OK - the circuitbreaker.service is enabled, system is on ready so starting service"
sudo systemctl start circuitbreaker
@ -163,7 +158,7 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
fi
# setting value in raspiblitz.conf
sudo sed -i "s/^circuitbreaker=.*/circuitbreaker=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set circuitbreaker "off"
exit 0
fi

View File

@ -162,7 +162,7 @@ This can take multiple hours.
" 9 48
exit 0
fi
if [ ${nginxTest} -eq 0 ]; then
dialog --title "Testing nginx.conf has failed" --msgbox "
Nginx is in a failed state. Will attempt to fix.
@ -201,7 +201,7 @@ Check 'sudo nginx -t' for a detailed error message.
echo "- deactivate automatic server selection"
echo "- as manual server set '${localip}' & '${portSSL}'"
echo "- laptop and RaspiBlitz need to be within same local network"
echo
echo
echo "To start directly from laptop terminal use:"
echo "electrum --oneserver --server ${localip}:${portSSL}:s"
if [ ${TorRunning} -eq 1 ]; then
@ -209,21 +209,21 @@ Check 'sudo nginx -t' for a detailed error message.
echo "The Tor Hidden Service address for electrs is (see LCD for QR code):"
echo "${TORaddress}"
echo
echo "To connect through TOR open the Tor Browser and start with the options:"
echo "To connect through TOR open the Tor Browser and start with the options:"
echo "electrum --oneserver --server ${TORaddress}:50002:s --proxy socks5:127.0.0.1:9150"
/home/admin/config.scripts/blitz.display.sh qr "${TORaddress}"
fi
echo
echo "For more details check the RaspiBlitz README on ElectRS:"
echo "https://github.com/rootzoll/raspiblitz"
echo
echo
echo "Press ENTER to get back to main menu."
read key
/home/admin/config.scripts/blitz.display.sh hide
;;
STATUS)
sudo /home/admin/config.scripts/bonus.electrs.sh status
echo
echo
echo "Press ENTER to get back to main menu."
read key
;;
@ -237,7 +237,7 @@ Check 'sudo nginx -t' for a detailed error message.
echo "# starting service"
sudo systemctl start electrs
echo "# ok"
echo
echo
echo "Press ENTER to get back to main menu."
read key
;;
@ -246,11 +246,6 @@ Check 'sudo nginx -t' for a detailed error message.
exit 0
fi
# add default value to raspi config if needed
if ! grep -Eq "^ElectRS=" /mnt/hdd/raspiblitz.conf; then
echo "ElectRS=off" >> /mnt/hdd/raspiblitz.conf
fi
# stop service
echo "# Making sure services are not running"
sudo systemctl stop electrs 2>/dev/null
@ -263,7 +258,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
if [ ${isInstalled} -eq 0 ]; then
#cleanup
sudo rm -f /home/electrs/.electrs/config.toml
sudo rm -f /home/electrs/.electrs/config.toml
echo
echo "# Creating the electrs user"
@ -282,7 +277,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
echo "# Downloading and building electrs $ELECTRSVERSION. This will take ~40 minutes"
echo
sudo -u electrs git clone https://github.com/romanz/electrs
cd /home/electrs/electrs || exit 1
cd /home/electrs/electrs || exit 1
sudo -u electrs git reset --hard $ELECTRSVERSION
sudo -u electrs /home/admin/config.scripts/blitz.git-verify.sh \
"${PGPsigner}" "${PGPpubkeyLink}" "${PGPpubkeyFingerprint}" || exit 1
@ -395,7 +390,7 @@ stream {
echo
echo "# Installing the systemd service"
echo
# sudo nano /etc/systemd/system/electrs.service
# sudo nano /etc/systemd/system/electrs.service
echo "
[Unit]
Description=Electrs
@ -423,17 +418,17 @@ WantedBy=multi-user.target
sudo systemctl enable electrs
# manual start:
# sudo -u electrs /home/electrs/.cargo/bin/cargo run --release -- --index-batch-size=10 --electrum-rpc-addr="0.0.0.0:50001"
else
else
echo "# ElectRS is already installed."
fi
# setting value in raspiblitz config
sudo sed -i "s/^ElectRS=.*/ElectRS=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ElectRS "on"
# Hidden Service for electrs if Tor active
if [ "${runBehindTor}" = "on" ]; then
# make sure to keep in sync with internet.tor.sh script
/home/admin/config.scripts/internet.hiddenservice.sh electrs 50002 50002 50001 50001
# make sure to keep in sync with tor.network.sh script
/home/admin/config.scripts/tor.onion-service.sh electrs 50002 50002 50001 50001
fi
# whitelist downloading to localhost from bitcoind
@ -441,8 +436,8 @@ WantedBy=multi-user.target
echo "whitelist=download@127.0.0.1" | sudo tee -a /mnt/hdd/bitcoin/bitcoin.conf
bitcoindRestart=yes
fi
source /home/admin/raspiblitz.info
source <(/home/admin/_cache.sh get state)
if [ "${state}" == "ready" ]; then
if [ "${bitcoindRestart}" == "yes" ]; then
sudo systemctl restart bitcoind
@ -459,7 +454,7 @@ WantedBy=multi-user.target
echo
echo "# To connect through SSL from outside of the local network make sure the port 50002 is forwarded on the router"
echo
exit 0
fi
@ -467,7 +462,7 @@ fi
if [ "$1" = "0" ] || [ "$1" = "off" ]; then
# setting value in raspiblitz config
sudo sed -i "s/^ElectRS=.*/ElectRS=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ElectRS "off"
# if second parameter is "deleteindex"
if [ "$2" == "deleteindex" ]; then
@ -477,7 +472,7 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
# Hidden Service if Tor is active
if [ "${runBehindTor}" = "on" ]; then
/home/admin/config.scripts/internet.hiddenservice.sh off electrs
/home/admin/config.scripts/tor.onion-service.sh off electrs
fi
isInstalled=$(sudo ls /etc/systemd/system/electrs.service 2>/dev/null | grep -c 'electrs.service')
@ -487,10 +482,10 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
sudo systemctl disable electrs
sudo rm /etc/systemd/system/electrs.service
# delete user and home directory
sudo userdel -rf electrs
sudo userdel -rf electrs
# close ports on firewall
sudo ufw deny 50001
sudo ufw deny 50002
sudo ufw deny 50002
echo "# OK ElectRS removed."
# restart BTC-RPC-Explorer to reconfigure itself to use electrs for address API
@ -498,8 +493,8 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
sudo systemctl restart btc-rpc-explorer
echo "# BTC-RPC-Explorer restarted"
fi
else
else
echo "# ElectRS is not installed."
fi
exit 0

View File

@ -24,6 +24,7 @@ mode="$1"
# GATHER DATA
source /home/admin/raspiblitz.info
source <(/home/admin/_cache.sh get state)
source /mnt/hdd/raspiblitz.conf
# setting download directory
@ -242,10 +243,7 @@ WantedBy=multi-user.target
sudo chown -R faraday:faraday /home/faraday/.faraday
echo "# flag in raspiblitz config"
if [ ${#faraday} -eq 0 ]; then
echo "faraday='on'" >> /mnt/hdd/raspiblitz.conf
fi
sudo sed -i "s/^faraday=.*/faraday=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set faraday "on"
echo "# OK Faraday is installed"
echo "# please 'restart' for clean creation of faraday tls/macaroons"
@ -267,7 +265,7 @@ if [ "${mode}" = "off" ] || [ "${mode}" = "0" ]; then
sudo userdel -r -f faraday
echo "# modify config file"
sudo sed -i "s/^faraday=.*/faraday=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set faraday "off"
exit 1

View File

@ -21,8 +21,8 @@ elif [ "${chain}net" == "signet" ]; then
BITCOINRPCPORT=38332
fi
# check and set up the HS
/home/admin/config.scripts/internet.hiddenservice.sh bitcoin${BITCOINRPCPORT} ${BITCOINRPCPORT} ${BITCOINRPCPORT}
# check and set up the HS
/home/admin/config.scripts/tor.onion-service.sh bitcoin${BITCOINRPCPORT} ${BITCOINRPCPORT} ${BITCOINRPCPORT}
hiddenService=$(sudo cat /mnt/hdd/tor/bitcoin${BITCOINRPCPORT}/hostname)
# https://github.com/rootzoll/raspiblitz/issues/2339
@ -33,7 +33,7 @@ fi
echo "# The Hidden Service for bitcoind port ${BITCOINRPCPORT} is:"
echo "${hiddenService}"
# btcstandup://<rpcuser>:<rpcpassword>@<hidden service hostname>:<hidden service port>/?label=<optional node label>
# btcstandup://<rpcuser>:<rpcpassword>@<hidden service hostname>:<hidden service port>/?label=<optional node label>
quickConnect="btcstandup://${RPC_USER}:${PASSWORD_B}@${hiddenService}:${BITCOINRPCPORT}/?label=${hostname}"
echo
echo "scan the QR Code with Fully Noded to connect to your node:"

View File

@ -27,11 +27,6 @@ fi
source /mnt/hdd/raspiblitz.conf
# add default value to raspi config if needed
if ! grep -Eq "^joinmarket=" /mnt/hdd/raspiblitz.conf; then
echo "joinmarket=off" >> /mnt/hdd/raspiblitz.conf
fi
# show info menu
if [ "$1" = "menu" ]; then
whiptail --title " JoinMarket info " --msgbox "
@ -183,7 +178,7 @@ fi
if [ -f "/home/joinmarket/joinmarket-clientserver/jmvenv/bin/activate" ] ; then
# setting value in raspi blitz config
sudo sed -i "s/^joinmarket=.*/joinmarket=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set joinmarket "on"
# starting info
echo
echo "# Start to use by logging in to the 'joinmarket' user with:"
@ -202,7 +197,7 @@ fi
if [ "$1" = "0" ] || [ "$1" = "off" ]; then
# setting value in raspi blitz config
sudo sed -i "s/^joinmarket=.*/joinmarket=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set joinmarket "off"
if [ -f "/home/joinmarket/joinmarket-clientserver/jmvenv/bin/activate" ] ; then
echo "# REMOVING JOINMARKET"

View File

@ -21,6 +21,7 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
fi
source /home/admin/raspiblitz.info
source <(/home/admin/_cache.sh get state)
# switch on
if [ "$1" = "1" ] || [ "$1" = "on" ]; then
@ -164,7 +165,7 @@ PATH=/bin:/usr/bin:/usr/local/bin
echo "Switch to the '$USERNAME' user and adapt the settings in $CONFIG_FILE"
# setting value in raspi blitz config
grep -q '^kindleDisplay' $RASPIBLITZ_FILE && sudo sed -i "s/^kindleDisplay=.*/kindleDisplay=on/g" $RASPIBLITZ_FILE || echo 'kindleDisplay=on' >> $RASPIBLITZ_FILE
/home/admin/config.scripts/blitz.conf.sh set kindleDisplay "on"
else
echo "KINDLE-DISPLAY already installed."
fi
@ -181,7 +182,7 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
echo "*** REMOVING KINDLE-DISPLAY ***"
# setting value in raspi blitz config
sudo sed -i "s/^kindleDisplay=.*/kindleDisplay=off/g" $RASPIBLITZ_FILE
/home/admin/config.scripts/blitz.conf.sh set kindleDisplay "off"
# uninstall service
sudo systemctl stop kindle-display

View File

@ -183,7 +183,6 @@ function refresh_certs_with_nginx() {
}
###################
# running as admin
###################
@ -193,13 +192,6 @@ if [ "${EUID}" != "${adminUserId}" ]; then
exit 1
fi
# add default value to RaspiBlitz config if needed
if ! grep -Eq "^letsencrypt" /mnt/hdd/raspiblitz.conf; then
echo "letsencrypt=off" >> /mnt/hdd/raspiblitz.conf
fi
###################
# update status
###################
@ -213,7 +205,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
echo "*** INSTALLING Let's Encrypt Client 'acme.sh' ***"
# setting value in RaspiBlitz config
sudo sed -i "s/^letsencrypt=.*/letsencrypt=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set letsencrypt "on"
address="$2"
if [ "$2" == "enter-email" ]; then
@ -391,7 +383,7 @@ elif [ "$1" = "0" ] || [ "$1" = "off" ]; then
echo "*** UNINSTALLING Let's Encrypt Client 'acme.sh' ***"
# setting value in RaspiBlitz config
sudo sed -i "s/^letsencrypt=.*/letsencrypt=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set letsencrypt "off"
"${ACME_INSTALL_HOME}/acme.sh" --uninstall \
--home "${ACME_INSTALL_HOME}" \

View File

@ -12,7 +12,7 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
fi
# check who signed the release in https://github.com/lightninglabs/lightning-terminal/releases
PGPsigner="guggero"
PGPsigner="guggero"
if [ $PGPsigner = guggero ];then
PGPpkeys="https://keybase.io/guggero/pgp_keys.asc"
@ -24,11 +24,6 @@ fi
source /mnt/hdd/raspiblitz.conf
# add default value to raspi config if needed
if ! grep -Eq "^lit=" /mnt/hdd/raspiblitz.conf; then
echo "lit=off" >> /mnt/hdd/raspiblitz.conf
fi
# show info menu
if [ "$1" = "menu" ]; then
@ -88,10 +83,10 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
echo "# Replacing single install of: FARADAY"
/home/admin/config.scripts/bonus.faraday.sh off
fi
isInstalled=$(sudo ls /etc/systemd/system/litd.service 2>/dev/null | grep -c 'litd.service')
if [ ${isInstalled} -eq 0 ]; then
# create dedicated user
sudo adduser --disabled-password --gecos "" lit
# make sure symlink to central app-data directory exists
@ -138,7 +133,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
sudo rm -rf /home/lit/.loop # not a symlink.. delete it silently
sudo ln -s /mnt/hdd/app-data/.loop/ /home/lit/.loop
sudo chown lit:lit -R /mnt/hdd/app-data/.loop
echo "# Pool"
echo "# remove so can't be used parallel with LiT"
config.scripts/bonus.pool.sh off
@ -149,7 +144,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
sudo ln -s /mnt/hdd/app-data/.pool/ /home/lit/.pool
sudo chown lit:lit -R /mnt/hdd/app-data/.pool
echo "Detect CPU architecture ..."
echo "Detect CPU architecture ..."
isARM=$(uname -m | grep -c 'arm')
isAARCH64=$(uname -m | grep -c 'aarch64')
isX86_64=$(uname -m | grep -c 'x86_64')
@ -175,7 +170,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
OSversion="arm64"
elif [ ${isX86_64} -eq 1 ] ; then
OSversion="amd64"
fi
fi
SHA256=$(grep -i "linux-$OSversion" manifest-v$LITVERSION.txt | cut -d " " -f1)
echo
@ -304,7 +299,7 @@ WantedBy=multi-user.target
sudo systemctl enable litd
echo "OK - the Lightning lit service is now enabled"
else
else
echo "# The Lightning Terminal is already installed."
fi
@ -325,12 +320,12 @@ alias lit-frcli=\"frcli --rpcserver=localhost:8443 \
sudo ufw allow 8443 comment "Lightning Terminal"
# setting value in raspi blitz config
sudo sed -i "s/^lit=.*/lit=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set lit "on"
# Hidden Service if Tor is active
if [ "${runBehindTor}" = "on" ]; then
# make sure to keep in sync with internet.tor.sh script
/home/admin/config.scripts/internet.hiddenservice.sh lit 443 8443
# make sure to keep in sync with tor.network.sh script
/home/admin/config.scripts/tor.onion-service.sh lit 443 8443
fi
# in case RTL is installed - check to connect
@ -338,8 +333,8 @@ alias lit-frcli=\"frcli --rpcserver=localhost:8443 \
sudo /home/admin/config.scripts/bonus.rtl.sh connect-services
sudo systemctl restart RTL 2>/dev/null
fi
source /home/admin/raspiblitz.info
source <(/home/admin/_cache.sh get state)
if [ "${state}" == "ready" ]; then
echo "# OK - the litd.service is enabled, system is ready so starting service"
sudo systemctl start litd
@ -367,19 +362,19 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
echo "# OK, the lit.service is removed."
# Hidden Service if Tor is active
if [ "${runBehindTor}" = "on" ]; then
/home/admin/config.scripts/internet.hiddenservice.sh off lit
/home/admin/config.scripts/tor.onion-service.sh off lit
fi
else
else
echo "# LiT is not installed."
fi
# clean up anyway
# delete user
# delete user
sudo userdel -rf lit
# delete group
sudo groupdel lit
# setting value in raspi blitz config
sudo sed -i "s/^lit=.*/lit=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set lit "off"
exit 0
fi
@ -387,4 +382,4 @@ fi
echo "FAIL - Unknown Parameter $1"
echo "may need reboot to run normal again"
exit 1

View File

@ -38,12 +38,12 @@ if [ "$1" = "menu" ]; then
if [ ${#publicDomain} -gt 0 ]; then
text="${text}
Public Domain: https://${publicDomain}:${httpsPort}
port forwarding on router needs to be active & may change port"
port forwarding on router needs to be active & may change port"
fi
text="${text}\n
You need to accept self-signed HTTPS cert with SHA1 Fingerprint:
${sslFingerprintIP}"
${sslFingerprintIP}"
if [ "${runBehindTor}" = "on" ] && [ ${#toraddress} -gt 0 ]; then
/home/admin/config.scripts/blitz.display.sh qr "${toraddress}"
@ -51,7 +51,7 @@ ${sslFingerprintIP}"
TOR Browser Hidden Service address (QR see LCD):
${toraddress}"
fi
if [ ${#ip2torDomain} -gt 0 ]; then
text="${text}\n
IP2TOR+LetsEncrypt: https://${ip2torDomain}:${ip2torPort}
@ -68,17 +68,12 @@ consider adding a IP2TOR Bridge (MAINMENU > SUBSCRIBE)."
fi
whiptail --title " LNbits " --msgbox "${text}" 16 69
/home/admin/config.scripts/blitz.display.sh hide
echo "please wait ..."
exit 0
fi
# add default value to raspi config if needed
if ! grep -Eq "^LNBits=" /mnt/hdd/raspiblitz.conf; then
echo "LNBits=off" >> /mnt/hdd/raspiblitz.conf
fi
# status
if [ "$1" = "status" ]; then
@ -340,7 +335,7 @@ EOF
sudo systemctl enable lnbits
source /home/admin/raspiblitz.info
source <(/home/admin/_cache.sh get state)
if [ "${state}" == "ready" ]; then
echo "# OK - lnbits service is enabled, system is on ready so starting lnbits service"
sudo systemctl start lnbits
@ -369,13 +364,13 @@ EOF
sudo systemctl reload nginx
# setting value in raspi blitz config
sudo sed -i "s/^LNBits=.*/LNBits=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set LNBits "on"
# Hidden Service if Tor is active
source /mnt/hdd/raspiblitz.conf
if [ "${runBehindTor}" = "on" ]; then
# make sure to keep in sync with internet.tor.sh script
/home/admin/config.scripts/internet.hiddenservice.sh lnbits 80 5002 443 5003
# make sure to keep in sync with tor.network.sh script
/home/admin/config.scripts/tor.onion-service.sh lnbits 80 5002 443 5003
fi
exit 0
fi
@ -399,7 +394,7 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
echo "# deleteData(${deleteData})"
# setting value in raspi blitz config
sudo sed -i "s/^LNBits=.*/LNBits=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set LNBits "off"
# remove nginx symlinks
sudo rm -f /etc/nginx/sites-enabled/lnbits_ssl.conf
@ -413,7 +408,7 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
# Hidden Service if Tor is active
if [ "${runBehindTor}" = "on" ]; then
/home/admin/config.scripts/internet.hiddenservice.sh off lnbits
/home/admin/config.scripts/tor.onion-service.sh off lnbits
fi
isInstalled=$(sudo ls /etc/systemd/system/lnbits.service 2>/dev/null | grep -c 'lnbits.service')

View File

@ -15,11 +15,6 @@ gpgFingerprint="0453B9F5071261A40FDB34181965063FC13BEBE2"
source /mnt/hdd/raspiblitz.conf
# add default value to raspi config if needed
if ! grep -Eq "^lndmanage=" /mnt/hdd/raspiblitz.conf; then
echo "lndmanage=off" >> /mnt/hdd/raspiblitz.conf
fi
# show info menu
if [ "$1" = "menu" ]; then
dialog --title " Info lndmanage " --msgbox "\n\
@ -92,7 +87,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
fi
# setting value in raspi blitz config
sudo sed -i "s/^lndmanage=.*/lndmanage=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set lndmanage "on"
echo "#######################################################################"
echo "# OK install done"
echo "#######################################################################"
@ -107,7 +102,7 @@ fi
if [ "$1" = "0" ] || [ "$1" = "off" ]; then
# setting value in raspi blitz config
sudo sed -i "s/^lndmanage=.*/lndmanage=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set lndmanage "off"
echo "*** REMOVING LNDMANAGE ***"
sudo rm -rf /home/admin/lndmanage

View File

@ -15,13 +15,6 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
exit 1
fi
source /mnt/hdd/raspiblitz.conf
# add default value to raspi config if needed
if ! grep -Eq "^loop=" /mnt/hdd/raspiblitz.conf; then
echo "loop=off" >> /mnt/hdd/raspiblitz.conf
fi
# show info menu
if [ "$1" = "menu" ]; then
dialog --title " Info Loop Service " --msgbox "\n\
@ -152,7 +145,7 @@ WantedBy=multi-user.target
sudo /home/admin/config.scripts/bonus.rtl.sh connect-services
# setting value in raspi blitz config
sudo sed -i "s/^loop=.*/loop=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set loop "on"
isInstalled=$(sudo -u loop /home/loop/go/bin/loop | grep -c loop)
if [ ${isInstalled} -gt 0 ] ; then
@ -169,7 +162,7 @@ fi
if [ "$1" = "0" ] || [ "$1" = "off" ]; then
# setting value in raspi blitz config
sudo sed -i "s/^loop=.*/loop=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set loop "off"
isInstalled=$(sudo ls /etc/systemd/system/loopd.service 2>/dev/null | grep -c 'loopd.service')
if [ ${isInstalled} -eq 1 ]; then

View File

@ -67,11 +67,6 @@ Activate TOR to access the web block explorer from outside your local network.
exit 0
fi
# add default value to raspi config if needed
if ! grep -Eq "^mempoolExplorer=" /mnt/hdd/raspiblitz.conf; then
echo "mempoolExplorer=off" >> /mnt/hdd/raspiblitz.conf
fi
# status
if [ "$1" = "status" ]; then
@ -280,7 +275,7 @@ EOF
fi
# start the service if ready
source /home/admin/raspiblitz.info
source <(/home/admin/_cache.sh get state)
if [ "${state}" == "ready" ]; then
echo "# OK - the mempool.service is enabled, system is on ready so starting service"
sudo systemctl start mempool
@ -289,17 +284,16 @@ EOF
fi
# setting value in raspi blitz config
sudo sed -i "s/^mempoolExplorer=.*/mempoolExplorer=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set mempoolExplorer "on"
echo "# needs to finish creating txindex to be functional"
echo "# monitor with: sudo tail -n 20 -f /mnt/hdd/bitcoin/debug.log"
# Hidden Service for Mempool if Tor is active
source /mnt/hdd/raspiblitz.conf
if [ "${runBehindTor}" = "on" ]; then
# make sure to keep in sync with internet.tor.sh script
/home/admin/config.scripts/internet.hiddenservice.sh mempool 80 4082 443 4083
# make sure to keep in sync with tor.network.sh script
/home/admin/config.scripts/tor.onion-service.sh mempool 80 4082 443 4083
fi
exit 0
fi
@ -308,7 +302,7 @@ fi
if [ "$1" = "0" ] || [ "$1" = "off" ]; then
# setting value in raspi blitz config
sudo sed -i "s/^mempoolExplorer=.*/mempoolExplorer=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set mempoolExplorer "off"
isInstalled=$(sudo ls /etc/systemd/system/mempool.service 2>/dev/null | grep -c 'mempool.service')
if [ ${isInstalled} -eq 1 ]; then
@ -336,8 +330,8 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
# Hidden Service if Tor is active
if [ "${runBehindTor}" = "on" ]; then
# make sure to keep in sync with internet.tor.sh script
/home/admin/config.scripts/internet.hiddenservice.sh off mempool
# make sure to keep in sync with tor.network.sh script
/home/admin/config.scripts/tor.onion-service.sh off mempool
fi
echo "# OK Mempool removed."
@ -355,14 +349,14 @@ fi
# update
if [ "$1" = "update" ]; then
echo "*** Checking Mempool Explorer Version ***"
cd /home/mempool/mempool
localVersion=$(git describe --tag)
updateVersion=$(curl -s https://api.github.com/repos/mempool/mempool/releases/latest|grep tag_name|head -1|cut -d '"' -f4)
if [ $localVersion = $updateVersion ]; then
echo "*** You are up-to-date on version $localVersion ***"
echo "*** You are up-to-date on version $localVersion ***"
sudo systemctl restart mempool 2>/dev/null
echo "*** Restarting Mempool ***"
else
@ -405,7 +399,7 @@ if [ "$1" = "update" ]; then
sudo chown mempool:mempool /home/mempool/mempool/backend/mempool-config.json
# Restore frontend files
# Restore frontend files
cd /home/mempool/mempool/frontend
sudo rsync -I -av --delete dist/mempool/ /var/www/mempool/
sudo chown -R www-data:www-data /var/www/mempool

View File

@ -16,13 +16,6 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
exit 1
fi
source /mnt/hdd/raspiblitz.conf
# add default value to raspi config if needed
if ! grep -Eq "^pool=" /mnt/hdd/raspiblitz.conf; then
echo "pool=off" >> /mnt/hdd/raspiblitz.conf
fi
# show info menu
if [ "$1" = "menu" ]; then
whiptail --title " Info Pool Service " --msgbox "\
@ -228,7 +221,7 @@ WantedBy=multi-user.target
echo "the poold.service already installed."
fi
source /home/admin/raspiblitz.info
source <(/home/admin/_cache.sh get state)
if [ "${state}" == "ready" ]; then
echo "# OK - the poold.service is enabled, system is on ready so starting service"
sudo systemctl start poold
@ -236,7 +229,7 @@ WantedBy=multi-user.target
echo "# OK - the poold.service is enabled, to start manually use: sudo systemctl start poold"
fi
# setting value in raspi blitz config
sudo sed -i "s/^pool=.*/pool=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set pool "on"
isInstalled=$(sudo -u pool /usr/local/bin/poold | grep -c pool)
if [ ${isInstalled} -gt 0 ]; then
@ -258,7 +251,7 @@ fi
if [ "$1" = "0" ] || [ "$1" = "off" ]; then
# setting value in raspi blitz config
sudo sed -i "s/^pool=.*/pool=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set pool "off"
isInstalled=$(sudo ls /etc/systemd/system/poold.service 2>/dev/null | grep -c 'poold.service')
if [ ${isInstalled} -eq 1 ]; then

View File

@ -7,13 +7,6 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
exit 1
fi
source /mnt/hdd/raspiblitz.conf
# add default value to raspi config if needed
if ! grep -Eq "^pyblock=" /mnt/hdd/raspiblitz.conf; then
echo "pyblock=off" >> /mnt/hdd/raspiblitz.conf
fi
# show info menu
if [ "$1" = "menu" ]; then
dialog --title " Info PyBlock " --msgbox "
@ -74,7 +67,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
sudo chown pyblock:pyblock /home/pyblock/blndconnect.conf
# setting value in raspi blitz config
sudo sed -i "s/^pyblock=.*/pyblock=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set pyblock "on"
## pyblock short command
sudo bash -c "echo 'alias pyblock=\"cd ~; python3 ~/PyBLOCK/PyBlock.py\"' >> /home/pyblock/.bashrc"
@ -91,7 +84,7 @@ fi
if [ "$1" = "0" ] || [ "$1" = "off" ]; then
# setting value in raspi blitz config
sudo sed -i "s/^pyblock=.*/pyblock=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set pyblock "off"
echo "*** REMOVING PyBLOCK ***"
sudo userdel -rf pyblock

View File

@ -5,7 +5,6 @@ RTLVERSION="v0.11.2"
# check and load raspiblitz config
# to know which network is running
source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf
# command info
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
@ -112,15 +111,6 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
echo "# Installing RTL for ${LNTYPE} ${CHAIN}"
# prepare raspiblitz.conf --> add default value
configEntryExists=$(sudo cat /mnt/hdd/raspiblitz.conf | grep -c "${configEntry}")
if [ "${configEntryExists}" == "0" ]; then
echo "# adding default config entry for '${configEntry}'"
sudo /bin/sh -c "echo '${configEntry}=off' >> /mnt/hdd/raspiblitz.conf"
else
echo "# default config entry for '${configEntry}' exists"
fi
# check and install NodeJS
/home/admin/config.scripts/bonus.nodejs.sh on
@ -178,7 +168,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
echo
fi
fi
echo "# Updating Firewall"
sudo ufw allow ${RTLHTTP} comment "${systemdService} HTTP"
sudo ufw allow $((RTLHTTP+1)) comment "${systemdService} HTTPS"
@ -231,7 +221,7 @@ WantedBy=multi-user.target
sudo sed -i "s/^Wants=.*/Wants=${netprefix}lightningd.service/g" /etc/systemd/system/${systemdService}.service
sudo sed -i "s/^After=.*/After=${netprefix}lightningd.service/g" /etc/systemd/system/${systemdService}.service
# set up C-LightningREST
# set up C-LightningREST
/home/admin/config.scripts/cl.rest.sh on ${CHAIN}
fi
@ -240,8 +230,8 @@ WantedBy=multi-user.target
# Hidden Service for RTL if Tor is active
if [ "${runBehindTor}" = "on" ]; then
# make sure to keep in sync with internet.tor.sh script
/home/admin/config.scripts/internet.hiddenservice.sh ${netprefix}${typeprefix}RTL 80 $((RTLHTTP+2)) 443 $((RTLHTTP+3))
# make sure to keep in sync with tor.network.sh script
/home/admin/config.scripts/tor.onion-service.sh ${netprefix}${typeprefix}RTL 80 $((RTLHTTP+2)) 443 $((RTLHTTP+3))
fi
# nginx configuration
@ -264,8 +254,8 @@ WantedBy=multi-user.target
# run config as root to connect prepare services (lit, pool, ...)
sudo /home/admin/config.scripts/bonus.rtl.sh connect-services
# raspiblitz.config
sudo sed -i "s/^${configEntry}=.*/${configEntry}=on/g" /mnt/hdd/raspiblitz.conf
# ig
/home/admin/config.scripts/blitz.conf.sh set ${configEntry} "on"
sudo systemctl enable ${systemdService}
sudo systemctl start ${systemdService}
@ -276,7 +266,7 @@ fi
##########################
# CONNECT SERVICES
# will be called by lit or loop services to make sure services
# will be called by lit or loop services to make sure services
# are connected or on RTL install/update
#########################
@ -290,7 +280,7 @@ if [ "$1" = "connect-services" ]; then
# only run when RTL is installed
if [ -d /home/rtl ]; then
echo "## RTL CONNECT-SERVICES"
echo "## RTL CONNECT-SERVICES"
else
echo "# no RTL installed - no need to connect any services"
exit
@ -320,7 +310,7 @@ if [ "$1" = "connect-services" ]; then
echo "# No lit or loop single detected"
fi
echo "# RTL CONNECT-SERVICES done"
echo "# RTL CONNECT-SERVICES done"
exit 0
fi
@ -344,7 +334,7 @@ if [ "$1" = "prestart" ]; then
exit 1
fi
echo "## RTL PRESTART CONFIG (called by systemd prestart)"
echo "## RTL PRESTART CONFIG (called by systemd prestart)"
# getting the up-to-date RPC password
RPCPASSWORD=$(cat /mnt/hdd/${network}/${network}.conf | grep "^rpcpassword=" | cut -d "=" -f2)
@ -439,7 +429,7 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
sudo systemctl stop ${systemdService} 2>/dev/null
# setting value in raspi blitz config
sudo sed -i "s/^${configEntry}=.*/${configEntry}=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ${configEntry} "off"
# remove nginx symlinks
sudo rm -f /etc/nginx/sites-enabled/${netprefix}${typeprefix}rtl_ssl.conf 2>/dev/null
@ -453,7 +443,7 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
# Hidden Service if Tor is active
if [ "${runBehindTor}" = "on" ]; then
/home/admin/config.scripts/internet.hiddenservice.sh off ${systemdService}
/home/admin/config.scripts/tor.onion-service.sh off ${systemdService}
fi
isInstalled=$(sudo ls /etc/systemd/system/${systemdService}.service 2>/dev/null | grep -c "${systemdService}.service")
@ -520,7 +510,7 @@ fi
# sudo -u rtl npm install --only=prod
# currentRTLcommit=$(cd /home/rtl/RTL; git describe --tags)
# echo "# Updated RTL to $currentRTLcommit"
# else
# else
# echo "# Unknown option: $updateOption"
# fi
#

View File

@ -1,5 +1,5 @@
#!/bin/bash
# https://github.com/cryptoadvance/specter-desktop
# https://github.com/cryptoadvance/specter-desktop
pinnedVersion="1.7.2"
@ -11,7 +11,6 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
exit 1
fi
source /mnt/hdd/raspiblitz.conf
echo "# bonus.specter.sh $1 $2"
if [ $# -gt 1 ];then
@ -44,7 +43,7 @@ if [ "$1" = "status" ]; then
else
echo "configured=0"
fi
exit 0
fi
@ -91,11 +90,6 @@ Activate TOR to access the web block explorer from outside your local network.
exit 0
fi
# add default value to raspi config if needed
if ! grep -Eq "^specter=" /mnt/hdd/raspiblitz.conf; then
echo "specter=off" >> /mnt/hdd/raspiblitz.conf
fi
# blockfilterindex
# add blockfilterindex with default value (0) to bitcoin.conf if missing
if ! grep -Eq "^blockfilterindex=.*" /mnt/hdd/${network}/${network}.conf; then
@ -140,7 +134,7 @@ EOF
PASSWORD_B=$(sudo cat /mnt/hdd/${network}/${network}.conf | grep rpcpassword | cut -c 13-)
echo "# Connect Specter to the default mainnet node"
cat > /home/admin/default.json <<EOF
cat > /home/admin/default.json <<EOF
{
"name": "raspiblitz_mainnet",
"alias": "default",
@ -167,7 +161,7 @@ EOF
PORT="${portprefix}8332"
echo "# Connect Specter to the raspiblitz_${chain}net node"
cat > /home/admin/raspiblitz_${chain}net.json <<EOF
cat > /home/admin/raspiblitz_${chain}net.json <<EOF
{
"name": "raspiblitz_${chain}net",
"alias": "raspiblitz_${chain}net",
@ -208,10 +202,10 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
echo "# --> Installing prerequisites"
sudo apt update
sudo apt-get install -y virtualenv libffi-dev libusb-1.0.0-dev libudev-dev
sudo apt-get install -y virtualenv libffi-dev libusb-1.0.0-dev libudev-dev
sudo adduser --disabled-password --gecos "" specter
echo "# add the user to the debian-tor group"
sudo usermod -a -G debian-tor specter
@ -249,7 +243,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
echo
echo "# --> Installing udev-rules for hardware-wallets"
# Ledger
cat > /home/admin/20-hw1.rules <<EOF
HW.1 / Nano
@ -265,7 +259,7 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="2c97", ATTRS{idProduct}=="0003|3000|3001|30
# Nano X
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2c97", ATTRS{idProduct}=="0004|4000|4001|4002|4003|4004|4005|4006|4007|4008|4009|400a|400b|400c|400d|400e|400f|4010|4011|4012|4013|4014|4015|4016|4017|4018|4019|401a|401b|401c|401d|401e|401f", TAG+="uaccess", TAG+="udev-acl", OWNER="specter"
EOF
# ColdCard
cat > /home/admin/51-coinkite.rules <<EOF
# Linux udev support file.
@ -284,7 +278,7 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="d13e", ATTRS{idProduct}=="cc10", GROUP="plu
# from <https://github.com/signal11/hidapi/blob/master/udev/99-hid.rules>
KERNEL=="hidraw*", ATTRS{idVendor}=="d13e", ATTRS{idProduct}=="cc10", GROUP="plugdev", MODE="0666"
EOF
# Trezor
cat > /home/admin/51-trezor.rules <<EOF
# Trezor: The Original Hardware Wallet
@ -305,7 +299,7 @@ SUBSYSTEM=="usb", ATTR{idVendor}=="1209", ATTR{idProduct}=="53c0", MODE="0660",
SUBSYSTEM=="usb", ATTR{idVendor}=="1209", ATTR{idProduct}=="53c1", MODE="0660", GROUP="plugdev", TAG+="uaccess", TAG+="udev-acl", SYMLINK+="trezor%n"
KERNEL=="hidraw*", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="53c1", MODE="0660", GROUP="plugdev", TAG+="uaccess", TAG+="udev-acl"
EOF
# KeepKey
cat > /home/admin/51-usb-keepkey.rules <<EOF
# KeepKey: Your Private Bitcoin Vault
@ -363,19 +357,18 @@ EOF
sudo systemctl enable specter
echo "# --> OK - the specter service is now enabled and started"
else
else
echo "# --> specter already installed."
fi
# setting value in raspi blitz config
sudo sed -i "s/^specter=.*/specter=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set specter "on"
# Hidden Service for SERVICE if Tor is active
source /mnt/hdd/raspiblitz.conf
if [ "${runBehindTor}" = "on" ]; then
# make sure to keep in sync with internet.tor.sh script
# make sure to keep in sync with tor.network.sh script
# port 25441 is HTTPS with self-signed cert - specte only makes sense to be served over HTTPS
/home/admin/config.scripts/internet.hiddenservice.sh specter 443 25441
/home/admin/config.scripts/tor.onion-service.sh specter 443 25441
fi
# blockfilterindex on
@ -403,11 +396,11 @@ fi
if [ "$1" = "0" ] || [ "$1" = "off" ]; then
# setting value in raspi blitz config
sudo sed -i "s/^specter=.*/specter=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set specter "off"
# Hidden Service if Tor is active
if [ "${runBehindTor}" = "on" ]; then
/home/admin/config.scripts/internet.hiddenservice.sh off specter
/home/admin/config.scripts/tor.onion-service.sh off specter
fi
isInstalled=$(sudo ls /etc/systemd/system/specter.service 2>/dev/null | grep -c 'specter.service')
@ -422,10 +415,10 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
if whiptail --defaultno --yesno "Do you want to delete all Data related to specter? This includes also Bitcoin-Core-Wallets managed by specter?" 0 0; then
echo "# --> Removing wallets in core"
bitcoin-cli listwallets | jq -r .[] | tail -n +2
for i in $(bitcoin-cli listwallets | jq -r .[] | tail -n +2)
do
for i in $(bitcoin-cli listwallets | jq -r .[] | tail -n +2)
do
name=$(echo $i | cut -d"/" -f2)
bitcoin-cli unloadwallet specter/$name
bitcoin-cli unloadwallet specter/$name
done
echo "# --> Removing the /mnt/hdd/app-data/.specter"
sudo rm -rf /mnt/hdd/app-data/.specter
@ -450,7 +443,7 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
fi
echo "# --> OK Specter Desktop removed."
else
else
echo "# --> Specter Desktop is not installed."
fi
exit 0

View File

@ -48,7 +48,7 @@ if [ "$1" = "menu" ]; then
--no-button "Other Options" \
--yesno "\nYou can connect Sphinx App over Tor. Its build in for iOS and on Android you need to use it together with the Orbot App." 10 72
if [ "$?" != "1" ]; then
echo "sphinxrelay_connection='tor'" >> /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set sphinxrelay_connection "tor"
echo "Please wait (+1min) ... restarting sphinx relay to use tor"
sudo systemctl restart sphinxrelay
sleep 60
@ -80,7 +80,7 @@ use it securely from everywhere.
elif [ ${connection} = "dns&letsencrypt" ]; then
text="${text}\n
Public Domain: ${publicURL}
port forwarding on router needs to be active & may change port"
port forwarding on router needs to be active & may change port"
# When just IP2TOR
elif [ ${connection} = "ip2tor&selfsigned" ]; then
@ -102,7 +102,7 @@ port forwarding on router needs to be active & may change port"
Tor Connection: ${publicURL}
iOS support is native, Android needs Orbot"
# When nothing advise
# When nothing advise
elif [ ${connection} = "localnetwork" ]; then
text="${text}\n
At the moment your Sphinx Relay Server is just available
@ -143,7 +143,7 @@ It needs an additional Domain with LetsEncrypt certificate for HTTPS: Go MAINMEN
There CANNOT BE MORE THAN ONE APP connected at the same time.\n
To switch devices within the Sphnix app: see PROFILE & export keys or
you have to deinstall the Sphinx-Relay with DELETE DATA & reinstall.\n
If you just upgraded from local network to IP2Tor + HTTPS -->
If you just upgraded from local network to IP2Tor + HTTPS -->
open the app > PROFILE & under ADVANCED change the SERVER URL to:
${publicURL}"
whiptail --title " Warning " \
@ -183,11 +183,6 @@ ${extraPairInfo}" 17 76
exit 0
fi
# add default value to raspi config if needed
if ! grep -Eq "^sphinxrelay=" /mnt/hdd/raspiblitz.conf; then
echo "sphinxrelay=off" >> /mnt/hdd/raspiblitz.conf
fi
# write environment configs fresh before every start
# IMPORTANT: all this needs to work without sudo because will run from systemd as sphinxrelay user
if [ "$1" = "write-environment" ]; then
@ -242,11 +237,11 @@ if [ "$1" = "status" ]; then
connectionCode=$(sudo cat /home/sphinxrelay/sphinx-relay/connection_string.txt)
fi
echo "connectionCode='${connectionCode}'"
# decode with base64 for debug
connectionCodeClear=$(echo -n "${connectionCode}" | base64 --decode)
echo "connectionCodeClear='${connectionCodeClear}'"
# check for LetsEnryptDomain for DynDns
error=""
source <(/home/admin/config.scripts/blitz.subscriptions.ip2tor.py ip-by-tor $publicIP)
@ -321,7 +316,7 @@ if [ "$1" = "status" ]; then
elif [ "${runBehindTor}" == "on" ] && [ "${sphinxrelay_connection}" == "tor" ]; then
connection="tor"
publicURL="http://${toraddress}:80"
# 6) LOCAL NETWORK (just HTTP)
else
connection="localnetwork"
@ -448,8 +443,8 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
# Hidden Service if Tor is active
source /mnt/hdd/raspiblitz.conf
if [ "${runBehindTor}" = "on" ]; then
# make sure to keep in sync with internet.tor.sh script
/home/admin/config.scripts/internet.hiddenservice.sh sphinxrelay 80 3302 443 3303
# make sure to keep in sync with tor.network.sh script
/home/admin/config.scripts/tor.onion-service.sh sphinxrelay 80 3302 443 3303
# get TOR address and store it readable for sphinxrelay user
toraddress=$(sudo cat /mnt/hdd/tor/sphinxrelay/hostname 2>/dev/null)
sudo -u sphinxrelay bash -c "echo '${toraddress}' > /home/sphinxrelay/sphinx-relay/dist/toraddress.txt"
@ -495,7 +490,7 @@ EOF
sudo systemctl enable sphinxrelay
source /home/admin/raspiblitz.info
source <(/home/admin/_cache.sh get state)
if [ "${state}" == "ready" ]; then
echo "# OK - sphinxrelay service is enabled, system is on ready so starting service"
sudo systemctl start sphinxrelay
@ -524,7 +519,7 @@ EOF
sudo systemctl reload nginx
# setting value in raspi blitz config
sudo sed -i "s/^sphinxrelay=.*/sphinxrelay=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set sphinxrelay "on"
exit 0
fi
@ -561,7 +556,7 @@ if [ "$1" = "update" ]; then
#echo
#echo "# Starting the sphinxrelay.service ... "
#sudo systemctl start sphinxrelay
exit 0
fi
@ -584,8 +579,8 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
echo "# deleteData(${deleteData})"
# setting value in raspi blitz config
sudo sed -i "s/^sphinxrelay=.*/sphinxrelay=off/g" /mnt/hdd/raspiblitz.conf
sudo sed -i "/^sphinxrelay_connection=.*/d" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set sphinxrelay "off"
/home/admin/config.scripts/blitz.conf.sh delete sphinxrelay_connection
# remove nginx symlinks
sudo rm -f /etc/nginx/sites-enabled/sphinxrelay_ssl.conf
@ -599,7 +594,7 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
# Hidden Service if Tor is active
if [ "${runBehindTor}" = "on" ]; then
/home/admin/config.scripts/internet.hiddenservice.sh off sphinxrelay
/home/admin/config.scripts/tor.onion-service.sh off sphinxrelay
fi
isInstalled=$(sudo ls /etc/systemd/system/sphinxrelay.service 2>/dev/null | grep -c 'sphinxrelay.service')

View File

@ -128,7 +128,7 @@ fi
echo "Switch to the '$USERNAME' user and adapt the settings in $CONFIG_FILE"
# setting value in raspi blitz config
grep -q '^stackingSatsKraken' $RASPIBLITZ_FILE && sudo sed -i "s/^stackingSatsKraken=.*/stackingSatsKraken=on/g" $RASPIBLITZ_FILE || echo 'stackingSatsKraken=on' >> $RASPIBLITZ_FILE
/home/admin/config.scripts/blitz.conf.sh set stackingSatsKraken "on"
else
echo "STACKING-SATS-KRAKEN already installed."
fi
@ -158,7 +158,7 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
echo "*** REMOVING STACKING-SATS-KRAKEN ***"
# setting value in raspi blitz config
sudo sed -i "s/^stackingSatsKraken=.*/stackingSatsKraken=off/g" $RASPIBLITZ_FILE
/home/admin/config.scripts/blitz.conf.sh set stackingSatsKraken "off"
# remove config
sudo rm -rf $APP_DATA_DIR

View File

@ -17,11 +17,6 @@ PGPpubkeyFingerprint="91F3B339B9A02A3D"
source /mnt/hdd/raspiblitz.conf
# add default value to raspi config if needed
if ! grep -Eq "^suez=" /mnt/hdd/raspiblitz.conf; then
echo "suez=off" >> /mnt/hdd/raspiblitz.conf
fi
# show info menu
if [ "$1" = "menu" ]; then
dialog --title " Info Suez" --msgbox "
@ -56,7 +51,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
| sudo tee -a /home/admin/_aliases
# setting value in raspi blitz config
sudo sed -i "s/^suez=.*/suez=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set suez "on"
echo "# To use the alias in /home/admin/_aliases:"
echo "source /home/admin/_aliases"
@ -75,7 +70,7 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
echo "# OK, suez is removed."
# setting value in raspi blitz config
sudo sed -i "s/^suez=.*/suez=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set suez "off"
exit 0

View File

@ -13,22 +13,12 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
exit 1
fi
# CONFIGFILE - configuration of RaspiBlitz
configFile="/mnt/hdd/raspiblitz.conf"
# Check if HDD contains configuration
configExists=$(ls ${configFile} | grep -c '.conf')
if [ ${configExists} -ne 1 ]; then
echo "RaspiBlitz config file '${configFile}' not found"
exit 1
fi
# at this point the config file exists and can be sourced
source ${configFile}
source /mnt/hdd/raspiblitz.conf
# this variables is used repeatedly in this script
resources_dir=/home/admin/assets/telegraf/etc-telegraf
###############################
# give status
if [ "$1" = "status" ]; then
@ -147,9 +137,8 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
sleep 2
sudo systemctl status telegraf.service --no-page 2>/dev/null
echo "*** telegraf installation: set 'telegrafMonitoring=on' in config file '${configFile}'"
sudo sed -i "s/^telegrafMonitoring=.*/telegrafMonitoring=on/g" ${configFile}
echo "*** telegraf installation: set 'telegrafMonitoring=on' in config file 'raspiblitz.conf'"
/home/admin/config.scripts/blitz.conf.sh set telegrafMonitoring "on"
echo "*** install telegraf done ***"
@ -165,8 +154,8 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
# let apt-get remove the package
sudo apt-get remove -y telegraf
echo "*** telegraf remove: set 'telegrafMonitoring=off' in config file '${configFile}'"
sudo sed -i "s/^telegrafMonitoring=.*/telegrafMonitoring=off/g" ${configFile}
echo "*** telegraf remove: set 'telegrafMonitoring=off' in config file 'raspiblitz.conf'"
/home/admin/config.scripts/blitz.conf.sh set telegrafMonitoring "off"
echo "*** remove telegraf done ***"

View File

@ -19,10 +19,6 @@ PGPpubkeyFingerprint="4403F1DFBE779457"
# to know which network is running
source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf
if [ ${#network} -eq 0 ]; then
echo "FAIL - missing /mnt/hdd/raspiblitz.conf"
exit 1
fi
# show info menu
if [ "$1" = "menu" ]; then
@ -57,11 +53,6 @@ Activate TOR to access the web interface from outside your local network.
exit 0
fi
# add default value to raspi config if needed
if ! grep -Eq "^thunderhub=" /mnt/hdd/raspiblitz.conf; then
echo "thunderhub=off" >> /mnt/hdd/raspiblitz.conf
fi
# stop services
echo "making sure services are not running"
sudo systemctl stop thunderhub 2>/dev/null
@ -73,7 +64,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
isInstalled=$(sudo ls /etc/systemd/system/thunderhub.service 2>/dev/null | grep -c 'thunderhub.service')
if ! [ ${isInstalled} -eq 0 ]; then
echo "ThunderHub already installed."
else
else
###############
# INSTALL
###############
@ -185,7 +176,7 @@ EOF
sudo chmod 600 /mnt/hdd/app-data/thunderhub/thubConfig.yaml | exit 1
# symlink
sudo ln -s /mnt/hdd/app-data/thunderhub/thubConfig.yaml /home/thunderhub/
##################
# NGINX
##################
@ -204,13 +195,13 @@ EOF
sudo ln -sf /etc/nginx/sites-available/thub_tor_ssl.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
# open the firewall
echo "*** Updating Firewall ***"
sudo ufw allow from any to any port 3010 comment 'allow ThunderHub HTTP'
sudo ufw allow from any to any port 3011 comment 'allow ThunderHub HTTPS'
echo ""
##################
# SYSTEMD SERVICE
##################
@ -247,14 +238,14 @@ WantedBy=multi-user.target
sudo systemctl enable thunderhub
# setting value in raspiblitz config
sudo sed -i "s/^thunderhub=.*/thunderhub=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set thunderhub "on"
# Hidden Service for thunderhub if Tor is active
if [ "${runBehindTor}" = "on" ]; then
# make sure to keep in sync with internet.tor.sh script
/home/admin/config.scripts/internet.hiddenservice.sh thunderhub 80 3012 443 3013
# make sure to keep in sync with tor.network.sh script
/home/admin/config.scripts/tor.onion-service.sh thunderhub 80 3012 443 3013
fi
source /home/admin/raspiblitz.info
source <(/home/admin/_cache.sh get state)
if [ "${state}" == "ready" ]; then
echo "# OK - the thunderhub.service is enabled, system is ready so starting service"
sudo systemctl start thunderhub
@ -267,7 +258,7 @@ fi
# switch off
if [ "$1" = "0" ] || [ "$1" = "off" ]; then
echo "*** REMOVING THUNDERHUB ***"
# remove systemd service
sudo systemctl disable thunderhub
@ -290,13 +281,13 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
# Hidden Service if Tor is active
if [ "${runBehindTor}" = "on" ]; then
/home/admin/config.scripts/internet.hiddenservice.sh off thunderhub
/home/admin/config.scripts/tor.onion-service.sh off thunderhub
fi
echo "OK ThunderHub removed."
# setting value in raspi blitz config
sudo sed -i "s/^thunderhub=.*/thunderhub=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set thunderhub "off"
exit 0
fi
@ -313,7 +304,7 @@ if [ "$1" = "update" ]; then
UPSTREAM=${1:-'@{u}'}
LOCAL=$(git rev-parse @)
REMOTE=$(git rev-parse "$UPSTREAM")
if [ $LOCAL = $REMOTE ]; then
TAG=$(git tag | sort -V | tail -1)
echo "# Up-to-date on version" $TAG

View File

@ -9,11 +9,6 @@ fi
source /mnt/hdd/raspiblitz.conf
# add default value to raspi config if needed
if ! grep -Eq "^typescript=" /mnt/hdd/raspiblitz.conf; then
echo "typescript=off" >> /mnt/hdd/raspiblitz.conf
fi
# switch on
if [ "$1" = "1" ] || [ "$1" = "on" ]; then
# check if typescript was installed
@ -55,7 +50,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
fi
fi
# setting value in raspi blitz config
sudo sed -i "s/^typescript=.*/typescript=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set typescript "on"
echo "Installed typescript $(node -v)"
exit 0
fi
@ -63,7 +58,7 @@ fi
# switch off
if [ "$1" = "0" ] || [ "$1" = "off" ]; then
# setting value in raspiblitz config
sudo sed -i "s/^typescript=.*/typescript=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set typescript "off"
echo "*** REMOVING typescript ***"
npm uninstall typescript -g
echo "OK typescript removed."

View File

@ -16,11 +16,6 @@ fi
source /mnt/hdd/raspiblitz.conf
# add default value to raspi config if needed
if ! grep -Eq "^whitepaper=" /mnt/hdd/raspiblitz.conf; then
echo "whitepaper=off" >> /mnt/hdd/raspiblitz.conf
fi
# show info menu
if [ "$1" = "menu" ]; then
dialog --title " Whitepaper Info" --msgbox "
@ -50,7 +45,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
# transfor pdf to txt to view with less through the terminal
pdftotext $DownloadPath$WhitepaperFilename
# setting value in raspi blitz config
sudo sed -i "s/^whitepaper=.*/whitepaper=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set whitepaper "on"
echo "# OK - Whitepaper downloaded to $DownloadPath$WhitepaperFilename"
exit 0
fi
@ -65,7 +60,7 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
echo "# ***"
echo ""
# setting value in raspi blitz config
sudo sed -i "s/^whitepaper=.*/whitepaper=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set whitepaper "off"
rm $DownloadPath$WhitepaperFilename
rm $DownloadPath/bitcoin.txt
echo "# OK - Whitepaper removed."

View File

@ -9,10 +9,6 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
exit 1
fi
# add default value to raspi config if needed
if ! grep -Eq "^zerotier=" /mnt/hdd/raspiblitz.conf; then
echo "zerotier=off" >> /mnt/hdd/raspiblitz.conf
fi
source /mnt/hdd/raspiblitz.conf
# show info menu
@ -66,7 +62,8 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
echo "# OK - joined"
# setting value in raspi blitz config
sudo sed -i "s/^zerotier=.*/zerotier=${networkID}/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set zerotier "${networkID}"
# adding zero tier IP to LND TLS cert
# sudo /home/admin/config.scripts/lnd.tlscert.sh ip-add 172.X
@ -90,7 +87,7 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then
sudo -u admin sudo apt -y purge zerotier-one 1>&2
# setting value in raspi blitz config
sudo sed -i "s/^zerotier=.*/zerotier=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set zerotier "off"
echo "# OK, ZeroTier is removed."
exit 0

View File

@ -74,7 +74,7 @@ if [ $1 = on ];then
--lightning-dir /home/bitcoin/.lightning/${CLNETWORK} \
file:///home/bitcoin/${netprefix}lightningd.sqlite3.backup
source /home/admin/raspiblitz.info
source <(/home/admin/_cache.sh get state)
if [ "${state}" == "ready" ]; then
sudo systemctl start ${netprefix}lightningd
echo "# Started the ${netprefix}lightningd.service"
@ -120,7 +120,7 @@ elif [ $1 = restore ];then
file:///home/bitcoin/${netprefix}lightningd.sqlite3.backup \
/home/bitcoin/.lightning/${CLNETWORK}/lightningd.sqlite3
source /home/admin/raspiblitz.info
source <(/home/admin/_cache.sh get state)
if [ "${state}" == "ready" ]; then
sudo systemctl start ${netprefix}lightningd
echo "# Started the ${netprefix}lightningd.service"

View File

@ -18,16 +18,6 @@ fi
# source <(/home/admin/config.scripts/network.aliases.sh getvars cl <mainnet|testnet|signet>)
source <(/home/admin/config.scripts/network.aliases.sh getvars cl $2)
# add default value to raspi config if needed
configEntry="${netprefix}clboss"
configEntryExists=$(sudo cat /mnt/hdd/raspiblitz.conf | grep -c "${configEntry}")
if [ "${configEntryExists}" == "0" ]; then
echo "# adding default config entry for '${configEntry}'"
sudo /bin/sh -c "echo '${configEntry}=off' >> /mnt/hdd/raspiblitz.conf"
else
echo "# default config entry for '${configEntry}' exists"
fi
if [ $1 = on ];then
if [ ! -f /home/bitcoin/cl-plugins-available/clboss-${CLBOSSVERSION}.tar.gz ];then
@ -58,9 +48,9 @@ if [ $1 = on ];then
fi
# setting value in raspiblitz.conf
sudo sed -i "s/^${netprefix}clboss=.*/${netprefix}clboss=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}clboss "on"
source /home/admin/raspiblitz.info
source <(/home/admin/_cache.sh get state)
if [ "${state}" == "ready" ]; then
echo "# Restart the ${netprefix}lightningd.service to activate clboss"
sudo systemctl restart ${netprefix}lightningd
@ -89,7 +79,7 @@ if [ $1 = off ];then
fi
# setting value in raspi blitz config
sudo sed -i "s/^${netprefix}clboss=.*/${netprefix}clboss=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}clboss "off"
echo "# clboss was uninstalled for $CHAIN"
fi

View File

@ -10,16 +10,6 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then
exit 1
fi
# add default value to raspi config if needed
configEntry="${netprefix}feeadjuster"
configEntryExists=$(sudo cat /mnt/hdd/raspiblitz.conf | grep -c "${configEntry}")
if [ "${configEntryExists}" == "0" ]; then
echo "# adding default config entry for '${configEntry}'"
sudo /bin/sh -c "echo '${configEntry}=off' >> /mnt/hdd/raspiblitz.conf"
else
echo "# default config entry for '${configEntry}' exists"
fi
source <(/home/admin/config.scripts/network.aliases.sh getvars cl $2)
if [ "$1" = "on" ];then
@ -37,9 +27,9 @@ if [ "$1" = "on" ];then
fi
# setting value in raspi blitz config
sudo sed -i "s/^${netprefix}feeadjuster=.*/${netprefix}feeadjuster=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}feeadjuster "on"
source /home/admin/raspiblitz.info
source <(/home/admin/_cache.sh get state)
if [ "${state}" == "ready" ] && [ "$3" != "norestart" ]; then
echo "# Start ${netprefix}${plugin}"
$lightningcli_alias plugin start /home/bitcoin/cl-plugins-enabled/${plugin}.py
@ -59,7 +49,7 @@ if [ "$1" = "off" ];then
sudo sed -i "/^feeadjuster/d" ${CLCONF}
# setting value in raspi blitz config
sudo sed -i "s/^${netprefix}feeadjuster=.*/${netprefix}feeadjuster=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}feeadjuster "off"
echo "# The ${plugin} was uninstalled"
fi

View File

@ -22,16 +22,6 @@ PGPpubkeyFingerprint="4AEE18F83AFDEB23"
# source <(/home/admin/config.scripts/network.aliases.sh getvars cl <mainnet|testnet|signet>)
source <(/home/admin/config.scripts/network.aliases.sh getvars cl mainnet)
# add default value to raspi config if needed
configEntry="clHTTPplugin"
configEntryExists=$(sudo cat /mnt/hdd/raspiblitz.conf | grep -c "${configEntry}")
if [ "${configEntryExists}" == "0" ]; then
echo "# adding default config entry for '${configEntry}'"
sudo /bin/sh -c "echo '${configEntry}=off' >> /mnt/hdd/raspiblitz.conf"
else
echo "# default config entry for '${configEntry}' exists"
fi
if [ $1 = connect ];then
toraddress=$(sudo cat /mnt/hdd/tor/clHTTPplugin/hostname)
PASSWORD_B=$(sudo cat /mnt/hdd/bitcoin/bitcoin.conf | grep rpcpassword | cut -c 13-)
@ -49,7 +39,7 @@ In Fully Noded go to 'Settings' > 'Node Manager' > +, from there you will be aut
add a label
add the rpc user: lightning
add the rpc password is your Password_B
add the onion address (also shown on the display as a QR and below), ensure you add the port at the end:
add the onion address (also shown on the display as a QR and below), ensure you add the port at the end:
${toraddress}:9080"
qrencode -t ANSIUTF8 "${toraddress}:9080"
@ -57,7 +47,7 @@ In Fully Noded go to 'Settings' > 'Node Manager' > +, from there you will be aut
echo "
ignore the macaroon and cert as that is for LND only
Thats it, Fully Noded will now automatically use those credentials for any lightning related functionality.
Thats it, Fully Noded will now automatically use those credentials for any lightning related functionality.
You can only have one lightning node at a a time, to add a new one just overwrite the existing credentials.
In Fully Noded you will see lightning bolt zap buttons in a few places, tap them to see what they do.
@ -93,7 +83,7 @@ if [ "$1" = "on" ];then
if [ ! -f /home/bitcoin/cl-plugins-available/c-lightning-http-plugin ];then
sudo -u bitcoin mkdir /home/bitcoin/cl-plugins-available
cd /home/bitcoin/cl-plugins-available || exit 1
cd /home/bitcoin/cl-plugins-available || exit 1
sudo -u bitcoin git clone https://github.com/Start9Labs/c-lightning-http-plugin.git
cd c-lightning-http-plugin || exit 1
sudo -u bitcoin git reset --hard ${clHTTPpluginVersion} || exit 1
@ -124,18 +114,18 @@ if [ "$1" = "on" ];then
echo "
http-pass=${PASSWORD_B}
" | sudo tee -a ${CLCONF}
else
echo "# clHTTPplugin is already configured in ${CLCONF}"
fi
# hidden service to https://xx.onion
/home/admin/config.scripts/internet.hiddenservice.sh clHTTPplugin 9080 9080
/home/admin/config.scripts/tor.onion-service.sh clHTTPplugin 9080 9080
# setting value in raspi blitz config
sudo sed -i "s/^clHTTPplugin=.*/clHTTPplugin=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set clHTTPplugin "on"
source /home/admin/raspiblitz.info
source <(/home/admin/_cache.sh get state)
if [ "${state}" == "ready" ] && [ "$2" != "norestart" ]; then
echo "# Restart the lightningd.service to activate clHTTPplugin"
sudo systemctl restart lightningd
@ -158,7 +148,7 @@ if [ "$1" = "off" ];then
echo "# Restart the lightningd.service to deactivate clHTTPplugin"
sudo systemctl restart lightningd
/home/admin/config.scripts/internet.hiddenservice.sh off clHTTPplugin
/home/admin/config.scripts/tor.onion-service.sh off clHTTPplugin
# purge
if [ "$(echo "$@" | grep -c purge)" -gt 0 ];then
@ -166,7 +156,7 @@ if [ "$1" = "off" ];then
sudo rm -rf /home/bitcoin/cl-plugins-available/c-lightning-http-plugin
fi
# setting value in raspi blitz config
sudo sed -i "s/^clHTTPplugin=.*/clHTTPplugin=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set clHTTPplugin "off"
echo "# clHTTPplugin was uninstalled"
fi

View File

@ -43,27 +43,17 @@ Accept the self-signed SSL certificate with the fingerprint:
${fingerprint}\n
${toraddresstext}
" 17 67
/home/admin/config.scripts/blitz.display.sh hide
echo "# please wait ..."
exit 0
fi
# add default value to raspi config if needed
configEntry="${netprefix}sparko"
configEntryExists=$(sudo cat /mnt/hdd/raspiblitz.conf | grep -c "${configEntry}")
if [ "${configEntryExists}" == "0" ]; then
echo "# adding default config entry for '${configEntry}'"
sudo /bin/sh -c "echo '${configEntry}=off' >> /mnt/hdd/raspiblitz.conf"
else
echo "# default config entry for '${configEntry}' exists"
fi
if [ $1 = connect ];then
localip=$(ip addr | grep 'state UP' -A2 | grep -E -v 'docker0|veth' | grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/')
toraddress=$(sudo cat /mnt/hdd/tor/${netprefix}sparko/hostname)
accesskey=$(sudo cat ${CLCONF} | grep "^sparko-keys=" | cut -d= -f2 | cut -d';' -f1)
accesskey=$(sudo cat ${CLCONF} | grep "^sparko-keys=" | cut -d= -f2 | cut -d';' -f1)
url="https://${localip}:${portprefix}9000/"
#string="${url}?access-key=${accesskey}"
#/home/admin/config.scripts/blitz.display.sh qr "$string"
@ -109,7 +99,7 @@ if [ "$1" = "on" ];then
isARM=$(uname -m | grep -c 'arm')
isAARCH64=$(uname -m | grep -c 'aarch64')
isX86_64=$(uname -m | grep -c 'x86_64')
if [ ${isARM} -eq 1 ] ; then
DISTRO="linux-arm"
elif [ ${isAARCH64} -eq 1 ] ; then
@ -117,7 +107,7 @@ if [ "$1" = "on" ];then
elif [ ${isX86_64} -eq 1 ] ; then
DISTRO="linux_amd64"
fi
if [ ! -f /home/bitcoin/cl-plugins-available/sparko ];then
sudo -u bitcoin mkdir /home/bitcoin/cl-plugins-available
# download binary
@ -134,7 +124,7 @@ if [ "$1" = "on" ];then
if [ ! -f /home/bitcoin/.lightning/sparko-tls/key.pem ];then
# create a self signed cert https://github.com/fiatjaf/sparko#how-to-use
/home/admin/config.scripts/internet.selfsignedcert.sh
/home/admin/config.scripts/internet.selfsignedcert.sh
# sparko looks for specific filenames
sudo -u bitcoin mkdir /home/bitcoin/.lightning/sparko-tls
sudo ln -sf /mnt/hdd/app-data/selfsignedcert/selfsigned.key \
@ -170,12 +160,12 @@ sparko-keys=${masterkeythatcandoeverything}; ${secretaccesskeythatcanreadstuff}:
sudo ufw allow "${portprefix}9000" comment "${netprefix}sparko"
# hidden service to https://xx.onion
/home/admin/config.scripts/internet.hiddenservice.sh ${netprefix}sparko 443 ${portprefix}9000
/home/admin/config.scripts/tor.onion-service.sh ${netprefix}sparko 443 ${portprefix}9000
# setting value in raspi blitz config
sudo sed -i "s/^${netprefix}sparko=.*/${netprefix}sparko=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}sparko "on"
source /home/admin/raspiblitz.info
source <(/home/admin/_cache.sh get state)
if [ "${state}" == "ready" ] && [ "$3" != "norestart" ]; then
echo "# Restart the ${netprefix}lightningd.service to activate Sparko"
sudo systemctl restart ${netprefix}lightningd
@ -185,13 +175,13 @@ sparko-keys=${masterkeythatcandoeverything}; ${secretaccesskeythatcanreadstuff}:
echo "# Monitor with:"
echo "sudo journalctl | grep sparko | tail -n5"
echo "sudo tail -n 100 -f /home/bitcoin/.lightning/${CLNETWORK}/cl.log | grep sparko"
fi
if [ "$1" = "off" ];then
# delete symlink
sudo rm -rf /home/bitcoin/${netprefix}cl-plugins-enabled/sparko
echo "# Editing ${CLCONF}"
sudo sed -i "/^sparko/d" ${CLCONF}
@ -200,8 +190,8 @@ if [ "$1" = "off" ];then
echo "# Deny port ${portprefix}9000 through the firewall"
sudo ufw deny "${portprefix}9000"
/home/admin/config.scripts/internet.hiddenservice.sh off ${netprefix}sparko
/home/admin/config.scripts/tor.onion-service.sh off ${netprefix}sparko
# purge
if [ "$(echo "$@" | grep -c purge)" -gt 0 ];then
@ -209,7 +199,7 @@ if [ "$1" = "off" ];then
sudo rm -rf /home/bitcoin/cl-plugins-available/sparko
fi
# setting value in raspi blitz config
sudo sed -i "s/^${netprefix}sparko=.*/${netprefix}sparko=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}sparko "off"
echo "# Sparko was uninstalled"
fi

View File

@ -35,7 +35,7 @@ if [ "$1" = "on" ];then
sudo ln -s /home/bitcoin/cl-plugins-available/plugins/${plugin}/${plugin}.py \
/home/bitcoin/${netprefix}cl-plugins-enabled
source /home/admin/raspiblitz.info
source <(/home/admin/_cache.sh get state)
if [ "${state}" == "ready" ]; then
echo "# Restart the ${netprefix}lightningd.service to activate the ${plugin} plugin"
sudo systemctl restart ${netprefix}lightningd

View File

@ -288,9 +288,7 @@ if [ ${mode} = "cl-import-gui" ]; then
if [ "$(grep -c "hsm_secret is not encrypted" < "$output")" -gt 0 ];then
echo "# The hsm_secret is not encrypted"
echo "# Record in raspiblitz.conf"
sudo sed -i \
"s/^${netprefix}clEncryptedHSM=.*/${netprefix}clEncryptedHSM=off/g" \
/mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}clEncryptedHSM "off"
else
cat $output
echo "# Starting cl.hsmtool.sh unlock"

View File

@ -32,7 +32,7 @@ if [ $(grep -c "^sparko" < ${CLCONF}) -gt 0 ];then
echo "# The Sparko plugin is not present but in config"
sed -i "/^sparko/d" ${CLCONF}
rm -rf /home/bitcoin/${netprefix}cl-plugins-enabled/sparko
sed -i "s/^${netprefix}sparko=.*/${netprefix}sparko=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}sparko "off"
fi
fi
@ -42,7 +42,7 @@ if [ $(grep -c "^http-pass" < ${CLCONF}) -gt 0 ];then
echo "# The clHTTPplugin is not present but in config"
sed -i "/^http-pass/d" ${CLCONF}
rm -rf /home/bitcoin/cl-plugins-enabled/c-lightning-http-plugin
sed -i "s/^clHTTPplugin=.*/clHTTPplugin=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set clHTTPplugin "off"
fi
fi
@ -52,6 +52,6 @@ if [ $(grep -c "^feeadjuster" < ${CLCONF}) -gt 0 ];then
echo "# The feeadjuster plugin is not present but in config"
sed -i "/^feeadjuster/d" ${CLCONF}
rm -rf /home/bitcoin/${netprefix}cl-plugins-enabled/feeadjuster.py
sed -i "s/^${netprefix}feeadjuster=.*/${netprefix}feeadjuster=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}feeadjuster "off"
fi
fi

View File

@ -45,15 +45,6 @@ if grep -Eq "${netprefix}clEncryptedHSM=on" /mnt/hdd/raspiblitz.conf;then
fi
fi
# add default value to raspi config if needed
if ! grep -Eq "^${netprefix}clEncryptedHSM=" /mnt/hdd/raspiblitz.conf; then
echo "${netprefix}clEncryptedHSM=off" >> /mnt/hdd/raspiblitz.conf
fi
# add default value to raspi config if needed
if ! grep -Eq "^${netprefix}clAutoUnlock=" /mnt/hdd/raspiblitz.conf; then
echo "${netprefix}clAutoUnlock=off" >> /mnt/hdd/raspiblitz.conf
fi
#############
# Functions #
#############
@ -122,9 +113,7 @@ function encryptHSMsecret() {
(echo $walletPassword; echo $walletPassword) | \
sudo -u bitcoin lightning-hsmtool encrypt $hsmSecretPath || exit 1
# setting value in raspiblitz.conf
sudo sed -i \
"s/^${netprefix}clEncryptedHSM=.*/${netprefix}clEncryptedHSM=on/g" \
/mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}clEncryptedHSM "on"
echo "# Encrypted the hsm_secret for C-lightning $CHAIN"
}
@ -141,9 +130,7 @@ function decryptHSMsecret() {
echo "# Continue to record in the raspiblitz.conf"
else
# setting value in raspiblitz.conf
sudo sed -i \
"s/^${netprefix}clEncryptedHSM=.*/${netprefix}clEncryptedHSM=on/g" \
/mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}clEncryptedHSM "on"
if [ -f $passwordFile ];then
echo "# Getting the password from $passwordFile"
else
@ -162,9 +149,7 @@ function decryptHSMsecret() {
fi
shredPasswordFile
# setting value in raspiblitz config
sudo sed -i \
"s/^${netprefix}clEncryptedHSM=.*/${netprefix}clEncryptedHSM=off/g" \
/mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}clEncryptedHSM "off"
echo "# Decrypted the hsm_secret for C-lightning $CHAIN"
}
@ -269,9 +254,7 @@ elif [ "$1" = "unlock" ]; then
echo "# The hsm_secret is encrypted, but unlock is not configured"
passwordToFile
# setting value in raspiblitz config
sudo sed -i \
"s/^${netprefix}clEncryptedHSM=.*/${netprefix}clEncryptedHSM=on/g" \
/mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}clEncryptedHSM "on"
/home/admin/config.scripts/cl.install-service.sh $CHAIN
# get new password
@ -345,9 +328,8 @@ elif [ "$1" = "autounlock-on" ]; then
passwordToFile
fi
# setting value in raspiblitz config
sudo sed -i \
"s/^${netprefix}clAutoUnlock=.*/${netprefix}clAutoUnlock=on/g" \
/mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}clAutoUnlock "on"
echo "# Autounlock is on for C-lightning $CHAIN"
elif [ "$1" = "autounlock-off" ]; then
@ -358,9 +340,7 @@ elif [ "$1" = "autounlock-off" ]; then
sudo chown bitcoin:bitcoin /dev/shm/.${netprefix}cl.pw
fi
# setting value in raspiblitz config
sudo sed -i \
"s/^${netprefix}clAutoUnlock=.*/${netprefix}clAutoUnlock=off/g" \
/mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}clAutoUnlock "off"
echo "# Autounlock is off for C-lightning $CHAIN"
elif [ "$1" = "change-password" ]; then

View File

@ -81,7 +81,7 @@ sudo systemctl daemon-reload
sudo systemctl enable ${netprefix}lightningd
echo "# Enabled the ${netprefix}lightningd.service"
source /home/admin/raspiblitz.info
source <(/home/admin/_cache.sh get state)
if [ "${state}" == "ready" ]; then
sudo systemctl start ${netprefix}lightningd
echo "# Started the ${netprefix}lightningd.service"

View File

@ -145,16 +145,6 @@ fi
echo "# Running: 'cl.install.sh $*'"
echo "# Using the settings for: ${network} ${CHAIN}"
# add default value to raspi config if needed
if ! grep -Eq "^lightning=" /mnt/hdd/raspiblitz.conf; then
echo "lightning=cl" | sudo tee -a /mnt/hdd/raspiblitz.conf
fi
# add default value to raspi config if needed
if ! grep -Eq "^${netprefix}cl=" /mnt/hdd/raspiblitz.conf; then
echo "${netprefix}cl=off" | sudo tee -a /mnt/hdd/raspiblitz.conf
fi
source /mnt/hdd/raspiblitz.conf
if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = testPR ];then
if [ "${CHAIN}" == "testnet" ] && [ "${testnet}" != "on" ]; then
@ -363,12 +353,12 @@ alias ${netprefix}clconf=\"sudo\
echo
# setting value in the raspiblitz.conf
sudo sed -i "s/^${netprefix}cl=.*/${netprefix}cl=on/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}cl on
# if this is the first lightning mainnet turned on - make default
if [ "${CHAIN}" == "mainnet" ] && [ "${lightning}" == "" ]; then
echo "# CL is now the default lightning implementation"
sudo sed -i "s/^lightning=.*/lightning=cl/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set lightning cl
fi
exit 0
@ -429,15 +419,15 @@ if [ "$1" = "off" ];then
sudo rm -f /usr/local/bin/lightning-cli
fi
# setting value in the raspiblitz.conf
sudo sed -i "s/^${netprefix}cl=.*/${netprefix}cl=off/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}cl "off"
# if cl mainnet was default - remove
if [ "${CHAIN}" == "mainnet" ] && [ "${lightning}" == "cl" ]; then
echo "# CL is REMOVED as the default lightning implementation"
sudo sed -i "s/^lightning=.*/lightning=/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set lightning ""
if [ "${lnd}" == "on" ]; then
echo "# LND is now the new default lightning implementation"
sudo sed -i "s/^lightning=.*/lightning=lnd/g" /mnt/hdd/raspiblitz.conf
/home/admin/config.scripts/blitz.conf.sh set lightning "lnd"
fi
fi
fi

View File

@ -0,0 +1,240 @@
#!/bin/bash
# command info
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
echo "monitor and troubleshot the c-lightning network"
echo "cl.monitor.sh [mainnet|testnet|signet] status"
echo "cl.monitor.sh [mainnet|testnet|signet] config"
echo "cl.monitor.sh [mainnet|testnet|signet] info"
echo "cl.monitor.sh [mainnet|testnet|signet] wallet"
exit 1
fi
# check if started with sudo
if [ "$EUID" -ne 0 ]; then
echo "error='run as root'"
exit 1
fi
# set based on network type (using own mapping to be able to run without calling sudo -u bitcoin)
if [ "$1" == "mainnet" ]; then
clConfigDir="/home/bitcoin/.lightning"
lightningcli_alias="/usr/local/bin/lightning-cli --lightning-dir=/home/bitcoin/.lightning --conf=${clConfigDir}/config"
blockchainHeightKey="btc_mainnet_blocks_verified"
netprefix=""
elif [ "$1" == "testnet" ]; then
clConfigDir="/home/bitcoin/.lightning/testnet"
lightningcli_alias="/usr/local/bin/lightning-cli --lightning-dir=/home/bitcoin/.lightning --conf=${clConfigDir}/config"
blockchainHeightKey="btc_testnet_blocks_verified"
netprefix="t"
elif [ "$1" == "signet" ]; then
clConfigDir="/home/bitcoin/.lightning/signet"
lightningcli_alias="/usr/local/bin/lightning-cli --lightning-dir=/home/bitcoin/.lightning --conf=${clConfigDir}/config"
blockchainHeightKey="btc_signet_blocks_verified"
netprefix="s"
else
echo "error='not supported net'"
exit 1
fi
######################################################
# STATUS
# check general status info
######################################################
if [ "$2" = "status" ]; then
cl_version=$($lightningcli_alias --version 2>/dev/null | cut -d ' ' -f3)
cl_running=$(systemctl status ${netprefix}lightningd 2>/dev/null | grep -c "active (running)")
cl_ready="0"
cl_online="0"
cl_error_short=""
cl_error_full=""
if [ "${cl_running}" != "0" ]; then
cl_running="1"
# test connection - record win & fail info
randStr=$(echo "$RANDOM")
rm /var/cache/raspiblitz/.cl-${randStr}.out 2>/dev/null
rm /var/cache/raspiblitz/.cl-${randStr}.error 2>/dev/null
touch /var/cache/raspiblitz/.cl-${randStr}.out
touch /var/cache/raspiblitz/.cl-${randStr}.error
echo "# ${lightningcli_alias} getinfo"
$lightningcli_alias getinfo 1>/var/cache/raspiblitz/.cl-${randStr}.out 2>/var/cache/raspiblitz/.cl-${randStr}.error
winData=$(cat /var/cache/raspiblitz/.cl-${randStr}.out 2>/dev/null)
failData=$(cat /var/cache/raspiblitz/.cl-${randStr}.error 2>/dev/null)
rm /var/cache/raspiblitz/.cl-${randStr}.out
rm /var/cache/raspiblitz/.cl-${randStr}.error
# check for errors
if [ "${failData}" != "" ]; then
cl_ready="0"
cl_error_short=""
cl_error_full=$(echo ${failData} | tr -d "'" | tr -d '"')
# check results if proof for online
else
cl_ready="1"
connections=$( echo "${winData}" | grep "num_peers\"" | tr -cd '[[:digit:]]')
if [ "${connections}" != "" ] && [ "${connections}" != "0" ]; then
cl_online="1"
fi
fi
fi
# print results
echo "ln_cl_version='${cl_version}'"
echo "ln_cl_running='${cl_running}'"
echo "ln_cl_ready='${cl_ready}'"
echo "ln_cl_online='${cl_online}'"
echo "ln_cl_error_short='${cl_error_short}'"
echo "ln_cl_error_full='${cl_error_full}'"
exit 0
fi
######################################################
# CONFIG
######################################################
if [ "$2" = "config" ]; then
# get data
clConfigData=$(cat $clConfigDir/config)
if [ "${clConfigData}" == "" ]; then
echo "error='no config'"
exit 1
fi
# no usesul data to monitor in config yet
exit 1
fi
######################################################
# INFO
######################################################
if [ "$2" = "info" ]; then
# raw data demo:
# sudo /usr/local/bin/lightning-cli --lightning-dir=/home/bitcoin/.lightning --conf=/home/bitcoin/.lightning/config getinfo
# get data
ln_getInfo=$($lightningcli_alias getinfo 2>/dev/null)
if [ "${ln_getInfo}" == "" ]; then
echo "error='no data'"
exit 1
fi
# parse data
cl_alias=$(echo "${ln_getInfo}" | grep '"alias":' | cut -d '"' -f4)
port=$(echo "${ln_getInfo}" | grep '"port":' | cut -d: -f2 | tail -1 | bc)
pubkey=$(echo "${ln_getInfo}" | grep '"id":' | cut -d '"' -f4)
address=$(echo "${ln_getInfo}" | grep '.onion' | cut -d '"' -f4)
if [ ${#address} -eq 0 ]; then
address=$(echo "${ln_getInfo}" | grep '"ipv4"' -A 1 | tail -1 | cut -d '"' -f4)
fi
cl_address="${pubkey}@${address}:${port}"
cl_tor=$(echo "${cl_address}" | grep -c ".onion")
cl_channels_pending=$(echo "${ln_getInfo}" | jq -r '.num_pending_channels')
cl_channels_active=$(echo "${ln_getInfo}" | jq -r '.num_active_channels')
cl_channels_inactive=$(echo "${ln_getInfo}" | jq -r '.num_inactive_channels')
cl_channels_total=$(( cl_channels_pending + cl_channels_active + cl_channels_inactive ))
cl_peers=$(echo "${ln_getInfo}" | jq -r '.num_peers')
cl_fees_collected_msat=$(echo "${ln_getInfo}" | jq -r '.fees_collected_msat')
# calculate with cached value if c-lightning is fully synced
source <(/home/admin/_cache.sh get ${blockchainHeightKey})
#echo "#blockchainHeightKey(${!blockchainHeightKey})"
blockheight="${!blockchainHeightKey}"
#echo "#blockheight(${blockheight})"
cl_sync_height=$(echo "${ln_getInfo}" | jq .blockheight)
#echo "#cl_sync_height(${cl_sync_height})"
cl_sync_chain=""
cl_sync_progress=""
if [ "${blockheight}" != "" ]; then
cl_sync_progress=$(echo "scale=2; $cl_sync_height*100/$blockheight" | bc)
# needs to be at least "two blocks behind" to be considered not synced
blockheight=$(($blockheight - 1))
if [ ${blockheight} -gt ${cl_sync_height} ];then
cl_sync_chain=0
else
cl_sync_chain=1
fi
fi
# print data
echo "ln_cl_alias='${cl_alias}'"
echo "ln_cl_address='${cl_address}'"
echo "ln_cl_tor='${cl_tor}'"
echo "ln_cl_peers='${cl_peers}'"
echo "ln_cl_sync_chain='${cl_sync_chain}'"
echo "ln_cl_sync_progress='${cl_sync_progress}'"
echo "ln_cl_channels_pending='${cl_channels_pending}'"
echo "ln_cl_channels_active='${cl_channels_active}'"
echo "ln_cl_channels_inactive='${cl_channels_inactive}'"
echo "ln_cl_channels_total='${cl_channels_total}'"
echo "ln_cl_fees_total='${cl_fees_collected_msat//[^0-9.]/}'"
exit 0
fi
######################################################
# WALLETS (FUNDS)
######################################################
if [ "$2" = "wallet" ]; then
# raw data demo:
# /usr/local/bin/lightning-cli --lightning-dir=/home/bitcoin/.lightning --conf=/home/bitcoin/.lightning/config listfunds
# get data
cl_listfunds=$($lightningcli_alias listfunds 2>/dev/null)
if [ "${cl_listfunds}" == "" ]; then
echo "error='no data'"
exit 1
fi
ln_walletbalance=0
for i in $(echo "$cl_listfunds" | jq .outputs[] | jq 'select(.status=="confirmed")' | grep value | awk '{print $2}' | cut -d, -f1);do
ln_walletbalance=$((ln_walletbalance+i))
done
ln_walletbalance_wait=0
for i in $(echo "$cl_listfunds" | jq .outputs[] | jq 'select(.status=="unconfirmed")' | grep value | awk '{print $2}' | cut -d, -f1);do
ln_walletbalance_wait=$((ln_walletbalance_wait+i))
done
ln_closedchannelbalance=0
for i in $(echo "$cl_listfunds" | jq .channels[] | jq 'select(.state=="ONCHAIN")' | grep channel_sat | awk '{print $2}' | cut -d, -f1);do
ln_closedchannelbalance=$((ln_closedchannelbalance+i))
done
ln_pendingonchain=$((ln_walletbalance_wait+ln_closedchannelbalance))
if [ ${#ln_pendingonchain} -gt 0 ]; then ln_pendingonchain="(+${ln_pendingonchain})"; fi
ln_channelbalance=0
for i in $(echo "$cl_listfunds" |jq .channels[]|jq 'select(.state=="CHANNELD_NORMAL")'|grep channel_sat|awk '{print $2}'|cut -d, -f1);do
ln_channelbalance=$((ln_channelbalance+i))
done
if [ ${#ln_channelbalance} -eq 0 ];then
ln_channelbalance=0
fi
ln_channelbalance_all=0
for i in $(echo "$cl_listfunds" |jq .channels[]|grep channel_sat|awk '{print $2}'|cut -d, -f1);do
ln_channelbalance_all=$((ln_channelbalance_all+i))
done
ln_channelbalance_pending=$((ln_channelbalance_all-ln_channelbalance-ln_closedchannelbalance))
if [ ${#ln_channelbalance_pending} -gt 0 ]; then ln_channelbalance_pending=" (+${ln_channelbalance_pending})"; fi
# print data
echo "ln_cl_wallet_onchain_balance='${ln_walletbalance//[^0-9.]/}'"
echo "ln_cl_wallet_onchain_pending='${ln_pendingonchain//[^0-9.]/}'"
echo "ln_cl_wallet_channels_balance='${ln_channelbalance//[^0-9.]/}'"
echo "ln_cl_wallet_channels_pending='${ln_channelbalance_pending//[^0-9.]/}'"
exit 0
fi
echo "FAIL - Unknown Parameter $2"
exit 1

View File

@ -26,10 +26,10 @@ if [ "$1" = connect ];then
sudo ufw allow "${portprefix}6100" comment "${netprefix}clrest"
localip=$(ip addr | grep 'state UP' -A2 | grep -E -v 'docker0|veth' | grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/')
# hidden service to https://xx.onion
/home/admin/config.scripts/internet.hiddenservice.sh ${netprefix}clrest 443 ${portprefix}6100
/home/admin/config.scripts/tor.onion-service.sh ${netprefix}clrest 443 ${portprefix}6100
toraddress=$(sudo cat /mnt/hdd/tor/${netprefix}clrest/hostname)
hex_macaroon=$(xxd -plain /home/bitcoin/c-lightning-REST/certs/access.macaroon | tr -d '\n')
hex_macaroon=$(xxd -plain /home/bitcoin/c-lightning-REST/certs/access.macaroon | tr -d '\n')
url="https://${localip}:${portprefix}6100/"
#string="${url}?${hex_macaroon}"
#/home/admin/config.scripts/blitz.display.sh qr "$string"
@ -92,7 +92,7 @@ if [ "$1" = on ];then
sudo -u bitcoin npm install
fi
# config
cd /home/bitcoin/c-lightning-REST || exit 1
sudo -u bitcoin mkdir ${CLNETWORK}
@ -105,7 +105,7 @@ if [ "$1" = on ];then
\"LNRPCPATH\": \"/home/bitcoin/.lightning/${CLNETWORK}/lightning-rpc\",
\"RPCCOMMANDS\": [\"*\"]
}" | sudo -u bitcoin tee ./${CLNETWORK}/cl-rest-config.json
echo "
# systemd unit for c-lightning-REST for ${CHAIN}
# /etc/systemd/system/${netprefix}clrest.service
@ -135,7 +135,7 @@ WantedBy=multi-user.target
" | sudo tee /etc/systemd/system/${netprefix}clrest.service
sudo systemctl enable ${netprefix}clrest
source /home/admin/raspiblitz.info
source <(/home/admin/_cache.sh get state)
if [ "${state}" == "ready" ]; then
echo "# OK - the clrest.service is enabled, system is ready so starting service"
sudo systemctl start ${netprefix}clrest
@ -155,7 +155,7 @@ if [ $1 = off ];then
sudo rm -rf /home/bitcoin/c-lightning-REST/${CLNETWORK}
echo "# Deny port ${portprefix}6100 through the firewall"
sudo ufw deny "${portprefix}6100"
/home/admin/config.scripts/internet.hiddenservice.sh off ${netprefix}clrest
/home/admin/config.scripts/tor.onion-service.sh off ${netprefix}clrest
if [ "$(echo "$@" | grep -c purge)" -gt 0 ];then
echo "# Removing the source code and binaries"
sudo rm -rf /home/bitcoin/c-lightning-REST

View File

@ -29,15 +29,6 @@ if [ ${#newName} -eq 0 ]; then
fi
fi
# config file
blitzConfig="/mnt/hdd/raspiblitz.conf"
# check if raspiblitz config file exists
if [ ! -f ${blitzConfig} ]; then
echo "FAIL - missing ${blitzConfig}"
exit 1
fi
# check if cl config file exists
if ! sudo ls ${CLCONF}; then
echo "FAIL - missing ${CLCONF}"
@ -57,7 +48,7 @@ sudo systemctl stop ${netprefix}lightningd 2>/dev/null
# config: change name
sudo sed -i "s/^alias=.*/alias=${newName}/g" ${CLCONF}
source /home/admin/raspiblitz.info
source <(/home/admin/_cache.sh get state)
if [ "${state}" == "ready" ]; then
sudo systemctl start ${netprefix}lightningd
fi

Some files were not shown because too many files have changed in this diff Show More