From ac00613bda57b76888d6018f6fd78ec42d273d01 Mon Sep 17 00:00:00 2001 From: nyxnor <69700936+nyxnor@users.noreply.github.com> Date: Thu, 8 Apr 2021 01:04:03 +0000 Subject: [PATCH 0001/1295] print debug logs Blitz help menu https://github.com/rootzoll/raspiblitz/issues/2012 print debug logs fully and link option. Raspiblitz help menu --- home.admin/_commands.sh | 76 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 68 insertions(+), 8 deletions(-) diff --git a/home.admin/_commands.sh b/home.admin/_commands.sh index 546926dea..4dd49a0d6 100755 --- a/home.admin/_commands.sh +++ b/home.admin/_commands.sh @@ -2,16 +2,71 @@ # SHORTCUT COMMANDS you can call as user 'admin' from terminal -# command: raspiblitz -# calls the the raspiblitz mainmenu (legacy) -function raspiblitz() { +# command: blitz +# calls the the raspiblitz mainmenu (shortcut) +function blitz() { +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ] || [ "$1" = "--help" ] || [ "$1" = "help" ] ; then + echo "_commands.sh" + echo "Usage: command [options]" + echo "" + echo "Blitz commands are consolidated here." + echo "" + echo "Menu access:" + echo " raspiblitz menu" + echo " menu menu" + echo " bash menu" + echo " repair menu > repair" + echo "" + echo "Checks:" + echo " status informational Blitz status screen" + echo " sourcemode copy blockchain source modus" + echo " check check if Blitz configuration files are correct" + 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 " github jumping directly into the options to change branch/repo/pr" + echo "" + echo "Power:" + echo " restart restart the node" + echo " off shutdown the node" + echo "" + echo "Display:" + echo " hdmi switch video output to HDMI" + echo " lcd switch video output to LCD" + echo " headless switch video output to HEADLESS" + echo "" + echo "BTC tx:" + echo " torthistx broadcast transaction through Tor to Blockstreams API and into the network" + echo " gettx retrieve transaction from mempool or blockchain and print as JSON" + echo " watchtx retrieve transaction from mempool or blockchain until certain confirmation target" + echo "" + echo "LND:" + echo " balance your satoshi balance" + echo " channels your lightning channels" + echo " fwdreport show forwarding report" + echo " manage command line tool for advanced channel management of an LND" + echo "" + echo "Users:" + echo " bos Balance of Satoshis" + echo " lit Lightning Terminal" + echo " pyblock PyBlock" + echo " chantools ChanTools" + echo " jm JoinMarket" + echo " faraday Faraday" + echo " loop Loop" + echo " pool Pool" + echo "" + echo " Extras:" + echo " whitepaper download the whitepaper from the blockchain to /home/admin/bitcoin.pdf" + echo " notifyme wrapper for blitz.notify.sh that will send a notification using the configured method and settings" + else cd /home/admin ./00raspiblitz.sh } -# command: blitz -# calls the the raspiblitz mainmenu (shortcut) -function blitz() { +# command: raspiblitz +# calls the the raspiblitz mainmenu (legacy) +function raspiblitz() { cd /home/admin ./00raspiblitz.sh } @@ -44,7 +99,12 @@ function check() { # command: debug function debug() { cd /home/admin - ./XXdebugLogs.sh + echo "Printing debug logs. Be patient, this should take maximum 2 minutes ..." + if [[ $1 = "-l" ]]; then + ./XXdebugLogs.sh > /var/cache/raspiblitz/debug.log && cat /var/cache/raspiblitz/debug.log | nc termbin.com 9999 + else + ./XXdebugLogs.sh > /var/cache/raspiblitz/debug.log && cat /var/cache/raspiblitz/debug.log + fi } # command: patch @@ -339,4 +399,4 @@ function notifyme() { function whitepaper() { cd /home/admin/config.scripts ./bonus.whitepaper.sh on -} \ No newline at end of file +} From f51547799f0c1f46a32de65054008e4a90ee421d Mon Sep 17 00:00:00 2001 From: nyxnor <69700936+nyxnor@users.noreply.github.com> Date: Thu, 8 Apr 2021 21:58:26 +0000 Subject: [PATCH 0002/1295] removed loop, pool and faraday --- home.admin/_commands.sh | 48 ----------------------------------------- 1 file changed, 48 deletions(-) diff --git a/home.admin/_commands.sh b/home.admin/_commands.sh index 4dd49a0d6..f2ed6f4b1 100755 --- a/home.admin/_commands.sh +++ b/home.admin/_commands.sh @@ -52,9 +52,6 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ] || [ "$1" = "--help" ] echo " pyblock PyBlock" echo " chantools ChanTools" echo " jm JoinMarket" - echo " faraday Faraday" - echo " loop Loop" - echo " pool Pool" echo "" echo " Extras:" echo " whitepaper download the whitepaper from the blockchain to /home/admin/bitcoin.pdf" @@ -261,21 +258,6 @@ function jm() { fi } -# command: faraday -# switch to the faraday user for the Faraday Service -function faraday() { - if [ $(grep -c "faraday=on" < /mnt/hdd/raspiblitz.conf) -eq 1 ]; then - echo "# switching to the faraday user with the command: 'sudo su - faraday'" - echo "# use command 'exit' and then 'raspiblitz' to return to menu" - echo "# use command 'frcli --help' now to get more info" - sudo su - faraday - echo "# use command 'raspiblitz' to return to menu" - else - echo "Faraday is not installed - to install run:" - echo "/home/admin/config.scripts/bonus.faraday.sh on" - fi -} - # command: lit # switch to the lit user for the loop, pool & faraday services function lit() { @@ -291,36 +273,6 @@ function lit() { fi } -# command: loop -# switch to the loop user for the Lightning Loop Service -function loop() { - if [ $(grep -c "loop=on" < /mnt/hdd/raspiblitz.conf) -eq 1 ]; then - echo "# switching to the loop user with the command: 'sudo su - loop'" - echo "# use command 'exit' and then 'raspiblitz' to return to menu" - echo "# use command 'loop --help' now to get more info" - sudo su - loop - echo "# use command 'raspiblitz' to return to menu" - else - echo "Lightning Loop is not installed - to install run:" - echo "/home/admin/config.scripts/bonus.loop.sh on" - fi -} - -# command: pool -# switch to the pool user for the Pool Service -function pool() { - if [ $(grep -c "pool=on" < /mnt/hdd/raspiblitz.conf) -gt 0 ]; then - echo "# switching to the pool user with the command: 'sudo su - pool'" - echo "# use command 'exit' and then 'raspiblitz' to return to menu" - echo "# use command 'pool --help' now to get more info" - sudo su - pool - echo "# use command 'raspiblitz' to return to menu" - else - echo "Pool is not installed - to install run:" - echo "/home/admin/config.scripts/bonus.pool.sh on" - fi -} - # aliases for lit # switch to the pool user for the Pool Service if [ -f "/mnt/hdd/raspiblitz.conf" ] && [ $(grep -c "lit=on" < /mnt/hdd/raspiblitz.conf) -gt 0 ]; then From 043a3bb638d881b42dbcc78278f8dfbb5dc7c560 Mon Sep 17 00:00:00 2001 From: nyxnor <69700936+nyxnor@users.noreply.github.com> Date: Fri, 9 Apr 2021 08:04:53 +0000 Subject: [PATCH 0003/1295] removed lndmanage --- home.admin/_commands.sh | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/home.admin/_commands.sh b/home.admin/_commands.sh index f2ed6f4b1..e93269c4b 100755 --- a/home.admin/_commands.sh +++ b/home.admin/_commands.sh @@ -44,14 +44,13 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ] || [ "$1" = "--help" ] echo " balance your satoshi balance" echo " channels your lightning channels" echo " fwdreport show forwarding report" - echo " manage command line tool for advanced channel management of an LND" echo "" echo "Users:" echo " bos Balance of Satoshis" - echo " lit Lightning Terminal" - echo " pyblock PyBlock" echo " chantools ChanTools" + echo " lit Lightning Terminal" echo " jm JoinMarket" + echo " pyblock PyBlock" echo "" echo " Extras:" echo " whitepaper download the whitepaper from the blockchain to /home/admin/bitcoin.pdf" @@ -148,20 +147,6 @@ function headless() { sudo /home/admin/config.scripts/blitz.display.sh set-display headless } -# command: manage -function manage() { - if [ $(cat /mnt/hdd/raspiblitz.conf 2>/dev/null | grep -c "lndmanage=on") -eq 1 ]; then - cd /home/admin/lndmanage - source venv/bin/activate - echo "NOTICE: Needs at least one active channel to run without error." - echo "to exit (venv) enter ---> deactivate" - lndmanage - else - echo "lndmanage not installed - to install run:" - echo "sudo /home/admin/config.scripts/bonus.lndmanage.sh on" - fi -} - # command: torthistx function torthistx() { if [ $(cat /mnt/hdd/raspiblitz.conf 2>/dev/null | grep -c "runBehindTor=on") -eq 1 ]; then From 97ca130112af2a8a2db1bb356440b03c1981eb2e Mon Sep 17 00:00:00 2001 From: nyxnor <69700936+nyxnor@users.noreply.github.com> Date: Tue, 13 Apr 2021 01:16:24 +0000 Subject: [PATCH 0004/1295] add information of help when going to the terminal --- home.admin/00mainMenu.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index 248f74c7a..e1337c8dc 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -360,7 +360,8 @@ case $CHOICE in echo "* RaspiBlitz Commandline" echo "* Here be dragons .. have fun :)" echo "***********************************" - echo "Bitcoin command line options: bitcoin-cli help" + echo "Blitz command line options: blitz help" + echo "Bitcoin command line options: bitcoin-cli help" echo "LND command line options: lncli -h" echo "Back to main menu use command: raspiblitz" echo From dbbbaa60c886593fbe1d1347ec879a51d2cda974 Mon Sep 17 00:00:00 2001 From: nyxnor <69700936+nyxnor@users.noreply.github.com> Date: Tue, 13 Apr 2021 17:23:32 +0000 Subject: [PATCH 0005/1295] Update _commands.sh --- home.admin/_commands.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_commands.sh b/home.admin/_commands.sh index 02af84aab..bb0408b2d 100755 --- a/home.admin/_commands.sh +++ b/home.admin/_commands.sh @@ -103,7 +103,7 @@ function debug() { cd /home/admin echo "Printing debug logs. Be patient, this should take maximum 2 minutes ..." if [[ $1 = "-l" ]]; then - ./XXdebugLogs.sh > /var/cache/raspiblitz/debug.log && cat /var/cache/raspiblitz/debug.log | nc termbin.com 9999 + ./XXdebugLogs.sh > /var/cache/raspiblitz/debug.log && cat /var/cache/raspiblitz/debug.log | torsocks nc termbin.com 9999 else ./XXdebugLogs.sh > /var/cache/raspiblitz/debug.log && cat /var/cache/raspiblitz/debug.log fi From 09aa43e843bb50a6954e87d68795aa2cbe3ceac2 Mon Sep 17 00:00:00 2001 From: nyxnor <69700936+nyxnor@users.noreply.github.com> Date: Tue, 13 Apr 2021 17:24:28 +0000 Subject: [PATCH 0006/1295] torsocks netcat for anonymity --- home.admin/XXdebugLogs.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/XXdebugLogs.sh b/home.admin/XXdebugLogs.sh index 3762ec9fc..283aae5d2 100755 --- a/home.admin/XXdebugLogs.sh +++ b/home.admin/XXdebugLogs.sh @@ -216,5 +216,5 @@ 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:" -echo "/home/admin/XXdebugLogs.sh | nc termbin.com 9999" +echo "/home/admin/XXdebugLogs.sh | torsocks nc termbin.com 9999" echo "" From e47f46affc993c530545e69169af493e5cb85044 Mon Sep 17 00:00:00 2001 From: PatrickScheich <50054697+PatrickScheich@users.noreply.github.com> Date: Tue, 20 Apr 2021 20:42:56 +0200 Subject: [PATCH 0007/1295] telegraf updates for v1.7.0RC3 (#2204) * new path of "vcgencmd" at raspiblitz v1.7.0RC2 * whitespaces + rename raspiblitz_ip_info -> ipinfo * add mempool info via bitcoincli Co-authored-by: Patrick Scheich --- .../etc-telegraf/getraspiblitzipinfo.sh | 42 ++++++++++--------- .../telegraf.d/telegraf_inputs.conf | 23 ++++++++-- 2 files changed, 42 insertions(+), 23 deletions(-) diff --git a/home.admin/assets/telegraf/etc-telegraf/getraspiblitzipinfo.sh b/home.admin/assets/telegraf/etc-telegraf/getraspiblitzipinfo.sh index aa3210c01..17564c09b 100644 --- a/home.admin/assets/telegraf/etc-telegraf/getraspiblitzipinfo.sh +++ b/home.admin/assets/telegraf/etc-telegraf/getraspiblitzipinfo.sh @@ -3,7 +3,7 @@ ############################################################################### # File: getraspiblitzipinfo.sh -# Date: 2020-10-04 +# Date: 2021-04-19 ############################################################################### # set the "debugLevel" @@ -18,17 +18,17 @@ logFile=/mnt/hdd/temp/raspiblitzipinfo.log # get the ISO timestamp for log output sts=$(date --iso-8601='seconds') -if [ -f "${logFile}" ]; then printf "\n---\n%s: %s started\n" "$sts" "$0" >> ${logFile} ;fi +if [ -f "${logFile}" ]; then printf "\n---\n%s: %s started\n" "$sts" "$0" >> ${logFile} ;fi # get the seconds since UNIX epoch unixTimestamp=$(date +"%s") -if [ -f "${logFile}" ]; then printf "%s: unixTimeStamp = %s\n" "$sts" "$unixTimestamp" >> ${logFile} ;fi +if [ -f "${logFile}" ]; then printf "%s: unixTimeStamp = %s\n" "$sts" "$unixTimestamp" >> ${logFile} ;fi # get active network device (eth0 or wlan0) networkDevice=$(ip addr | grep -v "lo:" | grep 'state UP' | tr -d " " | cut -d ":" -f2 | head -n 1) # -if [ -f "${logFile}" ]; then printf "%s: networkDevice = %s\n" "$sts" "$networkDevice" >> ${logFile} ;fi -if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi +if [ -f "${logFile}" ]; then printf "%s: networkDevice = %s\n" "$sts" "$networkDevice" >> ${logFile} ;fi +if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi # create the indexed array "origin" an fill it # this also creates the "Enumeration" @@ -41,8 +41,8 @@ if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi declare -a origin origin=(publicIP bitcoind lnd IPv6 IPv4) # -#if [ -f "${logFile}" ]; then for i in $( seq 0 4 ); do printf "%s: origin[ %d ] = %s\n" "$sts" "$i" "${origin[ $i ]}" >> ${logFile} ;done ;fi -#if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi +#if [ -f "${logFile}" ]; then for i in $( seq 0 4 ); do printf "%s: origin[ %d ] = %s\n" "$sts" "$i" "${origin[ $i ]}" >> ${logFile} ;done ;fi +#if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi # # further we need the arrays @@ -70,8 +70,8 @@ ip_addr_curr[2]=$(/usr/local/bin/lncli --lnddir=/mnt/hdd/app-data/lnd getinfo ip_addr_curr[3]=$(ip -o -6 address show scope global up dev ${networkDevice} 2>/dev/null | cut -d'/' -f1 | awk '/inet6/{print $4}' | head -n 1) ip_addr_curr[4]=$(ip -o -4 address show scope global up dev ${networkDevice} 2>/dev/null | cut -d'/' -f1 | awk '/inet/{print $4}' | head -n 1) # -if [ -f "${logFile}" ]; then for i in $( seq 0 4 ); do printf "%s: ip_addr_curr[ %d ] = %s\n" "$sts" "$i" "${ip_addr_curr[ $i ]}" >> ${logFile} ;done ;fi -if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi +if [ -f "${logFile}" ]; then for i in $( seq 0 4 ); do printf "%s: ip_addr_curr[ %d ] = %s\n" "$sts" "$i" "${ip_addr_curr[ $i ]}" >> ${logFile} ;done ;fi +if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi # if [ ${debugLevel} -gt 10 ]; then for i in $( seq 0 4 ); do printf " %2d: %-10s = %s\n" "$i" "${origin[ $i ]}" "${ip_addr_curr[ $i ]}" ;done ;fi @@ -93,12 +93,12 @@ for i in $( seq 0 4 ); do ip_addr_prev[ $i ]=${!s} # if the variable is still empty, fill it with "N/A" - if [ "ip_addr_prev[ $i ]" == "" ]; then ip_addr_prev[ $i ]="N/A" ; fi + if [ "ip_addr_prev[ $i ]" == "" ]; then ip_addr_prev[ $i ]="N/A" ; fi #if [ -f "${logFile}" ]; then printf "%s: from memoryfile variable %30s = %s\n" "$sts" "$s" "${ip_addr_prev[ $i ]}" >> ${logFile} ; fi if [ ${debugLevel} -gt 10 ]; then printf " %2d: read into ip_addr_prev[%d] from memoryfile variable %30s = %s\n" "$i" "$i" "$s" "${ip_addr_prev[ $i ]}" ; fi done -#if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi +#if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi # initialize the Creation TimeStamps with their old values from the memory file @@ -121,7 +121,7 @@ for i in $( seq 0 4 ); do #if [ -f "${logFile}" ]; then printf "%s: from memoryfile variable %30s = %s\n" "$sts" "$s" "${creation_ts_curr[ $i ]}" >> ${logFile} ; fi if [ ${debugLevel} -gt 10 ]; then printf " %2d: read into creation_ts_curr/prev[%d] from memoryfile variable %30s = %s\n" "$i" "$i" "$s" "${creation_ts_curr[ $i ]}" ; fi done -#if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi +#if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi # initialize the "has_changed" flag array @@ -146,7 +146,7 @@ for i in $( seq 0 4 ); do if [ ${debugLevel} -gt 10 ]; then printf " %2d: IP addr --NOT changed-- for %10s: %40s (new) == %40s (old)\n" "$i" "${origin[ $i ]}" "${ip_addr_curr[$i]}" "${ip_addr_prev[$i]}" ; fi fi done -if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi +if [ -f "${logFile}" ]; then echo " " >> ${logFile} ;fi # IF at least one value of the memory file needs to be updated, the whole file will be rewritten. @@ -174,9 +174,9 @@ if [ ${changes} -gt 0 ]; then echo " " >> ${memoryFile} done - if [ -f "${logFile}" ]; then echo "===========================================================================================" >> ${logFile} ;fi + if [ -f "${logFile}" ]; then echo "===========================================================================================" >> ${logFile} ;fi if [ -f "${logFile}" ]; then cat ${memoryFile} >> ${logFile} ; fi - if [ -f "${logFile}" ]; then echo "===========================================================================================" >> ${logFile} ;fi + if [ -f "${logFile}" ]; then echo "===========================================================================================" >> ${logFile} ;fi else # display info on stdout echo "" @@ -203,7 +203,9 @@ fi # now create the output for the telegraf "[[inputs.exec]]" section in influx-line-format # -# measurement: raspiblitz_ip_info +# 2021-04-19: rename measurement: "raspiblitz_ip_info" -> "ipinfo" +# +# measurement: ipinfo # # tags # * host @@ -228,13 +230,13 @@ for i in $( seq 0 4 ); do # # create influx-line-format output # only if there is a proper creation timestamp - if [ ${creation_ts_curr[ $i ]} -gt 1000000000 ]; then - influxLine="raspiblitz_ip_info,origin=${origin[ $i ]},ipaddr=${ip_addr_curr[$i]},ipaddr_prev=${ip_addr_prev[$i]},ipaddr_changed=${has_changed[ $i ]} created=${creation_ts_curr[ $i ]}i,uptime=${ipaddr_online}i,changed=${has_changed[ $i ]}i" + if [ ${creation_ts_curr[ $i ]} -gt 1000000000 ]; then + influxLine="ipinfo,origin=${origin[ $i ]},ipaddr=${ip_addr_curr[$i]},ipaddr_prev=${ip_addr_prev[$i]},ipaddr_changed=${has_changed[ $i ]} created=${creation_ts_curr[ $i ]}i,uptime=${ipaddr_online}i,changed=${has_changed[ $i ]}i" if [ -f "${logFile}" ]; then printf "%s: === %s\n" "$sts" "$influxLine" >> ${logFile} ; fi echo "${influxLine}" - else + else if [ -f "${logFile}" ]; then printf "%s: creation time ERROR for origin %s \n" "$sts" "${origin[ $i ]}" >> ${logFile} ; fi - fi + fi done # -eof- diff --git a/home.admin/assets/telegraf/etc-telegraf/telegraf.d/telegraf_inputs.conf b/home.admin/assets/telegraf/etc-telegraf/telegraf.d/telegraf_inputs.conf index 5c6e19ed5..dabf31146 100644 --- a/home.admin/assets/telegraf/etc-telegraf/telegraf.d/telegraf_inputs.conf +++ b/home.admin/assets/telegraf/etc-telegraf/telegraf.d/telegraf_inputs.conf @@ -75,6 +75,22 @@ data_format = "json" +#### Bitcoin related metric +#### basic information about the mempool +#### --> https://developer.bitcoin.org/reference/rpc/getmempoolinfo.html +## +## Most usefull fields... +## * loaded (boolean) True if the mempool is fully loaded +## * size (numeric) Current tx count +## * usage (numeric) Total memory usage for the mempool +## +[[inputs.exec]] + interval = "60s" + commands = ["/usr/local/bin/bitcoin-cli -conf=/mnt/hdd/bitcoin/bitcoin.conf getmempoolinfo" ] + name_override = "bitcoin_mempoolinfo" + data_format = "json" + + #### Bitcoin related metric #### information about network traffic, including bytes in, bytes out, and current time window #### --> https://developer.bitcoin.org/reference/rpc/getnettotals.html @@ -203,6 +219,7 @@ ##################################### #### Hardware data: cpu/gpu temperature, voltage, cpu clock #### +#### 2021-04-19 adopt to new path of "vcgencmd" at raspiblitz v1.7.0RC2 ##################################### [[inputs.file]] files = ["/sys/class/thermal/thermal_zone0/temp"] @@ -212,21 +229,21 @@ [[inputs.exec]] - commands = ["/opt/vc/bin/vcgencmd measure_temp"] + commands = ["/usr/bin/vcgencmd measure_temp"] name_override = "gpu_temperature" data_format = "grok" grok_patterns = ["%{NUMBER:value:float}"] [[inputs.exec]] - commands = ["/opt/vc/bin/vcgencmd measure_volts core"] + commands = ["/usr/bin/vcgencmd measure_volts core"] name_override = "cpu_volts" data_format = "grok" grok_patterns = ["%{NUMBER:value:float}"] [[inputs.exec]] - commands = ["/opt/vc/bin/vcgencmd measure_clock arm"] + commands = ["/usr/bin/vcgencmd measure_clock arm"] name_override = "cpu_frequency" data_format = "grok" grok_patterns = ["=%{NUMBER:value:int}"] From 8659e641b3763eea4e2f81cd0daec92907ca1a13 Mon Sep 17 00:00:00 2001 From: openoms Date: Wed, 21 Apr 2021 07:48:21 +0100 Subject: [PATCH 0008/1295] CHANGES: note using the base image from April 2021 --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 9d63807bd..a575d374a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,7 +2,7 @@ ## What's new in Version 1.7.0 of RaspiBlitz? -- New: Raspberry Pi OS Base Image 64-bit (August 2020) +- New: Raspberry Pi OS Base Image 64-bit (April 2021) - New: Build SD card Image with parameters & FatPack [details](https://github.com/rootzoll/raspiblitz/pull/2044) - New: Improve LND uptime and reliability over Tor [details](https://github.com/rootzoll/raspiblitz/pull/2148) - New: Lightning Terminal v0.4.1-alpha (Loop, Pool & Faraday UI Bundle) [details](https://github.com/lightninglabs/lightning-terminal#lightning-terminal-lit) From b1d6384407fa7c9e1261ed17b678828aaef745a5 Mon Sep 17 00:00:00 2001 From: /rootzoll Date: Sat, 24 Apr 2021 00:12:29 +0200 Subject: [PATCH 0009/1295] #2221 change hdmi mode (#2224) --- home.admin/config.scripts/blitz.display.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/home.admin/config.scripts/blitz.display.sh b/home.admin/config.scripts/blitz.display.sh index 6509451ce..bda62ab5a 100755 --- a/home.admin/config.scripts/blitz.display.sh +++ b/home.admin/config.scripts/blitz.display.sh @@ -267,6 +267,8 @@ function install_lcd() { # modify /boot/config.txt sudo sed -i "s/^hdmi_force_hotplug=.*//g" /boot/config.txt + sudo sed -i '/^hdmi_group=/d' /boot/config.txt 2>/dev/null + sudo sed -i "/^hdmi_mode=/d" /boot/config.txt 2>/dev/null #echo "hdmi_force_hotplug=1" >> /boot/config.txt sudo sed -i "s/^dtparam=i2c_arm=.*//g" /boot/config.txt # echo "dtparam=i2c_arm=on" >> /boot/config.txt --> this is to be called I2C errors - see: https://github.com/rootzoll/raspiblitz/issues/1058#issuecomment-739517713 @@ -327,7 +329,11 @@ function uninstall_lcd() { # remove modifications of config.txt sudo sed -i '/^hdmi_force_hotplug=/d' /boot/config.txt 2>/dev/null - sudo sed -i "s/^dtoverlay=.*//g" /boot/config.txt + sudo sed -i '/^hdmi_group=/d' /boot/config.txt 2>/dev/null + sudo sed -i "/^hdmi_mode=/d" /boot/config.txt 2>/dev/null + sudo sed -i "s/^dtoverlay=.*//g" /boot/config.txt 2>/dev/null + echo "hdmi_group=1" >> /boot/config.txt + echo "hdmi_mode=3" >> /boot/config.txt echo "dtoverlay=pi3-disable-bt" >> /boot/config.txt echo "dtoverlay=disable-bt" >> /boot/config.txt @@ -400,7 +406,7 @@ function install_lcd_legacy() { # add waveshare mod sudo cp ./waveshare35a.dtbo /boot/overlays/ - # modify /boot/config.txt + # modify /boot/config.txt sudo sed -i "s/^hdmi_force_hotplug=.*//g" /boot/config.txt #echo "hdmi_force_hotplug=1" >> /boot/config.txt sudo sed -i "s/^dtparam=i2c_arm=.*//g" /boot/config.txt From 87e297a3cfb9e7f5da4a80d9e6273ff6cc6f32c5 Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Fri, 23 Apr 2021 23:19:26 +0100 Subject: [PATCH 0010/1295] unlock LND after Bitcoin Core install if ready (#2214) * unlock LND after Bitcoin Core install if ready * bitcoin.update: improve output and comments --- home.admin/config.scripts/bitcoin.update.sh | 61 +++++++++++---------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/home.admin/config.scripts/bitcoin.update.sh b/home.admin/config.scripts/bitcoin.update.sh index a24cfb8fb..c852b4ea8 100755 --- a/home.admin/config.scripts/bitcoin.update.sh +++ b/home.admin/config.scripts/bitcoin.update.sh @@ -2,15 +2,15 @@ # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then - echo "Interim optional Bitcoin Core updates between RaspiBlitz releases." - echo "bitcoin.update.sh [info|tested|reckless|custom]" - echo "info -> get actual state and possible actions" - echo "tested -> only do a tested update by the RaspiBlitz team" - echo "reckless -> the update was not tested by the RaspiBlitz team" - echo "custom -> update to a chosen version" - echo " the binary will be checked by signature and checksum in all cases" - echo - exit 1 + echo "Interim optional Bitcoin Core updates between RaspiBlitz releases." + echo "bitcoin.update.sh [info|tested|reckless|custom]" + echo "info -> get actual state and possible actions" + echo "tested -> only do a tested update by the RaspiBlitz team" + echo "reckless -> the update was not tested by the RaspiBlitz team" + echo "custom -> update to a chosen version" + echo " the binary will be checked by signature and checksum in all cases" + echo + exit 1 fi source /home/admin/raspiblitz.info @@ -156,9 +156,9 @@ if [ "${mode}" = "tested" ]||[ "${mode}" = "reckless" ]||[ "${mode}" = "custom" echo "# !!! FAIL !!! Download laanwj-releases.asc not success." exit 1 fi - gpg ./laanwj-releases.asc - fingerprint=$(gpg ./laanwj-releases.asc 2>/dev/null | grep "${laanwjPGP}" -c) - if [ ${fingerprint} -lt 1 ]; then + gpg --import-options show-only --import ./laanwj-releases.asc + fingerprint=$(gpg ./laanwj-releases.asc 2>/dev/null | grep -c "${laanwjPGP}") + if [ ${fingerprint} -eq 0 ]; then echo echo "# !!! BUILD WARNING --> Bitcoin PGP author not as expected" echo "# Should contain laanwjPGP: ${laanwjPGP}" @@ -184,13 +184,7 @@ if [ "${mode}" = "tested" ]||[ "${mode}" = "reckless" ]||[ "${mode}" = "custom" echo fi - # get the sha256 value for the corresponding platform from signed hash sum file - bitcoinSHA256=$(grep -i "$bitcoinOSversion" SHA256SUMS.asc | cut -d " " -f1) - - echo - echo "# BITCOIN v${bitcoinVersion} for ${bitcoinOSversion}" - - # download resources + echo "# Downloading Bitcoin Core v${bitcoinVersion} for ${bitcoinOSversion} ..." binaryName="bitcoin-${bitcoinVersion}-${bitcoinOSversion}.tar.gz" sudo -u admin wget https://bitcoincore.org/bin/bitcoin-core-${pathVersion}/${binaryName} if [ ! -f "./${binaryName}" ] @@ -200,26 +194,31 @@ if [ "${mode}" = "tested" ]||[ "${mode}" = "reckless" ]||[ "${mode}" = "custom" fi echo "# Checking binary checksum ..." - binaryChecksum=$(sha256sum ${binaryName} | cut -d " " -f1) - if [ "${binaryChecksum}" != "${bitcoinSHA256}" ]; then - echo "!!! FAIL !!! Downloaded BITCOIN BINARY not matching SHA256 checksum: ${bitcoinSHA256}" + checksumTest=$(sha256sum -c --ignore-missing SHA256SUMS.asc ${binaryName} 2>/dev/null \ + | grep -c "${binaryName}: OK") + if [ "${checksumTest}" -eq 0 ]; then + # get the sha256 value for the corresponding platform from signed hash sum file + bitcoinSHA256=$(grep -i "$bitcoinOSversion" SHA256SUMS.asc | cut -d " " -f1) + echo "!!! FAIL !!! Downloaded BITCOIN BINARY CHECKSUM:" + echo "$(sha256sum ${binaryName})" + echo "NOT matching SHA256 checksum:" + echo "${bitcoinSHA256}" exit 1 else echo - echo "# OK --> VERIFIED BITCOIN CHECKSUM CORRECT" + echo "# OK --> VERIFIED BITCOIN CHECKSUM IS CORRECT" echo fi fi if [ "${mode}" = "tested" ]||[ "${mode}" = "custom" ]; then - # note: install will be done the same as reckless further down bitcoinInterimsUpdateNew="${bitcoinVersion}" elif [ "${mode}" = "reckless" ]; then bitcoinInterimsUpdateNew="reckless" fi -# JOINED INSTALL (tested & RECKLESS) +# JOINED INSTALL if [ "${mode}" = "tested" ]||[ "${mode}" = "reckless" ]||[ "${mode}" = "custom" ];then # install @@ -247,14 +246,18 @@ if [ "${mode}" = "tested" ]||[ "${mode}" = "reckless" ]||[ "${mode}" = "custom" 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 "# Restarted LND" - echo "# Use: 'lncli unlock' to unlock the LND wallet once Bitcoin Core is synced" - echo - echo "# Press ENTER to exit to the menu ..." + echo "# Press ENTER to proceed to unlock the LND wallet ..." read key + sudo /home/admin/config.scripts/lnd.unlock.sh fi exit 0 From baeb34d9709a3d5f8b79dea3f8e17634097be34b Mon Sep 17 00:00:00 2001 From: nyxnor <69700936+nyxnor@users.noreply.github.com> Date: Fri, 23 Apr 2021 22:20:53 +0000 Subject: [PATCH 0011/1295] show nginx systemd logs (#2220) This is important, normally nginx fails and this is not shown. --- home.admin/XXdebugLogs.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/home.admin/XXdebugLogs.sh b/home.admin/XXdebugLogs.sh index 8dac7be0c..6d15acb94 100755 --- a/home.admin/XXdebugLogs.sh +++ b/home.admin/XXdebugLogs.sh @@ -71,6 +71,10 @@ echo "sudo tail -n 30 /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log" sudo tail -n 30 /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log echo "" +echo "*** NGINX SYSTEMD STATUS ***" +sudo systemctl status nginx -n2 --no-pager +echo "" + echo "*** LAST NGINX LOGS ***" echo "sudo journalctl -u nginx -b --no-pager -n20" sudo journalctl -u nginx -b --no-pager -n20 From fe54f6e26982dd92156a620dcac07f5c31d6a820 Mon Sep 17 00:00:00 2001 From: d11n Date: Sat, 24 Apr 2021 00:21:54 +0200 Subject: [PATCH 0012/1295] Update stacking-sats-kraken version (#2216) --- home.admin/config.scripts/bonus.stacking-sats-kraken.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/bonus.stacking-sats-kraken.sh b/home.admin/config.scripts/bonus.stacking-sats-kraken.sh index 032241fc4..f4f0c6e47 100755 --- a/home.admin/config.scripts/bonus.stacking-sats-kraken.sh +++ b/home.admin/config.scripts/bonus.stacking-sats-kraken.sh @@ -9,7 +9,7 @@ CONFIG_FILE=$APP_DATA_DIR/.env RASPIBLITZ_FILE=/mnt/hdd/raspiblitz.conf SCRIPT_DIR=$HOME_DIR/stacking-sats-kraken SCRIPT_NAME=stacksats.sh -SCRIPT_VERSION=0.4.2 +SCRIPT_VERSION=0.4.3 # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then From fae495f8a5dc3801005b6b2c8ae326592b98a409 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 24 Apr 2021 01:03:53 +0200 Subject: [PATCH 0013/1295] small ux thing - bigger dialog box --- home.admin/20recoverDialog.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/20recoverDialog.sh b/home.admin/20recoverDialog.sh index 90c2b2557..4980530a5 100755 --- a/home.admin/20recoverDialog.sh +++ b/home.admin/20recoverDialog.sh @@ -35,7 +35,7 @@ Write them down & store them in a safe place. if [ "$?" != "0" ]; then dialog --backtitle "RaspiBlitz - Setup" --msgbox "Please write down your Password C:\n${oldPasswordC}" 10 52 else - dialog --backtitle "RaspiBlitz" --msgbox "OK - password C was set\nuse it to unlock your Lightning Wallet after restarts." 6 52 + dialog --backtitle "RaspiBlitz" --msgbox "OK - password C was set\nuse it to unlock your Lightning Wallet after restarts." 8 52 fi elif [ ${resetAlsoPasswordB} -gt 0 ]; then From f5f3e2437a01cb728e299649ec9872bb44dd2a76 Mon Sep 17 00:00:00 2001 From: /rootzoll Date: Sat, 24 Apr 2021 12:46:21 +0200 Subject: [PATCH 0014/1295] #2070 checking version & resetting password c (#2226) --- home.admin/config.scripts/blitz.migration.sh | 28 +++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.migration.sh b/home.admin/config.scripts/blitz.migration.sh index 498f3d949..dd98c15b2 100755 --- a/home.admin/config.scripts/blitz.migration.sh +++ b/home.admin/config.scripts/blitz.migration.sh @@ -141,7 +141,33 @@ if [ "$1" = "migration-umbrel" ]; then echo "# starting to rearrange the data drive for raspiblitz .." - # extract data + # determine version + version=$(sudo cat /mnt/hdd/umbrel/info.json | jq -r '.version') + if [ "${version}" == "" ]; then + echo "err='not able to get version'" + exit 1 + fi + versionMajor=$(echo "${version}" | cut -d "." -f1) + versionMiner=$(echo "${version}" | cut -d "." -f2) + versionPatch=$(echo "${version}" | cut -d "." -f3) + if [ "${versionMajor}" == "" ] || [ "${versionMiner}" == "" ] || [ "${versionPatch}" == "" ]; then + echo "err='not able processing version'" + exit 1 + fi + + # since 0.3.9 umbrel uses a fixed/default password for lnd wallet (before it was the user set one) + if [ ${versionMajor} -eq 0 ] && [ ${versionMiner} -lt 4 ] && [ ${versionPatch} -lt 9 ]; then + echo "# umbrel before 0.3.9 --> password c is old user set password" + else + echo "# umbrel 0.3.9 or higher --> password c is fixed 'moneyprintergobrrr'" + # set flag with standard password to be changed on final recovery setup + sudo touch /mnt/hdd/passwordc.flag + sudo chmod 777 /mnt/hdd/passwordc.flag + echo "moneyprintergobrrr" >> /mnt/hdd/passwordc.flag + sudo chown admin:admin /mnt/hdd/passwordc.flag + fi + + # extract detailed data nameNode=$(sudo jq -r '.name' /mnt/hdd/umbrel/db/user.json) # move bitcoin/blockchain & call function to migrate config From 6131f23591b99cb1c1de7fa17a9507bc52266a8b Mon Sep 17 00:00:00 2001 From: nyxnor <69700936+nyxnor@users.noreply.github.com> Date: Sat, 24 Apr 2021 18:40:15 +0000 Subject: [PATCH 0015/1295] Table of options on how to have blitz (#2219) --- README.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index c9cbf80ff..fb395a236 100644 --- a/README.md +++ b/README.md @@ -129,14 +129,19 @@ In the end your RaspiBlitz should look like this: ## Downloading the Software -Your SD-card needs to contain the RaspiBlitz software. You can take the long road by [building the SD-card image yourself](#build-the-sd-card-image) or use the already prepared SD-Card image: +|Method|Build the sd card|Install the image| +|------|-----------------|-----------------| +|Philosophy|Sovereignty|Trust| +|Difficulty level|Medium|Easy| +|Pros|You don't need to trust us, build from your own forked repository|Make Blitz accessible to everyone| +|Cons|You need to read the build_sdcard.sh parameters in order for the customization to suit your needs|You have to trust the mantainer image binaries| +|Instructions|[Build your own sd card image](https://github.com/rootzoll/raspiblitz/tree/master#build-the-sd-card-image)|[Download image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7RC3-2021-04-19.img.gz) and [Flash the sd card](https://github.com/rootzoll/raspiblitz/tree/master#write-the-sd-card-image-to-your-sd-card)| +|Verify what?|All of the code, don't trust, verify|SHA-256 (below) and/or [Signature](https://github.com/rootzoll/raspiblitz/blob/v1.6/FAQ.md#how-to-verify-the-sd-card-image-after-download)| -**Download SD-Card image - Version 1.7.0RC2 (JUST FOR TESTING)** - -Browser: https://raspiblitz.fulmo.org/images/raspiblitz-v1.7RC2-2021-04-09.img.gz - -SHA-256: 83384b2efe8d93e8bee4130e11770a6c4c1be676df9f9150e78ea42b9d252ed6 or [SIGNATURE]() +If downloading the mantainer image, the shasum is: +* SHA-256: 83384b2efe8d93e8bee4130e11770a6c4c1be676df9f9150e78ea42b9d252ed6 +Useful info: * [What's new in Version 1.7 of RaspiBlitz?](CHANGES.md#whats-new-in-version-170-of-raspiblitz) * [How to update my RaspiBlitz?](README.md#updating-raspiblitz-to-new-version) * [How to verify the SD card image after download?](FAQ.md#how-to-verify-the-sd-card-image-after-download) From 4fae234e85af336d13ec75185d0e07fb4849e48e Mon Sep 17 00:00:00 2001 From: nyxnor <69700936+nyxnor@users.noreply.github.com> Date: Sat, 24 Apr 2021 18:57:05 +0000 Subject: [PATCH 0016/1295] Create SECURITY.md (#2212) --- SECURITY.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..bba6f56de --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,40 @@ +# Security Policy + +## Supported Versions + +Updates are made only for the latest version. + +Security patches can be done with `Menu > Patch` for the current branch in the case of a high risk issue before next release. + +The latest version always have the `latest` tag. To make sure you are using the lastest version, run: +``` +curl -s https://api.github.com/repos/rootzoll/raspiblitz/releases/latest|grep tag_name|head -1|cut -d '"' -f4 +``` + +## Reporting a Vulnerability + +To report security issues send an email to christian@rotzoll.de (not for support). + +The following keys may be used to communicate sensitive information to developers: + +| Name | Fingerprint | 64-bit | +|------|-------------|--------| +|Rootzoll|92A7 46AE 33A3 C186 D014 BF5C 1C73 060C 7C17 6461|1C73 060C 7C17 6461| +|Openoms|13C6 88DB 5B9C 745D E4D2 E454 5BFB 7760 9B08 1B65|5BFB 7760 9B08 1B65| + +You can import a key by running the following command with that individual’s fingerprint: +``` +curl https://keybase.io/rootzoll/pgp_keys.asc | gpg --import +curl https://keybase.io/oms/pgp_keys.asc | gpg --import +``` +Ensure that you put quotes around fingerprints containing spaces if importing with other methods. + +# Online Security +* Wi-fi and Bluetooth is disabled by default in the build script. +* UFW is active and only specific ports are open, closing ports and removing hidden services when services are uninstalled. +* Admin (and Joinmarket [optional]) users have passwordless sudo access to be able to perform installations and read password without much user interaction. + +# Physical Security +* All wallets and user interfaces are password protected so this has more privacy implications (in the case of physical theft) than security. +* Optional log in through SSH using a hardware wallet. +* LUKS encryption would be welcome in the future. From 0b9c41ea04024ce3bb019c191ecd96112676f189 Mon Sep 17 00:00:00 2001 From: /rootzoll Date: Sun, 25 Apr 2021 00:10:07 +0200 Subject: [PATCH 0017/1295] merge updates documentation for v1.7 --- FAQ.md | 10 + README.md | 479 ++++++++++++++---------------- SECURITY.md | 37 ++- pictures/connect.png | Bin 0 -> 78698 bytes pictures/lit.png | Bin 0 -> 424893 bytes pictures/mainmenu.png | Bin 61026 -> 122651 bytes pictures/mempool.png | Bin 0 -> 493878 bytes pictures/raspilogo_tile.png | Bin 0 -> 60977 bytes pictures/raspilogo_tile_400px.png | Bin 0 -> 18990 bytes pictures/services.png | Bin 30567 -> 97478 bytes pictures/settings.png | Bin 27874 -> 79520 bytes pictures/system.png | Bin 0 -> 82721 bytes pictures/update.png | Bin 0 -> 96885 bytes 13 files changed, 275 insertions(+), 251 deletions(-) create mode 100644 pictures/connect.png create mode 100644 pictures/lit.png create mode 100644 pictures/mempool.png create mode 100644 pictures/raspilogo_tile.png create mode 100644 pictures/raspilogo_tile_400px.png create mode 100644 pictures/system.png create mode 100644 pictures/update.png diff --git a/FAQ.md b/FAQ.md index 6bc4f9d94..26e8f5407 100644 --- a/FAQ.md +++ b/FAQ.md @@ -73,6 +73,7 @@ - [Let's Encrypt - eMail Address](#lets-encrypt---email-address) - [Let's Encrypt - Installation details](#lets-encrypt---installation-details) - [How can I customize my RaspiBlitz or add other software?](#how-can-i-customize-my-raspiblitz-or-add-other-software) +- [How do I find the IP address when running without a display?](#how-do-i-find-the-ip-address-when-running-without-a-display) --- @@ -931,3 +932,12 @@ The RaspiBlitz is your computer to experiment with. Feel free to add your own sc - Hot fixes & new features for minor verisons will be created as single branches from the release branch, and once ready will be merged back into that release branch as a Pull Request using 'Squash-Merge' AND then, this 'Squash-Merge' (one single commit) will get cherry-picked into the 'dev' branch ('git cherry-pick COMMITHASH' - may call 'git fetch' & 'git pull' before to make a clean cherry-pick into dev). +# How do I find the IP address when running without a display? + +If you can login into your local internet router it should show you the IP address assigned to the RaspberryPi. + +Another way is to use [Angry IP Scanner](https://angryip.org/) to find the IP address. + +You can also put an empty file just called `hdmi` (without any ending) onto the sd card when connected to your laptop and then start it up on the RaspberryPi. This will activate the HDMI port and if you connect a HDMI monitor to the RaspberryPi it will show you the RaspiBlitz status screen containing the local IP address. + + diff --git a/README.md b/README.md index fb395a236..0a86fce63 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,17 @@ -![RaspiBlitz](pictures/raspilogo_400px.png) +![RaspiBlitz](pictures/raspilogo_tile_400px.png) *Build your own Lightning Node on a RaspberryPi with a nice Display.* -`Version 1.7.0RC2 with lnd 0.12.1 and bitcoin 0.21.0 (or litecoin 0.18.1)` +`Version 1.7.0 with lnd 0.12.1 and bitcoin 0.21.0 (or litecoin 0.18.1)` ![RaspiBlitz](pictures/raspiblitz.jpg) -**The RaspiBlitz is a do-it-yourself Lightning Node based on LND running together with a Bitcoin-Fullnode on a RaspberryPi 3/4 - with an HDD/SSD and a nice display for easy setup & monitoring.** +**The RaspiBlitz is a do-it-yourself Lightning Node based on LND running together with a Bitcoin-Fullnode on a RaspberryPi (1TB SSD) and a nice display for easy setup & monitoring.** RaspiBlitz is mainly targeted for learning how to run your own node decentralized from home - because: Not your Node, Not your Rules. Discover & develop the growing ecosystem of the Lightning Network by becoming a full part of it. Build it as part of a [workshop](WORKSHOP.md) or as a weekend project yourself. ## Feature Overview -This is a quick look at the SSH main menu (once RaspiBlitz is SetUp): - -![MainMenu-A](pictures/mainmenu.png) - -As an alternative to the SSH menu, the "Ride the Lightning" (RTL) WebUI is available: - -![RTL-preview](pictures/RTL-dashboard.png) - There are further Services that can be switched on: * **Tor** (Run as Hidden Service) [details](https://en.wikipedia.org/wiki/Tor_(anonymity_network)#Onion_services) @@ -28,29 +20,26 @@ There are further Services that can be switched on: * **BTC-RPC-Explorer** (Bitcoin Blockchain Explorer) [details](https://github.com/janoside/btc-rpc-explorer) * **LNbits** (Lightning wallet/accounts System) [details](https://twitter.com/lnbits/status/1253700293440741377?s=20) * **SpecterDesktop** (Multisig Trezor, Ledger, COLDCARDwallet & Specter-DIY) [details](https://github.com/cryptoadvance/specter-desktop) [app connection guide](https://d11n.net/connect-specter-desktor-with-raspiblitz.html) -* **LNDmanage** (Advanced Channel Management CLI) [details](https://github.com/bitromortac/lndmanage) -* **Loop** (Submarine Swaps Service) [details](https://github.com/lightninglabs/loop/blob/master/README.md) -* **Pool** (Inbound Liquidity Marketplace) [details](https://github.com/lightninglabs/pool/blob/master/README.md) +* **Lightning Terminal (Loop, Pool & Faraday)** (Manage Channel Liquidity) [details](https://github.com/lightninglabs/lightning-terminal#lightning-terminal-lit) * **JoinMarket** (CoinJoin Service) [details](https://github.com/JoinMarket-Org/joinmarket-clientserver) * **ThunderHub** (Lightning Node Manager WebUI) [details](https://www.thunderhub.io/) -* **Faraday** (Channel Analysis & Recommendations CLI) [details](https://github.com/lightninglabs/faraday/blob/master/README.md) * **Balance Of Satoshis** (Commands for working with LND balances) [details](https://github.com/alexbosworth/balanceofsatoshis/blob/master/README.md) * **Kindle Display** (Bitcoin Status Display made with a jailbroken Kindle) [details](https://github.com/dennisreimann/kindle-display) * **Stacking Sats Kraken** (Auto-DCA script) [details](https://github.com/dennisreimann/stacking-sats-kraken) * **Circuit Breaker** (Lighthing Channel Firewall) [details](https://github.com/lightningequipment/circuitbreaker/blob/master/README.md) * **PyBlock** (Python Util & Fun Scripts) [details](https://github.com/curly60e/pyblock/blob/master/README.md) * **Mempool Explorer** [details](https://github.com/mempool/mempool) -* **Sphinx Relay Server** [details](https://github.com/stakwork/sphinx-relay/blob/master/README.md) +* **Sphinx Chat Relay Server** [details](https://github.com/stakwork/sphinx-relay/blob/master/README.md) +* **Telegraf metrics** [details](https://github.com/rootzoll/raspiblitz/issues/1369) +* **Chantools** (Fund Rescue) [details](https://github.com/guggero/chantools/blob/master/README.md) You can connect the following Wallet-Apps to your RaspiBlitz: -* **Zap** (Android, iOS & Desktop) [details](https://zap.jackmallers.com/) * **Zeus** (Android & iOS-TestFlight) [details](https://zeusln.app) * **Fully Noded** (iOS) [details](https://apps.apple.com/us/app/fully-noded/id1436425586) * **SendMany** (Android) [details](https://github.com/fusion44/sendmany/blob/master/README.md) * **Sphinx Chat App** (Android & iOS) [details](https://sphinx.chat) - Also many more features like Touchscreen, Channels Autopilot, DynDNS, SSH-Tunneling, UPS Support, ... ## DeepDive Video (July 2020) @@ -63,6 +52,8 @@ The RaspiBlitz is optimized for being setup during a workshop at a hackday or co If you start at home ordering the parts from Amazon (see shopping list below) then it's a weekend project with a lot of downloading and syncing time where you can do other stuff while checking on the progress from time to time. +If you already run a Umbrel or myNode you have basically all the hardware needed and you can make the [Migration to RaspiBlitz from Umbrel/myNode](#make-a-raspiblitz-out-of-your-umbrel-or-mynode) under one hour. + ## Hardware Needed All parts together cost around 180-250 USD - based on shops and location. @@ -79,10 +70,6 @@ The cheapest way is to buy and assemble the single parts yourself. There are two *Please try to use the exact hardware models that are recommended in the shopping lists. We have had multiple reports where, for example, other SSD or SSD cases/controllers lead to problems. The idea of the shopping lists is to provide you the best tested hardware components that work together - improvement recommendations are always welcome.* -#### Package: Standard (around 250 USD) - -*The "Standard Package" is the most tested and recommended option if you can afford it. It aims to give you the best economic value to run all the RaspiBlitz features with good performance and even allows you to self-validate your blockchain in under 3 days.* - * RaspberryPi 4 4GB (or 8GB) [amazon referral link](https://geni.us/raspiblitz-4gb-new) * Power Supply - USB-C, 5V, >=3A [amazon referral link](https://geni.us/raspiblitz-ps) * 1TB SSD - SanDisk SSD Plus 1TB 2.5" : [amazon referral link](https://geni.us/raspiblitz-1000gb-san) *other 1TB SSD models might cause power issues* @@ -93,25 +80,6 @@ The cheapest way is to buy and assemble the single parts yourself. There are two *You can even pay for your RaspiBlitz Amazon Shopping with Bitcoin & Lightning through [Bitrefill](https://blog.bitrefill.com/its-here-buy-amazon-vouchers-with-bitcoin-on-bitrefill-bb2a4449724a).* -#### Package: Minimal (around 180 USD) - -*The minimal package aims for the cheapest price and allows you to use old hardware. It will always be possible to run all the basic features of a Bitcoin- & Lightning-Fullnode, but the system might be too slow to validate the blockchain history by itself and run some resource intensive extended services.* - -Basic Parts: -* 1TB Hard Drive: [amazon referral link](https://geni.us/raspiblitz-hdd) -* Micro SD-Card 16GB: [amazon referral link](https://geni.us/raspiblitz-sd-card16gb) -* LCD - 3.5" RPi Display, GPIO connection, XPT2046 Touch Controller: [amazon referral link](https://geni.us/raspiblitz-touchscreen) - -When RaspberryPi 3 --> add following parts: -* RaspberryPi 3B+ : [amazon referral link](https://geni.us/raspiblitz-rpi3) -* Heatsink-Case for RPi3: [amazon referral link](https://geni.us/raspiblitz-heatsink) -* Powersupply microUSB, 5V, >=3A: [amazon referral link](https://geni.us/raspiblitz-3A-power) - -When RaspberryPi 4 2GB --> add following parts: -* RaspberryPi 4 2GB [amazon referral link](https://geni.us/raspiblitz-4-2gb) -* Power Supply - USB-C, 5V, >=3A [amazon referral link](https://geni.us/raspiblitz-ps) -* Heatsink Case for RPi4: [amazon referral link](https://geni.us/heatsink-raspi4) - [What other case options do I have?](FAQ.md#what-other-case-options-do-i-have) ## Assemble your RaspiBlitz @@ -119,7 +87,7 @@ When RaspberryPi 4 2GB --> add following parts: When you have all parts you need to: - Assemble the Heatsink-Case on the RaspberryPi (follow the instructions in package). -- Put the SSD/HDD into the Case and connect it per USB to the RaspberryPi +- Put the SSD/HDD into the Case and connect it per USB to the RaspberryPi (blue ports). - Add the display on top with the pins like in picture below. - Plug in the network cable. @@ -129,14 +97,14 @@ In the end your RaspiBlitz should look like this: ## Downloading the Software -|Method|Build the sd card|Install the image| +|Method|Install the image|Build the sd card| |------|-----------------|-----------------| -|Philosophy|Sovereignty|Trust| -|Difficulty level|Medium|Easy| -|Pros|You don't need to trust us, build from your own forked repository|Make Blitz accessible to everyone| -|Cons|You need to read the build_sdcard.sh parameters in order for the customization to suit your needs|You have to trust the mantainer image binaries| -|Instructions|[Build your own sd card image](https://github.com/rootzoll/raspiblitz/tree/master#build-the-sd-card-image)|[Download image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7RC3-2021-04-19.img.gz) and [Flash the sd card](https://github.com/rootzoll/raspiblitz/tree/master#write-the-sd-card-image-to-your-sd-card)| -|Verify what?|All of the code, don't trust, verify|SHA-256 (below) and/or [Signature](https://github.com/rootzoll/raspiblitz/blob/v1.6/FAQ.md#how-to-verify-the-sd-card-image-after-download)| +|Philosophy|Trust|Sovereignty| +|Difficulty level|Easy|Medium| +|Pros|Make Blitz accessible to everyone|You don't need to trust us, build from your own forked repository| +|Cons|You have to trust the mantainer image binaries|You need to read the build_sdcard.sh parameters in order for the customization to suit your needs| +|Instructions|[Download image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7RC3-2021-04-19.img.gz) and [Flash the sd card](https://github.com/rootzoll/raspiblitz/tree/master#write-the-sd-card-image-to-your-sd-card)|[Build your own sd card image](#build-the-sd-card-image)| +|Verify what?|SHA-256 (below) and/or [Signature](https://github.com/rootzoll/raspiblitz/blob/v1.6/FAQ.md#how-to-verify-the-sd-card-image-after-download)|All of the code, don't trust, verify| If downloading the mantainer image, the shasum is: * SHA-256: 83384b2efe8d93e8bee4130e11770a6c4c1be676df9f9150e78ea42b9d252ed6 @@ -166,6 +134,8 @@ Insert the SD card and connect the power plug. When everything boots up correctly, you should see the local IP address of your RaspiBlitz on the LCD panel. +- [How do I find the IP address when running without a display?](FAQ.md#how-do-i-find-the-ip-address-when-running-without-a-display) + ![LCD0](pictures/lcd0-welcome.png) Now open up a terminal ([OSX](https://www.youtube.com/watch?v=5XgBd6rjuDQ)/[Win10](https://www.howtogeek.com/336775/how-to-enable-and-use-windows-10s-built-in-ssh-commands/)) and connect through SSH with the command displayed by the RaspiBlitz: @@ -200,12 +170,6 @@ If you are looking for a tutorial on how to organize a workshop to build the Ras ### Init -Automatically after login via SSH as admin to the RaspiBlitz, it will run a hardware test. - -![HardwareTest](pictures/hardwaretest.png) - -If you see a warning there, please read carefully, because a lot of things that go wrong later (errors and even loss of funds) relate to problems with the hardware. If you get an OK here ... you are good to go :) - In the beginning you can choose how to setup your RaspiBlitz, by running on Bitcoin or Litecoin with Lightning. This is also the point where you can import a Migration file from an older RaspiBlitz - read about Migration [further down](README.md#import-a-migration-file). The default choice here is Bitcoin. ![SSH0](pictures/ssh0-welcome2.png) @@ -238,16 +202,6 @@ Then the user is asked to enter the Password B - this is internally used for the *The other passwords C & D will be needed later on. They will be used during the lightning wallet setup.* -### Running behind Tor - -On setup you can now decide if you want to run your RaspiBlitz behind Tor or make your IP public to the Lightning Network. - -![TOR](pictures/chooseTOR.png) - -Your IP can reveal your location (at least to a certain radius) to everyone and your internet provider has a record of your personal identity tied to your IP. When you choose to run behind the Tor network this personal data is much better protected. But running behind Tor reduces speed and might make it more difficult to connect to you for other nodes or pairing other devices and apps to it. - -You can switch Tor off later on. You can also switch Tor on after the setup, but keep in mind that once your node is running, your lightning node id can be connected to your public IP. - After this the setup process will need some time and the user will see a lot of console outputs - just wait until it's finished: ![SSH4](pictures/ssh4-scripts.png) @@ -378,7 +332,7 @@ If you now login by SSH in your RaspiBlitz (or you are still logged in) you will ![SSH9e1](pictures/mainmenu.png) -And if you scroll down .. you see even more options. All options on the main menu will be explained below in the feature documentation. +All options on the main menu will be explained below in the feature documentation. *OK .. so from here on out, your RaspiBlitz is ready to play with.* @@ -414,7 +368,11 @@ This is the screen that gets displayed on the LCD/display. It's useful to call i * [Why is my node address on the display red?](FAQ.md#why-is-my-node-address-on-the-display-red) * [Why is my node address on the display yellow (not green)?](FAQ.md#why-is-my-node-address-on-the-display-yellow-not-green) -#### FUNDING: Fund your on-chain Wallet +#### LIGHTNING (Basic Node Management) + +Under `LIGHTNING` you find some basic steps to manage your Lightning node. Those are very simplyfied in the RaspiBlitz SSH menu for the reason of learning. For more advanced management of your Lightning node see addtional apps under 'SERVICES'. + +##### FUNDING: Fund your on-chain Wallet Before you can open channels with other nodes you need to put some coins in your LND on-chain wallet. Use this option to generate an address to send funds to. @@ -422,13 +380,13 @@ Before you can open channels with other nodes you need to put some coins in your You can fund it multiple times - starting with small amounts first to test. LND will always generate a different address, but all funds you send will get into the same LND on-chain wallet. -#### CONNECT: Connect to a Peer +##### CONNECT: Connect to a Peer Before you can open a channel with another node on the network, you need to connect this node as a peer to your node. Opening a channel with a peer is just optional. Having another node as peer helps your node to receive information about the network through the gossip protocol. It will help your node to find better routes through the network. -#### CHANNEL: Open a Channel with Peer +##### CHANNEL: Open a Channel with Peer To open a payment channel with another node, you can use this option. @@ -438,7 +396,7 @@ Bear in mind that this option will open a public channel that can be seen by eve *This is just a very basic shell script. For more usability, try the RTL Webinterface (under Services) or connect a (mobile) wallet with your RaspiBlitz.* -#### SEND: Pay an Invoice/PaymentRequest +##### SEND: Pay an Invoice/PaymentRequest Pay an invoice through lightning. @@ -446,24 +404,12 @@ Pay an invoice through lightning. If you are looking for something to test payments with Lightning ... why not [donate some satoshis to RaspiBlitz development](https://tallyco.in/s/r5lx23/)? Thanks :) -#### RECEIVE: Create Invoice/PaymentRequest +##### RECEIVE: Create Invoice/PaymentRequest Create an invoice to send to someone for a service to be paid through lightning. *This is just a very basic shell script. For more usability try the RTL Webinterface (under Services) or connect a (mobile) wallet with your RaspiBlitz.* -#### CLOSE ALL: Closing all open Channels - -*This option is just available if you have channels open.* - -With this feature you can close down all open channels and get the funds locked up in those channels back to your on-chain wallet. - -You may choose to force-close some channels where the channel partner is no longer reachable. Keep in mind that when you force-close a channel, it can take a much longer time until your funds are available again through your on-chain wallet. - -#### CASHOUT: Remove Funds from on-chain Wallet - -Use if you want to remove all funds from the RaspiBlitz. - #### lnbalance: Detailed Wallet Balances bonus-lnbalance @@ -478,6 +424,22 @@ If you connected your node well within the Lightning Network you can become a "R Beware - earning fees as a routing node does not come automatic. It's a bit of hard work of building the right channels to be attractive for other people to route thru. Check the internet for tutorials or use tools like "lndmanage" (see under RaspiBlitz SERVICES) to help you analyse and optimize your channel management. +##### NAME: Change name of your Node + +Here you can change the alias name of your node as it is shown as part of the Lightning network. + +##### CLOSE ALL: Closing all open Channels + +*This option is just available if you have channels open.* + +With this feature you can close down all open channels and get the funds locked up in those channels back to your on-chain wallet. + +You may choose to force-close some channels where the channel partner is no longer reachable. Keep in mind that when you force-close a channel, it can take a much longer time until your funds are available again through your on-chain wallet. + +##### CASHOUT: Remove Funds from on-chain Wallet + +Use if you want to remove all funds from the RaspiBlitz. + #### SETTINGS: Basic Settings of RaspiBlitz Here you will find basic settings for your RaspiBlitz: @@ -555,6 +517,10 @@ Have fun. IMPORTANT: Presently BTCPay Server service is NOT supported on TESTNET (RPC connection error messages). Until this [issue #1724](https://github.com/rootzoll/raspiblitz/issues/1724) is resolved you can [play around with BTCPay Server on TESTNET](https://testnet.demo.btcpayserver.org) +##### Circuitbreaker (LND Firewall) + +Not everybody is acting friendly in the Lightning network. Circuitbreaker is a background service you cann activate that acts similar to a firewall to protect your now better. For details see: https://github.com/lightningequipment/circuitbreaker/blob/master/README.md + ##### LND Auto-Unlock The RaspiBlitz will automatically unlock the LND wallet upon every start. @@ -585,21 +551,21 @@ The RaspiBlitz offers further Services, Apps and configuration (scroll down to s Activate/Deactivate service selection with the space bar and then select 'OK' to trigger Install/Uninstall. You can find more details about those options below (top to bottom): -##### Lightning Loop +##### Electrum Rust Server -A Submarine Swaps Service by lighting labs. You call it from the RaspiBlitz terminal with the command 'loop' - if you have the RTL service installed (see below), then loop will also be available as part of the RTL web interface. You can use Loop for example to send satoshies from one of your channels to an on-chain bitcoin address without closing the channel for a fee. This can be use full to send earned satoshies to your hardware wallet while freeing up your inbound liquidity on your channels again. +Enables a user to run his own Electrum server on the RaspiBlitz. The server indexes the entire Bitcoin blockchain saved locally on your HDD/SSD, and the resulting index enables fast queries for any given user wallet, allowing the user to keep real-time track of his balances and his transaction history using the [Electrum wallet](https://electrum.org). -[Details on Service](https://github.com/lightninglabs/loop) +Since Electrum Rust Server runs on the user's own machine, there is no need for the wallet to communicate with external Electrum servers, thus preserving the privacy of addresses and balances. -After install, you will see a new `LOOP` option in the SSH main menu - it will give you all the information you need to start using it. +By contrast, if you use your Trezor Hardware Wallet with the trezor.io wallet, it will tell their third party server your public keys - connecting it with your IP. Now you can use your Trezor with the Electrum Wallet, just talking to your own Electrum Server, preserving your privacy. -##### Lightning Pool +Learn how you can use Electrum with your own Server over Tor: -Lightning Pool is a non-custodial, peer-to-peer marketplace that allows node operators that need inbound liquidity to pay node operators with available capital to open channels in their direction while retaining full custody of their funds. Pool’s first product is a Lightning Channel Lease - an inbound channel with a pre-agreed duration. +Video Tutorial
--watch--> https://www.youtube.com/watch?v=AiosKK_TA7w -[Details on Service](https://github.com/lightninglabs/pool) +[More Details on Service](https://github.com/romanz/electrs) -After install, you will see a new `POOL` option in the SSH main menu - it will give you all the information you need to start using it. +After install, you will see a new `ELECTRS` option in the SSH main menu - it will give you all the information you need to start using it. ##### RTL Webinterface @@ -617,6 +583,52 @@ Feedback is welcome by the RTL programmer: https://github.com/ShahanaFarooqui/RT After install, you will see a new `RTL` option in the SSH main menu - it will give you all the information you need to start using it. +##### ThunderHub + +A Lightning Node Manager WebUI - similar to RTL. + +[Details on Service](https://www.thunderhub.io) + +After install, you will see a new `THUB` option in the SSH main menu - it will give you all the information you need to start using it. + +##### Lightning Terminal (LIT) with loop, pool & faraday + +Lightning Terminal (LiT) is a browser-based interface for managing channel liquidity. It bundles the former single tools called loop, pool & faraday with an easy to use browser interface. + +![LIT](pictures/lit.png) + +[Details on Service](https://github.com/lightninglabs/lightning-terminal#lightning-terminal-lit) + +After install, you will see a new `LIT` option in the SSH main menu - it will give you all the information you need to start using it. + +##### BTCPayServer + +[BTCPay Server](https://github.com/btcpayserver) is a self-hosted, open-source cryptocurrency payment processor. It's secure, private, censorship-resistant and free. + +![BTCPAY](pictures/btcpay.png) + +Find all details on how to use the BTCPay Server on your RaspiBlitz in this great tutorial: https://coincharge.io/en/raspiblitz-btcpay-server/ + +After install, you will see a new `BTCPAY` option in the SSH main menu - it will give you all the information you need to start using it. + +##### LNbits + +LNbits is a very simple server that sits on top of your Lightning Wallet. + +![LNBITS](pictures/lnbits.png) + +It can be used together with IP2Tor to provide: +- Lightning Paper Vouchers (Plugin: LNURLw) +- Merchant Onboarding (Plugin: TPOS) + +Video Tutorial
--watch--> https://www.youtube.com/watch?v=0Bt3tHULAnw + +You can also develop your own extensions on it. + +[Details on Service](https://github.com/arcbtc/lnbits/blob/master/README.md) + +After install, you will see a new `LNBITS` option in the SSH main menu - it will give you all the information you need to start using it. + ##### BTC-RPC-Explorer BTC-RPC-Explorer is a blockchain explorer website you can run on your own RaspiBlitz. See an example running on: https://btc-explorer.com @@ -637,98 +649,15 @@ The goal of SpecterDesktop is to make a convenient and user-friendly GUI around After install, you will see a new `SPECTER` option in the SSH main menu - it will give you all the information you need to start using it. -##### Electrum Rust Server +##### Mempool Explorer -Enables a user to run his own Electrum server on the RaspiBlitz. The server indexes the entire Bitcoin blockchain saved locally on your HDD/SSD, and the resulting index enables fast queries for any given user wallet, allowing the user to keep real-time track of his balances and his transaction history using the [Electrum wallet](https://electrum.org). +![MEMPOOL](pictures/mempool.png) -Since Electrum Rust Server runs on the user's own machine, there is no need for the wallet to communicate with external Electrum servers, thus preserving the privacy of addresses and balances. +Mempool is the fully featured visualizer, explorer, and API service running on mempool.space -By contrast, if you use your Trezor Hardware Wallet with the trezor.io wallet, it will tell their third party server your public keys - connecting it with your IP. Now you can use your Trezor with the Electrum Wallet, just talking to your own Electrum Server, preserving your privacy. +[Details on Service](https://github.com/mempool/mempool) -Learn how you can use Electrum with your own Server over Tor: - -Video Tutorial
--watch--> https://www.youtube.com/watch?v=AiosKK_TA7w - -[More Details on Service](https://github.com/romanz/electrs) - -After install, you will see a new `ELECTRS` option in the SSH main menu - it will give you all the information you need to start using it. - -##### BTCPayServer - -[BTCPay Server](https://github.com/btcpayserver) is a self-hosted, open-source cryptocurrency payment processor. It's secure, private, censorship-resistant and free. - -![BTCPAY](pictures/btcpay.png) - -Find all details on how to use the BTCPay Server on your RaspiBlitz in this great tutorial: https://coincharge.io/en/raspiblitz-btcpay-server/ - -After install, you will see a new `BTCPAY` option in the SSH main menu - it will give you all the information you need to start using it. - -##### LNDmanage - -lndmanage is a command line tool for advanced channel management of a node. - -*You need at least one open channel to use this tool.* - -To run it, change to the RaspiBlitz terminal and type 'manage'. This starts the LNDManage interactive mode and you can use the following commands: - -* __Activity reports ```report```__ -* __Display the node summary ```status```__ -* __Advanced channel listings ```listchannels```__ - * ```listchannels rebalance```: list channels for rebalancing - * ```listchannels forwardings```: list forwarding statistics for each channel - * ```listchannels hygiene```: information for closing active channels - * ```listchannels inactive```: information on inactive channels -* __Rebalancing command ```rebalance```__ - * different rebalancing strategies can be chosen - * a target 'balancedness' can be specified (e.g. to empty the channel) -* __Circular self-payments ```circle```__ -* __Recommendation of good nodes ```recommend-nodes```__ - -[Details on Service](https://github.com/bitromortac/lndmanage/blob/master/README.md) - -After install, you will see a new `LNDMANAGE` option in the SSH main menu - it will give you all the information you need to start using it. - -##### Faraday - -Faraday is a Channel Analysis & Recommendations CLI that can help you with channel management. - -[Details on Service](https://github.com/lightninglabs/faraday/blob/master/README.md) - -After install, you will see a new `FARADAY` option in the SSH main menu - it will give you all the information you need to start using it. - -##### Balance of Satoshi - -Balance of Satoshi gives you enhanced commands for working with LND balances. - -[Details on Service](https://github.com/alexbosworth/balanceofsatoshis/blob/master/README.md) - -After install, you will see a new `BOS` option in the SSH main menu - it will give you all the information you need to start using it. - -##### ThunderHub - -A Lightning Node Manager WebUI - similar to RTL. - -[Details on Service](https://www.thunderhub.io) - -After install, you will see a new `THUB` option in the SSH main menu - it will give you all the information you need to start using it. - -##### LNbits - -LNbits is a very simple server that sits on top of your Lightning Wallet. - -![LNBITS](pictures/lnbits.png) - -It can be used together with IP2Tor to provide: -- Lightning Paper Vouchers (Plugin: LNURLw) -- Merchant Onboarding (Plugin: TPOS) - -Video Tutorial
--watch--> https://www.youtube.com/watch?v=0Bt3tHULAnw - -You can also develop your own extensions on it. - -[Details on Service](https://github.com/arcbtc/lnbits/blob/master/README.md) - -After install, you will see a new `LNBITS` option in the SSH main menu - it will give you all the information you need to start using it. +After install, you will see a new `MEMPOOL` option in the SSH main menu - it will give you all the information you need to start using it. ##### JoinMarket @@ -742,17 +671,13 @@ For more details see [here](https://github.com/JoinMarket-Org/joinmarket-clients After install, you will see a new `JMARKET` option in the SSH main menu - it will give you all the information you need to start using it. -##### Circuit Breaker +##### Balance of Satoshi -https://github.com/lightningequipment/circuitbreaker/blob/master/README.md +Balance of Satoshi gives you enhanced commands for working with LND balances. -##### PyBlock +[Details on Service](https://github.com/alexbosworth/balanceofsatoshis/blob/master/README.md) -https://github.com/curly60e/pyblock/blob/master/README.md - -##### Mempool Explorer - -https://github.com/mempool/mempool +After install, you will see a new `BOS` option in the SSH main menu - it will give you all the information you need to start using it. ##### Sphinx Relay Server @@ -762,6 +687,86 @@ The Sphinx App allows chat over the Lightning Network and ties into the idea of After install, you will see a new `SPHINX` option in the SSH main menu - it will give you all the information you need to start using it. +##### PyBlock + +![PYBLOCK](pictures/pyblock.png) + +https://github.com/curly60e/pyblock/blob/master/README.md + +##### Channel Tools (chantools) + +This tool provides helper functions that can be used to rescue funds locked in lnd channels in case lnd itself cannot run properly anymore. + +https://github.com/curly60e/pyblock/blob/master/README.md + +##### Download Bitcoin Whitepaper + +Extract the original Bitcoin Whitepaper as PDF directly from the blockchain of your node. + +#### SYSTEM: Monitoring & Configuration + +![SYSTEM](pictures/system.png) + +#### CONNECT: Connect Apps & Credentials + +This feature should support connecting your RaspiBlitz to a mobile wallets or other apps. + +![CONNECT](pictures/connect.png) + +##### MOBILE: Mobile Wallet Apps (Smartphone) + +At the moment, the following mobile wallets are supported: + +* [Zeus (iOS/Android)](https://github.com/ZeusLN/zeus) +* [Fully Noded (iOS over Tor)](https://apps.apple.com/us/app/fully-noded/id1436425586) +* [SendMany (Android)](https://github.com/fusion44/sendmany/blob/master/README.md) +* [Sphinx Chat App (iOS/Android)](https://sphinx.chat/) + +Mobile wallets work as a remote control app for your RaspiBlitz. First you need to install the apps on your phone - a QR code with the links to the app stores are displayed. Then you need to `pair` them with your RaspiBlitz - also via a QR code displayed on the LCD. If you run your RaspiBlitz without an LCD, there is the fallback option to display that QR code on the terminal as ASCII code (which might involve lowering your terminal's font size). + +##### BTCPAY: Get the connection string for the BTCPay Server + +To connect the payment processing BTCPay server to your Lightning node you find here the needed Connection string. + +##### bitcoinRPC + +If apps need access to the Bitcoin RPC service you can find this here. + +##### BISQ: Use your node with BISQ + +Here you can activate a hidden service for your bitcoin node so that it can be used for the decentral exchange called BISQ. + +##### EXPORT: Macaroons and TLS.cert + +If you want to access your LND APIs (to connect apps and additional services) you need credential files that grant access (Macaroons & the TLS cert). + +*Macaroons: Access Tokens that allow certain command executions on the LND node.* +*TLS: Certificate to secure/encrypt communication with the LND node.* + +In this menu, you can reset, re-sync, or export them as a file or string so that you can import them to apps and additional services. + +Here are the following export options to get the Macaroon and TLS files to be used in other apps and wallets: + +###### SSH Download + +SCP is a SSH like command to transfer files. If we're able to SSH into the RaspiBlitz, also the SCP to transfer the files should work. If you choose this option, RaspiBlitz will print prepared SCP commands you can copy+paste to run in a second terminal. + +This method is recommended to export to: +* [Zap Desktop Wallet](https://github.com/LN-Zap/zap-desktop) + +###### Browser download + +Opens an ad-hoc webserver so that you can download the files in your local network through the browser. + +*This is the least secure way to transfer those files - everybody in your local network has access to those file during download. Remember with the Admin-Macaroon somebody could takeover your node and spend all your funds. Just use as last fallback.* + +####### Hex-String + +The Macaroons and TLS.cert files can be copy+pasted as Hex-Strings from RaspiBlitz to any other app that supports that format. If you choose this option, RaspiBlitz will print all the files for you as Hex-String to do so. + +This method is recommended to export to: +* [Joule Browser Wallet](https://lightningjoule.com) + #### SUBSCRIBE: Subscription Services The RaspiBlitz offers now also Subscriptions .. those are free or paid third-party services. @@ -796,62 +801,6 @@ When you create a new LetsEncrypt subscription, you will be asked for your subdo To try out the IP2TOR tunnel, go into `MAINMENU` and the extra menu point of the Service you want to use the bridge for. It should give you an updated URL to call your service. -#### MOBILE: Connect Mobile Wallet - -This feature should support connecting your RaspiBlitz to a mobile wallet on your smartphone. - -mobile-wallets - -At the moment, the following mobile wallets are supported: - -* [ZAP (iOS/Android)](https://github.com/LN-Zap/zap-iOS) -* [Zeus (iOS/Android)](https://github.com/ZeusLN/zeus) -* [Fully Noded (iOS over Tor)](https://apps.apple.com/us/app/fully-noded/id1436425586) -* [SendMany (Android)](https://github.com/fusion44/sendmany/blob/master/README.md) -* [Sphinx Chat App (iOS/Android)](https://sphinx.chat/) - -Mobile wallets work as a remote control app for your RaspiBlitz. First you need to install the apps on your phone - a QR code with the links to the app stores are displayed. Then you need to `pair` them with your RaspiBlitz - also via a QR code displayed on the LCD. If you run your RaspiBlitz without an LCD, there is the fallback option to display that QR code on the terminal as ASCII code (which might involve lowering your terminal's font size). - -There is a special video on how to connect the Zeus app thru Tor: - -Video Tutorial
--watch--> https://www.youtube.com/watch?v=XStiTJosklY - - -#### LNDCREDS: Macaroons and TLS.cert - -If you want to access your LND APIs (to connect apps and additional services) you need credential files that grant access (Macaroons & the TLS cert). - -*Macaroons: Access Tokens that allow certain command executions on the LND node.* -*TLS: Certificate to secure/encrypt communication with the LND node.* - -In this menu, you can reset, re-sync, or export them as a file or string so that you can import them to apps and additional services. - -Here are the following export options to get the Macaroon and TLS files to be used in other apps and wallets: - -##### Hex-String - -The Macaroons and TLS.cert files can be copy+pasted as Hex-Strings from RaspiBlitz to any other app that supports that format. If you choose this option, RaspiBlitz will print all the files for you as Hex-String to do so. - -This method is recommended to export to: -* [Joule Browser Wallet](https://lightningjoule.com) - -##### SSH Download - -SCP is a SSH like command to transfer files. If we're able to SSH into the RaspiBlitz, also the SCP to transfer the files should work. If you choose this option, RaspiBlitz will print prepared SCP commands you can copy+paste to run in a second terminal. - -This method is recommended to export to: -* [Zap Desktop Wallet](https://github.com/LN-Zap/zap-desktop) - -##### Browser download - -Opens an ad-hoc webserver so that you can download the files in your local network through the browser. - -*This is the least secure way to transfer those files - everybody in your local network has access to those file during download. Remember with the Admin-Macaroon somebody could takeover your node and spend all your funds. Just use as last fallback.* - -#### NAME: Change Name/Alias of Node - -Change the name of your node. - #### PASSWORD: Change Passwords Change your passwords for security. @@ -931,25 +880,29 @@ If you had the Bitcoin Transaction Index activated you can use this option to ma The `UPDATE` menu gives you options to update your RaspiBlitz -![UpdateMenu](pictures/updatemenu.png) +![UpdateMenu](pictures/update.png) The options are explained in detail: *Please note that the RaspiBlitz does not support Auto-Update, to ensure that there is no remote control of your node from a central server.* -#### RELEASE: Update RaspiBlitz to a new Version +##### RELEASE: Update RaspiBlitz to a new Version This is common way to update your RaspiBlitz. Choose this option to prepare your RaspiBlitz for a new SD card image containing the new version release. -#### LND: Interim LND Update +##### PATCH: Patch RaspiBlitz code + +With Patching you have now an easy way to sync your RaspiBlitz code/scripts with the official RaspiBlitz GitHub Repo or even your own forked GitHub Repo. This is an option for people that report bugs and we like to offer them a quick script update (patch) between RaspiBlitz releases or for people who want to develolp on the RaspiBlitz and sync code between their IDE, forked GitHub and their RaspiBlitz. + +##### LND: Interim LND Update Sometimes there is a new LND release that has some breaking changes that once you updated the LND database cannot be reversed (like the update from 0.9.2 to 0.10.0). Then RaspiBlitz offers you an optional update ... this is where you then can update LND. If you choose this you get the option to do this `VERIFIED` that means it offers you the optional LND update we tested the RaspiBlitz with or `RECKLESS` which will just grab the latest LND release from the GitHub releases page (also Release Candidates) and install it with no further guarantees and verification checks - this is for people that run nodes to test new releases and how they work with existing RaspiBlitz apps. -#### PATCH: Patch RaspiBlitz code +##### BITCOIN: Interim Bitcoin Update -With Patching you have now an easy way to sync your RaspiBlitz code/scripts with the official RaspiBlitz GitHub Repo or even your own forked GitHub Repo. This is an option for people that report bugs and we like to offer them a quick script update (patch) between RaspiBlitz releases or for people who want to develolp on the RaspiBlitz and sync code between their IDE, forked GitHub and their RaspiBlitz. +Like with LND you have the possiblity to upadte the bitcoin core version here. #### REBOOT: Reboot RaspiBlitz @@ -993,6 +946,34 @@ RaspiBlitz will reboot and start the normal recovery process to install all the Then the blockchain needs to sync up and you should be back to normal. +## Make a RaspiBlitz out of your Umbrel or MyNode + +Another kind of migration is when you already run an full node with the Umbrel or myNode software and you like to change it to RaspiBlitz without closing channels. You basically have all the hardware needed and just need to change software. You dont need the [LCD from the shopping list](#amazon-shopping-list-buy-parts--build-it-yourself) - RaspiBlitz can also run without an LCD. + +*NOTE: This migration is still expirimental. You will still use the terminal to setup & manage your RaspiBlitz. If that is too technical for you please wait for the RaspiBlitz v1.8, which will introduce a WebUI for your browser that make the migration to RaspiBlitz familiar like with your old node user experiences.* + +Before you start migration: +* if you have on-chain funds on your old node - make sure to have the backup seed words +* if you have lightning channels open on your old node - make sure to have downloaded the latest Static Channel Backup file to your laptop + +Also be aware that at the moment RaspiBlitz can only transfere your blockchain and LND wallet data (including channels) over to RaspiBlitz. Any data/pairing of additional apps cannot be transfered and may get lost. + +Instructions for Migration: +* shutdown your old node +* remove the sd card +* [download the latest Raspiblitz sd card image & flash it to your sd card](#downloading-the-software) +* if you like to use a HDMI monitor for status & progress, create a empty file called `hdmi` (withot any ending) on the sd card while connected to your laptop +* [insert sd card, boot up & login per SSH](#boot-your-raspiblitz) + +Now RaspiBlitz should show you that old data from your node was detected and offer you todo the migration. + +* If you continue it will prepare the data & reboot. +* The RaspiBlitz recover/update modus is starting - that will take a while and finally reboot. +* Login per SSH as before and reset the passwords (`FINAL RECOVERY LOGIN` on LCD). Then a final reboot will happen. +* Login per SSH with your new password A & unlock LND wallet with password C. Now blockchain needs to catch up and then your RaspiBlitz should be ready and show you (under INFO) your on-chain & channel balance. + +If you dont have an LCD or HDMI monitor connectec it might be a bit difficult to see what state your RaspiBlitz is in. Just (re-)try to login per SSH again after the reboots (might always take some time until it reacts). + ## Interface / APIs To develop your own scripts/apps and connect other services/apps to your RaspiBlitz, you have multiple interfaces/APIs available: @@ -1106,7 +1087,7 @@ If done successfully, simply put the SD card into the RaspiBlitz and power on ag A ready-to-use SD card image of RaspiBlitz is provided by us for download, to get everybody started quickly (see above). But if you want to build that image yourself - here is a quick guide: -* Get a fresh RaspiOS 64-bit: [DOWNLOAD](https://downloads.raspberrypi.org/raspios_arm64/images). +* Get a latest RaspiOS 64-bit: [DOWNLOAD](https://downloads.raspberrypi.org/raspios_arm64/images). * Write the image to an SD card: [TUTORIAL](https://www.raspberrypi.org/documentation/installation/installing-images/README.md). * Add a file called `ssh` to the root of the SD card when mounted on your laptop to enable SSH login. * Start the card on a Raspi and login via SSH with `ssh pi@[IP-OF-YOUR-RASPI]`. Password is `raspberry`. diff --git a/SECURITY.md b/SECURITY.md index bba6f56de..c30f8cc58 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,10 +1,20 @@ # Security Policy +*NOTE: This document is just a first draft and still under contruction.* + +Only use this software with funds you could afford to lose. Especially a lightning wallet is a hot wallet that has a constant connection to the internet and can be target of exploitation. + +Just because the software is OpenSource does not mean its free of errors. Especially if you run additional apps the RaspiBlitz team cannot review all the code of those external projects. + +The software is provided "AS IS", without warrenty of any kind. In no event shall the +authors or copyright holders be liable for any claim, damages or other +liability. [details on legal license](LICENSE.md) + ## Supported Versions Updates are made only for the latest version. -Security patches can be done with `Menu > Patch` for the current branch in the case of a high risk issue before next release. +Security patches can be done with `MAINMENU > UPDATE > PATCH` for the current branch in the case of a high risk issue before next release. The latest version always have the `latest` tag. To make sure you are using the lastest version, run: ``` @@ -30,11 +40,34 @@ curl https://keybase.io/oms/pgp_keys.asc | gpg --import Ensure that you put quotes around fingerprints containing spaces if importing with other methods. # Online Security + * Wi-fi and Bluetooth is disabled by default in the build script. * UFW is active and only specific ports are open, closing ports and removing hidden services when services are uninstalled. +* Fail-2-Ban is protecting the SSH login against brute-force-attacks. * Admin (and Joinmarket [optional]) users have passwordless sudo access to be able to perform installations and read password without much user interaction. # Physical Security -* All wallets and user interfaces are password protected so this has more privacy implications (in the case of physical theft) than security. + +* The lightning wallet and user interfaces are password protected by default so this has more privacy implications (in the case of physical theft) than security. * Optional log in through SSH using a hardware wallet. * LUKS encryption would be welcome in the future. + +# On-chain Funds + +Please keep in mind that there can be two different on-chain wallets on the RaspiBlitz. + +## Lightning Wallet (default) + +The default is the on-chain lightning wallet - thats the wallet where you normally send your funds before opening a channel & where your funds return to when you close a channel. With the initial word seed you get during RaspiBlitz setup you can get access again to this on-chain wallet. Keep the seed words secure in a off-line location. + +## Bitcoin Core Wallet (deactivated by default) + +Beside lightning you have a bitcoin core installed. Normally bitcoin core acts just as a blockchain informational service to the lightning wallet and its internal seperate on-chain wallet is deactivated. + +Some apps (like Fully Noded or JoinMarket) activate the bitcoin core wallet and use it for their own needs. This on-chain balance will not be reflected in the rest of the RaspiBlitz software and is NOT backuped by the seed words from the RaspiBlitz setup. If you make use of the bitcoin core wallet please take care of these funds. + +# Off-chain Funds (Lightning Channels) + +Please note that there is no perfect backup concept for the funds in your lightning channels yet. We recommend strongly to use the `Static Channel Backup` provided by LND and consider off-loctaion backup of that file to have the best chances to recover Lightning funds in a case desaster recovery. + +For more practical information on this topic see: [Backup Channel Funds](README.md#backup-for-on-chain---channel-funds) \ No newline at end of file diff --git a/pictures/connect.png b/pictures/connect.png new file mode 100644 index 0000000000000000000000000000000000000000..2e655c406733d4746a3d4c4b7d691df2f9145877 GIT binary patch literal 78698 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%0D4(< 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%0DUx;PMx^D2+ZS&2PxF!K42rkot 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 R!)2SyPFsFk@r`@JKLJAdzK;L^ literal 61026 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%0A1zY^ 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%0Dp~eNY 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%0ACmJU9ATVRJMM!AC%!tdZagm_aZOZ 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

Sgm)cdvvn>ta#93*$n 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 literal 0 HcmV?d00001 diff --git a/pictures/raspilogo_tile.png b/pictures/raspilogo_tile.png new file mode 100644 index 0000000000000000000000000000000000000000..57d25beb6a31d9d04db27df5dcfcde68d419e638 GIT binary patch literal 60977 zcmd42cRZZi_BgCWi5d~TM}%mj_b!Ouhe7mFqBDB$(G!doU63Hb5WO>c7d<*LM2}v7 zT=*^Zz^Zd1m(Pz1H4)m0ebuC=E3Qd>l#~6ciME#aA!2P*Bh>k>xRLOys8@ zxUUZd1y#&eR#rn%R+e7F)yc}%9*ly*^4`MK^zkcpmR>V6Q`6odwih_Ao?36;#%h@c z_P2G=qjkySO-1#=G2&5CC8U_}xF|{d8oS%D^8vp?1{*#fTPXBJ+A3?6cqvQRFHVJh zrp0hB{7A}-z9lJ@nP#M+)6v$JhGNNjB-Tbp<77fl{s>GCve~>2>CYcL zj(v=wV2WMH>h+W9*A@#o1vv!|S5OC4{-qQGS9fheg_=Joq`E=x>{ijd# z%UtyTlu^czZ79;(vWkkxZ*2=#Fxb(}#tGup@=+IA@zD7d$PEPrm-zlcMajq{M?rZo zWUHeO(N|Rwv2b$WG_!Ov2XlHkIN$e!BIYH6EINQ8X7pYT_Kt2MUgA&xfDl2J@2de% z>Hh$M*oi;YSJj}Gb#evM3vhCAay^y6p{J)8bG5V*(RwNWZ*=4@@uxNrh_eU);OXhf z>B-CKocQb@HEnUV_~$Ty32pwoZ=p_x+lg zJGn!|pFX`G=+D=`<_Y$){qIPQZvQ3=Ng&|91;EY81^8cRNMiq--~Yk#GIRb%B#5om zKa6$X@{eei7Jm-q?Cxs+2O}&k0APEt1K1JbhQ#9r{7FBOJhA(ki^w|JJGp8*n^}M* zxW)b;=C4)%<;1_B|4=Obm$t|r-H=?9;O62M`Zw0!oBk&%=)b5uT*80F{7cKc$9}0>TisDOY9WT_K ztcS}*+Ou~f?0DVJ^0j=HHuYu``9V+RSy=Cmv=HB(8P3jyu`4dJ1EBsfk6_6xAQ{{! z7{3x|p3I5KoGWcNP-0VX$$D7qH~X3E!pNzp_0QXdGyiP2uWqlGeu-SUil!RL&@;Sy z^a}gggU4tOgTti$fBqAbB-kY`cFE`0mz=X{&A8hw@qeEE9z(@e(FfYy@{vtd7jug+ z+leBYlTFFHS&r80qd3XJvwxiTf-ONC>h{4!F`k z3CZN?JCRHO&naCx|1?fC0}=x6tX%m|LLN=U{um!%Qo_Uy{Zkn#qol?r!h4<@C~p7B zDLw^y_u~(1iGF{f9)XIs)*a{Ow=G!zC)~3K@aaJi2BXx%^=@4IALRy09`Yj1S<|Ni_Kj zflx*%g>1Fk^TV};33bWcc(J2bp2uSfjbz4N3?H*ZE}^CLO#jhr^!PSnb+LB(HW|lN z8Hql||D!Z;?9nLebcyNLo(mglVuvr!mO}{}3R8{en)lqxaXi~ydh);CJpKJ|7ij$e@FDovW z4cmq^r|>dC?C9-P2U*KdOC;YuzWlcYO|gky z(cCcTym|cMPhxH&+ID8EXn0Qn&Buw2+a;wxK-O6s*?vcT6_S#RF?V!#hjfl(a%8)L zr^J$f(nQYkKuaMo_d7IA75kVrxK4U8_5&aKG#+$4^$~d^_NT$zq`Mx;+cEzwWfND) z>lMOZRp)pp%lgCWGbBL$yxZZyz<*#+1SKkeKh-{8-By?NR&Qzh*NV8aJWQ^KsYqUY zCmJ>O6LYLv!SozgWUg<$yV*a1z0C6K$L^=z`)0t=rB_d6Jf8Cxg>q%!`YCeBCvrK- zFYtzP=?c2WN}?PhRU`$cV&MneQQ-3|+JfE=^o}z8cdACpBcJ{s`}zr7nR7%xC1}t@(d0Ou-3# z$WU=N(HnDpwUXT*y=TKv)4KODP3toyYCq8tVMFuDlwqgV&C<=D=L(Ia$iBsb+hDOPkgFlP-i=-2Z zA8Q~ipVm@h>K3vYwO>q@2e{uf4(k@`@xMM;jdqAoyF%`+w9XiYYVEhXPJzE}4-*2v z&ps3yO~{%4xfj;x92(T&YMrvD>g1DTX!qq?2mC7eh4%Jo>9Dl;3ay0L??K+Z${yNZ zjW9Io`ZkB7^*&SvOrX#gKaGLtdkt-0e22>X;UR$O)^szO0zzpQko%&3k3QE=%%U65 zb0wUt0l9|@BBa4J$Mas(`=wbabB1i*aer z3#Pv|zk5`#etZ2p=MIwmx_ZJHwh7yL2xt+JHb&@O{O(m04XqIbqaW#;V{r5nROAy3 zuIZea#vBMd8D9H^%E=TB>AE>75A;WTsD9eJJ#2Ebt+!$gwd2^d^ca1$)Z`^s?O!f-rl!{)>-a9L>CX^o%KT1udV2vXkXgiEn`Vy=iKn9x4otJ&N)K!12IW6 zbxN(U86QR;+#F^A*goZgG%K%<2BxVBo+ZR~mHwJ~Tm00rBCgzTgUxJ8kEZ!4Bm*uj zVY%Qw{d%ET;^ecHbYczz8mr(aV)OHK5st5Gb8w1* z)`y-1f?}75f-6#-BSsolh*G+oLJChzuu%UC%zzhF`lvsE0* zZ!b0@UHM{OTW`>0=GG!|@xLF^k+2ru=v9OmLI9 zm3WmY{pNlnCxTl8{@lrKODIE*xq8lnlf)ZWx1EKWDSr0DEpG`+S^}3AYBFu;)LbDx z6jH<=$2~b_y+zL}_6Efju$Hf=MkYyC_|VCfJtrlJ;e90nkE8a7>xzy!&r*t^SE`aGPjbDoI84 zR%^uM2=Jk1hphRJGjhGmCUwJse67a=vQ?NG(Y{H6i$9?R11xZC!7jv>66N?m05k|dY;c|zjFowVnooW z$+1_|>M@1_5`_U%y}@{Xw&)AWBS8Hq0yeoL$Fn?q8DP%f$0#kltq60wIGj z)b%?47PLBa%Ki0Md8@=sht&s%p8`vMZnc-&rI944UC@OnHNpKEChPCc9{9tLoopDW z)Gp|o@DOxcsZhV=Zc(3Z9I{H+GpjZ0bKsI^&T$89mJ8T?DpLTTrP-C2Va|ZR;^GesH3< zl;^|Vb-;-DSy&9Xk;<_yZyvebEj0Z4O4WPdTO6Xkb+Y#Q+AVh?NnL^hCz-q;V7)$7 z>>*$$l;9SF%xL-kqBXjOF32iRy;5iSVWCUM)Pmwx)Xw{ zSHnFj93gm)rhNE=gBJF2B9<9a0z;(~`<1m6a2R6}7QTdW&}!{I zo=R}=%y?W6cx*(@4t`p&^xDWO&&2*^!zQiCwfu+O{1{Fg^tLk7AC8T?9sM7L)C9r6 zdbyi}@7n4Zx4OjwYn|5UfC&WP(5byj(v4nk*sUal|Rmy1o% z8sH|oG^V%G5z7U|9A=fBU`kb5+kE%7J;%zgU)>Y@D$!#9@YsZQsZ{Tlk#&iN!gL9 zqNKG6#ORh!UOZ)cQGb(M8hULUtZC0`%NL^<6d3kKnL2nl|?RB6`q<-nn9zSZnA_ zWvm!;8O)PxeYk`td*`+QA8{Xvz(TmVM4)c+ta#B`D){%;fSlh%>S|KFaGKJ$hT+D;lFT4a6pi5U!o$ zD|eaD#|1B60K--7M-F)(m2lbm)kJvmg%0JU%So`xor>=xwKq@e2_ewca9}h#`&`a* zqDU1t+=ca>VIKb*H@>jb84JQQ*s1UOd>{MShnqulZLNgWwyNWynb)?fZhjBV|=#f z#ZW}9{~fCl`6II!(qSd_jwn7Bfc*6>qKrWFDQzhKD!1K_%0~qDwt$c%Ae3(|*SR38 zYf3cW>@IY`e6us8VCS7~C^dVuT~`U6CCz1g3*OO6BppG-Jck_1>+zVJQY{f%XU%ts z()IdUZiu|dh>1@35+6aY%9Qs^2p!Vi-Q$sfP|cWv9pkqCajms}i+b)hbX1V}!CA?HKA{0HN+ubo1ZsgWN?%H%lhp z1Xn}svWE5ZBb$R>ggTmBj;D5%ZHE#{kRK@&h;P6#=8WFxKlcaAYIvu`w@_}*niHt8 z%%Z`LRJ`SUgP_m+9x6DXn`stW&PWn8o&4Zz_HLJbcV7RRI>3UdNJ4Jrg?;Ot+C0^Q z{#3yz@h!he_a@B~GoILX%AF|X>Pwmd$AjYQZWNrE)pauCd{0d0w0G_N5f8IvZxuW` zgTuen2pyw8uqfI*{;+gi6z?gBr-dn%f9RGKg+upF9fQr5w^2PZaP+heSI{cn*{A$b zLog%$b3_JcpIA*OujLI!tK*C}G^kyYj5l1*#Q&S)b&~feUkQ9b+?qAo4J(P#9)zBW*Mj{FtZqR7_vg z24ijzY=DK0m^q`P_U{n9Y_aOpD^tmH}<9kf&5 znYGIXdz9YP>iSbbyumWD-A!~T;54n zQ1ZYAj?SaV3FI7g)&N^VbRA1h^EmvKeV zMjmW&<<&8mL%X>q-b;KE9GxhZys`D%sqBeBH<@hLBgds4CB&lKxFM~Pn+sKvJ)byS z_g#JiAt(`(JD0cGdC&1IlG^o^|9~!$LDp)QR}~=L^TIv)!-nUiZ7(mLq5iwbVZL3b zW6LOL1v5VWPpiCguFTHP=x1ixa*`HIcxk4gcnwGO+9!dAcAA`DS zqHj63!dSGTB)?NzhjWKKdsyPizNf`+3v_Cn>?qljWIu>jWl!D+l(y>=1Y=C=v$2`u zy{GxGs!ZlL*WXa4k=_-AQ>_>?&_5;|PRlF4HQ{ri8TXqM{Y&F+jp2DBZgQLM<$!v< zH{OQD@#GuK&)$RUxM&a&{?0O2S9XTb!SxH@{pM+!!0SV3>cXJ879nVwh}By7d(21% zJ}imGb(zK_w4-lChO?gmQQ52(`jk~+ZcHzYl`z;L^_Kp+=qM{x)8)&tywGsT@*?XX zeJ>krv+(5WYojxJFO7gKF>hD#*8UdCkkjkQukMp>ng+b1UUeyW_3p7N=i!57g1JzN ziwJ>%1aSWP>~oZQ7Cgj`8rBOmPKWyQ1XiL!*M8yl2GL&_6>GVdt$y=?J_<4xhr-K87A%p zRNX8&1mQv(bQDG6fN10OvDA&hWP$FpPi$dwn861xj<+V*loO?i%%Ds}v*B}4&}!^A zt{H(;3D8VGrf`M6;eI!zd?J~Bg=EWKXlKji7{0rLNp7k1=QCi$d;$*ZKoX7-0+C)A z06D#yRFw3S$I33OH9l0nH0mhV^JDRs?^74q`gnQP;|o_WAI}nYD{5SgW>XPe)v*^! z2@2umec4>oXuP7_0OQ9Luiyt(cipZOF4I+n(+q8D_GuSiKIOvTIL0sHok$!3YmJ#L9nfP`S){`q zX`;B5erp8FDxN+@nVpE(ceYW^U!UfYDM}YrwUKVr8S3}oS4R6p2S5< zMUw4fdkU*JMkL)0LLr{Qji(ZfYLsHO72*GSaBjPqeZed`@TiYD5=ww@DO(9`nql8m z6+0f4wTcsl;v0-l>(}Ea-9QrMVA`Aq*D)s7PyHG*Heshl=Xe45O{v#MJOJ#|esm_89*|`epa|Bd9IT(n?KGiC-#8z6 zL#Zynj1&rDeM#`tEKu-k4kh;Z*u8nsllYPZAzPNHlK)v_B{qEDf8STy8liPL_|g&^ z?IG4q>col*ES+cdJ(m6pDFr$e4x5yf;twusB5~GzUz>WakiHNy=So&KmZWt2pzK2Y zPTu1pmGs91Yrmeyho+<)#}Wjbl$wMS+-?=;&{8^;HQ0PtPU%)R##;`KIsV>W39D>s z!ZY`haF9z6Pm;jWjE9MpQlp~xqqIDd?wp@X(T^Br=ilP{nE>Ny13-|+|A~~+h7+iv zIXXcs`S*AfRBV(;)xR+GOij%!E$XW|T%q_FYsGVe45+91T+prKeXvgli&|Ah==$bR z$=>Q_gY|I`e&Ss{(9q%AfwJTp*D;O1f5*eMAj>qtYMte;`Pe;b}B*{2+ExP*-E>mjd40LWSTr{{!mW-~cE&8|VtgM}3 z&F5!jBhdr)LH2rQWqfntj84wquJ|+>&n-3tDOr|ZQurd>5Dm>|i}Uxcq>~84Dz#Wb z<3AL*E%X?EdyRDH)S!e{QpjDrg>plT+B5?!h=?o`<^@!q{6HFysL@t6nPiM+1KuRd zG{w+VVATPFP@zZBP=9@z{hI!K>=Y9~eGWpP8jP-l6jdY!oHs+Y$vNh0%RCJVg+JXQ z{nr(XD%KrwsDK~2^R|zk_TO^tL;eg-9Fp|tVw5{CZHiGoeBhmx#p`qIH{ zNp$TbO)paG4OiLc4ti;2`FFh39U;&0V(Y#(Y_rxP%}3!D(_jhRDOLbq=YT@#y@dl> zHG}E`A6E7l6jVO2WMHit;I$gW7O^jGgl*v|`I)ud+}kM|^~?b(d|I!t`wv2jj>9I4O|`M9o?O9k&qKJjxLLEew0)5vN|8W ztx$tU6p5R4JOS;YHRzk^H}Qrpc_Mw0!7RSaHIJ=EZziQJ9{{5(d+|Et(nHS9L9J(3 zH0*WcPz$S8I##mdutmp)ts)GrZ{H1Ro7)mH4@zJtng)ljJqB^GC^`9hL5_yuNi=So zPaVugvT#h1fgyac!3=)3*zFPvcE4ry5#0l9)x$0n+N|HTO&c7AiHU08&b0Om-^#zw zW6oaNWO=1dS8!`MQFt{&RpWeja~3&qG%(x*dlSNxHRXYpF#g(MQH9X9x4fACjLT(~ zc7vj-b*Hm+2R4Al$?9g7;M~OKH_4t9KR#YtQL5&qj~FOg>lV;ANCnJKnr z9rKR~?S$tK`FkZ@nxX++Y2GDVSsDyGFI7 z-@wB@KeDS>qJ3P&!C&suMhlAX$~Z7%xm&F zzwXNEaBpCX2b!?j}l9+E848A>xCJo2#xmCq_yR0TO(cC zx-36;!KU2QWS9E<@n&u7je|Z-U*k7| z`9h}?DjpqZLN5MuzdqCZa2EU8^kAiyMI8TB?*gWc{J=QjZRNwG&n@!iijv)-vwkh- zQW=%4U>{&L^28lU6cD+z#QUYf0oQ7C-pEs*=>~z|dTTvO?OzZq;vyB4>2@SFA8s>0 zsxhDyZ99AL-UxB*$dh2x=$m!FzD(#eluVL1MS6w^>ySAC7)Pt^tQ_O-*nfCiEB*+) zI}2%lX$o%BQL*4Y%pdi3#LaT7Ljj0uvE_Hf@Oz6#=;-SOqd zy~9_nh}xK>6Tz_%NzCXl<*9SN#ML92L%Gy59`YVt?`!tkkIG)A!d7GAwg(S6SWUCS z=|RcBSF3*zNq2i}+wQ-+a}a>`04zw(U0S&|La;=+90-#l-R zUy$+HWu)GDNdW>#X&{|&Gi&=$&Be)m&>kd~;%%W@I7f8Eadx=;doEVoO80LLuc|%~ zFO?B2uVxL5OD8my_~r6(Odv=(D!K)}$*95f&7K>Md*rY;FcEBI6C{IS9dmtOZP|bu z??U6t`kef4tGz}irpRQa9x8|G z_w#Q`zsS_fx9oZfCe!$nun$Ucm)PvS%(*)3q1%_2mv`l_j_P@=g!wd$q2THIhvmU) zjaMuakG?7?h_DA1RV5@D=@!jK3p7>WWdcxH*03XiE+wZ46Puv@22Zvdy6a`E6ACN4 z4{s}r9;b`Amt1`>miQ)R9nUvkh)b)JIe44nF=x9MMy%$nXXGN+7UT7Cj5C0UIuENA z?2bxfGkW-usHcjlocl{Cfk>}IMLQ-#f*s1|q@AuvL91c}eU(oLEX0ADm2DZhXIuHb zm-nlCyf2qItjgdRt4?I#LVe!;JT1-?h^Cj^leU*D9*XK6A0yp?Oe+{ediVWNsdm0j zqkrPgMnnz|t@kB`p6P$ri&e|}j{4DHVYm!tS*?g9t7d(ys|zD=@tboG`o9vj^`C5;t- z8xucqpnNv#VT@zBqeHg>Z|gm>nYjvBrHV`LrXn3qX7Yo^xee8HUY4qe2 z*2Qicuo)enQ;$YaIqFL?eTyCc^vE{WWto!XX*`4-w?O{(rAc>2VVnI&v%|0b!Na&! z9Zh;KJTI(?Xz#+NN0y>*Jp z3B0{918U>HJ^BQ8d=2Hpy(ZrO*E0ADfh^|V2}fB}{vL8wwji#`n5 z@Pr&FpT|qOD!w4v{V1$0l=zEFEoG#Wm{vQ7CcyP0jd8TWu z=j%x>4vTfa)%w4^P&pi@fi_Cb;J1ijA z9I*D6+TrEOS>6r;SKq3))cJ`JOBNK=yG$92R3b$JSE%O0U6GAWZi~litdxpuSV>g2!GjV*;My!Pj`{Y(Cvb z<5HGgzmW-4-UzYHy!ZUL278F zi_aG9d=8IOpVbb?Bi)(ttvWp|yOcTG(HWy?vLV&xu`K2ikPV>{0fQ5=EpAfeM*^w_3itrmYe*Ibs#(`b5iT;NV)!4wx@oHy>Rcud zL!*OUkm~nM<;l%|m~}9sr6HaUNtLH*rxIwlBsngva6pW==kS1)@;qKLj(k~c=Orxq zf`Ckzh?#hAKv!ZUrY?vtmq(-q)I@i`tB$FRQ})NV#3GZB=)QEB%H?e2=@|O}N{MiA zZCrZM8ONwIb>xDHen%a;o{Tf_4xI9%vl}1m^E<5;&U>!Q2T;1Pk9C18Q2p)W#}re3 zvEkc){iKaLkS8-}S|tOYi+~G?ZQBu@LtXHS+KLhS=J={sbckF-VJOMniOC&_RZqP5 z>5LLv;Nj~US?T(sU^eAgaMkGdMb+#=^+U;6Pkx^Faex%ASA!rN2xfcG(m-Rl=moDa z`Q~#DobF`RS*jn1mtuK>G*SY-@)7a7Gcdw6$mpN_Ye=g{!96=1To8=V@aIIVPMp}&BVo=HQNAM9V+R~6#H+{c%H zU^|@kC1Ez{26Hs6%*^2;QadPNhQHLhVmU z;KQaQtJ!|BqVzM03+KU~ReS`@lHlcK;qKc{tETFVBYbllG!0lLz>hmsBNApNy!$Dq zWh0A{15SKAg8mw*bd4!aGv)B zwmct#*fI!0fg<&DZ-mqohFa6Oz6q~o3Iy3IrsB!0 z9B1in)HcfGnj9sY0AK^ zUR7YWtNP%vv5t~R1zf8*UoKQHR7a_*u+1TWo=|6Uj2Yx*Xj=$H!}TJQ2&|2V?V*mgk z`C7`kP~{XIXYFSl1>hV!5HNUHks!Xtc|ES}SgGi?FbFDWwT7a$bWttY(+*%UTftRU zbcV+cKWYajaj>YQ_=<57OUlyu7|o$2g&R+CmF$0}I=8eVQS+*R7Vk(^9Q<^yKd0B~ z(@Y68Qx$omo>DkFaK3Ig9GBY}uF^3Q!fdnEgw*-UTsyf?2M3YBZY@Xq2S)WtPKh59 zP}1I!A>)8*p1a?sF*Dm}oBG!^C)FEde-Y=LzdU~mEp*&e*4mvI^*G*I*PdBsCt+Mm z=d;zCX$6M+SQ_11Eiww-iFaux2rUZI*!C(9PM z+UnH(WLDQ7ir0sV_Ppc)qWhL1YzV=tfMKvjj zzzj>PUncOeZ)2V32fQ8Ofpt(D=gHC11D2BoI|fj0h@Mk-6)OrTpBC!Pv6ZMpi@+k@ zwozC|&rHC%ekmr#216Z;f+r&LVPM9gjyO5V3Nt1+GE0(#3(eE4+?U8`^;7^NL}PWg~Kd;PX%09wHMynFOV-8K3*ch$ zt(qS@OoBbFcN;FP;N`xDj%ds`)qMgkDXSF16Bp# zM=T^8+L-vdR-o|&TTSCU&%P&jz@H$V3VV~?;{0RFRO)El*JGSY<=ol*(wO31rS6n* zw!jlk@o~o}$yxh!S}$&v{2EV5Q<8aXHiD1ZZ1r*px_C(M*gI&BE@kK|g;S5;LxPQ0 z`>m4es$2PGV#_fO?=h1a%F@^xGAh{tq=)yOvKu?C6byZCe9C=YGJzeFk33x?VTQ@J^%yi)ekqH@&(qE!Gd|yD15_nnfe>F^Z)Gayx%l0j}g0ra$32vLlr! z&%voYnKqF$4fjjo{7EvWG{TCHkR@w`2gHcDKP#Z+=tCfNf4JjMild2X~BowhH$c=`P-0!2to9fVE>^ z;l&qNy@rquf1lgk`pp~9JrnWytl#kBA1;yNYsMGR!h7&dzfX$8H(O4`3zE0|iyRHT z*PvvptsXe;2!b}Cp3iR3&2^T@G>S{eoH#}8*v3<5^7K*b3@lUEoBlRW`AVf!&OER% zeS@>*+@6xJjOuFiqy00w(Y&|ZeH|u};Y8hd(XR*w{P6t|W~pzgScd}IP^qL-rvyUm zN5S+g_|fri3@#EqE|9l=qgp{W-$(vh^M1dFXdJ-TWrzf&vF27;?`?^L7ZZ8pBqCt5 z@DxrS8VomRe*$jY%t3#@v>ydK%{ye0w8*>U9E=+^zA!3$(iY+bHdaPIHqJDc1B$D= zYLz--z-|CpPS_Tygwkd(7AS;%UOSM4$hG$xXeV&NW4PTLf($#M!-O{A z_D{MUSynzaw>24lb28Tf)fae3?>JqQg;wQ8QNwpVCGxM9;mXx?*NU0S8$={@}Rt;&(8Xr*3@jB=cpyNWdz|DkX@vZ1a zvL6~H>y6oakg3+B9F(0|nZ=w-6D|sqP&W4cdM2nWBK(Ym*>F&~6y$XtYTWd(3REZk zJ4y8^UCw7QWL7~(uqjM4CL(UX;p)z~l{Rw>{p{x@@yX537_4f6=t_LeW6mn#LtUDr z-6|;HEOmdqiYYMDWcaRkpY$XYU&F@9tt)Ab!ne&#Ia4-Nwg?#|l#7L-^uq9EbTRN@Qo(g7dtzp9Aw*TH#L`1LSf#RvcyJu3c{= z;jmA<)bWA(ed*XdOqD=-DP;JXH}f>*^ewX_{2MF`DaC?=3qzml&7Q_HsW*SbAYCWM zT;gm%G9oaOns%+dJ>3J$RZSX$i?}BYGdtq zk-TP56f>fLI6s1WOCN|v&bRfcs+e!!Ad8t3*4F9S@;l3?yPsH+fXyhkr|jo_CY+5S zLcY#<+AY&VcVx$ zX~_>{cgAA=+vJ=g7i9!#Yogo*SbNPk9Dq7DwX4*5a4Ln_X~1br0O^t^LR_>U%P%lz z?IvK2aMjQmwaDZu9}`kbeL{`Tug-uc#c^pAI;e4z4z0$Lw3Z`NbmPm-mOn&uYcpDMZbJgB@~F3g|35#}wFG{7P@c_u^l6!9MBW~-P< zVI3oluHw}0+pNz|2&FgFA~FOVGAyR%o+g!yRUP%SMS`zV82jK%Lv-2#Dx2EYX!^^H zY9B350dJP-uAg*otMw2xJA<~+4Q2?jI7k)%@qQiYt|1Y;`$nTRZRnJv7AB%Jl$jU{ zQlI+hDD{)cbcMLuKOg1@;`a@qnhR}l0kVKAc_SFZuq~k3)q)9_(eL)WN792i$In$C z2B0X!4d`i!uJ@+#3$!2&Tn(!?dw9zO_^>NcbLQqaLX+*L%&{i|tjj2|1f@(daqfEku-ab?cC; z)cA8G-?DvQRlnT$7)mSC4XoPc*JyWT4H1GtbeA9BJaxnU-P*vgP)-Dg{ghYf^>Pa` zop!3#M_wd!CjwS5VoZ@0p!mEJ_!y%~ghH1!M^olhc#W$`4aUX0_Mxd@rC@WJ=q8wy zEOP2|fm57j@(-B=rC&(*`9q$u3MrE#6BZdPLS3{6zP}8YC{JZeC$y8TBA>BcQGnV) z!TXS7TkKpmT;|NS2Ui@8ft57s2WsI7RjYIc%fST5DeyxV~r+AyzzZ5=eTz|^q z?HRco$y)zm5tvDiiPf!skR>ar|Lz;bvl~-l0}|$X!{3!|2uM_3gjVrPxr zAxVJ9L&mzc1o}3SVdS-dOb)t#$=9l6nugx8Np-nh;RK@_>J%}zb_}uyqE+28-igwP zv*vyO6P}Ws!`_a04fkVR7ia7bJT#uAD$E8t^g7S_*FizU#PX2Oc(%u8gXb@9fYsmo zHqXxMxy6p_-bpi_O;Hqa51nUKlaICj9u^H1^kGYCab9T|lc&PSV8`tOZAm=()j?<3 z=3Muu4f5qOT>_LtyMXbmQd8PO(rMs4M|OwWay)et;!Dlt*C4u=rir;{!IW` z>+&FKCUX`fv2ioo7j6E{a!RThq{8_&*w<|V7ZC53bRBhZwR4;)x^6MC04qQBeJ8BB zbT-$g1vzkOTJs_dXqi0dX;pKc$e|)j*-N<1*ab9vK(q%r!J}nPrIL$x$fkrb{ z?&_>%i^v7xwpdV(Vo{}d@|tRPN9kD|>kg;nO_P&JxZssM`P@mlb#g=lYQvrHQY2h~ zFB2YDc+PR?2JW&FHo}ND6jznXy%E*8%9O{#J}xOh(Uyjr5B9MSWq^%lgj4#A#NLNN z=mglrW+@wXwTICYR3-5e(LL|Cbhvc54a$bOt7E9uNZ4{0s;pkV#|YiC{0_1{mPUT_aw4BB;u6T4g6e3YwhIm^J^z6$A5Bt=DkoUFm zWn`YfX>NSW`R)_Iul<9kpl_>E`ykt6o=nUVp@i^}pIP@F*d+!bhR7pz;q*_UeiU1G z33Te4=3jk%F1>2|dsRHoZ%69Rng^Wf&Ky%Dof8No;Gfk+>b&Lbyt)(4Tmpc13AYnI znZ%-(w&MHgoead*pN}U7jR;PCNp&tbIjh*yiTrC?w`LP1s$ZsF(tY5xp2l@6K9a*q zl{T^Eq;6;?Jk;NX_xH1Ug+KSsLmocz{ReZ#iQ9p41QmhEe0{V~s4v`!G-CNY&-)j_$-$`Z2A=TvhMw&&8CJF}P22rSB7{n;nx>1s-}E zZ}f#QVC_2~-6wo3!VJ(5te%CZzolg{Qd6jb;0O7osJOVd787B#6bj6=Y{YQ05}y=y z$%{Vq!BalPY-FHp*X&8WlGGN$7)ZPIkv)t3@Usvf6~P^BgWY95T(hu!Ik|<>EIeTx z%AvVZdZgEYqy019(WO5Wd|vEEvfs+ysaIOJ?S~TsT#3F^4)CuT9yjhH=G#J~QdF3- z;eg$Ag({A9Y62=ef5)B3qgHN@WUbnE%16(%tY*N@Yk1#&a;7EH>|#b6Sd7I z8N!P7Sfa{*%f@V6vx{36Z4W+s6_u;E5n54&RNAnZMua@CG<*ef?aFT0;Qixq2 zbk^exdesM9|A=m3l{K4Y&4jj&o9V>Ma}eNJ*oRsVOX{EvK5G7*wU5Vb(VSe!0n{fQ zLIem>pO4lBd9vNEP#N_S-)E%%%E~8a!=3E{#A#A;kLoeKPH8zW?);4I9eqHU&{eS3 zM@ndysk`T_2VyYlHy>q}Kz}!P=a?0b7#r(3%*JvHFIFiE2GIP>8&k2mkdEX-2))sO zN7sy3v{;Z)#?~SKr?GJFoETmYa^egC?8}QT(Nd}>sofe0E(HEYrr%pNChVV<&Aat% z{^(K+0JQ9{U)gVW#uf=tws>z}%j@5P`OY?bW>42Ti4rE!gsCq(vTbx$E?=7nzbqAF zG0caQ)VrG_Fy<}fTXBkEK_n0TcEddF6kf|Nj?-&t&Oa_6{Jt$^scgIw!?%j6qyj|6UpO-dj#S|I&dwv8Q8lP@ioRx5M1 zAhWbb2^9>8pJ)pTj}c)w+}D+0`(1JOWH!w9Js-5aFLxB|9s*=pE?%lP6cTx1q${#g z0D3UqG14E58?VOWVH7@L|FK2XK3uX%CMKqN6%W`85PNdodF!V;y8e)@SSge#g7LQ% zeOR+DB{vOazHXKxgArc=JyqO<(;55Cufd1Tx!jK6>3sFh>@OJJ7j`|3Cr*hJc;xSX zzVx?Z`F}K>g##ebzAaXj9<)li(0UH_iZ^~J;{Po;PQ7B z@pH*^Q^QxF1qbBX0%O%RrwStm3m-8X+ADJl$izjsiZZSSDxn76W7~v1fZ_kcF3kI*h$=sSr_qY*){`C{g$~TD&{DEw z%biwNucQMsF#fNR!ib5n~*_hjzx;)X+-9pMQ%$K5$GXk5y5rw?Hs->$f|ErIS1UkQ+2Z zuTy8PLb62e=`wr(-por4g?VYWD&&TJe|-EjFb-IL0E5N%G1PplOjv2=G&~e5Vl$bsY|(UK+3#N4*4#$HNMI;zWtdT6&qd zzkcUE9Y$KP1mHLSi)mkvoe=XsoivLePHbVly*3Izzo;(MxOG_=@xBc>vJL9osPQ}V z=<>8U*s?u(nZ>bv_1v>Ai_zobptiPt_Tx3u`Y)KY2C?xQc9$n^=Sy&rEis-Z8C zJ&Mzv^gGS@{iB>R<13S)0ot@Z|Amsw#Wv~L&e8d&|IZO36v(R9_R;HjJwuA1BZyq(6yvsm#gpd2u6NvL zv1a}O5#EOo1RZ7hJ`kr-?piEblcnNx*t4Q^N_F8nsTbtNrUBeByBCl9da{FoW9GD^ z`S#NBEYTHio+KOqzv-6tiewsYOsm!J{SRVrB&QJnEE%$MQY%u$~1qtt39&4d1Z_U1hfIs z8S`8CNhNHmohn7gft|YTs@13aPM}rl;#5rLTgx^-ok3D2-{ZVZf~ZG7LNlnRa8OH= zPe|&cyrD1N1XffP#8FL3Xlw)>hH_KE9tisra#0p*%u<&Qmt=y=29O%5rB-Uz>V=Ghr&rZ@d#wJWVxqHXHQf?T@7)l%h{#)*EH5uR&`{SW~m z|Mz*IlC&j_X(h#}8{K(o5);>*vAr47D_n>3AEfK4-t4$|^)KQ%#cnwd8ioWq-!RkQ zh7db~2+n4j;hyBt#+$Pl`P`1zyq2;Fp8C6mQP_MS>FcgnFEnUIUPhxse!S_I;N_>ldE?R-G>OIG>!DdoN=iJ@CS`)GB!m%{bxoD*sAqFRt4Jgea6j5 zL!eZ}%DqMUfG18aWuuc*?C|m6s)H1DoC4-O1gH`)EtM@*2!|ZMcWlVm+Qg>79k;~i zB0%xuy!`f>DOV%2M&zcoty#^9qP`PTeh@jetEl7DDA(NHW5%G&2*0IEg?We*H77c_%|sNEgHY@$<<{;_oe@__#Qo@ zFcD|GtMXZ1xEDANRm^3Z6~$|>EB0l1G$W<0_=OE*(Q-?=vdnlNmV&@xG@n?qhq>~! zYfshm{PMHO08?cpGV}W~C0L`7Wy{|z82#x_4A-F|nUeW(yI#@tp&qWwf|E`Fv>?za z>7&_`KG3|1G0lIu2Ns=8cr%Qv~_1tZ?Z;;(WK!cMeEL^Wwwr==+ zYyMCSem%DbC2^LpZuK1y%1ShUfAnB4UpsgE)$B+NLo=x_xgxh~u0UYgM{zXzKOW0b zQ|;WIXz6P!6JIjh(dATOZp2d%cki#2Ag*>98q_Kyyw&)r@IeG37YBZwyoLg49OcsR zY_Z}_hQ9Ihb=@S?Ic~6K)x6d)9g(5-D}_NA5Gou)2R;1(4MZ&-KyTjZ_q^NZ!?Bh( zOl|}1;qg{KJK@ng*$J5I9kJgxe~0RayiRG)FXOI>RvRMxEuVyD4!47Q$P)Z+)-iH^ z-M2u3)tZzB#tIZWxTMXp)R+cS4kI7_vK?N^s1PC?8OA!r{8R?Rs7{pw9p2FZPp+ZY zI3v#@;u!I$cpxkzITX?mkJrG_wHyC}&SQ2?fi*<}2dEa6W?d_im$8Fg=`wY2JXZwpMQnDal9czw@* z170CcWNu+!--I|wo;s3nF?Lz`JVIERSSiXKcPybLxgxedQ@O5bVKCee&t`g? ziR^+2dFal-)0Ly!hy;zrEkFl#Fup+RyoQ!ksJJ*~j@>%b#jZXA?M=2AobNiU%vPul zeGNPio%6(CH#r{^vP&m-7hE3QCY6Z|L0FWo#czL>+y;FV`V3WTwhvVhU({%#c#~-9Fi)k7@4DeS_#+%zhI!^YXXp>e6tS}%w^e< zrbFV0ukj79lPi8=@hus~>Tq2Lj|TmtBVDA(p5SD%u}hU)Al2g#W@hG-zV#~Di<=P&*MzZTh0wj zV-rff=9Ec(-q8AUPaNquTT6`V%im?raNcHKf@g1OR))u4FJ)9aCSKf2+ zrQSvQ`RSHKWVL=T`Ng;2nX(-A*XGiC9#B%8wI{q=8Jq49zxVawb>dBanosEZR%(l^ z9($K8kO?|R8&}`eE6gt3N{{d~B_;&Tdy_0jr?x`VRs`#5*v+`&As67d3Fua~h61Hk zI?uESC!skhtO~CbFonFz^vb(LmlS5~A5;E}4MUs;!dgO{LZ;_O?VycMjNKG+!GCiV zTsswq**x^7@vdbPFi%~lvrbBU}lxIg;!2};k`1zgZhJ$R`lwFk&GazceDao@6SFgKl-7>*FRZi zOvSo5V9vKcHZ_ z18V324Mh#QKU-Nio~8)n_1D94U&E+Ug9|ifb?8229oe#BUl6FJE8n#2+R=6|GK7PT zGY!8RnHiwDH$Q!=I69YeOE9uRso;L%fcCIl{*jyegtA!D7xA41PvQyJ(ois}k|d3Y z2mUp3->Z^CTyv*x?$xY>n=V7F^m0b*Dis4oFT)B`u1#ntctI@S0C^2T9=|?*#Os22 zeZ?0TKTbsa^83g`+c>Jk%}l|fg4cEwhIKVd-|5>#`z{(S6`tx9XeC;Gkjq<0A8Iw8 z?(3-!$Z{xR3#2-wv-;u98P3Vz^l;xg)g*+lB#&wOs9RP+vSNYPI%+|jXXzxLD_2z$pVeFcB0~DnoR6yVIcmz>ROa*G z;~r)g-Ln`5`n0o0?9MYbH?cXxoKrv8C2f5SC@$}!TNSpvfwZv95^(ssUyP4 zP7B}qg>#%a0=)rTD(*3@wBbLm#$Vcue}NZ=@7dqzHaYoF2_w!q zQ8CbK+NP|%EA%bOb!_exTxLmRW;eTxdZC>Rbn$D$&&?X0%b@*@X(A=zdUU5*?MsN- z>6$j4R*~1os&QqG)YZhPZpy0S$F8B*OS>!}Z86n`^z37K*VJ=Ph8aDYp6^XCy05i; z=Vf0N1l~(Ra=<>n(O`DHf?Hp0N|3c;45dfxi3x}MC#sS>X5nP@O^R$C5hH6>aOHRa zD{eT!D8u)bg|E~FTSWWLwl-JZ z@C}x^{cWUeqeAIc)01JS?9~*B`XHa(gkX){mbXgir zk4D7r?MP|l-g}Y~8)2vI(Hgzo_)QE(KN``cc_~I&w=@5Qz1HjCX^aPoki@k?@iS%T z>(;Rw(}FD3f3!18$F06u^0s?Vr3QzV?{@OP?hi$1BFL#(G-FiCJBI01g@yq9)3l3%$uE0`ZcPTsTV4)aWZbbqE@oUuEhaR&^1z{ww2cGqnr9)rF}egFAEnzUzC zXZ)$q=R1Khsnhx(+tEyiwr$^wEerU6Gq1f944snno#!0?NB$YJ&#QXscOG&KQuU{O z2%$A&!#^E<fpT%ol)Xr|MPiT}@A{$`LL{ zW=#$cBA?WT^GD7Ml)iyg-6%183O|Ht;nx=56&4ve z!b}V5>(nJspxaJ_KF5;cB{41hwAw_A3_Y!2CWmK`kGRat%u|`a%M#GgH~rY`AgQ-AJRSo6^ov!?y|w6clTfK~l(bP@R4>0wiq8nqbh;n=D!)m){-G zQ!%1~g0aFV#x&(Zz~Qmd+AqH|B!-)I+d&zzbzT=dN=+&`m5n)5w{FP^Ud|wx%X-@a)I!8QJd7HL}=o_mO723t? z-3tTfLD6`Go&J@=dH4XlZmJ12^xlp1s}93fq@l%?W=-?gxT$?YX7A}e$4S97QDcpP znPM6ATc_{ltVJcJ`RfTyr`fX4WE2g3(&0gt_?JL~({d2o)c{v%J94Z>vRv(OX5sei zfw7s~5X6-#ZAS1dBg( z6k_h*0sVBwzn7dg0i>`AF06~7+y>`mhw@o%V_8eZm}1g+k;sH0!6j(HxLS^&F#SrV zJ6$BTu}8U?qPkExRpLuhh@)L>c8>(3dCIH7VOHkPooZlLH4mW|Z`~U7vmY^z!2jm= zb3Cx(cChCi3~rX~ziWkv538(IpfzvicO)1iGyzVLDfnRn#R_R-#lobwhFzD7^J=eZ zt@o{CN;1C{f*rYl0Keq3av>+2U}#=}?F<+rm|f0KmW13r@V_nGl-?4MCP7=-Th`W- z?VRqD>uP&qLgd(wBL~S*IbwYt56^~ImJRSzj=fx7UIa=KNS&=4f9<3s)Ivr3xrGWZ zdjA{OA+@6D`+QQqc1<<-q@@-9&do=*oq5U7k#Qu_nyu6%!se4bS|#^myc53g)zPXe zWUd0Oc+okn*dxJug5$?M4Qs1h*x#fkg34u0c}%?vwHh%>*knB?k=T7)?OkB7Ey`W6 z3Qw1~6vQKd#g7~gQqsSL9=<`*KN8B-Mm@rkkF|zf*oBrxT@`G`Fje+85a|Jt2C1dF z%ram0N&wGtlD+~Fc1$MVtNyi4<)x`=`6L{k zi&r^1tBh`95c)iWcw;iRzh9s8!BrSs7JcN-K3<2#XBjct9xpr0VMnOhBd?C%+r}F! zYBo>9!4Z3#Fdlie2;o?&+m)M7zJ4;7q53wRN&6SnU03#RU|o4e%QdNKaY~cN?O2{| zCE5+;rxHlFD|x{4%HCa7MSBt_Lf5oGR>Pivb~Sf*dvFKRnB|Md)l(%b-6pEAM*7GQ z-d-Gsk$h%zB>XuXbxoAEtp&Zt9l<9*E!cyi`yj`WH~{2@+6!_TG8{E~D&CVIcK!dW zK7xW;MUu34(nUkLK#A#r%d-uJh{D-xjtld8KaRTm@lUou>JKl<|EmZ=JJ}~dB0E~r zqadP6A~B1U)8f~;D7K)CL`4TE)Z}3_*hf&7Rn@QB?)Ck z#CXxI{64lLN?0?j{^cGorqI@dQ~4gNzrg7iKI9(dGxNE$u`QkGz+gG|6H}dn@o{8x zUb<@nl9F^d%eSP$^qIu3jEwB7V^k#TphR@m3(w+|vTB%%KRYoC+Tyd6-V&ZMAQNZJ z05u`(h>Nf3E0WVwNGW)UzI~AR{){N!ev{+gM_Z5fqNYbfdzLOep0)gLM@fy8pB&}{ zkRH=KB0+;xFdTIO!@U=;?!ssVLH?lUDA&C5wL*{XZ%m9903Igt8`BlCcv^J0eV_K} zn}mDd2ZQlk>shg@j@L4G6rgbw2tQwrun$?g66>o_aOA>{ZPOQwwP@;l=uc^5Cyfk^ zF@{3?$q|zeCN%w?MMue5$ARNTeEWa3%7txjk`{zLRh7WC-TZmHq$G3s&V{O}BkL?C z1i3b`#jE$Lb>hnlj>8qtqS|eDazokJ5!;>q$8aOgwrB3(li)$qSHD8ID>}s2q~oe zXlUPVMyYXa!r7y%USGy31Rvom|rv1L)GZq<4@-PNFs*O}bSeUrh z-}B#9VX_e#`6N#(munX`pK{m;K;jCn%T~!QH!X{+{@NdSY)G^_$V^3M7o}QG#ePhE zpTFt+GEC~VSRoOI9%sr_p&l&9&(31=9{pz$`pXV%`C8SUU$CHk)St0gA9UmiTqGx& z^O>k;6~=sdCvfPkACnYmg9I82%zb&czEZsbYcvS`I9eBNo~o3a2#2q}mO-3d2s07y z-NPBbx;!Ci!Zgy(?`@v#*l}|C|E5F^uVk8L^3m#!*eV8+eM#X&S(pZ6f|!g+hPRQ= zbWK%-&tS$1E?X3EptX!AcR3}p6c$dQih;4FuIgc&d6t+rbVBlCQDrzZzceyoHSxyDDsm@E6F0sbwn z-8H&~#xCuj(f6F?Owq&dN}lBN?-NvV^_@+N<;z@uw-JJdS6(;&QMg%tE(&BQ=%Z35 z@lNBE)?~Pyr)~ih=@XLTs%Y>fnMT7{TDAv$pKZG4oKjGKksIy#|`0cztJVEQUHgPoylE$@55}L0llwF0)hZ5g)HO^ZBNVBJW8jw z07=Ls`s_ZT3vwgnQ}j*`GSfN)z|`fm2LkSkKExH)W&LUdR|Zh40P=;U><(rZKPqb1 z_qk8>x5^%V=E-WKcd7pT1%*Br99m(RHz1op&HDf*X`4s-8trT405oT2BV{an@T| zm3#8bB7o*!Ae6~d-pvQk3`kYHyHbS3RTax8Ou?#!1PbE=rQKMWt}4a99Ngn$V<Ic0M4t3sn9tK3ue;{bW24|?z z^$C;*6x5^jw^R2^4JCC6>dV$3VQ3*^){<%Nx_%pYHEGGQQ%3vY=-xx#3;qo5?2!$6 zAtSG5$MICpsc74k-wmsOjTgM_hwNVF@U;t6_M$WG}PHJpV%Bwe6%blKxoD*=oVwPIoE#72qsiT1<$K=M3rva5rUQeZ2`&y$J^(i9z>QDouQmEaa(X5J` z9seF>oLh5qDWNNn{@E&~hu|zTza4Ug&xKRb6LaW~swA^~);#!$0H0`zdFyz`_|A>y z1Gdbx0F|q5-GB1cG7LZw8%v6C+OO!lPqAEF?`aZY>{A)l02BVNre+HIT_lYFx{rmS zD7%eVh6|b=M8wSjS$Y>Y60&j6l{SS;K4WyDX4Lo#-oOr}OC6oyXr%MzJLdh_5rzyI zMn4G@p8VLF_KcxoWg@InIRep=67o7m?uACjdRfyw=|9W4enNrysTTIk4+Hk*T$OaU%FF{1kbO9<|p{XSXJHrf%mmuZhhJKdE)EfzIWPi z<(=Hjf7vTF_yjL>)lAVP-3)}30qk|(royrlw49*Iw_}~aK;Qi1gr06ZAVDkDmkOp( zOB{|zyN~pCce=(Xy0apon4Tw!et6s)xBYNw^66I<$=pZ!0c6enT7Hj&lb7Z=y{Npu zn8w9I3Um)s*$j91+X(8-1z#UPwoFvT_CXQ7ps;5R!MNKdK;F+#Ve?gpJhau2Y z>J>;O{4!?AK`Z5p$$tTqg3+upcUi|nNkV`%kb8Kyxe+rPw86X8HKd=MOE=v9A^(K) zP|$?=cAq*f@;2i(#=UA{@Hp^9pe0M=WvDqE$DroLNj|+J{|hg(US%T)*Ju-qaW7w2 zYhlL!&`@2tyQm(v<5+qFu{f;Df$b8>js$h!vclg@%NQF(r7>BtjB~5pH!2{DWjJl> zCn7sV5ct1ofT70(%@Ck#BE*lb4)yvP9X0gr*xF`8Pg!{mvX*3W^Nj;8C!qB(ylp&~ z5B(5F1+%PfpM^(ctz_KQDq8-o$T3G-jv4vEn4K5{&VI-UVh}b*p!v7UMBGgMxeJS{ z^=NKN(1*$)2+VE|fI2^U8nVh0!>;?a7&Qp8HJ`tQZ{*dq7>alCB@WO2_!spGEq|yA zJ(@f45qTU{kI1xT z)>9=TkH&b(`t4nb-+!VV=Aa3@TTRaG&qYlu?yQWOyE)dz3Lt{nJ{Lo0&opc%%7 z354hj>Fbt_&4a8VS1~Ns-N?F|M6>X(z|25Dxo2LRuMfJ&!ncz%9GM(ovyt2I^L##( zUATzx;?2JSIb6oo{|TGUagDGs@}Ya6eRl}(j*Q;$?Oo0PeM0rOopJkMQl*M}ky_}-!!hwEE5f1J;5#IYo7 zMcem|eBg7Z8$Iwe!XajCa#zM`_0)Soei%sM!B|K?zz$qpcNAUXUJ_|^IW2@$x~G0O zr)KWqb2nkXlV`rvYP9~4SmA6P){xh}h93PKN@`QWS?wc|1O8WkDnCP?3qo@mj^yqQ zP=zhSeo-oAA^vpB+HQ>rJ{n1wBlA;wGB6W zcBCRL?vx~T=F2Y3qFb?1q`NeECONT#N=7>Ddkt1#va~S^;72vguR2Rwq4mQ)gSrHG z<&&bw+emTHm_)I=@8cSodG>^FZtC>X2Rhk*e`vK@>(5nP5>wjxq{-@o3HE(0218u? z+z)2N&Vxx$$?6Xo!{-yfEwhV(xn^S75OSy`?Ul^~+OaVeU0V`cg9ki?M|spS9+PF- z;(+K%A>Zdv|GC5D;zD-byrD*WGev!56!-9`T5uaYZu~)&?tS@PTbjfwkbwdfHm+JU zEbjD``6K_F2xV5R16L4-{>*%je3f{wOfCsi!q8)Pq1)vYN*Pf?i5FhcI&1V!vR-$` z3C#>R%@=b8YFOmi-L7~=>5GP5kVLCCn7MgJu=&s?o;&gDt+`;9GNp6S%c2xRqX=omPqlF!V@it||Gm5^WV^PiioYyhN6nn#T>kOYxbXm9 zJLR#*>BI;u7*w@N0an2yjd+^`sz(%z?iN*IdEamPg*~>+54k786hjCi?g8H(nQxNR zC3WW%5)Ld-2{W92tukUqRsT_XVXEve)gJ-5l7>k321H+wGpB?GGDmxuIN6E=xk{bW zfbu>CtYSxx3D5foB9hDx2c(5@5-z+|ukKBFT7Ursny;mGDkk@G)sNdTg#QD=QC&x2 zQ0e-7PxLjfYmF*tu+BO!6Agv=8-@fO@8z%xUTH$PTNsA5L-(yFA&n}5$a(TmpEDNdwsVMW3Q@_w!&NQRG~lNTqe`7LnP`BatSj^-HIj5 zc$PH!^-OiJaXHRmF5^ng*`2Yek~t-ls2f6ClZjfWyS80@AW7r$ad;E(o(VU!iAHOQ z!j4xxbFH)cKP7m7e6zCAVD;~rM^-8qU!UG0+-vckEkcao`2Cejx&4;6 zy)td#4UWM22;^A;e+tO)Q{tZwKiQznKR2$U@3FJt1+`Gi@`GXkjo_{(3D2dHu`%9(7Lw9LATXf}_g6U2W7zlOu2G z)+~wiPZ{aih(X&>iQXb#A5o2Zi*ZuygcRMO&RuB@*mq1pu=l1N08aWx`Fzrt?EGrs zPCC}E!r0L|WH@-`2eU>AL`mk>GcqkIAVeF(>~Yw7IHj}{YuM}+-*K1qBAtBis$*Zb z+5e8`bHggc8zsXqfc$B33M6*@qBc2u>zQFcyi zP9i3LZfvR<5H9BKYrWDpTbjut6%r03H;*}mE>wPOS3pF_Hij{^R|XrJ0`Wl&=^|u9 z*InpLfQVw|W8*&QU&SiLAoS-b&EXh55Q#!PDx2dsP|P$hwBRr!MJo{n_;AIkO0MN&XDG^0>7Ipk7ti>k2cPYKy(9$oUhAM!OUw`O>bMUl3h2+A!h_K6$dmZ zj5Ajn{Z$!OohVya3VNV8tf zXvbrOK)9*wlK2jzG(|kzaG7@c$RQ;YQZr_NG4Q^N7MZONT0 zG-{n9Kis7CNqTVgZ$yTX@XV@vLA>;Rnh}t()xJPYTz`m@c9euu8v;&6hR`9vGZ-lk z4%28lcDeP4O4VOdW%Nmnibp5!e)t*aAMdh}f~7IbY|ddYsYlgk!4`vP1vWrB0?EA~ zRumbmO_M6^s8^bq-T&djhlxV8Z`T+&s`&|(xGq|Vlg+dH0Y;Neyj?M7hZ=N$1eTY* z`S2)0P^J058C7ZX>;AlBD2Ts+4*9vHmYv%@#+G|E@F3sI9LXk*NCAmY`L=<1P@`L2 zjL@1**|8-h2*Eqm2A>9+eUbi(< z-awA!k&3T4#^co^9JCQsuM1CuFGGG$G~fR7c{5%^u_mM`xwg=FHr-d;aEz9lz^o;N zO|iM1465rPN+iyT5^86>D)W-dei^GUJD!~!LSAs+xEwU#*`A#Y7B>!ZJ1>@u&8Z5# zY&MDb@0JA)XO?UU0DEvRb+2{5c(ZdQLu9`~!w!> zXS9~##}or?`=Y;N);vxynEtRF$!T6(9HcUt;C*?ni;j}0@SkIppYPS|Do~rEd(gyta9~(2AD?1lOd`fwdBjRUhs>jATVL&O{(EkaehRlIE^w zv2NNFVv1Xl74b|wk6l`f?WOadPc2wx@Qa~t>9caQdeEtuOC%qG?)JCWape7uP2cEb zpby`#Z%A8{Bqff^0BcL_J$!ND5Si1EB8v6N2LY0d);R2g03`78y^PC#wOJ>=By`&H zH!Sa&)L~1`Wb#mjD1%$yPVB_w2D-OH>|*WSTlDy-Q}q75Uo9ST!18>WH07RdEDi0o z4hP{}VCbrBG?tKJrX}u6ok#m8xefhNM>WQPio5xaVjHa_YHV4`j_h7HW*9tQVnjM0 z%wisi-azkY4ea!?oT8dhd*laYLpEJ7p{E_PU5!jYb@VZgU7!wMeP89H`+U~n9j`)VNpO9NB!w7Lm*T$*pndheAITLDPY*oO6h;e1X`|hTFD|PXsp_TI6(N+Pv zp>#s4UQN^B*{zyq-9Xy_%7-}~e%Jk*v-afhBO@f>-kPCqQc_uwi}PJwD}nEvqK4(2 zD;{Y?!Fu;-;VEQvUl`K!7f{2T^f(NO#rfMPW!S||AcmV`jR@~peZ>C5McR}&r{k9d zWI$*IoP_he*;_BFQ+H*6O_ypz&TYEhm}s2^yV(_AxlY4O?cWAcedX}B>HQ+hB%daY zujzbhl-&TpY*LKd4!SL7@dIyX8p}n-23(>*Dyb9KjY`%8)|lDnfjR{BoNHT;Y%Hq( zsh?-MRtPW9gc)3O%d|^4KA=wZVkg%9-j~Dy!W3~5y-7H+%S$dwJr*c@k^rpC$QpV5 zwF0Ya>W=(fQRQD%08|cQsm+4W-)Edx{}KnO836lF?7|POqEFdDB<{vH*~uM_tmymY9Cf;z%+-Me8Ci@41ZU^XE;X zig3ldBJ{p5`)bmp$WiaQ8rMw?IQfB)5J1)b< z%6-@uFxsTGvs;Vh+8ZgGdjdTLvuc6SQXIplcG61Su9ZHWg15?d&5fcy$fCUcrq5J~ zv=&&Wo&#Ay)8r4arkwFNAFhN)4u|kiyr_?1Nz86u za>7#h!PBfytbN*J0oMp1Eb{vpe664KIgb1nq4By2xpWCk2Idm+d9r~gXnIjrq36_A z@FBho32hc$O+lQvRCDZm?6+%{_~{*9;ZqCH_B$oUH4H@-B2PtR>lTQ~_`kDo>;G3& zAf^;hT82Cjt>zL9p8bwKb21_yXGp%v6|&2F0DcJ+)cp>g)2gDp66 z`H!MUN3W@zio~FYp`S?DGHOwVo2h?#l=`)KDFo<$!kCd-0pBgIqF$>2n0Xr&LwK>M z$T_e(XuT>!PiW2gdoyo^P;Jv9i2AyW(Bc^rfZQ`BEqzft3d4P9tx`!6TIlvGR5NGn z6&%)8uw2Y#9GZrG^Ys*%$JqTFd&3E%ng`bLG(VHm3pz{@sq5Jfr}K^FQ6pz*I;2%R zQj_2P!;0NkBlMW4pI_UQf~8iC%2oS3Ulg!@&1;_duCvb5I`FDOWK5lJD>RGGeHdkH z%DyHpW+Hlbs(D92mw_IFox&^q!WpKFX^p<>X485A4DUTmZh4)e=4i%KAFi(}-mRR$ik3*9o_+Du8$+rtQ`S;roKM9Ctr3N5|lk%X$M(q z?*YO?;NN*0As^9!u2}|&3Ql;79;WoUmJe9teJ%ubiN&KmmuCw z*uP1!ltsh2jMMu6H_mB3nfv%Hft>5R# zRVs78wpk(sAAIkq5;To?YIYNIXad^7l|J+-D@kn|1({X(y}13o;N^}{wt6Qb^+CY4 zb}imiNE-1{WjT(k!7j1-MbjB+U(e_=Fj$O`trl%qA~uz0RkTdv%-b6HrOd(|3JXZJ zjv<~Y(*dV}dpPv(7ZRyXOP_@kJS|AcR(wt(z8c97Gq!p!{Ba3=sSwxa28o3;kQnv6 zC2h)SM(?kjcP-I14m;j25bm~TRQ5)|QSGs0H{yjnj>b1<+|GOdP_uuaeW@O#g+tWi znK<61@5SOVNh988)T(oVnl96Qt1=3;HB&50*@v%JsUNCg(Adb?F~O!!RrzTWTbi}% z(rDy**Ky}RV-Fh!by26yQfM;p88=?-J2%r$zxrFl4=M)vUU!+w6?iXJ0W=C|83QM2 zT&;Cki0$_CateYbwV7PpO&We=jH{Y5o9C z^@4ctFpUZqU^o`o^o_i75K&Y$^?ww>!UUWDEX-|lQ=JH0Iw;j}s%wqO z){DAfp3=YCG@I8fwz1#J#4{eM+r1rXQ%B0U{SGDKsuZ1>PUEb({2>sFRCXBsX4rf2 zVd8#xvI5uo*Qey3Ea5FbNnwj}{S>ckLndkHJd9O3Og6S6ggYv%MPe~rYM4GetF*H0 zajFJ=6wD3nv=YUndK+EK3*WkmxWh!4#^$=vz5C`0cS~aRyanVDR#J7ll8N)CP=+r^ zMlROnZ{9!pO80el;U>*i_0+TOz!n$a-Jm?|x*|A|3?Gj&8;GHZHi0(~d|2>y2AZNE zvK*a@A&+x|m{wL*r++iyA*WnSbKe)|&q`n@iu(26 z2gMI^hQd4@f%6A|ILuczg5s8BOW@p=G({c45gCKe8lOUK{Xo#yD{%2UvjADTnc3yd4?YgmK7q-eMeYWO|S z1D}{l*W495e<(Rw25?D=CuX-@4k$kz#W#d5KS)y$c=VgitMRs=klXQYh%dK(WzeAg zW<+8}yJ2h(<^MY{hunxQ$H?D8^38H-0_NlCp|jLZ_3Wm?g4MxZMGNnBMQzKd(qX=) zC#Odyamw;S!Jk6T`Q86Y2L`!UTBzQjwG{>{l+fe>)W$nP*S&-ty|>Kwqgp@OGP$Wq zLB3y2C==53H+^|3&VHIP{5VUKmbc6&P4ts-c|{l2GA+m$jOL`B{GpjFxdVNdMv!YC zEJXkKSlJqnK`}}9^(CP6CFMU&d4b)M#&=Nmfs)R#s9$!w-4gf;w%RT|1R2fawmRwu z;h}oCT|;i*6py_+=@(fX?d7ce;a+Nzd@8?Kj~y(8k%|vlBV6BJ_ObAp(|@IQ)teG>}k+nt6$y(|MacI%5t0S;X=p-`%;2vEL_1V&A63a;+s8Y

n50)NmGd;@ zs<)0Clp9>5X)l-HX|5KDICgCH$Bh;mFPQa@bfk0IgV|JKWKG`E4v}2uqZ8P(hqyjQrX~yL6&+S*#bfTdPX#`R>Q*giy%jN3TO3_aDqI zX2}fTCr4U3!)IkbR3}HL3<600pblZ2m$S7F*uqryIzeAW=i7qUporIUZhv{y(l!=- zr3O;Og^1Kv@%7j0M~^sUE|gV`3xzvG5M}ulpz>mjPLQgE-Iv$4@yB=x;MMT$ zu^;HP#E+*c#DuyhTwyFcR{etiJb<|=!q)s3Cyz0**&rWFvjU(>g*%vaqNHm=FZNd0 z7drj*eo2M-_AroTuEoHr%bh^z1y4}2i@4Cg_@S54w^R=`PfcC%$D~K%+_yfHDb2a2 z^Wk0)xB(OHdx<0(ff0x0!#-k(@B8v_J&FaWG(GjF-a8TA6fU#4caGcvv(F4owof*u ztdHI&Mp0WPN{Eix4FbzvsJSzJ$%AV5u@FLrpEqCkH9urp6bA zqHl_80%F&Jb6Wq8q_d1``hDB5KT$wZq@_V}AV`iDkZ#F=q@;j!mwq@17K~%8PXe9d<{?obh z*y+S^&LRYj9}-q+AF8z&ErpQJ}Fk}yOd z)gF(nr0PPLnYxe#XC9H$7IfHAC`cwd&8}w@qp&bptUGheBfV}SK?-I;JkWSX?x!*w zz(tI&j^_NZIWG z)|$;dc)}ImOO%(^6TO`+I2^B#thbhi;EC$BEA}=)cAn_jrVk%PgG{|B>tU&0;#SGz zz~cV+uFd=(dC6wCBN|(An)hQ0*2!X%N$s#uhZhWiI4Y;;N32285lPtZ#$N+WV1rTQ)zr2!x z8D13ER7+YQ0FI4onXy4w@pR-kqfmY0&Px(=MUn#@k*!_Oxa3oOx|gRvF)qZjeTNfM zye4x3XcUvICs@YmN`&jwW0Lamhs~M?sJ+>rsL%<0Es%WH)@VT`wx-z*%;bCYlq;3# zq*yg@vCzy7-TrQ_uhQdAqKSd?GVK~5Ca$I;Z){8~K9jxl{+MyXO4_dM1K@I>VJNhn z)!yM^J)O>}znO~l+f2(~^=5h9G3}S&R?W2XoxurSfZ-?#->l+`~ z6Z*HHk2w}I>dGrLA<=q!8sG8BzMTPZ)7@1d0v@t|OSVqL;e6?f?Ru0|c!X`FKW6Zd zoc{Io5;eQcuj>+#2l|f|_-OukG8d%c$IC+d9FE0QC~td#Rkz#z0Ev(Oc%m;C7SKO+ zVhtQtK*zCWYMh@{_mwMAS^m*P4J)u9<2ePbG)h|6KW+XvQ3fN`-FaU}*PuXDA4N3U zei6BZ{Lajup8EW>Hi&U8(u@}y1s+uDp@li`SN;we zURJ<651xDETH?77qW4TXXKfJ87BCWzF0EcROosRF%(8s2u0QdaL=w_OF9V_D9vnZf z^zwP&e{@ntb;_bty9RkEMT+T0yUyKa*Zhv0bFpWf)2Vu#%UjDDT~o5HuFK(5&TTs9 zI5c=d;PhF+(l;WH#M7FbMBXvguHehdK%OzB9M+>{&~{VqL-FtYbeGA^9o;wIRmb0F z36k7gTzem%FuNmGCz^NeKNzh0UuK^1dDGNg2w~EkKIKOORJ;kGP~zI#5if*6uoi(@t8sx;Q`EQ_SRWeYZ}lu^Cly zs?+)$T*=%^Fg^5~SnH;G;aM2kYSFfx$DzhNnNBnW?U$mR#;gf#!nu&bxzd)kfQ~z4_G|?}P0K zP?f_M&fbn{_Ax{*OEoYxIYaBW z{AzRS6t{Ukryd%FDzd(`{kw??Y4m7lP&vx@to;!-Fu4K745-U1lFwpX4RWHp@?+y=K*mt214kTtPIz~7W7SZ8=qjs+j}{jqi)x>DVdwOW zi#z(u`*2Wo>0;C+kb=*Z%yBHKqW(Z{1GCQ|vpqz20EUJW9O&gA=VjCU&V#UnF`#GP z@T$3UI^%a?me$!*jB`tpall(nVoM>cem_L*5AEt5yr+B^YUA|t<-01Ks30jqXhb_A zOW2s>#66Wb@8wE_?+CHb*agAx;4EW zgJeebz0xo4_6Kn>Ui?0c?PV_O&ZVyfN9}LMc#~~Me|#I1)qYbE9>ltkFSep_?QE>-zE(0bWBEn8Pbl6a=4k#yx{WA^g7lKf zFzfL^^xL8@X-l*eCTr0Z#GO5hsTFTb25MsU| zpgm!96d>PSDH<$|3%MJ1R2~jV0jU#LMjwmF4c{)ruzgwFq^tMR!bi-LiKS5lc%t7i zyx#rHweplb1y=F*TzX?UB&d_Guk!^sRBc@v{}{MjeEPj5!`WEbfZ!Rt-=vY1dLqWk z#$fjC;UmqOX-8j={=>GXJMzDY#@Iocr*AX z##Qap%MAu!Ub|fH5s4>A$4OR6S@rBN0vlI!$S`9zYs;@BKwv=Y5$`|$hg|%*Z-v}^ z+yG?!5z>i1o8qWDB*f+;(?7)=@Ay*i8^qxy6_TX^mfa?&;bP6a!t z;K{dCO5aWBdZsLATY01P_elrIx0_H}4`&49f3JnjJ+T?GIn0P+**qfLsm7hi~-Vrc0c(FHjR)%R?i*^cT;8#;`C62MKLDVyyaE@d~XRHUWOk@ghR@fD? zn=~^sP$;2#n~Dc=gZTcreCz!X6zLKatCbUlx@wm3hx-Cgm%cY0!VmIkJiEyCv(R3dQZF2}6XwfOm}l{i|#&RMR%@ zR8rnT_4~cLUeye*wU&qVBX0*S_a%Ib5YA`pm-{$LJ9Vc!zQ6?*r~<0x)Y?F8`9Zl7 z?Xp6{>2-rrhjl&9_qQmRV={OWf^$DB6vn(&INZ$bg}9&{`!H-{bU5FCHJ^P@U0d-v z*z(_K_!?EPO-&J{1y;-SpI4k?<6!~?&`l%s&zFI5(MhlwYHf2u4>r}n9+vqqvxmjG z_U*^cUTA9xZ@rv=hq1G954w-*^|GnAP|Wb19Qc}TG=11GIG={pP|2<*&V01()yLyr zn;LeUY_R#kKV{9nS;d?(|C=s+znA=yA4pt&PZA%X#sy*+HMLa>&Hw5~f&8bFhC|K^ zi&39xZqkH-n4TULL~F0oC0{~9^<6LYCx3s%6Rk;UPnQ|3%h>$B9m7-2$-zKFF?r_zXCl(^3Zp+3(#xts0oe2QK;YaY zk$zS#P|=p+?%kJ|P7m#z)H5nMMIgd3=0ekCS|xmUH__PV$L2eaZ%@v!S{|`pd2-Dd znVq>M{CYn40XCrHs46P@SJk(F+xI{s#3%6Ei)hzN8j}Xp60mCJYPch1O4G* z@c9;&;woI4GH!g9tS2={MJ+jA8vYFfrn{&v?VZpncmF{~usUDw>kCl3(#r|IC*pok zTBJh>kB*}r;_a{$H&>(vziBDY<@=TZ=&2cj{@XI6DTnpIQT8?SrXO6eiv6Fh8xEVf z&#_6s=!Q+ye{Tu*c}Mr-oz55RlF?iFhTdC0<8lg7A9C>SD|DY<4~ge5s)^94c7XUX zNSUl>yaK}f1dcYcE_=3g_~85<845chhn;422!aLF1OCozS0nDF0oehZ3CV2;#yeMo z{tL3^gnpzS$!q@Z%l124uZD-wRpPlZ$0gg-)+Hc|Xd>WagoCW-=oi#s zF*+y2KjF9}B;sEbuKirww?^k3M)QxhKJzN-#kxs4yHEbBbP z*O^K_W~rH5A9tuPjgRM2Vx!ibA?_4mNxb#8)fLcOmTO`Z4-+hEFMb$(<-GX@4?UWf zLw{bkaOVdSv;2~C91xJ~OKYeQY+xKEJb?XI9A-3g^QHuQnA|YrC zKkDtfK$~#J=4m;z7rnsZMO}OOrQx_3Mc!j>=LirP;my)`35UR7B7YSJuvTtGA7;)1P{x|5;&K4>AMlenVG?fyv- zh5m>*rk}Btprq`w_-&8)_XX{Fya_0w3J;ay=qBXfNL=ZWk$7$Ml0(~CqfXoOl3RUK zlcfQ97e%e0GyA0ma?Q6BdPFTA{GcdMy*-=td!9JGJGQf~kix!o3dkN>z@UlJXST#o z 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 #xi?g@M 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 E4^0B5SO5S3 diff --git a/pictures/settings.png b/pictures/settings.png index 201ba895a2358abd12c3b9f9c3bbdd9a55e0ba0e..b0a07e74de8d5ee07d9910d04cb7ee463e7c0500 100644 GIT binary patch literal 79520 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 F{2x4d`^5kN diff --git a/pictures/system.png b/pictures/system.png new file mode 100644 index 0000000000000000000000000000000000000000..4fd873d5c16347a4889830ad2f6b24bb954c19c3 GIT binary patch literal 82721 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 KrwON!k^ceAq&ims literal 0 HcmV?d00001 diff --git a/pictures/update.png b/pictures/update.png new file mode 100644 index 0000000000000000000000000000000000000000..ebf3a5c0776dc5d7f6e89ebfe78a6e8d7550c973 GIT binary patch literal 96885 zcmdqHWmH|u(l!bNf?II6;0Y|;-QC?GxVyW1aCi4$!7aGEI|LR4cMEVA*=N7++55Zy z?vHPbyT+Jn_H3=Ls_v?Ky2IsV#Sr0e;lRMa5GBNg6~VyX0l>f@bYb3uaxDF~g2BKL ztjvXk+EuppviRoV^DknZ| z%@b_ucXyKbrNU=0xW3?-zH|M7gKLEMWoY{R1U?7dUq=%p)Gsck!A7>8&n{2j^P}HY z$ih|oPQ0p3Z^M7#2K!ozVtQfR4iOgn&QI;?7g&pyh4^l#<0S{r|`k;!Q_Vaget?l zg#~(qp{j$HkXEFKLoUEf7F;tqe0L{tcYqF#A>SBlz!l(8hd(~7mA#spzciu$9EJ8? z>K4F|B>RBz(2KhaM8POK3h@Z~n#5(> zQ7E67HH2L{lL)VB#?(0S2RlmddVnk{hC@6FtDl=cKW2Ji-7-~HYUyP#>ldlzPf0KM zYMfhY+eiM~^ua|tzGUcj%D+=ZYXKaHhH!nVBKdRbVJyTh$$R7?WmcjX@XNJ&l9I)-GrNE4~W;YiD}|qP>c}{{C*phYku+8gI{~^;IY%w z%=aa9teMvaGSd$EAT$_Sa57tdRJFgV6mA##w9EK>y(X`YtnI79CBOk?`E)P|7YR38 z=u?EIuO5+crH0Ur3G(>wgPdobn}>74n*#FhV5_lN{j&PN+Fo@sef`026qOiU`Q1Wo zN5kExxYx<-C~|~9QJ;H>)b^AVB+{g^q*6vr_q6l$CG&Q+YAGd)B}F)X2)>8sC4fYT zNdilwEgd1ozV_I1a#4V- z`~u758cL9gOytzIC+YTum2sOv@TdL;=>i~P+k*Pdj{*Y~M~w6_& zP?`F0?Sadil_gs4YoZoDY$z=Nu+26SaaIr(k^|;@E z^rGm5(TlVl#5-5ISNTn{5$H=k1v3CC7C`SWge@~fB2AI_fd)nk78<5xTjSTqcCruQ zkHT8{Y}}EDecC(BJES|DJ2pG^hFlj6wJE}+IPv%rFNN$MQk2DM$g4-wml>Ca&r8nH%(;{jsI=wZN>{~JihQSdir*dbx>UaWaEa-_^zfl2VNGnh zcuDa$^>Cv02)-nFQMN<6L+quhj?TK^x)_guP9d*WhoX1vBgakXFQPI|WoViV&SaVr zx?-CG!jg^R&Z22E)&^qD_f=oNr>aVENqF)<wW^{{78V8 zB~Q>f!JReEN$E^D%g{=mB?FuW&NNNQ&2l-1w|;NMU)NrDSl4N_Zsqad^dR&o^H91j zzm7R@J}`P@eZ+tEdM1B-y0$&=#Wi7!Vvz<|ZGU?-Pz&i`!?r>BLJXi{TC%oV-%23q z1p)8i0h!X~uiF=-w82Mp>_UZUi?=mmpoOWZ%S zZ90eB$J-}=ERgo+_Zc?zdrL)-&oZt$6d6Yv$0ntzM9n)@a8__Fe6cKUobqVA(Kxze z{myF6dS#7koxO^?ZmwAL}VebRjnq5!#Xlb>>Wd5OF`yx_g>9$pTCKU08By=M

bEv==lVd=umuA_vb$C=eDFp^j;vVDw|# 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 literal 0 HcmV?d00001 From 3e410aed0b08eb6c238f7ac843c20028f2c4b4ae Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 25 Apr 2021 00:55:09 +0200 Subject: [PATCH 0018/1295] upload of raspiblitz-v1.7.0-2021-04-24.img.gz --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0a86fce63..70e4069d4 100644 --- a/README.md +++ b/README.md @@ -103,11 +103,11 @@ In the end your RaspiBlitz should look like this: |Difficulty level|Easy|Medium| |Pros|Make Blitz accessible to everyone|You don't need to trust us, build from your own forked repository| |Cons|You have to trust the mantainer image binaries|You need to read the build_sdcard.sh parameters in order for the customization to suit your needs| -|Instructions|[Download image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7RC3-2021-04-19.img.gz) and [Flash the sd card](https://github.com/rootzoll/raspiblitz/tree/master#write-the-sd-card-image-to-your-sd-card)|[Build your own sd card image](#build-the-sd-card-image)| -|Verify what?|SHA-256 (below) and/or [Signature](https://github.com/rootzoll/raspiblitz/blob/v1.6/FAQ.md#how-to-verify-the-sd-card-image-after-download)|All of the code, don't trust, verify| +|Instructions|[Download image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.0-2021-04-24.img.gz) and [Flash the sd card](https://github.com/rootzoll/raspiblitz/tree/master#write-the-sd-card-image-to-your-sd-card)|[Build your own sd card image](#build-the-sd-card-image)| +|Verify what?|SHA-256 (below) and/or [Signature](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.0-2021-04-24.img.gz.sig)|All of the code, don't trust, verify| If downloading the mantainer image, the shasum is: -* SHA-256: 83384b2efe8d93e8bee4130e11770a6c4c1be676df9f9150e78ea42b9d252ed6 +* SHA-256: 82720a63b2503fb81634b511ef4b3cb5e2db6b9c734b915fdfcccccb8722e820 Useful info: * [What's new in Version 1.7 of RaspiBlitz?](CHANGES.md#whats-new-in-version-170-of-raspiblitz) From b83ef543f3ad57c005551339a6a7922ea43bf2bf Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 25 Apr 2021 01:15:08 +0200 Subject: [PATCH 0019/1295] update version 1.7.0 --- home.admin/_version.info | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_version.info b/home.admin/_version.info index c48eb3baa..7d5f23197 100644 --- a/home.admin/_version.info +++ b/home.admin/_version.info @@ -1,2 +1,2 @@ # RaspiBlitz Version - always [major].[main].[sub] (sub can be a string like '2rc1') -codeVersion="1.7.0RC3" +codeVersion="1.7.0" From 81c63ba431f876751cfcbc5d86786ef5fcbc58dd Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 25 Apr 2021 01:47:31 +0200 Subject: [PATCH 0020/1295] upload image raspiblitz-v1.7.0-2021-04-25.img.gz --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 70e4069d4..f98bd5f9b 100644 --- a/README.md +++ b/README.md @@ -103,11 +103,11 @@ In the end your RaspiBlitz should look like this: |Difficulty level|Easy|Medium| |Pros|Make Blitz accessible to everyone|You don't need to trust us, build from your own forked repository| |Cons|You have to trust the mantainer image binaries|You need to read the build_sdcard.sh parameters in order for the customization to suit your needs| -|Instructions|[Download image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.0-2021-04-24.img.gz) and [Flash the sd card](https://github.com/rootzoll/raspiblitz/tree/master#write-the-sd-card-image-to-your-sd-card)|[Build your own sd card image](#build-the-sd-card-image)| -|Verify what?|SHA-256 (below) and/or [Signature](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.0-2021-04-24.img.gz.sig)|All of the code, don't trust, verify| +|Instructions|[Download image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.0-2021-04-25.img.gz) and [Flash the sd card](https://github.com/rootzoll/raspiblitz/tree/master#write-the-sd-card-image-to-your-sd-card)|[Build your own sd card image](#build-the-sd-card-image)| +|Verify what?|SHA-256 (below) and/or [Signature](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.0-2021-04-25.img.gz.img.gz.sig)|All of the code, don't trust, verify| If downloading the mantainer image, the shasum is: -* SHA-256: 82720a63b2503fb81634b511ef4b3cb5e2db6b9c734b915fdfcccccb8722e820 +* SHA-256: e6d70ac1662af3e90e57bee8c50e9a7925239431892e1916c2be80e519befc3f Useful info: * [What's new in Version 1.7 of RaspiBlitz?](CHANGES.md#whats-new-in-version-170-of-raspiblitz) From e32d6d8570fde782d19d212ad2c9238717f64034 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 25 Apr 2021 01:52:00 +0200 Subject: [PATCH 0021/1295] correct signature link for v1.7.0 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f98bd5f9b..40b8b16a0 100644 --- a/README.md +++ b/README.md @@ -104,7 +104,7 @@ In the end your RaspiBlitz should look like this: |Pros|Make Blitz accessible to everyone|You don't need to trust us, build from your own forked repository| |Cons|You have to trust the mantainer image binaries|You need to read the build_sdcard.sh parameters in order for the customization to suit your needs| |Instructions|[Download image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.0-2021-04-25.img.gz) and [Flash the sd card](https://github.com/rootzoll/raspiblitz/tree/master#write-the-sd-card-image-to-your-sd-card)|[Build your own sd card image](#build-the-sd-card-image)| -|Verify what?|SHA-256 (below) and/or [Signature](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.0-2021-04-25.img.gz.img.gz.sig)|All of the code, don't trust, verify| +|Verify what?|SHA-256 (below) and/or [Signature](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.0-2021-04-25.img.gz.sig)|All of the code, don't trust, verify| If downloading the mantainer image, the shasum is: * SHA-256: e6d70ac1662af3e90e57bee8c50e9a7925239431892e1916c2be80e519befc3f From 38af1f50ec848a000d2a29b248eefe703a4bfe48 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 25 Apr 2021 15:14:28 +0100 Subject: [PATCH 0022/1295] switch to mstmp --- home.admin/XXsendNotification.py | 10 +++--- home.admin/config.scripts/blitz.notify.sh | 38 +++++++++++------------ 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/home.admin/XXsendNotification.py b/home.admin/XXsendNotification.py index 808f2ed69..27feede23 100755 --- a/home.admin/XXsendNotification.py +++ b/home.admin/XXsendNotification.py @@ -11,7 +11,7 @@ try: except ImportError: raise ImportError("Please install missing package: python3 -m pip install smime") -SSMTP_BIN = "/usr/sbin/ssmtp" +SMTP_BIN = "/usr/bin/msmtp" def main(): @@ -107,7 +107,7 @@ def mail(recipient: str = None, message: str = None, subject: str = None, cert: 'From: {} <{}>'.format(from_name, from_address), "Subject: {}".format(subject), "", - "{}".format(message.encode('utf8')) + "{}".format(message) ] with open(cert, 'rb') as pem: @@ -126,11 +126,11 @@ def mail(recipient: str = None, message: str = None, subject: str = None, cert: msg_to_send = msg.as_bytes() # send message via e-Mail - if not os.path.exists(SSMTP_BIN): - raise Exception("File not found: {}".format(SSMTP_BIN)) + if not os.path.exists(SMTP_BIN): + raise Exception("File not found: {}".format(SMTP_BIN)) try: - cmd = [SSMTP_BIN, recipient] + cmd = [SMTP_BIN, recipient] subprocess.run(cmd, input=msg_to_send, stderr=subprocess.STDOUT) except subprocess.CalledProcessError as err: diff --git a/home.admin/config.scripts/blitz.notify.sh b/home.admin/config.scripts/blitz.notify.sh index d474641a5..88a0ded7c 100755 --- a/home.admin/config.scripts/blitz.notify.sh +++ b/home.admin/config.scripts/blitz.notify.sh @@ -79,33 +79,33 @@ source /mnt/hdd/raspiblitz.conf 2>/dev/null if [ "$1" = "1" ] || [ "$1" = "on" ]; then echo "switching the NOTIFY ON" - # install sstmp if not already present - if ! command -v ssmtp >/dev/null; then + # install mstmp if not already present + if ! command -v msmtp >/dev/null; then [ -z "$(find -H /var/lib/apt/lists -maxdepth 0 -mtime -7)" ] && sudo apt-get update - sudo apt-get install -y ssmtp + sudo apt-get install -y msmtp fi # install python lib for smime into virtual env sudo -H /usr/bin/python3 -m pip install smime # write ssmtp config - cat << EOF | sudo tee /etc/ssmtp/ssmtp.conf >/dev/null -# -# Config file for sSMTP sendmail -# -# The person who gets all mail for userids < 1000 -# Make this empty to disable rewriting. -Root=${notifyMailTo} + cat << EOF | sudo tee /etc/msmtprc >/dev/null +# Set default values for all following accounts. +defaults +port 587 +tls on +tls_trust_file /etc/ssl/certs/ca-certificates.crt -# hostname of this system -Hostname=${notifyMailHostname} +account mail +host ${notifyMailServer} +from ${notifyMailFromAddress} +auth on +user ${notifyMailUser} +password ${notifyMailPass} + +# Set a default account +account default : mail -# relay/smarthost server settings -Mailhub=${notifyMailServer} -AuthUser=${notifyMailUser} -AuthPass=${notifyMailPass} -UseSTARTTLS=YES -FromLineOverride=YES EOF # edit raspi blitz config @@ -137,7 +137,7 @@ if [ "$1" = "send" ]; then exit 1 fi - if ! command -v ssmtp >/dev/null; then + if ! command -v msmtp >/dev/null; then echo "please run \"on\" first" exit 1 fi From 02409b41fd66dd496a3a3dfd9681bd25b4d8c654 Mon Sep 17 00:00:00 2001 From: nyxnor <69700936+nyxnor@users.noreply.github.com> Date: Sun, 25 Apr 2021 14:16:22 +0000 Subject: [PATCH 0023/1295] correct bug on debug What happens is that if a service is `off`, it will still show the logs. The if statement needs to be base if it is `on` (it was, I introduced this bug on a PR a time ago, but just realized it now with v1.7.0 (So sorry, I was an enthusiastic at that time). This goes back to the services part of v1.6 plus LIT service. Also, added torsocks to termbin). To understand: Compare [what is happening](http://kq3nkqhpcb3qwxy7nc45hvimruchynvvhmyce4g2ohvcq5pqzl3ih3id.onion/nyxnor/debug.txt) with [my mods now](http://kq3nkqhpcb3qwxy7nc45hvimruchynvvhmyce4g2ohvcq5pqzl3ih3id.onion/nyxnor/debugmods.txt). It is my onion service for testing, the keys is 5CGIZWMBEPY342OJ5BEL4KKPZELCSR66GV57LVK3HOZFB32FSFJQ. This key will change soon. --- home.admin/XXdebugLogs.sh | 139 +++++++++++++++++++------------------- 1 file changed, 68 insertions(+), 71 deletions(-) diff --git a/home.admin/XXdebugLogs.sh b/home.admin/XXdebugLogs.sh index 6d15acb94..f0b2410a0 100755 --- a/home.admin/XXdebugLogs.sh +++ b/home.admin/XXdebugLogs.sh @@ -30,24 +30,24 @@ if [ ${#chain} -eq 0 ]; then fi clear -echo "" +echo echo "***************************************************************" echo "* RASPIBLITZ DEBUG LOGS " echo "***************************************************************" echo "blitzversion: ${codeVersion}" echo "chainnetwork: ${network} / ${chain}" uptime -echo "" +echo echo "*** BLOCKCHAIN SYSTEMD STATUS ***" sudo systemctl status ${network}d -n2 --no-pager -echo "" +echo echo "*** LAST BLOCKCHAIN 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 echo "*** LAST BLOCKCHAIN 20 INFO LOGS ***" pathAdd="" if [ "${chain}" = "test" ]; then @@ -55,149 +55,146 @@ if [ "${chain}" = "test" ]; then fi echo "sudo tail -n 20 /mnt/hdd/${network}${pathAdd}/debug.log" sudo tail -n 20 /mnt/hdd/${network}${pathAdd}/debug.log -echo "" +echo echo "*** LND SYSTEMD STATUS ***" sudo systemctl status lnd -n2 --no-pager -echo "" +echo echo "*** LAST LND 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 echo "*** LAST 30 LND INFO LOGS ***" echo "sudo tail -n 30 /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log" sudo tail -n 30 /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log -echo "" +echo echo "*** NGINX SYSTEMD STATUS ***" sudo systemctl status nginx -n2 --no-pager -echo "" - +echo echo "*** LAST NGINX LOGS ***" echo "sudo journalctl -u nginx -b --no-pager -n20" sudo journalctl -u nginx -b --no-pager -n20 echo "--> CHECK CONFIG: sudo nginx -t" sudo nginx -t -echo "" +echo -if [ "${touchscreen}" = "0" ]; then - echo "- TOUCHSCREEN is OFF by config" -else - echo "" +if [ "${touchscreen}" = "1" ]; then + echo echo "*** LAST 20 TOUCHSCREEN LOGS ***" echo "sudo tail -n 20 /home/pi/.cache/lxsession/LXDE-pi/run.log" sudo tail -n 20 /home/pi/.cache/lxsession/LXDE-pi/run.log - echo "" + echo +else + echo "- TOUCHSCREEN is OFF by config" fi -if [ "${loop}" = "off" ]; then - echo "- Loop is OFF by config" -else - echo "" +if [ "${loop}" = "on" ]; then + echo echo "*** LAST 20 LOOP LOGS ***" echo "sudo journalctl -u loopd -b --no-pager -n20" sudo journalctl -u loopd -b --no-pager -n20 - echo "" + echo +else + echo "- Loop is OFF by config" fi -if [ "${rtlWebinterface}" = "off" ]; then - echo "- RTL is OFF by config" -else - echo "" +if [ "${rtlWebinterface}" = "on" ]; then + echo echo "*** LAST 20 RTL LOGS ***" echo "sudo journalctl -u RTL -b --no-pager -n20" sudo journalctl -u RTL -b --no-pager -n20 - echo "" + echo +else + echo "- RTL is OFF by config" fi -if [ "${ElectRS}" = "off" ]; then - echo "- Electrum Rust Server is OFF by config" -else - echo "" +if [ "${ElectRS}" = "on" ]; then + echo echo "*** LAST 20 ElectRS LOGS ***" echo "sudo journalctl -u electrs -b --no-pager -n20" sudo journalctl -u electrs -b --no-pager -n20 - echo "" + echo echo "*** ElectRS Status ***" sudo /home/admin/config.scripts/bonus.electrs.sh status - echo "" + echo +else + echo "- Electrum Rust Server is OFF by config" fi -if [ "${lit}" = "off" ]; then - echo "- LIT is OFF by config" -else - echo "" +if [ "${lit}" = "on" ]; then + echo echo "*** LAST 20 LIT LOGS ***" echo "sudo journalctl -u litd -b --no-pager -n20" sudo journalctl -u litd -b --no-pager -n20 - echo "" + echo +else + echo "- LIT is OFF by config" fi -if [ "${BTCPayServer}" = "off" ]; then - echo "- BTCPayServer is OFF by config" -else - echo "" +if [ "${BTCPayServer}" = "on" ]; then + echo echo "*** LAST 20 BTCPayServer LOGS ***" echo "sudo journalctl -u btcpayserver -b --no-pager -n20" sudo journalctl -u btcpayserver -b --no-pager -n20 - echo "" + echo +else + echo "- BTCPayServer is OFF by config" fi -if [ "${LNBits}" = "off" ]; then - echo "- LNbits is OFF by config" -else - echo "" +if [ "${LNBits}" = "on" ]; then + echo echo "*** LAST 20 LNbits LOGS ***" echo "sudo journalctl -u lnbits -b --no-pager -n20" sudo journalctl -u lnbits -b --no-pager -n20 - echo "" + echo +else + echo "- LNbits is OFF by config" fi -if [ "${thunderhub}" = "off" ]; then - echo "- Thunderhub is OFF by config" -else - echo "" +if [ "${thunderhub}" = "on" ]; then + echo echo "*** LAST 20 Thunderhub LOGS ***" echo "sudo journalctl -u thunderhub -b --no-pager -n20" sudo journalctl -u thunderhub -b --no-pager -n20 - echo "" + echo +else + echo "- Thunderhub is OFF by config" fi -if [ "${specter}" = "off" ]; then - echo "- SPECTER is OFF by config" -else - echo "" +if [ "${specter}" = "on" ]; then + echo echo "*** LAST 20 SPECTER LOGS ***" echo "sudo journalctl -u cryptoadvance-specter -b --no-pager -n20" sudo journalctl -u cryptoadvance-specter -b --no-pager -n20 - echo "" + echo +else + echo "- SPECTER is OFF by config" fi -if [ "${sphinxrelay}" = "off" ]; then - echo "- SPHINX is OFF by config" -else - echo "" +if [ "${sphinxrelay}" = "on" ]; then + echo echo "*** LAST 20 SPHINX LOGS ***" echo "sudo journalctl -u sphinxrelay -b --no-pager -n20" sudo journalctl -u sphinxrelay -b --no-pager -n20 - echo "" + echo +else + echo "- SPHINX is OFF by config" fi -echo "" +echo echo "*** MOUNTED DRIVES ***" df -T -h -echo "" +echo -echo "" echo "*** DATADRIVE ***" sudo /home/admin/config.scripts/blitz.datadrive.sh status -echo "" echo "*** NETWORK ***" sudo /home/admin/config.scripts/internet.sh status | grep 'network_device\|localip\|dhcp' -echo "" +echo echo "*** HARDWARE TEST RESULTS ***" showImproveInfo=0 @@ -207,14 +204,14 @@ if [ ${#undervoltageReports} -gt 0 ]; then showImproveInfo=1 fi fi -echo "" +echo echo "*** SYSTEM STATUS (can take some seconds to gather) ***" sudo /home/admin/config.scripts/blitz.statusscan.sh -echo "" +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:" -echo "/home/admin/XXdebugLogs.sh | nc termbin.com 9999" -echo "" +echo "/home/admin/XXdebugLogs.sh | torsocks nc termbin.com 9999" +echo From 582403a571b45bf31f44d9aa0c6d9dbf0afd3127 Mon Sep 17 00:00:00 2001 From: nyxnor <69700936+nyxnor@users.noreply.github.com> Date: Sun, 25 Apr 2021 15:13:58 +0000 Subject: [PATCH 0024/1295] SECURITY.md typos (#2229) please correct this before v1.7 @rootzoll --- SECURITY.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index c30f8cc58..b50c4860b 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,9 +2,9 @@ *NOTE: This document is just a first draft and still under contruction.* -Only use this software with funds you could afford to lose. Especially a lightning wallet is a hot wallet that has a constant connection to the internet and can be target of exploitation. +Only use this software with funds you could afford to lose. Especially a lightning wallet that is a hot wallet, which has constant connection to the internet and can be target of exploitation. -Just because the software is OpenSource does not mean its free of errors. Especially if you run additional apps the RaspiBlitz team cannot review all the code of those external projects. +Just because the software is OpenSource does not mean its free of errors. Especially if you run additional apps, the RaspiBlitz team cannot review all the code of those external projects. The software is provided "AS IS", without warrenty of any kind. In no event shall the authors or copyright holders be liable for any claim, damages or other @@ -54,20 +54,20 @@ Ensure that you put quotes around fingerprints containing spaces if importing wi # On-chain Funds -Please keep in mind that there can be two different on-chain wallets on the RaspiBlitz. +Please keep in mind that there can be two different on-chain wallets on the RaspiBlitz: ## Lightning Wallet (default) -The default is the on-chain lightning wallet - thats the wallet where you normally send your funds before opening a channel & where your funds return to when you close a channel. With the initial word seed you get during RaspiBlitz setup you can get access again to this on-chain wallet. Keep the seed words secure in a off-line location. +The default is the on-chain lightning wallet - that's the wallet where you normally send your funds before opening a channel & where your funds return to when you close a channel. With the initial word seed you get during RaspiBlitz setup, you can get access again to this on-chain wallet. Keep the seed words secure in a off-line location. ## Bitcoin Core Wallet (deactivated by default) -Beside lightning you have a bitcoin core installed. Normally bitcoin core acts just as a blockchain informational service to the lightning wallet and its internal seperate on-chain wallet is deactivated. +Beside lightning you have a bitcoin core installed. Normally, bitcoin core acts just as a blockchain informational service to the lightning wallet and its internal seperate on-chain wallet is deactivated. Some apps (like Fully Noded or JoinMarket) activate the bitcoin core wallet and use it for their own needs. This on-chain balance will not be reflected in the rest of the RaspiBlitz software and is NOT backuped by the seed words from the RaspiBlitz setup. If you make use of the bitcoin core wallet please take care of these funds. # Off-chain Funds (Lightning Channels) -Please note that there is no perfect backup concept for the funds in your lightning channels yet. We recommend strongly to use the `Static Channel Backup` provided by LND and consider off-loctaion backup of that file to have the best chances to recover Lightning funds in a case desaster recovery. +Please note that there is no perfect backup concept for the funds in your lightning channels yet. We strongly recommend using the `Static Channel Backup` provided by LND and consider off-line location backup of that file to have the best chances to recover Lightning funds in a case of recoverying from a disaster. -For more practical information on this topic see: [Backup Channel Funds](README.md#backup-for-on-chain---channel-funds) \ No newline at end of file +For more practical information on this topic see: [Backup Channel Funds](README.md#backup-for-on-chain---channel-funds) From 6a1bb3841d2b50ab825b286c8343aeacd6e3bfef Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 26 Apr 2021 00:05:30 +0200 Subject: [PATCH 0025/1295] update README for v1.7.0 --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 40b8b16a0..9dc2d2116 100644 --- a/README.md +++ b/README.md @@ -109,9 +109,13 @@ In the end your RaspiBlitz should look like this: If downloading the mantainer image, the shasum is: * SHA-256: e6d70ac1662af3e90e57bee8c50e9a7925239431892e1916c2be80e519befc3f +The mantainer sd card image can also be downloaded via torrent: +* [assets/raspiblitz-v1.7.0-2021-04-25.img.gz.torrent](https://github.com/rootzoll/raspiblitz/raw/v1.7/home.admin/assets/raspiblitz-v1.7.0-2021-04-25.img.gz.torrent) + Useful info: * [What's new in Version 1.7 of RaspiBlitz?](CHANGES.md#whats-new-in-version-170-of-raspiblitz) * [How to update my RaspiBlitz?](README.md#updating-raspiblitz-to-new-version) +* [How to migrate to RaspiBlitz from Umbrel/myNode](#make-a-raspiblitz-out-of-your-umbrel-or-mynode) * [How to verify the SD card image after download?](FAQ.md#how-to-verify-the-sd-card-image-after-download) ## Write the SD-Card image to your SD Card From e1044d5a9486e5ca0f797e9b1c6b167fa7ab91ec Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 26 Apr 2021 00:22:23 +0200 Subject: [PATCH 0026/1295] fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9dc2d2116..4e68ce2be 100644 --- a/README.md +++ b/README.md @@ -954,7 +954,7 @@ Then the blockchain needs to sync up and you should be back to normal. Another kind of migration is when you already run an full node with the Umbrel or myNode software and you like to change it to RaspiBlitz without closing channels. You basically have all the hardware needed and just need to change software. You dont need the [LCD from the shopping list](#amazon-shopping-list-buy-parts--build-it-yourself) - RaspiBlitz can also run without an LCD. -*NOTE: This migration is still expirimental. You will still use the terminal to setup & manage your RaspiBlitz. If that is too technical for you please wait for the RaspiBlitz v1.8, which will introduce a WebUI for your browser that make the migration to RaspiBlitz familiar like with your old node user experiences.* +*NOTE: This migration is still experimental. You will still use the terminal to setup & manage your RaspiBlitz. If that is too technical for you please wait for the RaspiBlitz v1.8, which will introduce a WebUI for your browser that make the migration to RaspiBlitz familiar like with your old node user experiences.* Before you start migration: * if you have on-chain funds on your old node - make sure to have the backup seed words From 4d7cba6bb95381e3e6778a6e1c78cc7dad6b3eee Mon Sep 17 00:00:00 2001 From: Animalmother9000 <48626097+Animalmother9000@users.noreply.github.com> Date: Thu, 29 Apr 2021 22:32:22 +0200 Subject: [PATCH 0027/1295] List all compatible displays on Amazon (#2253) Give some alternatives if the mentioned display is sold out on Amazon --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 4e68ce2be..8482856b1 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,11 @@ The cheapest way is to buy and assemble the single parts yourself. There are two * SSD-case - UGREEN 2.5" External USB 3.0 Hard Disk Case with UASP support : [amazon referral link](https://geni.us/raspiblitz-ssd-case) * MicroSDCard 32GB - Samsung PRO Endurance 32 GB microSDHC UHS-I U1: [amazon referral link](https://geni.us/raspiblitz-sc-card) * LCD - 3.5" RPi Display, GPIO connection, XPT2046 Touch Controller: [amazon referral link](https://geni.us/raspiblitz-touchscreen) + - There are different vendors for the screen on Amazon. If the above mentioned screen is sold out you can also use these: + - Quimat 3,5'' Zoll Inch Touch + - ELEGOO Display 3.5" Zoll TFT LCD + - kuman 3.5 Inch Touch Screen TFT Monitor + - Waveshare 3.5inch Display for Raspberry Pi * Heatsink Case for RPi4 : [amazon referral link](https://geni.us/heatsink-raspi4) *You can even pay for your RaspiBlitz Amazon Shopping with Bitcoin & Lightning through [Bitrefill](https://blog.bitrefill.com/its-here-buy-amazon-vouchers-with-bitcoin-on-bitrefill-bb2a4449724a).* From 55fc8050813e569c548ea0e4b6f7976f810b166b Mon Sep 17 00:00:00 2001 From: /rootzoll Date: Thu, 29 Apr 2021 22:38:53 +0200 Subject: [PATCH 0028/1295] #2243 formatting info on additional screen vendors --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8482856b1..2b013979f 100644 --- a/README.md +++ b/README.md @@ -75,13 +75,14 @@ The cheapest way is to buy and assemble the single parts yourself. There are two * 1TB SSD - SanDisk SSD Plus 1TB 2.5" : [amazon referral link](https://geni.us/raspiblitz-1000gb-san) *other 1TB SSD models might cause power issues* * SSD-case - UGREEN 2.5" External USB 3.0 Hard Disk Case with UASP support : [amazon referral link](https://geni.us/raspiblitz-ssd-case) * MicroSDCard 32GB - Samsung PRO Endurance 32 GB microSDHC UHS-I U1: [amazon referral link](https://geni.us/raspiblitz-sc-card) +* Heatsink Case for RPi4 : [amazon referral link](https://geni.us/heatsink-raspi4) * LCD - 3.5" RPi Display, GPIO connection, XPT2046 Touch Controller: [amazon referral link](https://geni.us/raspiblitz-touchscreen) - - There are different vendors for the screen on Amazon. If the above mentioned screen is sold out you can also use these: + +*If the above mentioned LCD screen is sold out you can also use these different vendors for the screen on Amazon:* - Quimat 3,5'' Zoll Inch Touch - ELEGOO Display 3.5" Zoll TFT LCD - kuman 3.5 Inch Touch Screen TFT Monitor - Waveshare 3.5inch Display for Raspberry Pi -* Heatsink Case for RPi4 : [amazon referral link](https://geni.us/heatsink-raspi4) *You can even pay for your RaspiBlitz Amazon Shopping with Bitcoin & Lightning through [Bitrefill](https://blog.bitrefill.com/its-here-buy-amazon-vouchers-with-bitcoin-on-bitrefill-bb2a4449724a).* From d5f8a6ad5f134995061865ff571309479672eb09 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 29 Apr 2021 22:49:30 +0200 Subject: [PATCH 0029/1295] #2247 add HTTP code as debug info --- home.admin/config.scripts/blitz.subscriptions.letsencrypt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py b/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py index b3c83fc10..beecb5ef3 100755 --- a/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py +++ b/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py @@ -748,7 +748,7 @@ def subscription_detail(): except Exception as e: sub['https_response'] = 0 if sub['https_response']!=200 and len(sub['warning'])==0: - sub['warning'] = "Not able to get HTTPS response." + sub['warning'] = "Not able to get HTTPS response ({0}).".format(sub['https_response']) print(json.dumps(sub, indent=2)) From 60b84998decb2e4f8b020959c299ec074242bfde Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 30 Apr 2021 12:44:24 +0200 Subject: [PATCH 0030/1295] test refector --- home.admin/00prepareSystem.sh | 11 +++ home.admin/00provisionDialog.sh | 157 ++++++++++++++++++++++++++++++++ home.admin/00provisionInfo.sh | 14 +++ 3 files changed, 182 insertions(+) create mode 100755 home.admin/00prepareSystem.sh create mode 100755 home.admin/00provisionDialog.sh create mode 100755 home.admin/00provisionInfo.sh diff --git a/home.admin/00prepareSystem.sh b/home.admin/00prepareSystem.sh new file mode 100755 index 000000000..e09dc26c8 --- /dev/null +++ b/home.admin/00prepareSystem.sh @@ -0,0 +1,11 @@ +#!/bin/bash + + +# TODO: ON BASIC BITCOIN CONFIG +###### OPTIMIZE IF RAM >1GB +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" /home/admin/assets/bitcoin.conf + sudo sed -i "s/^maxmempool=.*/maxmempool=300/g" /home/admin/assets/bitcoin.conf +fi \ No newline at end of file diff --git a/home.admin/00provisionDialog.sh b/home.admin/00provisionDialog.sh new file mode 100755 index 000000000..e6129b2f8 --- /dev/null +++ b/home.admin/00provisionDialog.sh @@ -0,0 +1,157 @@ +#!/bin/bash +_temp=$(mktemp -p /dev/shm/) + +## get basic info +INFOFILE +source /home/admin/raspiblitz.info + +# CHECK BASICS HDD info and react to no or too small HDD + +# prepare the config file (what will later become the raspiblitz.config) +source /home/admin/_version.info +CONFIGFILE="/home/admin/raspiblitz.config.tmp" +rm $CONFIGFILE 2>/dev/null +echo "# RASPIBLITZ CONFIG FILE" > $CONFIGFILE +echo "raspiBlitzVersion='${codeVersion}'" >> $CONFIGFILE +echo "lcdrotate=1" >> $CONFIGFILE + +# prepare the setup file (that constains info just needed for the rest of setup process) +SETUPFILE="/home/admin/raspiblitz.setup.tmp" +rm $SETUPFILE 2>/dev/null +echo "# RASPIBLITZ SETUP FILE" > $SETUPFILE + +# choose blockchain or select migration +OPTIONS=() +OPTIONS+=(BITCOIN "Setup BITCOIN and Lightning (DEFAULT)") +OPTIONS+=(LITECOIN "Setup LITECOIN and Lightning (EXPERIMENTAL)") +OPTIONS+=(MIGRATION "Upload a Migration File from old RaspiBlitz") +CHOICE=$(dialog --clear \ + --backtitle "RaspiBlitz ${codeVersion} - Setup" \ + --title "⚡ Welcome to your RaspiBlitz ⚡" \ + --menu "\nChoose how you want to setup your RaspiBlitz: \n " \ + 12 64 6 \ + "${OPTIONS[@]}" \ + 2>&1 >/dev/tty) +clear +network="" +migration="raspiblitz" +case $CHOICE in + CLOSE) + # TODO: check if case every comes up + echo "CLOSE" + exit 1; + ;; + BITCOIN) + network="bitcoin" + echo "network=bitcoin" >> $CONFIGFILE + ;; + LITECOIN) + network="litecoin" + echo "network=litecoin" >> $CONFIGFILE + ;; + MIGRATION) + migration=raspiblitz + echo "migration=raspiblitz" >> $SETUPFILE + ;; +esac + +if [ "${migration}" == "raspiblitz" ]; then + + + +fi + + +sudo /home/admin/config.scripts/blitz.migration.sh "import-gui" +# on error clean & repeat +if [ "$?" = "1" ]; then + echo + echo "# clean and unmount for next try" + sudo rm -f ${defaultZipPath}/raspiblitz-*.tar.gz 2>/dev/null + sudo umount /mnt/hdd 2>/dev/null + sudo umount /mnt/storage 2>/dev/null + sudo umount /mnt/temp 2>/dev/null + sleep 2 + /home/admin/00raspiblitz.sh +fi +exit 0 + + +################### +# ENTER NAME +################### + +# welcome and ask for name of RaspiBlitz +result="" +while [ ${#result} -eq 0 ] + do + l1="Please enter the name of your new RaspiBlitz:\n" + l2="one word, keep characters basic & not too long" + dialog --backtitle "RaspiBlitz - Setup (${network}/${chain})" --inputbox "$l1$l2" 11 52 2>$_temp + result=$( cat $_temp | tr -dc '[:alnum:]-.' | tr -d ' ' ) + shred -u $_temp + echo "processing ..." + sleep 3 + done + +# set lightning alias +sed -i "s/^alias=.*/alias=${result}/g" /home/admin/assets/lnd.${network}.conf + +# store hostname for later - to be set right before the next reboot +# work around - because without a reboot the hostname seems not updates in the whole system +valueExistsInInfoFile=$(sudo cat /home/admin/raspiblitz.info | grep -c "hostname=") +if [ ${valueExistsInInfoFile} -eq 0 ]; then + # add + echo "hostname=${result}" >> /home/admin/raspiblitz.info +else + # update + sed -i "s/^hostname=.*/hostname=${result}/g" /home/admin/raspiblitz.info +fi + +################### +# ENTER PASSWORDS +################### + +# show password info dialog +dialog --backtitle "RaspiBlitz - Setup (${network}/${chain})" --msgbox "RaspiBlitz uses 4 different passwords. +Referenced as password A, B, C and D. + +A) Master User Password +B) Blockchain RPC Password +C) LND Wallet Password +D) LND Seed Password + +Choose now 4 new passwords - all min 8 chars, +no spaces and only special characters - or . +Write them down & store them in a safe place. +" 15 52 + +# call set password a script +sudo /home/admin/config.scripts/blitz.setpassword.sh a + +# sucess info dialog +dialog --backtitle "RaspiBlitz" --msgbox "OK - password A was set\nfor all users pi, admin, root & bitcoin" 6 52 + +# call set password b script +sudo /home/admin/config.scripts/blitz.setpassword.sh b + +# success info dialog +dialog --backtitle "RaspiBlitz" --msgbox "OK - RPC password changed \n\nNow starting the Setup of your RaspiBlitz." 7 52 + +################### +# TOR BY DEFAULT +# https://github.com/rootzoll/raspiblitz/issues/592 +# +################### +echo "runBehindTor=on" >> /home/admin/raspiblitz.info +#whiptail --title ' Privacy Level - How do you want to run your node? ' --yes-button='Public IP' --no-button='TOR NETWORK' --yesno "Running your Lightning node with your Public IP is common and faster, but might reveal your personal identity and location.\n +#You can better protect your privacy with running your lightning node as a TOR Hidden Service from the start, but it can make it harder to connect with other non-TOR nodes and remote mobile apps later on. +# " 12 75 +#if [ $? -eq 1 ]; then +# echo "runBehindTor=on" >> /home/admin/raspiblitz.info +#fi + +# set SetupState +sudo sed -i "s/^setupStep=.*/setupStep=20/g" /home/admin/raspiblitz.info + +clear \ No newline at end of file diff --git a/home.admin/00provisionInfo.sh b/home.admin/00provisionInfo.sh new file mode 100755 index 000000000..a2796a09c --- /dev/null +++ b/home.admin/00provisionInfo.sh @@ -0,0 +1,14 @@ +#!/bin/bash +_temp=$(mktemp -p /dev/shm/) + +## get basic info +source /home/admin/raspiblitz.info 2>/dev/null + +################### +# CHECK IF DNS NEEDS SETTING DURING SETUP +# https://github.com/rootzoll/raspiblitz/issues/787 +################### +sudo /home/admin/config.scripts/internet.dns.sh test + +# TODO: if DNS is not working --> ask in provision dialog +# TODO: get size of sd card & free space on sd card \ No newline at end of file From 80d8fa3e60df686d987e736f6ef1a10d88152915 Mon Sep 17 00:00:00 2001 From: nyxnor <69700936+nyxnor@users.noreply.github.com> Date: Fri, 30 Apr 2021 10:43:34 +0000 Subject: [PATCH 0031/1295] change force to yes on installation (#2254) --- home.admin/config.scripts/blitz.ups.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.ups.sh b/home.admin/config.scripts/blitz.ups.sh index 5cc2af090..db6b9cdfe 100755 --- a/home.admin/config.scripts/blitz.ups.sh +++ b/home.admin/config.scripts/blitz.ups.sh @@ -26,7 +26,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then # see video: https://www.youtube.com/watch?v=6UrknowJ12o # installs apcupsd.service - sudo apt-get install -f apcupsd + sudo apt-get install -y apcupsd # edit config: /etc/apcupsd/apcupsd.conf sudo systemctl stop apcupsd From 9605e6a765becfd9b5f6aac60a8e43ca01d0c448 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 30 Apr 2021 23:54:16 +0200 Subject: [PATCH 0032/1295] more status from migration --- home.admin/config.scripts/blitz.migration.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.admin/config.scripts/blitz.migration.sh b/home.admin/config.scripts/blitz.migration.sh index dd98c15b2..335811f15 100755 --- a/home.admin/config.scripts/blitz.migration.sh +++ b/home.admin/config.scripts/blitz.migration.sh @@ -41,6 +41,8 @@ scpUploadWin="scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultZipPath}" if [ "$1" = "status" ]; then echo "# RASPIBLITZ Data Import & Export" echo "isBTRFS=${isBTRFS}" + echo "localip=\"${localip}\"" + echo "defaultZipPath=\"${defaultZipPath}\"" echo "scpDownloadUnix=\"${scpDownloadUnix}\"" echo "scpUploadUnix=\"${scpUploadUnix}\"" echo "scpDownloadWin=\"${scpDownloadWin}\"" From 3abbb38d728164fe4fac7d0a9792a84da7f2368e Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 00:23:49 +0200 Subject: [PATCH 0033/1295] basic migration ssh dialog --- home.admin/00migrationDialog.sh | 237 ++++++++++++++++++++++++++++++++ 1 file changed, 237 insertions(+) create mode 100755 home.admin/00migrationDialog.sh diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh new file mode 100755 index 000000000..1cf0d33d4 --- /dev/null +++ b/home.admin/00migrationDialog.sh @@ -0,0 +1,237 @@ +#!/bin/bash + +# TODO: also the migration might need to be adapted to work with an already mounted HDD later + +# command info +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then + echo "# dialog to get all data needed for migration-setup" + echo "# 00migrationDialog.sh [raspiblitz|mynode|umbrel]" + exit 1 +fi + +## get basic info +source /home/admin/raspiblitz.info + +# tempfile for result of dialogs +_temp=$(mktemp -p /dev/shm/) + +# prepare the setup file (that constains info just needed for the rest of setup process) +SETUPFILE="/home/admin/raspiblitz.setup.tmp" +rm $SETUPFILE 2>/dev/null +echo "# RASPIBLITZ SETUP FILE" > $SETUPFILE + +# flags of what passwords are to set by user +setPasswordA=1 +setPasswordB=0 +setPasswordC=0 + +# 1st PARAMATER: [raspiblitz|mynode|umbrel] +migrationOS="$1" +if [ "${migrationOS}" != "raspiblitz" ] && [ "${migrationOS}" != "mynode" ] && [ "${migrationOS}" != "raspiblitz" ]; then + echo "parameter1(${migrationOS})" + echo "error='not supported'" + exit 1 +fi + +# 2nd PARAMATER (optional): the version of the former fullnode OS if available +migrationVersion="$2" + +#################################################### +# RASPIBLITZ +# migrating from other hardware with migration file +#################################################### + +if [ "${migrationOS}" == "raspiblitz" ]; then + + # infodialog + whiptail --title " IMPORT MIGRATION FILE " --yes-button "Upload File" --no-button "Ignore" --yesno "RaspiBlitz found data from UMBREL + +You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. + +Please make sure to have your UMBREL seed words & static channel backup file (just in case). Also any data of additional apps you had installed on UMBREL might get lost. + +Do you want to start migration to RaspiBlitz now? + " 16 58 + + if [ $? -eq 0 ]; then + # write migration info + echo "migrationOS='${migrationOS}'" >> $SETUPFILE + echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE + else + # user cancel - request shutdown + echo "shutdown=1" >> $SETUPFILE + exit 1 + fi + + # get defaultZipPath, localIP, etc + source <(sudo /home/admin/config.scripts/blitz.migration.sh status) + + # make sure that temp directory exists and can be written by admin + sudo mkdir -p ${defaultZipPath} + sudo chmod 777 -R ${defaultZipPath} + + # scp upload info + clear + echo + echo "*****************************" + echo "* UPLOAD THE MIGRATION FILE *" + echo "*****************************" + echo "If you have a migration file on your laptop you can now" + echo "upload it and restore on the new HDD/SSD." + echo + echo "ON YOUR LAPTOP open a new terminal and change into" + echo "the directory where your migration file is and" + echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" + echo "scp -r ./raspiblitz-*.tar.gz admin@${localip}:${defaultZipPath}" + echo "" + echo "Use password 'raspiblitz' to authenticate file transfer." + echo "PRESS ENTER when upload is done." + read key + + countZips=$(sudo ls ${defaultZipPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz-') + + # in case no upload found + if [ ${countZips} -eq 0 ]; then + echo + echo "FAIL: Was not able to detect uploaded file in ${defaultZipPath}" + echo "Shutting down ... please make fesh sd card & try again." + sleep 3 + echo "shutdown=1" >> $SETUPFILE + exit 1 + fi + + # in case of multiple files + if [ ${countZips} -gt 1 ]; then + echo + echo "# FAIL: Multiple possible files detected in ${defaultZipPath}" + echo "Shutting down ... please make fesh sd card & try again." + sleep 3 + echo "shutdown=1" >> $SETUPFILE + exit 1 + fi + + # further checks and unpacking will be done when migration is processed (not part of dialog) + + echo + echo "OK: Migration data was imported - will now try to recover/restore RaspiBlitz with this data" + echo "PRESS ENTER TO CONTINUE" + read key + + # user needs to reset password A + setPasswordA=1 + +fi + +#################################################### +# UMBREL +# migrating from Umbrel to RaspiBlitz +#################################################### + +if [ "${migrationOS}" == "umbrel" ]; then + + # infodialog + whiptail --title " UMBREL --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Ignore" --yesno "RaspiBlitz found data from UMBREL + +You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. + +Please make sure to have your UMBREL seed words & static channel backup file (just in case). Also any data of additional apps you had installed on UMBREL might get lost. + +Do you want to start migration to RaspiBlitz now? + " 16 58 + + if [ $? -eq 0 ]; then + # write migration info + echo "migrationOS='umbrel'" >> $SETUPFILE + echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE + else + # user cancel - request shutdown + echo "shutdown=1" >> $SETUPFILE + exit 1 + fi + + # user needs to reset password A + setPasswordA=1 + setPasswordB=1 + setPasswordC=1 + +fi + +#################################################### +# MYNODE +# migrating from myNode to RaspiBlitz +#################################################### + +if [ "${migrationOS}" == "mynode" ]; then + + # infodialog + whiptail --title " MYNODE --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Ignore" --yesno "RaspiBlitz found data from MYNODE + +You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. + +Please make sure to have your MYNODE seed words & static channel backup file (just in case). Also any data of additional apps you had installed on MYNODE might get lost. + +Do you want to start migration to RaspiBlitz now? + " 16 58 + + if [ $? -eq 0 ]; then + # write migration info + echo "migrationOS='mynode'" >> $SETUPFILE + echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE + else + # user cancel - request shutdown + echo "shutdown=1" >> $SETUPFILE + exit 1 + fi + + # user needs to reset password A + setPasswordA=1 + setPasswordB=1 + setPasswordC=1 + +fi + +#################################################### +# INPUT PASSWORDS (based on flags above set) + +# dynamic info string on what passwords need to be changed +passwordinfo="A" # always so far +if [ ${setPasswordB} -eq 1 ]; then + passwordinfo = "${passwordinfo}, B" +fi +if [ ${setPasswordC} -eq 1 ]; then + passwordinfo = "${passwordinfo}, C" +fi + +# basic information in RaspiBlitz passwords +dialog --backtitle "RaspiBlitz - Migration Setup" --msgbox "You will need to set new passwords. + +In general RaspiBlitz works with 3 different passwords: +PASSWORD A) Main User Password (SSH & WebUI, sudo) +PASSWORD B) APP Password (RPC & Additional Apps) +PASSWORD C) Lightning Wallet Unlock Password + +You will need to set Password: ${passwordinfo} +(other passwords might stay like on your old node) + +Follow Password Rules: Minimal of 8 chars, +no spaces and only special characters - or . +Write them down & store them in a safe place. +" 17 52 + +if [ ${setPasswordA} -eq 1 ]; then + sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD A - Main User Password" $_temp + password=$(sudo cat $_temp) + echo "passwordA='${password}'" >> $SETUPFILE +fi + +if [ ${setPasswordB} -eq 1 ]; then + sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD B - APP Password" $_temp + password=$(sudo cat $_temp) + echo "passwordB='${password}'" >> $SETUPFILE +fi + +if [ ${setPasswordC} -eq 1 ]; then + sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD C - Lightning Wallet Password" $_temp + password=$(sudo cat $_temp) + echo "passwordC='${password}'" >> $SETUPFILE +fi \ No newline at end of file From c78f110a9e8311094f8d08b31cd9d35558629a08 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 00:33:14 +0200 Subject: [PATCH 0034/1295] rename cancel --- home.admin/00migrationDialog.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 1cf0d33d4..62b05594e 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -44,7 +44,7 @@ migrationVersion="$2" if [ "${migrationOS}" == "raspiblitz" ]; then # infodialog - whiptail --title " IMPORT MIGRATION FILE " --yes-button "Upload File" --no-button "Ignore" --yesno "RaspiBlitz found data from UMBREL + whiptail --title " IMPORT MIGRATION FILE " --yes-button "Upload File" --no-button "Shutdown" --yesno "RaspiBlitz found data from UMBREL You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. @@ -130,7 +130,7 @@ fi if [ "${migrationOS}" == "umbrel" ]; then # infodialog - whiptail --title " UMBREL --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Ignore" --yesno "RaspiBlitz found data from UMBREL + whiptail --title " UMBREL --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Shutdown" --yesno "RaspiBlitz found data from UMBREL You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. @@ -164,7 +164,7 @@ fi if [ "${migrationOS}" == "mynode" ]; then # infodialog - whiptail --title " MYNODE --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Ignore" --yesno "RaspiBlitz found data from MYNODE + whiptail --title " MYNODE --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Shutdown" --yesno "RaspiBlitz found data from MYNODE You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. From ff752e853b623749ebd04bd1fc65e868bdba3ffe Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 00:34:29 +0200 Subject: [PATCH 0035/1295] cancel/shutdown --- home.admin/00migrationDialog.sh | 6 +-- home.admin/00provisionDialog.sh | 84 +++++++++++++++++++++++++-------- 2 files changed, 68 insertions(+), 22 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 62b05594e..04adad791 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -44,7 +44,7 @@ migrationVersion="$2" if [ "${migrationOS}" == "raspiblitz" ]; then # infodialog - whiptail --title " IMPORT MIGRATION FILE " --yes-button "Upload File" --no-button "Shutdown" --yesno "RaspiBlitz found data from UMBREL + whiptail --title " IMPORT MIGRATION FILE " --yes-button "Upload File" --no-button "Cancel/Shutdown" --yesno "RaspiBlitz found data from UMBREL You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. @@ -130,7 +130,7 @@ fi if [ "${migrationOS}" == "umbrel" ]; then # infodialog - whiptail --title " UMBREL --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Shutdown" --yesno "RaspiBlitz found data from UMBREL + whiptail --title " UMBREL --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Cancel/Shutdown" --yesno "RaspiBlitz found data from UMBREL You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. @@ -164,7 +164,7 @@ fi if [ "${migrationOS}" == "mynode" ]; then # infodialog - whiptail --title " MYNODE --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Shutdown" --yesno "RaspiBlitz found data from MYNODE + whiptail --title " MYNODE --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Cancel/Shutdown" --yesno "RaspiBlitz found data from MYNODE You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. diff --git a/home.admin/00provisionDialog.sh b/home.admin/00provisionDialog.sh index e6129b2f8..22ffa34dd 100755 --- a/home.admin/00provisionDialog.sh +++ b/home.admin/00provisionDialog.sh @@ -2,10 +2,10 @@ _temp=$(mktemp -p /dev/shm/) ## get basic info -INFOFILE source /home/admin/raspiblitz.info -# CHECK BASICS HDD info and react to no or too small HDD +# set place where zipped TAR file gets stored on migration dialog +defaultZipPath="/mnt/hdd/temp" # prepare the config file (what will later become the raspiblitz.config) source /home/admin/_version.info @@ -34,7 +34,7 @@ CHOICE=$(dialog --clear \ 2>&1 >/dev/tty) clear network="" -migration="raspiblitz" +migration="" case $CHOICE in CLOSE) # TODO: check if case every comes up @@ -50,33 +50,79 @@ case $CHOICE in echo "network=litecoin" >> $CONFIGFILE ;; MIGRATION) - migration=raspiblitz + migration="raspiblitz" echo "migration=raspiblitz" >> $SETUPFILE ;; esac +# IMPORT MIGRATION DIALOG +# if fails then restart the complete provision dialog if [ "${migration}" == "raspiblitz" ]; then + # make sure that temp directory exists and can be written by admin + sudo mkdir -p ${defaultZipPath} + sudo chmod 777 -R ${defaultZipPath} + clear + echo + echo "*****************************" + echo "* UPLOAD THE MIGRATION FILE *" + echo "*****************************" + echo "If you have a migration file on your laptop you can now" + echo "upload it and restore on the new HDD/SSD." + echo + echo "ON YOUR LAPTOP open a new terminal and change into" + echo "the directory where your migration file is and" + echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" + echo "scp -r ./raspiblitz-*.tar.gz admin@${localip}:${defaultZipPath}" + echo "" + echo "Use password 'raspiblitz' to authenticate file transfer." + echo "PRESS ENTER when upload is done." + read key + countZips=$(sudo ls ${defaultZipPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz-') + + # in case no upload found + if [ ${countZips} -eq 0 ]; then + echo + echo "FAIL: Was not able to detect uploaded file in ${defaultZipPath}" + echo "error='no file found'" + sleep 3 + /home/admin/00provisionDialog.sh + exit 1 + fi + + # in case of multiple files + if [ ${countZips} -gt 1 ]; then + echo + echo "# FAIL: Multiple possible files detected in ${defaultZipPath}" + echo "error='multiple files'" + sleep 3 + /home/admin/00provisionDialog.sh + exit 1 + fi + + # unzip migration file and check + echo + echo "OK: Upload found in ${defaultZipPath} - restoring data ... (please wait)" + source <(sudo /home/admin/config.scripts/blitz.migration.sh "import") + if [ ${#error} -gt 0 ]; then + echo + echo "# FAIL: Was not able to restore data" + echo "error='${error}'" + sleep 3 + /home/admin/00provisionDialog.sh + exit 1 + fi + + echo + echo "OK: Migration data was imported - will now recover/restore RaspiBlitz with this data" + echo "PRESS ENTER TO CONTINUE" + read key + exit 0 fi -sudo /home/admin/config.scripts/blitz.migration.sh "import-gui" -# on error clean & repeat -if [ "$?" = "1" ]; then - echo - echo "# clean and unmount for next try" - sudo rm -f ${defaultZipPath}/raspiblitz-*.tar.gz 2>/dev/null - sudo umount /mnt/hdd 2>/dev/null - sudo umount /mnt/storage 2>/dev/null - sudo umount /mnt/temp 2>/dev/null - sleep 2 - /home/admin/00raspiblitz.sh -fi -exit 0 - - ################### # ENTER NAME ################### From f90ced107c825f4e373b4e06d15a4c6cdfe8e385 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 00:36:12 +0200 Subject: [PATCH 0036/1295] shutdown --- home.admin/00migrationDialog.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 04adad791..62b05594e 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -44,7 +44,7 @@ migrationVersion="$2" if [ "${migrationOS}" == "raspiblitz" ]; then # infodialog - whiptail --title " IMPORT MIGRATION FILE " --yes-button "Upload File" --no-button "Cancel/Shutdown" --yesno "RaspiBlitz found data from UMBREL + whiptail --title " IMPORT MIGRATION FILE " --yes-button "Upload File" --no-button "Shutdown" --yesno "RaspiBlitz found data from UMBREL You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. @@ -130,7 +130,7 @@ fi if [ "${migrationOS}" == "umbrel" ]; then # infodialog - whiptail --title " UMBREL --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Cancel/Shutdown" --yesno "RaspiBlitz found data from UMBREL + whiptail --title " UMBREL --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Shutdown" --yesno "RaspiBlitz found data from UMBREL You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. @@ -164,7 +164,7 @@ fi if [ "${migrationOS}" == "mynode" ]; then # infodialog - whiptail --title " MYNODE --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Cancel/Shutdown" --yesno "RaspiBlitz found data from MYNODE + whiptail --title " MYNODE --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Shutdown" --yesno "RaspiBlitz found data from MYNODE You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. From 121b76f9279b0fa501d7bd9a0ce6761dcf727969 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 00:39:18 +0200 Subject: [PATCH 0037/1295] password info --- home.admin/00migrationDialog.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 62b05594e..91148a806 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -205,7 +205,7 @@ fi # basic information in RaspiBlitz passwords dialog --backtitle "RaspiBlitz - Migration Setup" --msgbox "You will need to set new passwords. -In general RaspiBlitz works with 3 different passwords: +RaspiBlitz works with 3 different passwords: PASSWORD A) Main User Password (SSH & WebUI, sudo) PASSWORD B) APP Password (RPC & Additional Apps) PASSWORD C) Lightning Wallet Unlock Password @@ -216,7 +216,7 @@ You will need to set Password: ${passwordinfo} Follow Password Rules: Minimal of 8 chars, no spaces and only special characters - or . Write them down & store them in a safe place. -" 17 52 +" 17 64 if [ ${setPasswordA} -eq 1 ]; then sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD A - Main User Password" $_temp From 8e00e909351459eebc0b44d7b236c353157c7640 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 00:46:09 +0200 Subject: [PATCH 0038/1295] set password sets --- home.admin/00migrationDialog.sh | 3 +++ home.admin/config.scripts/blitz.setpassword.sh | 3 --- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 91148a806..92796b5c2 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -222,16 +222,19 @@ if [ ${setPasswordA} -eq 1 ]; then sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD A - Main User Password" $_temp password=$(sudo cat $_temp) echo "passwordA='${password}'" >> $SETUPFILE + dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password A set" 7 20 fi if [ ${setPasswordB} -eq 1 ]; then sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD B - APP Password" $_temp password=$(sudo cat $_temp) echo "passwordB='${password}'" >> $SETUPFILE + dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password B set" 7 20 fi if [ ${setPasswordC} -eq 1 ]; then sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD C - Lightning Wallet Password" $_temp password=$(sudo cat $_temp) echo "passwordC='${password}'" >> $SETUPFILE + dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password C set" 7 20 fi \ No newline at end of file diff --git a/home.admin/config.scripts/blitz.setpassword.sh b/home.admin/config.scripts/blitz.setpassword.sh index 9e7c6f14d..9f43fa998 100755 --- a/home.admin/config.scripts/blitz.setpassword.sh +++ b/home.admin/config.scripts/blitz.setpassword.sh @@ -69,9 +69,6 @@ if [ ${#abcd} -eq 0 ]; then esac fi -echo "Changing Password ${abcd} ..." -echo "" - ############################ # PASSWORD A if [ "${abcd}" = "a" ]; then From b17043d51458160aa75804b65ff903e2be0a1e5e Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 00:48:15 +0200 Subject: [PATCH 0039/1295] clear info --- home.admin/00migrationDialog.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 92796b5c2..bc39c8708 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -217,6 +217,7 @@ Follow Password Rules: Minimal of 8 chars, no spaces and only special characters - or . Write them down & store them in a safe place. " 17 64 +clear if [ ${setPasswordA} -eq 1 ]; then sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD A - Main User Password" $_temp From fa965a6bd6ae5e5f488b76e45096b1fb29509e41 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 00:52:31 +0200 Subject: [PATCH 0040/1295] change text --- home.admin/00migrationDialog.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index bc39c8708..aece87c1e 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -208,7 +208,7 @@ dialog --backtitle "RaspiBlitz - Migration Setup" --msgbox "You will need to set RaspiBlitz works with 3 different passwords: PASSWORD A) Main User Password (SSH & WebUI, sudo) PASSWORD B) APP Password (RPC & Additional Apps) -PASSWORD C) Lightning Wallet Unlock Password +PASSWORD C) Lightning Wallet Password for Unlock You will need to set Password: ${passwordinfo} (other passwords might stay like on your old node) @@ -217,9 +217,9 @@ Follow Password Rules: Minimal of 8 chars, no spaces and only special characters - or . Write them down & store them in a safe place. " 17 64 -clear if [ ${setPasswordA} -eq 1 ]; then + clear sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD A - Main User Password" $_temp password=$(sudo cat $_temp) echo "passwordA='${password}'" >> $SETUPFILE @@ -227,6 +227,7 @@ if [ ${setPasswordA} -eq 1 ]; then fi if [ ${setPasswordB} -eq 1 ]; then + clear sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD B - APP Password" $_temp password=$(sudo cat $_temp) echo "passwordB='${password}'" >> $SETUPFILE @@ -234,6 +235,7 @@ if [ ${setPasswordB} -eq 1 ]; then fi if [ ${setPasswordC} -eq 1 ]; then + clear sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD C - Lightning Wallet Password" $_temp password=$(sudo cat $_temp) echo "passwordC='${password}'" >> $SETUPFILE From 8aab2fd700e8bcc2d81276a94cb9d06051fa9385 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 01:06:55 +0200 Subject: [PATCH 0041/1295] change setup file --- home.admin/00migrationDialog.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index aece87c1e..3a58ee4e5 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -16,7 +16,7 @@ source /home/admin/raspiblitz.info _temp=$(mktemp -p /dev/shm/) # prepare the setup file (that constains info just needed for the rest of setup process) -SETUPFILE="/home/admin/raspiblitz.setup.tmp" +SETUPFILE="/home/admin/raspiblitz.setup" rm $SETUPFILE 2>/dev/null echo "# RASPIBLITZ SETUP FILE" > $SETUPFILE @@ -240,4 +240,9 @@ if [ ${setPasswordC} -eq 1 ]; then password=$(sudo cat $_temp) echo "passwordC='${password}'" >> $SETUPFILE dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password C set" 7 20 -fi \ No newline at end of file +fi + +clear +echo "# data from dialogs stored in to be further processed:" +echo "${SETUPFILE}" +exit 0 \ No newline at end of file From e2d80a4a57fa14ee81daf7963163d30d8991f65d Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 01:08:59 +0200 Subject: [PATCH 0042/1295] fix parameter check --- home.admin/00migrationDialog.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 3a58ee4e5..3de1c2a82 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -27,7 +27,7 @@ setPasswordC=0 # 1st PARAMATER: [raspiblitz|mynode|umbrel] migrationOS="$1" -if [ "${migrationOS}" != "raspiblitz" ] && [ "${migrationOS}" != "mynode" ] && [ "${migrationOS}" != "raspiblitz" ]; then +if [ "${migrationOS}" != "raspiblitz" ] && [ "${migrationOS}" != "mynode" ] && [ "${migrationOS}" != "umbrel" ]; then echo "parameter1(${migrationOS})" echo "error='not supported'" exit 1 From d5971c00068109575b7668df011ae4baf60aadb9 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 01:22:38 +0200 Subject: [PATCH 0043/1295] remove info dialog from raspiblitz migration --- home.admin/00migrationDialog.sh | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 3de1c2a82..7d32a03b8 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -43,25 +43,9 @@ migrationVersion="$2" if [ "${migrationOS}" == "raspiblitz" ]; then - # infodialog - whiptail --title " IMPORT MIGRATION FILE " --yes-button "Upload File" --no-button "Shutdown" --yesno "RaspiBlitz found data from UMBREL - -You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. - -Please make sure to have your UMBREL seed words & static channel backup file (just in case). Also any data of additional apps you had installed on UMBREL might get lost. - -Do you want to start migration to RaspiBlitz now? - " 16 58 - - if [ $? -eq 0 ]; then - # write migration info - echo "migrationOS='${migrationOS}'" >> $SETUPFILE - echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE - else - # user cancel - request shutdown - echo "shutdown=1" >> $SETUPFILE - exit 1 - fi + # write migration info + echo "migrationOS='${migrationOS}'" >> $SETUPFILE + echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE # get defaultZipPath, localIP, etc source <(sudo /home/admin/config.scripts/blitz.migration.sh status) @@ -111,7 +95,6 @@ Do you want to start migration to RaspiBlitz now? fi # further checks and unpacking will be done when migration is processed (not part of dialog) - echo echo "OK: Migration data was imported - will now try to recover/restore RaspiBlitz with this data" echo "PRESS ENTER TO CONTINUE" From 7e2c34c36d92d83e2446f9a07353d8dda4874752 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 01:26:39 +0200 Subject: [PATCH 0044/1295] fix typo --- home.admin/00migrationDialog.sh | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 7d32a03b8..233e94fb0 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -76,9 +76,8 @@ if [ "${migrationOS}" == "raspiblitz" ]; then # in case no upload found if [ ${countZips} -eq 0 ]; then - echo echo "FAIL: Was not able to detect uploaded file in ${defaultZipPath}" - echo "Shutting down ... please make fesh sd card & try again." + echo "Shutting down ... please make a fresh sd card & try again." sleep 3 echo "shutdown=1" >> $SETUPFILE exit 1 @@ -86,19 +85,16 @@ if [ "${migrationOS}" == "raspiblitz" ]; then # in case of multiple files if [ ${countZips} -gt 1 ]; then - echo echo "# FAIL: Multiple possible files detected in ${defaultZipPath}" - echo "Shutting down ... please make fesh sd card & try again." + echo "Shutting down ... please make a fresh sd card & try again." sleep 3 echo "shutdown=1" >> $SETUPFILE exit 1 fi # further checks and unpacking will be done when migration is processed (not part of dialog) - echo - echo "OK: Migration data was imported - will now try to recover/restore RaspiBlitz with this data" - echo "PRESS ENTER TO CONTINUE" - read key + echo "OK: Migration data was imported - will process after password reset" + sleep 4 # user needs to reset password A setPasswordA=1 From 870404a2fb9d2ff891224132ffd03a69fce4952b Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 01:48:31 +0200 Subject: [PATCH 0045/1295] change upload path --- home.admin/config.scripts/blitz.migration.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.migration.sh b/home.admin/config.scripts/blitz.migration.sh index 335811f15..b8092a301 100755 --- a/home.admin/config.scripts/blitz.migration.sh +++ b/home.admin/config.scripts/blitz.migration.sh @@ -26,7 +26,7 @@ isMounted=$(sudo df | grep -c /mnt/hdd) isBTRFS=$(lsblk -o FSTYPE,MOUNTPOINT | grep /mnt/hdd | awk '$1=$1' | cut -d " " -f 1 | grep -c btrfs) # set place where zipped TAR file gets stored -defaultZipPath="/mnt/hdd/temp" +defaultZipPath="/mnt/hdd/temp/migration" # get local ip source <(/home/admin/config.scripts/internet.sh status local) From cadefa666dbd267d5b0f505b0420791449f12024 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 01:51:05 +0200 Subject: [PATCH 0046/1295] add chown --- home.admin/00migrationDialog.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 233e94fb0..e639baf5a 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -53,6 +53,7 @@ if [ "${migrationOS}" == "raspiblitz" ]; then # make sure that temp directory exists and can be written by admin sudo mkdir -p ${defaultZipPath} sudo chmod 777 -R ${defaultZipPath} + sudo chown admin:admin ${defaultZipPath} # scp upload info clear From 4a80e9d44c117aafaa5f05572ede8572275720de Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 01:54:22 +0200 Subject: [PATCH 0047/1295] clear directory --- home.admin/00migrationDialog.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index e639baf5a..0840915c7 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -50,10 +50,10 @@ if [ "${migrationOS}" == "raspiblitz" ]; then # get defaultZipPath, localIP, etc source <(sudo /home/admin/config.scripts/blitz.migration.sh status) - # make sure that temp directory exists and can be written by admin - sudo mkdir -p ${defaultZipPath} - sudo chmod 777 -R ${defaultZipPath} - sudo chown admin:admin ${defaultZipPath} + # make sure that temp directory exists, is clear and can be written by admin + sudo mkdir -p ${defaultZipPath} 2>/dev/null + sudo rm /mnt/hdd/temp/migration/* + sudo chown -R admin:admin ${defaultZipPath} # scp upload info clear From ddd3e952cfaadbfc255523a2bf1f8bcecef1fca9 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 02:07:40 +0200 Subject: [PATCH 0048/1295] try with user bitcoin --- home.admin/00migrationDialog.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 0840915c7..aec01b9d8 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -50,10 +50,10 @@ if [ "${migrationOS}" == "raspiblitz" ]; then # get defaultZipPath, localIP, etc source <(sudo /home/admin/config.scripts/blitz.migration.sh status) - # make sure that temp directory exists, is clear and can be written by admin + # make sure that temp directory exists, is clear and can be written by user bitcoin sudo mkdir -p ${defaultZipPath} 2>/dev/null - sudo rm /mnt/hdd/temp/migration/* - sudo chown -R admin:admin ${defaultZipPath} + sudo rm /mnt/hdd/temp/migration/* 2>/dev/null + sudo chown -R bitcoin:bitcoin ${defaultZipPath} 2>/dev/null # scp upload info clear @@ -67,7 +67,7 @@ if [ "${migrationOS}" == "raspiblitz" ]; then echo "ON YOUR LAPTOP open a new terminal and change into" echo "the directory where your migration file is and" echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" - echo "scp -r ./raspiblitz-*.tar.gz admin@${localip}:${defaultZipPath}" + echo "scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultZipPath}" echo "" echo "Use password 'raspiblitz' to authenticate file transfer." echo "PRESS ENTER when upload is done." From 4f885a755f2b18023232e1bb9b9aa67d88b4e454 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 02:11:28 +0200 Subject: [PATCH 0049/1295] add migration file --- home.admin/00migrationDialog.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index aec01b9d8..c21ae83eb 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -95,6 +95,7 @@ if [ "${migrationOS}" == "raspiblitz" ]; then # further checks and unpacking will be done when migration is processed (not part of dialog) echo "OK: Migration data was imported - will process after password reset" + echo "migrationFile='${defaultZipPath}'" >> $SETUPFILE sleep 4 # user needs to reset password A From 9acdc1d0395a2db377eec42095965d797bc1def5 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 02:19:03 +0200 Subject: [PATCH 0050/1295] exit to terminal --- home.admin/00provisionDialog.sh | 106 +++++++------------------------- 1 file changed, 21 insertions(+), 85 deletions(-) diff --git a/home.admin/00provisionDialog.sh b/home.admin/00provisionDialog.sh index 22ffa34dd..4105d6014 100755 --- a/home.admin/00provisionDialog.sh +++ b/home.admin/00provisionDialog.sh @@ -4,22 +4,6 @@ _temp=$(mktemp -p /dev/shm/) ## get basic info source /home/admin/raspiblitz.info -# set place where zipped TAR file gets stored on migration dialog -defaultZipPath="/mnt/hdd/temp" - -# prepare the config file (what will later become the raspiblitz.config) -source /home/admin/_version.info -CONFIGFILE="/home/admin/raspiblitz.config.tmp" -rm $CONFIGFILE 2>/dev/null -echo "# RASPIBLITZ CONFIG FILE" > $CONFIGFILE -echo "raspiBlitzVersion='${codeVersion}'" >> $CONFIGFILE -echo "lcdrotate=1" >> $CONFIGFILE - -# prepare the setup file (that constains info just needed for the rest of setup process) -SETUPFILE="/home/admin/raspiblitz.setup.tmp" -rm $SETUPFILE 2>/dev/null -echo "# RASPIBLITZ SETUP FILE" > $SETUPFILE - # choose blockchain or select migration OPTIONS=() OPTIONS+=(BITCOIN "Setup BITCOIN and Lightning (DEFAULT)") @@ -34,7 +18,6 @@ CHOICE=$(dialog --clear \ 2>&1 >/dev/tty) clear network="" -migration="" case $CHOICE in CLOSE) # TODO: check if case every comes up @@ -47,81 +30,34 @@ case $CHOICE in ;; LITECOIN) network="litecoin" - echo "network=litecoin" >> $CONFIGFILE ;; MIGRATION) - migration="raspiblitz" - echo "migration=raspiblitz" >> $SETUPFILE + # send over to the migration dialogs + /home/admin/00migrationDialog.sh raspiblitz + exit 0 ;; esac -# IMPORT MIGRATION DIALOG -# if fails then restart the complete provision dialog -if [ "${migration}" == "raspiblitz" ]; then - - # make sure that temp directory exists and can be written by admin - sudo mkdir -p ${defaultZipPath} - sudo chmod 777 -R ${defaultZipPath} - - clear - echo - echo "*****************************" - echo "* UPLOAD THE MIGRATION FILE *" - echo "*****************************" - echo "If you have a migration file on your laptop you can now" - echo "upload it and restore on the new HDD/SSD." - echo - echo "ON YOUR LAPTOP open a new terminal and change into" - echo "the directory where your migration file is and" - echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" - echo "scp -r ./raspiblitz-*.tar.gz admin@${localip}:${defaultZipPath}" - echo "" - echo "Use password 'raspiblitz' to authenticate file transfer." - echo "PRESS ENTER when upload is done." - read key - - countZips=$(sudo ls ${defaultZipPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz-') - - # in case no upload found - if [ ${countZips} -eq 0 ]; then - echo - echo "FAIL: Was not able to detect uploaded file in ${defaultZipPath}" - echo "error='no file found'" - sleep 3 - /home/admin/00provisionDialog.sh - exit 1 - fi - - # in case of multiple files - if [ ${countZips} -gt 1 ]; then - echo - echo "# FAIL: Multiple possible files detected in ${defaultZipPath}" - echo "error='multiple files'" - sleep 3 - /home/admin/00provisionDialog.sh - exit 1 - fi - - # unzip migration file and check - echo - echo "OK: Upload found in ${defaultZipPath} - restoring data ... (please wait)" - source <(sudo /home/admin/config.scripts/blitz.migration.sh "import") - if [ ${#error} -gt 0 ]; then - echo - echo "# FAIL: Was not able to restore data" - echo "error='${error}'" - sleep 3 - /home/admin/00provisionDialog.sh - exit 1 - fi - - echo - echo "OK: Migration data was imported - will now recover/restore RaspiBlitz with this data" - echo "PRESS ENTER TO CONTINUE" - read key - exit 0 +# on cancel - exit to terminal +if [ "${network}" == "" ]; then + echo "# exit to terminal" + exit 1 fi +# prepare the config file (what will later become the raspiblitz.config) +source /home/admin/_version.info +CONFIGFILE="/home/admin/raspiblitz.config.tmp" +rm $CONFIGFILE 2>/dev/null +echo "# RASPIBLITZ CONFIG FILE" > $CONFIGFILE +echo "raspiBlitzVersion='${codeVersion}'" >> $CONFIGFILE +echo "lcdrotate=1" >> $CONFIGFILE +echo "network=${network}" >> $CONFIGFILE +echo "chain=main" >> $CONFIGFILE + +# prepare the setup file (that constains info just needed for the rest of setup process) +SETUPFILE="/home/admin/raspiblitz.setup.tmp" +rm $SETUPFILE 2>/dev/null +echo "# RASPIBLITZ SETUP FILE" > $SETUPFILE ################### # ENTER NAME From 0ff45a80a5ab917fab188e5f4c17ac6fac28d8bb Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 02:19:53 +0200 Subject: [PATCH 0051/1295] remove old config file value --- home.admin/00provisionDialog.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/home.admin/00provisionDialog.sh b/home.admin/00provisionDialog.sh index 4105d6014..08384f920 100755 --- a/home.admin/00provisionDialog.sh +++ b/home.admin/00provisionDialog.sh @@ -26,7 +26,6 @@ case $CHOICE in ;; BITCOIN) network="bitcoin" - echo "network=bitcoin" >> $CONFIGFILE ;; LITECOIN) network="litecoin" From 3a4c6eb42753f00905e081773d9c14a37fbab0e8 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 02:42:22 +0200 Subject: [PATCH 0052/1295] extend initial choice --- home.admin/00provisionDialog.sh | 34 +++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/home.admin/00provisionDialog.sh b/home.admin/00provisionDialog.sh index 08384f920..ab30c8901 100755 --- a/home.admin/00provisionDialog.sh +++ b/home.admin/00provisionDialog.sh @@ -1,34 +1,39 @@ #!/bin/bash -_temp=$(mktemp -p /dev/shm/) -## get basic info +# get basic info source /home/admin/raspiblitz.info +# temp file for dialog results +_temp=$(mktemp -p /dev/shm/) + # choose blockchain or select migration OPTIONS=() -OPTIONS+=(BITCOIN "Setup BITCOIN and Lightning (DEFAULT)") -OPTIONS+=(LITECOIN "Setup LITECOIN and Lightning (EXPERIMENTAL)") +OPTIONS+=(BITCOIN1 "Setup BITCOIN & Lightning Network Daemon (LND)") +OPTIONS+=(BITCOIN2 "Setup BITCOIN & c-lightning by blockstream") +OPTIONS+=(LITECOIN "Setup LITECOIN & Lightning Network Daemon (LND)") OPTIONS+=(MIGRATION "Upload a Migration File from old RaspiBlitz") CHOICE=$(dialog --clear \ --backtitle "RaspiBlitz ${codeVersion} - Setup" \ --title "⚡ Welcome to your RaspiBlitz ⚡" \ --menu "\nChoose how you want to setup your RaspiBlitz: \n " \ - 12 64 6 \ + 13 64 7 \ "${OPTIONS[@]}" \ 2>&1 >/dev/tty) clear network="" +lightning="" case $CHOICE in - CLOSE) - # TODO: check if case every comes up - echo "CLOSE" - exit 1; - ;; - BITCOIN) + BITCOIN1) network="bitcoin" + lightning="lnd" + ;; + BITCOIN2) + network="bitcoin" + lightning="cln" ;; LITECOIN) network="litecoin" + lightning="lnd" ;; MIGRATION) # send over to the migration dialogs @@ -39,7 +44,8 @@ esac # on cancel - exit to terminal if [ "${network}" == "" ]; then - echo "# exit to terminal" + echo "# you selected cancel - exited to terminal" + echo "# use command to reboot --> restart" exit 1 fi @@ -50,6 +56,7 @@ rm $CONFIGFILE 2>/dev/null echo "# RASPIBLITZ CONFIG FILE" > $CONFIGFILE echo "raspiBlitzVersion='${codeVersion}'" >> $CONFIGFILE echo "lcdrotate=1" >> $CONFIGFILE +echo "lightning=${lightning}" >> $CONFIGFILE echo "network=${network}" >> $CONFIGFILE echo "chain=main" >> $CONFIGFILE @@ -58,6 +65,9 @@ SETUPFILE="/home/admin/raspiblitz.setup.tmp" rm $SETUPFILE 2>/dev/null echo "# RASPIBLITZ SETUP FILE" > $SETUPFILE +echo "TODO: continue with further " +exit 1 + ################### # ENTER NAME ################### From 7d3b3a19a5dec218af86d5565ed66ad57521a192 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 15:49:13 +0200 Subject: [PATCH 0053/1295] provision dialog rework --- home.admin/00provisionDialog.sh | 157 ++++++++++++++++++++++---------- 1 file changed, 110 insertions(+), 47 deletions(-) diff --git a/home.admin/00provisionDialog.sh b/home.admin/00provisionDialog.sh index ab30c8901..f172444ba 100755 --- a/home.admin/00provisionDialog.sh +++ b/home.admin/00provisionDialog.sh @@ -6,6 +6,11 @@ source /home/admin/raspiblitz.info # temp file for dialog results _temp=$(mktemp -p /dev/shm/) +# flags of what passwords are to set by user +setPasswordA=1 +setPasswordB=1 +setPasswordC=1 + # choose blockchain or select migration OPTIONS=() OPTIONS+=(BITCOIN1 "Setup BITCOIN & Lightning Network Daemon (LND)") @@ -45,7 +50,7 @@ esac # on cancel - exit to terminal if [ "${network}" == "" ]; then echo "# you selected cancel - exited to terminal" - echo "# use command to reboot --> restart" + echo "# use command 'restart' to reboot & start again" exit 1 fi @@ -59,15 +64,13 @@ echo "lcdrotate=1" >> $CONFIGFILE echo "lightning=${lightning}" >> $CONFIGFILE echo "network=${network}" >> $CONFIGFILE echo "chain=main" >> $CONFIGFILE +echo "runBehindTor=on" >> $CONFIGFILE # prepare the setup file (that constains info just needed for the rest of setup process) SETUPFILE="/home/admin/raspiblitz.setup.tmp" rm $SETUPFILE 2>/dev/null echo "# RASPIBLITZ SETUP FILE" > $SETUPFILE -echo "TODO: continue with further " -exit 1 - ################### # ENTER NAME ################### @@ -84,65 +87,125 @@ while [ ${#result} -eq 0 ] echo "processing ..." sleep 3 done +echo "hostname=${result}" >> $CONFIGFILE -# set lightning alias -sed -i "s/^alias=.*/alias=${result}/g" /home/admin/assets/lnd.${network}.conf +################### +# DECIDE LIGHTNING +# do this before passwords, because password C not needed if LND rescue file is uploaded +################### + +# flags for sub dialogs after choice +uploadLNDRESCUE=0 +enterSEED=0 +uploadSCB=0 + +OPTIONS=() +OPTIONS+=(NEW "Setup a brand new Lightning Node (DEFAULT)") +OPTIONS+=(OLD "I had an old Node I want to recover/restore") +CHOICE=$(dialog --backtitle "RaspiBlitz" --clear --title "LND Setup" --menu "LND Data & Wallet" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) + +if [ "${CHOICE}" == "NEW" ]; then + + # mark all passwords to be set at the end + setPasswordA=1 + setPasswordB=1 + setPasswordC=1 + +elif [ "${CHOICE}" == "OLD" ]; then + + # get more details what kind of old lightning wallet user has + OPTIONS=() + OPTIONS+=(LNDRESCUE "LND tar.gz-Backupfile (BEST)") + OPTIONS+=(SEED+SCB "Seed & channel.backup file (OK)") + OPTIONS+=(ONLYSEED "Only Seed Word List (FALLBACK)") + CHOICE=$(dialog --backtitle "RaspiBlitz" --clear --title "RECOVER LND DATA & WALLET" --menu "Data you have to recover from?" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) + + if [ "${CHOICE}" == "LNDRESCUE" ]; then + + # just activate LND rescue upload + uploadLNDRESCUE=1 + + # dont set password c anymore later on + setPasswordC=0 + + elif [ "${CHOICE}" == "SEED+SCB" ]; then + + # activate SEED input & SCB upload + enterSEED=1 + uploadSCB=1 + + elif [ "${CHOICE}" == "ONLYSEED" ]; then + + # activate SEED input & SCB upload + enterSEED=1 + + else + echo "# you selected cancel - exited to terminal" + echo "# use command 'restart' to reboot & start again" + exit 1 + fi -# store hostname for later - to be set right before the next reboot -# work around - because without a reboot the hostname seems not updates in the whole system -valueExistsInInfoFile=$(sudo cat /home/admin/raspiblitz.info | grep -c "hostname=") -if [ ${valueExistsInInfoFile} -eq 0 ]; then - # add - echo "hostname=${result}" >> /home/admin/raspiblitz.info else - # update - sed -i "s/^hostname=.*/hostname=${result}/g" /home/admin/raspiblitz.info + echo "# you selected cancel - exited to terminal" + echo "# use command 'restart' to reboot & start again" + exit 1 +fi + +# UPLOAD LND RESCUE FILE dialog (if activated by dialogs above) +if [ ${uploadLNDRESCUE} -eq 1 ]; then + echo "TODO: UPLOAD LND RESCUE FILE" + exit 1 +fi + + +# INPUT LIGHTNING SEED dialog (if activated by dialogs above) +if [ ${enterSEED} -eq 1 ]; then + echo "TODO: INPUT LIGHTNING SEED" + exit 1 +fi + +# UPLOAD STATIC CHANNEL BACKUP FILE dialog (if activated by dialogs above) +if [ ${uploadSCB} -eq 1 ]; then + echo "TODO: UPLOAD STATIC CHANNEL BACKUP FILE" + exit 1 fi ################### -# ENTER PASSWORDS +# ENTER PASSWORDS ---> combine with migration dialog to reduce code duplication ################### # show password info dialog -dialog --backtitle "RaspiBlitz - Setup (${network}/${chain})" --msgbox "RaspiBlitz uses 4 different passwords. -Referenced as password A, B, C and D. +dialog --backtitle "RaspiBlitz - Setup" --msgbox "RaspiBlitz uses 3 different passwords. +Referenced as password A, B & C. -A) Master User Password -B) Blockchain RPC Password -C) LND Wallet Password -D) LND Seed Password +PASSWORD A) Main User Password (SSH & WebUI, sudo) +PASSWORD B) APP Password (RPC & Additional Apps) +PASSWORD C) Lightning Wallet Password for Unlock -Choose now 4 new passwords - all min 8 chars, +Set now the 3 passwords - all min 8 chars, no spaces and only special characters - or . Write them down & store them in a safe place. -" 15 52 +" 15 54 -# call set password a script -sudo /home/admin/config.scripts/blitz.setpassword.sh a +clear +sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD A - Main User Password" $_temp +password=$(sudo cat $_temp) +echo "passwordA='${password}'" >> $SETUPFILE +dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password A set" 7 20 -# sucess info dialog -dialog --backtitle "RaspiBlitz" --msgbox "OK - password A was set\nfor all users pi, admin, root & bitcoin" 6 52 +clear +sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD B - APP Password" $_temp +password=$(sudo cat $_temp) +echo "passwordB='${password}'" >> $SETUPFILE +dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password B set" 7 20 -# call set password b script -sudo /home/admin/config.scripts/blitz.setpassword.sh b +clear +sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD C - Lightning Wallet Password" $_temp +password=$(sudo cat $_temp) +echo "passwordC='${password}'" >> $SETUPFILE +dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password C set" 7 20 -# success info dialog -dialog --backtitle "RaspiBlitz" --msgbox "OK - RPC password changed \n\nNow starting the Setup of your RaspiBlitz." 7 52 - -################### -# TOR BY DEFAULT -# https://github.com/rootzoll/raspiblitz/issues/592 -# -################### -echo "runBehindTor=on" >> /home/admin/raspiblitz.info -#whiptail --title ' Privacy Level - How do you want to run your node? ' --yes-button='Public IP' --no-button='TOR NETWORK' --yesno "Running your Lightning node with your Public IP is common and faster, but might reveal your personal identity and location.\n -#You can better protect your privacy with running your lightning node as a TOR Hidden Service from the start, but it can make it harder to connect with other non-TOR nodes and remote mobile apps later on. -# " 12 75 -#if [ $? -eq 1 ]; then -# echo "runBehindTor=on" >> /home/admin/raspiblitz.info -#fi - -# set SetupState -sudo sed -i "s/^setupStep=.*/setupStep=20/g" /home/admin/raspiblitz.info +echo "TODO: continue with further " +exit 1 clear \ No newline at end of file From ef910efd9b6fdf145129342e0d1be6bf4765ec23 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 18:27:23 +0200 Subject: [PATCH 0054/1295] update config scripts --- home.admin/config.scripts/blitz.migration.sh | 44 ++++++++++---------- home.admin/config.scripts/lnd.rescue.sh | 16 ++++++- 2 files changed, 36 insertions(+), 24 deletions(-) diff --git a/home.admin/config.scripts/blitz.migration.sh b/home.admin/config.scripts/blitz.migration.sh index b8092a301..79f06024c 100755 --- a/home.admin/config.scripts/blitz.migration.sh +++ b/home.admin/config.scripts/blitz.migration.sh @@ -26,23 +26,23 @@ isMounted=$(sudo df | grep -c /mnt/hdd) isBTRFS=$(lsblk -o FSTYPE,MOUNTPOINT | grep /mnt/hdd | awk '$1=$1' | cut -d " " -f 1 | grep -c btrfs) # set place where zipped TAR file gets stored -defaultZipPath="/mnt/hdd/temp/migration" +defaultUploadPath="/mnt/hdd/temp/migration" # get local ip source <(/home/admin/config.scripts/internet.sh status local) # SCP download and upload links -scpDownloadUnix="scp -r 'bitcoin@${localip}:${defaultZipPath}/raspiblitz-*.tar.gz' ./" -scpDownloadWin="scp -r bitcoin@${localip}:${defaultZipPath}/raspiblitz-*.tar.gz ." -scpUploadUnix="scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultZipPath}" -scpUploadWin="scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultZipPath}" +scpDownloadUnix="scp -r 'bitcoin@${localip}:${defaultUploadPath}/raspiblitz-*.tar.gz' ./" +scpDownloadWin="scp -r bitcoin@${localip}:${defaultUploadPath}/raspiblitz-*.tar.gz ." +scpUploadUnix="scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultUploadPath}" +scpUploadWin="scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultUploadPath}" # output status data & exit if [ "$1" = "status" ]; then echo "# RASPIBLITZ Data Import & Export" echo "isBTRFS=${isBTRFS}" echo "localip=\"${localip}\"" - echo "defaultZipPath=\"${defaultZipPath}\"" + echo "defaultUploadPath=\"${defaultUploadPath}\"" echo "scpDownloadUnix=\"${scpDownloadUnix}\"" echo "scpUploadUnix=\"${scpUploadUnix}\"" echo "scpDownloadWin=\"${scpDownloadWin}\"" @@ -312,23 +312,23 @@ if [ "$1" = "export" ]; then # zip it echo "# Building the Export File (this can take some time) .." - sudo tar -zcvf ${defaultZipPath}/raspiblitz-export-temp.tar.gz -X ~/.exclude.temp /mnt/hdd 1>~/.include.temp 2>/dev/null + sudo tar -zcvf ${defaultUploadPath}/raspiblitz-export-temp.tar.gz -X ~/.exclude.temp /mnt/hdd 1>~/.include.temp 2>/dev/null # get md5 checksum echo "# Building checksum (can take also a while) ..." - md5checksum=$(md5sum ${defaultZipPath}/raspiblitz-export-temp.tar.gz | head -n1 | cut -d " " -f1) + md5checksum=$(md5sum ${defaultUploadPath}/raspiblitz-export-temp.tar.gz | head -n1 | cut -d " " -f1) echo "md5checksum=${md5checksum}" # get byte size - bytesize=$(wc -c ${defaultZipPath}/raspiblitz-export-temp.tar.gz | cut -d " " -f 1) + bytesize=$(wc -c ${defaultUploadPath}/raspiblitz-export-temp.tar.gz | cut -d " " -f 1) echo "bytesize=${bytesize}" # final renaming name="raspiblitz${blitzname}${datestamp}-${md5checksum}.tar.gz" - echo "exportpath='${defaultZipPath}'" + echo "exportpath='${defaultUploadPath}'" echo "filename='${name}'" - sudo mv ${defaultZipPath}/raspiblitz-export-temp.tar.gz ${defaultZipPath}/${name} - sudo chown bitcoin:bitcoin ${defaultZipPath}/${name} + sudo mv ${defaultUploadPath}/raspiblitz-export-temp.tar.gz ${defaultUploadPath}/${name} + sudo chown bitcoin:bitcoin ${defaultUploadPath}/${name} # delete temp files rm ~/.exclude.temp @@ -343,7 +343,7 @@ fi if [ "$1" = "export-gui" ]; then # cleaning old migration files from blitz - sudo rm ${defaultZipPath}/*.tar.gz 2>/dev/null + sudo rm ${defaultUploadPath}/*.tar.gz 2>/dev/null # stopping lnd / bitcoin echo "--> stopping services ..." @@ -394,7 +394,7 @@ fi if [ "$1" = "import" ]; then # check second parameter for path and/or filename of import - importFile="${defaultZipPath}/raspiblitz-*.tar.gz" + importFile="${defaultUploadPath}/raspiblitz-*.tar.gz" if [ ${#2} -gt 0 ]; then # check if and/or filename of import containsPath=$(echo $2 | grep -c '/') @@ -421,7 +421,7 @@ if [ "$1" = "import" ]; then else # is just filename - to use with default path echo "# using file from parameter for import" - importFile="${defaultZipPath}/${2}" + importFile="${defaultUploadPath}/${2}" fi fi @@ -574,8 +574,8 @@ if [ "$1" = "import-gui" ]; then sudo /home/admin/config.scripts/blitz.datadrive.sh link # make sure that temp directory exists and can be written by admin - sudo mkdir -p ${defaultZipPath} - sudo chmod 777 -R ${defaultZipPath} + sudo mkdir -p ${defaultUploadPath} + sudo chmod 777 -R ${defaultUploadPath} clear echo @@ -588,18 +588,18 @@ if [ "$1" = "import-gui" ]; then echo "ON YOUR LAPTOP open a new terminal and change into" echo "the directory where your migration file is and" echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" - echo "scp -r ./raspiblitz-*.tar.gz admin@${localip}:${defaultZipPath}" + echo "scp -r ./raspiblitz-*.tar.gz admin@${localip}:${defaultUploadPath}" echo "" echo "Use password 'raspiblitz' to authenticate file transfer." echo "PRESS ENTER when upload is done." read key - countZips=$(sudo ls ${defaultZipPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz-') + countZips=$(sudo ls ${defaultUploadPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz-') # in case no upload found if [ ${countZips} -eq 0 ]; then echo - echo "FAIL: Was not able to detect uploaded file in ${defaultZipPath}" + echo "FAIL: Was not able to detect uploaded file in ${defaultUploadPath}" echo "error='no file found'" sleep 3 exit 1 @@ -608,7 +608,7 @@ if [ "$1" = "import-gui" ]; then # in case of multiple files if [ ${countZips} -gt 1 ]; then echo - echo "# FAIL: Multiple possible files detected in ${defaultZipPath}" + echo "# FAIL: Multiple possible files detected in ${defaultUploadPath}" echo "error='multiple files'" sleep 3 exit 1 @@ -616,7 +616,7 @@ if [ "$1" = "import-gui" ]; then # restore upload echo - echo "OK: Upload found in ${defaultZipPath} - restoring data ... (please wait)" + echo "OK: Upload found in ${defaultUploadPath} - restoring data ... (please wait)" source <(sudo /home/admin/config.scripts/blitz.migration.sh "import") if [ ${#error} -gt 0 ]; then echo diff --git a/home.admin/config.scripts/lnd.rescue.sh b/home.admin/config.scripts/lnd.rescue.sh index 772131fd3..e10309702 100755 --- a/home.admin/config.scripts/lnd.rescue.sh +++ b/home.admin/config.scripts/lnd.rescue.sh @@ -5,6 +5,8 @@ source /mnt/hdd/raspiblitz.conf # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo "# small rescue script to to backup or restore LND data" + echo "# -> basic status:" + echo "# lnd.rescue.sh status" echo "# -> backup all LND data in a tar.gz file for download:" echo "# lnd.rescue.sh backup [?no-download]" echo "# -> upload a LND data tar.gz file to replace LND data:" @@ -16,10 +18,20 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then exit 1 fi -localip=$(ip addr | grep 'state UP' -A2 | egrep -v 'docker0|veth' | grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') +# get local ip +source <(/home/admin/config.scripts/internet.sh status local) + +defaultUploadDir="/home/admin" mode="$1" -if [ ${mode} = "backup" ]; then + +if [ ${mode} = "status" ]; then + + echo "localip='${localip}'" + echo "defaultUploadDir='${defaultUploadDir}'" + exit 0 + +elif [ ${mode} = "backup" ]; then ################################ # BACKUP From 9166c5b54883ff9bbcb3d7fd3cdc6cb36d3e78f8 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 20:14:48 +0200 Subject: [PATCH 0055/1295] introduce a upload prepare & check script --- home.admin/config.scripts/blitz.upload.sh | 117 ++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 home.admin/config.scripts/blitz.upload.sh diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh new file mode 100644 index 000000000..7e532355a --- /dev/null +++ b/home.admin/config.scripts/blitz.upload.sh @@ -0,0 +1,117 @@ +#!/bin/bash + +# command info +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then + echo "# use to prepare & check scp or web file upload to RaspiBlitz" + echo "# blitz.upload.sh prepare-upload" + echo "# blitz.upload.sh check-upload ?[scb|lnd-rescue]" + exit 0 +fi + +# get local ip +source <(/home/admin/config.scripts/internet.sh status local) + +# set upload path +if [ -d "/mnt/hdd/temp" ]; then + # HDD with temp directory is connected - the use it + defaultUploadPath="/mnt/hdd/temp/upload" +else + # fallback if no HDD is connected + defaultUploadPath="/home/bitcoin/temp/upload" +fi + + +# 1st PRAMETER action +action="$1" + +if [ ${action} = "prepare-upload" ]; then + + # make sure that temp directory exists, is clear and can be written by user bitcoin + sudo mkdir -p ${defaultUploadPath} 2>/dev/null + sudo rm ${defaultUploadPath}/* 2>/dev/null + sudo chown -R bitcoin:bitcoin ${defaultUploadPath} 2>/dev/null + + echo "localip='${localip}'" + echo "defaultUploadPath='${defaultUploadPath}'" + exit 0 +fi + +if [ ${action} = "check-upload" ]; then + + # 2nd PARAMETER is type of upload (optional) + type=$2 + echo "type='${type}'" + + # check if there to less or to many files in upload directory + countFiles=$(ls ${defaultUploadPath} | wc -l 2>/dev/null) + if [ ${countFiles} -lt 1 ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='not-found'" + exit 1 + fi + if [ ${countFiles} -gt 1 ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='multiple'" + exit 1 + fi + + # get the file uploaded (full path) + filename=$(sudo ls ${defaultUploadPath}/*.*) + echo "# filename(${filename})" + + # check of size >0 + byteSize=$(ls -l ${filename} | awk '{print $5}') + echo "# byteSize(${byteSize})" + if [ "${byteSize}" == "" ] || [ "${byteSize}" == "0" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='invalid byte size: ${byteSize}'" + exit 1 + fi + + # SCB check if file looks valid + if [ "${type}" == "scb" ]; then + + # general filename check + typeCount=$(sudo ls ${defaultUploadPath}/*.backup 2>/dev/null | grep -c '.backup') + if [ "${typeCount}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='not *.backup'" + exit 1 + fi + + fi + + # LND-RESCUE check if file looks valid + if [ "${type}" == "lnd-rescue" ]; then + + # general filename check + typeCount=$(sudo ls ${defaultUploadPath}/lnd-rescue-*.tar.gz 2>/dev/null | grep -c 'lnd-rescue') + if [ "${typeCount}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='not lnd-rescue-*.tar.gz'" + exit 1 + fi + + # checksum test + md5checksum=$(md5sum ${filename} | head -n1 | cut -d " " -f1) + echo "# filename(${md5checksum})" + isCorrect=$(echo ${filename} | grep -c ${md5checksum}) + if [ "${isCorrect}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='incorrect checksum'" + exit 1 + fi + + fi + + # ok looks good - return filename + echo "filename=${filename}" + exit 0 +fi + +echo "error='unkown parameter'" +exit 1 \ No newline at end of file From 30b1cf804f51a59abe694f8940f8f8557070987c Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 1 May 2021 20:17:48 +0200 Subject: [PATCH 0056/1295] blitz upload flexible user --- home.admin/config.scripts/blitz.upload.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh index 7e532355a..79326a23d 100644 --- a/home.admin/config.scripts/blitz.upload.sh +++ b/home.admin/config.scripts/blitz.upload.sh @@ -15,9 +15,11 @@ source <(/home/admin/config.scripts/internet.sh status local) if [ -d "/mnt/hdd/temp" ]; then # HDD with temp directory is connected - the use it defaultUploadPath="/mnt/hdd/temp/upload" + defaultUploadUser="bitcoin" else # fallback if no HDD is connected defaultUploadPath="/home/bitcoin/temp/upload" + defaultUploadUser="bitcoin" fi @@ -26,13 +28,14 @@ action="$1" if [ ${action} = "prepare-upload" ]; then - # make sure that temp directory exists, is clear and can be written by user bitcoin + # make sure that temp directory exists, is clear and can be written by ${defaultUploadUser} sudo mkdir -p ${defaultUploadPath} 2>/dev/null sudo rm ${defaultUploadPath}/* 2>/dev/null - sudo chown -R bitcoin:bitcoin ${defaultUploadPath} 2>/dev/null + sudo chown -R ${defaultUploadUser}:${defaultUploadUser} ${defaultUploadPath} 2>/dev/null echo "localip='${localip}'" echo "defaultUploadPath='${defaultUploadPath}'" + echo "defaultUploadUser='${defaultUploadUser}'" exit 0 fi From fcc1dae6baf38fc4ef0465486b12d6f00f8e9156 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 2 May 2021 00:50:00 +0200 Subject: [PATCH 0057/1295] seperate gui & process lnd backup --- FAQ.md | 4 +- home.admin/00migrationDialog.sh | 16 +- home.admin/00provisionDialog.sh | 71 +-- home.admin/00raspiblitz.sh | 1 - home.admin/98repairBlockchain.sh | 2 +- home.admin/98repairMenu.sh | 6 +- home.admin/99updateMenu.sh | 4 +- home.admin/config.scripts/blitz.upload.sh | 3 +- home.admin/config.scripts/lnd.backup.sh | 547 ++++++++++++++++++++++ home.admin/config.scripts/lnd.rescue.sh | 292 ------------ 10 files changed, 609 insertions(+), 337 deletions(-) create mode 100755 home.admin/config.scripts/lnd.backup.sh delete mode 100755 home.admin/config.scripts/lnd.rescue.sh diff --git a/FAQ.md b/FAQ.md index 26e8f5407..ada220703 100644 --- a/FAQ.md +++ b/FAQ.md @@ -234,7 +234,7 @@ If you still can SSH in and HDD is readable, we can try to rescue/export your LN To rescue/export your Lightning data from a RaspiBlitz (since v1.1): * SSH into your RaspiBlitz and EXIT to terminal from the menu. -* then run: `/home/admin/config.scripts/lnd.rescue.sh backup` +* then run: `/home/admin/config.scripts/lnd.backup.sh lnd-export-gui` * follow the instructions of the script. This will create a lnd-rescue file (ends on gz.tar) that contains all the data from the LND. The script offers you a command to transfer the lnd-rescue file to your laptop. If the transfer was successful you can now setup a fresh RaspiBlitz. Do all the setup until you have a clean new Lightning node running - just without any funding or channels. @@ -242,7 +242,7 @@ This will create a lnd-rescue file (ends on gz.tar) that contains all the data f Then to restore your old LND data and to recover your funds and channels: * SSH into your new RaspiBlitz and EXIT to terminal from the menu. -* then run: `/home/admin/config.scripts/lnd.rescue.sh restore` +* then run: `/home/admin/config.scripts/lnd.backup.sh lnd-import-gui` * follow the instructions of the script. This script will offer you a way to transfer the lnd-rescue file from your laptop to the new RaspiBlitz and will restore the old data. LND then gets restarted for you, and after some time it should show you the status screen again with your old funds and channels. diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index c21ae83eb..0656b965d 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -47,13 +47,13 @@ if [ "${migrationOS}" == "raspiblitz" ]; then echo "migrationOS='${migrationOS}'" >> $SETUPFILE echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE - # get defaultZipPath, localIP, etc + # get defaultUploadPath, localIP, etc source <(sudo /home/admin/config.scripts/blitz.migration.sh status) # make sure that temp directory exists, is clear and can be written by user bitcoin - sudo mkdir -p ${defaultZipPath} 2>/dev/null + sudo mkdir -p ${defaultUploadPath} 2>/dev/null sudo rm /mnt/hdd/temp/migration/* 2>/dev/null - sudo chown -R bitcoin:bitcoin ${defaultZipPath} 2>/dev/null + sudo chown -R bitcoin:bitcoin ${defaultUploadPath} 2>/dev/null # scp upload info clear @@ -67,17 +67,17 @@ if [ "${migrationOS}" == "raspiblitz" ]; then echo "ON YOUR LAPTOP open a new terminal and change into" echo "the directory where your migration file is and" echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" - echo "scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultZipPath}" + echo "scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultUploadPath}" echo "" echo "Use password 'raspiblitz' to authenticate file transfer." echo "PRESS ENTER when upload is done." read key - countZips=$(sudo ls ${defaultZipPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz-') + countZips=$(sudo ls ${defaultUploadPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz-') # in case no upload found if [ ${countZips} -eq 0 ]; then - echo "FAIL: Was not able to detect uploaded file in ${defaultZipPath}" + echo "FAIL: Was not able to detect uploaded file in ${defaultUploadPath}" echo "Shutting down ... please make a fresh sd card & try again." sleep 3 echo "shutdown=1" >> $SETUPFILE @@ -86,7 +86,7 @@ if [ "${migrationOS}" == "raspiblitz" ]; then # in case of multiple files if [ ${countZips} -gt 1 ]; then - echo "# FAIL: Multiple possible files detected in ${defaultZipPath}" + echo "# FAIL: Multiple possible files detected in ${defaultUploadPath}" echo "Shutting down ... please make a fresh sd card & try again." sleep 3 echo "shutdown=1" >> $SETUPFILE @@ -95,7 +95,7 @@ if [ "${migrationOS}" == "raspiblitz" ]; then # further checks and unpacking will be done when migration is processed (not part of dialog) echo "OK: Migration data was imported - will process after password reset" - echo "migrationFile='${defaultZipPath}'" >> $SETUPFILE + echo "migrationFile='${defaultUploadPath}'" >> $SETUPFILE sleep 4 # user needs to reset password A diff --git a/home.admin/00provisionDialog.sh b/home.admin/00provisionDialog.sh index f172444ba..259377168 100755 --- a/home.admin/00provisionDialog.sh +++ b/home.admin/00provisionDialog.sh @@ -113,37 +113,56 @@ if [ "${CHOICE}" == "NEW" ]; then elif [ "${CHOICE}" == "OLD" ]; then - # get more details what kind of old lightning wallet user has - OPTIONS=() - OPTIONS+=(LNDRESCUE "LND tar.gz-Backupfile (BEST)") - OPTIONS+=(SEED+SCB "Seed & channel.backup file (OK)") - OPTIONS+=(ONLYSEED "Only Seed Word List (FALLBACK)") - CHOICE=$(dialog --backtitle "RaspiBlitz" --clear --title "RECOVER LND DATA & WALLET" --menu "Data you have to recover from?" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) + CHOICE="" + while [ "${CHOICESUB}" == "" ] + do - if [ "${CHOICE}" == "LNDRESCUE" ]; then + # get more details what kind of old lightning wallet user has + OPTIONS=() + OPTIONS+=(LNDRESCUE "LND tar.gz-Backupfile (BEST)") + OPTIONS+=(SEED+SCB "Seed & channel.backup file (OK)") + OPTIONS+=(ONLYSEED "Only Seed Word List (FALLBACK)") + CHOICESUB=$(dialog --backtitle "RaspiBlitz" --clear --title "RECOVER LND DATA & WALLET" --menu "Data you have to recover from?" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) - # just activate LND rescue upload - uploadLNDRESCUE=1 + if [ "${CHOICESUB}" == "LNDRESCUE" ]; then - # dont set password c anymore later on - setPasswordC=0 + # just activate LND rescue upload + uploadLNDRESCUE=1 - elif [ "${CHOICE}" == "SEED+SCB" ]; then + # dont set password c anymore later on + setPasswordC=0 - # activate SEED input & SCB upload - enterSEED=1 - uploadSCB=1 + elif [ "${CHOICESUB}" == "SEED+SCB" ]; then - elif [ "${CHOICE}" == "ONLYSEED" ]; then + # activate SEED input & SCB upload + enterSEED=1 + uploadSCB=1 - # activate SEED input & SCB upload - enterSEED=1 + elif [ "${CHOICESUB}" == "ONLYSEED" ]; then - else - echo "# you selected cancel - exited to terminal" - echo "# use command 'restart' to reboot & start again" - exit 1 - fi + # let people know about the difference between SEED & SEED+SCB + whiptail --title "IMPORTANT INFO" --yes-button "JUST SEED" --no-button "Go Back" --yesno " +Using JUST SEED WORDS will only recover your on-chain funds. +To also try to recover the open channel funds you need the +channel.backup file (since RaspiBlitz v1.2 / LND 0.6-beta) +or having a complete LND rescue-backup from your old node. + " 11 65 + + if [ $? -eq 1 ]; then + # when user wants to go back + CHOICESUB="" + else + # activate SEED input & SCB upload + enterSEED=1 + fi + + else + echo "# you selected cancel - exited to terminal" + echo "# use command 'restart' to reboot & start again" + exit 1 + fi + + done else echo "# you selected cancel - exited to terminal" @@ -153,11 +172,10 @@ fi # UPLOAD LND RESCUE FILE dialog (if activated by dialogs above) if [ ${uploadLNDRESCUE} -eq 1 ]; then - echo "TODO: UPLOAD LND RESCUE FILE" + /home/admin/config.scripts/lnd.backup.sh lnd-import-gui setup $SETUPFILE exit 1 fi - # INPUT LIGHTNING SEED dialog (if activated by dialogs above) if [ ${enterSEED} -eq 1 ]; then echo "TODO: INPUT LIGHTNING SEED" @@ -166,8 +184,7 @@ fi # UPLOAD STATIC CHANNEL BACKUP FILE dialog (if activated by dialogs above) if [ ${uploadSCB} -eq 1 ]; then - echo "TODO: UPLOAD STATIC CHANNEL BACKUP FILE" - exit 1 + /home/admin/config.scripts/lnd.backup.sh scb-import-gui setup $SETUPFILE fi ################### diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 593e66601..07820d19d 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -454,7 +454,6 @@ case $CHOICE in if [ "$?" = "1" ]; then echo echo "# clean and unmount for next try" - sudo rm -f ${defaultZipPath}/raspiblitz-*.tar.gz 2>/dev/null sudo umount /mnt/hdd 2>/dev/null sudo umount /mnt/storage 2>/dev/null sudo umount /mnt/temp 2>/dev/null diff --git a/home.admin/98repairBlockchain.sh b/home.admin/98repairBlockchain.sh index e31dcad59..17116c7c8 100755 --- a/home.admin/98repairBlockchain.sh +++ b/home.admin/98repairBlockchain.sh @@ -33,7 +33,7 @@ elif [ "${CHOICE}" = "REINDEX" ]; then sudo /home/admin/config.scripts/network.reindex.sh elif [ "${CHOICE}" = "BACKUP" ]; then - sudo /home/admin/config.scripts/lnd.rescue.sh backup + sudo /home/admin/config.scripts/lnd.backup.sh lnd-export-gui echo "PRESS ENTER to continue." read key diff --git a/home.admin/98repairMenu.sh b/home.admin/98repairMenu.sh index 4a9c45ee3..3b5bdb1a1 100755 --- a/home.admin/98repairMenu.sh +++ b/home.admin/98repairMenu.sh @@ -20,7 +20,7 @@ Download LND Data Backup now? echo "*************************************" echo "please wait .." sleep 2 - /home/admin/config.scripts/lnd.rescue.sh backup + /home/admin/config.scripts/lnd.backup.sh lnd-export-gui echo echo "PRESS ENTER to continue once you are done downloading." read key @@ -31,7 +31,7 @@ Download LND Data Backup now? echo "*************************************" echo "please wait .." sleep 2 - /home/admin/config.scripts/lnd.rescue.sh backup no-download + /home/admin/config.scripts/lnd.backup.sh lnd-export fi } @@ -189,7 +189,7 @@ case $CHOICE in read key ;; BACKUP-LND) - sudo /home/admin/config.scripts/lnd.rescue.sh backup + sudo /home/admin/config.scripts/lnd.backup.sh lnd-export-gui echo echo "Press ENTER when your backup download is done to shutdown." read key diff --git a/home.admin/99updateMenu.sh b/home.admin/99updateMenu.sh index 0d76ecdd7..ae7bff304 100755 --- a/home.admin/99updateMenu.sh +++ b/home.admin/99updateMenu.sh @@ -38,7 +38,7 @@ Do you want to download LND Data Backup now? echo "*************************************" echo "please wait .." sleep 2 - /home/admin/config.scripts/lnd.rescue.sh backup + /home/admin/config.scripts/lnd.backup.sh lnd-export-gui echo echo "PRESS ENTER to continue once you're done downloading." read key @@ -49,7 +49,7 @@ Do you want to download LND Data Backup now? echo "*************************************" echo "please wait .." sleep 2 - /home/admin/config.scripts/lnd.rescue.sh backup no-download + /home/admin/config.scripts/lnd.backup.sh lnd-export fi whiptail --title "READY TO UPDATE?" --yes-button "START UPDATE" --no-button "Cancel" --yesno "If you start the update: The RaspiBlitz will power down. diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh index 79326a23d..e366f7e6f 100644 --- a/home.admin/config.scripts/blitz.upload.sh +++ b/home.admin/config.scripts/blitz.upload.sh @@ -111,8 +111,9 @@ if [ ${action} = "check-upload" ]; then fi - # ok looks good - return filename + # ok looks good - return filename & more info echo "filename=${filename}" + echo "bytesize=${byteSize}" exit 0 fi diff --git a/home.admin/config.scripts/lnd.backup.sh b/home.admin/config.scripts/lnd.backup.sh new file mode 100755 index 000000000..ee97df73d --- /dev/null +++ b/home.admin/config.scripts/lnd.backup.sh @@ -0,0 +1,547 @@ +#!/bin/bash + +# command info +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then + echo "# ---------------------------------------------------" + echo "# LND RESCUE FILE (tar.gz of complete lnd directory)" + echo "# ---------------------------------------------------" + echo "# lnd.backup.sh lnd-export" + echo "# lnd.backup.sh lnd-export-gui" + echo "# lnd.backup.sh lnd-import [file]" + echo "# lnd.backup.sh lnd-import-gui [setup|production]" + echo "# ---------------------------------------------------" + echo "# STATIC CHANNEL BACKUP" + echo "# ---------------------------------------------------" + echo "# lnd.backup.sh scb-export" + echo "# lnd.backup.sh scb-export-gui" + echo "# lnd.backup.sh scb-import [file]" + echo "# lnd.backup.sh scb-import-gui [setup|production]" + echo "# ---------------------------------------------------" + echo "# SEED WORDS" + echo "# ---------------------------------------------------" + echo "# lnd.backup.sh seed-export-gui [lndseeddata]" + echo "# lnd.backup.sh seed-import-gui" + exit 1 +fi + +# 1st PRAMETER action +mode="$1" + +################################ +# LND RESCUE FILE - EXPORT +################################ + +if [ ${mode} = "lnd-export" ]; then + + echo "# *** LND.RESCUE --> BACKUP" + downloadPath="/home/admin" + fileowner="admin" + + # stop LND + echo "# Stopping lnd..." + sudo systemctl stop lnd + sleep 5 + echo "# OK" + echo + + # add lnd version info into lnd dir (to detect needed updates later) + lndVersion=$(sudo -u bitcoin lncli getinfo | jq -r ".version" | cut -d ' ' -f1) + sudo rm /mnt/hdd/lnd/version.info 2>/dev/null + echo "${lndVersion}" > /home/admin/lnd.version.info + sudo mv /home/admin/lnd.version.info /mnt/hdd/lnd/version.info + sudo chown bitcoin:bitcoin /mnt/hdd/lnd/version.info + + # zip it + sudo tar -zcvf ${downloadPath}/lnd-rescue.tar.gz /mnt/hdd/lnd 1>&2 + sudo chown ${fileowner}:${fileowner} ${downloadPath}/lnd-rescue.tar.gz 1>&2 + + # delete old backups + rm ${downloadPath}/lnd-rescue-*.tar.gz 2>/dev/null 1>/dev/null + + # name with md5 checksum + md5checksum=$(md5sum ${downloadPath}/lnd-rescue.tar.gz | head -n1 | cut -d " " -f1) + mv ${downloadPath}/lnd-rescue.tar.gz ${downloadPath}/lnd-rescue-${md5checksum}.tar.gz 1>&2 + byteSize=$(ls -l ${downloadPath}/lnd-rescue-${md5checksum}.tar.gz | awk '{print $5}') + + # check file size + if [ ${byteSize} -lt 100 ]; then + echo "error='backup is empty'" + exit 1 + fi + + # output result data + echo "# lnd service is stopped for security" + echo "filename='${downloadPath}/lnd-rescue-${md5checksum}.tar.gz'" + echo "fileowner='${fileowner}'" + echo "size=${byteSize}" + exit 0 +fi + +if [ ${mode} = "lnd-export-gui" ]; then + + # create lnd rescue file + source <(/home/admin/config.scripts/lnd.backup.sh lnd-export) + if [ "${error}" != "" ]; then + echo "error='${error}'" + exit 1 + fi + + # get local ip info + source <(/home/admin/config.scripts/internet.sh status local) + + # offer SCP for download + clear + echo + echo "****************************" + echo "* DOWNLOAD THE RESCUE FILE *" + echo "****************************" + echo + echo "ON YOUR MAC & LINUX LAPTOP - RUN IN NEW TERMINAL:" + echo "scp '${fileowner}@${localip}:${filename}' ./" + echo "ON WINDOWS USE:" + echo "scp ${fileowner}@${localip}:${filename} ." + echo "" + echo "Use password A to authenticate file transfer." + echo "Check for correct file size after transfer: ${byteSize} byte" + echo + echo "BEWARE: Your Lightning node is now stopped. It's safe to backup the data and" + echo "restore it on a fresh RaspiBlitz. But once this Lightning node gets started" + echo "again or rebooted, it's not advised to restore the backup file because" + echo "it would contain outdated channel data and can lead to loss of channel funds." + exit 0 +fi + +################################ +# LND RESCUE FILE - IMPORT +################################ + +if [ ${mode} = "lnd-import" ]; then + + # 2nd PARAMETER: file to import (expect that the file was valid checked from calling script) + filename=$2 + if [ "${filename}" == "" ]; then + echo "error='filename missing'" + exit 1 + fi + fileExists=$(sudo ls ${filename} 2>/dev/null | grep -c "${filename}") + if [ "${fileExists}" != "1" ]; then + echo "error='filename not found'" + exit 1 + fi + + # stop LND + echo "# stopping lnd..." + sudo systemctl stop lnd 1>/dev/null + sleep 5 + + # clean DIR + echo "# cleaning old LND data ..." + sudo rm -r /mnt/hdd/lnd/* 1>/dev/null 2>/dev/null + + # unpack zip + echo "# restoring LND data from ${filename} ..." + sudo tar -xf ${filename} -C / 1>/dev/null + sudo chown -R bitcoin:bitcoin /mnt/hdd/lnd 1>/dev/null + + # lnd version of LND rescue file (thats packed as extra info in the file) + # its included since RaspiBlitz v1.7.1 /mnt/hdd/lnd/version.info + # this can happen if someone uses the manual LND update and then uploads to an old default LND + # if so just signal this in the output + + echo "# DONE - lnd service is still stopped - start manually with command:" + echo "# sudo systemctl start lnd" + exit 0 + +fi + +if [ ${mode} = "lnd-import-gui" ]; then + + # get by second parameter if this call if happening during setup or production + scenario=$2 + if [ "${scenario}" != "setup" ] && [ "${scenario}" != "production" ]; then + echo "error='mising parameter'" + exit 1 + fi + + # scenario setup needs a 3rd parameter - the SETUPFILE to store results in + if [ "${scenario}" == "setup" ]; then + SETUPFILE=$3 + if [ "${SETUPFILE}" == "" ]; then + echo "error='mising parameter'" + exit 1 + fi + fi + + # determine password info based on scenario + if [ "${scenario}" == "setup" ]; then + passwordInfo="password 'raspiblitz'" + else + passwordInfo="your Password A" + fi + + # get defaultUploadPath, localIP, etc + source <(sudo /home/admin/config.scripts/blitz.upload.sh prepare-upload) + + filename="" + while [ "${filename}" == "" ] + do + clear + echo "**************************" + echo "* UPLOAD THE RESCUE FILE *" + echo "**************************" + echo "If you have a lnd-rescue backup file on your laptop you can now" + echo "upload it and restore the your latest LND state." + echo + echo "CAUTION: Dont restore old LND states - risk of loosing funds!" + echo + echo "To make upload open a new terminal on your laptop," + echo "change into the directory where your lnd-rescue file is and" + echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" + echo "scp -r ./lnd-rescue-*.tar.gz ${defaultUploadUser}@${localip}:${defaultUploadPath}/" + echo "" + echo "Use ${passwordInfo} to authenticate file transfer." + echo "PRESS ENTER when upload is done" + read key + + # check upload (will return filename or error) + source <(sudo /home/admin/config.scripts/blitz.upload.sh check-upload lnd-rescue) + if [ "${filename}" != "" ]; then + echo "OK - File found: ${filename}" + echo "PRESS ENTER to continue." + read key + elif [ "${error}" == "not-found" ]; then + echo "!! WARNING !!" + echo "There was no upload found in ${defaultUploadPath}" + echo "Make sure you upload only one tar.gz-file and start again." + echo "PRESS ENTER to continue & retry" + read key + elif [ "${error}" == "multiple" ]; then + echo "!! WARNING !!" + echo "There are multiple lnd-rescue files in directory ${defaultUploadPath}" + echo "Make sure you upload only one tar.gz-file and start again." + echo "PRESS ENTER to continue & retry" + read key + elif [ "${error}" == "invalid" ]; then + echo "!! WARNING !!" + echo "The file uploaded is not a valid (complete upload failed or not correct file)." + echo "PRESS ENTER to continue & retry" + read key + else + echo "!! WARNING !! Unknown State (report to devs)" + exit 1 + fi + done + + # in setup scenario the final import is happening during provison + if [ "${scenario}" == "setup" ]; then + # just add lndrescue filename to give file + echo "lndrescue='${filename}'" >> $SETUPFILE + echo "" + exit 0 + fi + + # in production now start restoring LND data based on file + source /mnt/hdd/raspiblitz.conf + + # ask security question before deleting old wallet + echo "WARNING: This will delete/overwrite the LND state/funds of this RaspiBlitz." + echo + echo "Write the word 'override' and press ENTER to CONTINUE:" + read securityInput + if [ "${securityInput}" != "override" ] && [ "${securityInput}" != "'override'" ]; then + echo + echo "CANCELED import of uploaded rescue file" + exit 1 + fi + echo + + # run import process + echo "OK deleting old LND data & restoring imported rescue file ..." + source <(sudo /home/admin/config.scripts/lnd.backup.sh lnd-import ${filename}) + + # TODO: check if update of LND is needed (see detailes in lnd-import) for edge case + + # turn off auto-unlock if activated because password c might now change + if [ "${autoUnlock}" == "on" ]; then + /home/admin/config.scripts/lnd.autounlock.sh off + fi + + # restarting lnd & give final info + sudo systemctl start lnd + echo "DONE - lnd is now restarting .. Password C is now like within your rescue file" + echo "Check that LND is starting up correctly and your old channel & funds are restored." + echo "Take into account that some channels might have been force closed in the meanwhile." + exit 0 +fi + +#################################### +# STATIC CHANEL BACKUP FILE - EXPORT +#################################### + +if [ ${mode} = "scb-export" ]; then + + # get file info + source /mnt/hdd/raspiblitz.conf + echo "filename='/mnt/hdd/lnd/data/chain/${network}/${chain}net/channel.backup'" + echo "fileuser='bitcoin'" + + # localip + source <(/home/admin/config.scripts/internet.sh status local) + echo "localip='${localip}'" + + exit 0 +fi + +if [ ${mode} = "scb-export-gui" ]; then + + # get the scb info + source <(sudo /home/admin/config.scripts/lnd.backup.sh scb-export) + + # show download info + clear + echo "**************************************" + echo "* DOWNLOAD STATIC CHANEL BACKUP FILE *" + echo "**************************************" + echo + echo "RUN THE FOLLOWING COMMAND ON YOUR LAPTOP IN NEW TERMINAL:" + echo "scp -r ${fileuser}@${localip}:${filename} ./" + echo "" + echo "Use password A to authenticate file transfer." + echo + echo "NOTE: Use this file when setting up a fresh RaspiBlitz by choosing" + echo "option OLD WALLET and then SCB+SEED -> Seed & channel.backup file" + echo "Will just recover on-chain & channel-funds, but closing all channels" + exit 0 +fi + +#################################### +# STATIC CHANEL BACKUP FILE - IMPORT +#################################### + +if [ ${mode} = "scb-import" ]; then + + # 2nd PARAMETER: file to import (expect that the file was valid checked from calling script) + filename=$2 + if [ "${filename}" == "" ]; then + echo "error='filename missing'" + exit 1 + fi + fileExists=$(sudo ls ${filename} 2>/dev/null | grep -c "${filename}") + if [ "${fileExists}" != "1" ]; then + echo "error='filename not found'" + exit 1 + fi + + # place the the file at '/home/admin/channel.backup' + sudo mv ${filename} /home/admin/channel.backup + sudo chmod 777 /home/admin/channel.backup + sudo chown admin:admin /home/admin/channel.backup + echo "# OK - placed SCB file at /home/admin/channel.backup" + +fi + +if [ ${mode} = "scb-import-gui" ]; then + + # get by second parameter if this call if happening during setup or production + scenario=$2 + if [ "${scenario}" != "setup" ] && [ "${scenario}" != "production" ]; then + echo "error='mising parameter'" + exit 1 + fi + + # scenario setup needs a 3rd parameter - the SETUPFILE to store results in + if [ "${scenario}" == "setup" ]; then + SETUPFILE=$3 + if [ "${SETUPFILE}" == "" ]; then + echo "error='mising parameter'" + exit 1 + fi + fi + + # determine password info based on scenario + if [ "${scenario}" == "setup" ]; then + passwordInfo="password 'raspiblitz'" + else + passwordInfo="your Password A" + fi + + # get defaultUploadPath, localIP, etc + source <(sudo /home/admin/config.scripts/blitz.upload.sh prepare-upload) + + filename="" + while [ "${filename}" == "" ] + do + + clear + echo "**********************************" + echo "* UPLOAD THE channel.backup FILE *" + echo "**********************************" + echo + echo "If you have the channel.backup file on your laptop or on" + echo "another server you can now upload it to the RaspiBlitz." + echo + echo "To make upload open a new terminal and change," + echo "into the directory where your lnd-rescue file is and" + echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" + echo "scp ./*.backup ${defaultUploadUser}@${localip}:${defaultUploadPath}/" + echo "" + echo "Use ${passwordInfo} to authenticate file transfer." + echo "PRESS ENTER when upload is done." + read key + + # check upload (will return filename or error) + source <(sudo /home/admin/config.scripts/blitz.upload.sh check-upload scb) + if [ "${filename}" != "" ]; then + echo "OK - File found: ${filename}" + echo "PRESS ENTER to continue." + read key + elif [ "${error}" == "not-found" ]; then + echo "!! WARNING !!" + echo "There was no upload found in ${defaultUploadPath}" + echo "Make sure you upload only one tar.gz-file and start again." + echo "PRESS ENTER to continue & retry" + read key + elif [ "${error}" == "multiple" ]; then + echo "!! WARNING !!" + echo "There are multiple lnd-rescue files in directory ${defaultUploadPath}" + echo "Make sure you upload only one tar.gz-file and start again." + echo "PRESS ENTER to continue & retry" + read key + elif [ "${error}" == "invalid" ]; then + echo "!! WARNING !!" + echo "The file uploaded is not a valid (complete upload failed or not correct file)." + echo "PRESS ENTER to continue & retry" + read key + else + echo "!! WARNING !! Unknown State (report to devs)" + exit 1 + fi + done + + # in setup scenario the final import is happening during provison + if [ "${scenario}" == "setup" ]; then + # just add staticchannelbackup filename to give file + echo "staticchannelbackup='${filename}'" >> $SETUPFILE + echo "" + exit 0 + fi + + # run import process + echo "OK importing channel.backup file ..." + source <(sudo /home/admin/config.scripts/lnd.backup.sh scb-import ${filename}) + + # give final info + echo "DONE - placed SCB file at /home/admin/channel.backup" + echo "Reboot and login to trigger import." + exit 0 +fi + +#################################### +# SEED WORDS - GUI PARTS +#################################### + + echo "# lnd.backup.sh seed-export-gui [seedwords6x4]" + echo "# lnd.backup.sh seed-import-gui [resultfile]" + +if [ ${mode} = "seed-export-gui" ]; then + + # 2nd PARAMETER: lnd seed data + seedwords=$2 + if [ "${seedwords}" == "" ]; then + echo "error='mising parameter'" + exit 1 + fi + + ack=0 + while [ ${ack} -eq 0 ] + do + whiptail --title "IMPORTANT SEED WORDS - PLEASE WRITE DOWN" --msgbox "LND Wallet got created. Store these numbered words in a safe location:\n\n${seedwords6x4}" 12 76 + whiptail --title "Please Confirm" --yes-button "Show Again" --no-button "CONTINUE" --yesno " Are you sure that you wrote down the word list?" 8 55 + if [ $? -eq 1 ]; then + ack=1 + fi + done + +fi + +# Results will be stored on memory cache: +# /var/cache/raspiblitz/seed-import.results +if [ ${mode} = "seed-import-gui" ]; then + + # prepare seed result file + sudo rm /var/cache/raspiblitz/seed-import.results 2>/dev/null + sudo touch /var/cache/raspiblitz/seed-import.results + sudo chown admin:admin /var/cache/raspiblitz/seed-import.results + + # input loop for seed words + wordsCorrect=0 + while [ ${wordsCorrect} -eq 0 ] + do + + # prepare temp file + sudo rm /var/cache/raspiblitz/.seed.tmp 2>/dev/null + sudo touch /var/cache/raspiblitz/.seed.tmp + sudo chown admin:admin /var/cache/raspiblitz/.seed.tmp + + # dialog to enter + dialog --backtitle "RaspiBlitz - LND Recover" --inputbox "Please enter/paste the SEED WORD LIST:\n(just the words, seperated by spaces, in correct order as numbered)" 9 78 2>/var/cache/raspiblitz/.seed.tmp + wordstring=$(cat /var/cache/raspiblitz/.seed.tmp | sed 's/[^a-zA-Z0-9 ]//g') + sudo shred -u /var/cache/raspiblitz/.seed.tmp 2>/dev/null + echo "processing ..." + + # check correct number of words + wordcount=$(echo "${wordstring}" | wc -w) + if [ ${wordcount} -eq 24 ]; then + echo "OK - 24 words" + wordsCorrect=1 + else + whiptail --title " WARNING " \ + --yes-button "Try Again" \ + --no-button "Cancel" \ + --yesno " +The word list has ${wordcount} words. But it must be 24. +Please check your list and try again. + +Best is to write words in external editor +and then copy and paste them into dialog. + +The Word list should look like this: +wordone wordtweo wordthree ... + +" 16 52 + + if [ $? -eq 1 ]; then + # result file is empty on cancel + exit 1 + fi + fi + done + + # ask if seed was protected by password D + passwordD="" + dialog --title "SEED PASSWORD" --yes-button "No extra Password" --no-button "Yes" --yesno " +Are your seed words protected by an extra password? + +During wallet creation LND offers to set an extra password +to protect the seed words. Most users did not set this. + " 11 65 + if [ $? -eq 1 ]; then + sudo rm /var/cache/raspiblitz/.pass.tmp 2>/dev/null + sudo touch /var/cache/raspiblitz/.pass.tmp + sudo chown admin:admin /var/cache/raspiblitz/.pass.tmp + sudo /home/admin/config.scripts/blitz.setpassword.sh x "Enter extra Password D" /var/cache/raspiblitz/.pass.tmp empty-allowed + passwordD=$(sudo cat /var/cache/raspiblitz/.pass.tmp) + sudo shred -u /var/cache/raspiblitz/.pass.tmp 2>/dev/null + fi + + # writing result file data + clear + echo "# result of in mem cache: /var/cache/raspiblitz/seed-import.results" + echo "seedwords='${wordstring}'" >> /var/cache/raspiblitz/seed-import.results + echo "password='${passwordD}'" >> /var/cache/raspiblitz/seed-import.results + exit 0 + +fi + +echo "error='unknown parameter'" +exit 1 diff --git a/home.admin/config.scripts/lnd.rescue.sh b/home.admin/config.scripts/lnd.rescue.sh deleted file mode 100755 index e10309702..000000000 --- a/home.admin/config.scripts/lnd.rescue.sh +++ /dev/null @@ -1,292 +0,0 @@ -#!/bin/bash - -source /mnt/hdd/raspiblitz.conf - -# command info -if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then - echo "# small rescue script to to backup or restore LND data" - echo "# -> basic status:" - echo "# lnd.rescue.sh status" - echo "# -> backup all LND data in a tar.gz file for download:" - echo "# lnd.rescue.sh backup [?no-download]" - echo "# -> upload a LND data tar.gz file to replace LND data:" - echo "# lnd.rescue.sh restore" - echo "# -> download the LND channel.backup file from SD card:" - echo "# lnd.rescue.sh scb-down" - echo "# -> upload the LND channel.backup to recover wallet:" - echo "# lnd.rescue.sh scb-up" - exit 1 -fi - -# get local ip -source <(/home/admin/config.scripts/internet.sh status local) - -defaultUploadDir="/home/admin" - -mode="$1" - -if [ ${mode} = "status" ]; then - - echo "localip='${localip}'" - echo "defaultUploadDir='${defaultUploadDir}'" - exit 0 - -elif [ ${mode} = "backup" ]; then - - ################################ - # BACKUP - ################################ - - echo "# *** LND.RESCUE --> BACKUP" - - # stop LND - echo "# Stopping lnd..." - sudo systemctl stop lnd - sleep 5 - echo "# OK" - echo - - # zip it - sudo tar -zcvf /home/admin/lnd-rescue.tar.gz /mnt/hdd/lnd 1>&2 - sudo chown admin:admin /home/admin/lnd-rescue.tar.gz 1>&2 - - # delete old backups - rm /home/admin/lnd-rescue-*.tar.gz 2>/dev/null 1>/dev/null - - # name with md5 checksum - md5checksum=$(md5sum /home/admin/lnd-rescue.tar.gz | head -n1 | cut -d " " -f1) - mv /home/admin/lnd-rescue.tar.gz /home/admin/lnd-rescue-${md5checksum}.tar.gz 1>&2 - echo "file='lnd-rescue-${md5checksum}.tar.gz'" - echo "path='/home/admin/'" - - byteSize=$(ls -l /home/admin/lnd-rescue-${md5checksum}.tar.gz | awk '{print $5}') - echo "size=${byteSize}" - - if [ ${byteSize} -lt 100 ]; then - echo "error='backup is empty'" - echo - echo "# *****************************" - echo "# * BACKUP ERROR *" - echo "# *****************************" - echo "# The byte size of the created rescue-file is too small (${byteSize}) - might be empty!" - echo "# If you plan any update or recovery please stop and report this error to dev team. Thx." - exit 0 - fi - - # stop here in case of 'no-download' option - if [ "${2}" == "no-download" ]; then - echo "# No download of LND data requested." - exit 0 - fi - - # offer SCP for download - clear - echo - echo "****************************" - echo "* DOWNLOAD THE RESCUE FILE *" - echo "****************************" - echo - echo "ON YOUR MAC & LINUX LAPTOP - RUN IN NEW TERMINAL:" - echo "scp -r 'admin@${localip}:/home/admin/lnd-rescue-*.tar.gz' ./" - echo "ON WINDOWS USE:" - echo "scp -r admin@${localip}:/home/admin/lnd-rescue-*.tar.gz ." - echo "" - echo "Use password A to authenticate file transfer." - echo "Check for correct file size after transfer: ${byteSize} byte" - echo - echo "BEWARE: Your Lightning node is now stopped. It's safe to backup the data and" - echo "restore it on a fresh RaspiBlitz. But once this Lightning node gets started" - echo "again or rebooted, it's not advised to restore the backup file because" - echo "it would contain outdated channel data and can lead to loss of channel funds." - -elif [ ${mode} = "restore" ]; then - - ################################ - # RESTORE - ################################ - - echo "# LND.RESCUE --> RESTORE" - echo "" - - # delete old backups - rm /home/admin/lnd-rescue-*.tar.gz - - filename="" - while [ ${#filename} -eq 0 ] - do - countZips=$(sudo ls /home/admin/lnd-rescue-*.tar.gz 2>/dev/null | grep -c 'lnd-rescue') - if [ ${countZips} -lt 1 ]; then - echo "**************************" - echo "* UPLOAD THE RESCUE FILE *" - echo "**************************" - echo "If you have a lnd-rescue backup file on your laptop you can now" - echo "upload it and restore the your latest LND state." - echo - echo "CAUTION: Dont restore old LND states - risk of loosing funds!" - echo - echo "To make upload open a new terminal on your laptop," - echo "change into the directory where your lnd-rescue file is and" - echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" - echo "scp -r ./lnd-rescue-*.tar.gz admin@${localip}:/home/admin/" - echo "" - echo "Use password A to authenticate file transfer." - echo "PRESS ENTER when upload is done." - fi - if [ ${countZips} -gt 1 ]; then - echo "!! WARNING !!" - echo "There are multiple lnd-rescue files in directory /home/admin." - echo "Make sure you upload only one tar.gz-file and start again." - echo - echo "PRESS ENTER to continue." - read key - exit 1 - fi - if [ ${countZips} -eq 1 ]; then - - clear - echo - echo "**************************" - echo "* RESTORING BACKUP FILE *" - echo "**************************" - echo - - filename=$(sudo ls /home/admin/lnd-rescue-*.tar.gz) - echo "OK -> found file to restore: ${filename}" - - # checksum test - md5checksum=$(md5sum ${filename} | head -n1 | cut -d " " -f1) - isCorrect=$(echo ${filename} | grep -c ${md5checksum}) - if [ ${isCorrect} -eq 1 ]; then - echo "OK -> checksum looks good: ${md5checksum}" - else - echo "!!! FAIL -> Checksum not correct." - echo "Maybe transfer failed? Continue at your own risk!" - echo "It is recommended to abort and upload again!" - fi - - # overrride test - oldWalletExists=$(sudo ls /mnt/hdd/lnd/data/chain/${network}/${chain}net/wallet.db 2>/dev/null | grep -c "wallet.db") - if [ ${oldWalletExists} -gt 0 ]; then - echo - echo "WARNING: This will delete/overwrite the LND state/funds of this RaspiBlitz." - fi - echo - echo "PRESS ENTER to start restore. Enter x & ENTER to cancel." - fi - read key - if [ "${key}" == "x" ]; then - exit 1 - fi - done - - # stop LND - echo "Stopping lnd..." - sudo systemctl stop lnd - sleep 5 - echo "OK" - echo - - # clean DIR - echo "Cleaning LND data ..." - sudo rm -r /mnt/hdd/lnd/* - echo "OK" - echo - - # unpack zip - echo "Restoring LND data from ${filename} ..." - sudo tar -xf ${filename} -C / - sudo chown -R bitcoin:bitcoin /mnt/hdd/lnd - echo "OK" - echo - - # check if LND needs update - # (if RaspiBlitz has an optional LND version update, then install it - # the newer LND version can always handle older data) - echo "Checking LND version ..." - source <(sudo -u admin /home/admin/config.scripts/lnd.update.sh info) - if [ ${lndUpdateInstalled} -eq 0 ]; then - echo "Installing available LND update ... (newer version can handle more wallet formats)" - sudo -u admin /home/admin/config.scripts/lnd.update.sh verified - else - echo "OK" - fi - echo - - # start LND - echo "Starting lnd..." - sudo systemctl start lnd - echo "OK" - echo - - echo "DONE - please check if LND starts up correctly with restored state and funds." - echo "Keep in mind that some channels maybe forced closed in the meanwhile." - echo - -elif [ ${mode} = "scb-down" ]; then - - echo - echo "****************************" - echo "* DOWNLOAD THE BACKUP FILE *" - echo "****************************" - echo - echo "RUN THE FOLLOWING COMMAND ON YOUR LAPTOP IN NEW TERMINAL:" - echo "scp -r admin@${localip}:/home/admin/.lnd/data/chain/${network}/${chain}net/channel.backup ./" - echo "" - echo "Use password A to authenticate file transfer." - echo - echo "NOTE: Use this file when setting up a fresh RaspiBlitz by choosing" - echo "option OLD WALLET and then SCB+SEED -> Seed & channel.backup file" - echo "Will just recover on-chain & channel-funds, but closing all channels" - -elif [ ${mode} = "scb-up" ]; then - - gotFile=-1 - while [ ${gotFile} -lt 1 ] - do - - # show info - clear - sleep 1 - echo "**********************************" - echo "* UPLOAD THE channel.backup FILE *" - echo "**********************************" - echo - if [ ${gotFile} -eq -1 ]; then - echo "If you have the channel.backup file on your laptop or on" - echo "another server you can now upload it to the RaspiBlitz." - elif [ ${gotFile} -eq 0 ]; then - echo "NO channel.backup FOUND IN /home/admin" - echo "Please try upload again." - fi - echo - echo "To make upload open a new terminal and change," - echo "into the directory where your lnd-rescue file is and" - echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" - echo "scp ./channel.backup admin@${localip}:/home/admin/" - echo "" - echo "Use password A to authenticate file transfer." - echo "PRESS ENTER when upload is done. Enter x & ENTER to cancel." - - # wait user interaction - echo "Please upload file. Press ENTER to try again or (x & ENTER) to cancel." - read key - if [ "${key}" == "x" ]; then - # EXIT with CODE 1 --> USER CANCEL - echo "# CANCEL upload" - exit 1 - fi - - # test upload - gotFile=$(ls /home/admin/channel.backup | grep -c 'channel.backup') - - done - - # EXIT with CODE 1 --> FILE UPLOADED - echo - echo "# OK channel.backup uploaded" - sleep 2 - exit 0 - -else - echo "unknown parameter '${mode}' - exit" -fi From 9221302abbc0bc263d24633481d28320746210ee Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 2 May 2021 00:54:10 +0200 Subject: [PATCH 0058/1295] empty results on cancel --- home.admin/config.scripts/lnd.backup.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/home.admin/config.scripts/lnd.backup.sh b/home.admin/config.scripts/lnd.backup.sh index ee97df73d..d3298971a 100755 --- a/home.admin/config.scripts/lnd.backup.sh +++ b/home.admin/config.scripts/lnd.backup.sh @@ -511,7 +511,8 @@ wordone wordtweo wordthree ... " 16 52 if [ $? -eq 1 ]; then - # result file is empty on cancel + echo "# CANCEL empty results in: /var/cache/raspiblitz/seed-import.results" + clear exit 1 fi fi From a687480026f2d93a6c23b9fe069ba00aec98001e Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 2 May 2021 00:57:59 +0200 Subject: [PATCH 0059/1295] clear info --- home.admin/config.scripts/lnd.backup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/lnd.backup.sh b/home.admin/config.scripts/lnd.backup.sh index d3298971a..8ca8bae53 100755 --- a/home.admin/config.scripts/lnd.backup.sh +++ b/home.admin/config.scripts/lnd.backup.sh @@ -511,8 +511,8 @@ wordone wordtweo wordthree ... " 16 52 if [ $? -eq 1 ]; then - echo "# CANCEL empty results in: /var/cache/raspiblitz/seed-import.results" clear + echo "# CANCEL empty results in: /var/cache/raspiblitz/seed-import.results" exit 1 fi fi From dd2d69d9920199bd8e9692a236aa920aedcd5d92 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 2 May 2021 01:21:34 +0200 Subject: [PATCH 0060/1295] harmonize seed input vars --- home.admin/00migrationDialog.sh | 1 + home.admin/00provisionDialog.sh | 13 +++++++++++-- home.admin/config.scripts/lnd.backup.sh | 17 ++++++++++------- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index 0656b965d..f26816a16 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -1,5 +1,6 @@ #!/bin/bash +# TODO: use blitz.upload.sh for uploading the migration file # TODO: also the migration might need to be adapted to work with an already mounted HDD later # command info diff --git a/home.admin/00provisionDialog.sh b/home.admin/00provisionDialog.sh index 259377168..4296c6ce3 100755 --- a/home.admin/00provisionDialog.sh +++ b/home.admin/00provisionDialog.sh @@ -178,8 +178,17 @@ fi # INPUT LIGHTNING SEED dialog (if activated by dialogs above) if [ ${enterSEED} -eq 1 ]; then - echo "TODO: INPUT LIGHTNING SEED" - exit 1 + /home/admin/config.scripts/lnd.backup.sh seed-import-gui + # load results from results file + source <(/var/cache/raspiblitz/seed-import.results) + # if user canceled the seed input + if [ "${seedWords}" == "" ]; then + echo "# you selected cancel - exited to terminal" + echo "# use command 'restart' to reboot & start again" + exit 1 + fi + echo "seedWords='${seedWords}'" >> $SETUPFILE + echo "seedPassword='${seedPassword}'" >> $SETUPFILE fi # UPLOAD STATIC CHANNEL BACKUP FILE dialog (if activated by dialogs above) diff --git a/home.admin/config.scripts/lnd.backup.sh b/home.admin/config.scripts/lnd.backup.sh index 8ca8bae53..7dd32f2b6 100755 --- a/home.admin/config.scripts/lnd.backup.sh +++ b/home.admin/config.scripts/lnd.backup.sh @@ -440,14 +440,14 @@ fi # SEED WORDS - GUI PARTS #################################### - echo "# lnd.backup.sh seed-export-gui [seedwords6x4]" - echo "# lnd.backup.sh seed-import-gui [resultfile]" - if [ ${mode} = "seed-export-gui" ]; then + # use text snippet for testing: + # + # 2nd PARAMETER: lnd seed data - seedwords=$2 - if [ "${seedwords}" == "" ]; then + seedwords6x4=$2 + if [ "${seedwords6x4}" == "" ]; then echo "error='mising parameter'" exit 1 fi @@ -468,6 +468,9 @@ fi # /var/cache/raspiblitz/seed-import.results if [ ${mode} = "seed-import-gui" ]; then + # fake seed 24 words for testing input: + # eins zwei polizei drei vier great idea fünf sechs alte keks sieben auch gute nacht ja ja ja was ist los was ist das + # prepare seed result file sudo rm /var/cache/raspiblitz/seed-import.results 2>/dev/null sudo touch /var/cache/raspiblitz/seed-import.results @@ -538,8 +541,8 @@ to protect the seed words. Most users did not set this. # writing result file data clear echo "# result of in mem cache: /var/cache/raspiblitz/seed-import.results" - echo "seedwords='${wordstring}'" >> /var/cache/raspiblitz/seed-import.results - echo "password='${passwordD}'" >> /var/cache/raspiblitz/seed-import.results + echo "seedWords='${wordstring}'" >> /var/cache/raspiblitz/seed-import.results + echo "seedPassword='${passwordD}'" >> /var/cache/raspiblitz/seed-import.results exit 0 fi From c4ca80072302a1f5e777ba985d7c7bfa1db7500e Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 2 May 2021 01:35:11 +0200 Subject: [PATCH 0061/1295] upload migration file --- home.admin/config.scripts/blitz.upload.sh | 25 ++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh index e366f7e6f..8880c6ab6 100644 --- a/home.admin/config.scripts/blitz.upload.sh +++ b/home.admin/config.scripts/blitz.upload.sh @@ -4,7 +4,7 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo "# use to prepare & check scp or web file upload to RaspiBlitz" echo "# blitz.upload.sh prepare-upload" - echo "# blitz.upload.sh check-upload ?[scb|lnd-rescue]" + echo "# blitz.upload.sh check-upload ?[scb|lnd-rescue|migration]" exit 0 fi @@ -109,6 +109,29 @@ if [ ${action} = "check-upload" ]; then exit 1 fi + # MIGRATION check if file looks valid + if [ "${type}" == "migration" ]; then + + # general filename check + typeCount=$(sudo ls ${defaultUploadPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz') + if [ "${typeCount}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='not raspiblitz-*.tar.gz'" + exit 1 + fi + + # checksum test + md5checksum=$(md5sum ${filename} | head -n1 | cut -d " " -f1) + echo "# filename(${md5checksum})" + isCorrect=$(echo ${filename} | grep -c ${md5checksum}) + if [ "${isCorrect}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='incorrect checksum'" + exit 1 + fi + fi # ok looks good - return filename & more info From d7813ff86f94c9b5d1e3d526192fb7bb7b9a2fb4 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 2 May 2021 01:35:28 +0200 Subject: [PATCH 0062/1295] upload migration file --- home.admin/00migrationDialog.sh | 90 ++++++++++++++++++--------------- home.admin/00provisionDialog.sh | 8 +-- 2 files changed, 52 insertions(+), 46 deletions(-) diff --git a/home.admin/00migrationDialog.sh b/home.admin/00migrationDialog.sh index f26816a16..e98958844 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/00migrationDialog.sh @@ -49,54 +49,60 @@ if [ "${migrationOS}" == "raspiblitz" ]; then echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE # get defaultUploadPath, localIP, etc - source <(sudo /home/admin/config.scripts/blitz.migration.sh status) + source <(sudo /home/admin/config.scripts/blitz.upload.sh prepare-upload) - # make sure that temp directory exists, is clear and can be written by user bitcoin - sudo mkdir -p ${defaultUploadPath} 2>/dev/null - sudo rm /mnt/hdd/temp/migration/* 2>/dev/null - sudo chown -R bitcoin:bitcoin ${defaultUploadPath} 2>/dev/null + filename="" + while [ "${filename}" == "" ] + do - # scp upload info - clear - echo - echo "*****************************" - echo "* UPLOAD THE MIGRATION FILE *" - echo "*****************************" - echo "If you have a migration file on your laptop you can now" - echo "upload it and restore on the new HDD/SSD." - echo - echo "ON YOUR LAPTOP open a new terminal and change into" - echo "the directory where your migration file is and" - echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" - echo "scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultUploadPath}" - echo "" - echo "Use password 'raspiblitz' to authenticate file transfer." - echo "PRESS ENTER when upload is done." - read key + clear + echo "*****************************" + echo "* UPLOAD THE MIGRATION FILE *" + echo "*****************************" + echo "If you have a migration file on your laptop you can now" + echo "upload it and restore on the new HDD/SSD." + echo + echo "ON YOUR LAPTOP open a new terminal and change into" + echo "the directory where your migration file is and" + echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" + echo "scp -r ./raspiblitz-*.tar.gz ${defaultUploadUser}@${localip}:${defaultUploadPath}/" + echo "" + echo "Use password 'raspiblitz' to authenticate file transfer." + echo "PRESS ENTER when upload is done." + read key - countZips=$(sudo ls ${defaultUploadPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz-') - - # in case no upload found - if [ ${countZips} -eq 0 ]; then - echo "FAIL: Was not able to detect uploaded file in ${defaultUploadPath}" - echo "Shutting down ... please make a fresh sd card & try again." - sleep 3 - echo "shutdown=1" >> $SETUPFILE - exit 1 - fi - - # in case of multiple files - if [ ${countZips} -gt 1 ]; then - echo "# FAIL: Multiple possible files detected in ${defaultUploadPath}" - echo "Shutting down ... please make a fresh sd card & try again." - sleep 3 - echo "shutdown=1" >> $SETUPFILE - exit 1 - fi + # check upload (will return filename or error) + source <(sudo /home/admin/config.scripts/blitz.upload.sh check-upload migration) + if [ "${filename}" != "" ]; then + echo "OK - File found: ${filename}" + echo "PRESS ENTER to continue." + read key + elif [ "${error}" == "not-found" ]; then + echo "!! WARNING !!" + echo "There was no upload found in ${defaultUploadPath}" + echo "Make sure you upload only one tar.gz-file and start again." + echo "PRESS ENTER to continue & retry" + read key + elif [ "${error}" == "multiple" ]; then + echo "!! WARNING !!" + echo "There are multiple lnd-rescue files in directory ${defaultUploadPath}" + echo "Make sure you upload only one tar.gz-file and start again." + echo "PRESS ENTER to continue & retry" + read key + elif [ "${error}" == "invalid" ]; then + echo "!! WARNING !!" + echo "The file uploaded is not a valid (complete upload failed or not correct file)." + echo "PRESS ENTER to continue & retry" + read key + else + echo "!! WARNING !! Unknown State (report to devs)" + exit 1 + fi + done # further checks and unpacking will be done when migration is processed (not part of dialog) echo "OK: Migration data was imported - will process after password reset" - echo "migrationFile='${defaultUploadPath}'" >> $SETUPFILE + echo "migrationFile='${filename}'" >> $SETUPFILE sleep 4 # user needs to reset password A diff --git a/home.admin/00provisionDialog.sh b/home.admin/00provisionDialog.sh index 4296c6ce3..2bedc4b94 100755 --- a/home.admin/00provisionDialog.sh +++ b/home.admin/00provisionDialog.sh @@ -231,7 +231,7 @@ password=$(sudo cat $_temp) echo "passwordC='${password}'" >> $SETUPFILE dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password C set" 7 20 -echo "TODO: continue with further " -exit 1 - -clear \ No newline at end of file +clear +echo "# setup dialog done - results in:" +echo "# $CONFIGFILE" +echo "# $SETUPFILE" \ No newline at end of file From 12bd7fe981c3f2fdd843866214a175ee9226082d Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 2 May 2021 11:41:40 +0200 Subject: [PATCH 0063/1295] cleanup migration script --- home.admin/config.scripts/blitz.migration.sh | 279 ++----------------- 1 file changed, 26 insertions(+), 253 deletions(-) diff --git a/home.admin/config.scripts/blitz.migration.sh b/home.admin/config.scripts/blitz.migration.sh index 79f06024c..7ad3c8ad8 100755 --- a/home.admin/config.scripts/blitz.migration.sh +++ b/home.admin/config.scripts/blitz.migration.sh @@ -1,10 +1,8 @@ #!/bin/bash -# TODO: check if services/apps are running and stop all ... or let thet to outside? - if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo "# managing the RaspiBlitz data - import, export, backup." - echo "# blitz.migration.sh [status|export|import|export-gui|import-gui|migration-umbrel|migration-mynode]" + echo "# blitz.migration.sh [export|import|export-gui|migration-umbrel|migration-mynode]" echo "error='missing parameters'" exit 1 fi @@ -22,9 +20,6 @@ fi # check if data drive is mounted - other wise cannot operate isMounted=$(sudo df | grep -c /mnt/hdd) -# gathering system info -isBTRFS=$(lsblk -o FSTYPE,MOUNTPOINT | grep /mnt/hdd | awk '$1=$1' | cut -d " " -f 1 | grep -c btrfs) - # set place where zipped TAR file gets stored defaultUploadPath="/mnt/hdd/temp/migration" @@ -40,7 +35,6 @@ scpUploadWin="scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultUploadPat # output status data & exit if [ "$1" = "status" ]; then echo "# RASPIBLITZ Data Import & Export" - echo "isBTRFS=${isBTRFS}" echo "localip=\"${localip}\"" echo "defaultUploadPath=\"${defaultUploadPath}\"" echo "scpDownloadUnix=\"${scpDownloadUnix}\"" @@ -353,7 +347,7 @@ if [ "$1" = "export-gui" ]; then # create new migration file clear echo "--> creating blitz migration file ... (please wait)" - source <(sudo /home/admin/config.scripts/blitz.migration.sh "export") + source <(sudo /home/admin/config.scripts/blitz.migration.sh export) if [ ${#filename} -eq 0 ]; then echo "# FAIL: was not able to create migration file" exit 0 @@ -393,71 +387,29 @@ fi if [ "$1" = "import" ]; then - # check second parameter for path and/or filename of import - importFile="${defaultUploadPath}/raspiblitz-*.tar.gz" - if [ ${#2} -gt 0 ]; then - # check if and/or filename of import - containsPath=$(echo $2 | grep -c '/') - if [ ${containsPath} -gt 0 ]; then - startsOnPath=$(echo $2 | grep -c '^/') - if [ ${startsOnPath} -eq 0 ]; then - echo "# needs to be an absolut path: ${2}" - echo "error='invalid path'" - exit 1 - else - if [ -d "$2" ]; then - echo "# using path from parameter to search for import" - endsOnPath=$(echo $2 | grep -c '/$') - if [ ${endsOnPath} -eq 1 ]; then - importFile="${2}raspiblitz-*.tar.gz" - else - importFile="${2}/raspiblitz-*.tar.gz" - fi - else - echo "# using path+file from parameter for import" - importFile=$2 - fi - fi - else - # is just filename - to use with default path - echo "# using file from parameter for import" - importFile="${defaultUploadPath}/${2}" - fi - fi - - # checking if file exists and unique - echo "# checking for file with: ${importFile}" - countZips=$(sudo ls ${importFile} 2>/dev/null | grep -c '.tar.gz') - if [ ${countZips} -eq 0 ]; then - echo "# can just find file when ends on .tar.gz and exists" - echo "scpUploadUnix=\"${scpUploadUnix}\"" - echo "scpUploadWin=\"${scpUploadWin}\"" - echo "error='file not found'" + # BACKGROUND: + # the migration import is only called during setup phase - assume a prepared but clean HDD + + # 2nd PARAMETER: file to import (expect that the file was valid checked from calling script) + importFile=$2 + if [ "${importFile}" == "" ]; then + echo "error='filename missing'" exit 1 - elif [ ${countZips} -eq 1 ]; then - importFile=$(sudo ls ${importFile}) - else - echo "# Multiple files found. Not sure which to use." - echo "# Please use absolut-path+file as second parameter." - echo "error='file not unique'" + fi + fileExists=$(sudo ls ${importFile} 2>/dev/null | grep -c "${importFile}") + if [ "${fileExists}" != "1" ]; then + echo "error='filename not found'" exit 1 fi echo "importFile='${importFile}'" - echo "# Validating Checksum (can take some time) .." - md5checksum=$(md5sum ${importFile} | head -n1 | cut -d " " -f1) - isCorrect=$(echo ${importFile} | grep -c ${md5checksum}) - if [ ${isCorrect} -eq 1 ]; then - echo "# OK -> checksum looks good: ${md5checksum}" - else - echo "# FAIL -> Checksum not correct: ${md5checksum}" - echo "# Maybe transfer/upload failed?" - echo "error='bad checksum'" - exit 1 - fi - echo "# Importing (overwrite) (can take some time) .." sudo tar -xf ${importFile} -C / + if [ "$?" != "0" ]; then + echo "error='non zero exit state of unzipping migration file'" + echo "# reboot system ... HDD will offer fresh formating" + exit 1 + fi # copy bitcoin/litecoin data backups back to orgplaces (if part of backup) if [ -d "/mnt/hdd/backup_bitcoin" ]; then @@ -477,197 +429,18 @@ if [ "$1" = "import" ]; then sudo chown bitcoin:bitcoin -R /mnt/storage/litecoin 2>/dev/null fi - echo "# OK done - you may now want to:" - echo "# make sure that HDD is not registered in /etc/fstab & reboot" - echo "# to kickstart recovering system based in imported data" - - exit 0 -fi - -if [ "$1" = "import-gui" ]; then - - # get info about HDD - echo "# Gathering HDD/SSD info ..." - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) - - # make sure HDD/SSD is not mounted - # because importing migration just works during early setup - if [ ${isMounted} -eq 1 ]; then - echo "FAIL --> cannot import migration data when HDD/SSD is mounted" + # check migration + raspiblitzConfExists=$(sudo ls /mnt/hdd/raspiblitz.conf | grep -c "raspiblitz.conf") + if [ "${raspiblitzConfExists}" != "1" ]; then + echo "error='no raspiblitz.conf after unzip migration file'" + echo "# reboot system ... HDD will offer fresh formating" exit 1 fi - # make sure a HDD/SSD is connected - if [ ${#hddCandidate} -eq 0 ]; then - echo "FAIL --> there is no HDD/SSD connected to migrate data to" - exit 1 - fi - - # check if HDD/SSD is big enough - if [ ${hddGigaBytes} -lt 120 ]; then - echo "FAIL --> connected HDD/SSD is too small" - exit 1 - fi - - # ask format for new HDD/SSD - OPTIONS=() - # check if HDD/SSD contains Bitcoin Blockchain - if [ "${hddBlocksBitcoin}" == "1" ]; then - OPTIONS+=(KEEP "Dont format & use Blockchain") - fi - OPTIONS+=(EXT4 "Ext4 & 1 Partition (default)") - OPTIONS+=(BTRFS "BTRFS & 3 Partitions (experimental)") - - useBlockchain=0 - hddFormat=None - CHOICE=$(whiptail --clear --title "Formatting ${hddCandidate}" --menu "" 10 52 3 "${OPTIONS[@]}" 2>&1 >/dev/tty) - clear - case $CHOICE in - EXT4) - hddFormat=ext4 - echo "EXT4 FORMAT -->" - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh format ext4 ${hddPartitionCandidate}) - if [ ${#error} -gt 0 ]; then - echo "FAIL --> ${error}" - exit 1 - fi - ;; - BTRFS) - hddFormat=btrfs - echo "BTRFS FORMAT" - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh format btrfs ${hddCandidate}) - if [ ${#error} -gt 0 ]; then - echo "FAIL --> ${error}" - exit 1 - fi - ;; - KEEP) - echo "Keep HDD & Blockchain" - useBlockchain=1 - ;; - *) - echo "CANCEL" - exit 0 - ;; - esac - - if [ ${useBlockchain} -eq 1 ]; then - if [ ${isBTRFS} -eq 1 ]; then - hddFormat=btrfs - else - hddFormat=ext4 - fi - fi - - # now temp mount the HDD/SSD - if [ "$hddFormat" == "btrfs" ]; then - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddCandidate}) - else - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddPartitionCandidate}) - fi - if [ ${#error} -gt 0 ]; then - echo "FAIL: Was not able to temp mount the HDD/SSD --> ${error}" - exit 1 - fi - - # make sure all directories betare propper linked - sudo /home/admin/config.scripts/blitz.datadrive.sh link - - # make sure that temp directory exists and can be written by admin - sudo mkdir -p ${defaultUploadPath} - sudo chmod 777 -R ${defaultUploadPath} - - clear - echo - echo "*****************************" - echo "* UPLOAD THE MIGRATION FILE *" - echo "*****************************" - echo "If you have a migration file on your laptop you can now" - echo "upload it and restore on the new HDD/SSD." - echo - echo "ON YOUR LAPTOP open a new terminal and change into" - echo "the directory where your migration file is and" - echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" - echo "scp -r ./raspiblitz-*.tar.gz admin@${localip}:${defaultUploadPath}" - echo "" - echo "Use password 'raspiblitz' to authenticate file transfer." - echo "PRESS ENTER when upload is done." - read key - - countZips=$(sudo ls ${defaultUploadPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz-') - - # in case no upload found - if [ ${countZips} -eq 0 ]; then - echo - echo "FAIL: Was not able to detect uploaded file in ${defaultUploadPath}" - echo "error='no file found'" - sleep 3 - exit 1 - fi - - # in case of multiple files - if [ ${countZips} -gt 1 ]; then - echo - echo "# FAIL: Multiple possible files detected in ${defaultUploadPath}" - echo "error='multiple files'" - sleep 3 - exit 1 - fi - - # restore upload - echo - echo "OK: Upload found in ${defaultUploadPath} - restoring data ... (please wait)" - source <(sudo /home/admin/config.scripts/blitz.migration.sh "import") - if [ ${#error} -gt 0 ]; then - echo - echo "# FAIL: Was not able to restore data" - echo "error='${error}'" - sleep 3 - exit 1 - fi - - # check & load config - source /mnt/hdd/raspiblitz.conf - if [ ${#network} -eq 0 ]; then - echo - echo "FAIL: No raspiblitz.conf found afer migration restore" - echo "error='migration contains no raspiblitz.conf'" - sleep 3 - exit 1 - fi - - echo - echo "OK: Migration data was imported" - echo "PRESS ENTER" - read key - - # Copy from other computer is only option for Bitcoin - if [ "${network}" == "bitcoin" ] && [ ${useBlockchain} -eq 0 ]; then - OPTIONS=(SYNC "Re-Sync & Validate Blockchain" \ - COPY "Copy over LAN from other Computer" - ) - CHOICE=$(whiptail --clear --title "How to get Blockchain?" --menu "" 9 52 2 "${OPTIONS[@]}" 2>&1 >/dev/tty) - clear - case $CHOICE in - COPY) - echo "Copy Blockchain Data -->" - /home/admin/50copyHDD.sh stop-after-script - ;; - esac - fi - - # if there is no blockchain yet - fallback to syncing - if [ $(sudo ls /mnt/hdd/bitcoin/ 2>/dev/null | grep -c blocks) -eq 0 ]; then - echo "Setting Blockchain Data to resync ..." - sudo -u bitcoin mkdir /mnt/hdd/${network}/blocks 2>/dev/null - sudo -u bitcoin mkdir /mnt/hdd/${network}/chainstate 2>/dev/null - sudo -u bitcoin touch /mnt/hdd/${network}/blocks/.selfsync - fi - - echo "--> Now rebooting and kicking your node in to recovery/update mode ..." - sudo shutdown -r now + # correcting all user rights on data will be done by provisioning process + echo "# OK import done - provisioning process needed" exit 0 fi echo "error='unkown command'" -exit 1 +exit 1 \ No newline at end of file From 73c1c9ef690d29cd2c934d85e47b315b756dd70a Mon Sep 17 00:00:00 2001 From: nyxnor <69700936+nyxnor@users.noreply.github.com> Date: Sun, 2 May 2021 23:30:25 +0000 Subject: [PATCH 0064/1295] Raspibolt logo when reaching terminal when exiting menu The ASCII above is height=70 Just got the raspibolt logo https://stadicus.github.io/RaspiBolt/ and used this https://asciigenerator.net/. I would recommend just changing the height between 50-70. This fits on the screen that I tested that is smaller than normal ones, but maybe you want smaller. The smallest I recommend is 50. Useful --> No Cool --> Yes Should be implemented --> Maybe, tell me your thoughts Also, I wanted to do this when sshing modifying `/etc/motd`, but maybe a smaller one like this: ``` _ _ _ _ _ _ __ __ _ ___ _ __ (_) |__ | (_) |_ ____ | '__/ _` / __| '_ \| | '_ \| | | __|_ / | | | (_| \__ \ |_) | | |_) | | | |_ / / |_| \__,_|___/ .__/|_|_.__/|_|_|\__/___| |_| ``` --- home.admin/00mainMenu.sh | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index 674a35664..9a1594a10 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -357,6 +357,36 @@ case $CHOICE in echo "LND command line options: lncli -h" echo "Back to main menu use command: raspiblitz" echo + echo " -==@@@====@===-- --===@====@@@==- " + echo " -@@=====-----=-===@@=====@@=====-----=====@@- -==@- " + echo " -@@------==---------@@@@@=--------==------@@- --=@@@@= " + echo " @@=------======-----@@@-----======------=@@=@@===@@= " + echo " =@@=---------=======@@@=======-----===@@@==- =@@- " + echo " -=@@==@@=----------=@@@@@@@@@=----==@@@==-- -=@@- " + echo " -@@@=----=@@===--====@@@@@@@@@@@@@@@@=-- -=@@@@= " + echo " =@@=--------@@@@@@@@@@@@@@@@@@@@@=-- -@@=---=@@- " + echo " -@@=-------=@@@=====@@@@@@@@@@=-- =@@=-------@@@ " + echo " =@@=-------=@@====@@@@@@@@==- -=@@@@=--------=@@- " + echo " =@@---------@@==@@@@@@==- -=@@@=@@@---------=@@ " + echo " -@@=--------=@@@@@@=- -@@@@@@@@@@=---------=@@ " + echo " @@=-------@@@@@@@@@=- =@@@===@@@@=@@@@--------@@- " + echo " -@@=------@@====@@@=@@@=- -=@@@======@@====@@@-------=@@ " + echo " -@@------@@@====@@@====@@@=- =@@@======@@@=====@@=------=@@ " + echo " -@@------=@@====@@@@@=====@@@=- -=@@@=@@@@@@===@@@=------=@@ " + echo " -@@-------@@@=@@@@@@@@@@@@@@@=- -=@@@@@@@@=@@@=-------=@@ " + echo " @@=-------=@@@@@@@@@@@@@@@= -=@@@=@@@@=--------@@= " + echo " -@@--------=@@======@@@@- -=@@@@@@=--------=@@ " + echo " =@@--------@@@===@@@=- --=@@@@@@=@@@--------=@@- " + echo " =@@--------@@@@@@=- -==@@@@@=====@@@--------=@@- " + echo " =@@=-------@@@= -==@@@@@@@=====@@@@=--------=@@- " + echo " -@@=----=@@- -==@@@@@@@@@@@@@@@@@==---------=@@= " + echo " =@@==@@- -==@@@@@=========@@@@@=-----------=@@@- " + echo " -@@=- --=@@@==-=@@@@@@@@@@@@@=-------------=@@=- " + echo " -@@= --=@@@==----------=======-------------==@@@= " + echo " -@@=-==@==-=@@@===------------------------==@@@@= " + echo " =@@@@==- -==@@@@@======----======@@@@@=-- " + echo " =@@=-- --===@@@@@@@@@@@===-- " + echo exit 0 esac From 7d01ef1c1f61115041212ca0b8d6e1b642edd00f Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 14:00:01 +0200 Subject: [PATCH 0065/1295] cleaner file seperation --- home.admin/00provisionDialog.sh | 237 ------------------ home.admin/00provisionInfo.sh | 14 -- home.admin/XXsyncScripts.sh | 9 +- home.admin/_commands.sh | 7 + home.admin/config.scripts/lnd.backup.sh | 41 +-- home.admin/setup.scripts/dialogBasicSetup.sh | 58 +++++ .../setup.scripts/dialogLightningWallet.sh | 164 ++++++++++++ .../dialogMigration.sh} | 167 ++++-------- home.admin/setup.scripts/dialogName.sh | 31 +++ home.admin/setup.scripts/dialogPasswords.sh | 99 ++++++++ .../setup.scripts/setupDialogControl.sh | 113 +++++++++ 11 files changed, 551 insertions(+), 389 deletions(-) delete mode 100755 home.admin/00provisionDialog.sh delete mode 100755 home.admin/00provisionInfo.sh create mode 100644 home.admin/setup.scripts/dialogBasicSetup.sh create mode 100644 home.admin/setup.scripts/dialogLightningWallet.sh rename home.admin/{00migrationDialog.sh => setup.scripts/dialogMigration.sh} (53%) create mode 100644 home.admin/setup.scripts/dialogName.sh create mode 100644 home.admin/setup.scripts/dialogPasswords.sh create mode 100755 home.admin/setup.scripts/setupDialogControl.sh diff --git a/home.admin/00provisionDialog.sh b/home.admin/00provisionDialog.sh deleted file mode 100755 index 2bedc4b94..000000000 --- a/home.admin/00provisionDialog.sh +++ /dev/null @@ -1,237 +0,0 @@ -#!/bin/bash - -# get basic info -source /home/admin/raspiblitz.info - -# temp file for dialog results -_temp=$(mktemp -p /dev/shm/) - -# flags of what passwords are to set by user -setPasswordA=1 -setPasswordB=1 -setPasswordC=1 - -# choose blockchain or select migration -OPTIONS=() -OPTIONS+=(BITCOIN1 "Setup BITCOIN & Lightning Network Daemon (LND)") -OPTIONS+=(BITCOIN2 "Setup BITCOIN & c-lightning by blockstream") -OPTIONS+=(LITECOIN "Setup LITECOIN & Lightning Network Daemon (LND)") -OPTIONS+=(MIGRATION "Upload a Migration File from old RaspiBlitz") -CHOICE=$(dialog --clear \ - --backtitle "RaspiBlitz ${codeVersion} - Setup" \ - --title "⚡ Welcome to your RaspiBlitz ⚡" \ - --menu "\nChoose how you want to setup your RaspiBlitz: \n " \ - 13 64 7 \ - "${OPTIONS[@]}" \ - 2>&1 >/dev/tty) -clear -network="" -lightning="" -case $CHOICE in - BITCOIN1) - network="bitcoin" - lightning="lnd" - ;; - BITCOIN2) - network="bitcoin" - lightning="cln" - ;; - LITECOIN) - network="litecoin" - lightning="lnd" - ;; - MIGRATION) - # send over to the migration dialogs - /home/admin/00migrationDialog.sh raspiblitz - exit 0 - ;; -esac - -# on cancel - exit to terminal -if [ "${network}" == "" ]; then - echo "# you selected cancel - exited to terminal" - echo "# use command 'restart' to reboot & start again" - exit 1 -fi - -# prepare the config file (what will later become the raspiblitz.config) -source /home/admin/_version.info -CONFIGFILE="/home/admin/raspiblitz.config.tmp" -rm $CONFIGFILE 2>/dev/null -echo "# RASPIBLITZ CONFIG FILE" > $CONFIGFILE -echo "raspiBlitzVersion='${codeVersion}'" >> $CONFIGFILE -echo "lcdrotate=1" >> $CONFIGFILE -echo "lightning=${lightning}" >> $CONFIGFILE -echo "network=${network}" >> $CONFIGFILE -echo "chain=main" >> $CONFIGFILE -echo "runBehindTor=on" >> $CONFIGFILE - -# prepare the setup file (that constains info just needed for the rest of setup process) -SETUPFILE="/home/admin/raspiblitz.setup.tmp" -rm $SETUPFILE 2>/dev/null -echo "# RASPIBLITZ SETUP FILE" > $SETUPFILE - -################### -# ENTER NAME -################### - -# welcome and ask for name of RaspiBlitz -result="" -while [ ${#result} -eq 0 ] - do - l1="Please enter the name of your new RaspiBlitz:\n" - l2="one word, keep characters basic & not too long" - dialog --backtitle "RaspiBlitz - Setup (${network}/${chain})" --inputbox "$l1$l2" 11 52 2>$_temp - result=$( cat $_temp | tr -dc '[:alnum:]-.' | tr -d ' ' ) - shred -u $_temp - echo "processing ..." - sleep 3 - done -echo "hostname=${result}" >> $CONFIGFILE - -################### -# DECIDE LIGHTNING -# do this before passwords, because password C not needed if LND rescue file is uploaded -################### - -# flags for sub dialogs after choice -uploadLNDRESCUE=0 -enterSEED=0 -uploadSCB=0 - -OPTIONS=() -OPTIONS+=(NEW "Setup a brand new Lightning Node (DEFAULT)") -OPTIONS+=(OLD "I had an old Node I want to recover/restore") -CHOICE=$(dialog --backtitle "RaspiBlitz" --clear --title "LND Setup" --menu "LND Data & Wallet" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) - -if [ "${CHOICE}" == "NEW" ]; then - - # mark all passwords to be set at the end - setPasswordA=1 - setPasswordB=1 - setPasswordC=1 - -elif [ "${CHOICE}" == "OLD" ]; then - - CHOICE="" - while [ "${CHOICESUB}" == "" ] - do - - # get more details what kind of old lightning wallet user has - OPTIONS=() - OPTIONS+=(LNDRESCUE "LND tar.gz-Backupfile (BEST)") - OPTIONS+=(SEED+SCB "Seed & channel.backup file (OK)") - OPTIONS+=(ONLYSEED "Only Seed Word List (FALLBACK)") - CHOICESUB=$(dialog --backtitle "RaspiBlitz" --clear --title "RECOVER LND DATA & WALLET" --menu "Data you have to recover from?" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) - - if [ "${CHOICESUB}" == "LNDRESCUE" ]; then - - # just activate LND rescue upload - uploadLNDRESCUE=1 - - # dont set password c anymore later on - setPasswordC=0 - - elif [ "${CHOICESUB}" == "SEED+SCB" ]; then - - # activate SEED input & SCB upload - enterSEED=1 - uploadSCB=1 - - elif [ "${CHOICESUB}" == "ONLYSEED" ]; then - - # let people know about the difference between SEED & SEED+SCB - whiptail --title "IMPORTANT INFO" --yes-button "JUST SEED" --no-button "Go Back" --yesno " -Using JUST SEED WORDS will only recover your on-chain funds. -To also try to recover the open channel funds you need the -channel.backup file (since RaspiBlitz v1.2 / LND 0.6-beta) -or having a complete LND rescue-backup from your old node. - " 11 65 - - if [ $? -eq 1 ]; then - # when user wants to go back - CHOICESUB="" - else - # activate SEED input & SCB upload - enterSEED=1 - fi - - else - echo "# you selected cancel - exited to terminal" - echo "# use command 'restart' to reboot & start again" - exit 1 - fi - - done - -else - echo "# you selected cancel - exited to terminal" - echo "# use command 'restart' to reboot & start again" - exit 1 -fi - -# UPLOAD LND RESCUE FILE dialog (if activated by dialogs above) -if [ ${uploadLNDRESCUE} -eq 1 ]; then - /home/admin/config.scripts/lnd.backup.sh lnd-import-gui setup $SETUPFILE - exit 1 -fi - -# INPUT LIGHTNING SEED dialog (if activated by dialogs above) -if [ ${enterSEED} -eq 1 ]; then - /home/admin/config.scripts/lnd.backup.sh seed-import-gui - # load results from results file - source <(/var/cache/raspiblitz/seed-import.results) - # if user canceled the seed input - if [ "${seedWords}" == "" ]; then - echo "# you selected cancel - exited to terminal" - echo "# use command 'restart' to reboot & start again" - exit 1 - fi - echo "seedWords='${seedWords}'" >> $SETUPFILE - echo "seedPassword='${seedPassword}'" >> $SETUPFILE -fi - -# UPLOAD STATIC CHANNEL BACKUP FILE dialog (if activated by dialogs above) -if [ ${uploadSCB} -eq 1 ]; then - /home/admin/config.scripts/lnd.backup.sh scb-import-gui setup $SETUPFILE -fi - -################### -# ENTER PASSWORDS ---> combine with migration dialog to reduce code duplication -################### - -# show password info dialog -dialog --backtitle "RaspiBlitz - Setup" --msgbox "RaspiBlitz uses 3 different passwords. -Referenced as password A, B & C. - -PASSWORD A) Main User Password (SSH & WebUI, sudo) -PASSWORD B) APP Password (RPC & Additional Apps) -PASSWORD C) Lightning Wallet Password for Unlock - -Set now the 3 passwords - all min 8 chars, -no spaces and only special characters - or . -Write them down & store them in a safe place. -" 15 54 - -clear -sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD A - Main User Password" $_temp -password=$(sudo cat $_temp) -echo "passwordA='${password}'" >> $SETUPFILE -dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password A set" 7 20 - -clear -sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD B - APP Password" $_temp -password=$(sudo cat $_temp) -echo "passwordB='${password}'" >> $SETUPFILE -dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password B set" 7 20 - -clear -sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD C - Lightning Wallet Password" $_temp -password=$(sudo cat $_temp) -echo "passwordC='${password}'" >> $SETUPFILE -dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password C set" 7 20 - -clear -echo "# setup dialog done - results in:" -echo "# $CONFIGFILE" -echo "# $SETUPFILE" \ No newline at end of file diff --git a/home.admin/00provisionInfo.sh b/home.admin/00provisionInfo.sh deleted file mode 100755 index a2796a09c..000000000 --- a/home.admin/00provisionInfo.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -_temp=$(mktemp -p /dev/shm/) - -## get basic info -source /home/admin/raspiblitz.info 2>/dev/null - -################### -# CHECK IF DNS NEEDS SETTING DURING SETUP -# https://github.com/rootzoll/raspiblitz/issues/787 -################### -sudo /home/admin/config.scripts/internet.dns.sh test - -# TODO: if DNS is not working --> ask in provision dialog -# TODO: get size of sd card & free space on sd card \ No newline at end of file diff --git a/home.admin/XXsyncScripts.sh b/home.admin/XXsyncScripts.sh index 1e537d225..575f02a8e 100755 --- a/home.admin/XXsyncScripts.sh +++ b/home.admin/XXsyncScripts.sh @@ -158,12 +158,9 @@ fi echo "# COPYING from GIT-Directory to /home/admin/" sudo rm -r /home/admin/config.scripts -sudo -u admin cp -r -f /home/admin/raspiblitz/home.admin/*.* /home/admin -sudo -u admin cp -r -f /home/admin/raspiblitz/home.admin/assets /home/admin -sudo -u admin chmod +x /home/admin/*.sh -sudo -u admin chmod +x /home/admin/*.py -sudo -u admin chmod +x /home/admin/config.scripts/*.sh -sudo -u admin chmod +x /home/admin/config.scripts/*.py +sudo -u admin cp -r -f /home/admin/raspiblitz/home.admin/* /home/admin +sudo -u admin chmod -R +x /home/admin/config.scripts +sudo -u admin chmod -R +x /home/admin/setup.scripts echo "# ******************************************" echo "# Checking if the content of BlitzPy changed .." diff --git a/home.admin/_commands.sh b/home.admin/_commands.sh index cb1ccf744..cde070212 100755 --- a/home.admin/_commands.sh +++ b/home.admin/_commands.sh @@ -23,6 +23,13 @@ function menu() { ./00mainMenu.sh } +# command: setup +# calls the setup process +function setup() { + cd /home/admin + ./setup.scripts/setupDialogControl.sh +} + # command: repair # calls directly the repair menu function repair() { diff --git a/home.admin/config.scripts/lnd.backup.sh b/home.admin/config.scripts/lnd.backup.sh index 7dd32f2b6..fe32f5774 100755 --- a/home.admin/config.scripts/lnd.backup.sh +++ b/home.admin/config.scripts/lnd.backup.sh @@ -8,19 +8,19 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo "# lnd.backup.sh lnd-export" echo "# lnd.backup.sh lnd-export-gui" echo "# lnd.backup.sh lnd-import [file]" - echo "# lnd.backup.sh lnd-import-gui [setup|production]" + echo "# lnd.backup.sh lnd-import-gui [setup|production] [?resultfile]" echo "# ---------------------------------------------------" echo "# STATIC CHANNEL BACKUP" echo "# ---------------------------------------------------" echo "# lnd.backup.sh scb-export" echo "# lnd.backup.sh scb-export-gui" echo "# lnd.backup.sh scb-import [file]" - echo "# lnd.backup.sh scb-import-gui [setup|production]" + echo "# lnd.backup.sh scb-import-gui [setup|production] [?resultfile]" echo "# ---------------------------------------------------" echo "# SEED WORDS" echo "# ---------------------------------------------------" echo "# lnd.backup.sh seed-export-gui [lndseeddata]" - echo "# lnd.backup.sh seed-import-gui" + echo "# lnd.backup.sh seed-import-gui [resultfile]" exit 1 fi @@ -163,10 +163,10 @@ if [ ${mode} = "lnd-import-gui" ]; then exit 1 fi - # scenario setup needs a 3rd parameter - the SETUPFILE to store results in + # scenario setup needs a 3rd parameter - the RESULTFILE to store results in if [ "${scenario}" == "setup" ]; then - SETUPFILE=$3 - if [ "${SETUPFILE}" == "" ]; then + RESULTFILE=$3 + if [ "${RESULTFILE}" == "" ]; then echo "error='mising parameter'" exit 1 fi @@ -235,8 +235,8 @@ if [ ${mode} = "lnd-import-gui" ]; then # in setup scenario the final import is happening during provison if [ "${scenario}" == "setup" ]; then # just add lndrescue filename to give file - echo "lndrescue='${filename}'" >> $SETUPFILE - echo "" + echo "# result in: ${RESULTFILE} (remember to make clean delete once processed)" + echo "lndrescue='${filename}'" >> $RESULTFILE exit 0 fi @@ -349,10 +349,10 @@ if [ ${mode} = "scb-import-gui" ]; then exit 1 fi - # scenario setup needs a 3rd parameter - the SETUPFILE to store results in + # scenario setup needs a 3rd parameter - the RESULTFILE to store results in if [ "${scenario}" == "setup" ]; then - SETUPFILE=$3 - if [ "${SETUPFILE}" == "" ]; then + RESULTFILE=$3 + if [ "${RESULTFILE}" == "" ]; then echo "error='mising parameter'" exit 1 fi @@ -421,8 +421,8 @@ if [ ${mode} = "scb-import-gui" ]; then # in setup scenario the final import is happening during provison if [ "${scenario}" == "setup" ]; then # just add staticchannelbackup filename to give file - echo "staticchannelbackup='${filename}'" >> $SETUPFILE - echo "" + echo "# result in: ${RESULTFILE} (remember to make clean delete once processed)" + echo "staticchannelbackup='${filename}'" >> $RESULTFILE exit 0 fi @@ -471,6 +471,13 @@ if [ ${mode} = "seed-import-gui" ]; then # fake seed 24 words for testing input: # eins zwei polizei drei vier great idea fünf sechs alte keks sieben auch gute nacht ja ja ja was ist los was ist das + # scenario setup needs a 3rd parameter - the RESULTFILE to store results in + RESULTFILE=$3 + if [ "${RESULTFILE}" == "" ]; then + echo "error='mising parameter'" + exit 1 + fi + # prepare seed result file sudo rm /var/cache/raspiblitz/seed-import.results 2>/dev/null sudo touch /var/cache/raspiblitz/seed-import.results @@ -515,7 +522,7 @@ wordone wordtweo wordthree ... if [ $? -eq 1 ]; then clear - echo "# CANCEL empty results in: /var/cache/raspiblitz/seed-import.results" + echo "# CANCEL empty results in: ${RESULTFILE}" exit 1 fi fi @@ -540,9 +547,9 @@ to protect the seed words. Most users did not set this. # writing result file data clear - echo "# result of in mem cache: /var/cache/raspiblitz/seed-import.results" - echo "seedWords='${wordstring}'" >> /var/cache/raspiblitz/seed-import.results - echo "seedPassword='${passwordD}'" >> /var/cache/raspiblitz/seed-import.results + echo "# result in: ${RESULTFILE} (remember to make clean delete once processed)" + echo "seedWords='${wordstring}'" >> $RESULTFILE + echo "seedPassword='${passwordD}'" >> $RESULTFILE exit 0 fi diff --git a/home.admin/setup.scripts/dialogBasicSetup.sh b/home.admin/setup.scripts/dialogBasicSetup.sh new file mode 100644 index 000000000..6281fc494 --- /dev/null +++ b/home.admin/setup.scripts/dialogBasicSetup.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +# get basic system information +# these are the same set of infos the WebGUI dialog/controler has +source /home/admin/raspiblitz.info + +# SETUPFILE +# this key/value file contains the state during the setup process +SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" +source <($SETUPFILE) + +# choose blockchain or select migration +OPTIONS=() +OPTIONS+=(BITCOIN1 "Setup BITCOIN & Lightning Network Daemon (LND)") +OPTIONS+=(BITCOIN2 "Setup BITCOIN & c-lightning by blockstream") +OPTIONS+=(LITECOIN "Setup LITECOIN & Lightning Network Daemon (LND)") +OPTIONS+=(MIGRATION "Upload a Migration File from old RaspiBlitz") +CHOICE=$(dialog --clear \ + --backtitle "RaspiBlitz ${codeVersion} - Setup" \ + --title "⚡ Welcome to your RaspiBlitz ⚡" \ + --menu "\nChoose how you want to setup your RaspiBlitz: \n " \ + 13 64 7 \ + "${OPTIONS[@]}" \ + 2>&1 >/dev/tty) +clear +network="" +lightning="" +migrationOS="" +case $CHOICE in + BITCOIN1) + network="bitcoin" + lightning="lnd" + ;; + BITCOIN2) + network="bitcoin" + lightning="cln" + ;; + LITECOIN) + network="litecoin" + lightning="lnd" + ;; + MIGRATION) + migrationOS="raspiblitz" + ;; +esac + +# on cancel - exit with 1 +if [ "${network}" == "" ] && [ "${migrationOS}" == "" ]; then + exit 1 +fi + +# write results to setup sate +echo "migrationOS=${migrationOS}" >> $SETUPFILE +echo "migrationVersion=''" >> $SETUPFILE +echo "lightning=${lightning}" >> $SETUPFILE +echo "network=${network}" >> $SETUPFILE + +exit 0 \ No newline at end of file diff --git a/home.admin/setup.scripts/dialogLightningWallet.sh b/home.admin/setup.scripts/dialogLightningWallet.sh new file mode 100644 index 000000000..c2ab95b1b --- /dev/null +++ b/home.admin/setup.scripts/dialogLightningWallet.sh @@ -0,0 +1,164 @@ +# get basic system information +# these are the same set of infos the WebGUI dialog/controler has +source /home/admin/raspiblitz.info + +# SETUPFILE +# this key/value file contains the state during the setup process +SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" +source <($SETUPFILE) + +# flags for sub dialogs after choice +uploadLNDRESCUE=0 +enterSEED=0 +uploadSCB=0 + +OPTIONS=() +OPTIONS+=(NEW "Setup a brand new Lightning Node (DEFAULT)") +OPTIONS+=(OLD "I had an old Node I want to recover/restore") +CHOICE=$(dialog --backtitle "RaspiBlitz" --clear --title "LND Setup" --menu "LND Data & Wallet" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) + +if [ "${CHOICE}" == "NEW" ]; then + + # clear setup state from all fomer possible choices (previous loop) + sudo sed -i '/^setPasswordA=/d' $SETUPFILE + sudo sed -i '/^setPasswordB=/d' $SETUPFILE + sudo sed -i '/^setPasswordC=/d' $SETUPFILE + + # mark all passwords to be set at the end + echo "setPasswordA=1" >> $SETUPFILE + echo "setPasswordB=1" >> $SETUPFILE + echo "setPasswordC=1" >> $SETUPFILE + +elif [ "${CHOICE}" == "OLD" ]; then + + CHOICE="" + while [ "${CHOICESUB}" == "" ] + do + + # get more details what kind of old lightning wallet user has + OPTIONS=() + OPTIONS+=(LNDRESCUE "LND tar.gz-Backupfile (BEST)") + OPTIONS+=(SEED+SCB "Seed & channel.backup file (OK)") + OPTIONS+=(ONLYSEED "Only Seed Word List (FALLBACK)") + CHOICESUB=$(dialog --backtitle "RaspiBlitz" --clear --title "RECOVER LND DATA & WALLET" --menu "Data you have to recover from?" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) + + if [ "${CHOICESUB}" == "LNDRESCUE" ]; then + + # just activate LND rescue upload + uploadLNDRESCUE=1 + + # clear setup state from all fomer possible choices (previous loop) + sudo sed -i '/^setPasswordA=/d' $SETUPFILE + sudo sed -i '/^setPasswordB=/d' $SETUPFILE + sudo sed -i '/^setPasswordC=/d' $SETUPFILE + + # dont set password c anymore - mark the rest + echo "setPasswordA=1" >> $SETUPFILE + echo "setPasswordB=1" >> $SETUPFILE + + elif [ "${CHOICESUB}" == "SEED+SCB" ]; then + + # activate SEED input & SCB upload + enterSEED=1 + uploadSCB=1 + + elif [ "${CHOICESUB}" == "ONLYSEED" ]; then + + # let people know about the difference between SEED & SEED+SCB + whiptail --title "IMPORTANT INFO" --yes-button "JUST SEED" --no-button "Go Back" --yesno " +Using JUST SEED WORDS will only recover your on-chain funds. +To also try to recover the open channel funds you need the +channel.backup file (since RaspiBlitz v1.2 / LND 0.6-beta) +or having a complete LND rescue-backup from your old node. + " 11 65 + + if [ $? -eq 1 ]; then + # when user wants to go back + CHOICESUB="" + else + # activate SEED input & SCB upload + enterSEED=1 + fi + + else + echo "# you selected cancel - exited to terminal" + echo "# use command 'restart' to reboot & start again" + exit 1 + fi + + done + +else + echo "# you selected cancel - exited to terminal" + echo "# use command 'restart' to reboot & start again" + exit 1 +fi + +# UPLOAD LND RESCUE FILE dialog (if activated by dialogs above) +if [ ${uploadLNDRESCUE} -eq 1 ]; then + + # run upload dialog and get result + _temp="/var/cache/raspiblitz/.temp.tmp" + /home/admin/config.scripts/lnd.backup.sh lnd-import-gui setup $_temp + source <($_temp) 2>/dev/null + sudo rm $_temp + + # if user canceled upload + if [ "${lndrescue}" == "" ]; then + # signal cancel to the calling script by exit code + exit 1 + fi + + # clear setup state from all fomer possible choices (previous loop) + sudo sed -i '/^lndrescue=/d' $SETUPFILE + + # store result in setup state + echo "lndrescue='${lndrescue}'" >> $SETUPFILE +fi + +# INPUT LIGHTNING SEED dialog (if activated by dialogs above) +if [ ${enterSEED} -eq 1 ]; then + + # start seed input and get results + _temp="/var/cache/raspiblitz/.temp.tmp" + /home/admin/config.scripts/lnd.backup.sh seed-import-gui $_temp + source <($_temp) 2>/dev/null + sudo rm $_temp + + # if user canceled the seed input + if [ "${seedWords}" == "" ]; then + # signal cancel to the calling script by exit code + exit 1 + fi + + # clear setup state from all fomer possible choices (previous loop) + sudo sed -i '/^seedWords=/d' $SETUPFILE + sudo sed -i '/^seedPassword=/d' $SETUPFILE + + # write the seed data into the setup state + echo "seedWords='${seedWords}'" >> $SETUPFILE + echo "seedPassword='${seedPassword}'" >> $SETUPFILE +fi + +# UPLOAD STATIC CHANNEL BACKUP FILE dialog (if activated by dialogs above) +if [ ${uploadSCB} -eq 1 ]; then + + # start seed input and get results + _temp="/var/cache/raspiblitz/.temp.tmp" + /home/admin/config.scripts/lnd.backup.sh scb-import-gui setup $_temp + source <($_temp) 2>/dev/null + sudo rm $_temp + + # if user canceled the upload + if [ "${staticchannelbackup}" == "" ]; then + # signal cancel to the calling script by exit code + exit 1 + fi + + # clear setup state from all fomer possible choices (previous loop) + sudo sed -i '/^staticchannelbackup=/d' $SETUPFILE + + # write the filename into the setup state + echo "staticchannelbackup='${staticchannelbackup}'" >> $SETUPFILE + +fi \ No newline at end of file diff --git a/home.admin/00migrationDialog.sh b/home.admin/setup.scripts/dialogMigration.sh similarity index 53% rename from home.admin/00migrationDialog.sh rename to home.admin/setup.scripts/dialogMigration.sh index e98958844..d34b8956b 100755 --- a/home.admin/00migrationDialog.sh +++ b/home.admin/setup.scripts/dialogMigration.sh @@ -1,41 +1,36 @@ #!/bin/bash -# TODO: use blitz.upload.sh for uploading the migration file -# TODO: also the migration might need to be adapted to work with an already mounted HDD later +# TODO: also the raspiblitz-migration & other-node-migration might need to be adapted to work with an already mounted HDD later -# command info -if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then - echo "# dialog to get all data needed for migration-setup" - echo "# 00migrationDialog.sh [raspiblitz|mynode|umbrel]" - exit 1 -fi - -## get basic info +# get basic system information +# these are the same set of infos the WebGUI dialog/controler has source /home/admin/raspiblitz.info -# tempfile for result of dialogs -_temp=$(mktemp -p /dev/shm/) +# SETUPFILE +# this key/value file contains the state during the setup process +SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" +source <($SETUPFILE) -# prepare the setup file (that constains info just needed for the rest of setup process) -SETUPFILE="/home/admin/raspiblitz.setup" -rm $SETUPFILE 2>/dev/null -echo "# RASPIBLITZ SETUP FILE" > $SETUPFILE +######################### +# Parameters +# this is useful for testing the dialog outside of the setup process +# normally migrationOS & migrationVersion are provided by raspiblitz.info or raspiblitz.setup -# flags of what passwords are to set by user -setPasswordA=1 -setPasswordB=0 -setPasswordC=0 - -# 1st PARAMATER: [raspiblitz|mynode|umbrel] -migrationOS="$1" -if [ "${migrationOS}" != "raspiblitz" ] && [ "${migrationOS}" != "mynode" ] && [ "${migrationOS}" != "umbrel" ]; then - echo "parameter1(${migrationOS})" - echo "error='not supported'" - exit 1 -fi +# 1st PARAMATER (optional): [raspiblitz|mynode|umbrel] +if [ "${migrationOS}" == "" ]; then + migrationOS="$1" +fi # 2nd PARAMATER (optional): the version of the former fullnode OS if available -migrationVersion="$2" +if [ "${migrationVersion}" == "" ]; then + migrationVersion="$2" +fi + +# check parameter values +if [ "${migrationOS}" != "raspiblitz" ] && [ "${migrationOS}" != "mynode" ] && [ "${migrationOS}" != "umbrel" ]; then + echo "# FAIL: the given migrationOS '${migrationOS}' is not supported yet" + exit 1 +fi #################################################### # RASPIBLITZ @@ -44,10 +39,6 @@ migrationVersion="$2" if [ "${migrationOS}" == "raspiblitz" ]; then - # write migration info - echo "migrationOS='${migrationOS}'" >> $SETUPFILE - echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE - # get defaultUploadPath, localIP, etc source <(sudo /home/admin/config.scripts/blitz.upload.sh prepare-upload) @@ -95,18 +86,19 @@ if [ "${migrationOS}" == "raspiblitz" ]; then echo "PRESS ENTER to continue & retry" read key else - echo "!! WARNING !! Unknown State (report to devs)" + echo "!! WARNING !! Unknown State (report to devs) error(${error})" exit 1 fi done # further checks and unpacking will be done when migration is processed (not part of dialog) - echo "OK: Migration data was imported - will process after password reset" - echo "migrationFile='${filename}'" >> $SETUPFILE + echo "OK: Migration file was imported - will process after password reset" sleep 4 - + # migration OS & Version were already set earlier in setup process - now add migration filename + echo "migrationFile='${filename}'" >> $SETUPFILE # user needs to reset password A - setPasswordA=1 + echo "setPasswordA=1" >> $SETUPFILE + exit 0 fi @@ -127,20 +119,20 @@ Please make sure to have your UMBREL seed words & static channel backup file (ju Do you want to start migration to RaspiBlitz now? " 16 58 - if [ $? -eq 0 ]; then - # write migration info - echo "migrationOS='umbrel'" >> $SETUPFILE - echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE - else - # user cancel - request shutdown - echo "shutdown=1" >> $SETUPFILE + if [ "$?" != "0" ]; then + # user cancel - signal by exit code exit 1 fi - # user needs to reset password A - setPasswordA=1 - setPasswordB=1 - setPasswordC=1 + # write migration info + echo "migrationOS='umbrel'" >> $SETUPFILE + echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE + + # user needs to reset password A, B & C + echo "setPasswordA=1" >> $SETUPFILE + echo "setPasswordB=1" >> $SETUPFILE + echo "setPasswordC=1" >> $SETUPFILE + exit 0 fi @@ -161,76 +153,21 @@ Please make sure to have your MYNODE seed words & static channel backup file (ju Do you want to start migration to RaspiBlitz now? " 16 58 - if [ $? -eq 0 ]; then - # write migration info - echo "migrationOS='mynode'" >> $SETUPFILE - echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE - else - # user cancel - request shutdown - echo "shutdown=1" >> $SETUPFILE + if [ "$?" != "0" ]; then + # user cancel - signal by exit code exit 1 fi + # write migration info + echo "migrationOS='mynode'" >> $SETUPFILE + echo "migrationVersion='${migrationVersion}'" >> $SETUPFILE # user needs to reset password A - setPasswordA=1 - setPasswordB=1 - setPasswordC=1 + echo "setPasswordA=1" >> $SETUPFILE + echo "setPasswordB=1" >> $SETUPFILE + echo "setPasswordC=1" >> $SETUPFILE + exit 0 fi -#################################################### -# INPUT PASSWORDS (based on flags above set) - -# dynamic info string on what passwords need to be changed -passwordinfo="A" # always so far -if [ ${setPasswordB} -eq 1 ]; then - passwordinfo = "${passwordinfo}, B" -fi -if [ ${setPasswordC} -eq 1 ]; then - passwordinfo = "${passwordinfo}, C" -fi - -# basic information in RaspiBlitz passwords -dialog --backtitle "RaspiBlitz - Migration Setup" --msgbox "You will need to set new passwords. - -RaspiBlitz works with 3 different passwords: -PASSWORD A) Main User Password (SSH & WebUI, sudo) -PASSWORD B) APP Password (RPC & Additional Apps) -PASSWORD C) Lightning Wallet Password for Unlock - -You will need to set Password: ${passwordinfo} -(other passwords might stay like on your old node) - -Follow Password Rules: Minimal of 8 chars, -no spaces and only special characters - or . -Write them down & store them in a safe place. -" 17 64 - -if [ ${setPasswordA} -eq 1 ]; then - clear - sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD A - Main User Password" $_temp - password=$(sudo cat $_temp) - echo "passwordA='${password}'" >> $SETUPFILE - dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password A set" 7 20 -fi - -if [ ${setPasswordB} -eq 1 ]; then - clear - sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD B - APP Password" $_temp - password=$(sudo cat $_temp) - echo "passwordB='${password}'" >> $SETUPFILE - dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password B set" 7 20 -fi - -if [ ${setPasswordC} -eq 1 ]; then - clear - sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD C - Lightning Wallet Password" $_temp - password=$(sudo cat $_temp) - echo "passwordC='${password}'" >> $SETUPFILE - dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password C set" 7 20 -fi - -clear -echo "# data from dialogs stored in to be further processed:" -echo "${SETUPFILE}" -exit 0 \ No newline at end of file +echo "FAIL: Exited in unknown state from migration dialog." +exit 1 \ No newline at end of file diff --git a/home.admin/setup.scripts/dialogName.sh b/home.admin/setup.scripts/dialogName.sh new file mode 100644 index 000000000..3186e5ccc --- /dev/null +++ b/home.admin/setup.scripts/dialogName.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# get basic system information +# these are the same set of infos the WebGUI dialog/controler has +source /home/admin/raspiblitz.info + +# SETUPFILE +# this key/value file contains the state during the setup process +SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" +source <($SETUPFILE) + +################### +# ENTER NAME +################### + +# temp file for password results +_temp="/var/cache/raspiblitz/.temp.tmp" + +# ask for name of RaspiBlitz +result="" +while [ ${#result} -eq 0 ] + do + l1="Please enter the name of your new RaspiBlitz:\n" + l2="one word, keep characters basic & not too long" + dialog --backtitle "RaspiBlitz - Setup (${network}/${chain})" --inputbox "$l1$l2" 11 52 2>$_temp + result=$( cat $_temp | tr -dc '[:alnum:]-.' | tr -d ' ' ) + sudo rm $_temp + done + +# store name in setup state +echo "hostname=${result}" >> $SETUPFILE \ No newline at end of file diff --git a/home.admin/setup.scripts/dialogPasswords.sh b/home.admin/setup.scripts/dialogPasswords.sh new file mode 100644 index 000000000..d89a052ef --- /dev/null +++ b/home.admin/setup.scripts/dialogPasswords.sh @@ -0,0 +1,99 @@ +#!/bin/bash + +# get basic system information +# these are the same set of infos the WebGUI dialog/controler has +source /home/admin/raspiblitz.info + +# SETUPFILE +# this key/value file contains the state during the setup process +SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" +source <($SETUPFILE) + +#################################################### +# INPUT PASSWORDS (based on flags from raspiblitz.setup) + +# dynamic info string on what passwords need to be changed +passwordinfo="A" # always so far +if [ "${setPasswordB}" == "1" ]; then + passwordinfo = "${passwordinfo}, B" +fi +if [ "${setPasswordC}" == "1" ]; then + passwordinfo = "${passwordinfo}, C" +fi + +# if passwords are set in a migration situation, use different info text +if [ "${migrationOS}" == "" ]; then + + # info text on normal setup + dialog --backtitle "RaspiBlitz - Setup" --msgbox "RaspiBlitz uses 3 different passwords. +Referenced as password A, B & C. + +PASSWORD A) Main User Password (SSH & WebUI, sudo) +PASSWORD B) APP Password (Additional Apps & API) +PASSWORD C) Lightning Wallet Password for Unlock + +You will need to set now Password: ${passwordinfo} + +Follow Password Rule: Minimal of 8 chars,, +no spaces and only special characters - or . +Write them down & store them in a safe place. +" 16 54 + +else + + # info text on migration setup + dialog --backtitle "RaspiBlitz - Migration Setup" --msgbox "You will need to set new passwords. + +RaspiBlitz works with 3 different passwords: +PASSWORD A) Main User Password (SSH & WebUI, sudo) +PASSWORD B) APP Password (Additional Apps & API) +PASSWORD C) Lightning Wallet Password for Unlock + +You will need to set now Password: ${passwordinfo} +(other passwords might stay like on your old node) + +Follow Password Rules: Minimal of 8 chars, +no spaces and only special characters - or . +Write them down & store them in a safe place. +" 17 64 + +fi + +# temp file for password results +_temp="/var/cache/raspiblitz/.temp.tmp" + +# PASSWORD A +if [ "${setPasswordA}" == "1" ]; then + clear + sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD A - Main User Password" $_temp + password=$(sudo cat $_temp) + sudo rm $_temp + echo "passwordA='${password}'" >> $SETUPFILE + dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password A set" 7 20 +fi + +# PASSWORD B +if [ "${setPasswordB}" == "1" ]; then + clear + sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD B - APP Password" $_temp + password=$(sudo cat $_temp) + sudo rm $_temp + echo "passwordB='${password}'" >> $SETUPFILE + dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password B set" 7 20 +fi + +# PASSWORD C +if [ "${setPasswordC}" == "1" ]; then + clear + sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD C - Lightning Wallet Password" $_temp + password=$(sudo cat $_temp) + sudo rm $_temp + echo "passwordC='${password}'" >> $SETUPFILE + dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password C set" 7 20 +fi + +# debug info +clear +echo "# data from dialogs stored in to be further processed:" +echo "${SETUPFILE}" +exit 0 diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh new file mode 100755 index 000000000..7bd95cbb8 --- /dev/null +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -0,0 +1,113 @@ +#!/bin/bash + +# get basic system information +# these are the same set of infos the WebGUI dialog/controler has +source /home/admin/raspiblitz.info + +# SETUPFILE +# this key/value file contains the state during the setup process +SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" + +# init SETUPFILE +rm $SETUPFILE 2>/dev/null +echo "# RASPIBLITZ SETUP STATE" > $SETUPFILE + +############################################ +# Basic Setup (Blockchain & Lightning Impl) +# (skip if migration was auto-detected) + +if [ "${migrationOS}" == "" ]; then + + /home/admin/setup/dialogBasicSetup.sh + + # on cancel - let user exit to terminal + if [ "$?" != "0" ]; then + echo "# you selected cancel - exited to terminal" + echo "# to re-start setup use command --> setup" + exit 1 + fi + +fi + +if [ "${migrationOS}" != "" ]; then + + ############################################### + # MIGRATION + # other fullnodesOS or RaspiBlitz migration file + + echo "# Starting migration dialog ..." + + /home/admin/setup/dialogMigration.sh + + # on cancel - let user exit to terminal + if [ "$?" != "0" ]; then + echo "# you selected cancel - exited to terminal" + echo "# to re-start setup use command --> setup" + exit 1 + fi + +else + + ############################################### + # FRESH SETUP + + echo "# Starting all dialogs for fresh setup ..." + + ############################################ + # Setting Name for Node + + /home/admin/setup/dialogPasswords.sh + + ############################################ + # Lightning Wallet (new or restore) do this before passwords + # because password C not needed if LND rescue file is uploaded + + while loop + +fi + +############################################ +# Enter Passwords +# for fresh setup & migration + +/home/admin/setup/dialogPasswords.sh + +############################################ +# PROCESS SETUP CHOICES +# TODO: move this part later outside of dialog controller and combine with data from WebUI + +if [ "${migrationOS}" == "" ]; then + + ############################################ + # Normal Setup + + echo "# CREATING raspiblitz.conf from your setup choices" + + # prepare the config file (what will later become the raspiblitz.config) + source /home/admin/_version.info + + CONFIGFILE="/mnt/hdd/raspiblitz.config" + rm $CONFIGFILE 2>/dev/null + echo "# RASPIBLITZ CONFIG FILE" > $CONFIGFILE + echo "raspiBlitzVersion='${codeVersion}'" >> $CONFIGFILE + echo "lcdrotate=1" >> $CONFIGFILE + echo "lightning=${lightning}" >> $CONFIGFILE + echo "network=${network}" >> $CONFIGFILE + echo "chain=main" >> $CONFIGFILE + echo "runBehindTor=on" >> $CONFIGFILE + +else + + ############################################ + # Process Migration + # TODO: move this part later outside of dialog controller and combine with data from WebUI + + echo "TODO: Process Migration" + exit 1 + +fi + +clear +echo "# setup dialog done - results in:" +echo "# $SETUPFILE" +echo "# $CONFIGFILE" \ No newline at end of file From ba8a9dc06fd3b9f18ab357230a0880e9b2036108 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 14:03:37 +0200 Subject: [PATCH 0066/1295] correct script path --- home.admin/setup.scripts/00provisionInfo.sh | 10 ++++++++++ home.admin/setup.scripts/setupDialogControl.sh | 8 ++++---- 2 files changed, 14 insertions(+), 4 deletions(-) create mode 100755 home.admin/setup.scripts/00provisionInfo.sh diff --git a/home.admin/setup.scripts/00provisionInfo.sh b/home.admin/setup.scripts/00provisionInfo.sh new file mode 100755 index 000000000..8b1bcab7a --- /dev/null +++ b/home.admin/setup.scripts/00provisionInfo.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +################### +# CHECK IF DNS NEEDS SETTING DURING SETUP +# https://github.com/rootzoll/raspiblitz/issues/787 +################### +sudo /home/admin/config.scripts/internet.dns.sh test + +# TODO: if DNS is not working --> ask in system-loop +# TODO: get size of sd card & free space on sd card \ No newline at end of file diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 7bd95cbb8..1e62f126a 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -18,7 +18,7 @@ echo "# RASPIBLITZ SETUP STATE" > $SETUPFILE if [ "${migrationOS}" == "" ]; then - /home/admin/setup/dialogBasicSetup.sh + /home/admin/setup.scripts/dialogBasicSetup.sh # on cancel - let user exit to terminal if [ "$?" != "0" ]; then @@ -37,7 +37,7 @@ if [ "${migrationOS}" != "" ]; then echo "# Starting migration dialog ..." - /home/admin/setup/dialogMigration.sh + /home/admin/setup.scripts/dialogMigration.sh # on cancel - let user exit to terminal if [ "$?" != "0" ]; then @@ -56,7 +56,7 @@ else ############################################ # Setting Name for Node - /home/admin/setup/dialogPasswords.sh + /home/admin/setup.scripts/dialogPasswords.sh ############################################ # Lightning Wallet (new or restore) do this before passwords @@ -70,7 +70,7 @@ fi # Enter Passwords # for fresh setup & migration -/home/admin/setup/dialogPasswords.sh +/home/admin/setup.scripts/dialogPasswords.sh ############################################ # PROCESS SETUP CHOICES From 2b2058ffbf16a8deed6aa850d2d7587079500509 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 14:13:54 +0200 Subject: [PATCH 0067/1295] comment code --- .../setup.scripts/setupDialogControl.sh | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 1e62f126a..b0e7a5a13 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -18,6 +18,7 @@ echo "# RASPIBLITZ SETUP STATE" > $SETUPFILE if [ "${migrationOS}" == "" ]; then + echo "# Starting basic setup dialog ..." /home/admin/setup.scripts/dialogBasicSetup.sh # on cancel - let user exit to terminal @@ -36,7 +37,6 @@ if [ "${migrationOS}" != "" ]; then # other fullnodesOS or RaspiBlitz migration file echo "# Starting migration dialog ..." - /home/admin/setup.scripts/dialogMigration.sh # on cancel - let user exit to terminal @@ -51,18 +51,29 @@ else ############################################### # FRESH SETUP - echo "# Starting all dialogs for fresh setup ..." - ############################################ # Setting Name for Node + echo "# Starting basic setup dialog ..." /home/admin/setup.scripts/dialogPasswords.sh ############################################ # Lightning Wallet (new or restore) do this before passwords # because password C not needed if LND rescue file is uploaded - while loop + lightningWalletDone=0 + while [ "${lightningWalletDone}" == "0" ] + do + + echo "# Starting lightning wallet dialog ..." + /home/admin/setup.scripts/dialogLightningWallet.sh + + # only if dialog exited clean end loop + if [ "$?" == "0" ]; then + lightningWalletDone=1 + fi + + done fi @@ -70,6 +81,7 @@ fi # Enter Passwords # for fresh setup & migration +echo "# Starting passwords dialog ..." /home/admin/setup.scripts/dialogPasswords.sh ############################################ From e09d951920c95ed7ac25e75215849973fb52e2a6 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 14:21:29 +0200 Subject: [PATCH 0068/1295] exit states --- .../setup.scripts/dialogLightningWallet.sh | 20 +++++++++---------- .../setup.scripts/setupDialogControl.sh | 10 +++++++++- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/home.admin/setup.scripts/dialogLightningWallet.sh b/home.admin/setup.scripts/dialogLightningWallet.sh index c2ab95b1b..579d4c73e 100644 --- a/home.admin/setup.scripts/dialogLightningWallet.sh +++ b/home.admin/setup.scripts/dialogLightningWallet.sh @@ -81,16 +81,14 @@ or having a complete LND rescue-backup from your old node. fi else - echo "# you selected cancel - exited to terminal" - echo "# use command 'restart' to reboot & start again" - exit 1 + # user cancel - signal to outside app by exit code (2 = submenu) + exit 2 fi done else - echo "# you selected cancel - exited to terminal" - echo "# use command 'restart' to reboot & start again" + # user cancel - signal to outside app by exit code (1 = mainmenu) exit 1 fi @@ -105,8 +103,8 @@ if [ ${uploadLNDRESCUE} -eq 1 ]; then # if user canceled upload if [ "${lndrescue}" == "" ]; then - # signal cancel to the calling script by exit code - exit 1 + # signal cancel to the calling script by exit code (3 = exit on lndrescue) + exit 3 fi # clear setup state from all fomer possible choices (previous loop) @@ -127,8 +125,8 @@ if [ ${enterSEED} -eq 1 ]; then # if user canceled the seed input if [ "${seedWords}" == "" ]; then - # signal cancel to the calling script by exit code - exit 1 + # signal cancel to the calling script by exit code (4 = exit on seedwords) + exit 4 fi # clear setup state from all fomer possible choices (previous loop) @@ -151,8 +149,8 @@ if [ ${uploadSCB} -eq 1 ]; then # if user canceled the upload if [ "${staticchannelbackup}" == "" ]; then - # signal cancel to the calling script by exit code - exit 1 + # signal cancel to the calling script by exit code (5 = exit on scb) + exit 5 fi # clear setup state from all fomer possible choices (previous loop) diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index b0e7a5a13..14cfc9e98 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -55,7 +55,7 @@ else # Setting Name for Node echo "# Starting basic setup dialog ..." - /home/admin/setup.scripts/dialogPasswords.sh + /home/admin/setup.scripts/dialogName.sh ############################################ # Lightning Wallet (new or restore) do this before passwords @@ -73,6 +73,14 @@ else lightningWalletDone=1 fi + # allow user to cancel to terminal on dialog main menu + # all other cancels have other exit codes + if [ "$?" == "1" ]; then + echo "# you selected cancel - exited to terminal" + echo "# to re-start setup use command --> setup" + exit 1 + fi + done fi From feaefe30e009e771826296b5f13c0f8cc860d85e Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 14:23:40 +0200 Subject: [PATCH 0069/1295] debug test --- home.admin/setup.scripts/dialogPasswords.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/home.admin/setup.scripts/dialogPasswords.sh b/home.admin/setup.scripts/dialogPasswords.sh index d89a052ef..236620d52 100644 --- a/home.admin/setup.scripts/dialogPasswords.sh +++ b/home.admin/setup.scripts/dialogPasswords.sh @@ -9,6 +9,10 @@ source /home/admin/raspiblitz.info SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" source <($SETUPFILE) +# debug test +echo "setPasswordA(${setPasswordA})" +sleep + #################################################### # INPUT PASSWORDS (based on flags from raspiblitz.setup) From 05077b8ebe38065ed61ce328d1fdd3e07e4ae94a Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 14:27:03 +0200 Subject: [PATCH 0070/1295] debug sleep --- home.admin/setup.scripts/dialogPasswords.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/dialogPasswords.sh b/home.admin/setup.scripts/dialogPasswords.sh index 236620d52..920fd733c 100644 --- a/home.admin/setup.scripts/dialogPasswords.sh +++ b/home.admin/setup.scripts/dialogPasswords.sh @@ -11,7 +11,7 @@ source <($SETUPFILE) # debug test echo "setPasswordA(${setPasswordA})" -sleep +sleep 4 #################################################### # INPUT PASSWORDS (based on flags from raspiblitz.setup) From 17c0ce031f5e8fdd9ba4e6d4171514525a19c793 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 14:28:50 +0200 Subject: [PATCH 0071/1295] init setup file --- home.admin/setup.scripts/setupDialogControl.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 14cfc9e98..5f30c1c42 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -9,8 +9,10 @@ source /home/admin/raspiblitz.info SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" # init SETUPFILE -rm $SETUPFILE 2>/dev/null +sudo rm $SETUPFILE 2>/dev/null echo "# RASPIBLITZ SETUP STATE" > $SETUPFILE +sudo chown admin:admin $SETUPFILE +sudo chmod 777 $SETUPFILE ############################################ # Basic Setup (Blockchain & Lightning Impl) From 43ded3b094c7ca776afb1a1785e598f74b55d431 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 14:30:56 +0200 Subject: [PATCH 0072/1295] syntax fix setupfile --- home.admin/setup.scripts/dialogBasicSetup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/dialogBasicSetup.sh b/home.admin/setup.scripts/dialogBasicSetup.sh index 6281fc494..7473e4a04 100644 --- a/home.admin/setup.scripts/dialogBasicSetup.sh +++ b/home.admin/setup.scripts/dialogBasicSetup.sh @@ -50,7 +50,7 @@ if [ "${network}" == "" ] && [ "${migrationOS}" == "" ]; then fi # write results to setup sate -echo "migrationOS=${migrationOS}" >> $SETUPFILE +echo "migrationOS='${migrationOS}'" >> $SETUPFILE echo "migrationVersion=''" >> $SETUPFILE echo "lightning=${lightning}" >> $SETUPFILE echo "network=${network}" >> $SETUPFILE From 3586175adc422ef423943747410893543c172130 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 14:32:36 +0200 Subject: [PATCH 0073/1295] fix sourcing setup file --- home.admin/setup.scripts/dialogBasicSetup.sh | 2 +- home.admin/setup.scripts/dialogLightningWallet.sh | 2 +- home.admin/setup.scripts/dialogMigration.sh | 2 +- home.admin/setup.scripts/dialogName.sh | 2 +- home.admin/setup.scripts/dialogPasswords.sh | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/home.admin/setup.scripts/dialogBasicSetup.sh b/home.admin/setup.scripts/dialogBasicSetup.sh index 7473e4a04..3bdccb203 100644 --- a/home.admin/setup.scripts/dialogBasicSetup.sh +++ b/home.admin/setup.scripts/dialogBasicSetup.sh @@ -7,7 +7,7 @@ source /home/admin/raspiblitz.info # SETUPFILE # this key/value file contains the state during the setup process SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" -source <($SETUPFILE) +source $SETUPFILE # choose blockchain or select migration OPTIONS=() diff --git a/home.admin/setup.scripts/dialogLightningWallet.sh b/home.admin/setup.scripts/dialogLightningWallet.sh index 579d4c73e..70c5f863d 100644 --- a/home.admin/setup.scripts/dialogLightningWallet.sh +++ b/home.admin/setup.scripts/dialogLightningWallet.sh @@ -5,7 +5,7 @@ source /home/admin/raspiblitz.info # SETUPFILE # this key/value file contains the state during the setup process SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" -source <($SETUPFILE) +source $SETUPFILE # flags for sub dialogs after choice uploadLNDRESCUE=0 diff --git a/home.admin/setup.scripts/dialogMigration.sh b/home.admin/setup.scripts/dialogMigration.sh index d34b8956b..e6a5395e0 100755 --- a/home.admin/setup.scripts/dialogMigration.sh +++ b/home.admin/setup.scripts/dialogMigration.sh @@ -9,7 +9,7 @@ source /home/admin/raspiblitz.info # SETUPFILE # this key/value file contains the state during the setup process SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" -source <($SETUPFILE) +source $SETUPFILE ######################### # Parameters diff --git a/home.admin/setup.scripts/dialogName.sh b/home.admin/setup.scripts/dialogName.sh index 3186e5ccc..be63b645d 100644 --- a/home.admin/setup.scripts/dialogName.sh +++ b/home.admin/setup.scripts/dialogName.sh @@ -7,7 +7,7 @@ source /home/admin/raspiblitz.info # SETUPFILE # this key/value file contains the state during the setup process SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" -source <($SETUPFILE) +source $SETUPFILE ################### # ENTER NAME diff --git a/home.admin/setup.scripts/dialogPasswords.sh b/home.admin/setup.scripts/dialogPasswords.sh index 920fd733c..a70c02425 100644 --- a/home.admin/setup.scripts/dialogPasswords.sh +++ b/home.admin/setup.scripts/dialogPasswords.sh @@ -7,7 +7,7 @@ source /home/admin/raspiblitz.info # SETUPFILE # this key/value file contains the state during the setup process SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" -source <($SETUPFILE) +source $SETUPFILE # debug test echo "setPasswordA(${setPasswordA})" From 280fc2886f7fff0081945edabd7860befca427e9 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 14:50:44 +0200 Subject: [PATCH 0074/1295] password confirm wording --- home.admin/setup.scripts/dialogPasswords.sh | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/home.admin/setup.scripts/dialogPasswords.sh b/home.admin/setup.scripts/dialogPasswords.sh index a70c02425..ec75a0f67 100644 --- a/home.admin/setup.scripts/dialogPasswords.sh +++ b/home.admin/setup.scripts/dialogPasswords.sh @@ -9,10 +9,6 @@ source /home/admin/raspiblitz.info SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" source $SETUPFILE -# debug test -echo "setPasswordA(${setPasswordA})" -sleep 4 - #################################################### # INPUT PASSWORDS (based on flags from raspiblitz.setup) @@ -73,7 +69,7 @@ if [ "${setPasswordA}" == "1" ]; then password=$(sudo cat $_temp) sudo rm $_temp echo "passwordA='${password}'" >> $SETUPFILE - dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password A set" 7 20 + dialog --backtitle "RaspiBlitz - Setup" --msgbox "\nThanks - Password A accepted.\n\nUse this password for future SSH or Web-Admin logins to your RaspiBlitz & for sudo commands." 11 35 fi # PASSWORD B @@ -83,7 +79,7 @@ if [ "${setPasswordB}" == "1" ]; then password=$(sudo cat $_temp) sudo rm $_temp echo "passwordB='${password}'" >> $SETUPFILE - dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password B set" 7 20 + dialog --backtitle "RaspiBlitz - Setup" --msgbox "\nThanks - Password B accepted.\n\nUse this password as login for\nadditial Apps & API access." 10 34 fi # PASSWORD C @@ -93,7 +89,7 @@ if [ "${setPasswordC}" == "1" ]; then password=$(sudo cat $_temp) sudo rm $_temp echo "passwordC='${password}'" >> $SETUPFILE - dialog --backtitle "RaspiBlitz - Setup" --msgbox "\n Password C set" 7 20 + dialog --backtitle "RaspiBlitz - Setup" --msgbox "\nThanks - Password C accepted.\n\nAlways use this password to \nunlock your Lightning Wallet." 10 34 fi # debug info From 8e984c58c91450950d38211de1c32b13bbd53394 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 14:56:39 +0200 Subject: [PATCH 0075/1295] prepare config --- home.admin/setup.scripts/setupDialogControl.sh | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 5f30c1c42..a44367659 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -105,11 +105,18 @@ if [ "${migrationOS}" == "" ]; then echo "# CREATING raspiblitz.conf from your setup choices" - # prepare the config file (what will later become the raspiblitz.config) + # prepate config file + CONFIGFILE="/mnt/hdd/raspiblitz.conf.tmp" + sudo rm $CONFIGFILE 2>/dev/null + sudo chown admin:admin $CONFIGFILE + sudo chmod 777 $CONFIGFILE + + # source the raspiblitz version source /home/admin/_version.info - CONFIGFILE="/mnt/hdd/raspiblitz.config" - rm $CONFIGFILE 2>/dev/null + # source the setup state fresh + source $SETUPFILE + echo "# RASPIBLITZ CONFIG FILE" > $CONFIGFILE echo "raspiBlitzVersion='${codeVersion}'" >> $CONFIGFILE echo "lcdrotate=1" >> $CONFIGFILE @@ -124,6 +131,9 @@ else # Process Migration # TODO: move this part later outside of dialog controller and combine with data from WebUI + # source the setup state fresh + source $SETUPFILE + echo "TODO: Process Migration" exit 1 From 0c9fe9a68414140c4337b05e0047e1cd75ddb648 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:12:52 +0200 Subject: [PATCH 0076/1295] set passwords in all lightning choices --- .../setup.scripts/dialogLightningWallet.sh | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/home.admin/setup.scripts/dialogLightningWallet.sh b/home.admin/setup.scripts/dialogLightningWallet.sh index 70c5f863d..b94c03cde 100644 --- a/home.admin/setup.scripts/dialogLightningWallet.sh +++ b/home.admin/setup.scripts/dialogLightningWallet.sh @@ -62,6 +62,16 @@ elif [ "${CHOICE}" == "OLD" ]; then enterSEED=1 uploadSCB=1 + # clear setup state from all fomer possible choices (previous loop) + sudo sed -i '/^setPasswordA=/d' $SETUPFILE + sudo sed -i '/^setPasswordB=/d' $SETUPFILE + sudo sed -i '/^setPasswordC=/d' $SETUPFILE + + # mark all passwords to be set at the end + echo "setPasswordA=1" >> $SETUPFILE + echo "setPasswordB=1" >> $SETUPFILE + echo "setPasswordC=1" >> $SETUPFILE + elif [ "${CHOICESUB}" == "ONLYSEED" ]; then # let people know about the difference between SEED & SEED+SCB @@ -78,6 +88,17 @@ or having a complete LND rescue-backup from your old node. else # activate SEED input & SCB upload enterSEED=1 + + # clear setup state from all fomer possible choices (previous loop) + sudo sed -i '/^setPasswordA=/d' $SETUPFILE + sudo sed -i '/^setPasswordB=/d' $SETUPFILE + sudo sed -i '/^setPasswordC=/d' $SETUPFILE + + # mark all passwords to be set at the end + echo "setPasswordA=1" >> $SETUPFILE + echo "setPasswordB=1" >> $SETUPFILE + echo "setPasswordC=1" >> $SETUPFILE + fi else From 2c030b317faa24c7f83fbab5f90c80f406c864e0 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:13:32 +0200 Subject: [PATCH 0077/1295] debug sleeps --- home.admin/setup.scripts/dialogLightningWallet.sh | 2 ++ home.admin/setup.scripts/setupDialogControl.sh | 2 ++ 2 files changed, 4 insertions(+) diff --git a/home.admin/setup.scripts/dialogLightningWallet.sh b/home.admin/setup.scripts/dialogLightningWallet.sh index b94c03cde..03e81d9cc 100644 --- a/home.admin/setup.scripts/dialogLightningWallet.sh +++ b/home.admin/setup.scripts/dialogLightningWallet.sh @@ -106,6 +106,8 @@ or having a complete LND rescue-backup from your old node. exit 2 fi + sleep 3 + done else diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index a44367659..c81b4d168 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -83,6 +83,8 @@ else exit 1 fi + sleep 3 + done fi From b98b5735238b326c55430879d5065db84b439ad5 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:14:50 +0200 Subject: [PATCH 0078/1295] fix temp source --- home.admin/setup.scripts/dialogLightningWallet.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/home.admin/setup.scripts/dialogLightningWallet.sh b/home.admin/setup.scripts/dialogLightningWallet.sh index 03e81d9cc..ab4466e9a 100644 --- a/home.admin/setup.scripts/dialogLightningWallet.sh +++ b/home.admin/setup.scripts/dialogLightningWallet.sh @@ -121,7 +121,7 @@ if [ ${uploadLNDRESCUE} -eq 1 ]; then # run upload dialog and get result _temp="/var/cache/raspiblitz/.temp.tmp" /home/admin/config.scripts/lnd.backup.sh lnd-import-gui setup $_temp - source <($_temp) 2>/dev/null + source $_temp 2>/dev/null sudo rm $_temp # if user canceled upload @@ -143,7 +143,7 @@ if [ ${enterSEED} -eq 1 ]; then # start seed input and get results _temp="/var/cache/raspiblitz/.temp.tmp" /home/admin/config.scripts/lnd.backup.sh seed-import-gui $_temp - source <($_temp) 2>/dev/null + source $_temp 2>/dev/null sudo rm $_temp # if user canceled the seed input @@ -167,7 +167,7 @@ if [ ${uploadSCB} -eq 1 ]; then # start seed input and get results _temp="/var/cache/raspiblitz/.temp.tmp" /home/admin/config.scripts/lnd.backup.sh scb-import-gui setup $_temp - source <($_temp) 2>/dev/null + source $_temp 2>/dev/null sudo rm $_temp # if user canceled the upload From f97a0619c92da702e6079fe72055ef6061ed88b0 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:18:24 +0200 Subject: [PATCH 0079/1295] typo fix --- home.admin/config.scripts/lnd.backup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/lnd.backup.sh b/home.admin/config.scripts/lnd.backup.sh index fe32f5774..2e1506b72 100755 --- a/home.admin/config.scripts/lnd.backup.sh +++ b/home.admin/config.scripts/lnd.backup.sh @@ -190,7 +190,7 @@ if [ ${mode} = "lnd-import-gui" ]; then echo "* UPLOAD THE RESCUE FILE *" echo "**************************" echo "If you have a lnd-rescue backup file on your laptop you can now" - echo "upload it and restore the your latest LND state." + echo "upload it and restore your latest LND state." echo echo "CAUTION: Dont restore old LND states - risk of loosing funds!" echo From 283dd40bf2f652d073548a5ef0cacff6c25b8135 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:24:54 +0200 Subject: [PATCH 0080/1295] directory access --- home.admin/setup.scripts/dialogBasicSetup.sh | 2 +- home.admin/setup.scripts/dialogLightningWallet.sh | 10 +++++----- home.admin/setup.scripts/dialogMigration.sh | 2 +- home.admin/setup.scripts/dialogName.sh | 4 ++-- home.admin/setup.scripts/dialogPasswords.sh | 4 ++-- home.admin/setup.scripts/setupDialogControl.sh | 7 ++++++- 6 files changed, 17 insertions(+), 12 deletions(-) diff --git a/home.admin/setup.scripts/dialogBasicSetup.sh b/home.admin/setup.scripts/dialogBasicSetup.sh index 3bdccb203..e808e8f8c 100644 --- a/home.admin/setup.scripts/dialogBasicSetup.sh +++ b/home.admin/setup.scripts/dialogBasicSetup.sh @@ -6,7 +6,7 @@ source /home/admin/raspiblitz.info # SETUPFILE # this key/value file contains the state during the setup process -SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" +SETUPFILE="/var/cache/raspiblitz/temp/raspiblitz.setup" source $SETUPFILE # choose blockchain or select migration diff --git a/home.admin/setup.scripts/dialogLightningWallet.sh b/home.admin/setup.scripts/dialogLightningWallet.sh index ab4466e9a..4d072ed05 100644 --- a/home.admin/setup.scripts/dialogLightningWallet.sh +++ b/home.admin/setup.scripts/dialogLightningWallet.sh @@ -4,7 +4,7 @@ source /home/admin/raspiblitz.info # SETUPFILE # this key/value file contains the state during the setup process -SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" +SETUPFILE="/var/cache/raspiblitz/temp/raspiblitz.setup" source $SETUPFILE # flags for sub dialogs after choice @@ -119,10 +119,10 @@ fi if [ ${uploadLNDRESCUE} -eq 1 ]; then # run upload dialog and get result - _temp="/var/cache/raspiblitz/.temp.tmp" + _temp="/var/cache/raspiblitz/temp/.temp.tmp" /home/admin/config.scripts/lnd.backup.sh lnd-import-gui setup $_temp source $_temp 2>/dev/null - sudo rm $_temp + sudo rm $_temp 2>/dev/null # if user canceled upload if [ "${lndrescue}" == "" ]; then @@ -144,7 +144,7 @@ if [ ${enterSEED} -eq 1 ]; then _temp="/var/cache/raspiblitz/.temp.tmp" /home/admin/config.scripts/lnd.backup.sh seed-import-gui $_temp source $_temp 2>/dev/null - sudo rm $_temp + sudo rm $_temp 2>/dev/null # if user canceled the seed input if [ "${seedWords}" == "" ]; then @@ -168,7 +168,7 @@ if [ ${uploadSCB} -eq 1 ]; then _temp="/var/cache/raspiblitz/.temp.tmp" /home/admin/config.scripts/lnd.backup.sh scb-import-gui setup $_temp source $_temp 2>/dev/null - sudo rm $_temp + sudo rm $_temp 2>/dev/null # if user canceled the upload if [ "${staticchannelbackup}" == "" ]; then diff --git a/home.admin/setup.scripts/dialogMigration.sh b/home.admin/setup.scripts/dialogMigration.sh index e6a5395e0..709469f5a 100755 --- a/home.admin/setup.scripts/dialogMigration.sh +++ b/home.admin/setup.scripts/dialogMigration.sh @@ -8,7 +8,7 @@ source /home/admin/raspiblitz.info # SETUPFILE # this key/value file contains the state during the setup process -SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" +SETUPFILE="/var/cache/raspiblitz/temp/raspiblitz.setup" source $SETUPFILE ######################### diff --git a/home.admin/setup.scripts/dialogName.sh b/home.admin/setup.scripts/dialogName.sh index be63b645d..92840e5fc 100644 --- a/home.admin/setup.scripts/dialogName.sh +++ b/home.admin/setup.scripts/dialogName.sh @@ -6,7 +6,7 @@ source /home/admin/raspiblitz.info # SETUPFILE # this key/value file contains the state during the setup process -SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" +SETUPFILE="/var/cache/raspiblitz/temp/raspiblitz.setup" source $SETUPFILE ################### @@ -14,7 +14,7 @@ source $SETUPFILE ################### # temp file for password results -_temp="/var/cache/raspiblitz/.temp.tmp" +_temp="/var/cache/raspiblitz/temp/.temp.tmp" # ask for name of RaspiBlitz result="" diff --git a/home.admin/setup.scripts/dialogPasswords.sh b/home.admin/setup.scripts/dialogPasswords.sh index ec75a0f67..1bd8ae30e 100644 --- a/home.admin/setup.scripts/dialogPasswords.sh +++ b/home.admin/setup.scripts/dialogPasswords.sh @@ -6,7 +6,7 @@ source /home/admin/raspiblitz.info # SETUPFILE # this key/value file contains the state during the setup process -SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" +SETUPFILE="/var/cache/raspiblitz/temp/raspiblitz.setup" source $SETUPFILE #################################################### @@ -60,7 +60,7 @@ Write them down & store them in a safe place. fi # temp file for password results -_temp="/var/cache/raspiblitz/.temp.tmp" +_temp="/var/cache/raspiblitz/temp/.temp.tmp" # PASSWORD A if [ "${setPasswordA}" == "1" ]; then diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index c81b4d168..60dd0ebd8 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -6,14 +6,19 @@ source /home/admin/raspiblitz.info # SETUPFILE # this key/value file contains the state during the setup process -SETUPFILE="/var/cache/raspiblitz/raspiblitz.setup" +SETUPFILE="/var/cache/raspiblitz/temp/raspiblitz.setup" # init SETUPFILE +sudo mkdir /var/cache/raspiblitz/temp +sudo chown admin:admin /var/cache/raspiblitz/temp sudo rm $SETUPFILE 2>/dev/null echo "# RASPIBLITZ SETUP STATE" > $SETUPFILE sudo chown admin:admin $SETUPFILE sudo chmod 777 $SETUPFILE +# init temp directory on mem drive + + ############################################ # Basic Setup (Blockchain & Lightning Impl) # (skip if migration was auto-detected) From 2bbcad6dc6c76680ef9f1f944ac932663334e225 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:27:20 +0200 Subject: [PATCH 0081/1295] fix action --- home.admin/config.scripts/blitz.upload.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh index 8880c6ab6..372cce1d4 100644 --- a/home.admin/config.scripts/blitz.upload.sh +++ b/home.admin/config.scripts/blitz.upload.sh @@ -26,7 +26,7 @@ fi # 1st PRAMETER action action="$1" -if [ ${action} = "prepare-upload" ]; then +if [ "${action}" == "prepare-upload" ]; then # make sure that temp directory exists, is clear and can be written by ${defaultUploadUser} sudo mkdir -p ${defaultUploadPath} 2>/dev/null @@ -39,7 +39,7 @@ if [ ${action} = "prepare-upload" ]; then exit 0 fi -if [ ${action} = "check-upload" ]; then +if [ "${action}" ="" "check-upload" ]; then # 2nd PARAMETER is type of upload (optional) type=$2 From 89825bbf1cf5bb0fe93f878d19cf1a594bab600d Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:30:44 +0200 Subject: [PATCH 0082/1295] fix syntax --- home.admin/config.scripts/blitz.upload.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh index 372cce1d4..e1d8f10c1 100644 --- a/home.admin/config.scripts/blitz.upload.sh +++ b/home.admin/config.scripts/blitz.upload.sh @@ -83,7 +83,6 @@ if [ "${action}" ="" "check-upload" ]; then echo "errorDetail='not *.backup'" exit 1 fi - fi # LND-RESCUE check if file looks valid @@ -108,6 +107,7 @@ if [ "${action}" ="" "check-upload" ]; then echo "errorDetail='incorrect checksum'" exit 1 fi + fi # MIGRATION check if file looks valid if [ "${type}" == "migration" ]; then @@ -131,7 +131,6 @@ if [ "${action}" ="" "check-upload" ]; then echo "errorDetail='incorrect checksum'" exit 1 fi - fi # ok looks good - return filename & more info From 7b85e8d2244202fd321e37afcb4ee18992258267 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:36:38 +0200 Subject: [PATCH 0083/1295] debug remove code --- home.admin/config.scripts/blitz.upload.sh | 61 +---------------------- 1 file changed, 1 insertion(+), 60 deletions(-) diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh index e1d8f10c1..f4d7b507e 100644 --- a/home.admin/config.scripts/blitz.upload.sh +++ b/home.admin/config.scripts/blitz.upload.sh @@ -72,66 +72,7 @@ if [ "${action}" ="" "check-upload" ]; then exit 1 fi - # SCB check if file looks valid - if [ "${type}" == "scb" ]; then - - # general filename check - typeCount=$(sudo ls ${defaultUploadPath}/*.backup 2>/dev/null | grep -c '.backup') - if [ "${typeCount}" != "1" ]; then - sudo rm ${defaultUploadPath}/* 2>/dev/null - echo "error='invalid'" - echo "errorDetail='not *.backup'" - exit 1 - fi - fi - - # LND-RESCUE check if file looks valid - if [ "${type}" == "lnd-rescue" ]; then - - # general filename check - typeCount=$(sudo ls ${defaultUploadPath}/lnd-rescue-*.tar.gz 2>/dev/null | grep -c 'lnd-rescue') - if [ "${typeCount}" != "1" ]; then - sudo rm ${defaultUploadPath}/* 2>/dev/null - echo "error='invalid'" - echo "errorDetail='not lnd-rescue-*.tar.gz'" - exit 1 - fi - - # checksum test - md5checksum=$(md5sum ${filename} | head -n1 | cut -d " " -f1) - echo "# filename(${md5checksum})" - isCorrect=$(echo ${filename} | grep -c ${md5checksum}) - if [ "${isCorrect}" != "1" ]; then - sudo rm ${defaultUploadPath}/* 2>/dev/null - echo "error='invalid'" - echo "errorDetail='incorrect checksum'" - exit 1 - fi - fi - - # MIGRATION check if file looks valid - if [ "${type}" == "migration" ]; then - - # general filename check - typeCount=$(sudo ls ${defaultUploadPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz') - if [ "${typeCount}" != "1" ]; then - sudo rm ${defaultUploadPath}/* 2>/dev/null - echo "error='invalid'" - echo "errorDetail='not raspiblitz-*.tar.gz'" - exit 1 - fi - - # checksum test - md5checksum=$(md5sum ${filename} | head -n1 | cut -d " " -f1) - echo "# filename(${md5checksum})" - isCorrect=$(echo ${filename} | grep -c ${md5checksum}) - if [ "${isCorrect}" != "1" ]; then - sudo rm ${defaultUploadPath}/* 2>/dev/null - echo "error='invalid'" - echo "errorDetail='incorrect checksum'" - exit 1 - fi - fi + # testcut # ok looks good - return filename & more info echo "filename=${filename}" From 1ff12020f075b5d45bccd934081a2fedc997a930 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:37:25 +0200 Subject: [PATCH 0084/1295] more debug code cut --- home.admin/config.scripts/blitz.upload.sh | 27 ----------------------- 1 file changed, 27 deletions(-) diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh index f4d7b507e..1388b1e27 100644 --- a/home.admin/config.scripts/blitz.upload.sh +++ b/home.admin/config.scripts/blitz.upload.sh @@ -45,33 +45,6 @@ if [ "${action}" ="" "check-upload" ]; then type=$2 echo "type='${type}'" - # check if there to less or to many files in upload directory - countFiles=$(ls ${defaultUploadPath} | wc -l 2>/dev/null) - if [ ${countFiles} -lt 1 ]; then - sudo rm ${defaultUploadPath}/* 2>/dev/null - echo "error='not-found'" - exit 1 - fi - if [ ${countFiles} -gt 1 ]; then - sudo rm ${defaultUploadPath}/* 2>/dev/null - echo "error='multiple'" - exit 1 - fi - - # get the file uploaded (full path) - filename=$(sudo ls ${defaultUploadPath}/*.*) - echo "# filename(${filename})" - - # check of size >0 - byteSize=$(ls -l ${filename} | awk '{print $5}') - echo "# byteSize(${byteSize})" - if [ "${byteSize}" == "" ] || [ "${byteSize}" == "0" ]; then - sudo rm ${defaultUploadPath}/* 2>/dev/null - echo "error='invalid'" - echo "errorDetail='invalid byte size: ${byteSize}'" - exit 1 - fi - # testcut # ok looks good - return filename & more info From d0b89df690ff28a50c9fc3b526a4fcacdbaf5270 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:37:44 +0200 Subject: [PATCH 0085/1295] fix code syntax --- home.admin/config.scripts/blitz.upload.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh index 1388b1e27..9d4a19ec2 100644 --- a/home.admin/config.scripts/blitz.upload.sh +++ b/home.admin/config.scripts/blitz.upload.sh @@ -39,7 +39,7 @@ if [ "${action}" == "prepare-upload" ]; then exit 0 fi -if [ "${action}" ="" "check-upload" ]; then +if [ "${action}" = "check-upload" ]; then # 2nd PARAMETER is type of upload (optional) type=$2 From 976b6ba2444498649e8ed018b6a792f078754509 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:37:56 +0200 Subject: [PATCH 0086/1295] fix syntax --- home.admin/config.scripts/blitz.upload.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh index 9d4a19ec2..ddb1e50db 100644 --- a/home.admin/config.scripts/blitz.upload.sh +++ b/home.admin/config.scripts/blitz.upload.sh @@ -39,7 +39,7 @@ if [ "${action}" == "prepare-upload" ]; then exit 0 fi -if [ "${action}" = "check-upload" ]; then +if [ "${action}" == "check-upload" ]; then # 2nd PARAMETER is type of upload (optional) type=$2 From fb1aeada9ae3418f40927c1a129f7ed03f285a8a Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:43:12 +0200 Subject: [PATCH 0087/1295] re add code --- home.admin/config.scripts/blitz.upload.sh | 88 ++++++++++++++++++++++- 1 file changed, 87 insertions(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh index ddb1e50db..ae85780ad 100644 --- a/home.admin/config.scripts/blitz.upload.sh +++ b/home.admin/config.scripts/blitz.upload.sh @@ -45,7 +45,93 @@ if [ "${action}" == "check-upload" ]; then type=$2 echo "type='${type}'" - # testcut + # check if there to less or to many files in upload directory + countFiles=$(ls ${defaultUploadPath} | wc -l 2>/dev/null) + if [ ${countFiles} -lt 1 ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='not-found'" + exit 1 + fi + if [ ${countFiles} -gt 1 ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='multiple'" + exit 1 + fi + + # get the file uploaded (full path) + filename=$(sudo ls ${defaultUploadPath}/*.*) + echo "# filename(${filename})" + + # check of size >0 + byteSize=$(ls -l ${filename} | awk '{print $5}') + echo "# byteSize(${byteSize})" + if [ "${byteSize}" == "" ] || [ "${byteSize}" == "0" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='invalid byte size: ${byteSize}'" + exit 1 + fi + + # SCB check if file looks valid + if [ "${type}" == "scb" ]; then + + # general filename check + typeCount=$(sudo ls ${defaultUploadPath}/*.backup 2>/dev/null | grep -c '.backup') + if [ "${typeCount}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='not *.backup'" + exit 1 + fi + fi + + # LND-RESCUE check if file looks valid + if [ "${type}" == "lnd-rescue" ]; then + + # general filename check + typeCount=$(sudo ls ${defaultUploadPath}/lnd-rescue-*.tar.gz 2>/dev/null | grep -c 'lnd-rescue') + if [ "${typeCount}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='not lnd-rescue-*.tar.gz'" + exit 1 + fi + + # checksum test + md5checksum=$(md5sum ${filename} | head -n1 | cut -d " " -f1) + echo "# filename(${md5checksum})" + isCorrect=$(echo ${filename} | grep -c ${md5checksum}) + if [ "${isCorrect}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='incorrect checksum'" + exit 1 + fi + fi + + # MIGRATION check if file looks valid + if [ "${type}" == "migration" ]; then + + # general filename check + typeCount=$(sudo ls ${defaultUploadPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz') + if [ "${typeCount}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='not raspiblitz-*.tar.gz'" + exit 1 + fi + + # checksum test + md5checksum=$(md5sum ${filename} | head -n1 | cut -d " " -f1) + echo "# filename(${md5checksum})" + isCorrect=$(echo ${filename} | grep -c ${md5checksum}) + if [ "${isCorrect}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='incorrect checksum'" + exit 1 + fi + fi # ok looks good - return filename & more info echo "filename=${filename}" From b95d6bc867a5991e30392c94dc14a76fb4ce1a55 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:49:45 +0200 Subject: [PATCH 0088/1295] offer user cancel --- home.admin/config.scripts/lnd.backup.sh | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/home.admin/config.scripts/lnd.backup.sh b/home.admin/config.scripts/lnd.backup.sh index 2e1506b72..27ab6d633 100755 --- a/home.admin/config.scripts/lnd.backup.sh +++ b/home.admin/config.scripts/lnd.backup.sh @@ -213,23 +213,31 @@ if [ ${mode} = "lnd-import-gui" ]; then echo "!! WARNING !!" echo "There was no upload found in ${defaultUploadPath}" echo "Make sure you upload only one tar.gz-file and start again." - echo "PRESS ENTER to continue & retry" - read key + echo "PRESS ENTER to continue & retry ... or 'x'+ ENTER to cancel" + read keyRetry elif [ "${error}" == "multiple" ]; then echo "!! WARNING !!" echo "There are multiple lnd-rescue files in directory ${defaultUploadPath}" echo "Make sure you upload only one tar.gz-file and start again." - echo "PRESS ENTER to continue & retry" - read key + echo "PRESS ENTER to continue & retry ... or 'x'+ ENTER to cancel" + read keyRetry elif [ "${error}" == "invalid" ]; then echo "!! WARNING !!" echo "The file uploaded is not a valid (complete upload failed or not correct file)." - echo "PRESS ENTER to continue & retry" - read key + echo "PRESS ENTER to continue & retry ... or 'x'+ ENTER to cancel" + read keyRetry else + # create no result file and exit echo "!! WARNING !! Unknown State (report to devs)" exit 1 fi + + if [ "${keyRetry}" == "x" ] || [ "${keyRetry}" == "X" ] || [ "${keyRetry}" == "'x'" ]; then + # create no result file and exit + echo "# USER CANCEL" + exit 1 + fi + done # in setup scenario the final import is happening during provison From 8c3b2ce6e317a735089aea771078d6f2db3a6769 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:51:20 +0200 Subject: [PATCH 0089/1295] fix text --- home.admin/config.scripts/lnd.backup.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/home.admin/config.scripts/lnd.backup.sh b/home.admin/config.scripts/lnd.backup.sh index 27ab6d633..348c69ded 100755 --- a/home.admin/config.scripts/lnd.backup.sh +++ b/home.admin/config.scripts/lnd.backup.sh @@ -212,7 +212,6 @@ if [ ${mode} = "lnd-import-gui" ]; then elif [ "${error}" == "not-found" ]; then echo "!! WARNING !!" echo "There was no upload found in ${defaultUploadPath}" - echo "Make sure you upload only one tar.gz-file and start again." echo "PRESS ENTER to continue & retry ... or 'x'+ ENTER to cancel" read keyRetry elif [ "${error}" == "multiple" ]; then From 384dcde593886e4a41fd6d9699aaa127ac421477 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 15:54:45 +0200 Subject: [PATCH 0090/1295] offer user cancel on upload --- home.admin/config.scripts/lnd.backup.sh | 20 +++++++++++++------- home.admin/setup.scripts/dialogMigration.sh | 19 +++++++++++++------ 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/home.admin/config.scripts/lnd.backup.sh b/home.admin/config.scripts/lnd.backup.sh index 348c69ded..85418ef36 100755 --- a/home.admin/config.scripts/lnd.backup.sh +++ b/home.admin/config.scripts/lnd.backup.sh @@ -405,24 +405,30 @@ if [ ${mode} = "scb-import-gui" ]; then elif [ "${error}" == "not-found" ]; then echo "!! WARNING !!" echo "There was no upload found in ${defaultUploadPath}" - echo "Make sure you upload only one tar.gz-file and start again." - echo "PRESS ENTER to continue & retry" - read key + echo "PRESS ENTER to continue & retry ... or 'x'+ ENTER to cancel" + read keyRetry elif [ "${error}" == "multiple" ]; then echo "!! WARNING !!" echo "There are multiple lnd-rescue files in directory ${defaultUploadPath}" echo "Make sure you upload only one tar.gz-file and start again." - echo "PRESS ENTER to continue & retry" - read key + echo "PRESS ENTER to continue & retry ... or 'x'+ ENTER to cancel" + read keyRetry elif [ "${error}" == "invalid" ]; then echo "!! WARNING !!" echo "The file uploaded is not a valid (complete upload failed or not correct file)." - echo "PRESS ENTER to continue & retry" - read key + echo "PRESS ENTER to continue & retry ... or 'x'+ ENTER to cancel" + read keyRetry else echo "!! WARNING !! Unknown State (report to devs)" exit 1 fi + + if [ "${keyRetry}" == "x" ] || [ "${keyRetry}" == "X" ] || [ "${keyRetry}" == "'x'" ]; then + # create no result file and exit + echo "# USER CANCEL" + exit 1 + fi + done # in setup scenario the final import is happening during provison diff --git a/home.admin/setup.scripts/dialogMigration.sh b/home.admin/setup.scripts/dialogMigration.sh index 709469f5a..529d16c40 100755 --- a/home.admin/setup.scripts/dialogMigration.sh +++ b/home.admin/setup.scripts/dialogMigration.sh @@ -72,23 +72,30 @@ if [ "${migrationOS}" == "raspiblitz" ]; then echo "!! WARNING !!" echo "There was no upload found in ${defaultUploadPath}" echo "Make sure you upload only one tar.gz-file and start again." - echo "PRESS ENTER to continue & retry" - read key + echo "PRESS ENTER to continue & retry ... or 'x'+ ENTER to cancel" + read keyRetry elif [ "${error}" == "multiple" ]; then echo "!! WARNING !!" echo "There are multiple lnd-rescue files in directory ${defaultUploadPath}" echo "Make sure you upload only one tar.gz-file and start again." - echo "PRESS ENTER to continue & retry" - read key + echo "PRESS ENTER to continue & retry ... or 'x'+ ENTER to cancel" + read keyRetry elif [ "${error}" == "invalid" ]; then echo "!! WARNING !!" echo "The file uploaded is not a valid (complete upload failed or not correct file)." - echo "PRESS ENTER to continue & retry" - read key + echo "PRESS ENTER to continue & retry ... or 'x'+ ENTER to cancel" + read keyRetry else + # create no result file and exit echo "!! WARNING !! Unknown State (report to devs) error(${error})" exit 1 fi + + if [ "${keyRetry}" == "x" ] || [ "${keyRetry}" == "X" ] || [ "${keyRetry}" == "'x'" ]; then + # create no result file and exit + echo "# USER CANCEL" + exit 1 + fi done # further checks and unpacking will be done when migration is processed (not part of dialog) From f633e804f816935578229944fbf9c134d8aa0977 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 16:06:48 +0200 Subject: [PATCH 0091/1295] fix seed enter parameter --- home.admin/config.scripts/lnd.backup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/lnd.backup.sh b/home.admin/config.scripts/lnd.backup.sh index 85418ef36..7c91c58b9 100755 --- a/home.admin/config.scripts/lnd.backup.sh +++ b/home.admin/config.scripts/lnd.backup.sh @@ -485,7 +485,7 @@ if [ ${mode} = "seed-import-gui" ]; then # eins zwei polizei drei vier great idea fünf sechs alte keks sieben auch gute nacht ja ja ja was ist los was ist das # scenario setup needs a 3rd parameter - the RESULTFILE to store results in - RESULTFILE=$3 + RESULTFILE=$2 if [ "${RESULTFILE}" == "" ]; then echo "error='mising parameter'" exit 1 From 3179110d6e93ded859aa00b00c0fc995bda839a6 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 16:51:36 +0200 Subject: [PATCH 0092/1295] remove debug sleeps --- home.admin/setup.scripts/dialogLightningWallet.sh | 2 -- home.admin/setup.scripts/setupDialogControl.sh | 2 -- 2 files changed, 4 deletions(-) diff --git a/home.admin/setup.scripts/dialogLightningWallet.sh b/home.admin/setup.scripts/dialogLightningWallet.sh index 4d072ed05..b48908540 100644 --- a/home.admin/setup.scripts/dialogLightningWallet.sh +++ b/home.admin/setup.scripts/dialogLightningWallet.sh @@ -106,8 +106,6 @@ or having a complete LND rescue-backup from your old node. exit 2 fi - sleep 3 - done else diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 60dd0ebd8..8ce0cf9f0 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -88,8 +88,6 @@ else exit 1 fi - sleep 3 - done fi From 6abc2fc22c6b98d72badfc584fc64d9263fc3335 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 17:08:44 +0200 Subject: [PATCH 0093/1295] remove text --- home.admin/setup.scripts/dialogMigration.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/home.admin/setup.scripts/dialogMigration.sh b/home.admin/setup.scripts/dialogMigration.sh index 529d16c40..6e8ebd2d2 100755 --- a/home.admin/setup.scripts/dialogMigration.sh +++ b/home.admin/setup.scripts/dialogMigration.sh @@ -71,7 +71,6 @@ if [ "${migrationOS}" == "raspiblitz" ]; then elif [ "${error}" == "not-found" ]; then echo "!! WARNING !!" echo "There was no upload found in ${defaultUploadPath}" - echo "Make sure you upload only one tar.gz-file and start again." echo "PRESS ENTER to continue & retry ... or 'x'+ ENTER to cancel" read keyRetry elif [ "${error}" == "multiple" ]; then From c568ce3b0eab716d24db48715ab2821683ea5f73 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 17:10:08 +0200 Subject: [PATCH 0094/1295] remove sleep --- home.admin/setup.scripts/dialogMigration.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/home.admin/setup.scripts/dialogMigration.sh b/home.admin/setup.scripts/dialogMigration.sh index 6e8ebd2d2..7d5482eec 100755 --- a/home.admin/setup.scripts/dialogMigration.sh +++ b/home.admin/setup.scripts/dialogMigration.sh @@ -97,9 +97,6 @@ if [ "${migrationOS}" == "raspiblitz" ]; then fi done - # further checks and unpacking will be done when migration is processed (not part of dialog) - echo "OK: Migration file was imported - will process after password reset" - sleep 4 # migration OS & Version were already set earlier in setup process - now add migration filename echo "migrationFile='${filename}'" >> $SETUPFILE # user needs to reset password A From 8db8ab7d76708ccfc752b7cb9087138f64b05c37 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 17:16:28 +0200 Subject: [PATCH 0095/1295] resfresh setup state --- home.admin/setup.scripts/dialogName.sh | 2 +- home.admin/setup.scripts/setupDialogControl.sh | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/home.admin/setup.scripts/dialogName.sh b/home.admin/setup.scripts/dialogName.sh index 92840e5fc..248c1205a 100644 --- a/home.admin/setup.scripts/dialogName.sh +++ b/home.admin/setup.scripts/dialogName.sh @@ -22,7 +22,7 @@ while [ ${#result} -eq 0 ] do l1="Please enter the name of your new RaspiBlitz:\n" l2="one word, keep characters basic & not too long" - dialog --backtitle "RaspiBlitz - Setup (${network}/${chain})" --inputbox "$l1$l2" 11 52 2>$_temp + dialog --backtitle "RaspiBlitz - Setup" --inputbox "$l1$l2" 11 52 2>$_temp result=$( cat $_temp | tr -dc '[:alnum:]-.' | tr -d ' ' ) sudo rm $_temp done diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 8ce0cf9f0..ffe529d8e 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -8,7 +8,7 @@ source /home/admin/raspiblitz.info # this key/value file contains the state during the setup process SETUPFILE="/var/cache/raspiblitz/temp/raspiblitz.setup" -# init SETUPFILE +# init SETUPFILE & temp dir on mem drive sudo mkdir /var/cache/raspiblitz/temp sudo chown admin:admin /var/cache/raspiblitz/temp sudo rm $SETUPFILE 2>/dev/null @@ -16,9 +16,6 @@ echo "# RASPIBLITZ SETUP STATE" > $SETUPFILE sudo chown admin:admin $SETUPFILE sudo chmod 777 $SETUPFILE -# init temp directory on mem drive - - ############################################ # Basic Setup (Blockchain & Lightning Impl) # (skip if migration was auto-detected) @@ -37,6 +34,9 @@ if [ "${migrationOS}" == "" ]; then fi +# source setup state fresh - in case manual migration was choosen +source $SETUPFILE + if [ "${migrationOS}" != "" ]; then ############################################### From ead58095b42037f1b0a130e2905df29bbcb1b5bc Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 17:24:56 +0200 Subject: [PATCH 0096/1295] rename text --- home.admin/setup.scripts/dialogMigration.sh | 4 ++-- home.admin/setup.scripts/setupDialogControl.sh | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/home.admin/setup.scripts/dialogMigration.sh b/home.admin/setup.scripts/dialogMigration.sh index 7d5482eec..1bbe640d7 100755 --- a/home.admin/setup.scripts/dialogMigration.sh +++ b/home.admin/setup.scripts/dialogMigration.sh @@ -113,7 +113,7 @@ fi if [ "${migrationOS}" == "umbrel" ]; then # infodialog - whiptail --title " UMBREL --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Shutdown" --yesno "RaspiBlitz found data from UMBREL + whiptail --title " UMBREL --> RASPIBLITZ " --yes-button "Start Migration" --no-button "No+Shutdown" --yesno "RaspiBlitz found data from UMBREL You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. @@ -147,7 +147,7 @@ fi if [ "${migrationOS}" == "mynode" ]; then # infodialog - whiptail --title " MYNODE --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Shutdown" --yesno "RaspiBlitz found data from MYNODE + whiptail --title " MYNODE --> RASPIBLITZ " --yes-button "Start Migration" --no-button "No+Shutdown" --yesno "RaspiBlitz found data from MYNODE You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index ffe529d8e..4a885a609 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -20,6 +20,7 @@ sudo chmod 777 $SETUPFILE # Basic Setup (Blockchain & Lightning Impl) # (skip if migration was auto-detected) +# migrationOS is from raspiblitz.info if [ "${migrationOS}" == "" ]; then echo "# Starting basic setup dialog ..." @@ -37,6 +38,7 @@ fi # source setup state fresh - in case manual migration was choosen source $SETUPFILE +# migrationOS is from raspiblitz.info but might be overwritten from $SETUPFILE if [ "${migrationOS}" != "" ]; then ############################################### From 8d57f4c9236d5bafaa23dc46b8b67098d713ba35 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 17:27:18 +0200 Subject: [PATCH 0097/1295] shutdown --- home.admin/setup.scripts/setupDialogControl.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 4a885a609..a158275cb 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -48,10 +48,9 @@ if [ "${migrationOS}" != "" ]; then echo "# Starting migration dialog ..." /home/admin/setup.scripts/dialogMigration.sh - # on cancel - let user exit to terminal + # on cancel - shutdown system if [ "$?" != "0" ]; then - echo "# you selected cancel - exited to terminal" - echo "# to re-start setup use command --> setup" + sudo shutdown now exit 1 fi From 868989d604fe10b552515618298c03ed94134199 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 17:50:43 +0200 Subject: [PATCH 0098/1295] debug output --- home.admin/setup.scripts/dialogName.sh | 1 + home.admin/setup.scripts/dialogPasswords.sh | 20 +++++++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/home.admin/setup.scripts/dialogName.sh b/home.admin/setup.scripts/dialogName.sh index 248c1205a..eb77ea66d 100644 --- a/home.admin/setup.scripts/dialogName.sh +++ b/home.admin/setup.scripts/dialogName.sh @@ -28,4 +28,5 @@ while [ ${#result} -eq 0 ] done # store name in setup state +sudo sed -i '/^hostname=/d' $SETUPFILE echo "hostname=${result}" >> $SETUPFILE \ No newline at end of file diff --git a/home.admin/setup.scripts/dialogPasswords.sh b/home.admin/setup.scripts/dialogPasswords.sh index 1bd8ae30e..48f733a54 100644 --- a/home.admin/setup.scripts/dialogPasswords.sh +++ b/home.admin/setup.scripts/dialogPasswords.sh @@ -13,19 +13,26 @@ source $SETUPFILE # INPUT PASSWORDS (based on flags from raspiblitz.setup) # dynamic info string on what passwords need to be changed -passwordinfo="A" # always so far +# at the moment its always +passwordinfo="A" +echo "A" if [ "${setPasswordB}" == "1" ]; then passwordinfo = "${passwordinfo}, B" + echo "A1" fi +echo "B" if [ "${setPasswordC}" == "1" ]; then passwordinfo = "${passwordinfo}, C" + echo "B1" fi +echo "${passwordinfo}" +sleep 3 # if passwords are set in a migration situation, use different info text if [ "${migrationOS}" == "" ]; then - # info text on normal setup - dialog --backtitle "RaspiBlitz - Setup" --msgbox "RaspiBlitz uses 3 different passwords. + # info text on normal setup + dialog --backtitle "RaspiBlitz - Setup" --msgbox "RaspiBlitz uses 3 different passwords. Referenced as password A, B & C. PASSWORD A) Main User Password (SSH & WebUI, sudo) @@ -41,8 +48,8 @@ Write them down & store them in a safe place. else - # info text on migration setup - dialog --backtitle "RaspiBlitz - Migration Setup" --msgbox "You will need to set new passwords. + # info text on migration setup + dialog --backtitle "RaspiBlitz - Migration Setup" --msgbox "You will need to set new passwords. RaspiBlitz works with 3 different passwords: PASSWORD A) Main User Password (SSH & WebUI, sudo) @@ -68,6 +75,7 @@ if [ "${setPasswordA}" == "1" ]; then sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD A - Main User Password" $_temp password=$(sudo cat $_temp) sudo rm $_temp + sudo sed -i '/^passwordA=/d' $SETUPFILE echo "passwordA='${password}'" >> $SETUPFILE dialog --backtitle "RaspiBlitz - Setup" --msgbox "\nThanks - Password A accepted.\n\nUse this password for future SSH or Web-Admin logins to your RaspiBlitz & for sudo commands." 11 35 fi @@ -78,6 +86,7 @@ if [ "${setPasswordB}" == "1" ]; then sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD B - APP Password" $_temp password=$(sudo cat $_temp) sudo rm $_temp + sudo sed -i '/^passwordB=/d' $SETUPFILE echo "passwordB='${password}'" >> $SETUPFILE dialog --backtitle "RaspiBlitz - Setup" --msgbox "\nThanks - Password B accepted.\n\nUse this password as login for\nadditial Apps & API access." 10 34 fi @@ -88,6 +97,7 @@ if [ "${setPasswordC}" == "1" ]; then sudo /home/admin/config.scripts/blitz.setpassword.sh x "PASSWORD C - Lightning Wallet Password" $_temp password=$(sudo cat $_temp) sudo rm $_temp + sudo sed -i '/^passwordC=/d' $SETUPFILE echo "passwordC='${password}'" >> $SETUPFILE dialog --backtitle "RaspiBlitz - Setup" --msgbox "\nThanks - Password C accepted.\n\nAlways use this password to \nunlock your Lightning Wallet." 10 34 fi From 95537e5360b477e0a5e9128d35a762dbc1a8dd83 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 17:51:34 +0200 Subject: [PATCH 0099/1295] fix string issue --- home.admin/setup.scripts/dialogPasswords.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/setup.scripts/dialogPasswords.sh b/home.admin/setup.scripts/dialogPasswords.sh index 48f733a54..bd994a038 100644 --- a/home.admin/setup.scripts/dialogPasswords.sh +++ b/home.admin/setup.scripts/dialogPasswords.sh @@ -17,12 +17,12 @@ source $SETUPFILE passwordinfo="A" echo "A" if [ "${setPasswordB}" == "1" ]; then - passwordinfo = "${passwordinfo}, B" + passwordinfo="${passwordinfo}, B" echo "A1" fi echo "B" if [ "${setPasswordC}" == "1" ]; then - passwordinfo = "${passwordinfo}, C" + passwordinfo="${passwordinfo}, C" echo "B1" fi echo "${passwordinfo}" From efc430e691cf74672116a851fb0d6424e45ee3bc Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 17:53:05 +0200 Subject: [PATCH 0100/1295] remove debugs --- home.admin/setup.scripts/dialogPasswords.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/home.admin/setup.scripts/dialogPasswords.sh b/home.admin/setup.scripts/dialogPasswords.sh index bd994a038..1874f2028 100644 --- a/home.admin/setup.scripts/dialogPasswords.sh +++ b/home.admin/setup.scripts/dialogPasswords.sh @@ -20,13 +20,9 @@ if [ "${setPasswordB}" == "1" ]; then passwordinfo="${passwordinfo}, B" echo "A1" fi -echo "B" if [ "${setPasswordC}" == "1" ]; then passwordinfo="${passwordinfo}, C" - echo "B1" fi -echo "${passwordinfo}" -sleep 3 # if passwords are set in a migration situation, use different info text if [ "${migrationOS}" == "" ]; then From 57ed2d6f025df658be68343ab199bb80aeabe946 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 17:57:01 +0200 Subject: [PATCH 0101/1295] shutdown info --- home.admin/setup.scripts/setupDialogControl.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index a158275cb..6957bf188 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -50,6 +50,8 @@ if [ "${migrationOS}" != "" ]; then # on cancel - shutdown system if [ "$?" != "0" ]; then + clear + echo "OK .. no changes done to your hard drive. Shutting down." sudo shutdown now exit 1 fi From 9d72acaa22a8b25cfb666bb28d012c61bee743cf Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 19:04:00 +0200 Subject: [PATCH 0102/1295] sd card script --- home.admin/config.scripts/blitz.sdcard.sh | 83 +++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 home.admin/config.scripts/blitz.sdcard.sh diff --git a/home.admin/config.scripts/blitz.sdcard.sh b/home.admin/config.scripts/blitz.sdcard.sh new file mode 100644 index 000000000..2f8b8ceff --- /dev/null +++ b/home.admin/config.scripts/blitz.sdcard.sh @@ -0,0 +1,83 @@ +#!/bin/bash + +# basic background on this feature +# see: https://github.com/rootzoll/raspiblitz/issues/936 + +# get basic system information +# these are the same set of infos the WebGUI dialog/controler has +source /home/admin/raspiblitz.info Date: Mon, 3 May 2021 19:07:09 +0200 Subject: [PATCH 0103/1295] get action --- home.admin/config.scripts/blitz.sdcard.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/home.admin/config.scripts/blitz.sdcard.sh b/home.admin/config.scripts/blitz.sdcard.sh index 2f8b8ceff..c3da37710 100644 --- a/home.admin/config.scripts/blitz.sdcard.sh +++ b/home.admin/config.scripts/blitz.sdcard.sh @@ -21,6 +21,12 @@ if [ "$EUID" -ne 0 ] exit 1 fi +# 1st PARAMETER: action +action=$1 + +######################### +# STATUS + # gather data on sd card minimumSizeByte=8192000000 rootPartition=$(sudo mount | grep " / " | cut -d " " -f 1 | cut -d "/" -f 3) @@ -46,6 +52,9 @@ if [ "${action}" == "status" ]; then exit 0 fi +########################### +# EXPAND FILE SYSTEM OF SD + if [ "${action}" == "fsexpand" ]; then echo "# starting expand of file system of sd card" From 1a6ecbd1f0cfccb6cb5c2a5fafbc637a7a7cc931 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 19:15:26 +0200 Subject: [PATCH 0104/1295] rename as bootdrive script --- .../config.scripts/{blitz.sdcard.sh => blitz.bootdrive.sh} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename home.admin/config.scripts/{blitz.sdcard.sh => blitz.bootdrive.sh} (98%) diff --git a/home.admin/config.scripts/blitz.sdcard.sh b/home.admin/config.scripts/blitz.bootdrive.sh similarity index 98% rename from home.admin/config.scripts/blitz.sdcard.sh rename to home.admin/config.scripts/blitz.bootdrive.sh index c3da37710..20185a9bb 100644 --- a/home.admin/config.scripts/blitz.sdcard.sh +++ b/home.admin/config.scripts/blitz.bootdrive.sh @@ -9,7 +9,7 @@ source /home/admin/raspiblitz.info Date: Mon, 3 May 2021 19:59:20 +0200 Subject: [PATCH 0105/1295] bootdrive help --- home.admin/config.scripts/blitz.bootdrive.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.bootdrive.sh b/home.admin/config.scripts/blitz.bootdrive.sh index 20185a9bb..81202be26 100644 --- a/home.admin/config.scripts/blitz.bootdrive.sh +++ b/home.admin/config.scripts/blitz.bootdrive.sh @@ -8,7 +8,7 @@ source /home/admin/raspiblitz.info Date: Mon, 3 May 2021 20:06:57 +0200 Subject: [PATCH 0106/1295] pipe output --- home.admin/config.scripts/blitz.bootdrive.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/home.admin/config.scripts/blitz.bootdrive.sh b/home.admin/config.scripts/blitz.bootdrive.sh index 81202be26..22a33f791 100644 --- a/home.admin/config.scripts/blitz.bootdrive.sh +++ b/home.admin/config.scripts/blitz.bootdrive.sh @@ -9,9 +9,9 @@ source /home/admin/raspiblitz.info &2 else echo "# FAIL to execute on ${baseimage}: ${resizeRaspbian}" echo "err='expand failed'" @@ -74,7 +74,7 @@ if [ "${action}" == "fsexpand" ]; then resizeArmbian="/usr/lib/armbian/armbian-resize-filesystem" if [ -x ${resizeArmbian} ]; then echo "# RUNNING EXPAND ARMBIAN: ${resizeArmbian}" - sudo $resizeArmbian start + sudo $resizeArmbian start 1>&2 else echo "# FAIL to execute on ${baseimage}: ${resizeArmbian}" echo "err='expand failed'" From ccf230cd9f63ab2d5b7cb4f3f4715a38c4bce701 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 20:09:30 +0200 Subject: [PATCH 0107/1295] fix raspiblitz.info --- home.admin/config.scripts/blitz.bootdrive.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.bootdrive.sh b/home.admin/config.scripts/blitz.bootdrive.sh index 22a33f791..1b9e0d811 100644 --- a/home.admin/config.scripts/blitz.bootdrive.sh +++ b/home.admin/config.scripts/blitz.bootdrive.sh @@ -57,14 +57,16 @@ fi if [ "${action}" == "fsexpand" ]; then + echo "# blitz.bootdrive.sh fsexpand" echo "# starting expand of file system of sd card" - sudo sed -i "s/^fsexpanded=.*/fsexpanded=1/g" ${infoFile} + sudo sed -i "s/^fsexpanded=.*/fsexpanded=1/g" /home/admin/raspiblitz.info if [ "${baseimage}" = "raspbian" ] || [ "${baseimage}" = "raspios_arm64" ]; then resizeRaspbian="/usr/bin/raspi-config" if [ -x ${resizeRaspbian} ]; then echo "# RUNNING EXPAND RASPBERRYPI: ${resizeRaspbian}" sudo $resizeRaspbian --expand-rootfs 1>&2 + echo "# DONE" else echo "# FAIL to execute on ${baseimage}: ${resizeRaspbian}" echo "err='expand failed'" @@ -75,6 +77,7 @@ if [ "${action}" == "fsexpand" ]; then if [ -x ${resizeArmbian} ]; then echo "# RUNNING EXPAND ARMBIAN: ${resizeArmbian}" sudo $resizeArmbian start 1>&2 + echo "# DONE" else echo "# FAIL to execute on ${baseimage}: ${resizeArmbian}" echo "err='expand failed'" From 1c35c7d2c8215d71da4a530203b68f9315c8e08b Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 20:10:13 +0200 Subject: [PATCH 0108/1295] add rebot info --- home.admin/config.scripts/blitz.bootdrive.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/config.scripts/blitz.bootdrive.sh b/home.admin/config.scripts/blitz.bootdrive.sh index 1b9e0d811..217510285 100644 --- a/home.admin/config.scripts/blitz.bootdrive.sh +++ b/home.admin/config.scripts/blitz.bootdrive.sh @@ -66,7 +66,7 @@ if [ "${action}" == "fsexpand" ]; then if [ -x ${resizeRaspbian} ]; then echo "# RUNNING EXPAND RASPBERRYPI: ${resizeRaspbian}" sudo $resizeRaspbian --expand-rootfs 1>&2 - echo "# DONE" + echo "# DONE - please reboot" else echo "# FAIL to execute on ${baseimage}: ${resizeRaspbian}" echo "err='expand failed'" @@ -77,7 +77,7 @@ if [ "${action}" == "fsexpand" ]; then if [ -x ${resizeArmbian} ]; then echo "# RUNNING EXPAND ARMBIAN: ${resizeArmbian}" sudo $resizeArmbian start 1>&2 - echo "# DONE" + echo "# DONE - please reboot" else echo "# FAIL to execute on ${baseimage}: ${resizeArmbian}" echo "err='expand failed'" From 11c2159711953284ce3210192c1232a826503f75 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 21:04:53 +0200 Subject: [PATCH 0109/1295] move UASP to datadrive script --- home.admin/config.scripts/blitz.datadrive.sh | 40 +++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index 140bc4ba4..f08ee1eb8 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -1,7 +1,7 @@ #!/bin/bash if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then >&2 echo "# managing the data drive(s) with old EXT4 or new BTRFS" - >&2 echo "# blitz.datadrive.sh [status|tempmount|format|fstab|raid|link|swap|clean|snapshot]" + >&2 echo "# blitz.datadrive.sh [status|tempmount|format|fstab|raid|link|swap|clean|snapshot|uasp-fix]" echo "error='missing parameters'" exit 1 fi @@ -1672,5 +1672,43 @@ if [ "$1" = "clean" ]; then fi +######################################## +# UASP-fix +######################################## + +if [ "$1" = "uasp-fix" ]; then + + # get HDD status and if the connected adapter is supports UASP + source <(/home/admin/config.scripts/blitz.datadrive.sh status) + + # 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 ..." + usbQuirkActive=$(sudo cat /boot/cmdline.txt | grep -c "usb-storage.quirks=") + 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 + # go into reboot to activate new setting + echo "# DONE deactivating UASP for ${hddAdapterUSB} ... reboot needed" + echo "neededReboot=1" + else + echo "# Already UASP deactivated for ${hddAdapterUSB}" + echo "neededReboot=0" + fi + else + echo "# Skipping UASP deactivation ... cmdlineExists(${cmdlineExists}) hddAdapterUSB(${hddAdapterUSB}) hddAdapterUSAP(${hddAdapterUSAP})" + echo "neededReboot=0" + fi + + exit 0 +fi + echo "error='unkown command'" exit 1 From d4ddbe8e14219b4b7a225ba8a13876ad0fa91af4 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 21:49:47 +0200 Subject: [PATCH 0110/1295] add configWifi --- home.admin/config.scripts/internet.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/home.admin/config.scripts/internet.sh b/home.admin/config.scripts/internet.sh index abb5221f8..8631a3083 100755 --- a/home.admin/config.scripts/internet.sh +++ b/home.admin/config.scripts/internet.sh @@ -79,6 +79,10 @@ if [ "${localip:0:4}" = "169." ]; then dhcp=0 fi +############################################# +# check WifiConfig +configWifiExists=$(sudo cat /etc/wpa_supplicant/wpa_supplicant.conf 2>/dev/null| grep -c "network=") + ############################################# # check for internet connection online=0 @@ -176,6 +180,7 @@ if [ "$1" == "status" ]; then echo "localip=${localip}" echo "dhcp=${dhcp}" echo "network_device=${networkDevice}" + echo "configWifiExists='${configWifiExists}'" echo "network_rx='${network_rx}'" echo "network_tx='${network_tx}'" echo "### GLOBAL INTERNET ###" From c5266aad7b271ddf18636a57144ae143a0df35cd Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 21:50:33 +0200 Subject: [PATCH 0111/1295] config wifi exists as number --- home.admin/config.scripts/internet.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/internet.sh b/home.admin/config.scripts/internet.sh index 8631a3083..188ea4fcf 100755 --- a/home.admin/config.scripts/internet.sh +++ b/home.admin/config.scripts/internet.sh @@ -180,7 +180,7 @@ if [ "$1" == "status" ]; then echo "localip=${localip}" echo "dhcp=${dhcp}" echo "network_device=${networkDevice}" - echo "configWifiExists='${configWifiExists}'" + echo "configWifiExists=${configWifiExists}" echo "network_rx='${network_rx}'" echo "network_tx='${network_tx}'" echo "### GLOBAL INTERNET ###" From 42054846de668d05b046ca6aa5a947d3e5d92eec Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 21:51:18 +0200 Subject: [PATCH 0112/1295] change order --- home.admin/config.scripts/internet.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/internet.sh b/home.admin/config.scripts/internet.sh index 188ea4fcf..8f9651fa9 100755 --- a/home.admin/config.scripts/internet.sh +++ b/home.admin/config.scripts/internet.sh @@ -179,8 +179,8 @@ if [ "$1" == "status" ]; then echo "### LOCAL INTERNET ###" echo "localip=${localip}" echo "dhcp=${dhcp}" - echo "network_device=${networkDevice}" echo "configWifiExists=${configWifiExists}" + echo "network_device=${networkDevice}" echo "network_rx='${network_rx}'" echo "network_tx='${network_tx}'" echo "### GLOBAL INTERNET ###" From 5f711cd01d7eec2faa54796e6870ab8c3745685f Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 23:36:35 +0200 Subject: [PATCH 0113/1295] extend wifi restore to work with mem copy --- home.admin/config.scripts/internet.wifi.sh | 44 ++++++++++++++++------ 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/home.admin/config.scripts/internet.wifi.sh b/home.admin/config.scripts/internet.wifi.sh index 4698be96e..4f00270d1 100755 --- a/home.admin/config.scripts/internet.wifi.sh +++ b/home.admin/config.scripts/internet.wifi.sh @@ -81,25 +81,45 @@ update_config=1" # or when WIFI is inactive but a wpa_supplicant.conf exists restore this elif [ "$1" == "backup-restore" ]; then - # check if HDD already exists + # check if HDD backup location is available (for backup or restore) + hddBackupLocationAvailable=0 if [ -d /mnt/hdd/app-data ]; then - echo "# running backup/restore wifi settings" - else - echo "error='no hdd'" - exit 1 + hddBackupLocationAvailable=1 fi + echo "hddBackupLocationAvailable=${hddBackupLocationAvailable}" + + hddRestoreConfigAvailable=$(sudo ls /mnt/hdd/app-data/wpa_supplicant.conf 2>/dev/null | grep -c "wpa_supplicant.conf") + echo "hddRestoreConfigAvailable=${hddRestoreConfigAvailable}" + + # check if mem copy of wifi config is available (for restore only) + # this should be available if a backup on HDD exists and HDD is not mounted yet but was inspected by datadrive script + memRestoreConfigAvailable=$(sudo ls /var/cache/raspiblitz/wpa_supplicant.conf 2>/dev/null | grep -c "wpa_supplicant.conf") + echo "memRestoreConfigAvailable=${memRestoreConfigAvailable}" - wifiBackUpExists=$() if [ ${wifiIsSet} -eq 1 ]; then - # BACKUP latest wifi settings to HDD - sudo cp /etc/wpa_supplicant/wpa_supplicant.conf /mnt/hdd/app-data/wpa_supplicant.conf - echo "wifiRestore=0" - echo "wifiBackup=1" + # BACKUP latest wifi settings to HDD if available + if [ ${hddBackupLocationAvailable} -eq 1 ]; then + sudo cp /etc/wpa_supplicant/wpa_supplicant.conf /mnt/hdd/app-data/wpa_supplicant.conf + echo "wifiRestore=0" + echo "wifiBackup=1" + else + echo "wifiRestore=0" + echo "wifiBackup=0" + fi exit 0 - elif [ -f /mnt/hdd/app-data/wpa_supplicant.conf ]; then + elif [ ${hddRestoreConfigAvailable} -eq 1 ]; then # RESTORE backuped wifi settings from HDD to RaspiBlitz sudo cp /mnt/hdd/app-data/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.conf - echo "# restoring old wifi settings ... wait 4 secounds to connect" + echo "# restoring old wifi settings from HDD ... wait 4 secounds to connect" + sudo wpa_cli -i wlan0 reconfigure 1>/dev/null + sleep 4 + echo "wifiRestore=1" + echo "wifiBackup=0" + exit 0 + elif [ ${hddRestoreConfigAvailable} -eq 1 ]; then + # RESTORE backuped wifi settings from MEMCOPY to RaspiBlitz + sudo cp /var/cache/raspiblitz/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.conf + echo "# restoring old wifi settings from MEMCOPY ... wait 4 secounds to connect" sudo wpa_cli -i wlan0 reconfigure 1>/dev/null sleep 4 echo "wifiRestore=1" From 9ed9215d24cc00529c5739da78da7de518f8ffce Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 23:40:18 +0200 Subject: [PATCH 0114/1295] print wifi state --- home.admin/config.scripts/internet.wifi.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/home.admin/config.scripts/internet.wifi.sh b/home.admin/config.scripts/internet.wifi.sh index 4f00270d1..c0fb58a2f 100755 --- a/home.admin/config.scripts/internet.wifi.sh +++ b/home.admin/config.scripts/internet.wifi.sh @@ -81,6 +81,9 @@ update_config=1" # or when WIFI is inactive but a wpa_supplicant.conf exists restore this elif [ "$1" == "backup-restore" ]; then + # print wifi state + echo "wifiIsSet=${wifiIsSet}" + # check if HDD backup location is available (for backup or restore) hddBackupLocationAvailable=0 if [ -d /mnt/hdd/app-data ]; then From 9ded756d5fa5d661e70d935c2faf7be2f8f1a829 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 23:53:34 +0200 Subject: [PATCH 0115/1295] make mem copy of wifi config on inspect unmounted --- home.admin/config.scripts/blitz.datadrive.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index f08ee1eb8..239944ce9 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -71,7 +71,7 @@ if [ "$1" = "status" ]; then echo "isMounted=${isMounted}" echo "isBTRFS=${isBTRFS}" - # if HDD is not mounted system is in the pre-setup phase + # if HDD is not mounted system then it is in the pre-setup phase # deliver all the detailes needed about the data drive # and it content for the setup dialogs if [ ${isMounted} -eq 0 ]; then @@ -268,6 +268,14 @@ if [ "$1" = "status" ]; then fi echo "hddGotMigrationData='${hddGotMigrationData}'" + # check if there is a wifi configuration as backup + wifiBackupConfigExists=$(ls /mnt/hdd/app-data/wpa_supplicant.conf 2>/dev/null | grep -c "wpa_supplicant.conf") + if [ ${wifiBackupConfigExists} -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/app-data/wpa_supplicant.conf /var/cache/raspiblitz/wpa_supplicant.conf + echo "wifiBackupConfigCopy='/var/cache/raspiblitz/wpa_supplicant.conf'" + fi + # unmount sudo umount /mnt/storage fi From e05f91f0d46907a591723d73166eec9d75aef929 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 23:54:37 +0200 Subject: [PATCH 0116/1295] code cleanup --- home.admin/_bootstrap.provision.sh | 8 +------- home.admin/config.scripts/blitz.setpassword.sh | 2 +- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/home.admin/_bootstrap.provision.sh b/home.admin/_bootstrap.provision.sh index 7a380e8c5..1c8ae39cb 100755 --- a/home.admin/_bootstrap.provision.sh +++ b/home.admin/_bootstrap.provision.sh @@ -392,13 +392,7 @@ if [ "${BTCPayServer}" = "on" ]; then echo "Provisioning BTCPAYSERVER on TOR - running setup" >> ${logFile} sudo sed -i "s/^message=.*/message='Setup BTCPay (takes time)'/g" ${infoFile} sudo -u admin /home/admin/config.scripts/bonus.btcpayserver.sh on >> ${logFile} 2>&1 - - #echo "Provisioning BTCPAYSERVER on TOR - run on after bootup script" >> ${logFile} - # because BTCPAY server freezes during recovery .. it will get installed after reboot - #echo "sudo -u admin /home/admin/config.scripts/bonus.btcpayserver.sh on" >> /home/admin/setup.sh - #sudo chmod +x /home/admin/setup.sh >> ${logFile} - #sudo ls -la /home/admin/setup.sh >> ${logFile} - + else echo "Provisioning BTCPayServer - keep default" >> ${logFile} fi diff --git a/home.admin/config.scripts/blitz.setpassword.sh b/home.admin/config.scripts/blitz.setpassword.sh index 9f43fa998..db7bd3f82 100755 --- a/home.admin/config.scripts/blitz.setpassword.sh +++ b/home.admin/config.scripts/blitz.setpassword.sh @@ -4,7 +4,7 @@ if [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo "small config script to set a passwords A,B,C & D" echo "blitz.setpassword.sh a [?newpassword] " -echo "blitz.setpassword.sh b [?newpassword] " + echo "blitz.setpassword.sh b [?newpassword] " echo "blitz.setpassword.sh c [?oldpassword] [?newpassword] " echo "or just as a password enter dialog (result as file)" echo "blitz.setpassword.sh [x] [text] [result-file] [?empty-allowed]" From 2f06a55484b059f8ec105dc5fe04f0c702ce51c4 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 May 2021 23:54:55 +0200 Subject: [PATCH 0117/1295] refector system-init on boostrap --- home.admin/_bootstrap.sh | 372 ++++++++++++++++++++------------------- 1 file changed, 188 insertions(+), 184 deletions(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index f12134300..f69bf30fc 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -26,37 +26,7 @@ logFile="/home/admin/raspiblitz.log" # used by display and later setup steps infoFile="/home/admin/raspiblitz.info" - -# FUNCTIONS to be used later on in the script - -# wait until raspberry pi gets a local IP -function wait_for_local_network() { - gotLocalIP=0 - until [ ${gotLocalIP} -eq 1 ] - do - localip=$(ip addr | grep 'state UP' -A2 | egrep -v 'docker0|veth' | egrep -i '(*[eth|ens|enp|eno|wlan|wlp][0-9]$)' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') - if [ ${#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/g" ${infoFile} - sed -i "s/^message=.*/message='Connect the LAN/WAN'/g" ${infoFile} - else - # display user that wifi settings are not working - sed -i "s/^state=.*/state=noIP/g" ${infoFile} - sed -i "s/^message=.*/message='WIFI Settings not working'/g" ${infoFile} - fi - elif [ "${localip:0:4}" = "169." ]; then - # display user waiting for DHCP - sed -i "s/^state=.*/state=noDCHP/g" ${infoFile} - sed -i "s/^message=.*/message='Waiting for DHCP'/g" ${infoFile} - else - gotLocalIP=1 - fi - sleep 1 - done -} - +# Init boostrap log file echo "Writing logs to: ${logFile}" echo "" > $logFile echo "***********************************************" >> $logFile @@ -74,6 +44,10 @@ displayClass="lcd" displayType="" fundRecovery=0 +################################ +# INIT raspiblitz.info +################################ + # try to load old values if available (overwrites defaults) source ${infoFile} 2>/dev/null @@ -98,6 +72,119 @@ if [ "${setupStep}" != "100" ]; then fi sudo chmod 777 ${infoFile} +###################################### +# SECTION FOR POSSIBLE REBOOT ACTIONS +systemInitReboot=0 + +################################ +# FORCED SWITCH TO HDMI +# if a file called 'hdmi' gets +# placed onto the boot part of +# the sd card - switch to hdmi +################################ + +forceHDMIoutput=$(sudo ls /boot/hdmi* 2>/dev/null | grep -c hdmi) +if [ ${forceHDMIoutput} -eq 1 ]; then + # delete that file (to prevent loop) + sudo rm /boot/hdmi* + # switch to HDMI what will trigger reboot + echo "HDMI switch found ... activating HDMI display output & reboot" >> $logFile + sudo /home/admin/config.scripts/blitz.display.sh set-display hdmi >> $logFile + systemInitReboot=1 +else + echo "No HDMI switch found. " >> $logFile +fi + +################################ +# SSH SERVER CERTS RESET +# if a file called 'ssh.reset' gets +# placed onto the boot part of +# the sd card - delete old ssh data +################################ + +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 + # delete ssh certs + echo "SSHRESET switch found ... stopping SSH and deleting old certs" >> $logFile + sudo systemctl stop sshd >> $logFile + sudo rm /mnt/hdd/ssh/ssh_host* >> $logFile + sudo ssh-keygen -A >> $logFile + systemInitReboot=1 +else + echo "No SSHRESET switch found. " >> $logFile +fi + +################################ +# FS EXPAND +# if a file called 'ssh.reset' gets +# placed onto the boot part of +# the sd card - delete old ssh data +################################ +source <(sudo /home/admin/config.scripts/blitz.bootdrive.sh status) +if [ "${needsExpansion}" == "1" ] && [ "${fsexpanded}" == "0" ]; then + echo "FSEXPAND needed ... starting process" >> $logFile + sudo /home/admin/config.scripts/blitz.bootdrive.sh status >> $logFile + sudo /home/admin/config.scripts/blitz.bootdrive.sh fsexpand >> $logFile + systemInitReboot=1 +else + echo "No FS EXPAND needed. needsExpansion(${needsExpansion}) fsexpanded(${fsexpanded})" >> $logFile +fi + +################################ +# UASP FIX - first try +# if HDD is connected on start +################################ +source <(sudo /home/admin/config.scripts/blitz.datadrive.sh uasp-fix) +if [ "${neededReboot}" == "1" ]; then + echo "UASP FIX applied (1st-try) ... reboot needed." >> $logFile + systemInitReboot=1 +else + echo "No UASP FIX needed (1st-try)." >> $logFile +fi + +###################################### +# CHECK IF REBOOT IS NEEDED +# from actions above + +if [ "${systemInitReboot}" == "1" ]; then + sudo cp ${logFile} ${logFile}.systeminit + sudo sed -i "s/^state=.*/state=reboot/g" ${infoFile} + 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 + +################################ +# GENERATE UNIQUE SSH PUB KEYS +# on first boot up +################################ + +numberOfPubKeys=$(sudo ls /etc/ssh/ | grep -c 'ssh_host_') +if [ ${numberOfPubKeys} -eq 0 ]; then + echo "*** Generating new SSH PubKeys" >> $logFile + sudo dpkg-reconfigure openssh-server + echo "OK" >> $logFile +fi + +################################ +# CLEANING BOOT SYSTEM +################################ + # resetting start count files echo "SYSTEMD RESTART LOG: blockchain (bitcoind/litecoind)" > /home/admin/systemd.blockchain.log echo "SYSTEMD RESTART LOG: lightning (LND)" > /home/admin/systemd.lightning.log @@ -129,127 +216,15 @@ fi echo "" ############################### -# RAID data check (BRTFS) -############################### -# see https://github.com/rootzoll/raspiblitz/issues/360#issuecomment-467698260 +# WAIT FOR ALL SERVICES +# get the state of data drive source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) -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/ -fi ################################ -# BOOT LOGO +# WAIT LOOP UNTIL HDD CONNECTED ################################ -# 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 - -################################ -# GENERATE UNIQUE SSH PUB KEYS -# on first boot up -################################ - -numberOfPubKeys=$(sudo ls /etc/ssh/ | grep -c 'ssh_host_') -if [ ${numberOfPubKeys} -eq 0 ]; then - echo "*** Generating new SSH PubKeys" >> $logFile - sudo dpkg-reconfigure openssh-server - echo "OK" >> $logFile -fi - -################################ -# AFTER BOOT SCRIPT -# when a process needs to -# execute stuff after a reboot -# it should in file -# /home/admin/setup.sh -################################ - -# check for after boot script -afterSetupScriptExists=$(ls /home/admin/setup.sh 2>/dev/null | grep -c setup.sh) -if [ ${afterSetupScriptExists} -eq 1 ]; then - echo "*** SETUP SCRIPT DETECTED ***" - # LCD info - sudo sed -i "s/^state=.*/state=recovering/g" ${infoFile} - sudo sed -i "s/^message=.*/message='After Boot Setup (takes time)'/g" ${infoFile} - # echo out script to journal logs - sudo cat /home/admin/setup.sh - # execute the after boot script - echo "Logs in stored to: /home/admin/raspiblitz.log.recover" - echo "\n***** RUNNING AFTER BOOT SCRIPT ******** " >> ${logFile} - sudo /home/admin/setup.sh >> ${logFile} - # delete the after boot script - sudo rm /home/admin/setup.sh - # reboot again - echo "DONE wait 10 secs ... one more reboot needed ... " >> ${logFile} - sudo cp ${logFile} ${logFile}.afterboot - sudo shutdown -r now - sleep 100 - exit 0 -fi - -################################ -# FORCED SWITCH TO HDMI -# if a file called 'hdmi' gets -# placed onto the boot part of -# the sd card - switch to hdmi -################################ - -forceHDMIoutput=$(sudo ls /boot/hdmi* 2>/dev/null | grep -c hdmi) -if [ ${forceHDMIoutput} -eq 1 ]; then - # delete that file (to prevent loop) - sudo rm /boot/hdmi* - # switch to HDMI what will trigger reboot - echo "Yes HDMI switch found ... activating HDMI display output & reboot" >> $logFile - sudo /home/admin/config.scripts/blitz.display.sh set-display hdmi >> $logFile - sudo cp ${logFile} ${logFile}.hdmiswitch - sudo shutdown -r now - sleep 100 - exit 0 -else - echo "No HDMI switch found. " >> $logFile -fi - -################################ -# SSH SERVER CERTS RESET -# if a file called 'ssh.reset' gets -# placed onto the boot part of -# the sd card - delete old ssh data -################################ - -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 - # show info ssh reset - sed -i "s/^state=.*/state=sshreset/g" ${infoFile} - sed -i "s/^message=.*/message='resetting SSH & reboot'/g" ${infoFile} - # delete ssh certs - sudo systemctl stop sshd >> $logFile - sudo rm /mnt/hdd/ssh/ssh_host* >> $logFile - sudo ssh-keygen -A >> $logFile - echo "SSH SERVER CERTS RESET ... (reboot) " >> $logFile - sudo cp ${logFile} ${logFile}.sshcerts - sudo shutdown -r now - sleep 100 - exit 0 -fi - -################################ -# HDD CHECK & PRE-INIT -################################ - -# Without LCD message needs to be printed -# wait loop until HDD is connected -echo "" until [ ${isMounted} -eq 1 ] || [ ${#hddCandidate} -gt 0 ] do source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) @@ -264,40 +239,70 @@ do sleep 2 done +#################################### +# 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 +################################ +source <(sudo /home/admin/config.scripts/blitz.datadrive.sh uasp-fix) +if [ "${neededReboot}" == "1" ]; then + echo "UASP FIX applied (2st-try) ... reboot needed." >> $logFile + sudo cp ${logFile} ${logFile}.uasp + sudo sed -i "s/^state=.*/state=reboot/g" ${infoFile} + sudo shutdown -r now + sleep 100 + exit 0 +else + echo "No UASP FIX needed (2st-try)." >> $logFile +fi + +gotLocalIP=0 +until [ ${gotLocalIP} -eq 1 ] +do + source <(/home/admin/config.scripts/internet.sh status) + if [ ${dhcp} -eq 0 ]; then + # display user waiting for DHCP + sed -i "s/^state=.*/state=noDCHP/g" ${infoFile} + sed -i "s/^message=.*/message='Waiting for DHCP'/g" ${infoFile} + elif [ ${#localip} -eq 0 ]; then + if [ ${configWifiExists} -eq 0 ]; then + # display user to connect LAN + sed -i "s/^state=.*/state=noIP/g" ${infoFile} + sed -i "s/^message=.*/message='Connect the LAN/WAN'/g" ${infoFile} + else + # display user that wifi settings are not working + sed -i "s/^state=.*/state=noIP/g" ${infoFile} + sed -i "s/^message=.*/message='WIFI Settings not working'/g" ${infoFile} + 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} + else + gotLocalIP=1 + fi + sleep 1 +done + # write info for LCD sed -i "s/^state=.*/state=booting/g" ${infoFile} sed -i "s/^message=.*/message='please wait'/g" ${infoFile} +# TODO: REMOVE LATER AGAIN +echo "DEBUG EXIT BREAK" >> $logFile +exit 1 + # 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) if [ ${isMounted} -eq 0 ]; then @@ -337,15 +342,6 @@ if [ ${isMounted} -eq 0 ]; then echo "Refreshing links between directories/drives .." >> $logFile sudo /home/admin/config.scripts/blitz.datadrive.sh link - # check if there is a WIFI configuration to backup or restore - sudo /home/admin/config.scripts/internet.wifi.sh backup-restore - - # make sure at this point local network is connected - wait_for_local_network - - # make sure before update/recovery that a internet connection is working - wait_for_local_internet - # check if HDD contains already a configuration configExists=$(ls ${configFile} | grep -c '.conf') echo "HDD contains already a configuration: ${configExists}" >> $logFile @@ -411,9 +407,6 @@ if [ ${isMounted} -eq 0 ]; then fi # END - no automount - after this HDD is mounted -# make sure at this point local network is connected -wait_for_local_network - # 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 @@ -592,6 +585,17 @@ else echo "OK: Temp cleaned" >> $logFile fi +############################### +# RAID data check (BRTFS) +############################### +# see https://github.com/rootzoll/raspiblitz/issues/360#issuecomment-467698260 + +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/ +fi + ###################################### # PREPARE SUBSCRIPTIONS DATA DIRECTORY ###################################### From 80bf1bc06437f95a7055d7ab87515ec894ad6f0a Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 01:05:31 +0200 Subject: [PATCH 0118/1295] remove online checks from display loop --- home.admin/00infoLCD.sh | 59 +++++++++++++++-------------------------- 1 file changed, 21 insertions(+), 38 deletions(-) diff --git a/home.admin/00infoLCD.sh b/home.admin/00infoLCD.sh index d3a711f24..2dc2c1c97 100755 --- a/home.admin/00infoLCD.sh +++ b/home.admin/00infoLCD.sh @@ -82,29 +82,6 @@ while : # CHECK BASIC DATA ########################### - # get the local network IP to be displayed on the lCD - source <(sudo /home/admin/config.scripts/internet.sh status) - - # waiting for IP in general - if [ ${#localip} -eq 0 ]; then - l1="Waiting for Network ...\n" - l2="Not able to get local IP.\n" - l3="LAN cable connected? WIFI lost?\n" - dialog --backtitle "RaspiBlitz ${codeVersion}" --infobox "$l1$l2$l3" 5 40 - sleep 3 - continue - fi - - # waiting for Internet connection - if [ ${online} -eq 0 ]; then - l1="Waiting for Internet ...\n" - l2="Local Network seems OK but no Internet.\n" - l3="Is router still online?\n" - dialog --backtitle "RaspiBlitz ${codeVersion} ${localip}" --infobox "$l1$l2$l3" 5 45 - sleep 3 - continue - fi - # get config info if already available (with state value) source ${infoFile} configExists=$(ls ${configFile} 2>/dev/null | grep -c '.conf') @@ -136,6 +113,26 @@ while : continue fi + # waiting for DHCP in general + if [ "${state}" = "noIP" ]; then + l1="Waiting for Network ...\n" + l2="Not able to get local IP.\n" + l3="LAN cable connected? WIFI lost?\n" + dialog --backtitle "RaspiBlitz ${codeVersion} (${localip})" --infobox "$l1$l2$l3" 5 40 + sleep 1 + continue + fi + + # waiting for DHCP in general + if [ "${state}" = "noInternet" ]; then + l1="Waiting for Internet ...\n" + l2="Local Network seems OK but no Internet.\n" + l3="Is router still online?\n" + dialog --backtitle "RaspiBlitz ${codeVersion} (${localip})" --infobox "$l1$l2$l3" 5 40 + sleep 1 + continue + fi + # if no information available from files - set default if [ ${#setupStep} -eq 0 ]; then setupStep=0 @@ -144,22 +141,8 @@ while : # before setup even started if [ ${setupStep} -eq 0 ]; then - # check for internet connection - online=$(ping 1.0.0.1 -c 1 -W 2 | grep -c '1 received') - if [ ${online} -eq 0 ]; then - # re-test with other server - online=$(ping 8.8.8.8 -c 1 -W 2 | grep -c '1 received') - fi - if [ ${online} -eq 0 ]; then - # re-test with other server - online=$(ping 208.67.222.222 -c 1 -W 2 | grep -c '1 received') - fi - - if [ ${online} -eq 0 ]; then - message="no internet connection" - # when in presync - get more info on progress - elif [ "${state}" = "presync" ]; then + if [ "${state}" = "presync" ]; then blockchaininfo="$(sudo -u root bitcoin-cli --conf=/home/admin/assets/bitcoin.conf getblockchaininfo 2>/dev/null)" message="starting" if [ ${#blockchaininfo} -gt 0 ]; then From aefbdf42491fb6b8c1ffe063afee31fb80c2cfe1 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 01:05:50 +0200 Subject: [PATCH 0119/1295] add localip raspiblitz.info --- home.admin/_background.sh | 2 ++ home.admin/_bootstrap.sh | 19 ++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/home.admin/_background.sh b/home.admin/_background.sh index d07346459..02e798f71 100755 --- a/home.admin/_background.sh +++ b/home.admin/_background.sh @@ -1,5 +1,7 @@ #!/bin/bash +# TODO: check & update localip in raspiblitz info for display + # This script runs on after start in background # as a service and gets restarted on failure # it runs ALMOST every seconds diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index f69bf30fc..9a44c9ecc 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -54,6 +54,9 @@ source ${infoFile} 2>/dev/null # 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) + # resetting info file echo "Resetting the InfoFile: ${infoFile}" echo "state=starting" > $infoFile @@ -62,6 +65,8 @@ echo "baseimage=${baseimage}" >> $infoFile echo "cpu=${cpu}" >> $infoFile echo "network=${network}" >> $infoFile echo "chain=${chain}" >> $infoFile +echo "localip='${localip}'" >> $infoFile +echo "online='${online}'" >> $infoFile echo "fsexpanded=${fsexpanded}" >> $infoFile echo "displayClass=${displayClass}" >> $infoFile echo "displayType=${displayType}" >> $infoFile @@ -222,7 +227,7 @@ echo "" source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) ################################ -# WAIT LOOP UNTIL HDD CONNECTED +# WAIT LOOP: HDD CONNECTED ################################ until [ ${isMounted} -eq 1 ] || [ ${#hddCandidate} -gt 0 ] @@ -263,10 +268,22 @@ else echo "No UASP FIX needed (2st-try)." >> $logFile fi +################################### +# WAIT LOOP: LOCALNET / INTERNET +# after HDD > can contain WIFI conf +################################### + gotLocalIP=0 until [ ${gotLocalIP} -eq 1 ] do + + # get latest network info source <(/home/admin/config.scripts/internet.sh status) + + # update localip in raspiblitz.info + sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} + + # check state of network if [ ${dhcp} -eq 0 ]; then # display user waiting for DHCP sed -i "s/^state=.*/state=noDCHP/g" ${infoFile} From 70085229882c9e3edf32c6ef1c17e0b051eb7b9f Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 01:06:23 +0200 Subject: [PATCH 0120/1295] todo info --- home.admin/_background.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_background.sh b/home.admin/_background.sh index 02e798f71..32b46fc25 100755 --- a/home.admin/_background.sh +++ b/home.admin/_background.sh @@ -1,6 +1,6 @@ #!/bin/bash -# TODO: check & update localip in raspiblitz info for display +# TODO: check & update localip in raspiblitz info for display (only write on change) # This script runs on after start in background # as a service and gets restarted on failure From 6d3b0ac5c53850b15d32f56e912c7f9aac35ad1b Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 01:35:48 +0200 Subject: [PATCH 0121/1295] detect too small sd card --- home.admin/00infoLCD.sh | 38 ++++++++++++++++++++++++++++++-------- home.admin/_bootstrap.sh | 10 ++++++++++ 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/home.admin/00infoLCD.sh b/home.admin/00infoLCD.sh index 2dc2c1c97..51b938a7e 100755 --- a/home.admin/00infoLCD.sh +++ b/home.admin/00infoLCD.sh @@ -103,6 +103,16 @@ while : continue fi + # waiting for DHCP in general + if [ "${state}" = "noHDD" ]; then + l1="Waiting for HDD/SSD ...\n" + l2="Please connect a >500GB\n" + l3="HDD or SSD to the device.\n" + dialog --backtitle "RaspiBlitz ${codeVersion} (${localip})" --infobox "$l1$l2$l3" 5 40 + sleep 1 + continue + fi + # waiting for DHCP in general if [ "${state}" = "noDHCP" ]; then l1="Waiting for DHCP ...\n" @@ -133,6 +143,26 @@ while : continue fi + # waiting for Intrenet + if [ "${state}" = "noInternet" ]; then + l1="Waiting for Internet ...\n" + l2="Local Network seems OK but no Internet.\n" + l3="Is router still online?\n" + dialog --backtitle "RaspiBlitz ${codeVersion} (${localip})" --infobox "$l1$l2$l3" 5 40 + sleep 1 + continue + fi + + # waiting for DHCP in general + if [ "${state}" = "sdtoosmall" ]; then + l1="SD card is too small.\n" + l2="Please use 16GB or bigger.\n" + l3="Its safe to cut power now.\n" + dialog --backtitle "RaspiBlitz ${codeVersion} (${localip})" --infobox "$l1$l2$l3" 5 40 + sleep 1 + continue + fi + # if no information available from files - set default if [ ${#setupStep} -eq 0 ]; then setupStep=0 @@ -149,14 +179,6 @@ while : message="$(echo "${blockchaininfo}" | jq -r '.verificationprogress')" message=$(echo $message | awk '{printf( "%.2f%%", 100 * $1)}') fi - - # when old data - improve message - elif [ "${state}" = "sdtoosmall" ]; then - message="SDCARD TOO SMALL - min 16GB" - - # when no HDD - improve message - elif [ "${state}" = "noHDD" ]; then - message="Connect external HDD/SSD" fi # setup process has not started yet diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 9a44c9ecc..c15a2fd21 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -133,6 +133,16 @@ 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 +elif [ "${tooSmall}" == "1" ]; then + echo "!!! FAIL !!!!!!!!!!!!!!!!!!!!" >> $logFile + echo "SDCARD TOO SMALL 16G minimum" >> $logFile + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >> $logFile + sed -i "s/^state=.*/state=sdtoosmall/g" ${infoFile} + echo "System stopped. Please cut power." >> $logFile + sleep 6000 + sudo shutdown -r now + slepp 100 + exit 1 else echo "No FS EXPAND needed. needsExpansion(${needsExpansion}) fsexpanded(${fsexpanded})" >> $logFile fi From 84d176ede4f4a398a080d38e13ea81545809d7d1 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 01:44:03 +0200 Subject: [PATCH 0122/1295] optimize HDD wait loop --- home.admin/_bootstrap.sh | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index c15a2fd21..3dfde0bad 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -240,19 +240,27 @@ source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) # WAIT LOOP: HDD CONNECTED ################################ +echo "Waiting for HDD/SSD ..." >> $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 - message="Connect the Hard Drive" - echo $message + echo "isMounted: $isMounted" + echo "hddCandidate: $hddCandidate" if [ ${isMounted} -eq 0 ] && [ ${#hddCandidate} -eq 0 ]; then sed -i "s/^state=.*/state=noHDD/g" ${infoFile} - sed -i "s/^message=.*/message='$message'/g" ${infoFile} fi + + # get latest network info & update raspiblitz.info + source <(/home/admin/config.scripts/internet.sh status) + sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} + + # wait for next check sleep 2 + done +echo "HDD/SSD connected: ${$hddCandidate}" >> $logFile #################################### # WIFI RESTORE from HDD works with @@ -287,10 +295,8 @@ gotLocalIP=0 until [ ${gotLocalIP} -eq 1 ] do - # get latest network info + # get latest network info & update raspiblitz.info source <(/home/admin/config.scripts/internet.sh status) - - # update localip in raspiblitz.info sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} # check state of network From 6adff7c8135ddce58fb3dba6c79b73be3a1bb06c Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 01:51:22 +0200 Subject: [PATCH 0123/1295] display no network --- home.admin/00infoLCD.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/home.admin/00infoLCD.sh b/home.admin/00infoLCD.sh index 51b938a7e..acee39fda 100755 --- a/home.admin/00infoLCD.sh +++ b/home.admin/00infoLCD.sh @@ -103,6 +103,9 @@ while : continue fi + # make sure no local ip is readable + if [ "${localip}" == "" ]; then localip="no-network"; fi + # waiting for DHCP in general if [ "${state}" = "noHDD" ]; then l1="Waiting for HDD/SSD ...\n" From 6f7577541f2774ac75a2c34b223c4bca2ed3d300 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 14:18:55 +0200 Subject: [PATCH 0124/1295] debug datadrive --- home.admin/config.scripts/blitz.datadrive.sh | 29 +++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index 239944ce9..396724cfe 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -79,10 +79,10 @@ if [ "$1" = "status" ]; then echo "# SETUP INFO" # find the HDD (biggest single partition) + # will then be used to offer formatting and permanent mounting hdd="" sizeDataPartition=0 OSPartition=$(sudo df /usr | grep dev | cut -d " " -f 1 | sed "s/\/dev\///g") - lsblk -o NAME,SIZE -b | grep -P "[s|v]d[a-z][0-9]?" > .lsblk.tmp while read line; do @@ -141,14 +141,17 @@ if [ "$1" = "status" ]; then done < .lsblk.tmp rm -f .lsblk.tmp 1>/dev/null 2>/dev/null + # display possible warnings from hdd partition detection if [ "${hddPartitionCandidate}" != "" ] && [ ${#hddDataPartition} -lt 4 ]; then echo "# WARNING: found invalid partition (${hddDataPartition}) - redacting" hddDataPartition="" fi + # try to detect if its an SSD isSSD=$(sudo cat /sys/block/${hdd}/queue/rotational 2>/dev/null | grep -c 0) echo "isSSD=${isSSD}" + # display results from hdd & partition detection echo "hddCandidate='${hdd}'" hddBytes=0 hddGigaBytes=0 @@ -158,9 +161,9 @@ if [ "$1" = "status" ]; then fi echo "hddBytes=${hddBytes}" echo "hddGigaBytes=${hddGigaBytes}" - echo "hddPartitionCandidate='${hddDataPartition}'" + # if positive deliver more data if [ ${#hddDataPartition} -gt 0 ]; then # check partition size in bytes and GBs @@ -168,13 +171,6 @@ if [ "$1" = "status" ]; then hddDataPartitionGigaBytes=$(echo "scale=0; ${sizeDataPartition}/1024/1024/1024" | bc -l) echo "hddPartitionGigaBytes=${hddDataPartitionGigaBytes}" - # check if single drive with that size - hddCount=0 - if [ ${#hddDataPartition} -gt 0 ]; then - hddCount=1 - fi - echo "hddCount=${hddCount}" - # check format of devices partition hddFormat=$(lsblk -o FSTYPE,NAME,TYPE | grep part | grep "${hddDataPartition}" | cut -d " " -f 1) echo "hddFormat='${hddFormat}'" @@ -182,7 +178,7 @@ if [ "$1" = "status" ]; then # if 'ext4' or 'btrfs' then temp mount and investigate content if [ "${hddFormat}" = "ext4" ] || [ "${hddFormat}" = "btrfs" ]; then - # BTRFS is working with subvolumnes for snapshots / ext4 has no SubVolumes + # BTRFS is working with subvolumes for snapshots / ext4 has no SubVolumes subVolumeDir="" if [ "${hddFormat}" = "btrfs" ]; then subVolumeDir="/WORKINGDIR" @@ -228,6 +224,12 @@ if [ "$1" = "status" ]; then echo "hddError='storage mount failed'" else + ############################### + # Pre-Setup Invetigation of HDD + + # DEBUG remove later + df + # check for blockchain data on storage hddBlocksBitcoin=$(sudo ls /mnt/storage${subVolumeDir}/bitcoin/blocks/blk00000.dat 2>/dev/null | grep -c '.dat') echo "hddBlocksBitcoin=${hddBlocksBitcoin}" @@ -252,7 +254,7 @@ if [ "$1" = "status" ]; then echo "hddDataFreeKB=${hdd_data_free1Kblocks}" # check if its another fullnode implementation data disk - hddGotMigrationData="none" + hddGotMigrationData="''" if [ "${hddFormat}" = "ext4" ]; then # check for umbrel isUmbrelHDD=$(sudo ls /mnt/storage/umbrel/info.json 2>/dev/null | grep -c '.json') @@ -269,8 +271,8 @@ if [ "$1" = "status" ]; then echo "hddGotMigrationData='${hddGotMigrationData}'" # check if there is a wifi configuration as backup - wifiBackupConfigExists=$(ls /mnt/hdd/app-data/wpa_supplicant.conf 2>/dev/null | grep -c "wpa_supplicant.conf") - if [ ${wifiBackupConfigExists} -eq 1 ]; then + hddGotWifiConf=$(ls /mnt/hdd/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/app-data/wpa_supplicant.conf /var/cache/raspiblitz/wpa_supplicant.conf echo "wifiBackupConfigCopy='/var/cache/raspiblitz/wpa_supplicant.conf'" @@ -354,6 +356,7 @@ if [ "$1" = "status" ]; then fi # HDD Adpater UASP support --> https://www.pragmaticlinux.com/2021/03/fix-for-getting-your-ssd-working-via-usb-3-on-your-raspberry-pi/ + # in both cases (if mounted or not - using the hdd selection from both cases) if [ ${#hdd} -gt 0 ]; then # determine USB HDD adapter model ID From cd23d59c5b823d0662e9247cebd07edca6529ded Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 14:28:42 +0200 Subject: [PATCH 0125/1295] added debug --- home.admin/config.scripts/blitz.datadrive.sh | 23 +++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index 396724cfe..14c56c8b8 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -202,11 +202,18 @@ if [ "$1" = "status" ]; then echo "hddError='data mount failed'" else - # 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") - echo "hddRaspiData=${hddRaspiData}" - sudo umount /mnt/hdd + ##################################### + # Pre-Setup Invetigation of DATA-PART + + # DEBUG remove later + df + + # 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") + echo "hddRaspiData=${hddRaspiData}" + + # sudo umount /mnt/hdd fi # temp storage data drive @@ -224,8 +231,8 @@ if [ "$1" = "status" ]; then echo "hddError='storage mount failed'" else - ############################### - # Pre-Setup Invetigation of HDD + ######################################## + # Pre-Setup Invetigation of STORAGE-PART # DEBUG remove later df @@ -279,7 +286,7 @@ if [ "$1" = "status" ]; then fi # unmount - sudo umount /mnt/storage + # sudo umount /mnt/storage fi else # if not ext4 or btrfs - there is no usable data From 5e3691a251b4af3bd7fd8dfb12e9a842c469b9ae Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 14:37:23 +0200 Subject: [PATCH 0126/1295] remove debug lines --- home.admin/config.scripts/blitz.datadrive.sh | 35 ++++++++++---------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index 14c56c8b8..34428e84a 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -205,15 +205,27 @@ if [ "$1" = "status" ]; then ##################################### # Pre-Setup Invetigation of DATA-PART - # DEBUG remove later - df - # 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") echo "hddRaspiData=${hddRaspiData}" + hddRaspiVersion="" + if [ ${hddRaspiData} -eq 1 ]; then + source /mnt/hdd${subVolumeDir}/raspiblitz.conf + hddRaspiVersion="${raspiBlitzVersion}" + fi + echo "hddRaspiVersion=${hddRaspiVersion}" - # sudo umount /mnt/hdd + # 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 + + # comment this line out if case to study the contect of the data section + sudo umount /mnt/hdd fi # temp storage data drive @@ -234,9 +246,6 @@ if [ "$1" = "status" ]; then ######################################## # Pre-Setup Invetigation of STORAGE-PART - # DEBUG remove later - df - # check for blockchain data on storage hddBlocksBitcoin=$(sudo ls /mnt/storage${subVolumeDir}/bitcoin/blocks/blk00000.dat 2>/dev/null | grep -c '.dat') echo "hddBlocksBitcoin=${hddBlocksBitcoin}" @@ -277,16 +286,8 @@ if [ "$1" = "status" ]; then fi echo "hddGotMigrationData='${hddGotMigrationData}'" - # check if there is a wifi configuration as backup - hddGotWifiConf=$(ls /mnt/hdd/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/app-data/wpa_supplicant.conf /var/cache/raspiblitz/wpa_supplicant.conf - echo "wifiBackupConfigCopy='/var/cache/raspiblitz/wpa_supplicant.conf'" - fi - - # unmount - # sudo umount /mnt/storage + # comment this line out if case to study the contect of the storage section + sudo umount /mnt/storage fi else # if not ext4 or btrfs - there is no usable data From d1a4a37fb33d31bc439d42133572f941d087f471 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 14:38:16 +0200 Subject: [PATCH 0127/1295] quote version string --- home.admin/config.scripts/blitz.datadrive.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index 34428e84a..e67fe3c98 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -214,7 +214,7 @@ if [ "$1" = "status" ]; then source /mnt/hdd${subVolumeDir}/raspiblitz.conf hddRaspiVersion="${raspiBlitzVersion}" fi - echo "hddRaspiVersion=${hddRaspiVersion}" + echo "hddRaspiVersion='${hddRaspiVersion}'" # 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") From 815e0972a1e5e27cd5bc133b0da5149d79bc52fb Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 14:39:03 +0200 Subject: [PATCH 0128/1295] fix migration data default --- home.admin/config.scripts/blitz.datadrive.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index e67fe3c98..43fa958e2 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -270,7 +270,7 @@ if [ "$1" = "status" ]; then echo "hddDataFreeKB=${hdd_data_free1Kblocks}" # check if its another fullnode implementation data disk - hddGotMigrationData="''" + hddGotMigrationData="" if [ "${hddFormat}" = "ext4" ]; then # check for umbrel isUmbrelHDD=$(sudo ls /mnt/storage/umbrel/info.json 2>/dev/null | grep -c '.json') From 351a7020d41076061f758073435f099cb54bc742 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 15:24:38 +0200 Subject: [PATCH 0129/1295] user setup wait loop --- home.admin/00infoLCD.sh | 6 +++- home.admin/_bootstrap.sh | 62 ++++++++++++++++++++++++++-------------- 2 files changed, 46 insertions(+), 22 deletions(-) diff --git a/home.admin/00infoLCD.sh b/home.admin/00infoLCD.sh index acee39fda..68028b435 100755 --- a/home.admin/00infoLCD.sh +++ b/home.admin/00infoLCD.sh @@ -189,10 +189,14 @@ while : l2="ssh admin@${localip}\n" l3="Use password: raspiblitz\n" + if [ "${state}" = "errorHDD" ]; then + l1="HDD Error: ${message}\n" + fi + if [ "${state}" = "recovering" ]; then l1="Recovering please wait ..\n" fi - + boxwidth=$((${#localip} + 24)) sleep 3 dialog --backtitle "RaspiBlitz ${codeVersion} (${state}) - ${message}" --infobox "$l1$l2$l3" 5 ${boxwidth} diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 3dfde0bad..b75d9f59a 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -248,11 +248,17 @@ do source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) echo "isMounted: $isMounted" echo "hddCandidate: $hddCandidate" - if [ ${isMounted} -eq 0 ] && [ ${#hddCandidate} -eq 0 ]; then + + # in case of HDD analyse ERROR + if [ ${#hddError} -gt 0 ]; 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} -eq 0 ] && [ ${#hddCandidate} -eq 0 ]; then sed -i "s/^state=.*/state=noHDD/g" ${infoFile} fi - # get latest network info & update raspiblitz.info + # get latest network info & update raspiblitz.info (in case network changes) source <(/home/admin/config.scripts/internet.sh status) sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} @@ -328,34 +334,48 @@ done sed -i "s/^state=.*/state=booting/g" ${infoFile} sed -i "s/^message=.*/message='please wait'/g" ${infoFile} -# TODO: REMOVE LATER AGAIN -echo "DEBUG EXIT BREAK" >> $logFile -exit 1 - # get fresh info about data drive to continue source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) -echo "isMounted: $isMounted" >> $logFile # check if the HDD is auto-mounted ( auto-mounted = setup-done) +echo "isMounted: $isMounted" >> $logFile if [ ${isMounted} -eq 0 ]; then - echo "HDD is there but not AutoMounted yet - checking Setup" >> $logFile + echo "HDD is there but not AutoMounted yet - Waiting for user Setup/Update" >> $logFile - # when format is not EXT4 or BTRFS - stop bootstrap and await user setup - if [ "${hddFormat}" != "ext4" ] && [ "${hddFormat}" != "btrfs" ]; then - echo "HDD is NOT formatted in ${hddFormat} .. awaiting user setup." >> $logFile - sed -i "s/^state=.*/state=waitsetup/g" ${infoFile} - sed -i "s/^message=.*/message='HDD needs SetUp (1)'/g" ${infoFile} - exit 0 + # determine correct info message + infoMessage="Please Login for Setup" + if [ "${hddRaspiData}" == "1" ]; then + infoMessage="Please Login for Update" + elif [ "${hddGotMigrationData}" != "" ]; then + infoMessage="Please Login for Migration" + elif [ "${hddBlocksBitcoin}" == "1" ] || [ "${hddBlocksLitecoin}" == "1" ]; then + infoMessage="Login for presynced Setup" fi - # when error on analysing HDD - stop bootstrap and await user setup - if [ ${#hddError} -gt 0 ]; then - echo "FAIL - error on HDD analysis: ${hddError}" >> $logFile - sed -i "s/^state=.*/state=waitsetup/g" ${infoFile} - sed -i "s/^message=.*/message='${hddError}'/g" ${infoFile} - exit 0 - fi + # signal "WAIT LOOP: SETUP" to outside + echo "Displaying Info Message: ${infoMessage}" >> $logFile + sed -i "s/^state=.*/state=waitsetup/g" ${infoFile} + sed -i "s/^message=.*/message='${infoMessage}'/g" ${infoFile} + + ############################################# + # WAIT LOOP: USER SETUP/UPDATE/MIGRATION + # until SSH or WEBUI setup data is available + ############################################# + + gotUserSetupInfo=0 + until [ ${gotUserSetupInfo} -eq 1 ] + do + + # TODO: DETECT WHEN USER SETUP IS DONE + + # get latest network info & update raspiblitz.info (in case network changes) + source <(/home/admin/config.scripts/internet.sh status) + sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} + sleep 1 + +done + # temp mount the HDD echo "Temp mounting data drive ($hddCandidate)" >> $logFile From 99ab1afb24e7e6252f1bc73d2aec9abb5d5636b4 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 16:40:23 +0200 Subject: [PATCH 0130/1295] introduce setupPhase --- home.admin/_bootstrap.sh | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index b75d9f59a..1af106b46 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -38,6 +38,7 @@ echo "***********************************************" >> $logFile network="" chain="" setupStep=0 +setupPhase='boot' fsexpanded=0 # see https://github.com/rootzoll/raspiblitz/issues/1265#issuecomment-813369284 displayClass="lcd" @@ -71,6 +72,7 @@ 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 @@ -345,18 +347,23 @@ if [ ${isMounted} -eq 0 ]; then # determine correct info message infoMessage="Please Login for Setup" + setupPhase="setup" if [ "${hddRaspiData}" == "1" ]; then infoMessage="Please Login for Update" + setupPhase="update" elif [ "${hddGotMigrationData}" != "" ]; then infoMessage="Please Login for Migration" + setupPhase="migration" elif [ "${hddBlocksBitcoin}" == "1" ] || [ "${hddBlocksLitecoin}" == "1" ]; then infoMessage="Login for presynced Setup" + setupPhase="presync" fi - # signal "WAIT LOOP: SETUP" to outside + # 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} ############################################# # WAIT LOOP: USER SETUP/UPDATE/MIGRATION @@ -460,6 +467,8 @@ done fi # END - no automount - after this HDD is mounted +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 @@ -668,5 +677,7 @@ sed -i "s/^message=.*/message='Node Running'/g" ${infoFile} # make sure that bitcoin service is active sudo systemctl enable ${network}d +sed -i "s/^setupPhase=.*/setupPhase='final'/g" ${infoFile} + echo "DONE BOOTSTRAP" >> $logFile exit 0 From 21e5c1e4dc305b2ff78d80d6b77edb43d0252980 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 18:56:39 +0200 Subject: [PATCH 0131/1295] test exit code of sub menus --- home.admin/00mainMenu.sh | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index 674a35664..0c64023ea 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -310,10 +310,7 @@ case $CHOICE in ;; REPAIR) /home/admin/98repairMenu.sh - if [ $? -eq 99 ]; then - exit 1 - fi - ;; + # exit code 1 -> main menu to break loop and also exit with PASSWORD) sudo /home/admin/config.scripts/blitz.setpassword.sh ;; @@ -360,5 +357,6 @@ case $CHOICE in exit 0 esac -# go into loop - start script from beginning to load config/sate fresh -/home/admin/00mainMenu.sh +echo "exit code of last submenu: $?" + +# exit with not 0 to signal that main menu wants to be looped From 4089f470f9fd214cd9371469f917ee1df323c1b1 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 18:57:29 +0200 Subject: [PATCH 0132/1295] fix mein menu --- home.admin/00mainMenu.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index 0c64023ea..2b8f777ec 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -310,7 +310,7 @@ case $CHOICE in ;; REPAIR) /home/admin/98repairMenu.sh - # exit code 1 -> main menu to break loop and also exit with + ;; PASSWORD) sudo /home/admin/config.scripts/blitz.setpassword.sh ;; From 9d72e3b91a4c866174f905f19a67dcf979dc3584 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 May 2021 19:01:56 +0200 Subject: [PATCH 0133/1295] test exit code submenu --- home.admin/99lightningMenu.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/99lightningMenu.sh b/home.admin/99lightningMenu.sh index 63ea9d920..73e72cadf 100644 --- a/home.admin/99lightningMenu.sh +++ b/home.admin/99lightningMenu.sh @@ -107,6 +107,7 @@ case $CHOICE in sudo /home/admin/XXshutdown.sh reboot exit 0 fi + exit 1 ;; CLOSEALL) /home/admin/BBcloseAllChannels.sh From d7f19721e55a48c1a611cac33985f98b3a82ec84 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:00:36 +0200 Subject: [PATCH 0134/1295] remove test --- home.admin/99lightningMenu.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/home.admin/99lightningMenu.sh b/home.admin/99lightningMenu.sh index 73e72cadf..63ea9d920 100644 --- a/home.admin/99lightningMenu.sh +++ b/home.admin/99lightningMenu.sh @@ -107,7 +107,6 @@ case $CHOICE in sudo /home/admin/XXshutdown.sh reboot exit 0 fi - exit 1 ;; CLOSEALL) /home/admin/BBcloseAllChannels.sh From f613ed1bb6a278fcab11c1b730442ff96c58c041 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:00:56 +0200 Subject: [PATCH 0135/1295] placeholders --- home.admin/setup.scripts/afterProvision.sh | 51 +++++++++++++++++++ ...{00provisionInfo.sh => beforeProvision.sh} | 10 ++-- 2 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 home.admin/setup.scripts/afterProvision.sh rename home.admin/setup.scripts/{00provisionInfo.sh => beforeProvision.sh} (59%) diff --git a/home.admin/setup.scripts/afterProvision.sh b/home.admin/setup.scripts/afterProvision.sh new file mode 100644 index 000000000..c89e9e7ca --- /dev/null +++ b/home.admin/setup.scripts/afterProvision.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +# this is more a todo list of things that got removed from oter parts of the old setup/login and need to find a new place/home + + +############# SCB activation + + # check if there is a channel.backup to activate + gotSCB=$(ls /home/admin/channel.backup 2>/dev/null | grep -c 'channel.backup') + if [ ${gotSCB} -eq 1 ]; then + + echo "*** channel.backup Recovery ***" + lncli --chain=${network} restorechanbackup --multi_file=/home/admin/channel.backup 2>/home/admin/.error.tmp + error=`cat /home/admin/.error.tmp` + rm /home/admin/.error.tmp 2>/dev/null + + if [ ${#error} -gt 0 ]; then + + # output error message + echo "" + echo "!!! FAIL !!! SOMETHING WENT WRONG:" + echo "${error}" + + # check if its possible to give background info on the error + notMachtingSeed=$(echo $error | grep -c 'unable to unpack chan backup') + if [ ${notMachtingSeed} -gt 0 ]; then + echo "--> ERROR BACKGROUND:" + echo "The WORD SEED is not matching the channel.backup file." + echo "Either there was an error in the word seed list or" + echo "or the channel.backup file is from another RaspiBlitz." + echo + fi + + # basic info on error + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo + echo "You can try after full setup to restore channel.backup file again with:" + echo "lncli --chain=${network} restorechanbackup --multi_file=/home/admin/channel.backup" + echo + echo "Press ENTER to continue for now ..." + read key + else + mv /home/admin/channel.backup /home/admin/channel.backup.done + dialog --title " OK channel.backup IMPORT " --msgbox " +LND accepted the channel.backup file you uploaded. +It will now take around a hour until you can see, +if LND was able to recover funds from your channels. + " 9 56 + fi + + fi \ No newline at end of file diff --git a/home.admin/setup.scripts/00provisionInfo.sh b/home.admin/setup.scripts/beforeProvision.sh similarity index 59% rename from home.admin/setup.scripts/00provisionInfo.sh rename to home.admin/setup.scripts/beforeProvision.sh index 8b1bcab7a..70eb24a92 100755 --- a/home.admin/setup.scripts/00provisionInfo.sh +++ b/home.admin/setup.scripts/beforeProvision.sh @@ -1,10 +1,10 @@ #!/bin/bash -################### +# TODO: if DNS is not working --> ask in system-loop +# TODO: get size of sd card & free space on sd card + +################## # CHECK IF DNS NEEDS SETTING DURING SETUP # https://github.com/rootzoll/raspiblitz/issues/787 ################### -sudo /home/admin/config.scripts/internet.dns.sh test - -# TODO: if DNS is not working --> ask in system-loop -# TODO: get size of sd card & free space on sd card \ No newline at end of file +sudo /home/admin/config.scripts/internet.dns.sh test \ No newline at end of file From 72f596fa1210ce933c177e49c857d505b1411507 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:01:11 +0200 Subject: [PATCH 0136/1295] move garant detection to statusscan --- home.admin/00mainMenu.sh | 10 +- home.admin/00raspiblitz.sh | 195 +++++++++++------- home.admin/_bootstrap.sh | 4 +- home.admin/config.scripts/blitz.statusscan.sh | 3 + 4 files changed, 138 insertions(+), 74 deletions(-) diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index 2b8f777ec..8648d0e50 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -357,6 +357,10 @@ case $CHOICE in exit 0 esac -echo "exit code of last submenu: $?" - -# exit with not 0 to signal that main menu wants to be looped +# forward exit code of submenu to outside loop +# 0 = continue loop / everything else = break loop and exit to terminal +exitCodeOfSubmenu=$? +if [ "${exitCodeOfSubmenu}" != "0" ]; then + echo "# submenu signaled exit code '${exitCodeOfSubmenu}' --> forward to outside loop" +fi +exit ${exitCodeOfSubmenu} \ No newline at end of file diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 07820d19d..845972f31 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -1,7 +1,7 @@ #!/bin/bash echo "For debug logs CTRL+C and: tail -n1000 -f raspiblitz.log" echo "or call the command 'debug' to see bigger report." -echo "Starting the main menu ..." +echo "Starting SSH user interface ..." # CONFIGFILE - configuration of RaspiBlitz configFile="/mnt/hdd/raspiblitz.conf" @@ -9,36 +9,136 @@ configFile="/mnt/hdd/raspiblitz.conf" # INFOFILE - state data from bootstrap infoFile="/home/admin/raspiblitz.info" -# use blitz.datadrive.sh to analyse HDD situation -source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) -if [ "${error}" != "" ]; then - echo "# FAIL blitz.datadrive.sh status --> ${error}" - echo "# Please report issue to the raspiblitz github." +# 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 -# check if HDD is connected -if [ "${isMounted}" == "0" ] && [ ${#hddCandidate} -eq 0 ]; then - echo "***********************************************************" - echo "WARNING: NO HDD FOUND -> Shutdown, connect HDD and restart." - echo "***********************************************************" - vagrant=$(df | grep -c "/vagrant") - if [ ${vagrant} -gt 0 ]; then - echo "To connect a HDD data disk to your VagrantVM:" - echo "- shutdown VM with command: off" - echo "- open your VirtualBox GUI and select RaspiBlitzVM" - echo "- change the 'mass storage' settings" - echo "- add a second 'Primary Slave' drive to the already existing controller" - echo "- close VirtualBox GUI and run: vagrant up & vagrant ssh" - echo "***********************************************************" - echo "You can either create a new dynamic VDI with around 900GB or download" - echo "a VDI with a presynced blockchain to speed up setup. If you dont have 900GB" - echo "space on your laptop you can store the VDI file on an external drive." - echo "***********************************************************" - fi - exit +# get system state information raspiblitz.info +source ${infoFile} + +# check that basic system phase/state information is available +if [ "${setupPhase}" == "" ] || [ "${state}" == "" ]; then + echo "setupPhase(${setupPhase}) state(${state})" + echo "FAIL: ${infoFile} does not contain important state information." + echo "Check logs & bootstrap.service for errors and report to devs." + exit 1 fi +##################################### +# REDIRECT: Main Menu +##################################### + +# if setup is done & state is ready .. jump to main menu +if [ "${setupPhase}" == "done" ] || [ "${state}" == "ready" ]; then + # push user to main menu + /home/admin/00mainMenu.sh + exit 0 +fi + +##################################### +# SSH MENU LOOP +##################################### + +# 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 + +exitMenuLoop=0 +while [ ${exitMenuLoop} -eq 0 ] +do + + ##################################### + # MAIN SSH MENU + ##################################### + + # if setup is done & state is ready .. jump to main menu + if [ "${setupPhase}" == "done" ] || [ "${state}" == "ready" ]; then + # push user to main menu + /home/admin/00mainMenu.sh + # use the exit code from main menu als signal if menu loop should exited + # 0 = continue loop / everything else = break loop and exit to terminal + exitMenuLoop=$? + if [ "${exitMenuLoop}" != "0" ] break + fi + + ##################################### + # Access fresh system info + + # refresh system state information + source ${infoFile} + + # gather fresh status scan and store results in memory + sudo /home/admin/config.scripts/blitz.statusscan.sh > /var/cache/raspiblitz/raspiblitz.status + source /var/cache/raspiblitz/raspiblitz.status + + ##################################### + # DURING SETUP: Handle System States + ##################################### + + if [ "${setupPhase}" != "done" ]; then + + echo "# DURING SETUP: Handle System States " + + # check if HDD is connected + if [ "${isMounted}" == "0" ] && [ ${#hddCandidate} -eq 0 ]; then + echo "***********************************************************" + echo "WARNING: NO HDD FOUND -> Shutdown, connect HDD and restart." + echo "***********************************************************" + if [ ${vagrant} -gt 0 ]; then + echo "To connect a HDD data disk to your VagrantVM:" + echo "- shutdown VM with command: off" + echo "- open your VirtualBox GUI and select RaspiBlitzVM" + echo "- change the 'mass storage' settings" + echo "- add a second 'Primary Slave' drive to the already existing controller" + echo "- close VirtualBox GUI and run: vagrant up & vagrant ssh" + echo "***********************************************************" + echo "You can either create a new dynamic VDI with around 900GB or download" + echo "a VDI with a presynced blockchain to speed up setup. If you dont have 900GB" + echo "space on your laptop you can store the VDI file on an external drive." + echo "***********************************************************" + fi + fi + + fi + + ##################################### + # ALWAYS: Handle System States + ##################################### + + ############################ + # LND Wallet Unlock + + echo "walletLocked(${walletLocked})" + if [ "${walletLocked}" == "1" ]; then + /home/admin/config.scripts/lnd.unlock.sh + fi + + ##################################### + # AFTER SETUP: Handle System States + ##################################### + + if [ "${setupPhase}" == "done" ]; then + + echo "# AFTER SETUP: Handle System States " + + fi + + # debug wait + echo "uptime(${uptime})" + sleep 3 + +done +echo "# mainmenu signaled exit code '${exitMenuLoop}' --> exit to terminal" + + # check if HDD is from another fullnode OS and offer migration if [ "${hddGotMigrationData}" != "" ] && [ "${hddGotMigrationData}" != "none" ]; then nodenameUpperCase=$(echo "${hddGotMigrationData}" | tr "[a-z]" "[A-Z]") @@ -354,50 +454,7 @@ else # wait all is synced and ready waitUntilChainNetworkIsReady - # check if there is a channel.backup to activate - gotSCB=$(ls /home/admin/channel.backup 2>/dev/null | grep -c 'channel.backup') - if [ ${gotSCB} -eq 1 ]; then - echo "*** channel.backup Recovery ***" - lncli --chain=${network} restorechanbackup --multi_file=/home/admin/channel.backup 2>/home/admin/.error.tmp - error=`cat /home/admin/.error.tmp` - rm /home/admin/.error.tmp 2>/dev/null - - if [ ${#error} -gt 0 ]; then - - # output error message - echo "" - echo "!!! FAIL !!! SOMETHING WENT WRONG:" - echo "${error}" - - # check if its possible to give background info on the error - notMachtingSeed=$(echo $error | grep -c 'unable to unpack chan backup') - if [ ${notMachtingSeed} -gt 0 ]; then - echo "--> ERROR BACKGROUND:" - echo "The WORD SEED is not matching the channel.backup file." - echo "Either there was an error in the word seed list or" - echo "or the channel.backup file is from another RaspiBlitz." - echo - fi - - # basic info on error - echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - echo - echo "You can try after full setup to restore channel.backup file again with:" - echo "lncli --chain=${network} restorechanbackup --multi_file=/home/admin/channel.backup" - echo - echo "Press ENTER to continue for now ..." - read key - else - mv /home/admin/channel.backup /home/admin/channel.backup.done - dialog --title " OK channel.backup IMPORT " --msgbox " -LND accepted the channel.backup file you uploaded. -It will now take around a hour until you can see, -if LND was able to recover funds from your channels. - " 9 56 - fi - - fi # check if DNS is working (if not it will trigger dialog) sudo /home/admin/config.scripts/internet.dns.sh test diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 1af106b46..d608ca111 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -525,7 +525,7 @@ if [ ${configExists} -eq 1 ]; then echo "# (loop) waiting for internet ... " >> $logFile sed -i "s/^state=.*/state=nointernet/g" ${infoFile} sed -i "s/^message=.*/message='Waiting for Internet'/g" ${infoFile} - sleep 4 + sleep 3 else echo "# OK internet detected ... continue" >> $logFile waitForPublicIP=0 @@ -677,7 +677,7 @@ sed -i "s/^message=.*/message='Node Running'/g" ${infoFile} # make sure that bitcoin service is active sudo systemctl enable ${network}d -sed -i "s/^setupPhase=.*/setupPhase='final'/g" ${infoFile} +sed -i "s/^setupPhase=.*/setupPhase='done'/g" ${infoFile} echo "DONE BOOTSTRAP" >> $logFile exit 0 diff --git a/home.admin/config.scripts/blitz.statusscan.sh b/home.admin/config.scripts/blitz.statusscan.sh index bb1534c7d..ff6b5c927 100755 --- a/home.admin/config.scripts/blitz.statusscan.sh +++ b/home.admin/config.scripts/blitz.statusscan.sh @@ -265,6 +265,9 @@ else 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 From a0f5ce823bf99392c090d2bf0d558ffb6f9afb3f Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:06:55 +0200 Subject: [PATCH 0137/1295] fix syntax --- home.admin/00raspiblitz.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 845972f31..203f44c21 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -66,7 +66,7 @@ do # use the exit code from main menu als signal if menu loop should exited # 0 = continue loop / everything else = break loop and exit to terminal exitMenuLoop=$? - if [ "${exitMenuLoop}" != "0" ] break + if [ "${exitMenuLoop}" != "0" ]; then break; fi fi ##################################### From 6fcbf7d07444f750116469dad7015ca555965f81 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:10:41 +0200 Subject: [PATCH 0138/1295] setup menu on raspiblitz loop --- home.admin/00raspiblitz.sh | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 203f44c21..58ba6236e 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -60,10 +60,24 @@ do ##################################### # if setup is done & state is ready .. jump to main menu - if [ "${setupPhase}" == "done" ] || [ "${state}" == "ready" ]; then + if [ "${setupPhase}" == "done" ] && [ "${state}" == "ready" ]; then # push user to main menu /home/admin/00mainMenu.sh - # use the exit code from main menu als signal if menu loop should exited + # use the exit code from main menu as signal if menu loop should exited + # 0 = continue loop / everything else = break loop and exit to terminal + exitMenuLoop=$? + if [ "${exitMenuLoop}" != "0" ]; then break; fi + fi + + ##################################### + # SETUP SSH MENU + ##################################### + + # if setup is done & state is ready .. jump to main menu + if [ "${setupPhase}" != "done" ] && [ "${state}" == "waitsetup" ]; then + # push user to main menu + /home/admin/setup.scripts/setupDialogControl.sh + # use the exit code from setup menu as signal if menu loop should exited # 0 = continue loop / everything else = break loop and exit to terminal exitMenuLoop=$? if [ "${exitMenuLoop}" != "0" ]; then break; fi @@ -137,7 +151,9 @@ do done echo "# mainmenu signaled exit code '${exitMenuLoop}' --> exit to terminal" +exit 0 +################# TODO: MOVE PARTS BELOW TO APROPIATE NEW PLACE # check if HDD is from another fullnode OS and offer migration if [ "${hddGotMigrationData}" != "" ] && [ "${hddGotMigrationData}" != "none" ]; then From 7efa541482a5c7c3d5c00221a50b19ad372ff4e2 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:16:46 +0200 Subject: [PATCH 0139/1295] exit terminal and return to setup --- home.admin/00mainMenu.sh | 36 ++++++++++++++---------------------- home.admin/00raspiblitz.sh | 10 ++++++++++ home.admin/_commands.sh | 7 ------- 3 files changed, 24 insertions(+), 29 deletions(-) diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index 8648d0e50..15c991dee 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -318,43 +318,35 @@ case $CHOICE in /home/admin/99updateMenu.sh ;; REBOOT) - clear - confirmation "Are you sure?" "Reboot" "Cancel" true 7 40 - confirmationReboot=$? - if [ $confirmationReboot -eq 0 ]; then + clear + confirmation "Are you sure?" "Reboot" "Cancel" true 7 40 + confirmationReboot=$? + if [ $confirmationReboot -eq 0 ]; then clear echo "" sudo /home/admin/XXshutdown.sh reboot - exit 0 - fi + exit 1 + fi ;; OFF) - clear - confirmation "Are you sure?" "PowerOff" "Cancel" true 7 40 - confirmationShutdown=$? - if [ $confirmationShutdown -eq 0 ]; then + clear + confirmation "Are you sure?" "PowerOff" "Cancel" true 7 40 + confirmationShutdown=$? + if [ $confirmationShutdown -eq 0 ]; then clear echo "" sudo /home/admin/XXshutdown.sh - exit 0 - fi + exit 1 + fi ;; DELETE) sudo /home/admin/XXcleanHDD.sh sudo /home/admin/XXshutdown.sh reboot - exit 0 + exit 1 ;; *) clear - echo "***********************************" - echo "* RaspiBlitz Commandline" - echo "* Here be dragons .. have fun :)" - echo "***********************************" - echo "Bitcoin command line options: bitcoin-cli help" - echo "LND command line options: lncli -h" - echo "Back to main menu use command: raspiblitz" - echo - exit 0 + exit 1 esac # forward exit code of submenu to outside loop diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 58ba6236e..10bd1e32b 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -151,6 +151,16 @@ do done echo "# mainmenu signaled exit code '${exitMenuLoop}' --> exit to terminal" +echo "***********************************" +echo "* RaspiBlitz Commandline" +echo "* Here be dragons .. have fun :)" +echo "***********************************" +if [ "${setupPhase}" == "done" ] + echo "Bitcoin command line options: bitcoin-cli help" + echo "LND command line options: lncli -h" +fi +echo "Back to menus use command: raspiblitz" +echo exit 0 ################# TODO: MOVE PARTS BELOW TO APROPIATE NEW PLACE diff --git a/home.admin/_commands.sh b/home.admin/_commands.sh index cde070212..cb1ccf744 100755 --- a/home.admin/_commands.sh +++ b/home.admin/_commands.sh @@ -23,13 +23,6 @@ function menu() { ./00mainMenu.sh } -# command: setup -# calls the setup process -function setup() { - cd /home/admin - ./setup.scripts/setupDialogControl.sh -} - # command: repair # calls directly the repair menu function repair() { From 2edb37f722ae76845382ef565d952a495bad2443 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:17:23 +0200 Subject: [PATCH 0140/1295] fix syntax --- home.admin/00raspiblitz.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 10bd1e32b..e3d46f9f6 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -155,7 +155,7 @@ echo "***********************************" echo "* RaspiBlitz Commandline" echo "* Here be dragons .. have fun :)" echo "***********************************" -if [ "${setupPhase}" == "done" ] +if [ "${setupPhase}" == "done" ]; then echo "Bitcoin command line options: bitcoin-cli help" echo "LND command line options: lncli -h" fi From 893b78d68673ab5dcacfa2e3460e77193aa5ed3f Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:18:32 +0200 Subject: [PATCH 0141/1295] debug sleep --- home.admin/00raspiblitz.sh | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index e3d46f9f6..47cc6b6ec 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -55,6 +55,21 @@ exitMenuLoop=0 while [ ${exitMenuLoop} -eq 0 ] do + ##################################### + # SETUP SSH MENU + ##################################### + + # if setup is done & state is ready .. jump to main menu + if [ "${setupPhase}" != "done" ] && [ "${state}" == "waitsetup" ]; then + # push user to main menu + sleep 4 + /home/admin/setup.scripts/setupDialogControl.sh + # use the exit code from setup menu as signal if menu loop should exited + # 0 = continue loop / everything else = break loop and exit to terminal + exitMenuLoop=$? + if [ "${exitMenuLoop}" != "0" ]; then break; fi + fi + ##################################### # MAIN SSH MENU ##################################### @@ -69,20 +84,6 @@ do if [ "${exitMenuLoop}" != "0" ]; then break; fi fi - ##################################### - # SETUP SSH MENU - ##################################### - - # if setup is done & state is ready .. jump to main menu - if [ "${setupPhase}" != "done" ] && [ "${state}" == "waitsetup" ]; then - # push user to main menu - /home/admin/setup.scripts/setupDialogControl.sh - # use the exit code from setup menu as signal if menu loop should exited - # 0 = continue loop / everything else = break loop and exit to terminal - exitMenuLoop=$? - if [ "${exitMenuLoop}" != "0" ]; then break; fi - fi - ##################################### # Access fresh system info From acdba5802af664b8555cb7ee04ea140d97720bfe Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:21:43 +0200 Subject: [PATCH 0142/1295] move debug info --- home.admin/00raspiblitz.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 47cc6b6ec..18b9de637 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -1,6 +1,4 @@ #!/bin/bash -echo "For debug logs CTRL+C and: tail -n1000 -f raspiblitz.log" -echo "or call the command 'debug' to see bigger report." echo "Starting SSH user interface ..." # CONFIGFILE - configuration of RaspiBlitz @@ -62,7 +60,6 @@ do # if setup is done & state is ready .. jump to main menu if [ "${setupPhase}" != "done" ] && [ "${state}" == "waitsetup" ]; then # push user to main menu - sleep 4 /home/admin/setup.scripts/setupDialogControl.sh # use the exit code from setup menu as signal if menu loop should exited # 0 = continue loop / everything else = break loop and exit to terminal @@ -159,6 +156,10 @@ echo "***********************************" if [ "${setupPhase}" == "done" ]; then echo "Bitcoin command line options: bitcoin-cli help" echo "LND command line options: lncli -h" +else + echo "Your setup is not finished." + echo "For debug logs CTRL+C and: tail -n1000 -f raspiblitz.log" + echo "or call the command 'debug' to see bigger report." fi echo "Back to menus use command: raspiblitz" echo From f3769d95076470414ae1627ac73848b20c12e403 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:23:45 +0200 Subject: [PATCH 0143/1295] exitcode info --- home.admin/00raspiblitz.sh | 2 +- home.admin/setup.scripts/setupDialogControl.sh | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 18b9de637..4dbd72194 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -148,7 +148,7 @@ do sleep 3 done -echo "# mainmenu signaled exit code '${exitMenuLoop}' --> exit to terminal" +echo "# menu loop signaled exit code '${exitMenuLoop}' --> exit to terminal" echo "***********************************" echo "* RaspiBlitz Commandline" echo "* Here be dragons .. have fun :)" diff --git a/home.admin/setup.scripts/setupDialogControl.sh b/home.admin/setup.scripts/setupDialogControl.sh index 6957bf188..eae985005 100755 --- a/home.admin/setup.scripts/setupDialogControl.sh +++ b/home.admin/setup.scripts/setupDialogControl.sh @@ -28,8 +28,7 @@ if [ "${migrationOS}" == "" ]; then # on cancel - let user exit to terminal if [ "$?" != "0" ]; then - echo "# you selected cancel - exited to terminal" - echo "# to re-start setup use command --> setup" + echo "# you selected cancel - sending exit code 1" exit 1 fi @@ -86,8 +85,7 @@ else # allow user to cancel to terminal on dialog main menu # all other cancels have other exit codes if [ "$?" == "1" ]; then - echo "# you selected cancel - exited to terminal" - echo "# to re-start setup use command --> setup" + echo "# you selected cancel - sending exit code 1" exit 1 fi From 01789f7627926cbac18288d7c50f373bc013cd66 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:30:39 +0200 Subject: [PATCH 0144/1295] fix lingo --- home.admin/00raspiblitz.sh | 4 ++-- home.admin/_bootstrap.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 4dbd72194..49175756e 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -148,7 +148,7 @@ do sleep 3 done -echo "# menu loop signaled exit code '${exitMenuLoop}' --> exit to terminal" +echo "# menu loop received exit code ${exitMenuLoop} --> exit to terminal" echo "***********************************" echo "* RaspiBlitz Commandline" echo "* Here be dragons .. have fun :)" @@ -158,7 +158,7 @@ if [ "${setupPhase}" == "done" ]; then echo "LND command line options: lncli -h" else echo "Your setup is not finished." - echo "For debug logs CTRL+C and: tail -n1000 -f raspiblitz.log" + echo "For setup logs: tail -n1000 -f raspiblitz.log" echo "or call the command 'debug' to see bigger report." fi echo "Back to menus use command: raspiblitz" diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index d608ca111..affc2080e 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -284,14 +284,14 @@ echo "HDD/SSD connected: ${$hddCandidate}" >> $logFile ################################ source <(sudo /home/admin/config.scripts/blitz.datadrive.sh uasp-fix) if [ "${neededReboot}" == "1" ]; then - echo "UASP FIX applied (2st-try) ... reboot needed." >> $logFile + echo "UASP FIX applied (2nd-try) ... reboot needed." >> $logFile sudo cp ${logFile} ${logFile}.uasp sudo sed -i "s/^state=.*/state=reboot/g" ${infoFile} sudo shutdown -r now sleep 100 exit 0 else - echo "No UASP FIX needed (2st-try)." >> $logFile + echo "No UASP FIX needed (2nd-try)." >> $logFile fi ################################### From 68d83517e6c0719f682cd353e60062dbae627278 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:33:34 +0200 Subject: [PATCH 0145/1295] fix text infos --- home.admin/00raspiblitz.sh | 2 +- home.admin/_bootstrap.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 49175756e..b950c6fea 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -158,7 +158,7 @@ if [ "${setupPhase}" == "done" ]; then echo "LND command line options: lncli -h" else echo "Your setup is not finished." - echo "For setup logs: tail -n1000 -f raspiblitz.log" + echo "For setup logs: cat raspiblitz.log" echo "or call the command 'debug' to see bigger report." fi echo "Back to menus use command: raspiblitz" diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index affc2080e..b2d71b890 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -340,7 +340,7 @@ sed -i "s/^message=.*/message='please wait'/g" ${infoFile} source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) # check if the HDD is auto-mounted ( auto-mounted = setup-done) -echo "isMounted: $isMounted" >> $logFile +echo "HDD already part of system: $isMounted" >> $logFile if [ ${isMounted} -eq 0 ]; then echo "HDD is there but not AutoMounted yet - Waiting for user Setup/Update" >> $logFile From 5cf3d9e4b52bf495c43f5d267995c5a5fa4f6bcb Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:56:26 +0200 Subject: [PATCH 0146/1295] remove old redirect --- home.admin/00raspiblitz.sh | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index b950c6fea..80862ca28 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -27,17 +27,6 @@ if [ "${setupPhase}" == "" ] || [ "${state}" == "" ]; then exit 1 fi -##################################### -# REDIRECT: Main Menu -##################################### - -# if setup is done & state is ready .. jump to main menu -if [ "${setupPhase}" == "done" ] || [ "${state}" == "ready" ]; then - # push user to main menu - /home/admin/00mainMenu.sh - exit 0 -fi - ##################################### # SSH MENU LOOP ##################################### From 77780ff61fbd4f40a140a4d1ddf30d704ee4a07e Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 01:56:43 +0200 Subject: [PATCH 0147/1295] reboot on HDD disconnect --- home.admin/_bootstrap.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index b2d71b890..871d97ec0 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -381,6 +381,16 @@ if [ ${isMounted} -eq 0 ]; then sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} sleep 1 + # get fresh info about data drive (just in case user disconnects) + source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) + if [ ${#hddError} -gt 0 ] || [ ${#hddCandidate} -eq 0 ]; then + sed -i "s/^state=.*/state=errorHDD/g" ${infoFile} + sed -i "s/^message=.*/message='lost HDD - rebooting'/g" ${infoFile} + sudo shutdown -r now + sleep 100 + exit 0 + fi + done From 43eb266ce67bfb6268051c75e5f67472cbd68020 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 02:05:47 +0200 Subject: [PATCH 0148/1295] add info to logs --- home.admin/_bootstrap.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 871d97ec0..06b0e51e6 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -384,8 +384,10 @@ if [ ${isMounted} -eq 0 ]; then # get fresh info about data drive (just in case user disconnects) source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) if [ ${#hddError} -gt 0 ] || [ ${#hddCandidate} -eq 0 ]; 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 sudo shutdown -r now sleep 100 exit 0 From 031ea7f3a5023e9738251562d437dffcee594625 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 02:08:22 +0200 Subject: [PATCH 0149/1295] make var check more robust --- home.admin/_bootstrap.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 06b0e51e6..1cc4ab80e 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -252,11 +252,11 @@ do echo "hddCandidate: $hddCandidate" # in case of HDD analyse ERROR - if [ ${#hddError} -gt 0 ]; then + 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} -eq 0 ] && [ ${#hddCandidate} -eq 0 ]; then + elif [ "${isMounted}" == "0" ] && [ "${hddCandidate}" == "" ]; then sed -i "s/^state=.*/state=noHDD/g" ${infoFile} fi @@ -383,7 +383,7 @@ if [ ${isMounted} -eq 0 ]; then # get fresh info about data drive (just in case user disconnects) source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) - if [ ${#hddError} -gt 0 ] || [ ${#hddCandidate} -eq 0 ]; then + if [ "${hddError}" != "" ] || [ "${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} From 3ba4b9b513d6895bf81964b4b901a139fd613850 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 02:32:13 +0200 Subject: [PATCH 0150/1295] added debug --- home.admin/_bootstrap.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 1cc4ab80e..29d829fa1 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -270,6 +270,10 @@ do 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 @@ -282,6 +286,7 @@ echo "HDD/SSD connected: ${$hddCandidate}" >> $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 @@ -333,7 +338,7 @@ do done # write info for LCD -sed -i "s/^state=.*/state=booting/g" ${infoFile} +sed -i "s/^state=.*/state=inspect-hdd/g" ${infoFile} sed -i "s/^message=.*/message='please wait'/g" ${infoFile} # get fresh info about data drive to continue @@ -375,6 +380,7 @@ if [ ${isMounted} -eq 0 ]; then do # TODO: DETECT WHEN USER SETUP IS DONE + echo "TODO: DETECT WHEN USER SETUP IS DONE" >> $logFile # get latest network info & update raspiblitz.info (in case network changes) source <(/home/admin/config.scripts/internet.sh status) @@ -395,6 +401,10 @@ if [ ${isMounted} -eq 0 ]; then done +############################### TODO: RE-ARRANGE THE PARTS BELOW +echo "TODO: RE-ARRANGE THE PARTS BELOW" >> $logFile +exit 0 + # temp mount the HDD echo "Temp mounting data drive ($hddCandidate)" >> $logFile From 471d515cfaea237b1c7dfb1a5ab7e131d06958b4 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 02:55:26 +0200 Subject: [PATCH 0151/1295] debug info --- home.admin/_bootstrap.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 29d829fa1..2a3886ae9 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -380,7 +380,7 @@ if [ ${isMounted} -eq 0 ]; then do # TODO: DETECT WHEN USER SETUP IS DONE - echo "TODO: DETECT WHEN USER SETUP IS DONE" >> $logFile + echo "TODO: DETECT WHEN USER SETUP IS DONE hddError(${hddError}) hddCandidate(${hddCandidate})" >> $logFile # get latest network info & update raspiblitz.info (in case network changes) source <(/home/admin/config.scripts/internet.sh status) From b229149c1adb87b29cb366be6af5e9b9f5130a9a Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 03:04:42 +0200 Subject: [PATCH 0152/1295] change detection --- home.admin/_bootstrap.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 2a3886ae9..1e39d8115 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -389,7 +389,7 @@ if [ ${isMounted} -eq 0 ]; then # get fresh info about data drive (just in case user disconnects) source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) - if [ "${hddError}" != "" ] || [ "${hddCandidate}" == "" ]; then + 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} From 041f2feb99f7bae0a3599bf84db2807196c3315a Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 03:11:29 +0200 Subject: [PATCH 0153/1295] fix comment --- home.admin/_bootstrap.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 1e39d8115..3277479b9 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -387,7 +387,7 @@ if [ ${isMounted} -eq 0 ]; then sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} sleep 1 - # get fresh info about data drive (just in case user disconnects) + # 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 From f08c2ed809ae1d6e811bda9ded963f67464be5eb Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 03:12:37 +0200 Subject: [PATCH 0154/1295] short sleep for info --- home.admin/_bootstrap.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 3277479b9..e5a769a63 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -394,6 +394,7 @@ if [ ${isMounted} -eq 0 ]; then sed -i "s/^state=.*/state=errorHDD/g" ${infoFile} sed -i "s/^message=.*/message='lost HDD - rebooting'/g" ${infoFile} sudo cp ${logFile} ${logFile}.error + sleep 3 sudo shutdown -r now sleep 100 exit 0 From aa088539cd90edd71932b2a5ab2f28783e9f441a Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 03:16:40 +0200 Subject: [PATCH 0155/1295] longer sleep --- home.admin/_bootstrap.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index e5a769a63..c0f727673 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -394,7 +394,7 @@ if [ ${isMounted} -eq 0 ]; then sed -i "s/^state=.*/state=errorHDD/g" ${infoFile} sed -i "s/^message=.*/message='lost HDD - rebooting'/g" ${infoFile} sudo cp ${logFile} ${logFile}.error - sleep 3 + sleep 6 sudo shutdown -r now sleep 100 exit 0 From 0264a6c2fb2bc07d9777bc675215a8f9a4920361 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 10:42:53 +0200 Subject: [PATCH 0156/1295] loop with a little more sleep time --- home.admin/_bootstrap.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index c0f727673..7230412a4 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -385,7 +385,6 @@ if [ ${isMounted} -eq 0 ]; then # get latest network info & update raspiblitz.info (in case network changes) source <(/home/admin/config.scripts/internet.sh status) sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} - sleep 1 # get fresh info about data drive (in case the hdd gets disconnected) source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) @@ -400,6 +399,9 @@ if [ ${isMounted} -eq 0 ]; then exit 0 fi + # give the loop a little bed time + sleep 4 + done ############################### TODO: RE-ARRANGE THE PARTS BELOW From 596cc7e7c1b2cc6514d6f99150d19a0dd8cc91c9 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 5 May 2021 21:51:54 +0200 Subject: [PATCH 0157/1295] add debug info --- home.admin/00raspiblitz.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 80862ca28..9700de321 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -89,6 +89,7 @@ do echo "# DURING SETUP: Handle System States " # check if HDD is connected + echo "isMounted(${isMounted}) hddCandidate(${hddCandidate})" if [ "${isMounted}" == "0" ] && [ ${#hddCandidate} -eq 0 ]; then echo "***********************************************************" echo "WARNING: NO HDD FOUND -> Shutdown, connect HDD and restart." @@ -106,6 +107,7 @@ do echo "space on your laptop you can store the VDI file on an external drive." echo "***********************************************************" fi + exit 1 fi fi From a0f90dadbddbee9f19a9d2c2913183b75077b6ba Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 6 May 2021 00:12:09 +0200 Subject: [PATCH 0158/1295] handle info wait events --- home.admin/00raspiblitz.sh | 22 ++++---- home.admin/setup.scripts/eventInfoWait.sh | 66 +++++++++++++++++++++++ 2 files changed, 79 insertions(+), 9 deletions(-) create mode 100644 home.admin/setup.scripts/eventInfoWait.sh diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 9700de321..b3856971b 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -86,15 +86,13 @@ do if [ "${setupPhase}" != "done" ]; then - echo "# DURING SETUP: Handle System States " + echo "# DURING SETUP: Handle System State (${state})" - # check if HDD is connected - echo "isMounted(${isMounted}) hddCandidate(${hddCandidate})" - if [ "${isMounted}" == "0" ] && [ ${#hddCandidate} -eq 0 ]; then - echo "***********************************************************" - echo "WARNING: NO HDD FOUND -> Shutdown, connect HDD and restart." - echo "***********************************************************" - if [ ${vagrant} -gt 0 ]; then + # when no HDD on Vagrant - just print info & exit (admin info) + if [ "${state}" == "noHDD" ] && [ ${vagrant} -gt 0 ]; then + echo "***********************************************************" + echo "VAGRANT INFO" + echo "***********************************************************" echo "To connect a HDD data disk to your VagrantVM:" echo "- shutdown VM with command: off" echo "- open your VirtualBox GUI and select RaspiBlitzVM" @@ -106,8 +104,14 @@ do echo "a VDI with a presynced blockchain to speed up setup. If you dont have 900GB" echo "space on your laptop you can store the VDI file on an external drive." echo "***********************************************************" + exit 1 + else + + # every other state just push as event to SSH frontend + /home/admin/setup.scripts/eventInfoWait.sh ${state} + fi - exit 1 + fi fi diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh new file mode 100644 index 000000000..d67b08298 --- /dev/null +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -0,0 +1,66 @@ +#!/bin/bash +# this is an dialog that handles all UI events during setup that require a "info & wait" with no interaction + +# get basic system information +# these are the same set of infos the WebGUI dialog/controler has +source /home/admin/_version.info +source /home/admin/raspiblitz.info + +# 1st PARAMETER: eventID +# fixed ID string for a certain event +eventID=$1 +if [ "${eventID}" == "" ]; then + echo "err='missing eventID'" + exit 1 +fi + +# 2nd PARAMETER (optional): dynamic content that can be used in two ways +# 1) contentWords[] --> if eventID is known & well defined between backend & frontend, then use the single words of this string as dynamic content for static text info +# 2) contentString --> if eventID is new and not well defined yet, then just show a generic info and use the complete string as info message +# just see examples of this two use cases below +contentWords=($2) +contentString=$2 + +# default backtitle for dialog +backtitle="RaspiBlitz ${codeVersion} / ${locialip} / ${tempCelsius}°C" + +################################################ +# 1) WELL DEFINED EVENTS +################################################ + +if [ "${eventID}" == "starting" ]; then + + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Starting RaspiBlitz +Please wait ... +" 6 24 + +elif [ "${eventID}" == "noHDD" ]; then + + # contentWords[1] --> size string (for example '1TB') + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Waiting for HDD/SSD +Please connect min ${contentWords[1]} +HDD or SSD to the the device. +" 8 40 + +elif [ "${eventID}" == "sdtoosmall" ]; then + + # contentWords[1] --> size string (for example '16GB') + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +PROBLEM: SD CARD IS TOO SMALL +Minumum of ${contentWords[1]} needed +Cut power & create fresh sd card +" 8 40 + +################################################ +# 2) GENERIC EVENT +# may get better defined in the future +################################################ + +else + + # a generic info box for not further defined events + dialog --title "${eventid}" --backtitle "${backtitle}" --cr-wrap --infobox "\n${contentString}" 7 50 + +fi \ No newline at end of file From 7927ca4286ff921b27791df9bfd93ef8bd26d6d2 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 6 May 2021 00:13:18 +0200 Subject: [PATCH 0159/1295] fix syntax --- home.admin/00raspiblitz.sh | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index b3856971b..7735b5a60 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -90,28 +90,26 @@ do # when no HDD on Vagrant - just print info & exit (admin info) if [ "${state}" == "noHDD" ] && [ ${vagrant} -gt 0 ]; then - echo "***********************************************************" - echo "VAGRANT INFO" - echo "***********************************************************" - echo "To connect a HDD data disk to your VagrantVM:" - echo "- shutdown VM with command: off" - echo "- open your VirtualBox GUI and select RaspiBlitzVM" - echo "- change the 'mass storage' settings" - echo "- add a second 'Primary Slave' drive to the already existing controller" - echo "- close VirtualBox GUI and run: vagrant up & vagrant ssh" - echo "***********************************************************" - echo "You can either create a new dynamic VDI with around 900GB or download" - echo "a VDI with a presynced blockchain to speed up setup. If you dont have 900GB" - echo "space on your laptop you can store the VDI file on an external drive." - echo "***********************************************************" - exit 1 - else + echo "***********************************************************" + echo "VAGRANT INFO" + echo "***********************************************************" + echo "To connect a HDD data disk to your VagrantVM:" + echo "- shutdown VM with command: off" + echo "- open your VirtualBox GUI and select RaspiBlitzVM" + echo "- change the 'mass storage' settings" + echo "- add a second 'Primary Slave' drive to the already existing controller" + echo "- close VirtualBox GUI and run: vagrant up & vagrant ssh" + echo "***********************************************************" + echo "You can either create a new dynamic VDI with around 900GB or download" + echo "a VDI with a presynced blockchain to speed up setup. If you dont have 900GB" + echo "space on your laptop you can store the VDI file on an external drive." + echo "***********************************************************" + exit 1 + else # every other state just push as event to SSH frontend /home/admin/setup.scripts/eventInfoWait.sh ${state} - fi - fi fi From bf7444c7ff00342a18aec2777b97ae0290b3c832 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 6 May 2021 00:15:31 +0200 Subject: [PATCH 0160/1295] debug state --- home.admin/00raspiblitz.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 7735b5a60..443caf38e 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -108,7 +108,7 @@ do else # every other state just push as event to SSH frontend - /home/admin/setup.scripts/eventInfoWait.sh ${state} + /home/admin/setup.scripts/eventInfoWait.sh "c-${state}" "${message}" fi @@ -137,7 +137,6 @@ do fi # debug wait - echo "uptime(${uptime})" sleep 3 done From f5f666c16eea824c964a4c14d9804c72c9ea1fba Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 6 May 2021 00:16:22 +0200 Subject: [PATCH 0161/1295] remove debug output --- home.admin/00raspiblitz.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 443caf38e..7f3143185 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -120,8 +120,7 @@ do ############################ # LND Wallet Unlock - - echo "walletLocked(${walletLocked})" + if [ "${walletLocked}" == "1" ]; then /home/admin/config.scripts/lnd.unlock.sh fi From 676b81bd026b953a36e172b1cce056f2bcb703a5 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 6 May 2021 00:39:37 +0200 Subject: [PATCH 0162/1295] give on no HDD more info --- home.admin/_bootstrap.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 7230412a4..eb168e439 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -258,6 +258,7 @@ do 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 # get latest network info & update raspiblitz.info (in case network changes) From 2fc6471c9819511a98108e4b06d8e25e9f8ac7fc Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 6 May 2021 00:40:33 +0200 Subject: [PATCH 0163/1295] remove info --- home.admin/00raspiblitz.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 7f3143185..fe457f8d3 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -108,7 +108,7 @@ do else # every other state just push as event to SSH frontend - /home/admin/setup.scripts/eventInfoWait.sh "c-${state}" "${message}" + /home/admin/setup.scripts/eventInfoWait.sh "${state}" "${message}" fi @@ -120,7 +120,7 @@ do ############################ # LND Wallet Unlock - + if [ "${walletLocked}" == "1" ]; then /home/admin/config.scripts/lnd.unlock.sh fi From 149aab7e6f86bd8be0376e7022d7329a7e4bc579 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 6 May 2021 00:51:23 +0200 Subject: [PATCH 0164/1295] fix dynamic content noHDD --- home.admin/setup.scripts/eventInfoWait.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index d67b08298..8148d0c37 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -37,12 +37,12 @@ Please wait ... elif [ "${eventID}" == "noHDD" ]; then - # contentWords[1] --> size string (for example '1TB') + # contentWords[0] --> size string (for example '1TB') dialog --backtitle "${backtitle}" --cr-wrap --infobox " Waiting for HDD/SSD -Please connect min ${contentWords[1]} +Please connect min ${contentWords[0]} HDD or SSD to the the device. -" 8 40 +" 7 34 elif [ "${eventID}" == "sdtoosmall" ]; then From f9e15cba1c7c5553a0053f2bc74a1b4c0a7172a6 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 6 May 2021 00:54:14 +0200 Subject: [PATCH 0165/1295] remove temp for now --- home.admin/setup.scripts/eventInfoWait.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index 8148d0c37..d2a3010f1 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -22,7 +22,7 @@ contentWords=($2) contentString=$2 # default backtitle for dialog -backtitle="RaspiBlitz ${codeVersion} / ${locialip} / ${tempCelsius}°C" +backtitle="RaspiBlitz ${codeVersion} / ${localip}" ################################################ # 1) WELL DEFINED EVENTS From bab6b0a30724ea2aebad2bc286a6003e22469852 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 6 May 2021 02:08:21 +0200 Subject: [PATCH 0166/1295] change info text --- home.admin/00raspiblitz.sh | 1 + home.admin/setup.scripts/eventInfoWait.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index fe457f8d3..46b692ce6 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -77,6 +77,7 @@ do source ${infoFile} # gather fresh status scan and store results in memory + # TODO: move this into background loop and unify with redis data storage later sudo /home/admin/config.scripts/blitz.statusscan.sh > /var/cache/raspiblitz/raspiblitz.status source /var/cache/raspiblitz/raspiblitz.status diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index d2a3010f1..564e1cb5b 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -40,7 +40,7 @@ elif [ "${eventID}" == "noHDD" ]; then # contentWords[0] --> size string (for example '1TB') dialog --backtitle "${backtitle}" --cr-wrap --infobox " Waiting for HDD/SSD -Please connect min ${contentWords[0]} +Please connect minimum ${contentWords[0]} HDD or SSD to the the device. " 7 34 From 452d6fafb8ccdcac36e94d867c997313c84ec2b2 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 6 May 2021 02:23:02 +0200 Subject: [PATCH 0167/1295] critical error info --- home.admin/00raspiblitz.sh | 15 ++++++++++++++- home.admin/setup.scripts/eventInfoWait.sh | 6 ++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 46b692ce6..c5f8f1b43 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -89,7 +89,7 @@ do echo "# DURING SETUP: Handle System State (${state})" - # when no HDD on Vagrant - just print info & exit (admin info) + # when no HDD on Vagrant - just print info & exit (admin info & exit) if [ "${state}" == "noHDD" ] && [ ${vagrant} -gt 0 ]; then echo "***********************************************************" echo "VAGRANT INFO" @@ -106,6 +106,19 @@ do echo "space on your laptop you can store the VDI file on an external drive." echo "***********************************************************" exit 1 + + # for all critical errors (admin info & exit) + if [ "${state}" == "errorHDD" ]; then + echo "***********************************************************" + echo "SETUP ERROR - please report to development team" + echo "***********************************************************" + echo "state(${state}) message(${message})" + if [ "${state}" == "errorHDD" ]; then + # print some debug detail info on HDD/SSD error + sudo /home/admin/config.scripts/blitz.datadrive.sh status + fi + echo "command to shutdown --> off" + exit 1 else # every other state just push as event to SSH frontend diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index 564e1cb5b..e604e5811 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -35,6 +35,12 @@ Starting RaspiBlitz Please wait ... " 6 24 +elif [ "${eventID}" == "reboot" ]; then + + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Shutting down for reboot. +" 5 30 + elif [ "${eventID}" == "noHDD" ]; then # contentWords[0] --> size string (for example '1TB') From 4ff3e3deb288962b94fb101a9ad4f8406a0bacf2 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 6 May 2021 02:27:26 +0200 Subject: [PATCH 0168/1295] add event system-init --- home.admin/setup.scripts/eventInfoWait.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index e604e5811..2bacd75b7 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -28,7 +28,7 @@ backtitle="RaspiBlitz ${codeVersion} / ${localip}" # 1) WELL DEFINED EVENTS ################################################ -if [ "${eventID}" == "starting" ]; then +if [ "${eventID}" == "starting" ] || [ "${eventID}" == "system-init" ]; then dialog --backtitle "${backtitle}" --cr-wrap --infobox " Starting RaspiBlitz @@ -41,6 +41,7 @@ elif [ "${eventID}" == "reboot" ]; then Shutting down for reboot. " 5 30 + elif [ "${eventID}" == "noHDD" ]; then # contentWords[0] --> size string (for example '1TB') From d96693a4374b0beea384cc0972766494dfea10d8 Mon Sep 17 00:00:00 2001 From: JEREMY <31783075+originaljeremy@users.noreply.github.com> Date: Fri, 7 May 2021 07:07:48 +0100 Subject: [PATCH 0169/1295] Update lnd.rescue.sh added instructions to check bytesize with stat since scp rounds file size on download and can be confusing --- home.admin/config.scripts/lnd.rescue.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/home.admin/config.scripts/lnd.rescue.sh b/home.admin/config.scripts/lnd.rescue.sh index 772131fd3..6e861e111 100755 --- a/home.admin/config.scripts/lnd.rescue.sh +++ b/home.admin/config.scripts/lnd.rescue.sh @@ -80,6 +80,10 @@ if [ ${mode} = "backup" ]; then echo "scp -r admin@${localip}:/home/admin/lnd-rescue-*.tar.gz ." echo "" echo "Use password A to authenticate file transfer." + echo + echo "Type the following command into the new terminal:" + echo "stat lnd-rescue-*.tar.gz" + echo echo "Check for correct file size after transfer: ${byteSize} byte" echo echo "BEWARE: Your Lightning node is now stopped. It's safe to backup the data and" From 43be75308a03addbff70fe67cd857896d8e5f069 Mon Sep 17 00:00:00 2001 From: openoms Date: Sat, 8 May 2021 20:47:45 +0100 Subject: [PATCH 0170/1295] use _aliases.sh to persist between script updates --- home.admin/_commands.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.admin/_commands.sh b/home.admin/_commands.sh index cb1ccf744..5b583e605 100755 --- a/home.admin/_commands.sh +++ b/home.admin/_commands.sh @@ -1,6 +1,8 @@ #!/bin/bash # SHORTCUT COMMANDS you can call as user 'admin' from terminal +# source aliases from /home/admin/_aliases.sh +source /home/admin/_aliases.sh # command: raspiblitz # calls the the raspiblitz mainmenu (legacy) From 8d2ee0a352616cdf50f7965d71e1dbd0091c51d2 Mon Sep 17 00:00:00 2001 From: openoms Date: Sat, 8 May 2021 20:48:41 +0100 Subject: [PATCH 0171/1295] add a parallel signet service --- home.admin/config.scripts/bitcoin.signet.sh | 118 ++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 home.admin/config.scripts/bitcoin.signet.sh diff --git a/home.admin/config.scripts/bitcoin.signet.sh b/home.admin/config.scripts/bitcoin.signet.sh new file mode 100644 index 000000000..48ba53cf6 --- /dev/null +++ b/home.admin/config.scripts/bitcoin.signet.sh @@ -0,0 +1,118 @@ +#!/bin/bash + +# command info +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then + echo "Install a parallel signet service" + echo "bitcoin.signet.sh [on|off]" + exit 1 +fi + +function removeSignetdService() { + if [ -f "/etc/systemd/system/signetd.service" ];then + sudo systemctl stop signetd + sudo systemctl disable signetd + echo "# Bitcoin Core on signet service is stopped and disabled" + echo + fi +} + +function installSignet() { + # signet.conf + if [ ! -f /home/bitcoin/.bitcoin/signet.conf ];then + randomRPCpass=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c8) + echo " +# bitcoind configuration for signet + +# Connection settings +rpcuser=raspiblitz +rpcpassword=$randomRPCpass + +onlynet=onion +proxy=127.0.0.1:9050 + +datadir=/mnt/hdd/bitcoin +" | sudo -u bitcoin tee /home/bitcoin/.bitcoin/signet.conf + else + echo "# /home/bitcoin/.bitcoin/signet.conf is present" + fi + + removeSignetdService + # /etc/systemd/system/signetd.service + echo " +[Unit] +Description=Bitcoin daemon on signet + +[Service] +User=bitcoin +Group=bitcoin +Type=forking +PIDFile=/mnt/hdd/bitcoin//signetd.pid +ExecStart=/usr/local/bin/bitcoind -signet -daemon \ + -conf=/home/bitcoin/.bitcoin/signet.conf \ + -pid=/mnt/hdd/bitcoin/signetd.pid +KillMode=process +Restart=always +TimeoutSec=120 +RestartSec=30 +StandardOutput=null +StandardError=journal + +[Install] +WantedBy=multi-user.target +" | sudo tee /etc/systemd/system/signetd.service + sudo systemctl enable signetd + echo "# OK - the bitcoin daemon on signet service is now enabled" + + # add aliases + if [ $(alias | grep -c signet) -eq 0 ];then + bash -c "echo 'alias signet-cli=\"/usr/local/bin/bitcoin-cli -signet\"' >> /home/admin/_aliases.sh" + bash -c "echo 'alias signetd=\"/usr/local/bin/bitcoind -signet\"' >> /home/admin/_aliases.sh" + fi + + source /home/admin/raspiblitz.info + if [ "${state}" == "ready" ]; then + echo "# OK - the signetd.service is enabled, system is ready so starting service" + sudo systemctl start signetd + else + echo "# OK - the signetdservice is enabled, to start manually use: 'sudo systemctl start signetd'" + fi + + isInstalled=$(systemctl status signetd | grep -c active) + if [ $isInstalled -gt 0 ];then + echo "# Installed $(bitcoind --version | grep version) signetd.service" + echo + echo "# Monitor the signet bitcoind with:" + echo "# 'sudo tail -f /mnt/hdd/bitcoin/signet/debug.log'" + echo + else + echo "# Installation failed" + exit 1 + fi +} + +source /mnt/hdd/raspiblitz.conf + +# add default value to raspi config if needed +if ! grep -Eq "^signet=" /mnt/hdd/raspiblitz.conf; then + echo "signet=off" >> /mnt/hdd/raspiblitz.conf +fi + +# switch on +if [ "$1" = "1" ] || [ "$1" = "on" ]; then + installSignet + # setting value in raspi blitz config + sudo sed -i "s/^signet=.*/signet=on/g" /mnt/hdd/raspiblitz.conf + exit 0 +fi + +# switch off +if [ "$1" = "0" ] || [ "$1" = "off" ]; then + removeSignetdService + # setting value in raspi blitz config + sudo sed -i "s/^signet=.*/signet=off/g" /mnt/hdd/raspiblitz.conf + exit 0 +fi + +echo "# FAIL - Unknown Parameter $1" +echo "# may need reboot to run" +exit 1 \ No newline at end of file From 02c439ff799df100b88cf18d6fb7f058dade0a1d Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 10 May 2021 12:14:21 +0100 Subject: [PATCH 0172/1295] add parallel testnet service for bitcoin --- home.admin/config.scripts/bitcoin.signet.sh | 118 ---------------- .../config.scripts/bitcoin.testnetworks.sh | 130 ++++++++++++++++++ 2 files changed, 130 insertions(+), 118 deletions(-) delete mode 100644 home.admin/config.scripts/bitcoin.signet.sh create mode 100644 home.admin/config.scripts/bitcoin.testnetworks.sh diff --git a/home.admin/config.scripts/bitcoin.signet.sh b/home.admin/config.scripts/bitcoin.signet.sh deleted file mode 100644 index 48ba53cf6..000000000 --- a/home.admin/config.scripts/bitcoin.signet.sh +++ /dev/null @@ -1,118 +0,0 @@ -#!/bin/bash - -# command info -if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then - echo "Install a parallel signet service" - echo "bitcoin.signet.sh [on|off]" - exit 1 -fi - -function removeSignetdService() { - if [ -f "/etc/systemd/system/signetd.service" ];then - sudo systemctl stop signetd - sudo systemctl disable signetd - echo "# Bitcoin Core on signet service is stopped and disabled" - echo - fi -} - -function installSignet() { - # signet.conf - if [ ! -f /home/bitcoin/.bitcoin/signet.conf ];then - randomRPCpass=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c8) - echo " -# bitcoind configuration for signet - -# Connection settings -rpcuser=raspiblitz -rpcpassword=$randomRPCpass - -onlynet=onion -proxy=127.0.0.1:9050 - -datadir=/mnt/hdd/bitcoin -" | sudo -u bitcoin tee /home/bitcoin/.bitcoin/signet.conf - else - echo "# /home/bitcoin/.bitcoin/signet.conf is present" - fi - - removeSignetdService - # /etc/systemd/system/signetd.service - echo " -[Unit] -Description=Bitcoin daemon on signet - -[Service] -User=bitcoin -Group=bitcoin -Type=forking -PIDFile=/mnt/hdd/bitcoin//signetd.pid -ExecStart=/usr/local/bin/bitcoind -signet -daemon \ - -conf=/home/bitcoin/.bitcoin/signet.conf \ - -pid=/mnt/hdd/bitcoin/signetd.pid -KillMode=process -Restart=always -TimeoutSec=120 -RestartSec=30 -StandardOutput=null -StandardError=journal - -[Install] -WantedBy=multi-user.target -" | sudo tee /etc/systemd/system/signetd.service - sudo systemctl enable signetd - echo "# OK - the bitcoin daemon on signet service is now enabled" - - # add aliases - if [ $(alias | grep -c signet) -eq 0 ];then - bash -c "echo 'alias signet-cli=\"/usr/local/bin/bitcoin-cli -signet\"' >> /home/admin/_aliases.sh" - bash -c "echo 'alias signetd=\"/usr/local/bin/bitcoind -signet\"' >> /home/admin/_aliases.sh" - fi - - source /home/admin/raspiblitz.info - if [ "${state}" == "ready" ]; then - echo "# OK - the signetd.service is enabled, system is ready so starting service" - sudo systemctl start signetd - else - echo "# OK - the signetdservice is enabled, to start manually use: 'sudo systemctl start signetd'" - fi - - isInstalled=$(systemctl status signetd | grep -c active) - if [ $isInstalled -gt 0 ];then - echo "# Installed $(bitcoind --version | grep version) signetd.service" - echo - echo "# Monitor the signet bitcoind with:" - echo "# 'sudo tail -f /mnt/hdd/bitcoin/signet/debug.log'" - echo - else - echo "# Installation failed" - exit 1 - fi -} - -source /mnt/hdd/raspiblitz.conf - -# add default value to raspi config if needed -if ! grep -Eq "^signet=" /mnt/hdd/raspiblitz.conf; then - echo "signet=off" >> /mnt/hdd/raspiblitz.conf -fi - -# switch on -if [ "$1" = "1" ] || [ "$1" = "on" ]; then - installSignet - # setting value in raspi blitz config - sudo sed -i "s/^signet=.*/signet=on/g" /mnt/hdd/raspiblitz.conf - exit 0 -fi - -# switch off -if [ "$1" = "0" ] || [ "$1" = "off" ]; then - removeSignetdService - # setting value in raspi blitz config - sudo sed -i "s/^signet=.*/signet=off/g" /mnt/hdd/raspiblitz.conf - exit 0 -fi - -echo "# FAIL - Unknown Parameter $1" -echo "# may need reboot to run" -exit 1 \ No newline at end of file diff --git a/home.admin/config.scripts/bitcoin.testnetworks.sh b/home.admin/config.scripts/bitcoin.testnetworks.sh new file mode 100644 index 000000000..5a45480b2 --- /dev/null +++ b/home.admin/config.scripts/bitcoin.testnetworks.sh @@ -0,0 +1,130 @@ +#!/bin/bash + +# command info +if [ $# -lt 2 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then + echo "Install a parallel testnet or signet service" + echo "bitcoin.testnetwork.sh [on|off] [signet|testnet]" + exit 1 +fi + +parallelService=$2 +if [ $parallelService = signet ] || [ $parallelService = testnet ];then + echo "# Installing $parallelService" +else + echo "# $parallelService not supported" + exit 1 +fi + +function removeParallelService() { + if [ -f "/etc/systemd/system/${parallelService}d.service" ];then + sudo systemctl stop ${parallelService}d + sudo systemctl disable ${parallelService}d + echo "# Bitcoin Core on ${parallelService} service is stopped and disabled" + echo + fi +} + +function installParallelService() { + # ${parallelService}.conf + if [ ! -f /home/bitcoin/.bitcoin/${parallelService}.conf ];then + randomRPCpass=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c8) + echo " +# bitcoind configuration for ${parallelService} + +# Connection settings +rpcuser=raspiblitz +rpcpassword=$randomRPCpass + +onlynet=onion +proxy=127.0.0.1:9050 + +datadir=/mnt/hdd/bitcoin +" | sudo -u bitcoin tee /home/bitcoin/.bitcoin/${parallelService}.conf + else + echo "# /home/bitcoin/.bitcoin/${parallelService}.conf is present" + fi + + removeParallelService + # /etc/systemd/system/${parallelService}d.service + echo " +[Unit] +Description=Bitcoin daemon on ${parallelService} + +[Service] +User=bitcoin +Group=bitcoin +Type=forking +PIDFile=/mnt/hdd/bitcoin/${parallelService}d.pid +ExecStart=/usr/local/bin/bitcoind -${parallelService} -daemon \ + -conf=/home/bitcoin/.bitcoin/${parallelService}.conf \ + -pid=/mnt/hdd/bitcoin/${parallelService}d.pid +KillMode=process +Restart=always +TimeoutSec=120 +RestartSec=30 +StandardOutput=null +StandardError=journal + +[Install] +WantedBy=multi-user.target +" | sudo tee /etc/systemd/system/${parallelService}d.service + sudo systemctl enable ${parallelService}d + echo "# OK - the bitcoin daemon on ${parallelService} service is now enabled" + + # add aliases + if [ $(alias | grep -c ${parallelService}) -eq 0 ];then + bash -c "echo 'alias ${parallelService}-cli=\"/usr/local/bin/bitcoin-cli -${parallelService}\"' >> /home/admin/_aliases.sh" + bash -c "echo 'alias ${parallelService}d=\"/usr/local/bin/bitcoind -${parallelService}\"' >> /home/admin/_aliases.sh" + fi + + source /home/admin/raspiblitz.info + if [ "${state}" == "ready" ]; then + echo "# OK - the ${parallelService}d.service is enabled, system is ready so starting service" + sudo systemctl start ${parallelService}d + else + echo "# OK - the ${parallelService}dservice is enabled, to start manually use: 'sudo systemctl start ${parallelService}d'" + fi + + isInstalled=$(systemctl status ${parallelService}d | grep -c active) + if [ $isInstalled -gt 0 ];then + echo "# Installed $(bitcoind --version | grep version) ${parallelService}d.service" + echo + echo "# Monitor the ${parallelService} bitcoind with:" + if [ ${parallelService} = signet ]; then + echo "# 'sudo tail -f /mnt/hdd/bitcoin/signet/debug.log'" + if [ ${parallelService} = testnet ]; then + echo "# 'sudo tail -f /mnt/hdd/bitcoin/testnet3/debug.log'"` + fi + echo + else + echo "# Installation failed" + exit 1 + fi +} + +source /mnt/hdd/raspiblitz.conf + +# add default value to raspi config if needed +if ! grep -Eq "^${parallelService}=" /mnt/hdd/raspiblitz.conf; then + echo "${parallelService}=off" >> /mnt/hdd/raspiblitz.conf +fi + +# switch on +if [ "$1" = "1" ] || [ "$1" = "on" ]; then + installParallelService + # setting value in raspi blitz config + sudo sed -i "s/^${parallelService}=.*/${parallelService}=on/g" /mnt/hdd/raspiblitz.conf + exit 0 +fi + +# switch off +if [ "$1" = "0sudo " ] || [ "$1" = "off" ]; then + removeParallelService + # setting value in raspi blitz config + sudo sed -i "s/^${parallelService}=.*/${parallelService}=off/g" /mnt/hdd/raspiblitz.conf + exit 0 +fi + +echo "# FAIL - Unknown Parameter $1" +echo "# may need reboot to run" +exit 1 \ No newline at end of file From 3558184cf271b63504038c2acc87cb9eac5571a1 Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 10 May 2021 12:40:14 +0100 Subject: [PATCH 0173/1295] set -conf= in the aliases --- home.admin/config.scripts/bitcoin.testnetworks.sh | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/home.admin/config.scripts/bitcoin.testnetworks.sh b/home.admin/config.scripts/bitcoin.testnetworks.sh index 5a45480b2..d4418d248 100644 --- a/home.admin/config.scripts/bitcoin.testnetworks.sh +++ b/home.admin/config.scripts/bitcoin.testnetworks.sh @@ -73,8 +73,14 @@ WantedBy=multi-user.target # add aliases if [ $(alias | grep -c ${parallelService}) -eq 0 ];then - bash -c "echo 'alias ${parallelService}-cli=\"/usr/local/bin/bitcoin-cli -${parallelService}\"' >> /home/admin/_aliases.sh" - bash -c "echo 'alias ${parallelService}d=\"/usr/local/bin/bitcoind -${parallelService}\"' >> /home/admin/_aliases.sh" + bash -c "echo 'alias ${parallelService}-cli=\"/usr/local/bin/bitcoin-cli\ + -${parallelService}\ + -conf=/home/bitcoin/.bitcoin/${parallelService}.conf\"' \ + >> /home/admin/_aliases.sh" + bash -c "echo 'alias ${parallelService}d=\"/usr/local/bin/bitcoind\ + -${parallelService}\ + -conf=/home/bitcoin/.bitcoin/${parallelService}.conf\"' \ + >> /home/admin/_aliases.sh" fi source /home/admin/raspiblitz.info @@ -92,8 +98,8 @@ WantedBy=multi-user.target echo "# Monitor the ${parallelService} bitcoind with:" if [ ${parallelService} = signet ]; then echo "# 'sudo tail -f /mnt/hdd/bitcoin/signet/debug.log'" - if [ ${parallelService} = testnet ]; then - echo "# 'sudo tail -f /mnt/hdd/bitcoin/testnet3/debug.log'"` + elif [ ${parallelService} = testnet ]; then + echo "# 'sudo tail -f /mnt/hdd/bitcoin/testnet3/debug.log'" fi echo else From a8aa7875fadecd48334c2aced6d4887e2f74dfee Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 10 May 2021 15:34:41 +0100 Subject: [PATCH 0174/1295] use ${chain}.rpcbind in bitcoin.conf everywhere --- home.admin/99connectMenu.sh | 6 +++--- home.admin/assets/bitcoin.conf | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/home.admin/99connectMenu.sh b/home.admin/99connectMenu.sh index 1c619af6a..1d40d696a 100644 --- a/home.admin/99connectMenu.sh +++ b/home.admin/99connectMenu.sh @@ -171,7 +171,7 @@ HiddenServicePort 8333 127.0.0.1:8333" | sudo tee -a /etc/tor/torrc localIP=$(ip addr | grep 'state UP' -A2 | grep -E -v 'docker0|veth' |\ grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') allowIPrange=$(grep -c "rpcallowip=$localIPrange" < /mnt/hdd/${network}/${network}.conf) - bindIP=$(grep -c "rpcbind=$localIP" < /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) TorRPCaddress=$(sudo cat /mnt/hdd/tor/bitcoin${BITCOINRPCPORT}/hostname) @@ -239,7 +239,7 @@ HiddenServicePort 8333 127.0.0.1:8333" | sudo tee -a /etc/tor/torrc restartCore=1 fi if [ $bindIP -eq 0 ]; then - echo "rpcbind=$localIP" | sudo tee -a /mnt/hdd/${network}/${network}.conf + echo "${chain}.rpcbind=$localIP" | sudo tee -a /mnt/hdd/${network}/${network}.conf restartCore=1 fi if [ $restartCore = 1 ];then @@ -286,7 +286,7 @@ HiddenServicePort 8333 127.0.0.1:8333" | sudo tee -a /etc/tor/torrc restartCore=1 fi if [ $bindIP -gt 0 ]; then - sudo sed -i "/^rpcbind=$localIP/d" /mnt/hdd/${network}/${network}.conf + sudo sed -i "/^${chain}.rpcbind=$localIP/d" /mnt/hdd/${network}/${network}.conf restartCore=1 fi if [ $restartCore = 1 ];then diff --git a/home.admin/assets/bitcoin.conf b/home.admin/assets/bitcoin.conf index 6c92fbf6e..232812fda 100755 --- a/home.admin/assets/bitcoin.conf +++ b/home.admin/assets/bitcoin.conf @@ -13,9 +13,9 @@ peerbloomfilters=1 # Connection settings rpcuser=raspibolt rpcpassword=passwordB -rpcport=8332 +main.rpcport=8332 rpcallowip=127.0.0.1 -rpcbind=127.0.0.1:8332 +main.rpcbind=127.0.0.1:8332 zmqpubrawblock=tcp://127.0.0.1:28332 zmqpubrawtx=tcp://127.0.0.1:28333 From 936d550d70d9771294bd8dda518470b91eeb51ac Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 10 May 2021 15:35:37 +0100 Subject: [PATCH 0175/1295] run with a single bitcoin.conf on all networks --- home.admin/_commands.sh | 3 +- .../config.scripts/bitcoin.testnetworks.sh | 91 ++++++++++--------- 2 files changed, 50 insertions(+), 44 deletions(-) diff --git a/home.admin/_commands.sh b/home.admin/_commands.sh index 5b583e605..03d9c0fbb 100755 --- a/home.admin/_commands.sh +++ b/home.admin/_commands.sh @@ -1,9 +1,10 @@ #!/bin/bash -# SHORTCUT COMMANDS you can call as user 'admin' from terminal # source aliases from /home/admin/_aliases.sh source /home/admin/_aliases.sh +# SHORTCUT COMMANDS you can call as user 'admin' from terminal + # command: raspiblitz # calls the the raspiblitz mainmenu (legacy) function raspiblitz() { diff --git a/home.admin/config.scripts/bitcoin.testnetworks.sh b/home.admin/config.scripts/bitcoin.testnetworks.sh index d4418d248..e0655fcb4 100644 --- a/home.admin/config.scripts/bitcoin.testnetworks.sh +++ b/home.admin/config.scripts/bitcoin.testnetworks.sh @@ -7,29 +7,36 @@ if [ $# -lt 2 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then exit 1 fi -parallelService=$2 -if [ $parallelService = signet ] || [ $parallelService = testnet ];then - echo "# Installing $parallelService" +testnetwork=$2 +if [ ${testnetwork} = signet ] || [ ${testnetwork} = testnet ];then + echo "# Installing Bitcoin Core instance on ${testnetwork}" else - echo "# $parallelService not supported" + echo "# ${testnetwork} is not supported" exit 1 fi +# prefix for parallel services +if [ ${testnetwork} = testnet ];then + prefix="t" +elif [ ${testnetwork} = signet ];then + prefix="s" +fi + function removeParallelService() { - if [ -f "/etc/systemd/system/${parallelService}d.service" ];then - sudo systemctl stop ${parallelService}d - sudo systemctl disable ${parallelService}d - echo "# Bitcoin Core on ${parallelService} service is stopped and disabled" + if [ -f "/etc/systemd/system/${prefix}bitcoind.service" ];then + sudo systemctl stop ${prefix}bitcoind + sudo systemctl disable ${prefix}bitcoind + echo "# Bitcoin Core on ${testnetwork} service is stopped and disabled" echo fi } function installParallelService() { - # ${parallelService}.conf - if [ ! -f /home/bitcoin/.bitcoin/${parallelService}.conf ];then + # bitcoin.conf + if [ ! -f /home/bitcoin/.bitcoin/bitcoin.conf ];then randomRPCpass=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c8) echo " -# bitcoind configuration for ${parallelService} +# bitcoind configuration for ${testnetwork} # Connection settings rpcuser=raspiblitz @@ -39,25 +46,24 @@ onlynet=onion proxy=127.0.0.1:9050 datadir=/mnt/hdd/bitcoin -" | sudo -u bitcoin tee /home/bitcoin/.bitcoin/${parallelService}.conf +" | sudo -u bitcoin tee /home/bitcoin/.bitcoin/bitcoin.conf else - echo "# /home/bitcoin/.bitcoin/${parallelService}.conf is present" + echo "# /home/bitcoin/.bitcoin/bitcoin.conf is present" fi removeParallelService - # /etc/systemd/system/${parallelService}d.service + # /etc/systemd/system/${prefix}bitcoind.service echo " [Unit] -Description=Bitcoin daemon on ${parallelService} +Description=Bitcoin daemon on ${testnetwork} [Service] User=bitcoin Group=bitcoin Type=forking -PIDFile=/mnt/hdd/bitcoin/${parallelService}d.pid -ExecStart=/usr/local/bin/bitcoind -${parallelService} -daemon \ - -conf=/home/bitcoin/.bitcoin/${parallelService}.conf \ - -pid=/mnt/hdd/bitcoin/${parallelService}d.pid +PIDFile=/mnt/hdd/bitcoin/${prefix}bitcoind.pid +ExecStart=/usr/local/bin/bitcoind -${testnetwork} -daemon \ + -pid=/mnt/hdd/bitcoin/${prefix}bitcoind.pid KillMode=process Restart=always TimeoutSec=120 @@ -67,39 +73,38 @@ StandardError=journal [Install] WantedBy=multi-user.target -" | sudo tee /etc/systemd/system/${parallelService}d.service - sudo systemctl enable ${parallelService}d - echo "# OK - the bitcoin daemon on ${parallelService} service is now enabled" +" | sudo tee /etc/systemd/system/${prefix}bitcoind.service + sudo systemctl enable ${prefix}bitcoind + echo "# OK - the bitcoin daemon on ${testnetwork} service is now enabled" # add aliases - if [ $(alias | grep -c ${parallelService}) -eq 0 ];then - bash -c "echo 'alias ${parallelService}-cli=\"/usr/local/bin/bitcoin-cli\ - -${parallelService}\ - -conf=/home/bitcoin/.bitcoin/${parallelService}.conf\"' \ + if [ $(alias | grep -c ${prefix}bitcoin) -eq 0 ];then + bash -c "echo 'alias ${prefix}bitcoin-cli=\"/usr/local/bin/bitcoin-cli\ + -${testnetwork}\"' \ >> /home/admin/_aliases.sh" - bash -c "echo 'alias ${parallelService}d=\"/usr/local/bin/bitcoind\ - -${parallelService}\ - -conf=/home/bitcoin/.bitcoin/${parallelService}.conf\"' \ + bash -c "echo 'alias ${prefix}bitcoind=\"/usr/local/bin/bitcoind\ + -${testnetwork}\"' \ >> /home/admin/_aliases.sh" fi source /home/admin/raspiblitz.info if [ "${state}" == "ready" ]; then - echo "# OK - the ${parallelService}d.service is enabled, system is ready so starting service" - sudo systemctl start ${parallelService}d + echo "# OK - the ${prefix}bitcoind.service is enabled, system is ready so starting service" + sudo systemctl start ${prefix}bitcoind else - echo "# OK - the ${parallelService}dservice is enabled, to start manually use: 'sudo systemctl start ${parallelService}d'" + echo "# OK - the ${prefix}bitcoindservice is enabled, to start manually use:" + echo "sudo systemctl start ${prefix}bitcoind" fi - isInstalled=$(systemctl status ${parallelService}d | grep -c active) + isInstalled=$(systemctl status ${prefix}bitcoind | grep -c active) if [ $isInstalled -gt 0 ];then - echo "# Installed $(bitcoind --version | grep version) ${parallelService}d.service" + echo "# Installed $(bitcoind --version | grep version) ${prefix}bitcoind.service" echo - echo "# Monitor the ${parallelService} bitcoind with:" - if [ ${parallelService} = signet ]; then - echo "# 'sudo tail -f /mnt/hdd/bitcoin/signet/debug.log'" - elif [ ${parallelService} = testnet ]; then - echo "# 'sudo tail -f /mnt/hdd/bitcoin/testnet3/debug.log'" + echo "# Monitor the ${prefix}bitcoind with:" + if [ ${testnetwork} = signet ]; then + echo "sudo tail -f /mnt/hdd/bitcoin/signet/debug.log" + elif [ ${testnetwork} = testnet ]; then + echo "sudo tail -f /mnt/hdd/bitcoin/testnet3/debug.log" fi echo else @@ -111,15 +116,15 @@ WantedBy=multi-user.target source /mnt/hdd/raspiblitz.conf # add default value to raspi config if needed -if ! grep -Eq "^${parallelService}=" /mnt/hdd/raspiblitz.conf; then - echo "${parallelService}=off" >> /mnt/hdd/raspiblitz.conf +if ! grep -Eq "^${testnetwork}=" /mnt/hdd/raspiblitz.conf; then + echo "${testnetwork}=off" >> /mnt/hdd/raspiblitz.conf fi # switch on if [ "$1" = "1" ] || [ "$1" = "on" ]; then installParallelService # setting value in raspi blitz config - sudo sed -i "s/^${parallelService}=.*/${parallelService}=on/g" /mnt/hdd/raspiblitz.conf + sudo sed -i "s/^${testnetwork}=.*/${testnetwork}=on/g" /mnt/hdd/raspiblitz.conf exit 0 fi @@ -127,7 +132,7 @@ fi if [ "$1" = "0sudo " ] || [ "$1" = "off" ]; then removeParallelService # setting value in raspi blitz config - sudo sed -i "s/^${parallelService}=.*/${parallelService}=off/g" /mnt/hdd/raspiblitz.conf + sudo sed -i "s/^${testnetwork}=.*/${testnetwork}=off/g" /mnt/hdd/raspiblitz.conf exit 0 fi From 6ed8a7a4921bfdb0374947a56f457194531bfd32 Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 10 May 2021 21:58:27 +0100 Subject: [PATCH 0176/1295] use different zmq port on testnetworks --- home.admin/config.scripts/bitcoin.testnetworks.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/home.admin/config.scripts/bitcoin.testnetworks.sh b/home.admin/config.scripts/bitcoin.testnetworks.sh index e0655fcb4..f59b2771e 100644 --- a/home.admin/config.scripts/bitcoin.testnetworks.sh +++ b/home.admin/config.scripts/bitcoin.testnetworks.sh @@ -18,8 +18,10 @@ fi # prefix for parallel services if [ ${testnetwork} = testnet ];then prefix="t" + portprefix=1 elif [ ${testnetwork} = signet ];then prefix="s" + portprefix=3 fi function removeParallelService() { @@ -62,8 +64,10 @@ User=bitcoin Group=bitcoin Type=forking PIDFile=/mnt/hdd/bitcoin/${prefix}bitcoind.pid -ExecStart=/usr/local/bin/bitcoind -${testnetwork} -daemon \ - -pid=/mnt/hdd/bitcoin/${prefix}bitcoind.pid +ExecStart=/usr/local/bin/bitcoind -${testnetwork} -daemon\ + -pid=/mnt/hdd/bitcoin/${prefix}bitcoind.pid\ + -zmqpubrawblock=tcp://127.0.0.1:${portprefix}8332\ + -zmqpubrawtx=tcp://127.0.0.1:${portprefix}8333 KillMode=process Restart=always TimeoutSec=120 From 8ce2298a8f00dd3b276b19495d154671dcac3641 Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 10 May 2021 22:19:33 +0100 Subject: [PATCH 0177/1295] make sure rpcbind is correctly configured --- home.admin/config.scripts/bitcoin.testnetworks.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/home.admin/config.scripts/bitcoin.testnetworks.sh b/home.admin/config.scripts/bitcoin.testnetworks.sh index f59b2771e..a1bc5ae50 100644 --- a/home.admin/config.scripts/bitcoin.testnetworks.sh +++ b/home.admin/config.scripts/bitcoin.testnetworks.sh @@ -51,6 +51,11 @@ datadir=/mnt/hdd/bitcoin " | sudo -u bitcoin tee /home/bitcoin/.bitcoin/bitcoin.conf else echo "# /home/bitcoin/.bitcoin/bitcoin.conf is present" + # make sure rpcbind is correctly configured + bindIP=$(grep -c "^rpcbind=" < /mnt/hdd/${network}/${network}.conf) + if [ $bindIP -gt 0 ];then + sudo sed -i s/^rpcbind=/main.rpcbind=/g /mnt/hdd/${network}/${network}.conf + fi fi removeParallelService From 5166dc70d4415aacd2dfe3bbcb2d9ae783e34281 Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 10 May 2021 22:55:22 +0100 Subject: [PATCH 0178/1295] correct filename in help --- home.admin/config.scripts/bitcoin.testnetworks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/bitcoin.testnetworks.sh b/home.admin/config.scripts/bitcoin.testnetworks.sh index a1bc5ae50..0df6cd2dc 100644 --- a/home.admin/config.scripts/bitcoin.testnetworks.sh +++ b/home.admin/config.scripts/bitcoin.testnetworks.sh @@ -3,7 +3,7 @@ # command info if [ $# -lt 2 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then echo "Install a parallel testnet or signet service" - echo "bitcoin.testnetwork.sh [on|off] [signet|testnet]" + echo "bitcoin.testnetworks.sh [on|off] [signet|testnet]" exit 1 fi From be71ee4770044a89946123523e411d411b001938 Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 10 May 2021 23:13:08 +0100 Subject: [PATCH 0179/1295] c-lightning: add cln.install.sh --- home.admin/config.scripts/cln.install.sh | 230 +++++++++++++++++++++++ 1 file changed, 230 insertions(+) create mode 100644 home.admin/config.scripts/cln.install.sh diff --git a/home.admin/config.scripts/cln.install.sh b/home.admin/config.scripts/cln.install.sh new file mode 100644 index 000000000..985ccfd24 --- /dev/null +++ b/home.admin/config.scripts/cln.install.sh @@ -0,0 +1,230 @@ +#!/bin/bash +# https://lightning.readthedocs.io/ + +# https://github.com/ElementsProject/lightning/releases +CLVERSION=v0.10.0 + +# vars +source /home/admin/raspiblitz.info +source /mnt/hdd/raspiblitz.conf + +# help +if [ $# -eq 0 ]||[ "$1" = "-h" ]||[ "$1" = "--help" ];then + echo + echo "C-lightning install script" + echo "the default version is: $CLVERSION" + echo "setting up on ${chain}net unless otherwise specified" + echo "mainnet / signet / testnet instances can run parallel" + echo + echo "usage:" + echo "cln.install.sh on " + echo "cln.install.sh off " + echo "cln.install.sh [update|commit|testPR]" + echo + exit 1 +fi + +# Tor +TORGROUP="debian-tor" + +# bitcoin mainnet / signet / testnet +if [ "$1" = on ] || [ "$1" = off ] && [ $# -gt 1 ];then + NETWORK=$2 +else + if [ $chain = main ];then + NETWORK=${network} + else + NETWORK=${chain}net + fi +fi + +# prefix for parallel testnetwork services +if [ $NETWORK = testnet ];then + prefix="t" + portprefix=1 +elif [ $NETWORK = signet ];then + prefix="s" + portprefix=3 +else + prefix="" + portprefix="" +fi + +echo "# Running: 'cln.install.sh $*'" +echo "# Using the settings for: ${NETWORK} " + +if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = commit ]||[ "$1" = testPR ];then + if [ ! -f /usr/local/bin/lightningd ]||[ "$1" = update ]||[ "$1" = commit ]||[ "$1" = testPR ];then + # dependencies + echo "# apt update" + echo + sudo apt-get update + echo + echo "# Installing dependencies" + echo + sudo apt-get install -y \ + autoconf automake build-essential git libtool libgmp-dev \ + libsqlite3-dev python3 python3-mako net-tools zlib1g-dev libsodium-dev \ + gettext + + # download and compile from source + cd /home/bitcoin || exit 1 + if [ "$1" = "update" ] || [ "$1" = "testPR" ] || [ "$1" = "commit" ]; then + echo + echo "# Deleting the old source code" + echo + sudo rm -rf lightning + fi + echo + echo "# Cloning https://github.com/ElementsProject/lightning.git" + echo + sudo -u bitcoin git clone https://github.com/ElementsProject/lightning.git + cd lightning || exit 1 + + if [ "$1" = "testPR" ]; then + PRnumber=$2 || exit 1 + echo + echo "# Using the PR:" + echo "# https://github.com/ElementsProject/lightning/pull/$PRnumber" + echo + sudo -u bitcoin git fetch origin pull/$PRnumber/head:pr$PRnumber || exit 1 + sudo -u bitcoin git checkout pr$PRnumber || exit 1 + echo "# Building with EXPERIMENTAL_FEATURES enabled" + sudo -u bitcoin ./configure --enable-experimental-features + elif [ "$1" = "commit" ]; then + echo + echo "# Updating to the latest commit in:" + echo "# https://github.com/ElementsProject/lightning" + echo + echo "# Building with EXPERIMENTAL_FEATURES enabled" + sudo -u bitcoin ./configure --enable-experimental-features + else + if [ "$1" = "update" ]; then + CLVERSION=$2 + echo "# Updating to the version $CLVERSION" + fi + sudo -u bitcoin git reset --hard $CLVERSION + sudo -u bitcoin ./configure + fi + + currentCLversion=$(cd /home/bitcoin/lightning 2>/dev/null; \ + git describe --tags 2>/dev/null) + sudo -u bitcoin ./configure + echo + echo "# Building from source C-lightning $currentCLversion" + echo + sudo -u bitcoin make + echo + echo "# Built C-lightning $currentCLversion" + echo + echo "# Install to /usr/local/bin/" + echo + sudo make install || exit 1 + # clean up + # cd .. && rm -rf lightning + else + installedVersion=$(sudo -u bitcoin /usr/local/bin/lightningd --version) + echo "# C-lightning ${installedVersion} is already installed" + fi + + # config + echo "# Make sure bitcoin is in the ${TORGROUP} group" + sudo usermod -a -G ${TORGROUP} bitcoin + + echo "# Store the lightning data in /mnt/hdd/app-data/.lightning" + echo "# Symlink to /home/bitcoin/" + sudo rm -rf /home/bitcoin/.lightning # not a symlink, delete + sudo mkdir -p /mnt/hdd/app-data/.lightning + sudo ln -s /mnt/hdd/app-data/.lightning /home/bitcoin/ + echo "# Create /home/bitcoin/.lightning/${prefix}config" + if [ ! -f /home/bitcoin/.lightning/${prefix}config ];then + echo " +# lightningd configuration for $NETWORK + +network=$NETWORK +announce-addr=127.0.0.1:${portprefix}9736 +log-file=cl.log +log-level=debug + +# Tor settings +proxy=127.0.0.1:9050 +bind-addr=127.0.0.1:${portprefix}9736 +addr=statictor:127.0.0.1:9051 +always-use-proxy=true +" | sudo tee /home/bitcoin/.lightning/${prefix}config + else + echo "# The file /home/bitcoin/.lightning/${prefix}config is already present" + fi + sudo chown -R bitcoin:bitcoin /mnt/hdd/app-data/.lightning + sudo chown -R bitcoin:bitcoin /home/bitcoin/ + + # systemd service + sudo systemctl stop lightningd + echo "# Create /etc/systemd/system/lightningd.service" + echo " +[Unit] +Description=c-lightning daemon on $NETWORK + +[Service] +User=bitcoin +Group=bitcoin +Type=simple +ExecStart=/usr/local/bin/lightningd\ + --lightning-dir=\"/home/bitcoin/.lightning/\"\ + --conf=\"/home/bitcoin/.lightning/${prefix}config\" +KillMode=process +Restart=always +TimeoutSec=120 +RestartSec=30 +StandardOutput=null +StandardError=journal + +[Install] +WantedBy=multi-user.target +" | sudo tee /etc/systemd/system/${prefix}lightningd.service + sudo systemctl daemon-reload + sudo systemctl enable ${prefix}lightningd + echo "# Enabled the ${prefix}lightningd.service" + if [ "${state}" == "ready" ]; then + sudo systemctl start ${prefix}lightningd + echo "# Started the ${prefix}lightningd.service" + fi + echo + echo "# Adding aliases" + echo "\ +alias ${prefix}lightning-cli=\"sudo -u bitcoin /usr/local/bin/lightning-cli\ + --conf=/home/bitcoin/.lightning/${prefix}config\ + --lightning-dir=/home/bitcoin/.lightning \" +alias ${prefix}cl=\"sudo -u bitcoin /usr/local/bin/lightning-cli\ + --conf=/home/bitcoin/.lightning/${prefix}config\ + --lightning-dir=/home/bitcoin/.lightning \"\ +" | sudo tee -a /home/admin/_aliases.sh + + echo + echo "# The installed C-lightning version is: $(sudo -u bitcoin /usr/local/bin/lightningd --version)" + echo + echo "# To activate the aliases reopen the terminal or use:" + echo "source ~/_aliases.sh" + echo "# Monitor the ${prefix}lightningd with:" + echo "sudo journalctl -fu ${prefix}lightningd" + echo "sudo systemctl status ${prefix}lightningd" + echo "# logs:" + echo "sudo tail -f /home/bitcoin/.lightning/${testnetwork}/cl.log" + echo "# for the command line options use" + echo "${prefix}lightning-cli help" + echo +fi + +if [ "$1" = "off" ];then + echo "# Removing the ${prefix}lightningd.service" + sudo systemctl disable ${prefix}lightningd + sudo systemctl stop ${prefix}lightningd + echo "# Removing the aliases" + sudo sed -i "/${prefix}lightning-cli/d" /home/admin/_aliases.sh + sudo sed -i "/${prefix}cl/d" /home/admin/_aliases.sh + if [ "$(echo "$@" | grep -c purge)" -gt 0 ];then + echo "# Removing the binaries" + sudo rm -f /usr/local/bin/lightningd + sudo rm -f /usr/local/bin/lightning-cli + fi +fi From 74b775085c141d59299211aab275c39b379db572 Mon Sep 17 00:00:00 2001 From: openoms Date: Tue, 11 May 2021 00:11:58 +0100 Subject: [PATCH 0180/1295] remove --lightning-dir (using the default) --- home.admin/config.scripts/cln.install.sh | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/home.admin/config.scripts/cln.install.sh b/home.admin/config.scripts/cln.install.sh index 985ccfd24..d03edf814 100644 --- a/home.admin/config.scripts/cln.install.sh +++ b/home.admin/config.scripts/cln.install.sh @@ -170,7 +170,6 @@ User=bitcoin Group=bitcoin Type=simple ExecStart=/usr/local/bin/lightningd\ - --lightning-dir=\"/home/bitcoin/.lightning/\"\ --conf=\"/home/bitcoin/.lightning/${prefix}config\" KillMode=process Restart=always @@ -193,11 +192,9 @@ WantedBy=multi-user.target echo "# Adding aliases" echo "\ alias ${prefix}lightning-cli=\"sudo -u bitcoin /usr/local/bin/lightning-cli\ - --conf=/home/bitcoin/.lightning/${prefix}config\ - --lightning-dir=/home/bitcoin/.lightning \" + --conf=/home/bitcoin/.lightning/${prefix}config alias ${prefix}cl=\"sudo -u bitcoin /usr/local/bin/lightning-cli\ --conf=/home/bitcoin/.lightning/${prefix}config\ - --lightning-dir=/home/bitcoin/.lightning \"\ " | sudo tee -a /home/admin/_aliases.sh echo From f80eb86a3d6bed80a9f8337c1ebc33503c577b9d Mon Sep 17 00:00:00 2001 From: openoms Date: Tue, 11 May 2021 07:31:20 +0100 Subject: [PATCH 0181/1295] rename to network.bitcoinchains.sh --- ...stnetworks.sh => network.bitcoinchains.sh} | 80 ++++++++++++------- 1 file changed, 50 insertions(+), 30 deletions(-) rename home.admin/config.scripts/{bitcoin.testnetworks.sh => network.bitcoinchains.sh} (59%) diff --git a/home.admin/config.scripts/bitcoin.testnetworks.sh b/home.admin/config.scripts/network.bitcoinchains.sh similarity index 59% rename from home.admin/config.scripts/bitcoin.testnetworks.sh rename to home.admin/config.scripts/network.bitcoinchains.sh index a1bc5ae50..6f292ceff 100644 --- a/home.admin/config.scripts/bitcoin.testnetworks.sh +++ b/home.admin/config.scripts/network.bitcoinchains.sh @@ -2,33 +2,44 @@ # command info if [ $# -lt 2 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then - echo "Install a parallel testnet or signet service" - echo "bitcoin.testnetwork.sh [on|off] [signet|testnet]" + echo + echo "Install or remove parallel chains for Bitcoin Core" + echo "network.bitcoinchains.sh [on|off] [signet|testnet|mainnet]" + echo exit 1 fi -testnetwork=$2 -if [ ${testnetwork} = signet ] || [ ${testnetwork} = testnet ];then - echo "# Installing Bitcoin Core instance on ${testnetwork}" +# CHAIN is signet | testnet | mainnet +CHAIN=$2 +if [ ${CHAIN} = signet ]||[ ${CHAIN} = testnet ]||[ ${CHAIN} = mainnet ];then + echo "# Installing Bitcoin Core instance on ${CHAIN}" else - echo "# ${testnetwork} is not supported" + echo "# ${CHAIN} is not supported" exit 1 fi # prefix for parallel services -if [ ${testnetwork} = testnet ];then +if [ ${CHAIN} = testnet ];then prefix="t" portprefix=1 -elif [ ${testnetwork} = signet ];then +elif [ ${CHAIN} = signet ];then prefix="s" portprefix=3 -fi +elif [ ${CHAIN} = mainnet ];then + prefix="" + portprefix="" +fi function removeParallelService() { if [ -f "/etc/systemd/system/${prefix}bitcoind.service" ];then + if [ ${CHAIN} != mainnet ];then + /usr/local/bin/bitcoin-cli -${CHAIN} stop + else + /usr/local/bin/bitcoin-cli stop + fi sudo systemctl stop ${prefix}bitcoind sudo systemctl disable ${prefix}bitcoind - echo "# Bitcoin Core on ${testnetwork} service is stopped and disabled" + echo "# Bitcoin Core on ${CHAIN} service is stopped and disabled" echo fi } @@ -38,7 +49,7 @@ function installParallelService() { if [ ! -f /home/bitcoin/.bitcoin/bitcoin.conf ];then randomRPCpass=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c8) echo " -# bitcoind configuration for ${testnetwork} +# bitcoind configuration for ${CHAIN} # Connection settings rpcuser=raspiblitz @@ -59,17 +70,20 @@ datadir=/mnt/hdd/bitcoin fi removeParallelService - # /etc/systemd/system/${prefix}bitcoind.service - echo " + if [ ${CHAIN} = mainnet ];then + sudo cp /home/admin/assets/${network}d.service /etc/systemd/system/${network}d.service + else + # /etc/systemd/system/${prefix}bitcoind.service + echo " [Unit] -Description=Bitcoin daemon on ${testnetwork} +Description=Bitcoin daemon on ${CHAIN} [Service] User=bitcoin Group=bitcoin Type=forking PIDFile=/mnt/hdd/bitcoin/${prefix}bitcoind.pid -ExecStart=/usr/local/bin/bitcoind -${testnetwork} -daemon\ +ExecStart=/usr/local/bin/bitcoind -${CHAIN} -daemon\ -pid=/mnt/hdd/bitcoin/${prefix}bitcoind.pid\ -zmqpubrawblock=tcp://127.0.0.1:${portprefix}8332\ -zmqpubrawtx=tcp://127.0.0.1:${portprefix}8333 @@ -83,17 +97,21 @@ StandardError=journal [Install] WantedBy=multi-user.target " | sudo tee /etc/systemd/system/${prefix}bitcoind.service + fi + sudo systemctl daemon-reload sudo systemctl enable ${prefix}bitcoind - echo "# OK - the bitcoin daemon on ${testnetwork} service is now enabled" + echo "# OK - the bitcoin daemon on ${CHAIN} service is now enabled" # add aliases - if [ $(alias | grep -c ${prefix}bitcoin) -eq 0 ];then - bash -c "echo 'alias ${prefix}bitcoin-cli=\"/usr/local/bin/bitcoin-cli\ - -${testnetwork}\"' \ - >> /home/admin/_aliases.sh" - bash -c "echo 'alias ${prefix}bitcoind=\"/usr/local/bin/bitcoind\ - -${testnetwork}\"' \ - >> /home/admin/_aliases.sh" + if [ ${CHAIN} != mainnet ];then + if [ $(alias | grep -c ${prefix}bitcoin) -eq 0 ];then + bash -c "echo 'alias ${prefix}bitcoin-cli=\"/usr/local/bin/bitcoin-cli\ + -${CHAIN}\"' \ + >> /home/admin/_aliases.sh" + bash -c "echo 'alias ${prefix}bitcoind=\"/usr/local/bin/bitcoind\ + -${CHAIN}\"' \ + >> /home/admin/_aliases.sh" + fi fi source /home/admin/raspiblitz.info @@ -110,10 +128,12 @@ WantedBy=multi-user.target echo "# Installed $(bitcoind --version | grep version) ${prefix}bitcoind.service" echo echo "# Monitor the ${prefix}bitcoind with:" - if [ ${testnetwork} = signet ]; then + if [ ${CHAIN} = signet ]; then echo "sudo tail -f /mnt/hdd/bitcoin/signet/debug.log" - elif [ ${testnetwork} = testnet ]; then + elif [ ${CHAIN} = testnet ]; then echo "sudo tail -f /mnt/hdd/bitcoin/testnet3/debug.log" + elif [ ${CHAIN} = mainnet ]; then + echo "sudo tail -f /mnt/hdd/bitcoin/debug.log" fi echo else @@ -125,23 +145,23 @@ WantedBy=multi-user.target source /mnt/hdd/raspiblitz.conf # add default value to raspi config if needed -if ! grep -Eq "^${testnetwork}=" /mnt/hdd/raspiblitz.conf; then - echo "${testnetwork}=off" >> /mnt/hdd/raspiblitz.conf +if ! grep -Eq "^${CHAIN}=" /mnt/hdd/raspiblitz.conf; then + echo "${CHAIN}=off" >> /mnt/hdd/raspiblitz.conf fi # switch on if [ "$1" = "1" ] || [ "$1" = "on" ]; then installParallelService # setting value in raspi blitz config - sudo sed -i "s/^${testnetwork}=.*/${testnetwork}=on/g" /mnt/hdd/raspiblitz.conf + sudo sed -i "s/^${CHAIN}=.*/${CHAIN}=on/g" /mnt/hdd/raspiblitz.conf exit 0 fi # switch off -if [ "$1" = "0sudo " ] || [ "$1" = "off" ]; then +if [ "$1" = "0" ] || [ "$1" = "off" ]; then removeParallelService # setting value in raspi blitz config - sudo sed -i "s/^${testnetwork}=.*/${testnetwork}=off/g" /mnt/hdd/raspiblitz.conf + sudo sed -i "s/^${CHAIN}=.*/${CHAIN}=off/g" /mnt/hdd/raspiblitz.conf exit 0 fi From 99001cd478c449513550b30d8540da30bf478380 Mon Sep 17 00:00:00 2001 From: openoms Date: Tue, 11 May 2021 11:11:47 +0100 Subject: [PATCH 0182/1295] cln.install: stop service before modifying --- home.admin/config.scripts/cln.install.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/home.admin/config.scripts/cln.install.sh b/home.admin/config.scripts/cln.install.sh index d03edf814..63f6ac424 100644 --- a/home.admin/config.scripts/cln.install.sh +++ b/home.admin/config.scripts/cln.install.sh @@ -159,8 +159,10 @@ always-use-proxy=true sudo chown -R bitcoin:bitcoin /home/bitcoin/ # systemd service - sudo systemctl stop lightningd - echo "# Create /etc/systemd/system/lightningd.service" + /usr/local/bin/lightning-cli --$NETWORK stop + sudo systemctl stop ${prefix}lightningd + sudo systemctl disable ${prefix}lightningd + echo "# Create /etc/systemd/system/${prefix}lightningd.service" echo " [Unit] Description=c-lightning daemon on $NETWORK @@ -206,7 +208,7 @@ alias ${prefix}cl=\"sudo -u bitcoin /usr/local/bin/lightning-cli\ echo "sudo journalctl -fu ${prefix}lightningd" echo "sudo systemctl status ${prefix}lightningd" echo "# logs:" - echo "sudo tail -f /home/bitcoin/.lightning/${testnetwork}/cl.log" + echo "sudo tail -f /home/bitcoin/.lightning/${NETWORK}/cl.log" echo "# for the command line options use" echo "${prefix}lightning-cli help" echo From 024f5a5bf181c1033a627313f175c15cd92f2e2c Mon Sep 17 00:00:00 2001 From: openoms Date: Tue, 11 May 2021 11:12:49 +0100 Subject: [PATCH 0183/1295] correct zmq entries --- .../config.scripts/network.bitcoinchains.sh | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/home.admin/config.scripts/network.bitcoinchains.sh b/home.admin/config.scripts/network.bitcoinchains.sh index 6f292ceff..26aa33969 100644 --- a/home.admin/config.scripts/network.bitcoinchains.sh +++ b/home.admin/config.scripts/network.bitcoinchains.sh @@ -21,13 +21,16 @@ fi # prefix for parallel services if [ ${CHAIN} = testnet ];then prefix="t" - portprefix=1 + bitcoinprefix=test + zmqprefix=21 elif [ ${CHAIN} = signet ];then prefix="s" - portprefix=3 + bitcoinprefix=signet + zmqprefix=23 elif [ ${CHAIN} = mainnet ];then prefix="" - portprefix="" + bitcoinprefix=main + zmqprefix=28 fi function removeParallelService() { @@ -54,6 +57,8 @@ function installParallelService() { # Connection settings rpcuser=raspiblitz rpcpassword=$randomRPCpass +${bitcoinprefix}.zmqpubrawblock=tcp://127.0.0.1:${zmqprefix}332 +${bitcoinprefix}.zmqpubrawtx=tcp://127.0.0.1:${zmqprefix}333 onlynet=onion proxy=127.0.0.1:9050 @@ -67,6 +72,14 @@ datadir=/mnt/hdd/bitcoin if [ $bindIP -gt 0 ];then sudo sed -i s/^rpcbind=/main.rpcbind=/g /mnt/hdd/${network}/${network}.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 + 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 + fi fi removeParallelService @@ -84,9 +97,7 @@ Group=bitcoin Type=forking PIDFile=/mnt/hdd/bitcoin/${prefix}bitcoind.pid ExecStart=/usr/local/bin/bitcoind -${CHAIN} -daemon\ - -pid=/mnt/hdd/bitcoin/${prefix}bitcoind.pid\ - -zmqpubrawblock=tcp://127.0.0.1:${portprefix}8332\ - -zmqpubrawtx=tcp://127.0.0.1:${portprefix}8333 + -pid=/mnt/hdd/bitcoin/${prefix}bitcoind.pid KillMode=process Restart=always TimeoutSec=120 From f3b921781a029516d9f64fdd5e5b74385af73ed7 Mon Sep 17 00:00:00 2001 From: openoms Date: Tue, 11 May 2021 11:13:57 +0100 Subject: [PATCH 0184/1295] add lnd.chain.sh: LND services on parallel chains --- home.admin/config.scripts/lnd.chain.sh | 172 +++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 home.admin/config.scripts/lnd.chain.sh diff --git a/home.admin/config.scripts/lnd.chain.sh b/home.admin/config.scripts/lnd.chain.sh new file mode 100644 index 000000000..54fcde466 --- /dev/null +++ b/home.admin/config.scripts/lnd.chain.sh @@ -0,0 +1,172 @@ +#!/bin/bash + +# command info +if [ $# -lt 2 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then + echo + echo "Install or remove LND services on parallel chains" + echo "lnd.chains.sh [on|off] [signet|testnet|mainnet]" + echo + exit 1 +fi + +# CHAIN is signet | testnet | mainnet +CHAIN=$2 +if [ ${CHAIN} = testnet ]||[ ${CHAIN} = mainnet ];then + echo "# Installing the LND instance on ${CHAIN}" +elif [ ${CHAIN} = signet ]; then + echo "# Signet is not yet supported in LND" + echo "# see https://github.com/lightningnetwork/lnd/issues/5018" + exit 1 +else + echo "# ${CHAIN} is not supported" + exit 1 +fi + +# prefix for parallel services +if [ ${CHAIN} = testnet ];then + prefix="t" + portprefix=1 + zmqprefix=21 +elif [ ${CHAIN} = signet ];then + prefix="s" + portprefix=3 + zmqprefix=23 +elif [ ${CHAIN} = mainnet ];then + prefix="" + portprefix="" + zmqprefix=28 +fi + +function removeParallelService() { + if [ -f "/etc/systemd/system/${prefix}bitcoind.service" ];then + sudo -u bitcoin /usr/local/bin/lncli\ + --rpcserver localhost:1${portprefix}009 stop + sudo systemctl stop ${prefix}lnd + sudo systemctl disable ${prefix}lnd + echo "# ${prefix}lnd.service on ${CHAIN} is stopped and disabled" + echo + fi +} + +source /home/admin/raspiblitz.info +source /mnt/hdd/raspiblitz.conf + +# switch on +if [ "$1" = "1" ] || [ "$1" = "on" ]; then + + echo "# Create /home/bitcoin/.lnd/${prefix}lnd.conf" + if [ ! -f /home/bitcoin/.lnd/${prefix}lnd.conf ];then + RPCUSER=$(sudo cat /mnt/hdd/${network}/${network}.conf | grep rpcuser | cut -c 9-) + RPCPSW=$(sudo cat /mnt/hdd/${network}/${network}.conf | grep rpcpassword | cut -c 13-) + echo " +# LND configuration +bitcoin.${CHAIN}=1 + +[Application Options] +# alias=ALIAS # up to 32 UTF-8 characters +# color=COLOR # choose from: https://www.color-hex.com/ +listen=0.0.0.0:${portprefix}9735 +rpclisten=0.0.0.0:1${portprefix}009 +restlisten=0.0.0.0:${portprefix}8080 +accept-keysend=true +nat=false +debuglevel=debug +gc-canceled-invoices-on-startup=true +gc-canceled-invoices-on-the-fly=true +ignore-historical-gossip-filters=1 +sync-freelist=true +stagger-initial-reconnect=true +tlsautorefresh=1 +tlsdisableautofill=1 +tlscertpath=/home/bitcoin/.lnd/tls.cert +tlskeypath=/home/bitcoin/.lnd/tls.key + +[Bitcoin] +bitcoin.active=1 +bitcoin.node=bitcoind + +[bitcoind] +bitcoind.rpcuser=$RPCUSER +bitcoind.rpcpass=$RPCPSW +bitcoind.zmqpubrawblock=tcp://127.0.0.1:${zmqprefix}332 +bitcoind.zmqpubrawtx=tcp://127.0.0.1:${zmqprefix}333 + +[Watchtower] +watchtower.active=1 +watchtower.listen=0.0.0.0:${portprefix}9111 + +[Wtclient] +wtclient.active=1 + +[Tor] +tor.active=true +tor.streamisolation=true +tor.v3=true +" | sudo -u bitcoin tee /home/bitcoin/.lnd/${prefix}lnd.conf + else + echo "# The file /home/bitcoin/.lnd/${prefix}lnd.conf is already present" + fi + + # systemd service + removeParallelService + echo "# Create /etc/systemd/system/.lnd.service" + echo " +[Unit] +Description=LND on $NETWORK + +[Service] +User=bitcoin +Group=bitcoin +Type=simple +ExecStart=/usr/local/bin/lnd\ + --configfile=/home/bitcoin/.lnd/${prefix}lnd.conf +KillMode=process +Restart=always +TimeoutSec=120 +RestartSec=30 +StandardOutput=null +StandardError=journal + +[Install] +WantedBy=multi-user.target +" | sudo tee /etc/systemd/system/${prefix}lnd.service + sudo systemctl enable ${prefix}lnd + echo "# Enabled the ${prefix}lnd.service" + if [ "${state}" == "ready" ]; then + sudo systemctl start ${prefix}lnd + echo "# Started the ${prefix}lnd.service" + fi + + echo + echo "# Adding aliases" + echo "\ +alias ${prefix}lncli=\"sudo -u bitcoin /usr/local/bin/lncli\ + --rpcserver localhost:1${portprefix}009\"\ +" | sudo tee -a /home/admin/_aliases.sh + + echo + echo "# The installed LND version is: $(sudo -u bitcoin /usr/local/bin/lnd --version)" + echo + echo "# To activate the aliases reopen the terminal or use:" + echo "source ~/_aliases.sh" + echo "# Monitor the ${prefix}lnd with:" + echo "sudo journalctl -fu ${prefix}lnd" + echo "sudo systemctl status ${prefix}lnd" + echo "# logs:" + echo "sudo tail -f /home/bitcoin/.lnd/logs/bitcoin/${CHAIN}/lnd.log" + echo "# for the command line options use" + echo "${prefix}lncli help" + echo + + exit 0 +fi + +# switch off +if [ "$1" = "0" ] || [ "$1" = "off" ]; then + removeParallelService + exit 0 +fi + +echo "# FAIL - Unknown Parameter $1" +echo "# may need reboot to run" +exit 1 \ No newline at end of file From 30470b4ece17f47736d4ba006d572df427ea98fb Mon Sep 17 00:00:00 2001 From: openoms Date: Tue, 11 May 2021 11:44:55 +0100 Subject: [PATCH 0185/1295] lnd: include CHAIN in alias --- home.admin/config.scripts/lnd.chain.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/lnd.chain.sh b/home.admin/config.scripts/lnd.chain.sh index 54fcde466..89f10ccc0 100644 --- a/home.admin/config.scripts/lnd.chain.sh +++ b/home.admin/config.scripts/lnd.chain.sh @@ -141,7 +141,7 @@ WantedBy=multi-user.target echo "# Adding aliases" echo "\ alias ${prefix}lncli=\"sudo -u bitcoin /usr/local/bin/lncli\ - --rpcserver localhost:1${portprefix}009\"\ + -n=${CHAIN} --rpcserver localhost:1${portprefix}009\"\ " | sudo tee -a /home/admin/_aliases.sh echo From aaa9f4dde73c50d9e73968e8cb570851add8ae1c Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 13 May 2021 14:31:15 +0200 Subject: [PATCH 0186/1295] DHCP event --- home.admin/00infoLCD.sh | 6 +-- home.admin/_bootstrap.sh | 6 +-- home.admin/setup.scripts/eventInfoWait.sh | 49 +++++++++++++++++++---- 3 files changed, 48 insertions(+), 13 deletions(-) diff --git a/home.admin/00infoLCD.sh b/home.admin/00infoLCD.sh index 68028b435..ab3f44166 100755 --- a/home.admin/00infoLCD.sh +++ b/home.admin/00infoLCD.sh @@ -126,8 +126,8 @@ while : continue fi - # waiting for DHCP in general - if [ "${state}" = "noIP" ]; then + # waiting for local IP + if [ "${state}" = "noIP-LAN" ] || [ "${state}" = "noIP-WIFI" ]; then l1="Waiting for Network ...\n" l2="Not able to get local IP.\n" l3="LAN cable connected? WIFI lost?\n" @@ -136,7 +136,7 @@ while : continue fi - # waiting for DHCP in general + # waiting for Internet if [ "${state}" = "noInternet" ]; then l1="Waiting for Internet ...\n" l2="Local Network seems OK but no Internet.\n" diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index eb168e439..6a58876ce 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -316,16 +316,16 @@ do # check state of network if [ ${dhcp} -eq 0 ]; then # display user waiting for DHCP - sed -i "s/^state=.*/state=noDCHP/g" ${infoFile} + sed -i "s/^state=.*/state=noDHCP/g" ${infoFile} sed -i "s/^message=.*/message='Waiting for DHCP'/g" ${infoFile} elif [ ${#localip} -eq 0 ]; then if [ ${configWifiExists} -eq 0 ]; then # display user to connect LAN - sed -i "s/^state=.*/state=noIP/g" ${infoFile} + sed -i "s/^state=.*/state=noIP-LAN/g" ${infoFile} sed -i "s/^message=.*/message='Connect the LAN/WAN'/g" ${infoFile} else # display user that wifi settings are not working - sed -i "s/^state=.*/state=noIP/g" ${infoFile} + sed -i "s/^state=.*/state=noIP-WIFI/g" ${infoFile} sed -i "s/^message=.*/message='WIFI Settings not working'/g" ${infoFile} fi elif [ ${online} -eq 0 ]; then diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index 2bacd75b7..3d1e199a6 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -41,15 +41,50 @@ elif [ "${eventID}" == "reboot" ]; then Shutting down for reboot. " 5 30 +elif [ "${eventID}" == "noDHCP" ]; then -elif [ "${eventID}" == "noHDD" ]; then - - # contentWords[0] --> size string (for example '1TB') + # this event is mostly for LCD/HDMI display + # because if device gets no local IP + # SSH & WEBUI would not have connected yet dialog --backtitle "${backtitle}" --cr-wrap --infobox " -Waiting for HDD/SSD -Please connect minimum ${contentWords[0]} -HDD or SSD to the the device. -" 7 34 +Waiting for local IP address ... +If this takes too long please check +your connection to internet router. +" 7 41 + +elif [ "${eventID}" = "noIP-LAN" ] || [ "${eventID}" = "noIP-WIFI" ]; then + + # this event is mostly for LCD/HDMI display + # because if device gets no local IP + # SSH & WEBUI would not have connected yet + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Waiting for Network ... +Not able to get local IP. +LAN cable connected? WIFI lost? +" 7 41 + +elif [ "${eventID}" = "noInternet" ]; then + + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Waiting for Internet ... +Local Network seems OK but no Internet. +Is your router still online? +" 7 43 + +elif [ "${eventID}" = "noInternet" ]; then + + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Waiting for Internet ... +Local Network seems OK but no Internet. +Is your router still online? +" 7 43 + +elif [ "${eventID}" == "inspect-hdd" ]; then + + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Checking HDD/SSD ... +Please wait. +" 6 26 elif [ "${eventID}" == "sdtoosmall" ]; then From 4ddfa473e83e13776106af782c0f4e771c96c793 Mon Sep 17 00:00:00 2001 From: /rootzoll Date: Thu, 13 May 2021 18:45:09 +0200 Subject: [PATCH 0187/1295] #2247 fix IP2Tor/Letsencrypt subscriptions (#2298) --- .../blitz.subscriptions.letsencrypt.py | 4 +-- .../config.scripts/bonus.letsencrypt.sh | 26 ++++++++++++------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py b/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py index beecb5ef3..25d81af11 100755 --- a/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py +++ b/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py @@ -46,8 +46,8 @@ cfg.reload() # todo: make sure that also ACME script uses TOR if activated session = requests.session() -if cfg.run_behind_tor.value: - session.proxies = {'http': 'socks5h://127.0.0.1:9050', 'https': 'socks5h://127.0.0.1:9050'} +# if cfg.run_behind_tor.value: +# session.proxies = {'http': 'socks5h://127.0.0.1:9050', 'https': 'socks5h://127.0.0.1:9050'} ##################### diff --git a/home.admin/config.scripts/bonus.letsencrypt.sh b/home.admin/config.scripts/bonus.letsencrypt.sh index 122b9248f..2b01b5f13 100755 --- a/home.admin/config.scripts/bonus.letsencrypt.sh +++ b/home.admin/config.scripts/bonus.letsencrypt.sh @@ -22,16 +22,17 @@ ACME_CERT_HOME="${ACME_CONFIG_HOME}/certs" ACME_IS_INSTALLED=0 # if Tor is on test that CURL is by default running over Tor -if [ "${runBehindTor}" == "on" ]; then - echo "# checking if Tor proxy for CURL is working ..." - checkTor=$(curl -s https://check.torproject.org | grep -c "Congratulations") - if [ ${checkTor} -eq 0 ]; then - echo "err='curl tor proxy not working'" - exit 1 - else - echo "# OK Tor proxy for CURL" - fi -fi +# TODO: issue https://github.com/rootzoll/raspiblitz/issues/1341 +#if [ "${runBehindTor}" == "on" ]; then +# echo "# checking if Tor proxy for CURL is working ..." +# checkTor=$(curl -s https://check.torproject.org | grep -c "Congratulations") +# if [ ${checkTor} -eq 0 ]; then +# echo "err='curl tor proxy not working'" +# exit 1 +# else +# echo "# OK Tor proxy for CURL" +# fi +#fi ################### # FUNCTIONS @@ -139,13 +140,18 @@ function refresh_certs_with_nginx() { fi certsDirectories=$(sudo ls ${ACME_CERT_HOME}) + echo "# certsDirectories(${certsDirectories})" directoryArray=(`echo "${certsDirectories}" | tr ' ' ' '`) for i in "${directoryArray[@]}"; do FQDN=$(echo "${i}" | cut -d "_" -f1) + echo "# i(${i})" + echo "# FQDN(${FQDN})" # check if there is a LetsEncrypt Subscription for this domain details=$(/home/admin/config.scripts/blitz.subscriptions.letsencrypt.py subscription-detail $FQDN) if [ ${#details} -gt 10 ]; then + echo "# details(${details})" + # get target for that domain options=$(echo "${details}" | jq -r ".target") From 9ae4089994964c6e321cf646ec45c8e1fe20eb2b Mon Sep 17 00:00:00 2001 From: Igor Bubelov Date: Mon, 17 May 2021 00:30:05 +0700 Subject: [PATCH 0188/1295] Remove documentation for non-existent feature (#2281) --- README.md | 6 ------ pictures/repairmenu.png | Bin 36327 -> 111307 bytes 2 files changed, 6 deletions(-) diff --git a/README.md b/README.md index 2b013979f..e232d89b2 100644 --- a/README.md +++ b/README.md @@ -823,12 +823,6 @@ The `REPAIR` menu gives you options to check and reset your RaspiBlitz. The options are explained in detail below: -##### HARDWARE: Run Hardware Test - -This will start the hardware test to identify if your RaspiBlitz is in good shape and can provide a stable service. - -Use this option if you see under-voltage reports on your LCD display or you think your RaspiBlitz gets very hot. - ##### SOFTWARE: Run Software Tests (DebugReport) This will print out a lot of information that can be used to find software problems. diff --git a/pictures/repairmenu.png b/pictures/repairmenu.png index b1b3213950117cdb60c54a17808157715216558a..e1e5f3ebe0c941791ca58cd06836e13d87442ea2 100644 GIT binary patch literal 111307 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

J6+v_SJ?)Ed)EB~p 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

k1FmYI=Br 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 literal 36327 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

|^sBfp(Uv9Ix01bHnv{nCS$dPgl=qp?1!5j^z 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 From bf2ed794fca9e56449eb9106642704ac0418e9bf Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 17 May 2021 11:19:47 +0100 Subject: [PATCH 0189/1295] bitcoinchains: fix rpcport for all networks --- .../config.scripts/network.bitcoinchains.sh | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/home.admin/config.scripts/network.bitcoinchains.sh b/home.admin/config.scripts/network.bitcoinchains.sh index 26aa33969..6fbc10cda 100644 --- a/home.admin/config.scripts/network.bitcoinchains.sh +++ b/home.admin/config.scripts/network.bitcoinchains.sh @@ -22,15 +22,18 @@ fi if [ ${CHAIN} = testnet ];then prefix="t" bitcoinprefix=test - zmqprefix=21 + zmqprefix=21 # zmqpubrawblock=21332 zmqpubrawtx=21333 + rpcprefix=1 # rpcport=18332 elif [ ${CHAIN} = signet ];then prefix="s" bitcoinprefix=signet zmqprefix=23 + rpcprefix=3 elif [ ${CHAIN} = mainnet ];then prefix="" bitcoinprefix=main zmqprefix=28 + rpcprefix="" fi function removeParallelService() { @@ -68,13 +71,18 @@ datadir=/mnt/hdd/bitcoin else echo "# /home/bitcoin/.bitcoin/bitcoin.conf is present" # make sure rpcbind is correctly configured - bindIP=$(grep -c "^rpcbind=" < /mnt/hdd/${network}/${network}.conf) - if [ $bindIP -gt 0 ];then - sudo sed -i s/^rpcbind=/main.rpcbind=/g /mnt/hdd/${network}/${network}.conf - fi + sudo sed -i s/^rpcbind=/main.rpcbind=/g /mnt/hdd/${network}/${network}.conf + + # 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 + echo "\ +${bitcoinprefix}.rpcport=${rpcprefix}8332"|\ + sudo tee -a /mnt/hdd/${network}/${network}.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 + if [ $(grep -c "${bitcoinprefix}.zmqpubrawblock" < /mnt/hdd/${network}/${network}.conf) -eq 0 ];then echo "\ ${bitcoinprefix}.zmqpubrawblock=tcp://127.0.0.1:${zmqprefix}332 ${bitcoinprefix}.zmqpubrawtx=tcp://127.0.0.1:${zmqprefix}333"|\ @@ -149,6 +157,8 @@ WantedBy=multi-user.target echo else echo "# Installation failed" + echo "# See:" + echo "# sudo journalctl -fu ${prefix}bitcoind" exit 1 fi } From 4aa843a6ec161d6334d29754c0741f5c1f8d6dcb Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 17 May 2021 11:38:47 +0100 Subject: [PATCH 0190/1295] add signet.addnode entries --- .../config.scripts/network.bitcoinchains.sh | 43 +++++++++++++------ 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/home.admin/config.scripts/network.bitcoinchains.sh b/home.admin/config.scripts/network.bitcoinchains.sh index 6fbc10cda..09a416add 100644 --- a/home.admin/config.scripts/network.bitcoinchains.sh +++ b/home.admin/config.scripts/network.bitcoinchains.sh @@ -53,6 +53,7 @@ function removeParallelService() { function installParallelService() { # bitcoin.conf if [ ! -f /home/bitcoin/.bitcoin/bitcoin.conf ];then + # add minimal config randomRPCpass=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c8) echo " # bitcoind configuration for ${CHAIN} @@ -70,22 +71,40 @@ datadir=/mnt/hdd/bitcoin " | sudo -u bitcoin tee /home/bitcoin/.bitcoin/bitcoin.conf else echo "# /home/bitcoin/.bitcoin/bitcoin.conf is present" - # make sure rpcbind is correctly configured - sudo sed -i s/^rpcbind=/main.rpcbind=/g /mnt/hdd/${network}/${network}.conf + fi + + # make sure rpcbind is correctly configured + sudo sed -i s/^rpcbind=/main.rpcbind=/g /mnt/hdd/${network}/${network}.conf - # 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 - echo "\ + # 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 + echo "\ ${bitcoinprefix}.rpcport=${rpcprefix}8332"|\ - sudo tee -a /mnt/hdd/${network}/${network}.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 - echo "\ + sudo tee -a /mnt/hdd/${network}/${network}.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 + 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 + fi + + # addnode + if [ ${bitcoinprefix} = signet ];then + if [ $(grep -c "${bitcoinprefix}.addnode" < /mnt/hdd/${network}/${network}.conf) -eq 0 ];then + echo "\ +signet.addnode=g7fyzp4rgxlrcg73jmrwrzhjnfpsuavjvopurvfq7nrl5x2tif3gx6qd.onion:38333 +signet.addnode=s7fcvn5rblem7tiquhhr7acjdhu7wsawcph7ck44uxyd6sismumemcyd.onion:38333 +signet.addnode=6megrst422lxzsqvshkqkg6z2zhunywhyrhy3ltezaeyfspfyjdzr3qd.onion:38333 +signet.addnode=jahtu4veqnvjldtbyxjiibdrltqiiighauai7hmvknwxhptsb4xat4qd.onion:38333 +signet.addnode=4j6owtnrkgfty2ehbyuwz72k32fyos7co7jnnktxwg7rfrgnqk3obkid.onion:38333 +signet.addnode=f4kwoin7kk5a5kqpni7yqe25z66ckqu6bv37sqeluon24yne5rodzkqd.onion:38333 +signet.addnode=u2d5lofh73k275q3zm76r5bob5pjbff35goubg5hwr2xpgj365ei7cyd.onion:38333 +signet.addnode=nsgyo7begau4yecc46ljfecaykyzszcseapxmtu6adrfagfrrzrlngyd.onion:38333"|\ sudo tee -a /mnt/hdd/${network}/${network}.conf fi fi From fedece2d40de1749a3b26f1ccc207233460bd850 Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 17 May 2021 20:22:57 +0100 Subject: [PATCH 0191/1295] cln.install: fix aliases --- home.admin/config.scripts/cln.install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/config.scripts/cln.install.sh b/home.admin/config.scripts/cln.install.sh index 63f6ac424..d21d6f93a 100644 --- a/home.admin/config.scripts/cln.install.sh +++ b/home.admin/config.scripts/cln.install.sh @@ -194,9 +194,9 @@ WantedBy=multi-user.target echo "# Adding aliases" echo "\ alias ${prefix}lightning-cli=\"sudo -u bitcoin /usr/local/bin/lightning-cli\ - --conf=/home/bitcoin/.lightning/${prefix}config + --conf=/home/bitcoin/.lightning/${prefix}config\" alias ${prefix}cl=\"sudo -u bitcoin /usr/local/bin/lightning-cli\ - --conf=/home/bitcoin/.lightning/${prefix}config\ + --conf=/home/bitcoin/.lightning/${prefix}config\" " | sudo tee -a /home/admin/_aliases.sh echo From f2d6bf61c2fd018af95d364c850f6f955d521901 Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 17 May 2021 20:33:24 +0100 Subject: [PATCH 0192/1295] always add [bitcoind] section to mainnet lnd.conf --- home.admin/config.scripts/lnd.chain.sh | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/home.admin/config.scripts/lnd.chain.sh b/home.admin/config.scripts/lnd.chain.sh index 89f10ccc0..24623b430 100644 --- a/home.admin/config.scripts/lnd.chain.sh +++ b/home.admin/config.scripts/lnd.chain.sh @@ -4,7 +4,7 @@ if [ $# -lt 2 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then echo echo "Install or remove LND services on parallel chains" - echo "lnd.chains.sh [on|off] [signet|testnet|mainnet]" + echo "lnd.chain.sh [on|off] [testnet|mainnet]" echo exit 1 fi @@ -54,10 +54,23 @@ source /mnt/hdd/raspiblitz.conf # switch on if [ "$1" = "1" ] || [ "$1" = "on" ]; then - echo "# Create /home/bitcoin/.lnd/${prefix}lnd.conf" - if [ ! -f /home/bitcoin/.lnd/${prefix}lnd.conf ];then RPCUSER=$(sudo cat /mnt/hdd/${network}/${network}.conf | grep rpcuser | cut -c 9-) RPCPSW=$(sudo cat /mnt/hdd/${network}/${network}.conf | grep rpcpassword | cut -c 13-) + + echo "# Check mainnet lnd.conf" + # it does not pick up main.zmqpubraw entries from bitcoin.conf, need to set manually + if [ $(grep -c zmqpubrawblock /mnt/hdd/lnd/lnd.conf) -eq 0 ];then + echo " +[bitcoind] +bitcoind.rpcuser=$RPCUSER +bitcoind.rpcpass=$RPCPSW +bitcoind.zmqpubrawblock=tcp://127.0.0.1:28332 +bitcoind.zmqpubrawtx=tcp://127.0.0.1:28333 +" | sudo tee -a /mnt/hdd/lnd/lnd.conf + fi + + echo "# Create /home/bitcoin/.lnd/${prefix}lnd.conf" + if [ ! -f /home/bitcoin/.lnd/${prefix}lnd.conf ];then echo " # LND configuration bitcoin.${CHAIN}=1 From a8788f72cdb12aae1d32240c178427278e3f24b2 Mon Sep 17 00:00:00 2001 From: openoms Date: Tue, 18 May 2021 20:32:07 +0100 Subject: [PATCH 0193/1295] cln: add install script for c-lightning-REST --- home.admin/config.scripts/bonus.clnrest.sh | 105 +++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 home.admin/config.scripts/bonus.clnrest.sh diff --git a/home.admin/config.scripts/bonus.clnrest.sh b/home.admin/config.scripts/bonus.clnrest.sh new file mode 100644 index 000000000..cc42c7ded --- /dev/null +++ b/home.admin/config.scripts/bonus.clnrest.sh @@ -0,0 +1,105 @@ +#!/bin/bash + +CLRESTVERSION="v0.4.4" + +# help +if [ $# -eq 0 ]||[ "$1" = "-h" ]||[ "$1" = "--help" ];then + echo + echo "C-lightning-REST install script" + echo "the default version is: $CLRESTVERSION" + echo "setting up on ${chain}net unless otherwise specified" + echo "mainnet / signet / testnet instances cannot run parallel" + echo + echo "usage:" + echo "bonus.clnrest.sh on " + echo "bonus.clnrest.sh off" + echo + exit 1 +fi + +# bitcoin mainnet / signet / testnet +if [ "$1" = on ] || [ "$1" = off ] && [ $# -gt 1 ];then + if [ $2 = main ]||[ $2 = mainnet ]||[ $2 = bitcoin ];then + NETWORK=bitcoin + else + NETWORK=$2 + fi +else + if [ $chain = main ];then + NETWORK=bitcoin + else + NETWORK=${chain}net + fi +fi + +# prefix for parallel testnetwork services +if [ $NETWORK = testnet ];then + prefix="t" + portprefix=1 +elif [ $NETWORK = signet ];then + prefix="s" + portprefix=3 +elif [ $NETWORK = bitcoin ];then + prefix="" + portprefix="" +else + echo "$NETWORK is not supported" + exit 1 +fi + +echo "# Running 'bonus.clnrest.sh $*'" + +if [ $1 = on ];then + echo "# Setting up c-lightning-REST for $NETWORK" + + cd /home/bitcoin || exit 1 + sudo -u bitcoin git clone https://github.com/saubyk/c-lightning-REST + cd c-lightning-REST || exit 1 + sudo -u bitcoin git reset --hard $CLRESTVERSION + sudo -u bitcoin npm install + sudo -u bitcoin cp sample-cl-rest-config.json cl-rest-config.json + sudo -u bitcoin sed -i "s/3001/${portprefix}6100/g" cl-rest-config.json + + # symlink to /home/bitcoin/.lightning/lightning-rpc from the chosen network directory + sudo rm /home/bitcoin/.lightning/lightning-rpc # delete old symlink + sudo ln -s /home/bitcoin/.lightning/${NETWORK}/lightning-rpc /home/bitcoin/.lightning/ + + echo " +# systemd unit for c-lightning-REST for ${NETWORK} +#/etc/systemd/system/clnrest.service +[Unit] +Description=c-lightning-REST daemon for $NETWORK +Wants=${prefix}lightningd.service +After=${prefix}lightningd.service + +[Service] +ExecStart=/usr/bin/node /home/bitcoin/c-lightning-REST/cl-rest.js +User=bitcoin +Restart=always +TimeoutSec=120 +RestartSec=30 + +[Install] +WantedBy=multi-user.target +" | sudo tee /etc/systemd/system/clnrest.service + + sudo systemctl enable clnrest + source /home/admin/raspiblitz.info + if [ "${state}" == "ready" ]; then + echo "# OK - the clnrest.service is enabled, system is ready so starting service" + sudo systemctl start clnrest + else + echo "# OK - the clnrest.service is enabled, to start manually use: 'sudo systemctl start clnrest'" + fi + echo + echo "# Monitor with:" + echo "sudo journalctl -f -u clnrest" + echo +fi + +if [ $1 = off ];then + echo "# Removing c-lightning-REST for $NETWORK" + sudo systemctl stop clnrest + sudo systemctl disable clnrest + sudo rm -rf /home/bitcoin/c-lightning-REST +fi From 3c0bde7f4c7ad3b69a3da15cbe0c6a62516af899 Mon Sep 17 00:00:00 2001 From: nyxnor <69700936+nyxnor@users.noreply.github.com> Date: Tue, 18 May 2021 19:50:10 +0000 Subject: [PATCH 0194/1295] typo (#2309) --- home.admin/_bootstrap.provision.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_bootstrap.provision.sh b/home.admin/_bootstrap.provision.sh index 7a380e8c5..eb3384a2d 100755 --- a/home.admin/_bootstrap.provision.sh +++ b/home.admin/_bootstrap.provision.sh @@ -672,7 +672,7 @@ fi echo "" >> ${logFile} # repair Bitcoin conf if needed -echo "*** Repair Bitcioin Conf (if needed)" >> ${logFile} +echo "*** Repair Bitcoin Conf (if needed)" >> ${logFile} confExists="$(sudo ls /mnt/hdd/${network} | grep -c "${network}.conf")" if [ ${confExists} -eq 0 ]; then echo "Doing init of ${network}.conf" >> ${logFile} From 593fa5e6ee62f881695c1c458e7b0bf78cd6f321 Mon Sep 17 00:00:00 2001 From: nyxnor <69700936+nyxnor@users.noreply.github.com> Date: Tue, 18 May 2021 19:53:34 +0000 Subject: [PATCH 0195/1295] torsocks ssh instruction in the FAQ (#2307) https://github.com/rootzoll/raspiblitz/issues/2273 --- FAQ.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/FAQ.md b/FAQ.md index 26e8f5407..dcc660e62 100644 --- a/FAQ.md +++ b/FAQ.md @@ -56,6 +56,7 @@ - [Why is my node not routing?](#why-is-my-node-not-routing) - [How can I update LND or bitcoind even before the next RaspiBlitz update?](#how-can-i-update-lnd-or-bitcoind-even-before-the-next-raspiblitz-update) - [I cannot connect per SSH to my RaspiBlitz. What can I do?](#i-cannot-connect-per-ssh-to-my-raspiblitz-what-to-do) +- [How to SSH over Tor?](#how-to-ssh-over-tor) - [How do I setup port-forwarding with a SSH tunnel?](#how-to-setup-port-forwarding-with-a-ssh-tunnel) - [How do I setup just a port-forwarding user on my public server?](#how-to-setup-just-a-port-forwarding-user-on-my-public-server) - [How do I connect a UPS to the RaspiBlitz?](#how-to-connect-a-ups-to-the-raspiblitz) @@ -713,6 +714,21 @@ If that doesn't work, try to ping the IP of the RaspiBlitz with `ping [IP-of-Ras If you've checked those and SSH is still not working: Join the conversation on [GitHub Issue #420](https://github.com/rootzoll/raspiblitz/issues/420). +## How to SSH over Tor? + +SSH is already encrypted, why would I want to use it with Tor? +* Remote access when away from LAN. +* Anonymized access - Someone sniffing the traffic don't know where the server you are establishing a connection is, not the server side knows where the client is. + +Create Hidden Service: +`bash /home/admin/config.scripts/internet.hiddenservice.sh ssh 22 22` + +SSH over Tor: +`torsocks ssh admin@HiddenServiceAddress.onion` + +Get the address: +`sudo cat /mnt/hdd/tor/ssh/hostname` + ## How to setup port-forwarding with a SSH tunnel? To use a public server for port-forwarding thru a SSH tunnel you can use the following experimental script on the RaspiBlitz (since v1.2): From 5123f490064dfad77726e97b00d6424daf8687a2 Mon Sep 17 00:00:00 2001 From: openoms Date: Tue, 18 May 2021 21:01:28 +0100 Subject: [PATCH 0196/1295] cln: refactor RTL install for parallel instances --- home.admin/config.scripts/bonus.rtl.sh | 370 ++++++++++++++++--------- 1 file changed, 244 insertions(+), 126 deletions(-) diff --git a/home.admin/config.scripts/bonus.rtl.sh b/home.admin/config.scripts/bonus.rtl.sh index 77f5de2fb..bf0495e94 100755 --- a/home.admin/config.scripts/bonus.rtl.sh +++ b/home.admin/config.scripts/bonus.rtl.sh @@ -1,23 +1,75 @@ #!/bin/bash RTLVERSION="v0.10.1" -# command info -if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then - echo "# config script to switch the RideTheLightning WebGUI on, off or update" - echo "# bonus.rtl.sh [on|off|update|menu|config]" - echo "# installs the version $RTLVERSION by default" - exit 1 -fi - # 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 + echo "# config script to switch the RideTheLightning WebGUI on, off or update" + echo + echo "# bonus.rtl.sh [on|off|menu] " + echo "# sets up lnd on ${chain}net by default" + echo "# able to run intances for lnd and cln parallel" + echo "# lnd mainnet and testnet can run parallel" + echo "# cln can only have one network active at a time" + echo + echo "# bonus.rtl.sh [update|config]" + echo "# installs the version $RTLVERSION by default" + exit 1 +fi + +echo "# Running: 'bonus.rtl.sh $*'" + if [ ${#network} -eq 0 ]; then echo "FAIL - missing /mnt/hdd/raspiblitz.conf" exit 1 fi +# LNTYPE is lnd | cln +if [ $# -gt 1 ];then + LNTYPE=$2 +else + LNTYPE=lnd +fi +if [ ${LNTYPE} != lnd ]&&[ ${LNTYPE} != cln ];then + echo "# ${LNTYPE} is not a supported LNTYPE" + exit 1 +fi + +# CHAIN is signet | testnet | mainnet +if [ $# -gt 2 ];then + CHAIN=$3 +else + CHAIN=${chain}net +fi +if [ ${CHAIN} != testnet ]&&[ ${CHAIN} != mainnet ]&&[ ${CHAIN} != signet ];then + echo "# ${CHAIN} is not a supported CHAIN" + exit 1 +fi + +# prefix for parallel services +if [ ${CHAIN} = testnet ];then + chainprefix="t" + portprefix=1 +elif [ ${CHAIN} = signet ];then + chainprefix="s" + portprefix=3 +elif [ ${CHAIN} = mainnet ];then + chainprefix="" + portprefix="" +fi + +if [ ${LNTYPE} = cln ]; then + RTLHTTP=${portprefix}7000 + typeprefix=c +elif [ ${LNTYPE} = lnd ];then + RTLHTTP=${portprefix}3000 + typeprefix="" +fi + # show info menu if [ "$1" = "menu" ]; then @@ -29,9 +81,9 @@ if [ "$1" = "menu" ]; then if [ "${runBehindTor}" = "on" ] && [ ${#toraddress} -gt 0 ]; then # Info with TOR /home/admin/config.scripts/blitz.display.sh qr "${toraddress}" - whiptail --title " Ride The Lightning (RTL) " --msgbox "Open in your local web browser: -http://${localip}:3000\n -https://${localip}:3001 with Fingerprint: + whiptail --title "Ride The Lightning (RTL - $LNTYPE - $CHAIN)" --msgbox "Open in your local web browser: +http://${localip}:${RTLHTTP}\n +https://${localip}:$((RTLHTTP+1)) with Fingerprint: ${fingerprint}\n Use your Password B to login.\n Hidden Service address for TOR Browser (QRcode on LCD):\n${toraddress} @@ -39,9 +91,9 @@ Hidden Service address for TOR Browser (QRcode on LCD):\n${toraddress} /home/admin/config.scripts/blitz.display.sh hide else # Info without TOR - whiptail --title " Ride The Lightning (RTL) " --msgbox "Open in your local web browser & accept self-signed cert: -http://${localip}:3000\n -https://${localip}:3001 with Fingerprint: + whiptail --title "Ride The Lightning (RTL - $LNTYPE - $CHAIN)" --msgbox "Open in your local web browser & accept self-signed cert: +http://${localip}:${RTLHTTP}\n +https://${localip}:$((RTLHTTP+1)) with Fingerprint: ${fingerprint}\n Use your Password B to login.\n Activate TOR to access the web interface from outside your local network. @@ -52,36 +104,41 @@ Activate TOR to access the web interface from outside your local network. fi # add default value to raspi config if needed -if ! grep -Eq "^rtlWebinterface=" /mnt/hdd/raspiblitz.conf; then - echo "rtlWebinterface=off" >> /mnt/hdd/raspiblitz.conf +if ! grep -Eq "^${chainprefix}${typeprefix}rtlWebinterface=" /mnt/hdd/raspiblitz.conf; then + echo "${chainprefix}${typeprefix}rtlWebinterface=off" >> /mnt/hdd/raspiblitz.conf fi # stop services echo "# making sure services are not running" -sudo systemctl stop RTL 2>/dev/null +sudo systemctl stop ${chainprefix}${typeprefix}RTL 2>/dev/null function configRTL() { - SWAPSERVERPORT=8443 - if [ "$(grep -Ec "(loop=|lit=)" < /mnt/hdd/raspiblitz.conf)" -gt 0 ];then - if [ $lit = on ];then - echo "# Add the rtl user to the lit group" - sudo /usr/sbin/usermod --append --groups lit rtl - echo "# Symlink the lit-loop.macaroon" - sudo rm -rf "/home/rtl/.loop" # delete symlink - sudo ln -s "/home/lit/.loop/" "/home/rtl/.loop" # create symlink - SWAPSERVERPORT=8443 - elif [ $loop = on ];then - echo "# Add the rtl user to the loop group" - sudo /usr/sbin/usermod --append --groups loop rtl - echo "# Symlink the loop.macaroon" - sudo rm -rf "/home/rtl/.loop" # delete symlink - sudo ln -s "/home/loop/.loop/" "/home/rtl/.loop" # create symlink - SWAPSERVERPORT=8081 + + if [ $LNTYPE = lnd ];then + echo "# Make sure rtl is member of lndadmin" + sudo /usr/sbin/usermod --append --groups lndadmin rtl + SWAPSERVERPORT=8443 + if [ "$(grep -Ec "(loop=|lit=)" < /mnt/hdd/raspiblitz.conf)" -gt 0 ];then + if [ $lit = on ];then + echo "# Add the rtl user to the lit group" + sudo /usr/sbin/usermod --append --groups lit rtl + echo "# Symlink the lit-loop.macaroon" + sudo rm -rf "/home/rtl/.loop" # delete symlink + sudo ln -s "/home/lit/.loop/" "/home/rtl/.loop" # create symlink + SWAPSERVERPORT=8443 + elif [ $loop = on ];then + echo "# Add the rtl user to the loop group" + sudo /usr/sbin/usermod --append --groups loop rtl + echo "# Symlink the loop.macaroon" + sudo rm -rf "/home/rtl/.loop" # delete symlink + sudo ln -s "/home/loop/.loop/" "/home/rtl/.loop" # create symlink + SWAPSERVERPORT=8081 + fi + echo "# Make the loop macaroon group readable" + sudo chmod 640 /home/rtl/.loop/mainnet/macaroons.db + else + echo "# No Loop or LiT is installed" fi - echo "# Make the loop macaroon group readable" - sudo chmod 640 /home/rtl/.loop/mainnet/macaroons.db - else - echo "# No Loop or LiT is installed" fi # prepare RTL-Config.json file @@ -96,6 +153,7 @@ function configRTL() { //Read data var data = require('/home/rtl/RTL/sample-RTL-Config.json'); //Manipulate data +data.port = '$RTLHTTP' data.nodes[0].lnNode = '$hostname' data.nodes[0].Authentication.macaroonPath = '/home/rtl/.lnd/data/chain/${network}/${chain}net/' data.nodes[0].Authentication.configPath = '/home/rtl/.lnd/lnd.conf'; @@ -115,87 +173,76 @@ EOF # switch on if [ "$1" = "1" ] || [ "$1" = "on" ]; then - echo "# INSTALL RTL" + echo "# Installing the RTL for ${LNTYPE} ${CHAIN}" - isInstalled=$(sudo ls /etc/systemd/system/RTL.service 2>/dev/null | grep -c 'RTL.service') + isInstalled=$(sudo ls /etc/systemd/system/${chainprefix}${typeprefix}RTL.service 2>/dev/null | grep -c "${chainprefix}${typeprefix}RTL.service") if ! [ ${isInstalled} -eq 0 ]; then - echo "# RTL already installed." + echo "# OK, the ${chainprefix}${typeprefix}RTL.service is already installed." else # check and install NodeJS /home/admin/config.scripts/bonus.nodejs.sh on # create rtl user - sudo adduser --disabled-password --gecos "" rtl || exit 1 - - echo "# Make sure rtl is member of lndadmin" - sudo /usr/sbin/usermod --append --groups lndadmin rtl - - echo "# Make sure symlink to central app-data directory exists" - if ! [[ -L "/home/rtl/.lnd" ]]; then - sudo rm -rf "/home/rtl/.lnd" # not a symlink.. delete it silently - sudo ln -s "/mnt/hdd/app-data/lnd/" "/home/rtl/.lnd" # and create symlink + if [ $(compgen -u | grep -c rtl) -eq 0 ];then + sudo adduser --disabled-password --gecos "" rtl || exit 1 fi - # download source code and set to tag release - echo "# Get the RTL Source Code" - rm -rf /home/admin/RTL 2>/dev/null - sudo -u rtl rm -rf /home/rtl/RTL 2>/dev/null - sudo -u rtl git clone https://github.com/ShahanaFarooqui/RTL.git /home/rtl/RTL - cd /home/rtl/RTL - # check https://github.com/Ride-The-Lightning/RTL/releases/ - sudo -u rtl git reset --hard $RTLVERSION - # from https://github.com/Ride-The-Lightning/RTL/commits/master - # git checkout 917feebfa4fb583360c140e817c266649307ef72 - if [ -d "/home/rtl/RTL" ]; then - echo "# OK - RTL code copy looks good" + if [ -f /home/rtl/RTL/rtl.js ];then + echo "# OK - the RTL code is already present" else - echo "# FAIL - code copy did not run correctly" - echo "# ABORT - RTL install" - exit 1 - fi - echo "" - - # install - echo "# Run: npm install" - export NG_CLI_ANALYTICS=false - sudo -u rtl npm install --only=prod - if ! [ $? -eq 0 ]; then - echo "# FAIL - npm install did not run correctly, aborting" + + echo "# Make sure symlink to central app-data directory exists" + if ! [[ -L "/home/rtl/.lnd" ]]; then + sudo rm -rf "/home/rtl/.lnd" # not a symlink.. delete it silently + sudo ln -s "/mnt/hdd/app-data/lnd/" "/home/rtl/.lnd" # and create symlink + fi + + # download source code and set to tag release + echo "# Get the RTL Source Code" + rm -rf /home/admin/RTL 2>/dev/null + sudo -u rtl rm -rf /home/rtl/RTL 2>/dev/null + sudo -u rtl git clone https://github.com/ShahanaFarooqui/RTL.git /home/rtl/RTL + cd /home/rtl/RTL + # check https://github.com/Ride-The-Lightning/RTL/releases/ + sudo -u rtl git reset --hard $RTLVERSION + # from https://github.com/Ride-The-Lightning/RTL/commits/master + # git checkout 917feebfa4fb583360c140e817c266649307ef72 + if [ -d "/home/rtl/RTL" ]; then + echo "# OK - RTL code copy looks good" + else + echo "# FAIL - code copy did not run correctly" + echo "# ABORT - RTL install" exit 1 - else - echo "# OK - RTL install looks good" - echo + fi + echo + + # install + echo "# Run: npm install" + export NG_CLI_ANALYTICS=false + sudo -u rtl npm install --only=prod + if ! [ $? -eq 0 ]; then + echo "# FAIL - npm install did not run correctly, aborting" + exit 1 + else + echo "# OK - RTL install looks good" + echo + fi fi - # setup nginx symlinks - if ! [ -f /etc/nginx/sites-available/rtl_ssl.conf ]; then - sudo cp /home/admin/assets/nginx/sites-available/rtl_ssl.conf /etc/nginx/sites-available/rtl_ssl.conf - fi - if ! [ -f /etc/nginx/sites-available/rtl_tor.conf ]; then - sudo cp /home/admin/assets/nginx/sites-available/rtl_tor.conf /etc/nginx/sites-available/rtl_tor.conf - fi - if ! [ -f /etc/nginx/sites-available/rtl_tor_ssl.conf ]; then - sudo cp /home/admin/assets/nginx/sites-available/rtl_tor_ssl.conf /etc/nginx/sites-available/rtl_tor_ssl.conf - fi - sudo ln -sf /etc/nginx/sites-available/rtl_ssl.conf /etc/nginx/sites-enabled/ - sudo ln -sf /etc/nginx/sites-available/rtl_tor.conf /etc/nginx/sites-enabled/ - sudo ln -sf /etc/nginx/sites-available/rtl_tor_ssl.conf /etc/nginx/sites-enabled/ - sudo nginx -t - sudo systemctl reload nginx - echo "# Updating Firewall" - sudo ufw allow 3000 comment 'RTL HTTP' - sudo ufw allow 3001 comment 'RTL HTTPS' + sudo ufw allow ${RTLHTTP} comment "${chainprefix}${typeprefix}RTL HTTP" + sudo ufw allow $((RTLHTTP+1)) comment "${chainprefix}${typeprefix}RTL HTTPS" echo + if [ $LNTYPE = lnd ];then echo "# Install service" echo "# Install RTL systemd for ${network} on ${chain}" - cat > /home/admin/RTL.service < /home/admin/${chainprefix}${typeprefix}RTL.service <0{{R3FC5Sl0001rP)t-s|Ns90 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 diff --git a/home.admin/assets/nginx/www_blitzweb/info/index.html b/home.admin/assets/nginx/www_blitzweb/info/index.html deleted file mode 120000 index 779063a79..000000000 --- a/home.admin/assets/nginx/www_blitzweb/info/index.html +++ /dev/null @@ -1 +0,0 @@ -/var/cache/raspiblitz/info.html \ No newline at end of file diff --git a/home.admin/assets/nginx/www_blitzweb/info/info.j2 b/home.admin/assets/nginx/www_blitzweb/info/info.j2 deleted file mode 100644 index 74b671121..000000000 --- a/home.admin/assets/nginx/www_blitzweb/info/info.j2 +++ /dev/null @@ -1,48 +0,0 @@ - - - - - RaspiBlitz Status - - - - -
-
-

Info Dashboard (Updated: {{ datetime }})

-
- - - -
-

RaspiBlitz v{{ codeVersion }} {{ hostname }}

-

{{ network }} Fullnode + Lightning Network {{ torInfo }}

-

 

-

CPU load {{ load }}, temp {{ tempC }}°C {{ tempF }}°F

-

Free Mem {{ ram }} HDDuse {{ hddUsedInfo }}

-

{{ uptime }}

-

ssh admin@{{ local_ip }} ▼{{ network_rx }} ▲{{ network_tx }}

- {% if runningRTL == '1' %} -

web admin --> http://{{ local_ip }}:3000

- {% endif %} -

 

-

{{ network }} {{ networkVersion }} {{ chain }}net Sync OK {{ sync_percentage }}

-

{{ public_addr_pre }} {{ public_addr }} {{ networkConnections }} peers

-

 

-

LND {{ ln_version }} {{ ln_baseInfo }}

- {% if ln_version|length %} -

{{ ln_channelInfo }} {{ ln_peers }} peers

- {% endif %} -

- - -
- - - diff --git a/home.admin/assets/nginx/www_blitzweb/info/status.css b/home.admin/assets/nginx/www_blitzweb/info/status.css deleted file mode 100644 index e239afcc4..000000000 --- a/home.admin/assets/nginx/www_blitzweb/info/status.css +++ /dev/null @@ -1,48 +0,0 @@ -#regular { - /* The size of the LCD on shopping list */ - width: 920px; - height: 440px; -} - -.header { - grid-area: header; - text-align: center; -} - -.logo { - grid-area: logo; - text-align: center; -} - -.main { - grid-area: main; -} - -.footer { - grid-area: footer; -} - -.grid-container { - display: grid; - grid-template-areas: 'header header header header' 'logo main main main' 'footer footer footer footer'; - grid-gap: 1px; - background-color: #02192b; - padding: 1px; -} - -.grid-container > div { - background-color: rgba(0, 0, 0, 0.8); - padding: 4px 8px; - font-size: 30px; -} - -body { - background-color: black; - font-family: monospace, monospace; - color: LightSteelBlue; -} - -p { - font-size: 12px; - margin: 4px; -} diff --git a/home.admin/assets/nginx/www_public/index.html b/home.admin/assets/nginx/www_public/index.html index 5167fa05a..7d0eba5bc 100644 --- a/home.admin/assets/nginx/www_public/index.html +++ b/home.admin/assets/nginx/www_public/index.html @@ -17,9 +17,23 @@

- Welcome + Welcome Node Operator

+

Please Wait ...

+ +

Use one the following link to access your RaspiBlitz

Please be aware about HTTPS Certificate Warning! Here is some useful information on that... diff --git a/home.admin/assets/nginx/www_blitzweb/index.html b/home.admin/assets/nginx/www_public/ui/index.html similarity index 88% rename from home.admin/assets/nginx/www_blitzweb/index.html rename to home.admin/assets/nginx/www_public/ui/index.html index 2da139ae5..f4fb2b5eb 100644 --- a/home.admin/assets/nginx/www_blitzweb/index.html +++ b/home.admin/assets/nginx/www_public/ui/index.html @@ -4,7 +4,7 @@ - RaspiBlitz Welcome + WebUI diff --git a/home.admin/config.scripts/blitz.debug.sh b/home.admin/config.scripts/blitz.debug.sh index beb5f77d3..7e44897d8 100755 --- a/home.admin/config.scripts/blitz.debug.sh +++ b/home.admin/config.scripts/blitz.debug.sh @@ -101,6 +101,17 @@ echo "--> CHECK CONFIG: sudo nginx -t" sudo nginx -t echo "" +echo "*** BLITZAPI SYSTEMD STATUS ***" +sudo systemctl status blitzapi -n2 --no-pager +echo "" + +echo "*** LAST BLITZAPI LOGS ***" +echo "sudo journalctl -u blitzapi -b --no-pager -n20" +sudo journalctl -u nginx -b --no-pager -n20 +echo "--> CHECK CONFIG: sudo nginx -t" +sudo nginx -t +echo "" + if [ "${touchscreen}" = "" ] || [ "${touchscreen}" = "0" ]; then echo "- TOUCHSCREEN is OFF by config" else diff --git a/home.admin/config.scripts/blitz.github.sh b/home.admin/config.scripts/blitz.github.sh index 575f02a8e..f010bfca8 100755 --- a/home.admin/config.scripts/blitz.github.sh +++ b/home.admin/config.scripts/blitz.github.sh @@ -163,6 +163,12 @@ sudo -u admin chmod -R +x /home/admin/config.scripts sudo -u admin chmod -R +x /home/admin/setup.scripts echo "# ******************************************" +echo "# Syncing Webcontent .." +if [ -d /var/www/public ]; then + sudo cp -a /home/admin/assets/nginx/www_public/* /var/www/public + sudo chown www-data:www-data /var/www/public +fi + echo "# Checking if the content of BlitzPy changed .." checkSumBlitzPyAfter=$(find /home/admin/raspiblitz/home.admin/BlitzPy -type f -exec md5sum {} \; | md5sum) echo "# checkSumBlitzPyBefore = ${checkSumBlitzPyBefore}" diff --git a/home.admin/config.scripts/blitz.web.api.sh b/home.admin/config.scripts/blitz.web.api.sh new file mode 100755 index 000000000..e9345ac74 --- /dev/null +++ b/home.admin/config.scripts/blitz.web.api.sh @@ -0,0 +1,190 @@ +#!/usr/bin/env bash + +# main repo: https://github.com/fusion44/blitz_api + +# restart the systemd `blitzapi` when credentials of lnd or bitcoind are changeing and it will +# excute the `update-config` automatically before restarting + +# TODO: On sd card install there might be no Bitcoin & Lightning confs - make sure backend runs without + +# command info +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "-help" ]; then + echo "Manage RaspiBlitz Web API" + echo "blitz.web.api.sh on [?GITHUBUSER] [?REPO] [?BRANCH]" + echo "blitz.web.api.sh update-config" + echo "blitz.web.api.sh update-code" + echo "blitz.web.api.sh off" + exit 1 +fi + +DEFAULT_GITHUB_USER="fusion44" +DEFAULT_GITHUB_REPO="blitz_api" +DEFAULT_GITHUB_BRANCH="main" + +################### +# ON / INSTALL +################### +if [ "$1" = "1" ] || [ "$1" = "on" ]; then + + if [ "$2" != "" ]; then + DEFAULT_GITHUB_USER="$2" + fi + + if [ "$3" != "" ]; then + DEFAULT_GITHUB_REPO="$3" + fi + + if [ "$4" != "" ]; then + DEFAULT_GITHUB_BRANCH="$4" + fi + + echo "# INSTALL Web API ..." + sudo apt install -y redis + sudo rm -r /home/admin/blitz_api 2>/dev/null + cd /home/admin + # git clone https://github.com/fusion44/blitz_api.git /home/admin/blitz_api + git clone https://github.com/${DEFAULT_GITHUB_USER}/${DEFAULT_GITHUB_REPO}.git /home/admin/blitz_api + cd blitz_api + git checkout ${DEFAULT_GITHUB_BRANCH} + pip install -r requirements.txt + + # TODO: check if that manual install is still needed in a future version + pip install sse_starlette + + # build the config and set unique secret (its OK to be a new secret every install/upadte) + /home/admin/config.scripts/blitz.web.api.sh update-config + secret=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 64 ; echo '') + sed -i "s/^secret=.*/secret=${secret}/g" ./.env + + # prepare systemd service + echo " +[Unit] +Description=BlitzBackendAPI +Wants=network.target +After=network.target + +[Service] +WorkingDirectory=/home/admin/blitz_api +# before every start update the config with latest credentials/settings +ExecStartPre=-/home/admin/config.scripts/blitz.web.api.sh update-config +ExecStart=sudo -admin /usr/bin/python -m uvicorn main:app --reload --port 11111 --host=0.0.0.0 --root-path /api +User=root +Group=root +Type=simple +Restart=always +StandardOutput=journal +StandardError=journal + +# Hardening measures +PrivateTmp=true +ProtectSystem=full +NoNewPrivileges=true +PrivateDevices=true + +[Install] +WantedBy=multi-user.target +" | sudo tee /etc/systemd/system/blitzapi.service + + sudo systemctl enable blitzapi + sudo systemctl start blitzapi + + # TODO: remove after experimental step + sudo ufw allow 11111 comment 'WebAPI Develop' + + # install info + echo "# the API should new be available under http://[LOCALHOST]/api and port 11111 for testing" + echo "# check for systemd: sudo systemctl status blitzapi" + echo "# check for logs: sudo journalctl -f -u blitzapi" + + exit 0 +fi + +################### +# UPDATE CONFIG +################### +if [ "$1" = "update-config" ]; then + + # prepare configs data + source /mnt/hdd/raspiblitz.conf 2>/dev/null + if [ "${network}" = "" ]; then + network="bitcoin" + chain="main" + fi + + cd /home/admin/blitz_api + dateStr=$(date) + echo "# Update Web API CONFIG (${dateStr})" + RPCUSER=$(sudo cat /mnt/hdd/${network}/${network}.conf | grep rpcuser | cut -c 9-) + RPCPASS=$(sudo cat /mnt/hdd/${network}/${network}.conf | grep rpcpassword | cut -c 13-) + if [ "${RPCUSER}" == "" ]; then + RPCUSER="raspibolt" + fi + if [ "${RPCPASS}" == "" ]; then + RPCPASS="passwordB" + fi + sed -i "s/^network=.*/network=mainnet/g" ./.env + sed -i "s/^bitcoind_ip_mainnet=.*/bitcoind_ip_mainnet=127.0.0.1/g" ./.env + sed -i "s/^bitcoind_ip_testnet=.*/bitcoind_ip_testnet=127.0.0.1/g" ./.env + sed -i "s/^bitcoind_user=.*/bitcoind_user=${RPCUSER}/g" ./.env + sed -i "s/^bitcoind_pw=.*/bitcoind_pw=${RPCPASS}/g" ./.env + + # configure LND + if [ "${lightning}" == "lnd" ]; then + + echo "# CONFIG Web API Lightning --> LND" + tlsCert=$(sudo xxd -ps -u -c 1000 /mnt/hdd/lnd/tls.cert) + adminMacaroon=$(sudo xxd -ps -u -c 1000 /mnt/hdd/lnd/data/chain/bitcoin/mainnet/admin.macaroon) + sed -i "s/^ln_node=.*/ln_node=lnd/g" ./.env + sed -i "s/^lnd_grpc_ip=.*/lnd_grpc_ip=127.0.0.1/g" ./.env + sed -i "s/^lnd_macaroon=.*/lnd_macaroon=${adminMacaroon}/g" ./.env + sed -i "s/^lnd_cert=.*/lnd_cert=${tlsCert}/g" ./.env + + # configure CLN + elif [ "${lightning}" == "cln" ]; then + + echo "# CONFIG Web API Lightning --> CLN" + sed -i "s/^ln_node=.*/ln_node=cln/g" ./.env + + # TODO: ADD C-Lightning config as soon as available + echo "# MISSING CLN CONFIG YET" + + else + echo "# CONFIG Web API Lightning --> OFF" + sed -i "s/^ln_node=.*/ln_node=/g" ./.env + fi + + echo "# '.env' config updates - blitzapi maybe needs to be restarted" + exit 0 + +fi + +################### +# UPDATE CODE +################### +if [ "$1" = "update-code" ]; then + + echo "# Update Web API CODE" + sudo systemctl stop blitzapi + cd /home/admin/blitz_api + git fetch + git pull + pip install -r requirements.txt + sudo systemctl start blitzapi + echo "# blitzapi updates and restarted" + exit 0 + +fi + +################### +# OFF / UNINSTALL +################### +if [ "$1" = "0" ] || [ "$1" = "off" ]; then + + echo "# UNINSTALL Web API" + sudo systemctl stop blitzapi + sudo systemctl disable blitzapi + sudo rm /etc/systemd/system/blitzapi.service + sudo rm -r /home/admin/blitz_api + exit 0 + +fi diff --git a/home.admin/config.scripts/blitz.web.sh b/home.admin/config.scripts/blitz.web.sh index 1891cee86..fc42418d6 100755 --- a/home.admin/config.scripts/blitz.web.sh +++ b/home.admin/config.scripts/blitz.web.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash +# TODO: later on this script will be run on build sdcard - make sure that the self-signed tls cert get created fresh on every new RaspiBlitz + source /mnt/hdd/raspiblitz.conf # command info @@ -8,98 +10,9 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "-help" ]; printf "blitz.web.sh check \t\tprint operational nginx listen status (lsof)\n" printf "blitz.web.sh on \t\tturn on\n" printf "blitz.web.sh off \t\tturn off\n" - printf "blitz.web.sh listen localhost \tset port 443 to localhost only\n" - printf "blitz.web.sh listen any \tset port 443 to any\n" exit 1 fi -# using ${APOST} is a workaround to be able to use sed with ' -APOST=\' # close tag for linters: ' - - -################### -# FUNCTIONS -################### -function set_nginx_blitzweb_listen() { - # first parameter to function should be either "localhost" or "any" - listen_to=${1} - - if [ -f "/etc/nginx/sites-available/blitzweb.conf" ]; then - if ! grep -Eq '^\s*#?\s*listen 127.0.0.1:443 ssl default_server;$' /etc/nginx/sites-available/blitzweb.conf; then - echo "Error: missing expected line for: lo:v4 https" - exit 1 - else - if grep -Eq '^\s*#\s*listen 127.0.0.1:443 ssl default_server;$' /etc/nginx/sites-available/blitzweb.conf; then - #echo "found: lo:v4 https (disabled line)" - if [ ${listen_to} = "localhost" ]; then - sudo sed -i -E 's/#\s*(listen 127.0.0.1:443 ssl default_server;)/\1/g' /etc/nginx/sites-available/blitzweb.conf - fi - else - #echo "found: lo:v4 https (enabled line)" - if [ ${listen_to} = "any" ]; then - sudo sed -i -E 's/(listen 127.0.0.1:443 ssl default_server;)/#\1/g' /etc/nginx/sites-available/blitzweb.conf - fi - fi - - fi - - if ! grep -Eq '^\s*#?\s*listen \[::1\]:443 ssl default_server;$' /etc/nginx/sites-available/blitzweb.conf; then - echo "Error: missing expected line for: lo:v6 https" - exit 1 - else - if grep -Eq '^\s*#\s*listen \[::1\]:443 ssl default_server;$' /etc/nginx/sites-available/blitzweb.conf; then - #echo "found: lo:v6 https (disabled line)" - if [ ${listen_to} = "localhost" ]; then - sudo sed -i -E 's/#\s*(listen \[::1\]:443 ssl default_server;)/\1/g' /etc/nginx/sites-available/blitzweb.conf - fi - else - #echo "found: lo:v6 https (enabled line)" - if [ ${listen_to} = "any" ]; then - sudo sed -i -E 's/(listen \[::1\]:443 ssl default_server;)/#\1/g' /etc/nginx/sites-available/blitzweb.conf - fi - fi - - fi - - if ! grep -Eq '^\s*#?\s*listen 443 ssl default_server;$' /etc/nginx/sites-available/blitzweb.conf; then - echo "Error: missing expected line for: any:v4 https" - exit 1 - else - if grep -Eq '^\s*#\s*listen 443 ssl default_server;$' /etc/nginx/sites-available/blitzweb.conf; then - #echo "found: any:v4 https (disabled line)" - if [ ${listen_to} = "any" ]; then - sudo sed -i -E 's/#\s*(listen 443 ssl default_server;)/\1/g' /etc/nginx/sites-available/blitzweb.conf - fi - else - #echo "found: any:v4 https (enabled line)" - if [ ${listen_to} = "localhost" ]; then - sudo sed -i -E 's/(listen 443 ssl default_server;)/#\1/g' /etc/nginx/sites-available/blitzweb.conf - fi - fi - - fi - - if ! grep -Eq '^\s*#?\s*listen \[::\]:443 ssl default_server;$' /etc/nginx/sites-available/blitzweb.conf; then - echo "Error: missing expected line for: any:v6 https" - exit 1 - else - if grep -Eq '^\s*#\s*listen \[::\]:443 ssl default_server;$' /etc/nginx/sites-available/blitzweb.conf; then - #echo "found: any:v6 https (disabled line)" - if [ ${listen_to} = "any" ]; then - sudo sed -i -E 's/#\s*(listen \[::\]:443 ssl default_server;)/\1/g' /etc/nginx/sites-available/blitzweb.conf - fi - else - #echo "found: any:v6 https (enabled line)" - if [ ${listen_to} = "localhost" ]; then - sudo sed -i -E 's/(listen \[::\]:443 ssl default_server;)/#\1/g' /etc/nginx/sites-available/blitzweb.conf - fi - fi - fi - fi -} - - - ################### # CHECK ################### @@ -145,6 +58,7 @@ EOF sudo sed -i -E '/^.*server_names_hash_bucket_size [0-9]*;$/a \\tserver_names_hash_bucket_size 128;' /etc/nginx/nginx.conf fi + echo "# Checking dhparam.pem ..." if [ ! -f /etc/ssl/certs/dhparam.pem ]; then # check if there is a user generated dhparam.pem on the HDD to use @@ -162,6 +76,8 @@ EOF sudo cp /mnt/hdd/app-data/nginx/dhparam.pem /etc/ssl/certs/dhparam.pem fi + else + echo "# skip - dhparam.pem exists" fi sudo cp /home/admin/assets/nginx/snippets/* /etc/nginx/snippets/ @@ -171,7 +87,10 @@ EOF sudo rm -f /var/www/html/index.nginx-debian.html if ! [ -f /etc/nginx/sites-available/public.conf ]; then + echo "# copy /etc/nginx/sites-available/public.conf" sudo cp /home/admin/assets/nginx/sites-available/public.conf /etc/nginx/sites-available/public.conf + else + echo "# exists /etc/nginx/sites-available/public.conf" fi if ! [ -d /var/www/letsencrypt/.well-known/acme-challenge ]; then @@ -183,32 +102,38 @@ EOF # copy webroot if ! [ -d /var/www/public ]; then + echo "# copy /var/www/public" sudo cp -a /home/admin/assets/nginx/www_public/ /var/www/public sudo chown www-data:www-data /var/www/public + else + echo "# exists /var/www/public" fi sudo ln -sf /etc/nginx/sites-available/public.conf /etc/nginx/sites-enabled/public.conf ### RaspiBlitz Webserver on HTTPS 443 - # copy webroot - if ! [ -d /var/www/blitzweb ]; then - sudo cp -a /home/admin/assets/nginx/www_blitzweb/ /var/www/blitzweb - sudo chown www-data:www-data /var/www/blitzweb + # copy compiled webUI (TODO: do later) + if ! [ -d /var/www/public/ui ]; then + echo "# copy precompiled webui TODO: implement" + sudo cp -a /home/admin/blitz_web_compiled /var/www/public/ui + sudo chown www-data:www-data /var/www/public/ui + else + echo "# exists /var/www/public/ui" fi - # make sure jinja2 is installed and install j2cli - sudo apt-get install -y python3-jinja2 - sudo -H python3 -m pip install j2cli + if ! [ -f /mnt/hdd/app-data/nginx/tls.cert ];then - if [ -f /mnt/hdd/app-data/nginx/tls.cert ];then if [ -f /mnt/hdd/lnd/tls.cert ]; then # use LND cert by default + echo "# use LND cert for: /mnt/hdd/app-data/nginx/tls.cert" sudo ln -sf /mnt/hdd/lnd/tls.cert /mnt/hdd/app-data/nginx/tls.cert sudo ln -sf /mnt/hdd/lnd/tls.key /mnt/hdd/app-data/nginx/tls.key sudo ln -sf /mnt/hdd/lnd/tls.cert /mnt/hdd/app-data/nginx/tor_tls.cert sudo ln -sf /mnt/hdd/lnd/tls.key /mnt/hdd/app-data/nginx/tor_tls.key else + echo "# exists /mnt/hdd/app-data/nginx/tls.cert" + # create a self-signed cert if the LND cert is not present /home/admin/config.scripts/internet.selfsignedcert.sh @@ -221,21 +146,8 @@ EOF sudo ln -sf /mnt/hdd/app-data/selfsignedcert/selfsigned.key \ /mnt/hdd/app-data/nginx/tor_tls.key fi - fi - - # config - sudo cp /home/admin/assets/blitzweb.conf /etc/nginx/sites-available/blitzweb.conf - sudo ln -sf /etc/nginx/sites-available/blitzweb.conf /etc/nginx/sites-enabled/ - - if ! [ -f /etc/nginx/.htpasswd ]; then - PASSWORD_B=$(sudo cat /mnt/hdd/${network}/${network}.conf | grep rpcpassword | cut -c 13-) - echo "${PASSWORD_B}" | sudo htpasswd -c -i /etc/nginx/.htpasswd admin - sudo chown www-data:www-data /etc/nginx/.htpasswd - sudo chmod 640 /etc/nginx/.htpasswd - else - sudo chown www-data:www-data /etc/nginx/.htpasswd - sudo chmod 640 /etc/nginx/.htpasswd + echo "# exists /mnt/hdd/app-data/nginx/tls.cert" fi # restart NGINX @@ -252,19 +164,6 @@ elif [ "$1" = "0" ] || [ "$1" = "off" ]; then sudo systemctl stop nginx sudo systemctl disable nginx >/dev/null - -################### -# LISTEN -################### -elif [ "$1" = "listen" ]; then - - if [ "$2" = "localhost" ] || [ "$2" = "any" ]; then - echo "Setting NGINX to listen on: ${2}" - set_nginx_blitzweb_listen "${2}" - else - echo "# FAIL: parameter not known - run with -h for help" - fi - else echo "# FAIL: parameter not known - run with -h for help" fi diff --git a/home.admin/config.scripts/blitz.web.ui.sh b/home.admin/config.scripts/blitz.web.ui.sh new file mode 100755 index 000000000..ecda65cef --- /dev/null +++ b/home.admin/config.scripts/blitz.web.ui.sh @@ -0,0 +1,96 @@ +#!/usr/bin/env bash + +# TODO: Later use for default install (when no github parameters are given) a precompiled version +# that comes with the repo so that the user does not need to install node +# use fro that then: yarn build:production & yarn licenses generate-disclaimer + +# TODO: Put WebUI into / base directory of nginx and let the index.html of the webUI handle +# the Tor detection or build it directly into the WebUI + +# command info +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "-help" ]; then + echo "Manage RaspiBlitz Web UI" + echo "blitz.web.ui.sh on [?GITHUBUSER] [?REPO] [?BRANCH]" + echo "blitz.web.ui.sh update" + echo "blitz.web.ui.sh off" + exit 1 +fi + +DEFAULT_GITHUB_USER="cstenglein" +DEFAULT_GITHUB_REPO="raspiblitz-web" +DEFAULT_GITHUB_BRANCH="master" + +################### +# ON / INSTALL +################### +if [ "$1" = "1" ] || [ "$1" = "on" ]; then + + if [ "$2" != "" ]; then + DEFAULT_GITHUB_USER="$2" + fi + + if [ "$3" != "" ]; then + DEFAULT_GITHUB_REPO="$3" + fi + + if [ "$4" != "" ]; then + DEFAULT_GITHUB_BRANCH="$4" + fi + + echo "# INSTALL WebUI" + sudo rm -r /home/admin/blitz_web 2>/dev/null + cd /home/admin + # git clone https://github.com/cstenglein/raspiblitz-web.git /home/admin/blitz_web + git clone https://github.com/${DEFAULT_GITHUB_USER}/${DEFAULT_GITHUB_REPO}.git /home/admin/blitz_web + cd blitz_web + git checkout ${DEFAULT_GITHUB_BRANCH} + + echo "# Compile WebUI" + /home/admin/config.scripts/bonus.nodejs.sh on + source <(/home/admin/config.scripts/bonus.nodejs.sh info) + sudo npm install --global yarn + ${NODEPATH}/yarn install + ${NODEPATH}/yarn build + + sudo rm -r /var/www/public/* 2>/dev/null + sudo cp -r /home/admin/blitz_web/build/* /var/www/public + sudo chown www-data:www-data -R /var/www/public + + exit 1 +fi + +################### +# UPDATE +################### +if [ "$1" = "update" ]; then + + echo "# Update Web API" + cd /home/admin/blitz_web + git fetch + git pull + source <(/home/admin/config.scripts/bonus.nodejs.sh info) + ${NODEPATH}/yarn install + ${NODEPATH}/yarn build + sudo rm -r /var/www/public/* 2>/dev/null + sudo cp -r /home/admin/blitz_web/build/* /var/www/public + sudo chown www-data:www-data -R /var/www/public + echo "# blitzapi updates and restarted" + exit 0 + +fi + +################### +# OFF / UNINSTALL +################### +if [ "$1" = "0" ] || [ "$1" = "off" ]; then + + echo "# UNINSTALL WebUI" + sudo rm -r /home/admin/blitz_web 2>/dev/null + sudo rm -r /var/www/public/* 2>/dev/null + exit 0 +fi + + + + + diff --git a/home.admin/config.scripts/bonus.nodejs.sh b/home.admin/config.scripts/bonus.nodejs.sh index 2dd0cb9c4..0b6410c98 100755 --- a/home.admin/config.scripts/bonus.nodejs.sh +++ b/home.admin/config.scripts/bonus.nodejs.sh @@ -9,10 +9,36 @@ CHECKSUM_linux_x64="ed01043751f86bb534d8c70b16ab64c956af88fd35a9506b7e4a68f5b824 # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo "config script to install NodeJs $VERSION" - echo "bonus.nodejs.sh [on|off]" + echo "bonus.nodejs.sh [on|off|info]" exit 1 fi + # determine nodeJS VERSION and DISTRO +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-armv7l" + CHECKSUM="${CHECKSUM_linux_armv7l}" +elif [ ${isAARCH64} -eq 1 ] ; then + DISTRO="linux-arm64" + CHECKSUM="${CHECKSUM_linux_arm64}" +elif [ ${isX86_64} -eq 1 ] ; then + DISTRO="linux-x64" + CHECKSUM="${CHECKSUM_linux_x64}" +elif [ ${#DISTRO} -eq 0 ]; then + echo "# FAIL: Was not able to determine architecture" + exit 1 +fi + +# info +if [ "$1" = "info" ]; then + echo "NODEVERSION='${VERSION}'" + echo "NODEDISTRO='${DISTRO}'" + echo "NODEPATH='/usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin'" + exit 0 +fi + # switch on if [ "$1" = "1" ] || [ "$1" = "on" ]; then # check if nodeJS was installed @@ -20,34 +46,15 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then if ! [ ${nodeJSInstalled} -eq 0 ]; then echo "nodeJS is already installed" else - # determine nodeJS VERSION and DISTRO - echo "Detect CPU architecture ..." - 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-armv7l" - CHECKSUM="${CHECKSUM_linux_armv7l}" - elif [ ${isAARCH64} -eq 1 ] ; then - DISTRO="linux-arm64" - CHECKSUM="${CHECKSUM_linux_arm64}" - elif [ ${isX86_64} -eq 1 ] ; then - DISTRO="linux-x64" - CHECKSUM="${CHECKSUM_linux_x64}" - elif [ ${#DISTRO} -eq 0 ]; then - echo "FAIL: Was not able to determine architecture" - exit 1 - fi + + # install latest nodejs + # https://github.com/nodejs/help/wiki/Installation + echo "*** Install NodeJS $VERSION-$DISTRO ***" echo "VERSION: ${VERSION}" echo "DISTRO: ${DISTRO}" echo "CHECKSUM: ${CHECKSUM}" echo "" - - # install latest nodejs - # https://github.com/nodejs/help/wiki/Installation - echo "*** Install NodeJS $VERSION-$DISTRO ***" - + # download cd /home/admin/download wget https://nodejs.org/dist/$VERSION/node-$VERSION-$DISTRO.tar.xz @@ -69,7 +76,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then sudo ln -sf /usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin/npm /usr/bin/npm sudo ln -sf /usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin/npx /usr/bin/npx # add to PATH permanently - sudo bash -c "echo 'PATH=\$PATH:/usr/local/lib/nodejs/node-\$VERSION-\$DISTRO/bin/' >> /etc/profile" + sudo bash -c "echo 'PATH=\$PATH:/usr/local/lib/nodejs/node-${VERSION}-${DISTRO}/bin/' >> /etc/profile" echo "" # check if nodeJS was installed diff --git a/home.admin/config.scripts/lnd.export.sh b/home.admin/config.scripts/lnd.export.sh index 245fdc45a..830810d74 100755 --- a/home.admin/config.scripts/lnd.export.sh +++ b/home.admin/config.scripts/lnd.export.sh @@ -62,17 +62,17 @@ elif [ "${exportType}" = "hexstring" ]; then clear echo "###### HEXSTRING EXPORT ######" echo "" - echo "admin.macaroon:" - sudo xxd -ps -u -c 1000 /mnt/hdd/lnd/data/chain/${network}/${chain}net/admin.macaroon + adminMacaroon=$(sudo xxd -ps -u -c 1000 /mnt/hdd/lnd/data/chain/${network}/${chain}net/admin.macaroon) + echo "adminMacaroon=${adminMacaroon}" echo "" - echo "invoice.macaroon:" - sudo xxd -ps -u -c 1000 /mnt/hdd/lnd/data/chain/${network}/${chain}net/invoice.macaroon + invoiceMacaroon=$(sudo xxd -ps -u -c 1000 /mnt/hdd/lnd/data/chain/${network}/${chain}net/invoice.macaroon) + echo "invoiceMacaroon=${invoiceMacaroon}" echo "" - echo "readonly.macaroon:" - sudo xxd -ps -u -c 1000 /mnt/hdd/lnd/data/chain/${network}/${chain}net/readonly.macaroon + readonlyMacaroon=$(sudo xxd -ps -u -c 1000 /mnt/hdd/lnd/data/chain/${network}/${chain}net/readonly.macaroon) + echo "readonlyMacaroon=${readonlyMacaroon}" echo "" - echo "tls.cert:" - sudo xxd -ps -u -c 1000 /mnt/hdd/lnd/tls.cert + tlsCert=$(sudo xxd -ps -u -c 1000 /mnt/hdd/lnd/tls.cert) + echo "tlsCert=${tlsCert}" echo "" ######################## From cb04f094835a413aa353f92b1ebfa46083b395c0 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 20 Jul 2021 17:45:38 +0200 Subject: [PATCH 0594/1295] no password C & D when cln --- home.admin/config.scripts/cln.backup.sh | 16 +--------------- home.admin/setup.scripts/controlSetupDialog.sh | 4 ++++ .../setup.scripts/dialogLightningWallet-cln.sh | 8 ++++---- 3 files changed, 9 insertions(+), 19 deletions(-) diff --git a/home.admin/config.scripts/cln.backup.sh b/home.admin/config.scripts/cln.backup.sh index 110d41a96..eac29520f 100755 --- a/home.admin/config.scripts/cln.backup.sh +++ b/home.admin/config.scripts/cln.backup.sh @@ -380,22 +380,8 @@ wordone wordtweo wordthree ... fi done - # ask if seed was protected by password D + # dont ask for password D (seed password) because raspiblitz never had that option for cln passwordD="" - dialog --title "SEED PASSWORD" --yes-button "No extra Password" --no-button "Yes" --yesno " -Are your seed words protected by an extra password? - -During wallet creation LND offers to set an extra password -to protect the seed words. Most users did not set this. - " 11 65 - if [ $? -eq 1 ]; then - sudo rm /var/cache/raspiblitz/.pass.tmp 2>/dev/null - sudo touch /var/cache/raspiblitz/.pass.tmp - sudo chown admin:admin /var/cache/raspiblitz/.pass.tmp - sudo /home/admin/config.scripts/blitz.setpassword.sh x "Enter extra Password D" /var/cache/raspiblitz/.pass.tmp empty-allowed - passwordD=$(sudo cat /var/cache/raspiblitz/.pass.tmp) - sudo shred -u /var/cache/raspiblitz/.pass.tmp 2>/dev/null - fi # writing result file data clear diff --git a/home.admin/setup.scripts/controlSetupDialog.sh b/home.admin/setup.scripts/controlSetupDialog.sh index e2637158c..a445e90cd 100755 --- a/home.admin/setup.scripts/controlSetupDialog.sh +++ b/home.admin/setup.scripts/controlSetupDialog.sh @@ -293,6 +293,10 @@ if [ "${setupPhase}" == "setup" ]; then echo "setPasswordA=1" >> $SETUPFILE echo "setPasswordB=1" >> $SETUPFILE echo "setPasswordC=1" >> $SETUPFILE + + + + fi fi diff --git a/home.admin/setup.scripts/dialogLightningWallet-cln.sh b/home.admin/setup.scripts/dialogLightningWallet-cln.sh index bbb8f215d..1b486d6e8 100644 --- a/home.admin/setup.scripts/dialogLightningWallet-cln.sh +++ b/home.admin/setup.scripts/dialogLightningWallet-cln.sh @@ -23,10 +23,10 @@ if [ "${CHOICE}" == "NEW" ]; then sudo sed -i '/^setPasswordB=/d' $SETUPFILE sudo sed -i '/^setPasswordC=/d' $SETUPFILE - # mark all passwords to be set at the end + # mark all passwords to be set - passwordc wallet encryption not for cln echo "setPasswordA=1" >> $SETUPFILE echo "setPasswordB=1" >> $SETUPFILE - echo "setPasswordC=1" >> $SETUPFILE + echo "setPasswordC=0" >> $SETUPFILE elif [ "${CHOICE}" == "OLD" ]; then @@ -67,7 +67,7 @@ from your old node would be recommended. # when user wants to go back CHOICESUB="" else - # activate SEED input & SCB upload + # activate SEED input enterSEED=1 # clear setup state from all fomer possible choices (previous loop) @@ -78,7 +78,7 @@ from your old node would be recommended. # mark all passwords to be set at the end echo "setPasswordA=1" >> $SETUPFILE echo "setPasswordB=1" >> $SETUPFILE - echo "setPasswordC=1" >> $SETUPFILE + echo "setPasswordC=0" >> $SETUPFILE fi From 1d0d368b8343dcfa739a35a2432ed7cfa22c4dd5 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 20 Jul 2021 18:26:17 +0200 Subject: [PATCH 0595/1295] add debug echos --- home.admin/_provision.setup.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/home.admin/_provision.setup.sh b/home.admin/_provision.setup.sh index df7070b7c..deea8c9be 100755 --- a/home.admin/_provision.setup.sh +++ b/home.admin/_provision.setup.sh @@ -371,6 +371,7 @@ if [ "${lightning}" == "cln" ]; then # OLD WALLET FROM SEEDWORDS elif [ "${seedWords}" != "" ]; then + echo "Restore CLN wallet from seedWords ..." >> ${logFile} source <(sudo /home/admin/config.scripts/cln.hsmtool.sh seed-force mainnet "${seedWords}" "${seedPassword}") # check if wallet really got created @@ -385,6 +386,8 @@ if [ "${lightning}" == "cln" ]; then # NEW WALLET else + echo "Generare new CLN wallet ..." >> ${logFile} + # generate new wallet source <(sudo /home/admin/config.scripts/cln.hsmtool.sh new-force mainnet) From 11948ede38f2a78321ae6ac71b2a4b119ee43068 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 20 Jul 2021 18:41:45 +0200 Subject: [PATCH 0596/1295] set defaults before --- home.admin/setup.scripts/controlSetupDialog.sh | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/home.admin/setup.scripts/controlSetupDialog.sh b/home.admin/setup.scripts/controlSetupDialog.sh index a445e90cd..faa19db87 100755 --- a/home.admin/setup.scripts/controlSetupDialog.sh +++ b/home.admin/setup.scripts/controlSetupDialog.sh @@ -207,6 +207,11 @@ if [ "${setupPhase}" == "setup" ]; then # FRESH SETUP if [ "${menuresult}" == "0" ]; then + # user needs to set all passwords (defaults) + echo "setPasswordA=1" >> $SETUPFILE + echo "setPasswordB=1" >> $SETUPFILE + echo "setPasswordC=1" >> $SETUPFILE + ############################################ # Setting Name for Node @@ -289,14 +294,6 @@ if [ "${setupPhase}" == "setup" ]; then echo "hostname='${hostname}'" >> $CONFIGFILE echo "runBehindTor=on" >> $CONFIGFILE - # user needs to set all passwords - echo "setPasswordA=1" >> $SETUPFILE - echo "setPasswordB=1" >> $SETUPFILE - echo "setPasswordC=1" >> $SETUPFILE - - - - fi fi From 9a77f765df816a766d42acc6cdc9725c0bd55698 Mon Sep 17 00:00:00 2001 From: /rootzoll Date: Tue, 20 Jul 2021 19:19:34 +0200 Subject: [PATCH 0597/1295] #2228 wider grep to detect nvms (#2427) --- home.admin/config.scripts/blitz.datadrive.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index b278df256..ea5002b52 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -83,7 +83,7 @@ if [ "$1" = "status" ]; then hdd="" sizeDataPartition=0 OSPartition=$(sudo df /usr | grep dev | cut -d " " -f 1 | sed "s/\/dev\///g") - lsblk -o NAME,SIZE -b | grep -P "[s|v]d[a-z][0-9]?" > .lsblk.tmp + lsblk -o NAME,SIZE -b | grep -P "[s|vn][dv][a-z][0-9]?" > .lsblk.tmp while read line; do # cut line info into different informations From ca5ace8a1591dacba973a80721b932ab99a25da6 Mon Sep 17 00:00:00 2001 From: openoms Date: Tue, 20 Jul 2021 18:21:44 +0100 Subject: [PATCH 0598/1295] cln.hsmtool: init backup with the new wallet --- home.admin/config.scripts/cln.hsmtool.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/home.admin/config.scripts/cln.hsmtool.sh b/home.admin/config.scripts/cln.hsmtool.sh index 6b3a24dba..54114c80c 100644 --- a/home.admin/config.scripts/cln.hsmtool.sh +++ b/home.admin/config.scripts/cln.hsmtool.sh @@ -184,6 +184,10 @@ if [ "$1" = "new" ] || [ "$1" = "new-force" ] || [ "$1" = "seed" ] || [ "$1" = " # pass to 'hsmtool generatehsm hsm_secret' - confirm seedPassword (echo "0"; echo "${seedwords}"; echo "$seedpassword"; echo "$seedpassword") | sudo -u bitcoin /home/bitcoin/lightning/tools/hsmtool "generatehsm" $hsmSecretPath 1>&2 fi + + echo "# Re-init the backup plugin with the new wallet" + /home/admin/config.scripts/cln-plugin.backup.sh on $CHAIN + exit 0 elif [ "$1" = "unlock" ]; then From 101039ef218cff5a5dd9d2aea6a849f3dcfac0b6 Mon Sep 17 00:00:00 2001 From: openoms Date: Tue, 20 Jul 2021 19:11:48 +0100 Subject: [PATCH 0599/1295] cln.install: fix access to raspiblitz.conf --- home.admin/config.scripts/cln.install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/cln.install.sh b/home.admin/config.scripts/cln.install.sh index 582d9ed0f..694be2c5b 100644 --- a/home.admin/config.scripts/cln.install.sh +++ b/home.admin/config.scripts/cln.install.sh @@ -38,7 +38,7 @@ echo "# Using the settings for: ${network} ${CHAIN}" # add default value to raspi config if needed if ! grep -Eq "^${netprefix}cln=" /mnt/hdd/raspiblitz.conf; then - echo "${netprefix}cln=off" >> /mnt/hdd/raspiblitz.conf + echo "${netprefix}cln=off" | sudo tee -a /mnt/hdd/raspiblitz.conf fi source /mnt/hdd/raspiblitz.conf From 477c36f3821bd3d1e9facfea983313425e1af619 Mon Sep 17 00:00:00 2001 From: openoms Date: Tue, 20 Jul 2021 19:12:15 +0100 Subject: [PATCH 0600/1295] cln-plugin.backup: fix path to backup-cli --- home.admin/config.scripts/cln-plugin.backup.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/config.scripts/cln-plugin.backup.sh b/home.admin/config.scripts/cln-plugin.backup.sh index af32c5a29..79ac296e9 100644 --- a/home.admin/config.scripts/cln-plugin.backup.sh +++ b/home.admin/config.scripts/cln-plugin.backup.sh @@ -66,7 +66,7 @@ if [ $1 = on ];then if [ ! -f /home/bitcoin/.lightning/${CLNETWORK}/backup.lock ];then # https://github.com/lightningd/plugins/tree/master/backup#setup echo "# Initialize the backup plugin" - sudo -u bitcoin /home/bitcoin/${netprefix}cln-plugins-enabled/backup/backup-cli init\ + sudo -u bitcoin ${plugindir}/backup/backup-cli init\ --lightning-dir /home/bitcoin/.lightning/${CLNETWORK} \ file:///home/bitcoin/${netprefix}lightningd.sqlite3.backup fi @@ -106,7 +106,7 @@ elif [ $1 = restore ];then fi # restore - /home/bitcoin/${netprefix}cln-plugins-enabled/backup/backup-cli restore \ + sudo -u bitcoin ${plugindir}/backup/backup-cli restore \ file:///home/bitcoin/${netprefix}lightningd.sqlite3.backup \ /home/bitcoin/.lightning/${CLNETWORK}/lightningd.sqlite3 From 91fbbaadceb65501cc1f41d858903e29202ace3b Mon Sep 17 00:00:00 2001 From: openoms Date: Tue, 20 Jul 2021 19:21:58 +0100 Subject: [PATCH 0601/1295] cln: hide unhelpful warnings during setup --- home.admin/config.scripts/cln-plugin.backup.sh | 4 +++- home.admin/config.scripts/cln.install.sh | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/home.admin/config.scripts/cln-plugin.backup.sh b/home.admin/config.scripts/cln-plugin.backup.sh index 79ac296e9..00f640d92 100644 --- a/home.admin/config.scripts/cln-plugin.backup.sh +++ b/home.admin/config.scripts/cln-plugin.backup.sh @@ -31,7 +31,7 @@ function install() { sudo -u bitcoin git clone https://github.com/lightningd/plugins.git fi - if [ $($lightningcli_alias plugin list | grep -c "${plugin}") -eq 0 ];then + if [ $($lightningcli_alias plugin list 2>/dev/null | grep -c "${plugin}") -eq 0 ];then echo "# Checking dependencies" sudo -u bitcoin pip install --user -r ${plugindir}/${plugin}/requirements.txt 1>/dev/null if [ $(echo $PATH | grep -c "/home/bitcoin/.local/bin") -eq 0 ]; then @@ -44,6 +44,8 @@ function install() { sudo ln -s ${plugindir}/backup/backup.py \ /home/bitcoin/${netprefix}cln-plugins-enabled/ fi + else + echo "# The ${plugin} plugin is already loaded" fi } diff --git a/home.admin/config.scripts/cln.install.sh b/home.admin/config.scripts/cln.install.sh index 694be2c5b..22a364f5d 100644 --- a/home.admin/config.scripts/cln.install.sh +++ b/home.admin/config.scripts/cln.install.sh @@ -132,8 +132,8 @@ if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = experimental ]||[ "$1" = testPR ]; echo "# Add plugin-dir: /home/bitcoin/${netprefix}cln-plugins-enabled" echo "# Add plugin-dir: /home/bitcoin/cln-plugins-available" # note that the disk is mounted with noexec - sudo -u bitcoin mkdir /home/bitcoin/${netprefix}cln-plugins-enabled - sudo -u bitcoin mkdir /home/bitcoin/cln-plugins-available + sudo -u bitcoin mkdir /home/bitcoin/${netprefix}cln-plugins-enabled 2>/dev/null + sudo -u bitcoin mkdir /home/bitcoin/cln-plugins-available 2>/dev/null echo "# Store the lightning data in /mnt/hdd/app-data/.lightning" echo "# Symlink to /home/bitcoin/" From 45d4f7867f83e11c48590310a5d718d9992e78f5 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 20 Jul 2021 22:40:12 +0200 Subject: [PATCH 0602/1295] remove old jinja template rendering --- home.admin/00infoBlitz.sh | 55 +-------------------------------------- 1 file changed, 1 insertion(+), 54 deletions(-) diff --git a/home.admin/00infoBlitz.sh b/home.admin/00infoBlitz.sh index 9045bdb2f..724418ff6 100755 --- a/home.admin/00infoBlitz.sh +++ b/home.admin/00infoBlitz.sh @@ -508,57 +508,4 @@ else fi -# if running as user "pi": -# - write results to a JSON file on RAM disk -# - update info.html file -if [ "${EUID}" = "$(id -u pi)" ]; then - - json_ln_baseInfo=$(echo "${ln_baseInfo}" | cut -c 11-) - - cat < /var/cache/raspiblitz/info.json -{ - "uptime": "${uptime}", - "datetime": "${datetime}", - "codeVersion": "${codeVersion}", - "hostname": "${hostname}", - "network": "${network}", - "torInfo": "${torInfo}", - "load": "${load}", - "tempC": "${tempC}", - "tempF": "${tempF}", - "ram": "${ram}", - "hddUsedInfo": "${hddUsedInfo}", - "local_ip": "${local_ip}", - "network_rx": "${network_rx}", - "network_tx": "${network_tx}", - "runningRTL": "${runningRTL}", - "networkVersion": "${networkVersion}", - "chain": "${chain}", - "progress": "${progress}", - "sync_percentage": "${sync_percentage}", - "public_addr_pre": "${public_addr_pre}", - "public_addr": "${public_addr}", - "public": "${public}", - "networkConnections": "${networkConnections}", - "mempool": "${mempool}", - "ln_sync": "${ln_sync}", - "ln_version": "${ln_version}", - "ln_baseInfo": "${json_ln_baseInfo}", - "ln_peers": "${ln_peers}", - "ln_channelInfo": "${ln_channelInfo}", - "ln_external": "${ln_external}" -} -EOF - - # use Jinja2 and apply json data to template to produce static html file - templateExists=$(sudo ls /var/cache/raspiblitz/info.json 2>/dev/null | grep -c 'info.json') - if [ ${templateExists} -gt 0 ]; then - res=$(/usr/local/bin/j2 /var/www/blitzweb/info/info.j2 /var/cache/raspiblitz/info.json -o /var/cache/raspiblitz/info.html) - if ! [ $? -eq 0 ]; then - echo "an error occured.. maybe JSON syntax is wrong..!" - echo "${res}" - fi - fi - -fi -# EOF +# EOF \ No newline at end of file From 84e17f5defc02f32bf417035b4a55b3e45a54cf6 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 20 Jul 2021 22:58:24 +0200 Subject: [PATCH 0603/1295] fix lnd unlock detection --- home.admin/00raspiblitz.sh | 2 +- home.admin/config.scripts/lnd.unlock.sh | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index da05baf80..4777323d8 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -103,7 +103,7 @@ do ############################ # LND Wallet Unlock - if [ "${walletLocked}" == "1" ] && [ "${state}" == "ready" ]; then + if [ "${lndActive}" == "1" ] && [ "${walletLocked}" == "1" ] && [ "${state}" == "ready" ]; then /home/admin/config.scripts/lnd.unlock.sh fi diff --git a/home.admin/config.scripts/lnd.unlock.sh b/home.admin/config.scripts/lnd.unlock.sh index b2304c20c..7dde7cd43 100755 --- a/home.admin/config.scripts/lnd.unlock.sh +++ b/home.admin/config.scripts/lnd.unlock.sh @@ -21,8 +21,9 @@ passwordC="$2" # check if wallet is already unlocked # echo "# checking LND wallet ... (can take some time)" -walletLocked=$(sudo -u bitcoin $lncli_alias --chain=${network} --network=${chain}net getinfo 2>&1 | grep -c unlock) -macaroonsMissing=$(sudo -u bitcoin $lncli_alias --chain=${network} --network=${chain}net getinfo 2>&1 | grep -c "unable to read macaroon") +lndError=$(sudo -u bitcoin lncli --chain=${network} --network=${chain}net getinfo 2>&1) +walletLocked=$(echo "${lndError}" | grep -c "Wallet is encrypted") +macaroonsMissing=$(echo "${lndError}" | grep -c "unable to read macaroon") # if action sis just status if [ "${action}" == "status" ]; then From 402f1a8a17c6c260692e1e5904a4890ffbbef4fc Mon Sep 17 00:00:00 2001 From: openoms Date: Wed, 21 Jul 2021 19:31:30 +0100 Subject: [PATCH 0604/1295] cln: look for files in .lightning dir with sudo --- home.admin/config.scripts/cln-plugin.backup.sh | 10 +++++----- home.admin/config.scripts/cln.install.sh | 2 +- home.admin/config.scripts/cln.setname.sh | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/home.admin/config.scripts/cln-plugin.backup.sh b/home.admin/config.scripts/cln-plugin.backup.sh index 00f640d92..0af6a8f55 100644 --- a/home.admin/config.scripts/cln-plugin.backup.sh +++ b/home.admin/config.scripts/cln-plugin.backup.sh @@ -34,7 +34,7 @@ function install() { if [ $($lightningcli_alias plugin list 2>/dev/null | grep -c "${plugin}") -eq 0 ];then echo "# Checking dependencies" sudo -u bitcoin pip install --user -r ${plugindir}/${plugin}/requirements.txt 1>/dev/null - if [ $(echo $PATH | grep -c "/home/bitcoin/.local/bin") -eq 0 ]; then + if [ $(echo $PATH | grep -c "/home/bitcoin/.local/bin") -eq 0 ];then export PATH=$PATH:/home/bitcoin/.local/bin echo "PATH=\$PATH:/home/bitcoin/.local/bin" | sudo tee -a /etc/profile fi @@ -65,7 +65,7 @@ if [ $1 = on ];then fi # init plugin - if [ ! -f /home/bitcoin/.lightning/${CLNETWORK}/backup.lock ];then + if ! sudo ls /home/bitcoin/.lightning/${CLNETWORK}/backup.lock; then # https://github.com/lightningd/plugins/tree/master/backup#setup echo "# Initialize the backup plugin" sudo -u bitcoin ${plugindir}/backup/backup-cli init\ @@ -89,7 +89,7 @@ elif [ $1 = restore ];then install #look for a backup to restore - if [ -f /home/bitcoin/${netprefix}lightningd.sqlite3.backup ];then + if sudo ls /home/bitcoin/${netprefix}lightningd.sqlite3.backup; then sudo systemctl stop ${netprefix}lightningd @@ -97,7 +97,7 @@ elif [ $1 = restore ];then # ./backup-cli restore file:///mnt/external/location ~/.lightning/bitcoin/lightningd.sqlite3 # make sure to not overwrite old database - if [ -f /home/bitcoin/.lightning/${CLNETWORK}/lightningd.sqlite3 ];then + if sudo ls /home/bitcoin/.lightning/${CLNETWORK}/lightningd.sqlite3;then now=$(date +"%Y_%m_%d_%H%M%S") echo "# Backup the existing old database on the disk" sudo cp /home/bitcoin/.lightning/${CLNETWORK}/lightningd.sqlite3 \ @@ -117,7 +117,7 @@ elif [ $1 = restore ];then elif [ $1 = backup-compact ];then - if [ -f /home/bitcoin/.lightning/${CLNETWORK}/lightningd.sqlite3 ];then + if sudo ls /home/bitcoin/.lightning/${CLNETWORK}/lightningd.sqlite3;then # https://github.com/lightningd/plugins/tree/master/backup#performing-backup-compaction echo "# Running $lightning-cli backup-compact ..." $lightning-cli backup-compact diff --git a/home.admin/config.scripts/cln.install.sh b/home.admin/config.scripts/cln.install.sh index 22a364f5d..776bbcb09 100644 --- a/home.admin/config.scripts/cln.install.sh +++ b/home.admin/config.scripts/cln.install.sh @@ -143,7 +143,7 @@ if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = experimental ]||[ "$1" = testPR ]; echo "# Create ${CLNCONF}" - if [ ! -f ${CLNCONF} ];then + if sudo ls ${CLNCONF};then echo " # lightningd configuration for ${network} ${CHAIN} diff --git a/home.admin/config.scripts/cln.setname.sh b/home.admin/config.scripts/cln.setname.sh index 5de660189..dcf138488 100644 --- a/home.admin/config.scripts/cln.setname.sh +++ b/home.admin/config.scripts/cln.setname.sh @@ -40,7 +40,7 @@ if [ ! -f ${blitzConfig} ]; then fi # check if cln config file exists -if [ ! -f ${clnConfig} ]; then +if sudo ls ${clnConfig}; then echo "FAIL - missing ${clnConfig}" exit 1 fi From a5747ba79659b17e38d17b5afa64831bcd585b25 Mon Sep 17 00:00:00 2001 From: openoms Date: Wed, 21 Jul 2021 19:43:53 +0100 Subject: [PATCH 0605/1295] cln: correct lightning name in FInalDialog + typo --- home.admin/_provision.setup.sh | 2 +- home.admin/setup.scripts/controlFinalDialog.sh | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/home.admin/_provision.setup.sh b/home.admin/_provision.setup.sh index deea8c9be..d38fd469b 100755 --- a/home.admin/_provision.setup.sh +++ b/home.admin/_provision.setup.sh @@ -386,7 +386,7 @@ if [ "${lightning}" == "cln" ]; then # NEW WALLET else - echo "Generare new CLN wallet ..." >> ${logFile} + echo "Generate new CLN wallet ..." >> ${logFile} # generate new wallet source <(sudo /home/admin/config.scripts/cln.hsmtool.sh new-force mainnet) diff --git a/home.admin/setup.scripts/controlFinalDialog.sh b/home.admin/setup.scripts/controlFinalDialog.sh index f4fc0a4e7..60e251a36 100755 --- a/home.admin/setup.scripts/controlFinalDialog.sh +++ b/home.admin/setup.scripts/controlFinalDialog.sh @@ -11,11 +11,16 @@ source ${SETUPFILE} ############################################ # SHOW SEED WORDS AFTER SETUP +if [ "${lightning}" == "lnd" ]; then + walletName="LND Wallet" +elif [ "${lightning}" == "cln" ]; then + walletName="C-lightning Wallet" +fi if [ "${setupPhase}" == "setup" ] && [ "${seedwords6x4NEW}" != "" ]; then ack=0 while [ ${ack} -eq 0 ] do - whiptail --title "IMPORTANT SEED WORDS - PLEASE WRITE DOWN" --msgbox "LND Wallet got created. Store these numbered words in a safe location:\n\n${seedwords6x4NEW}" 12 76 + whiptail --title "IMPORTANT SEED WORDS - PLEASE WRITE DOWN" --msgbox "${walletName} got created. Store these numbered words in a safe location:\n\n${seedwords6x4NEW}" 12 76 whiptail --title "Please Confirm" --yes-button "Show Again" --no-button "CONTINUE" --yesno " Are you sure that you wrote down the word list?" 8 55 if [ $? -eq 1 ]; then ack=1 From 6bb0c12308b88fc4eae9de5cd400f1449a88cbbf Mon Sep 17 00:00:00 2001 From: openoms Date: Wed, 21 Jul 2021 21:13:15 +0100 Subject: [PATCH 0606/1295] cln: make sure .lightning/bitcoin dir exists --- home.admin/config.scripts/cln.hsmtool.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/home.admin/config.scripts/cln.hsmtool.sh b/home.admin/config.scripts/cln.hsmtool.sh index 54114c80c..9a30fdfa6 100644 --- a/home.admin/config.scripts/cln.hsmtool.sh +++ b/home.admin/config.scripts/cln.hsmtool.sh @@ -144,6 +144,11 @@ function decryptHSMsecret() { ########### if [ "$1" = "new" ] || [ "$1" = "new-force" ] || [ "$1" = "seed" ] || [ "$1" = "seed-force" ]; then + # make sure /home/bitcoin/.lightning/bitcoin exists (when lightningd was not run yet) + if ! sudo ls /home/bitcoin/.lightning/bitcoin; then + sudo -u bitcoin mkdir -p /home/bitcoin/.lightning/bitcoin/ + fi + # check/delete existing wallet if [ "$1" = "new-force" ] || [ "$1" = "seed-force" ]; then echo "# deleting any old wallet ..." From db24ad1d579549bb604182e3c99d6472e4363d58 Mon Sep 17 00:00:00 2001 From: openoms Date: Wed, 21 Jul 2021 23:37:26 +0100 Subject: [PATCH 0607/1295] FinalDialog: make the 24 words fit --- home.admin/setup.scripts/controlFinalDialog.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/home.admin/setup.scripts/controlFinalDialog.sh b/home.admin/setup.scripts/controlFinalDialog.sh index 60e251a36..b69ac1f79 100755 --- a/home.admin/setup.scripts/controlFinalDialog.sh +++ b/home.admin/setup.scripts/controlFinalDialog.sh @@ -12,15 +12,16 @@ source ${SETUPFILE} ############################################ # SHOW SEED WORDS AFTER SETUP if [ "${lightning}" == "lnd" ]; then - walletName="LND Wallet" + walletName="LND" elif [ "${lightning}" == "cln" ]; then - walletName="C-lightning Wallet" + walletName="C-lightning" fi if [ "${setupPhase}" == "setup" ] && [ "${seedwords6x4NEW}" != "" ]; then ack=0 while [ ${ack} -eq 0 ] do - whiptail --title "IMPORTANT SEED WORDS - PLEASE WRITE DOWN" --msgbox "${walletName} got created. Store these numbered words in a safe location:\n\n${seedwords6x4NEW}" 12 76 + whiptail --title "IMPORTANT SEED WORDS - PLEASE WRITE DOWN" \ + --msgbox "Created the ${walletName} wallet.\nStore these numbered words in a safe location:\n\n${seedwords6x4NEW}" 13 76 whiptail --title "Please Confirm" --yes-button "Show Again" --no-button "CONTINUE" --yesno " Are you sure that you wrote down the word list?" 8 55 if [ $? -eq 1 ]; then ack=1 From a2c07c4184a1a4dada53126d4f5121adcaf2c5bd Mon Sep 17 00:00:00 2001 From: openoms Date: Wed, 21 Jul 2021 23:47:22 +0100 Subject: [PATCH 0608/1295] cln.install.sh: create cln config if not present --- home.admin/config.scripts/cln.install.sh | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/home.admin/config.scripts/cln.install.sh b/home.admin/config.scripts/cln.install.sh index 776bbcb09..2ec611a50 100644 --- a/home.admin/config.scripts/cln.install.sh +++ b/home.admin/config.scripts/cln.install.sh @@ -141,11 +141,9 @@ if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = experimental ]||[ "$1" = testPR ]; sudo mkdir -p /mnt/hdd/app-data/.lightning sudo ln -s /mnt/hdd/app-data/.lightning /home/bitcoin/ - - echo "# Create ${CLNCONF}" - if sudo ls ${CLNCONF};then - echo " -# lightningd configuration for ${network} ${CHAIN} + if ! sudo ls ${CLNCONF};then + echo "# Create ${CLNCONF}" + echo "# lightningd configuration for ${network} ${CHAIN} network=${CLNETWORK} announce-addr=127.0.0.1:${portprefix}9736 From 029c2797d58ca128fb40864a7bf4b9d095049fb6 Mon Sep 17 00:00:00 2001 From: JayDeLux Date: Thu, 22 Jul 2021 18:51:39 +0200 Subject: [PATCH 0609/1295] Update README.md (#2407) Updated a bit the HTTPS section to match with additional DYNU --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f4c4b533f..1ddebfd17 100644 --- a/README.md +++ b/README.md @@ -810,12 +810,16 @@ To try out the IP2TOR tunnel choose in `MAINMENU` the extra menu point of the Se If you want a Webservice like BTCPay Server or LNbits available to the outside internet (like with IP2TOR) people expect you to offer HTTPS address so that the communication between the client and your RaspiBlitz is encrypted. You could use the self-signed HTTPS certificate that RaspiBlitzis offering you, but this will give users Security Warnings in their browser and is not very user friendly. That's where you can use a LetsEncrypt Subscription to get a free valid HTTPS certificate that is excepted without warning from almost all common browsers. -Because you also need a domain name for that you will need to open a free account on [DuckDNS.org](https://www.duckdns.org) ... further options might be added in the future. +Because you also need a domain name for that you will need to open a free account, the following are presently supported, would be good to add more with the help of the community: +[DuckDNS.org](https://www.duckdns.org) +[DYNU.com](https://www.dynu.com) When you create a new LetsEncrypt subscription, you will be asked for your subdomain on DuckDNS and the Auth-Token of your DuckDNS account. Then RaspiBlitz tries to setup everything for you. If everything worked, you will find the subscription under `MAINMENU` > `SUBSCRIBE` > `LIST My Subscriptions`, where you can cancel it at any time if you wish. To try out the IP2TOR tunnel, go into `MAINMENU` and the extra menu point of the Service you want to use the bridge for. It should give you an updated URL to call your service. +HTTPS can be a hairy topic, you can try using a SSL Checker to help you quickly diagnose problems with your SSL certificate installation: [www.sslshopper.com/ssl-checker.html](https://www.sslshopper.com/ssl-checker.html) + #### PASSWORD: Change Passwords Change your passwords for security. From bd3c5668f9cf6bf22d26beb80eba2bc5a89051de Mon Sep 17 00:00:00 2001 From: rek79 Date: Thu, 22 Jul 2021 13:09:36 -0400 Subject: [PATCH 0610/1295] Simplify localIP detection and improve compatibility (#2432) --- home.admin/99connectMenu.sh | 5 ++--- home.admin/_background.sh | 2 +- home.admin/config.scripts/blitz.statusscan.sh | 2 +- home.admin/config.scripts/bonus.btcpayserver.sh | 2 +- home.admin/config.scripts/bonus.cryptoadvance-specter.sh | 2 +- home.admin/config.scripts/bonus.lit.sh | 4 ++-- home.admin/config.scripts/bonus.lnbits.sh | 2 +- home.admin/config.scripts/bonus.lndconnect.sh | 2 +- home.admin/config.scripts/bonus.mempool.sh | 2 +- home.admin/config.scripts/bonus.rtl.sh | 2 +- home.admin/config.scripts/bonus.sphinxrelay.sh | 2 +- home.admin/config.scripts/bonus.thunderhub.sh | 2 +- home.admin/config.scripts/internet.sh | 4 ++-- home.admin/config.scripts/lnd.export.sh | 4 ++-- 14 files changed, 18 insertions(+), 19 deletions(-) diff --git a/home.admin/99connectMenu.sh b/home.admin/99connectMenu.sh index f73d752d3..bdbb35f0f 100644 --- a/home.admin/99connectMenu.sh +++ b/home.admin/99connectMenu.sh @@ -166,10 +166,9 @@ HiddenServicePort 8333 127.0.0.1:8333" | sudo tee -a /etc/tor/torrc echo "# Running on ${chain}net" echo localIPrange=$(ip addr | grep 'state UP' -A2 | grep -E -v 'docker0|veth' |\ - grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' |\ + grep 'eth0\|wlan0\|enp0\|inet' | tail -n1 | awk '{print $2}' |\ awk -F. '{print $1"."$2"."$3".0/24"}') - localIP=$(ip addr | grep 'state UP' -A2 | grep -E -v 'docker0|veth' |\ - grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + 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) diff --git a/home.admin/_background.sh b/home.admin/_background.sh index 261ec167d..b2471b931 100755 --- a/home.admin/_background.sh +++ b/home.admin/_background.sh @@ -94,7 +94,7 @@ do echo "*** RECHECK DHCP-SERVER ***" # get the local network IP - localip=$(ip addr | grep 'state UP' -A2 | grep -E -v 'docker0|veth' | grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + localip=$(hostname -I | awk '{print $1}') echo "localip(${localip})" # detect a missing DHCP config diff --git a/home.admin/config.scripts/blitz.statusscan.sh b/home.admin/config.scripts/blitz.statusscan.sh index f7274a2f5..b8f5956b0 100755 --- a/home.admin/config.scripts/blitz.statusscan.sh +++ b/home.admin/config.scripts/blitz.statusscan.sh @@ -26,7 +26,7 @@ sudo mkdir /mnt/hdd/temp 2>/dev/null sudo chmod 777 -R /mnt/hdd/temp 2>/dev/null # localIP -localip=$(ip addr | grep 'state UP' -A2 | grep -E -v 'docker0|veth' | grep -E -i '(*[eth|ens|enp|eno|wlan|wlp][0-9]$)' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') +localip=$(hostname -I | awk '{print $1}') echo "localIP='${localip}'" # temp - no measurement in a VM diff --git a/home.admin/config.scripts/bonus.btcpayserver.sh b/home.admin/config.scripts/bonus.btcpayserver.sh index 3053b3b1a..b0653e847 100755 --- a/home.admin/config.scripts/bonus.btcpayserver.sh +++ b/home.admin/config.scripts/bonus.btcpayserver.sh @@ -27,7 +27,7 @@ if [ "$1" = "status" ]; then isInstalled=$(sudo ls /etc/systemd/system/btcpayserver.service 2>/dev/null | grep -c 'btcpayserver.service') echo "installed=${isInstalled}" - localIP=$(ip addr | grep 'state UP' -A2 | grep -E -v 'docker0|veth' | grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + localIP=$(hostname -I | awk '{print $1}') echo "localIP='${localIP}'" echo "httpsPort='23001'" echo "publicIP='${publicIP}'" diff --git a/home.admin/config.scripts/bonus.cryptoadvance-specter.sh b/home.admin/config.scripts/bonus.cryptoadvance-specter.sh index 36572fd55..33bd84480 100755 --- a/home.admin/config.scripts/bonus.cryptoadvance-specter.sh +++ b/home.admin/config.scripts/bonus.cryptoadvance-specter.sh @@ -22,7 +22,7 @@ if [ "$1" = "status" ]; then echo "configured=1" # get network info - localip=$(ip addr | grep 'state UP' -A2 | grep -E -v 'docker0|veth' | grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + localip=$(hostname -I | awk '{print $1}') toraddress=$(sudo cat /mnt/hdd/tor/cryptoadvance-specter/hostname 2>/dev/null) fingerprint=$(openssl x509 -in /home/specter/.specter/cert.pem -fingerprint -noout | cut -d"=" -f2) echo "localip='${localip}'" diff --git a/home.admin/config.scripts/bonus.lit.sh b/home.admin/config.scripts/bonus.lit.sh index 0cc8f5f29..e441d6d62 100644 --- a/home.admin/config.scripts/bonus.lit.sh +++ b/home.admin/config.scripts/bonus.lit.sh @@ -29,7 +29,7 @@ fi if [ "$1" = "menu" ]; then # get network info - localip=$(ip addr | grep 'state UP' -A2 | grep -E -v 'docker0' | grep 'eth0\|wlan0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + localip=$(hostname -I | awk '{print $1}') toraddress=$(sudo cat /mnt/hdd/tor/lit/hostname 2>/dev/null) fingerprint=$(sudo openssl x509 -in /home/lit/.lit/tls.cert -fingerprint -noout | cut -d"=" -f2) @@ -382,4 +382,4 @@ fi echo "FAIL - Unknown Parameter $1" echo "may need reboot to run normal again" exit 1 - \ No newline at end of file + diff --git a/home.admin/config.scripts/bonus.lnbits.sh b/home.admin/config.scripts/bonus.lnbits.sh index 523ad2dab..c5fc76a4f 100755 --- a/home.admin/config.scripts/bonus.lnbits.sh +++ b/home.admin/config.scripts/bonus.lnbits.sh @@ -85,7 +85,7 @@ if [ "$1" = "status" ]; then if [ "${LNBits}" = "on" ]; then echo "installed=1" - localIP=$(ip addr | grep 'state UP' -A2 | grep -E -v 'docker0|veth' | grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + localIP=$(hostname -I | awk '{print $1}') echo "localIP='${localIP}'" echo "httpPort='5000'" echo "httpsPort='5001'" diff --git a/home.admin/config.scripts/bonus.lndconnect.sh b/home.admin/config.scripts/bonus.lndconnect.sh index b72afb813..a1f2896db 100755 --- a/home.admin/config.scripts/bonus.lndconnect.sh +++ b/home.admin/config.scripts/bonus.lndconnect.sh @@ -135,7 +135,7 @@ fi # get the local IP as default host if [ ${#host} -eq 0 ]; then - host=$(ip addr | grep 'state UP' -A2 | grep -E -v 'docker0|veth' | grep 'eth0\|wlan0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + host=$(hostname -I | awk '{print $1}') fi # change host to dynDNS if set diff --git a/home.admin/config.scripts/bonus.mempool.sh b/home.admin/config.scripts/bonus.mempool.sh index de351a8d9..92d5b23df 100755 --- a/home.admin/config.scripts/bonus.mempool.sh +++ b/home.admin/config.scripts/bonus.mempool.sh @@ -32,7 +32,7 @@ This can take multiple hours. fi # get network info - localip=$(ip addr | grep 'state UP' -A2 | grep -E -v 'docker0' | grep 'eth0\|wlan0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + localip=$(hostname -I | awk '{print $1}') toraddress=$(sudo cat /mnt/hdd/tor/mempool/hostname 2>/dev/null) fingerprint=$(openssl x509 -in /mnt/hdd/app-data/nginx/tls.cert -fingerprint -noout | cut -d"=" -f2) diff --git a/home.admin/config.scripts/bonus.rtl.sh b/home.admin/config.scripts/bonus.rtl.sh index 5558a3823..ba4637942 100755 --- a/home.admin/config.scripts/bonus.rtl.sh +++ b/home.admin/config.scripts/bonus.rtl.sh @@ -74,7 +74,7 @@ fi if [ "$1" = "menu" ]; then # get network info - localip=$(ip addr | grep 'state UP' -A2 | grep -E -v 'docker0|veth' | grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + localip=$(hostname -I | awk '{print $1}') toraddress=$(sudo cat /mnt/hdd/tor/RTL/hostname 2>/dev/null) fingerprint=$(openssl x509 -in /mnt/hdd/app-data/nginx/tls.cert -fingerprint -noout | cut -d"=" -f2) diff --git a/home.admin/config.scripts/bonus.sphinxrelay.sh b/home.admin/config.scripts/bonus.sphinxrelay.sh index 79117abc5..83faecb75 100755 --- a/home.admin/config.scripts/bonus.sphinxrelay.sh +++ b/home.admin/config.scripts/bonus.sphinxrelay.sh @@ -199,7 +199,7 @@ if [ "$1" = "status" ]; then echo "installed=0" fi - localIP=$(ip addr | grep 'state UP' -A2 | grep -E -v 'docker0|veth' | grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + localIP=$(hostname -I | awk '{print $1}') echo "localIP='${localIP}'" echo "httpsPort='3301'" echo "httpPort='3300'" diff --git a/home.admin/config.scripts/bonus.thunderhub.sh b/home.admin/config.scripts/bonus.thunderhub.sh index c74712f0f..276bc3dc7 100755 --- a/home.admin/config.scripts/bonus.thunderhub.sh +++ b/home.admin/config.scripts/bonus.thunderhub.sh @@ -23,7 +23,7 @@ fi if [ "$1" = "menu" ]; then # get network info - localip=$(ip addr | grep 'state UP' -A2 | grep -E -v 'docker0|veth' | grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + localip=$(hostname -I | awk '{print $1}') toraddress=$(sudo cat /mnt/hdd/tor/thunderhub/hostname 2>/dev/null) fingerprint=$(openssl x509 -in /mnt/hdd/app-data/nginx/tls.cert -fingerprint -noout | cut -d"=" -f2) diff --git a/home.admin/config.scripts/internet.sh b/home.admin/config.scripts/internet.sh index 2e09c37ab..08bee8fd2 100755 --- a/home.admin/config.scripts/internet.sh +++ b/home.admin/config.scripts/internet.sh @@ -58,11 +58,11 @@ fi ############################################# # get local IP (from different sources) -localip_ALL=$(ip addr 2>/dev/null | grep 'state UP' -A2 | grep -E -v 'docker0|veth' | grep -E -i '(*[eth|ens|enp|eno|wlan|inet|wlp][0-9]$)' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') +localip_ALL=$(hostname -I | awk '{print $1}') if [ $(isValidIP ${localip_ALL}) -eq 0 ]; then localip_ALL="" fi -localip_LAN=$(ip addr 2>/dev/null | grep 'state UP' -A2 | grep -E -v 'docker0|veth' | grep -E -i '(*[eth][0-9]$)' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') +localip_LAN=$(ip addr 2>/dev/null | grep 'state UP' -A2 | grep -E -v 'docker0|veth' | grep -E -i '(*[eth][0-9]$)*' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') if [ $(isValidIP ${localip_LAN}) -eq 0 ]; then localip_LAN="" fi diff --git a/home.admin/config.scripts/lnd.export.sh b/home.admin/config.scripts/lnd.export.sh index 830810d74..e62e8df43 100755 --- a/home.admin/config.scripts/lnd.export.sh +++ b/home.admin/config.scripts/lnd.export.sh @@ -123,7 +123,7 @@ elif [ "${exportType}" = "btcpay" ]; then ########################### elif [ "${exportType}" = "scp" ]; then - local_ip=$(ip addr | grep 'state UP' -A2 | grep -E -v 'docker0|veth' | grep 'eth0\|wlan0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + local_ip=$(hostname -I | awk '{print $1}') clear echo "###### DOWNLOAD BY SCP ######" echo "Copy, paste and execute these commands in your client terminal to download the files." @@ -141,7 +141,7 @@ elif [ "${exportType}" = "scp" ]; then ########################### elif [ "${exportType}" = "http" ]; then - local_ip=$(ip addr | grep 'state UP' -A2 | grep -E -v 'docker0|veth' | grep 'eth0\|wlan0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + local_ip=$(hostname -I | awk '{print $1}') randomPortNumber=$(shuf -i 20000-39999 -n 1) sudo ufw allow from 192.168.0.0/16 to any port ${randomPortNumber} comment 'temp http server' clear From efd6c6b1516c8ea722cc062b31c1231a9acfd430 Mon Sep 17 00:00:00 2001 From: wiz Date: Fri, 23 Jul 2021 02:12:23 +0900 Subject: [PATCH 0611/1295] Bump mempool to v2.2.0 (#2397) --- home.admin/config.scripts/bonus.mempool.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/bonus.mempool.sh b/home.admin/config.scripts/bonus.mempool.sh index 6327b8549..b57fee6e1 100755 --- a/home.admin/config.scripts/bonus.mempool.sh +++ b/home.admin/config.scripts/bonus.mempool.sh @@ -2,7 +2,7 @@ # https://github.com/mempool/mempool -pinnedVersion="v2.1.2" +pinnedVersion="v2.2.0" # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then From 218b278f71ae14e51c5851910c8d2100a2a2573b Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 22 Jul 2021 19:14:08 +0200 Subject: [PATCH 0612/1295] #2397 add info to CHANGES.md --- CHANGES.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index a575d374a..bbbf47f80 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,9 @@ # CHANGES between Releases +## What's new in Version 1.7.1 of RaspiBlitz? + +- Update: mempool space 2.2.0 [details](https://github.com/mempool/mempool) + ## What's new in Version 1.7.0 of RaspiBlitz? - New: Raspberry Pi OS Base Image 64-bit (April 2021) From 23aec4d7917518cf183cc6c3f8e0b948ffd18c07 Mon Sep 17 00:00:00 2001 From: satoshiops <75155553+satoshiops@users.noreply.github.com> Date: Thu, 22 Jul 2021 10:25:33 -0700 Subject: [PATCH 0613/1295] Update FAQ.md (#2421) Option not found in main menu, but in the lightning options sub menu. --- FAQ.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FAQ.md b/FAQ.md index d37e8fad8..9c26087c0 100644 --- a/FAQ.md +++ b/FAQ.md @@ -303,7 +303,7 @@ Now start the Lightning App again. Your wallet password should now be your RaspI ## How do I change the Name/Alias of my lightning node -Use the "Change Name/Alias of Node" option in the main menu. The RaspiBlitz will automatically reboot after this. +Use the "Change Name/Alias of Node" option in the Lightning - LND Wallet Options menu. The RaspiBlitz will automatically reboot after this. ## What to do when on SSH I see "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!" From 09d89fd410a8cca96de697c5e967466ccc79c3e5 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 22 Jul 2021 23:52:12 +0200 Subject: [PATCH 0614/1295] show tail info on provision --- home.admin/setup.scripts/eventInfoWait.sh | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/eventInfoWait.sh b/home.admin/setup.scripts/eventInfoWait.sh index 19347ead6..969fd3a19 100644 --- a/home.admin/setup.scripts/eventInfoWait.sh +++ b/home.admin/setup.scripts/eventInfoWait.sh @@ -81,12 +81,28 @@ For shutdown use command: off elif [ "${eventID}" == "provision" ] || [ "${eventID}" == "recovering" ]; then - dialog --backtitle "${backtitle}" --cr-wrap --infobox " + if [ "${mode}" == "ssh" ]; then + + # provision info when logged in + dialog --backtitle "${backtitle}" --cr-wrap --infobox " +Upgrade/Recover/Provision +---> ${contentString} + +Run 'tail -f ./raspiblitz.log' in +new terminal to follow install logs. +" 9 40 + + else + + # provision on LCD, etc + dialog --backtitle "${backtitle}" --cr-wrap --infobox " Upgrade/Recover/Provision ---> ${contentString} Please keep running until done. " 7 40 + fi + elif [ "${eventID}" == "repair" ] && [ "${mode}" == "lcd" ]; then dialog --backtitle "${backtitle}" --cr-wrap --infobox " From b21af26147f68ce1dcc658c09a803094ad31053c Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 23 Jul 2021 00:49:30 +0200 Subject: [PATCH 0615/1295] only show lnd options when activated --- home.admin/00mainMenu.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index 46f73ee86..150d9ebc0 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -185,9 +185,12 @@ fi # Basic Options OPTIONS+=(INFO "RaspiBlitz Status Screen") -OPTIONS+=(LND "LND Wallet Options") -if [ "$cln" == "on" ]||[ $chain = test ]&&[ "$tcln" == "on" ]; then +if [ "${lightning}" == "lnd" ] + OPTIONS+=(LND "LND Wallet Options") +fi + +if [ "$cln" == "on" ] || [ $chain = test ] && [ "$tcln" == "on" ]; then OPTIONS+=(CLN "C-lightning Wallet Options") HEIGHT=$((HEIGHT+1)) CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) From 77d86b51e18bce08ae33812baa59cf6aa249b8ec Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 23 Jul 2021 00:51:18 +0200 Subject: [PATCH 0616/1295] fix syntax --- home.admin/00mainMenu.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index 150d9ebc0..3a54bc7b3 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -186,7 +186,7 @@ fi # Basic Options OPTIONS+=(INFO "RaspiBlitz Status Screen") -if [ "${lightning}" == "lnd" ] +if [ "${lightning}" == "lnd" ]; then OPTIONS+=(LND "LND Wallet Options") fi From 594f62ecd9bc4ad32fff12ded22bf02294ca188e Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 23 Jul 2021 00:56:18 +0200 Subject: [PATCH 0617/1295] only show main lightning impl options for RC1 --- home.admin/00mainMenu.sh | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index 3a54bc7b3..22c82ccaf 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -186,16 +186,24 @@ fi # Basic Options OPTIONS+=(INFO "RaspiBlitz Status Screen") +# if LND is main lightning if [ "${lightning}" == "lnd" ]; then OPTIONS+=(LND "LND Wallet Options") fi -if [ "$cln" == "on" ] || [ $chain = test ] && [ "$tcln" == "on" ]; then +# if C-Lighthing is main lightning +if [ "${lightning}" == "cln" ]; then +# if CLN is main lightning OPTIONS+=(CLN "C-lightning Wallet Options") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi +# TODO: when more then one Lightning is active +#if [ "$cln" == "on" ] || [ $chain = test ] && [ "$tcln" == "on" ]; then +# OPTIONS+=(CLN "C-lightning Wallet Options") +# HEIGHT=$((HEIGHT+1)) +# CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) +#fi + OPTIONS+=(SETTINGS "Node Settings & Options") OPTIONS+=(SERVICES "Additional Apps & Services") OPTIONS+=(SYSTEM "Monitoring & Configuration") From 5bde0c97e4ca16a3803463f9784c9f5d4ab05f77 Mon Sep 17 00:00:00 2001 From: openoms Date: Fri, 23 Jul 2021 00:19:59 +0100 Subject: [PATCH 0618/1295] cln: always start the lightnind.service --- home.admin/config.scripts/cln.install-service.sh | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/home.admin/config.scripts/cln.install-service.sh b/home.admin/config.scripts/cln.install-service.sh index 403d51b9b..ab1ecc90b 100644 --- a/home.admin/config.scripts/cln.install-service.sh +++ b/home.admin/config.scripts/cln.install-service.sh @@ -4,9 +4,6 @@ # usage: # /home/admin/config.scripts/cln.install-service.sh $CHAIN -source /mnt/hdd/raspiblitz.conf -source /home/admin/raspiblitz.info - # source <(/home/admin/config.scripts/network.aliases.sh getvars cln ) source <(/home/admin/config.scripts/network.aliases.sh getvars cln $1) @@ -58,10 +55,10 @@ PrivateDevices=true [Install] WantedBy=multi-user.target " | sudo tee /etc/systemd/system/${netprefix}lightningd.service + sudo systemctl daemon-reload sudo systemctl enable ${netprefix}lightningd echo "# Enabled the ${netprefix}lightningd.service" -if [ "${state}" == "ready" ]; then - sudo systemctl start ${netprefix}lightningd - echo "# Started the ${netprefix}lightningd.service" -fi \ No newline at end of file + +sudo systemctl start ${netprefix}lightningd +echo "# Started the ${netprefix}lightningd.service" \ No newline at end of file From 1638961e7a5b33dd596b08987ae36d052cfba0c6 Mon Sep 17 00:00:00 2001 From: openoms Date: Fri, 23 Jul 2021 10:25:32 +0100 Subject: [PATCH 0619/1295] cln: clear before showing summary --- home.admin/99clnMenu.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/99clnMenu.sh b/home.admin/99clnMenu.sh index bf7343418..3703658be 100644 --- a/home.admin/99clnMenu.sh +++ b/home.admin/99clnMenu.sh @@ -58,6 +58,7 @@ CHOICE=$(dialog --clear \ case $CHOICE in SUMMARY) + clear /home/admin/config.scripts/cln-plugin.summary.sh $CHAIN ;; PEERING) From b906120e3d4ce97a009d4005cc9d0dd22df3cf68 Mon Sep 17 00:00:00 2001 From: openoms Date: Fri, 23 Jul 2021 10:36:45 +0100 Subject: [PATCH 0620/1295] start cln on the end of provisioning --- home.admin/_provision_.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/home.admin/_provision_.sh b/home.admin/_provision_.sh index e46317a21..fa0808dc7 100755 --- a/home.admin/_provision_.sh +++ b/home.admin/_provision_.sh @@ -721,7 +721,11 @@ fi # MAKE SURE SERVICES ARE RUNNING echo "Make sure main services are running .." >> ${logFile} sudo systemctl start ${network}d -sudo systemctl start lnd +if [ "${lightning}" == "lnd" ];then + sudo systemctl start lnd +elif [ "${lightning}" == "cln" ];then + sudo systemctl start lightningd +fi echo "DONE - Give raspi some cool off time after hard building .... 5 secs sleep" >> ${logFile} sleep 5 From 90d6f8ba5478f94119843567ee35264b1eb88387 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 24 Jul 2021 00:31:30 +0200 Subject: [PATCH 0621/1295] exit 0 on cln menu --- home.admin/99clnMenu.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/home.admin/99clnMenu.sh b/home.admin/99clnMenu.sh index 3703658be..5e78ccf0d 100644 --- a/home.admin/99clnMenu.sh +++ b/home.admin/99clnMenu.sh @@ -87,7 +87,7 @@ case $CHOICE in if [ ! -f /home/bitcoin/suez/suez ];then /home/admin/config.scripts/bonus.suez.sh on fi - cd /home/bitcoin/suez || exit 1 + cd /home/bitcoin/suez || exit 0 sudo -u bitcoin /home/bitcoin/.local/bin/poetry run ./suez \ --client=c-lightning \ --client-args=--conf=/home/bitcoin/.lightning/${netprefix}config @@ -111,3 +111,5 @@ case $CHOICE in read key ;; esac + +exit 0 \ No newline at end of file From 5014799f6ef54d6d64b3e4ca3646dbe560f65d63 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 24 Jul 2021 00:33:51 +0200 Subject: [PATCH 0622/1295] press key after single actions --- home.admin/99clnMenu.sh | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/home.admin/99clnMenu.sh b/home.admin/99clnMenu.sh index 5e78ccf0d..70e1d918c 100644 --- a/home.admin/99clnMenu.sh +++ b/home.admin/99clnMenu.sh @@ -60,27 +60,43 @@ case $CHOICE in SUMMARY) clear /home/admin/config.scripts/cln-plugin.summary.sh $CHAIN + echo "Press ENTER to return to main menu." + read key ;; PEERING) /home/admin/BBconnectPeer.sh cln $CHAIN + echo "Press ENTER to return to main menu." + read key ;; FUNDING) /home/admin/BBfundWallet.sh cln $CHAIN + echo "Press ENTER to return to main menu." + read key ;; CASHOUT) /home/admin/BBcashoutWallet.sh cln $CHAIN + echo "Press ENTER to return to main menu." + read key ;; CHANNEL) /home/admin/BBopenChannel.sh cln $CHAIN + echo "Press ENTER to return to main menu." + read key ;; SEND) /home/admin/BBpayInvoice.sh cln $CHAIN + echo "Press ENTER to return to main menu." + read key ;; RECEIVE) /home/admin/BBcreateInvoice.sh cln $CHAIN + echo "Press ENTER to return to main menu." + read key ;; NAME) sudo /home/admin/config.scripts/cln.setname.sh $CHAIN + echo "Press ENTER to return to main menu." + read key ;; SUEZ) clear From 36624395d8b0854b909cf2cb7f048f7682943233 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 24 Jul 2021 00:42:38 +0200 Subject: [PATCH 0623/1295] remove key press on cln actions --- home.admin/99clnMenu.sh | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/home.admin/99clnMenu.sh b/home.admin/99clnMenu.sh index 70e1d918c..a8d66e844 100644 --- a/home.admin/99clnMenu.sh +++ b/home.admin/99clnMenu.sh @@ -65,38 +65,24 @@ case $CHOICE in ;; PEERING) /home/admin/BBconnectPeer.sh cln $CHAIN - echo "Press ENTER to return to main menu." - read key ;; FUNDING) /home/admin/BBfundWallet.sh cln $CHAIN - echo "Press ENTER to return to main menu." - read key ;; CASHOUT) /home/admin/BBcashoutWallet.sh cln $CHAIN - echo "Press ENTER to return to main menu." - read key ;; CHANNEL) /home/admin/BBopenChannel.sh cln $CHAIN - echo "Press ENTER to return to main menu." - read key ;; SEND) /home/admin/BBpayInvoice.sh cln $CHAIN - echo "Press ENTER to return to main menu." - read key ;; RECEIVE) /home/admin/BBcreateInvoice.sh cln $CHAIN - echo "Press ENTER to return to main menu." - read key ;; NAME) sudo /home/admin/config.scripts/cln.setname.sh $CHAIN - echo "Press ENTER to return to main menu." - read key ;; SUEZ) clear From 7ce01df69404a23fcbc970fcd98908a3a3601d76 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 24 Jul 2021 01:13:19 +0200 Subject: [PATCH 0624/1295] change to none --- home.admin/_provision.update.sh | 199 ++++++++++-------- home.admin/_provision_.sh | 5 +- .../setup.scripts/controlSetupDialog.sh | 2 +- .../dialogBlockchainLightning.sh | 2 +- 4 files changed, 120 insertions(+), 88 deletions(-) diff --git a/home.admin/_provision.update.sh b/home.admin/_provision.update.sh index c8184dfbf..4df22f739 100755 --- a/home.admin/_provision.update.sh +++ b/home.admin/_provision.update.sh @@ -47,6 +47,12 @@ if [ ${#hostname} -eq 0 ]; then exit 1 fi +# check if config files contain lightning (lnd is default) +if [ "${lightning}" == "" ]; then + lightning="lnd" + echo "lightning=${lightning}" >> ${configFile} +fi + # load codeVersion source /home/admin/_version.info @@ -130,84 +136,6 @@ else echo "WARN: /mnt/hdd/bitcoin/bitcoin.conf not found" >> ${logFile} fi -# if old lnd.conf exists ... -configExists=$(sudo ls /mnt/hdd/lnd/lnd.conf | grep -c '.conf') -if [ ${configExists} -eq 1 ]; then - - # remove RPC user & pass from lnd.conf ... since v1.7 - # https://github.com/rootzoll/raspiblitz/issues/2160 - echo "- #2160 lnd.conf --> make sure contains no RPC user/pass for bitcoind" >> ${logFile} - sudo sed -i '/^\[Bitcoind\]/d' /mnt/hdd/lnd/lnd.conf - sudo sed -i '/^bitcoind.rpchost=/d' /mnt/hdd/lnd/lnd.conf - sudo sed -i '/^bitcoind.rpcpass=/d' /mnt/hdd/lnd/lnd.conf - sudo sed -i '/^bitcoind.rpcuser=/d' /mnt/hdd/lnd/lnd.conf - sudo sed -i '/^bitcoind.zmqpubrawblock=/d' /mnt/hdd/lnd/lnd.conf - sudo sed -i '/^bitcoind.zmqpubrawtx=/d' /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) - 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) - 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 - 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) - if [ "${configParamExists}" == "0" ]; then - echo " - ADDING 'sync-freelist'" >> ${logFile} - sudo 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) - if [ "${configParamExists}" == "0" ]; then - echo " - ADDING 'stagger-initial-reconnect'" >> ${logFile} - sudo 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) - if [ "${configParamExists}" == "0" ]; then - echo " - ADDING 'tlsautorefresh'" >> ${logFile} - sudo 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) - if [ "${configParamExists}" == "0" ]; then - echo " - ADDING 'tlsdisableautofill'" >> ${logFile} - sudo sed -i "${applicationOptionsLineNumber}itlsdisableautofill=1" /mnt/hdd/lnd/lnd.conf - else - echo " - OK 'tlsdisableautofill' exists (${configParamExists})" >> ${logFile} - fi - - else - echo " - WARN: section '[Application Options]' not found in lnd.conf" >> ${logFile} - fi - -else - echo "WARN: /mnt/hdd/lnd/lnd.conf not found" >> ${logFile} -fi - echo "Version Code: ${codeVersion}" >> ${logFile} echo "Version Data: ${raspiBlitzVersion}" >> ${logFile} @@ -231,10 +159,117 @@ sudo systemctl daemon-reload >> ${logFile} sudo systemctl enable ${network}d.service >> ${logFile} sudo systemctl start ${network}d.service >> ${logFile} -# start lightning service -echo "Starting LND Service ..." >> ${logFile} -sudo systemctl enable lnd >> ${logFile} -sudo systemctl start lnd >> ${logFile} +# INSTALL LND on Upadte/Recovery +if [ "${lightning}" == "lnd" ]; then + + # prepare lnd service + sed -i "5s/.*/Wants=${network}d.service/" /home/admin/assets/lnd.service >> ${logFile} 2>&1 + sed -i "6s/.*/After=${network}d.service/" /home/admin/assets/lnd.service >> ${logFile} 2>&1 + sudo cp /home/admin/assets/lnd.service /etc/systemd/system/lnd.service >> ${logFile} 2>&1 + + # if old lnd.conf exists ... + configExists=$(sudo ls /mnt/hdd/lnd/lnd.conf | grep -c '.conf') + if [ ${configExists} -eq 1 ]; then + + # remove RPC user & pass from lnd.conf ... since v1.7 + # https://github.com/rootzoll/raspiblitz/issues/2160 + echo "- #2160 lnd.conf --> make sure contains no RPC user/pass for bitcoind" >> ${logFile} + sudo sed -i '/^\[Bitcoind\]/d' /mnt/hdd/lnd/lnd.conf + sudo sed -i '/^bitcoind.rpchost=/d' /mnt/hdd/lnd/lnd.conf + sudo sed -i '/^bitcoind.rpcpass=/d' /mnt/hdd/lnd/lnd.conf + sudo sed -i '/^bitcoind.rpcuser=/d' /mnt/hdd/lnd/lnd.conf + sudo sed -i '/^bitcoind.zmqpubrawblock=/d' /mnt/hdd/lnd/lnd.conf + sudo sed -i '/^bitcoind.zmqpubrawtx=/d' /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) + 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) + 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 + 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) + if [ "${configParamExists}" == "0" ]; then + echo " - ADDING 'sync-freelist'" >> ${logFile} + sudo 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) + if [ "${configParamExists}" == "0" ]; then + echo " - ADDING 'stagger-initial-reconnect'" >> ${logFile} + sudo 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) + if [ "${configParamExists}" == "0" ]; then + echo " - ADDING 'tlsautorefresh'" >> ${logFile} + sudo 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) + if [ "${configParamExists}" == "0" ]; then + echo " - ADDING 'tlsdisableautofill'" >> ${logFile} + sudo sed -i "${applicationOptionsLineNumber}itlsdisableautofill=1" /mnt/hdd/lnd/lnd.conf + else + echo " - OK 'tlsdisableautofill' exists (${configParamExists})" >> ${logFile} + fi + + else + echo " - WARN: section '[Application Options]' not found in lnd.conf" >> ${logFile} + fi + else + echo "WARN: /mnt/hdd/lnd/lnd.conf not found" >> ${logFile} + fi + + # start LND service + echo "Starting LND Service ..." >> ${logFile} + sudo systemctl enable lnd >> ${logFile} + sudo systemctl start lnd >> ${logFile} + + +elif [ "${lightning}" == "cln" ]; then + + echo "Install C-lightning on update" >> ${logFile} + sudo sed -i "s/^message=.*/message='C-Lightning Install'/g" ${infoFile} + sudo /home/admin/config.scripts/cln.install.sh on mainnet >> ${logFile} + sudo sed -i "s/^message=.*/message='C-Lightning Setup'/g" ${infoFile} + +elif [ "${lightning}" == "none" ]; then + + echo "No Lightnig" >> ${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 echo "END Migration/Init" >> ${logFile} diff --git a/home.admin/_provision_.sh b/home.admin/_provision_.sh index fa0808dc7..a22e535a4 100755 --- a/home.admin/_provision_.sh +++ b/home.admin/_provision_.sh @@ -149,14 +149,11 @@ sudo cp -r /mnt/hdd/lnd/data/chain /home/admin/.lnd/data/chain >> ${logFile} 2>& sudo chown -R admin:admin /home/admin/.${network} >> ${logFile} 2>&1 sudo chown -R admin:admin /home/admin/.lnd >> ${logFile} 2>&1 sudo cp /home/admin/assets/${network}d.service /etc/systemd/system/${network}d.service >> ${logFile} 2>&1 -sed -i "5s/.*/Wants=${network}d.service/" /home/admin/assets/lnd.service >> ${logFile} 2>&1 -sed -i "6s/.*/After=${network}d.service/" /home/admin/assets/lnd.service >> ${logFile} 2>&1 -sudo cp /home/admin/assets/lnd.service /etc/systemd/system/lnd.service >> ${logFile} 2>&1 - sudo cp /home/admin/assets/tmux.conf.local /mnt/hdd/.tmux.conf.local >> ${logFile} 2>&1 sudo chown admin:admin /mnt/hdd/.tmux.conf.local >> ${logFile} 2>&1 sudo ln -s -f /mnt/hdd/.tmux.conf.local /home/admin/.tmux.conf.local >> ${logFile} 2>&1 + # backup LND dir (especially for macaroons and tlscerts) # https://github.com/rootzoll/raspiblitz/issues/324 echo "*** Make backup of LND directory" >> ${logFile} diff --git a/home.admin/setup.scripts/controlSetupDialog.sh b/home.admin/setup.scripts/controlSetupDialog.sh index faa19db87..74f6768ed 100755 --- a/home.admin/setup.scripts/controlSetupDialog.sh +++ b/home.admin/setup.scripts/controlSetupDialog.sh @@ -234,7 +234,7 @@ if [ "${setupPhase}" == "setup" ]; then lightningWalletDone=0 source ${SETUPFILE} - if [ "${lightning}" == "" ]; then lightningWalletDone=1; fi + if [ "${lightning}" == "none" ]; then lightningWalletDone=1; fi while [ "${lightningWalletDone}" == "0" ] do diff --git a/home.admin/setup.scripts/dialogBlockchainLightning.sh b/home.admin/setup.scripts/dialogBlockchainLightning.sh index 7299332f2..dece24760 100644 --- a/home.admin/setup.scripts/dialogBlockchainLightning.sh +++ b/home.admin/setup.scripts/dialogBlockchainLightning.sh @@ -73,7 +73,7 @@ if [ "${network}" == "bitcoin" ]; then lightning="cln" ;; NONE) - lightning="" + lightning="none" ;; *) clear From 3f937dec9e1305d3c2a2fbd26f33ed0724500dab Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 24 Jul 2021 23:59:16 +0200 Subject: [PATCH 0625/1295] detect cln running --- home.admin/config.scripts/blitz.statusscan.sh | 2 +- home.admin/setup.scripts/eventBlockchainSync.sh | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/home.admin/config.scripts/blitz.statusscan.sh b/home.admin/config.scripts/blitz.statusscan.sh index b8f5956b0..aea645c4e 100755 --- a/home.admin/config.scripts/blitz.statusscan.sh +++ b/home.admin/config.scripts/blitz.statusscan.sh @@ -269,7 +269,7 @@ if [ ${lndRunning} -eq 1 ]; then fi # is CLN running -clnRunning=$(systemctl status ${netprefix}cln.service 2>/dev/null | grep -c running) +clnRunning=$(systemctl status ${netprefix}lightningd.service 2>/dev/null | grep -c running) echo "clnActive=${clnRunning}" if [ ${clnRunning} -eq 1 ]; then echo "# TODO: cln status statistics" diff --git a/home.admin/setup.scripts/eventBlockchainSync.sh b/home.admin/setup.scripts/eventBlockchainSync.sh index af3f5a990..cc34d79c7 100644 --- a/home.admin/setup.scripts/eventBlockchainSync.sh +++ b/home.admin/setup.scripts/eventBlockchainSync.sh @@ -65,9 +65,13 @@ do # setting info string infoStr=" Blockchain Progress : ${syncProgress}\n" - if [ "${lightning}" != "" ]; then - # if lightning is active + if [ "${lightning}" != "lnd" ]; then + # if LND is active infoStr="${infoStr} Lightning Progress : ${scanProgress}\n ${actionString}" + if [ "${lightning}" != "cln" ]; then + # if CLN is active + # TODO: show a scan progress of C-Lightning + infoStr="${infoStr} \n ${actionString}" else # if lightning is deactivated (leave line clear) infoStr="${infoStr} \n ${actionString}" From b7641b6a8b71338eb458771b541e2c490917735b Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 25 Jul 2021 00:00:39 +0200 Subject: [PATCH 0626/1295] fix syntax --- home.admin/setup.scripts/eventBlockchainSync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/eventBlockchainSync.sh b/home.admin/setup.scripts/eventBlockchainSync.sh index cc34d79c7..aa1cc686a 100644 --- a/home.admin/setup.scripts/eventBlockchainSync.sh +++ b/home.admin/setup.scripts/eventBlockchainSync.sh @@ -68,7 +68,7 @@ do if [ "${lightning}" != "lnd" ]; then # if LND is active infoStr="${infoStr} Lightning Progress : ${scanProgress}\n ${actionString}" - if [ "${lightning}" != "cln" ]; then + elif [ "${lightning}" != "cln" ]; then # if CLN is active # TODO: show a scan progress of C-Lightning infoStr="${infoStr} \n ${actionString}" From cc36357beac780f98f0b039afcf07b00e77ebd94 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 25 Jul 2021 00:01:55 +0200 Subject: [PATCH 0627/1295] fix lightniing info --- home.admin/setup.scripts/eventBlockchainSync.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/setup.scripts/eventBlockchainSync.sh b/home.admin/setup.scripts/eventBlockchainSync.sh index aa1cc686a..8f7949ecb 100644 --- a/home.admin/setup.scripts/eventBlockchainSync.sh +++ b/home.admin/setup.scripts/eventBlockchainSync.sh @@ -65,10 +65,10 @@ do # setting info string infoStr=" Blockchain Progress : ${syncProgress}\n" - if [ "${lightning}" != "lnd" ]; then + if [ "${lightning}" == "lnd" ]; then # if LND is active infoStr="${infoStr} Lightning Progress : ${scanProgress}\n ${actionString}" - elif [ "${lightning}" != "cln" ]; then + elif [ "${lightning}" == "cln" ]; then # if CLN is active # TODO: show a scan progress of C-Lightning infoStr="${infoStr} \n ${actionString}" From 25e695306fed257bf1ca3b8a2c827f9971ed7c77 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 25 Jul 2021 00:03:25 +0200 Subject: [PATCH 0628/1295] add TODO for CLN --- home.admin/setup.scripts/eventBlockchainSync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/setup.scripts/eventBlockchainSync.sh b/home.admin/setup.scripts/eventBlockchainSync.sh index 8f7949ecb..e2da56e5a 100644 --- a/home.admin/setup.scripts/eventBlockchainSync.sh +++ b/home.admin/setup.scripts/eventBlockchainSync.sh @@ -71,7 +71,7 @@ do elif [ "${lightning}" == "cln" ]; then # if CLN is active # TODO: show a scan progress of C-Lightning - infoStr="${infoStr} \n ${actionString}" + infoStr="${infoStr} Lightning Progress : TODO\n ${actionString}" else # if lightning is deactivated (leave line clear) infoStr="${infoStr} \n ${actionString}" From 90669b40d0c056aa615143d41c9bc0a034a1b740 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 25 Jul 2021 00:39:24 +0200 Subject: [PATCH 0629/1295] add clnblockheight --- home.admin/config.scripts/blitz.statusscan.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/home.admin/config.scripts/blitz.statusscan.sh b/home.admin/config.scripts/blitz.statusscan.sh index aea645c4e..7bf984cab 100755 --- a/home.admin/config.scripts/blitz.statusscan.sh +++ b/home.admin/config.scripts/blitz.statusscan.sh @@ -272,6 +272,10 @@ fi clnRunning=$(systemctl status ${netprefix}lightningd.service 2>/dev/null | grep -c running) echo "clnActive=${clnRunning}" if [ ${clnRunning} -eq 1 ]; then + + clnInfo=$(${netprefix}lightning-cli getinfo) + clnBlockHeight=$(echo "${clnInfo}" | jq -r '.blockheight' | tr -cd '[[:digit:]]') + echo "clnBlockHeight=${clnBlockHeight}" echo "# TODO: cln status statistics" fi From 56a294b24aa4cca98ea2d8d715c81ea4991bb297 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 25 Jul 2021 00:41:11 +0200 Subject: [PATCH 0630/1295] zty with user bitcoin --- home.admin/config.scripts/blitz.statusscan.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.statusscan.sh b/home.admin/config.scripts/blitz.statusscan.sh index 7bf984cab..70b46fdbf 100755 --- a/home.admin/config.scripts/blitz.statusscan.sh +++ b/home.admin/config.scripts/blitz.statusscan.sh @@ -273,7 +273,7 @@ clnRunning=$(systemctl status ${netprefix}lightningd.service 2>/dev/null | grep echo "clnActive=${clnRunning}" if [ ${clnRunning} -eq 1 ]; then - clnInfo=$(${netprefix}lightning-cli getinfo) + clnInfo=$(sudo -u bitcoin lightning-cli getinfo) clnBlockHeight=$(echo "${clnInfo}" | jq -r '.blockheight' | tr -cd '[[:digit:]]') echo "clnBlockHeight=${clnBlockHeight}" echo "# TODO: cln status statistics" From 2dc53d1b18d32fcbd1dc9962376e2c381a12a210 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 25 Jul 2021 00:47:11 +0200 Subject: [PATCH 0631/1295] check synced to chain for cln --- home.admin/config.scripts/blitz.statusscan.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/home.admin/config.scripts/blitz.statusscan.sh b/home.admin/config.scripts/blitz.statusscan.sh index 70b46fdbf..78488d256 100755 --- a/home.admin/config.scripts/blitz.statusscan.sh +++ b/home.admin/config.scripts/blitz.statusscan.sh @@ -272,11 +272,17 @@ fi clnRunning=$(systemctl status ${netprefix}lightningd.service 2>/dev/null | grep -c running) echo "clnActive=${clnRunning}" if [ ${clnRunning} -eq 1 ]; then - clnInfo=$(sudo -u bitcoin lightning-cli getinfo) clnBlockHeight=$(echo "${clnInfo}" | jq -r '.blockheight' | tr -cd '[[:digit:]]') echo "clnBlockHeight=${clnBlockHeight}" - echo "# TODO: cln status statistics" + clnBlockHeightPlusOne= 'expr $clnBlockHeight + 1' + echo "clnBlockHeightPlusOne=${clnBlockHeightPlusOne}" + echo "total=${total}" + if [ "${total}" == "${clnBlockHeight}" ] || [ "${total}" == "${clnBlockHeightPlusOne}" ]; then + echo "syncedToChain=1" + else + echo "syncedToChain=0" + fi fi # touchscreen statistics From 88edf77ee8bece1ef784df84a79e08b3eaf06231 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 25 Jul 2021 00:47:50 +0200 Subject: [PATCH 0632/1295] fix increment --- home.admin/config.scripts/blitz.statusscan.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.statusscan.sh b/home.admin/config.scripts/blitz.statusscan.sh index 78488d256..c44ab5690 100755 --- a/home.admin/config.scripts/blitz.statusscan.sh +++ b/home.admin/config.scripts/blitz.statusscan.sh @@ -275,7 +275,7 @@ if [ ${clnRunning} -eq 1 ]; then clnInfo=$(sudo -u bitcoin lightning-cli getinfo) clnBlockHeight=$(echo "${clnInfo}" | jq -r '.blockheight' | tr -cd '[[:digit:]]') echo "clnBlockHeight=${clnBlockHeight}" - clnBlockHeightPlusOne= 'expr $clnBlockHeight + 1' + clnBlockHeightPlusOne=$(expr $clnBlockHeight + 1) echo "clnBlockHeightPlusOne=${clnBlockHeightPlusOne}" echo "total=${total}" if [ "${total}" == "${clnBlockHeight}" ] || [ "${total}" == "${clnBlockHeightPlusOne}" ]; then From af4b604050eac540000450eba92d1225b42d4c81 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 25 Jul 2021 00:50:57 +0200 Subject: [PATCH 0633/1295] try scanprogress --- home.admin/config.scripts/blitz.statusscan.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/home.admin/config.scripts/blitz.statusscan.sh b/home.admin/config.scripts/blitz.statusscan.sh index c44ab5690..5fbcf7bff 100755 --- a/home.admin/config.scripts/blitz.statusscan.sh +++ b/home.admin/config.scripts/blitz.statusscan.sh @@ -274,15 +274,14 @@ echo "clnActive=${clnRunning}" if [ ${clnRunning} -eq 1 ]; then clnInfo=$(sudo -u bitcoin lightning-cli getinfo) clnBlockHeight=$(echo "${clnInfo}" | jq -r '.blockheight' | tr -cd '[[:digit:]]') - echo "clnBlockHeight=${clnBlockHeight}" clnBlockHeightPlusOne=$(expr $clnBlockHeight + 1) - echo "clnBlockHeightPlusOne=${clnBlockHeightPlusOne}" - echo "total=${total}" if [ "${total}" == "${clnBlockHeight}" ] || [ "${total}" == "${clnBlockHeightPlusOne}" ]; then echo "syncedToChain=1" else echo "syncedToChain=0" fi + scanProgress=$(echo "scale=2; $clnBlockHeight*100/$total" | bc) + echo "scanProgress=${scanProgress}" fi # touchscreen statistics From 70ad40f809547c3fbcbed3b81d584d22dee2a9b3 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 25 Jul 2021 00:55:02 +0200 Subject: [PATCH 0634/1295] use cln sync detection and progress --- home.admin/00infoLCD.sh | 6 +++--- home.admin/config.scripts/blitz.statusscan.sh | 4 ++-- home.admin/setup.scripts/eventBlockchainSync.sh | 7 +------ 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/home.admin/00infoLCD.sh b/home.admin/00infoLCD.sh index c8e12b766..ad1c83f19 100755 --- a/home.admin/00infoLCD.sh +++ b/home.admin/00infoLCD.sh @@ -102,9 +102,9 @@ while : fi # TODO: ALSO SEPERATE GUI/ACTION FOR THE SCANNING / WALLET UNLOCK / ERROR DETECTION - # if LND is syncing or scanning - lndSynced=$($lncli_alias getinfo 2>/dev/null | jq -r '.synced_to_chain' | grep -c true) - if [ ${lndSynced} -eq 0 ]; then + # if lightning is syncing or scanning + source <(sudo /home/admin/config.scripts/blitz.statusscan.sh) + if [ "${syncedToChain}" != "1" ]; then /home/admin/setup.scripts/eventBlockchainSync.sh lcd sleep 10 continue diff --git a/home.admin/config.scripts/blitz.statusscan.sh b/home.admin/config.scripts/blitz.statusscan.sh index 5fbcf7bff..789299e30 100755 --- a/home.admin/config.scripts/blitz.statusscan.sh +++ b/home.admin/config.scripts/blitz.statusscan.sh @@ -274,14 +274,14 @@ echo "clnActive=${clnRunning}" if [ ${clnRunning} -eq 1 ]; then clnInfo=$(sudo -u bitcoin lightning-cli getinfo) clnBlockHeight=$(echo "${clnInfo}" | jq -r '.blockheight' | tr -cd '[[:digit:]]') + scanProgress=$(echo "scale=2; $clnBlockHeight*100/$total" | bc) + echo "scanProgress=${scanProgress}" clnBlockHeightPlusOne=$(expr $clnBlockHeight + 1) if [ "${total}" == "${clnBlockHeight}" ] || [ "${total}" == "${clnBlockHeightPlusOne}" ]; then echo "syncedToChain=1" else echo "syncedToChain=0" fi - scanProgress=$(echo "scale=2; $clnBlockHeight*100/$total" | bc) - echo "scanProgress=${scanProgress}" fi # touchscreen statistics diff --git a/home.admin/setup.scripts/eventBlockchainSync.sh b/home.admin/setup.scripts/eventBlockchainSync.sh index e2da56e5a..c4141f3d8 100644 --- a/home.admin/setup.scripts/eventBlockchainSync.sh +++ b/home.admin/setup.scripts/eventBlockchainSync.sh @@ -65,13 +65,8 @@ do # setting info string infoStr=" Blockchain Progress : ${syncProgress}\n" - if [ "${lightning}" == "lnd" ]; then - # if LND is active + if [ "${lightning}" == "lnd" ] || [ "${lightning}" == "cln" ]; then infoStr="${infoStr} Lightning Progress : ${scanProgress}\n ${actionString}" - elif [ "${lightning}" == "cln" ]; then - # if CLN is active - # TODO: show a scan progress of C-Lightning - infoStr="${infoStr} Lightning Progress : TODO\n ${actionString}" else # if lightning is deactivated (leave line clear) infoStr="${infoStr} \n ${actionString}" From 59fbc2ac9c56c4bbaea50c41e863cc48c9d29ab4 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 25 Jul 2021 01:04:23 +0200 Subject: [PATCH 0635/1295] replace LNTYPE --- home.admin/00infoBlitz.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/home.admin/00infoBlitz.sh b/home.admin/00infoBlitz.sh index 724418ff6..cc90251cb 100755 --- a/home.admin/00infoBlitz.sh +++ b/home.admin/00infoBlitz.sh @@ -160,9 +160,9 @@ fi webinterfaceInfo="" runningRTL=$(systemctl status ${netprefix}${typeprefix}RTL.service 2>/dev/null | grep -c active) if [ ${runningRTL} -eq 1 ]; then - if [ ${LNTYPE} = "cln" ]; then + if [ "${lightning}" == "cln" ]; then RTLHTTP=${portprefix}7000 - elif [ ${LNTYPE} = "lnd" ];then + elif [ "${lightning}" == "lnd" ];then RTLHTTP=${portprefix}3000 fi webinterfaceInfo="Web admin --> ${color_green}http://${local_ip}:${RTLHTTP}" @@ -232,7 +232,7 @@ else fi # LIGHTNING NETWORK -if [ ${LNTYPE} = "cln" ]; then +if [ "${lightning}" == "cln" ]; then ln_getInfo=$($lightningcli_alias getinfo 2>/dev/null) ln_baseInfo="-" ln_channelInfo="\n" @@ -343,7 +343,7 @@ if [ ${LNTYPE} = "cln" ]; then fi fi -elif [ ${LNTYPE} = "lnd" ];then +elif [ "${lightning}" == "lnd" ];then ln_baseInfo="-" ln_channelInfo="\n" ln_external="\n" @@ -429,9 +429,9 @@ ${color_yellow} ${color_yellow}${ln_publicColor}${ln_external}${color_gray}" fi -if [ $LNTYPE = "cln" ];then +if [ "${lightning}" == "cln" ];then LNline="C-LIGHTNING ${color_green}${ln_version} ${ln_baseInfo}" -elif [ $LNTYPE = "lnd" ];then +elif [ "${lightning}" == "lnd" ];then LNline="LND ${color_green}${ln_version} ${ln_baseInfo}" fi From 8a4bbe1fed4fa3235f0c657aad91a37cd84a2ba2 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 25 Jul 2021 01:06:33 +0200 Subject: [PATCH 0636/1295] next line --- home.admin/00infoBlitz.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/00infoBlitz.sh b/home.admin/00infoBlitz.sh index cc90251cb..9146c03a1 100755 --- a/home.admin/00infoBlitz.sh +++ b/home.admin/00infoBlitz.sh @@ -430,7 +430,7 @@ ${color_yellow}${ln_publicColor}${ln_external}${color_gray}" fi if [ "${lightning}" == "cln" ];then - LNline="C-LIGHTNING ${color_green}${ln_version} ${ln_baseInfo}" + LNline="C-LIGHTNING ${color_green}${ln_version}\n${ln_baseInfo}" elif [ "${lightning}" == "lnd" ];then LNline="LND ${color_green}${ln_version} ${ln_baseInfo}" fi From df5ec8d7b8a61f978c8e2ff7ab5afb9bdd0faf8e Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 25 Jul 2021 01:07:41 +0200 Subject: [PATCH 0637/1295] fix spaces --- home.admin/00infoBlitz.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/00infoBlitz.sh b/home.admin/00infoBlitz.sh index 9146c03a1..3ab04f9b0 100755 --- a/home.admin/00infoBlitz.sh +++ b/home.admin/00infoBlitz.sh @@ -395,7 +395,7 @@ elif [ "${lightning}" == "lnd" ];then 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_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" @@ -430,7 +430,7 @@ ${color_yellow}${ln_publicColor}${ln_external}${color_gray}" fi if [ "${lightning}" == "cln" ];then - LNline="C-LIGHTNING ${color_green}${ln_version}\n${ln_baseInfo}" + LNline="C-LIGHTNING ${color_green}${ln_version}\n ${ln_baseInfo}" elif [ "${lightning}" == "lnd" ];then LNline="LND ${color_green}${ln_version} ${ln_baseInfo}" fi From 481db3209af5b00e48dd1c7014d31af4da20f99f Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 25 Jul 2021 01:09:25 +0200 Subject: [PATCH 0638/1295] fix spaces --- home.admin/00infoBlitz.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/home.admin/00infoBlitz.sh b/home.admin/00infoBlitz.sh index 3ab04f9b0..e6fdf4421 100755 --- a/home.admin/00infoBlitz.sh +++ b/home.admin/00infoBlitz.sh @@ -330,7 +330,7 @@ if [ "${lightning}" == "cln" ]; then cln_num_pending_channels="$(echo "${ln_getInfo}" | jq -r '.num_pending_channels')" 2>/dev/null cln_num_inactive_channels="$(echo "${ln_getInfo}" | jq -r '.num_inactive_channels')" 2>/dev/null ln_channels_total=$((ln_channels_online+cln_num_pending_channels+cln_num_inactive_channels)) - ln_baseInfo="${color_gray}wallet ${ln_walletbalance} ${netprefix}sat ${ln_pendingonchain}" + 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" @@ -395,7 +395,7 @@ elif [ "${lightning}" == "lnd" ];then 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_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" @@ -430,7 +430,7 @@ ${color_yellow}${ln_publicColor}${ln_external}${color_gray}" fi if [ "${lightning}" == "cln" ];then - LNline="C-LIGHTNING ${color_green}${ln_version}\n ${ln_baseInfo}" + LNline="C-LIGHTNING ${color_green}${ln_version}\n ${ln_baseInfo}" elif [ "${lightning}" == "lnd" ];then LNline="LND ${color_green}${ln_version} ${ln_baseInfo}" fi From c2dbb25145905e4f943d836805eff5794abddc4a Mon Sep 17 00:00:00 2001 From: Bitpaint <67663265+bitpaint@users.noreply.github.com> Date: Tue, 3 Aug 2021 15:05:41 +0200 Subject: [PATCH 0639/1295] Update README.md (#2456) Fix 404 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 83df84c70..cdcdc54c7 100644 --- a/README.md +++ b/README.md @@ -392,7 +392,7 @@ Under `LIGHTNING` you find some basic steps to manage your Lightning node. Those Before you can open channels with other nodes you need to put some coins in your LND on-chain wallet. Use this option to generate an address to send funds to. -*Reminder: RaspiBlitz & LND is still experimental software. With funding your LND node you accept the risk of losing funds. So just play with small amounts - something in the area of 20 EUR/USD should be enough to make your first experiences. Also, it's a good privacy practice to [coinjoin your coins](https://bitcoin-only.com/#privacy) before sending them to any Lightning Network wallet.* +*Reminder: RaspiBlitz & LND is still experimental software. With funding your LND node you accept the risk of losing funds. So just play with small amounts - something in the area of 20 EUR/USD should be enough to make your first experiences. Also, it's a good privacy practice to [coinjoin your coins](https://bitcoin-only.com/privacy) before sending them to any Lightning Network wallet.* You can fund it multiple times - starting with small amounts first to test. LND will always generate a different address, but all funds you send will get into the same LND on-chain wallet. From 3a1bf0268e6180c64de9d69145ddf5395cc94501 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Thallis?= Date: Tue, 3 Aug 2021 10:09:19 -0300 Subject: [PATCH 0640/1295] Fix FAQ links (#2441) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cdcdc54c7..4a78fa483 100644 --- a/README.md +++ b/README.md @@ -143,9 +143,9 @@ Insert the SD card and connect the power plug. **Troubleshoot:** -* [I don't have a LAN port on my Laptop - how to connect to my RaspiBlitz?](FAQ.md#i-dont-have-a-lan-port-on-my-laptop---how-to-connect-to-my-raspiblitz) +* [I don't have a LAN port on my Laptop - how to connect to my RaspiBlitz?](FAQ.md#i-dont-have-a-lan-port-on-my-laptop---how-do-i-connect-to-my-raspiblitz) * [Is it possible to connect the Blitz over Wifi instead of using a LAN cable?](FAQ.md#is-it-possible-to-connect-the-blitz-over-wifi-instead-of-using-a-lan-cable) -* [Can I directly connect the RaspiBlitz with my laptop?](FAQ.md#can-i-directly-connect-the-raspiblitz-with-my-laptop) +* [Can I directly connect the RaspiBlitz with my laptop?](FAQ.md#can-i-directly-connect-the-raspiblitz-to-my-laptop) * [I connected my HDD, but it still says 'Connect HDD' on the display?](FAQ.md#i-connected-my-hdd-but-it-still-says-connect-hdd-on-the-display) When everything boots up correctly, you should see the local IP address of your RaspiBlitz on the LCD panel. From c613376d4dd4a8b26e974cdeb93e36d24cf6fd65 Mon Sep 17 00:00:00 2001 From: Peter Flock <78184669+peterflock@users.noreply.github.com> Date: Tue, 3 Aug 2021 13:11:16 +0000 Subject: [PATCH 0641/1295] Fix invalid URL ( (#2440) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4a78fa483..a96832bf2 100644 --- a/README.md +++ b/README.md @@ -623,7 +623,7 @@ After install, you will see a new `LIT` option in the SSH main menu - it will gi ![BTCPAY](pictures/btcpay.png) -Find all details on how to use the BTCPay Server on your RaspiBlitz in this great tutorial: https://coincharge.io/en/raspiblitz-btcpay-server/ +Find all details on how to use the BTCPay Server on your RaspiBlitz in this great tutorial: https://coincharge.io/en/btcpay-server-on-the-raspiblitz/ After install, you will see a new `BTCPAY` option in the SSH main menu - it will give you all the information you need to start using it. From 6254b3f38077d60c1991059382d54dfd312b11d5 Mon Sep 17 00:00:00 2001 From: nyxnor Date: Tue, 3 Aug 2021 13:23:37 +0000 Subject: [PATCH 0642/1295] support channels (#2382) --- README.md | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a96832bf2..d1ba376ae 100644 --- a/README.md +++ b/README.md @@ -166,17 +166,39 @@ Now open up a terminal ([OSX](https://www.youtube.com/watch?v=5XgBd6rjuDQ)/[Win1 If you run into a problem or you have still a question, follow the steps below to get support. Also check the [setup documentation](#setup-process-detailed-documentation) for details. +### Documentation + 1. Look up the [FAQ](FAQ.md) if you can't find an answer to this question/problem. 2. If you have a hardware problem, please check that your hardware parts are exactly the parts recommended in the shopping list above. Different screens or even SSD-casings can cause problems. -3. There is a Telegram Group of RaspiBlitz users helping each other: https://t.me/raspiblitz +3. Please determine if your problem/question is about RaspiBlitz or for example with LND. For example if you can't route a payment or get an error when opening a channel that is an LND question/problem and is best answered by the LND dev community: https://dev.lightning.community -4. Please determine if your problem/question is about RaspiBlitz or for example with LND. For example if you can't route a payment or get an error when opening a channel that is an LND question/problem and is best answered by the LND dev community: https://dev.lightning.community +4. Go to the GitHub issues of the RaspiBlitz: https://github.com/rootzoll/raspiblitz/issues Do a search there. Also check closed issues by removing 'is:open' from the filter/search-box. -5. Go to the GitHub issues of the RaspiBlitz: https://github.com/rootzoll/raspiblitz/issues Do a search there. Also check closed issues by removing 'is:open' from the filter/search-box. +5. If you haven't found an answer yet, open a new issue on the RaspiBlitz GitHub. You may have to register an account with GitHub for this. If it's a bug with the RaspiBlitz, please add (copy+paste) a Debug Report to your issue (see [FAQ](FAQ.md) for how to generate them) and/or add some screenshots/photos so the community gets more insight into your problem. -6. If you haven't found an answer yet, open a new issue on the RaspiBlitz GitHub. You may have to register an account with GitHub for this. If it's a bug with the RaspiBlitz, please add (copy+paste) a Debug Report to your issue (see [FAQ](FAQ.md) for how to generate them) and/or add some screenshots/photos so the community gets more insight into your problem. +### Groups + +There are plenty off rooms you can find Raspiblitz users that can help you: + +1. [Telegram English](https://t.me/raspiblitz) + +2. [Telegram Deutsch](https://t.me/raspiblitz_DE) + +3. [Telegram Spanish](https://t.me/raspiblitz_ES) + +4. [Telegram Italian](https://t.me/raspiblitz_IT) + +5. [Telegram Russian](https://t.me/raspiblitz_RU) + +6. [Keybase](https://keybase.io/team/raspiblitz) + +7. [Matrix - Element client](https://element.io/) Channel: #raspiblitz:libera.chat + +8. IRC - Libera chat -> irc.libera.chat:6697 -> Channel: #raspiblitz + +9. Sphinx Chat -> sphinx.chat://?action=tribe&uuid=YFsuxCApuU-TBIRWeWY_Gl52IOx2clJKZYLxDn78Z9RgcWNx9zUube7mkK4IyXQjLril-tgKZs3wOxDlWqpiyxp8jTbt&host=tribes.sphinx.chat -> [Connection code](YFsuxCApuU-TBIRWeWY_Gl52IOx2clJKZYLxDn78Z9RgcWNx9zUube7mkK4IyXQjLril-tgKZs3wOxDlWqpiyxp8jTbt) --> [QR code](https://github.com/rootzoll/raspiblitz/issues/2089#issuecomment-805789854) ## Setup Process (Detailed Documentation) From 949dc19d2cebb67ab9ff98e1fada16680acff635 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 15:34:50 +0200 Subject: [PATCH 0643/1295] use #2370 height optimization --- home.admin/00mainMenu.sh | 55 +++--------------------------- home.admin/00settingsMenuBasics.sh | 2 +- 2 files changed, 5 insertions(+), 52 deletions(-) diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index 22c82ccaf..9f3c825c5 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -49,9 +49,7 @@ elif [ ${chain} = main ];then fi # BASIC MENU INFO -HEIGHT=19 WIDTH=64 -CHOICE_HEIGHT=12 BACKTITLE="RaspiBlitz" TITLE="" MENU="Choose one of the following options:" @@ -72,115 +70,70 @@ fi # Put Activated Apps on top if [ "${rtlWebinterface}" == "on" ]; then OPTIONS+=(RTL "RTL Web Node Manager") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${BTCPayServer}" == "on" ]; then OPTIONS+=(BTCPAY "BTCPay Server Info") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${lit}" == "on" ]; then OPTIONS+=(LIT "LIT (loop, pool, faraday)") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${ElectRS}" == "on" ]; then OPTIONS+=(ELECTRS "Electrum Rust Server") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${BTCRPCexplorer}" == "on" ]; then OPTIONS+=(EXPLORE "BTC RPC Explorer") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${LNBits}" == "on" ]; then OPTIONS+=(LNBITS "LNbits Server") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${lndmanage}" == "on" ]; then OPTIONS+=(LNDMANAGE "LND Manage Script") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${loop}" == "on" ]; then OPTIONS+=(LOOP "Loop In/Out Service") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${mempoolExplorer}" == "on" ]; then OPTIONS+=(MEMPOOL "Mempool Space") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${specter}" == "on" ]; then OPTIONS+=(SPECTER "Cryptoadvance Specter") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${joinmarket}" == "on" ]; then OPTIONS+=(JMARKET "JoinMarket") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${faraday}" == "on" ]; then OPTIONS+=(FARADAY "Faraday Channel Management") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${bos}" == "on" ]; then OPTIONS+=(BOS "Balance of Satoshis") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${pyblock}" == "on" ]; then OPTIONS+=(PYBLOCK "PyBlock") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${thunderhub}" == "on" ]; then OPTIONS+=(THUB "ThunderHub") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${zerotier}" == "on" ]; then OPTIONS+=(ZEROTIER "ZeroTier") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${pool}" == "on" ]; then OPTIONS+=(POOL "Lightning Pool") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${sphinxrelay}" == "on" ]; then OPTIONS+=(SPHINX "Sphinx Chat Relay") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${chantools}" == "on" ]; then OPTIONS+=(CHANTOOLS "ChannelTools (Fund Rescue)") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${circuitbreaker}" == "on" ]; then OPTIONS+=(CIRCUIT "Circuitbreaker (LND firewall)") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi -if [ "${testnet}" == "on" ]&&[ ${chain} != test ];then +if [ "${testnet}" == "on" ]&&[ ${chain} != test ]; then OPTIONS+=(TESTNET "Testnet Service Options") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi - -if [ ${chain} != main ];then +if [ ${chain} != main ]; then OPTIONS+=(MAINNET "Mainnet Service Options") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi # Basic Options @@ -213,8 +166,6 @@ OPTIONS+=(PASSWORD "Change Passwords") if [ "${touchscreen}" == "1" ]; then OPTIONS+=(SCREEN "Touchscreen Calibration") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi # final Options @@ -223,6 +174,8 @@ OPTIONS+=(UPDATE "Check/Prepare RaspiBlitz Update") OPTIONS+=(REBOOT "Reboot RaspiBlitz") OPTIONS+=(OFF "PowerOff RaspiBlitz") +HEIGHT=$(("${#OPTIONS[@]}")) +CHOICE_HEIGHT=$(("${#OPTIONS[@]}" / 2)) CHOICE=$(dialog --clear \ --backtitle "$BACKTITLE" \ --title "$TITLE" \ diff --git a/home.admin/00settingsMenuBasics.sh b/home.admin/00settingsMenuBasics.sh index 8b179e5b1..995664930 100755 --- a/home.admin/00settingsMenuBasics.sh +++ b/home.admin/00settingsMenuBasics.sh @@ -75,7 +75,6 @@ echo "run dialog ..." # BASIC MENU INFO HEIGHT=19 # add 6 to CHOICE_HEIGHT + MENU lines WIDTH=45 -CHOICE_HEIGHT=11 # 1 line / OPTIONS OPTIONS=() OPTIONS+=(t 'Run behind TOR' ${runBehindTor}) @@ -103,6 +102,7 @@ if [ ${chain} = "main" ];then fi fi +CHOICE_HEIGHT=$(("${#OPTIONS[@]}" / 3)) CHOICES=$(dialog \ --title ' Node Settings & Options ' \ --checklist ' use spacebar to activate/de-activate ' \ From ff07a294dfd0f3303fd709fffdb5b3b4fa49d26e Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 16:15:32 +0200 Subject: [PATCH 0644/1295] adjust exit codes in menu scripts --- home.admin/00parallelMainnetServices.sh | 4 ++-- home.admin/00parallelTestnetServices.sh | 4 ++-- home.admin/00settingsMenuBasics.sh | 4 ++-- home.admin/00settingsMenuServices.sh | 4 ++-- home.admin/97addMobileWallet.sh | 18 ++++++++--------- home.admin/98repairMenu.sh | 6 +++--- home.admin/99updateMenu.sh | 27 +++++++++++++------------ home.admin/BBcashoutWallet.sh | 10 ++++----- home.admin/BBcloseAllChannels.sh | 8 +++----- home.admin/BBconnectPeer.sh | 2 +- home.admin/BBcreateInvoice.sh | 10 ++++----- home.admin/BBfundWallet.sh | 2 +- home.admin/BBopenChannel.sh | 12 +++++------ home.admin/BBpayInvoice.sh | 9 +++++---- 14 files changed, 60 insertions(+), 60 deletions(-) diff --git a/home.admin/00parallelMainnetServices.sh b/home.admin/00parallelMainnetServices.sh index a565e1eb6..d3427ec5a 100644 --- a/home.admin/00parallelMainnetServices.sh +++ b/home.admin/00parallelMainnetServices.sh @@ -37,10 +37,10 @@ clear echo "dialogcancel(${dialogcancel})" if [ ${dialogcancel} -eq 1 ]; then echo "user canceled" - exit 1 + exit 0 elif [ ${dialogcancel} -eq 255 ]; then echo "ESC pressed" - exit 1 + exit 0 fi needsReboot=0 diff --git a/home.admin/00parallelTestnetServices.sh b/home.admin/00parallelTestnetServices.sh index 3be1526a2..402fd3482 100644 --- a/home.admin/00parallelTestnetServices.sh +++ b/home.admin/00parallelTestnetServices.sh @@ -37,10 +37,10 @@ clear echo "dialogcancel(${dialogcancel})" if [ ${dialogcancel} -eq 1 ]; then echo "user canceled" - exit 1 + exit 0 elif [ ${dialogcancel} -eq 255 ]; then echo "ESC pressed" - exit 1 + exit 0 fi needsReboot=0 diff --git a/home.admin/00settingsMenuBasics.sh b/home.admin/00settingsMenuBasics.sh index 995664930..3c5cce643 100755 --- a/home.admin/00settingsMenuBasics.sh +++ b/home.admin/00settingsMenuBasics.sh @@ -117,10 +117,10 @@ clear echo "dialogcancel(${dialogcancel})" if [ ${dialogcancel} -eq 1 ]; then echo "user canceled" - exit 1 + exit 0 elif [ ${dialogcancel} -eq 255 ]; then echo "ESC pressed" - exit 1 + exit 0 fi needsReboot=0 diff --git a/home.admin/00settingsMenuServices.sh b/home.admin/00settingsMenuServices.sh index 2051fcecd..d43ed1b11 100755 --- a/home.admin/00settingsMenuServices.sh +++ b/home.admin/00settingsMenuServices.sh @@ -60,10 +60,10 @@ clear echo "dialogcancel(${dialogcancel})" if [ ${dialogcancel} -eq 1 ]; then echo "user canceled" - exit 1 + exit 0 elif [ ${dialogcancel} -eq 255 ]; then echo "ESC pressed" - exit 1 + exit 0 fi needsReboot=0 diff --git a/home.admin/97addMobileWallet.sh b/home.admin/97addMobileWallet.sh index 874286136..4de3e2f44 100755 --- a/home.admin/97addMobileWallet.sh +++ b/home.admin/97addMobileWallet.sh @@ -155,7 +155,7 @@ clear echo "creating install info ..." case $CHOICE in CLOSE) - exit 1; + exit 0; ;; SPHINX) if [ "${sphinxrelay}" != "on" ]; then @@ -173,7 +173,7 @@ case $CHOICE in fi # make pairing thru sphinx relay script /home/admin/config.scripts/bonus.sphinxrelay.sh menu - exit 1; + exit 0; ;; ZAP_IOS) appstoreLink="https://apps.apple.com/us/app/zap-bitcoin-lightning-wallet/id1406311960" @@ -206,7 +206,7 @@ Or scan the qr code on the LCD with your mobile phone. choose_IP_or_TOR fi /home/admin/config.scripts/bonus.lndconnect.sh zap-ios ${connect} - exit 1; + exit 0; ;; ZAP_ANDROID) appstoreLink="https://play.google.com/store/apps/details?id=zapsolutions.zap" @@ -229,7 +229,7 @@ Or scan the qr code on the LCD with your mobile phone. choose_IP_or_TOR fi /home/admin/config.scripts/bonus.lndconnect.sh zap-android ${connect} - exit 1; + exit 0; ;; SENDMANY_ANDROID) @@ -241,7 +241,7 @@ To use the chat feature of the SendMany app, you need to activate the Keysend fe Please go to MAINMENU > SERVICES and activate KEYSEND first. " 12 65 - exit 1 + exit 0 fi appstoreLink="https://github.com/fusion44/sendmany/releases" @@ -256,7 +256,7 @@ Please go to MAINMENU > SERVICES and activate KEYSEND first. /home/admin/config.scripts/blitz.display.sh hide checkIP2TOR LND-GRPC-API /home/admin/config.scripts/bonus.lndconnect.sh sendmany-android ${connect} - exit 1; + exit 0; ;; ZEUS_IOS) appstoreLink="https://testflight.apple.com/join/gpVFzEHN" @@ -271,7 +271,7 @@ Please go to MAINMENU > SERVICES and activate KEYSEND first. fi /home/admin/config.scripts/blitz.display.sh hide /home/admin/config.scripts/bonus.lndconnect.sh zeus-ios tor - exit 1; + exit 0; ;; ZEUS_ANDROID) appstoreLink="https://play.google.com/store/apps/details?id=app.zeusln.zeus" @@ -290,7 +290,7 @@ Or scan the qr code on the LCD with your mobile phone. fi /home/admin/config.scripts/blitz.display.sh hide /home/admin/config.scripts/bonus.lndconnect.sh zeus-android tor - exit 1; + exit 0; ;; FULLY_NODED) appstoreLink="https://apps.apple.com/us/app/fully-noded/id1436425586" @@ -309,6 +309,6 @@ Or scan the qr code on the LCD with your mobile phone. fi /home/admin/config.scripts/blitz.display.sh hide /home/admin/config.scripts/bonus.fullynoded.sh - exit 1; + exit 0; ;; esac diff --git a/home.admin/98repairMenu.sh b/home.admin/98repairMenu.sh index 933081416..a6b172565 100755 --- a/home.admin/98repairMenu.sh +++ b/home.admin/98repairMenu.sh @@ -118,7 +118,7 @@ case $CHOICE in # go back to main menu (and show) /home/admin/00raspiblitz.sh - exit 1; + exit 0; ;; RESET-HDD) askBackupCopy @@ -136,11 +136,11 @@ case $CHOICE in ;; DELETE-ELEC) /home/admin/config.scripts/bonus.electrs.sh off deleteindex - exit 1; + exit 0; ;; DELETE-INDEX) /home/admin/config.scripts/network.txindex.sh delete - exit 1; + exit 0; ;; COPY-SOURCE) /home/admin/config.scripts/blitz.copychain.sh source diff --git a/home.admin/99updateMenu.sh b/home.admin/99updateMenu.sh index bdae6bb38..e80d247ad 100755 --- a/home.admin/99updateMenu.sh +++ b/home.admin/99updateMenu.sh @@ -21,7 +21,7 @@ No need to close channels or download blockchain again. Do you want to start the Update now? " 16 62 if [ $? -eq 0 ]; then - exit 1 + exit 0 fi whiptail --title "LND Data Backup" --yes-button "Download Backup" --no-button "Skip" --yesno " @@ -69,7 +69,7 @@ and do you WANT TO START UPDATE NOW? OK. RaspiBlitz will NOT update now. " 7 39 sudo systemctl start lnd - exit 1 + exit 0 fi clear @@ -93,7 +93,7 @@ hotfix the code and might compromise your security. Do you want to Patch your RaspiBlitz now? " 18 58 if [ $? -eq 0 ]; then - exit 1 + exit 0 fi } @@ -128,10 +128,11 @@ patch() echo "REBOOT .." /home/admin/config.scripts/blitz.shutdown.sh reboot sleep 8 + exit 1 else echo "SKIP REBOOT .." + exit 0 fi - exit 1 ;; REPO) clear @@ -148,7 +149,7 @@ patch() fi fi patch - exit 1 + exit 0 ;; BRANCH) clear @@ -165,7 +166,7 @@ patch() fi fi patch - exit 1 + exit 0 ;; PR) clear @@ -186,7 +187,7 @@ patch() /home/admin/config.scripts/blitz.github.sh -justinstall fi fi - exit 1 + exit 0 ;; esac @@ -212,7 +213,7 @@ lnd() VERIFIED) if [ ${lndUpdateInstalled} -eq 1 ]; then whiptail --title "ALREADY INSTALLED" --msgbox "The LND version ${lndUpdateVersion} is already installed." 8 30 - exit 1 + exit 0 fi whiptail --title "OPTIONAL LND UPDATE" --yes-button "Cancel" --no-button "Update" --yesno "BEWARE on updating to LND v${lndUpdateVersion}: @@ -222,7 +223,7 @@ Do you really want to update LND now? " 16 58 if [ $? -eq 0 ]; then echo "# cancel update" - exit 1 + exit 0 fi # if loop is installed remove if [ "${loop}" == "on" ]; then @@ -255,7 +256,7 @@ Do you really want to update LND now? " 16 58 if [ $? -eq 0 ]; then echo "# cancel update" - exit 1 + exit 0 fi error="" source <(sudo -u admin /home/admin/config.scripts/lnd.update.sh reckless) @@ -296,7 +297,7 @@ bitcoinUpdate() { if [ ${bitcoinUpdateInstalled} -eq 1 ]; then whiptail --title "ALREADY INSTALLED" \ --msgbox "The Bitcoin Core version ${bitcoinUpdateVersion} is already installed." 8 30 - exit 1 + exit 0 fi whiptail --title "OPTIONAL Bitcoin Core update" --yes-button "Cancel" --no-button "Update" \ --yesno "Info on updating to Bitcoin Core v${bitcoinVersion}: @@ -308,7 +309,7 @@ Do you really want to update Bitcoin Core now? " 12 58 if [ $? -eq 0 ]; then echo "# cancel update" - exit 1 + exit 0 fi error="" @@ -332,7 +333,7 @@ Do you really want to update Bitcoin Core now? " 16 58 if [ $? -eq 0 ]; then echo "# cancel update" - exit 1 + exit 0 fi error="" source <(sudo -u admin /home/admin/config.scripts/bitcoin.update.sh reckless) diff --git a/home.admin/BBcashoutWallet.sh b/home.admin/BBcashoutWallet.sh index 1f05a896e..95db2d24e 100755 --- a/home.admin/BBcashoutWallet.sh +++ b/home.admin/BBcashoutWallet.sh @@ -33,13 +33,13 @@ if [ ${#openChannels} -eq 0 ]; then echo "************************************************" echo "Press ENTER to return to main menu." read key - exit 1 + exit 0 fi if [ ${openChannels} -gt 0 ]; then whiptail --title 'Info' --yes-button='Cashout Anyway' --no-button='Go Back' --yesno 'You still have funds in open Lightning Channels.\nUse CLOSEALL first if you want to cashout all funds.\nNOTICE: Just confirmed on-chain funds can be moved.' 10 56 if [ $? -eq 1 ]; then - exit 1 + exit 0 fi echo "..." fi @@ -59,7 +59,7 @@ fi if [ ${unconfirmed} -gt 0 ]; then whiptail --title 'Info' --yes-button='Cashout Anyway' --no-button='Go Back' --yesno "Still waiting confirmation for (some of) your funds.\nNOTICE: Just confirmed on-chain funds can be moved." 8 58 if [ $? -eq 1 ]; then - exit 1 + exit 0 fi echo "..." fi @@ -72,7 +72,7 @@ then echo "ok pressed" else echo "cancel pressed" - exit 1 + exit 0 fi address=$(cat $_temp | xargs) shred -u $_temp @@ -80,7 +80,7 @@ if [ ${#address} -eq 0 ]; then echo "FAIL - not a valid address (${address})" echo "Press ENTER to return to main menu." read key - exit 1 + exit 0 fi clear diff --git a/home.admin/BBcloseAllChannels.sh b/home.admin/BBcloseAllChannels.sh index 3e5141006..7f23b223e 100755 --- a/home.admin/BBcloseAllChannels.sh +++ b/home.admin/BBcloseAllChannels.sh @@ -34,7 +34,7 @@ elif [ $LNTYPE = lnd ];then # precheck: AutoPilot if [ "${autoPilot}" = "on" ]; then dialog --title 'Info' --msgbox 'You need to turn OFF the LND AutoPilot first,\nso that closed channels are not opening up again.\nYou find the AutoPilot -----> SERVICES section' 7 55 - exit 1 + exit 0 fi command="$lncli_alias closeallchannels --force" fi @@ -62,7 +62,7 @@ if [ ${chainOutSync} -eq 1 ]; then echo echo "# PRESS ENTER to return to menu" read key - exit 1 + exit 0 else echo "# OK - the chain is synced" fi @@ -87,6 +87,4 @@ fi echo echo "# OK - please recheck if channels really closed" -sleep 5 - -#TODO exits to CLI, not returning to menu \ No newline at end of file +sleep 5 \ No newline at end of file diff --git a/home.admin/BBconnectPeer.sh b/home.admin/BBconnectPeer.sh index d8d0b47c6..008f385ef 100755 --- a/home.admin/BBconnectPeer.sh +++ b/home.admin/BBconnectPeer.sh @@ -32,7 +32,7 @@ if [ ${#_input} -eq 0 ]; then echo echo "no peer entered - returning to menu ..." sleep 2 - exit 1 + exit 0 fi pubkey=$(echo "${_input}"|cut -d@ -f1) diff --git a/home.admin/BBcreateInvoice.sh b/home.admin/BBcreateInvoice.sh index 84f338d33..aa1ba034e 100755 --- a/home.admin/BBcreateInvoice.sh +++ b/home.admin/BBcreateInvoice.sh @@ -40,7 +40,7 @@ while [ "${chainInSync}" == "0" ]; do --pause "\n\n'$lncommand getinfo' shows 'synced_to_chain': false\n\nTry again in a few seconds." 15 60 5 if [ $? -gt 0 ]; then - exit 1 + exit 0 fi chainInSync=${cmdChainInSync} done @@ -57,8 +57,8 @@ if [ ${openChannels} -eq 0 ]; then echo "!!!!!!!!!!!!!!!!!!!" echo "FAIL - You have NO ESTABLISHED CHANNELS .. open a channel first." echo "!!!!!!!!!!!!!!!!!!!" - echo - exit 1 + sleep 3 + exit 0 fi # let user enter the invoice @@ -72,8 +72,8 @@ if [ ${#amount} -eq 0 ]; then clear echo echo "no amount entered - returning to menu ..." - sleep 2 - exit 1 + sleep 3 + exit 0 fi # TODO let user enter a description diff --git a/home.admin/BBfundWallet.sh b/home.admin/BBfundWallet.sh index a5674543a..a55b3bd90 100755 --- a/home.admin/BBfundWallet.sh +++ b/home.admin/BBfundWallet.sh @@ -34,7 +34,7 @@ if [ ${chainOutSync} -eq 1 ]; then echo echo "# PRESS ENTER to return to menu" read key - exit 1 + exit 0 else echo "# OK - the chain is synced" fi diff --git a/home.admin/BBopenChannel.sh b/home.admin/BBopenChannel.sh index 8540e6161..59617a538 100755 --- a/home.admin/BBopenChannel.sh +++ b/home.admin/BBopenChannel.sh @@ -36,7 +36,7 @@ if [ ${chainOutSync} -eq 1 ]; then echo echo "# PRESS ENTER to return to menu" read key - exit 1 + exit 0 else echo "# OK - the chain is synced" fi @@ -57,7 +57,7 @@ if [ ${confirmedBalance} -eq 0 ]; then echo echo "Press ENTER to return to main menu." read key - exit 1 + exit 0 fi # check number of connected peers @@ -74,7 +74,7 @@ if [ ${numConnectedPeers} -eq 0 ]; then echo echo "Press ENTER to return to main menu." read key - exit 1 + exit 0 fi # let user pick a peer to open a channels with @@ -109,7 +109,7 @@ if [ ${#pubKey} -eq 0 ]; then echo echo "no channel selected - returning to menu ..." sleep 4 - exit 1 + exit 0 fi # find out what is the minimum amount @@ -140,7 +140,7 @@ if [ ${#amount} -eq 0 ]; then echo echo "no valid amount entered - returning to menu ..." sleep 4 - exit 1 + exit 0 fi # let user enter a confirmation target @@ -154,7 +154,7 @@ if [ ${#conf_target} -eq 0 ]; then echo echo "no valid target entered - returning to menu ..." sleep 4 - exit 1 + exit 0 fi # build command diff --git a/home.admin/BBpayInvoice.sh b/home.admin/BBpayInvoice.sh index 5aa57e31e..2785c688c 100755 --- a/home.admin/BBpayInvoice.sh +++ b/home.admin/BBpayInvoice.sh @@ -40,7 +40,7 @@ while [ "${chainInSync}" == "0" ]; do --pause "\n\n'$lncommand getinfo' shows 'synced_to_chain': false\n\nTry again in a few seconds." 15 60 5 if [ $? -gt 0 ]; then - exit 1 + exit 0 fi chainInSync=${cmdChainInSync} done @@ -57,8 +57,9 @@ if [ ${openChannels} -eq 0 ]; then echo "!!!!!!!!!!!!!!!!!!!" echo "FAIL - You have NO ESTABLISHED CHANNELS .. open a channel first." echo "!!!!!!!!!!!!!!!!!!!" + sleep 3 echo - exit 1 + exit 0 fi paymentRequestStart="???" @@ -95,8 +96,8 @@ if [ ${#invoice} -eq 0 ]; then clear echo echo "no invoice entered - returning to menu ..." - sleep 2 - exit 1 + sleep 3 + exit 0 fi # TODO: maybe try/show the decoded info first by using https://api.lightning.community/#decodepayreq From 9b6f69a9f87ef665961f00cf5e1a99cb38af2c71 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 16:22:05 +0200 Subject: [PATCH 0645/1295] adjust password menu exit codes --- .../config.scripts/blitz.setpassword.sh | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/home.admin/config.scripts/blitz.setpassword.sh b/home.admin/config.scripts/blitz.setpassword.sh index 104016ab0..137f9867c 100755 --- a/home.admin/config.scripts/blitz.setpassword.sh +++ b/home.admin/config.scripts/blitz.setpassword.sh @@ -64,7 +64,7 @@ if [ ${#abcd} -eq 0 ]; then abcd='d'; ;; *) - exit 1 + exit 0 ;; esac fi @@ -86,7 +86,7 @@ if [ "${abcd}" = "a" ]; then echo "CANCEL not possible" sleep 2 else - exit 1 + exit 0 fi fi @@ -97,7 +97,7 @@ if [ "${abcd}" = "a" ]; then echo "CANCEL not possible" sleep 2 else - exit 1 + exit 0 fi fi @@ -105,14 +105,14 @@ if [ "${abcd}" = "a" ]; then if [ "${password1}" != "${password2}" ]; then dialog --backtitle "RaspiBlitz - Setup" --msgbox "FAIL -> Passwords dont Match\nPlease try again ..." 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh a - exit 1 + exit 0 fi # password zero if [ ${#password1} -eq 0 ]; then dialog --backtitle "RaspiBlitz - Setup" --msgbox "FAIL -> Password cannot be empty\nPlease try again ..." 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh a - exit 1 + exit 0 fi # check that password does not contain bad characters @@ -120,14 +120,14 @@ if [ "${abcd}" = "a" ]; then if [ ${#clearedResult} != ${#password1} ] || [ ${#clearedResult} -eq 0 ]; then dialog --backtitle "RaspiBlitz - Setup" --msgbox "FAIL -> Contains bad characters (spaces, special chars)\nPlease try again ..." 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh a - exit 1 + exit 0 fi # password longer than 8 if [ ${#password1} -lt 8 ]; then dialog --backtitle "RaspiBlitz - Setup" --msgbox "FAIL -> Password length under 8\nPlease try again ..." 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh a - exit 1 + exit 0 fi # use entred password now as parameter @@ -162,7 +162,7 @@ elif [ "${abcd}" = "b" ]; then echo "CANCEL not possible" sleep 2 else - exit 1 + exit 0 fi fi @@ -173,7 +173,7 @@ elif [ "${abcd}" = "b" ]; then echo "CANCEL not possible" sleep 2 else - exit 1 + exit 0 fi fi @@ -181,14 +181,14 @@ elif [ "${abcd}" = "b" ]; then if [ "${password1}" != "${password2}" ]; then dialog --backtitle "RaspiBlitz - Setup" --msgbox "FAIL -> Passwords dont Match\nPlease try again ..." 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh b - exit 1 + exit 0 fi # password zero if [ ${#password1} -eq 0 ]; then dialog --backtitle "RaspiBlitz - Setup" --msgbox "FAIL -> Password cannot be empty\nPlease try again ..." 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh b - exit 1 + exit 0 fi # check that password does not contain bad characters @@ -196,14 +196,14 @@ elif [ "${abcd}" = "b" ]; then if [ ${#clearedResult} != ${#password1} ] || [ ${#clearedResult} -eq 0 ]; then dialog --backtitle "RaspiBlitz - Setup" --msgbox "FAIL -> Contains bad characters (spaces, special chars)\nPlease try again ..." 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh b - exit 1 + exit 0 fi # password longer than 8 if [ ${#password1} -lt 8 ]; then dialog --backtitle "RaspiBlitz - Setup" --msgbox "FAIL -> Password length under 8\nPlease try again ..." 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh b - exit 1 + exit 0 fi # use entred password now as parameter @@ -330,7 +330,7 @@ elif [ "${abcd}" = "c" ]; then if [ ${#newPassword} -lt 8 ]; then dialog --backtitle "RaspiBlitz - Setup" --msgbox "FAIL -> Password length under 8" 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh c ${oldPassword} - exit 1 + exit 0 fi # ask user to retype new password c @@ -365,7 +365,7 @@ elif [ "${abcd}" = "c" ]; then dialog --backtitle "RaspiBlitz - Setup" --msgbox "FAIL -> Was not able to change password\n\n${err}\n${errMore}" 10 52 clear echo "# FAIL: Was not able to change password" - exit 1 + exit 0 fi # old manual way @@ -412,7 +412,7 @@ elif [ "${abcd}" = "x" ]; then if [ "${password1}" != "${password2}" ]; then dialog --backtitle "RaspiBlitz" --msgbox "FAIL -> Passwords dont Match\nPlease try again ..." 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh x "$2" "$3" "$4" - exit 1 + exit 0 fi if [ ${emptyAllowed} -eq 0 ]; then @@ -421,7 +421,7 @@ elif [ "${abcd}" = "x" ]; then if [ ${#password1} -eq 0 ]; then dialog --backtitle "RaspiBlitz" --msgbox "FAIL -> Password cannot be empty\nPlease try again ..." 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh x "$2" "$3" "$4" - exit 1 + exit 0 fi # check that password does not contain bad characters @@ -429,14 +429,14 @@ elif [ "${abcd}" = "x" ]; then if [ ${#clearedResult} != ${#password1} ] || [ ${#clearedResult} -eq 0 ]; then dialog --backtitle "RaspiBlitz" --msgbox "FAIL -> Contains bad characters (spaces, special chars)\nPlease try again ..." 6 62 sudo /home/admin/config.scripts/blitz.setpassword.sh x "$2" "$3" "$4" - exit 1 + exit 0 fi # password longer than 8 if [ ${#password1} -lt 8 ]; then dialog --backtitle "RaspiBlitz" --msgbox "FAIL -> Password length under 8\nPlease try again ..." 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh x "$2" "$3" "$4" - exit 1 + exit 0 fi fi @@ -447,7 +447,7 @@ elif [ "${abcd}" = "x" ]; then # everything else else echo "FAIL: there is no password '${abcd}' (reminder: use lower case)" - exit 1 + exit 0 fi # when started with menu ... reboot when done From 3d2ffcf2dad02ef8fcbbde753c140631971efafb Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 16:29:43 +0200 Subject: [PATCH 0646/1295] adapt shutdown for cln --- home.admin/config.scripts/blitz.shutdown.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.shutdown.sh b/home.admin/config.scripts/blitz.shutdown.sh index 2f7cc679e..7202e3b96 100755 --- a/home.admin/config.scripts/blitz.shutdown.sh +++ b/home.admin/config.scripts/blitz.shutdown.sh @@ -38,8 +38,9 @@ echo "stop electrs - please wait .." sudo systemctl stop electrs 2>/dev/null # stopping lnd -echo "stop lnd - please wait .." +echo "stop lightning - please wait .." sudo systemctl stop lnd 2>/dev/null +sudo systemctl stop lightningd 2>/dev/null # stopping bitcoin (thru cli) echo "stop ${network}d (1) - please wait .." From c4937558ab76d8f4a2ab9787f6da6cb92232ffaf Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 17:17:07 +0200 Subject: [PATCH 0647/1295] settings adapt to running lightning impl --- home.admin/00settingsMenuBasics.sh | 62 +++++++++++++++++++++-- home.admin/00settingsMenuServices.sh | 75 +++++++--------------------- 2 files changed, 76 insertions(+), 61 deletions(-) diff --git a/home.admin/00settingsMenuBasics.sh b/home.admin/00settingsMenuBasics.sh index 3c5cce643..caafcc8fd 100755 --- a/home.admin/00settingsMenuBasics.sh +++ b/home.admin/00settingsMenuBasics.sh @@ -78,21 +78,26 @@ WIDTH=45 OPTIONS=() OPTIONS+=(t 'Run behind TOR' ${runBehindTor}) + if [ "${displayClass}" == "lcd" ]; then OPTIONS+=(s 'Touchscreen' ${touchscreenMenu}) OPTIONS+=(r 'LCD Rotate' ${lcdrotateMenu}) fi -if [ ${chain} = "main" ];then + +if [ "${lightning}" == "lnd" ]; then OPTIONS+=(a 'Channel Autopilot' ${autoPilot}) OPTIONS+=(k 'Accept Keysend' ${keysend}) - # OPTIONS+=(n 'Testnet' ${chainValue}) # deprecated option - # see the parallel network in SERVICES OPTIONS+=(c 'Circuitbreaker (LND firewall)' ${circuitbreaker}) OPTIONS+=(u 'LND Auto-Unlock' ${autoUnlock}) OPTIONS+=(d 'StaticChannelBackup on DropBox' ${DropboxBackup}) OPTIONS+=(e 'StaticChannelBackup on USB Drive' ${LocalBackup}) fi + OPTIONS+=(z 'ZeroTier' ${zerotierSwitch}) +OPTIONS+=(t 'Parallel Testnet services' ${testnet}) + +# choose c-lightning just at setup for now +#OPTIONS+=(n 'C-lightning' ${cln}) if [ ${chain} = "main" ];then if [ ${#runBehindTor} -eq 0 ] || [ "${runBehindTor}" = "off" ]; then @@ -430,6 +435,57 @@ else echo "ZeroTier setting unchanged." fi +# testnet process choice +choice="off"; check=$(echo "${CHOICES}" | grep -c "t") +if [ ${check} -eq 1 ]; then choice="on"; fi +if [ "${testnet}" != "${choice}" ]; then + echo "# Testnet Setting changed .." + anychange=1 + /home/admin/config.scripts/bitcoin.chains.sh ${choice} testnet + errorOnInstall=$? + if [ "${choice}" = "on" ]; then + if [ ${errorOnInstall} -eq 0 ]; then + echo "# Successfully installed Testnet" + echo + echo "# Press ENTER to continue ..." + read key + else + l1="# !!! FAIL on Testnet install !!!" + l2="# Try manual install on terminal after reboot with:" + l3="/home/admin/config.scripts/bitcoin.chains.sh on testnet" + dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 + fi + fi +else + echo "# Testnet Setting unchanged." +fi + + +# cln process choice +#choice="off"; check=$(echo "${CHOICES}" | grep -c "n") +#if [ ${check} -eq 1 ]; then choice="on"; fi +#if [ "${cln}" != "${choice}" ]; then +# echo "# C-lightning Setting changed .." +# anychange=1 +# /home/admin/config.scripts/cln.install.sh ${choice} +# errorOnInstall=$? +# if [ "${choice}" = "on" ]; then +# if [ ${errorOnInstall} -eq 0 ]; then +# echo "# Successfully installed C-lightning" +# echo +# echo "# Press ENTER to continue ..." +# read key +# else +# l1="# !!! FAIL on C-lightning install !!!" +# l2="# Try manual install on terminal after reboot with:" +# l3="/home/admin/config.scripts/cln.install.sh on" +# dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 +# fi +# fi +#else +# echo "# C-lightning Setting unchanged." +#fi + if [ ${anychange} -eq 0 ]; then dialog --msgbox "NOTHING CHANGED!\nUse Spacebar to check/uncheck services." 8 58 exit 0 diff --git a/home.admin/00settingsMenuServices.sh b/home.admin/00settingsMenuServices.sh index d43ed1b11..832011a15 100755 --- a/home.admin/00settingsMenuServices.sh +++ b/home.admin/00settingsMenuServices.sh @@ -32,21 +32,29 @@ echo "run dialog ..." OPTIONS=() OPTIONS+=(e 'Electrum Rust Server' ${ElectRS}) OPTIONS+=(r 'RTL Webinterface' ${rtlWebinterface}) -OPTIONS+=(t 'ThunderHub' ${thunderhub}) -OPTIONS+=(l 'LIT (loop, pool, faraday)' ${lit}) OPTIONS+=(p 'BTCPayServer' ${BTCPayServer}) -OPTIONS+=(i 'LNbits' ${LNBits}) OPTIONS+=(b 'BTC-RPC-Explorer' ${BTCRPCexplorer}) OPTIONS+=(s 'Cryptoadvance Specter' ${specter}) OPTIONS+=(a 'Mempool Space' ${mempoolExplorer}) + +# just available for LND +if [ "${lightning}" == "lnd" ]; then + OPTIONS+=(t 'ThunderHub' ${thunderhub}) + OPTIONS+=(l 'LIT (loop, pool, faraday)' ${lit}) + OPTIONS+=(i 'LNbits' ${LNBits}) + OPTIONS+=(o 'Balance of Satoshis' ${bos}) + OPTIONS+=(y 'PyBLOCK' ${pyblock}) + OPTIONS+=(h 'ChannelTools (Fund Rescue)' ${chantools}) + OPTIONS+=(x 'Sphinx-Relay' ${sphinxrelay}) +fi + +# just available for CLN +if [ "${lightning}" == "cln" ]; then + # none yet +fi + OPTIONS+=(j 'JoinMarket' ${joinmarket}) -OPTIONS+=(o 'Balance of Satoshis' ${bos}) -OPTIONS+=(x 'Sphinx-Relay' ${sphinxrelay}) -OPTIONS+=(y 'PyBLOCK' ${pyblock}) -OPTIONS+=(h 'ChannelTools (Fund Rescue)' ${chantools}) OPTIONS+=(w 'Download Bitcoin Whitepaper' ${whitepaper}) -OPTIONS+=(n 'Parallel Testnet services' ${testnet}) -OPTIONS+=(c 'C-lightning' ${cln}) CHOICES=$(dialog --title ' Additional Services ' \ --checklist ' use spacebar to activate/de-activate ' \ @@ -436,55 +444,6 @@ else echo "Whitepaper setting unchanged." fi -# testnet process choice -choice="off"; check=$(echo "${CHOICES}" | grep -c "n") -if [ ${check} -eq 1 ]; then choice="on"; fi -if [ "${testnet}" != "${choice}" ]; then - echo "# Testnet Setting changed .." - anychange=1 - /home/admin/config.scripts/bitcoin.chains.sh ${choice} testnet - errorOnInstall=$? - if [ "${choice}" = "on" ]; then - if [ ${errorOnInstall} -eq 0 ]; then - echo "# Successfully installed Testnet" - echo - echo "# Press ENTER to continue ..." - read key - else - l1="# !!! FAIL on Testnet install !!!" - l2="# Try manual install on terminal after reboot with:" - l3="/home/admin/config.scripts/bitcoin.chains.sh on testnet" - dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 - fi - fi -else - echo "# Testnet Setting unchanged." -fi - -# cln process choice -choice="off"; check=$(echo "${CHOICES}" | grep -c "c") -if [ ${check} -eq 1 ]; then choice="on"; fi -if [ "${cln}" != "${choice}" ]; then - echo "# C-lightning Setting changed .." - anychange=1 - /home/admin/config.scripts/cln.install.sh ${choice} - errorOnInstall=$? - if [ "${choice}" = "on" ]; then - if [ ${errorOnInstall} -eq 0 ]; then - echo "# Successfully installed C-lightning" - echo - echo "# Press ENTER to continue ..." - read key - else - l1="# !!! FAIL on C-lightning install !!!" - l2="# Try manual install on terminal after reboot with:" - l3="/home/admin/config.scripts/cln.install.sh on" - dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 - fi - fi -else - echo "# C-lightning Setting unchanged." -fi if [ ${anychange} -eq 0 ]; then dialog --msgbox "NOTHING CHANGED!\nUse Spacebar to check/uncheck services." 8 58 From 7fba3472cd81a367f577594ef3234620e259fab2 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 17:23:31 +0200 Subject: [PATCH 0648/1295] fix syntax --- home.admin/00settingsMenuServices.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/home.admin/00settingsMenuServices.sh b/home.admin/00settingsMenuServices.sh index 832011a15..ebf9ebc9e 100755 --- a/home.admin/00settingsMenuServices.sh +++ b/home.admin/00settingsMenuServices.sh @@ -50,7 +50,8 @@ fi # just available for CLN if [ "${lightning}" == "cln" ]; then - # none yet + # nothing yet + echo "" fi OPTIONS+=(j 'JoinMarket' ${joinmarket}) From 6938f566db5808f707cbcd715dc5cfd58aca330d Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 21:02:33 +0200 Subject: [PATCH 0649/1295] debug info --- home.admin/00settingsMenuBasics.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/00settingsMenuBasics.sh b/home.admin/00settingsMenuBasics.sh index caafcc8fd..7ef49787b 100755 --- a/home.admin/00settingsMenuBasics.sh +++ b/home.admin/00settingsMenuBasics.sh @@ -115,7 +115,7 @@ CHOICES=$(dialog \ "${OPTIONS[@]}" 2>&1 >/dev/tty) dialogcancel=$? -echo "done dialog" +echo "done dialog (${CHOICE_HEIGHT})" clear # check if user canceled dialog From 9cd517008fd276d456f37d5ce836ed31e7349b75 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 21:03:10 +0200 Subject: [PATCH 0650/1295] add debug --- home.admin/00settingsMenuBasics.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/home.admin/00settingsMenuBasics.sh b/home.admin/00settingsMenuBasics.sh index 7ef49787b..24390433a 100755 --- a/home.admin/00settingsMenuBasics.sh +++ b/home.admin/00settingsMenuBasics.sh @@ -115,11 +115,10 @@ CHOICES=$(dialog \ "${OPTIONS[@]}" 2>&1 >/dev/tty) dialogcancel=$? -echo "done dialog (${CHOICE_HEIGHT})" clear # check if user canceled dialog -echo "dialogcancel(${dialogcancel})" +echo "dialogcancel(${dialogcancel}) (${CHOICE_HEIGHT})" if [ ${dialogcancel} -eq 1 ]; then echo "user canceled" exit 0 From 9b49b2a64a5c0c754070851fc460a21e85ce27a3 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 21:03:47 +0200 Subject: [PATCH 0651/1295] better height --- home.admin/00settingsMenuBasics.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/00settingsMenuBasics.sh b/home.admin/00settingsMenuBasics.sh index 24390433a..a5d64d780 100755 --- a/home.admin/00settingsMenuBasics.sh +++ b/home.admin/00settingsMenuBasics.sh @@ -107,7 +107,7 @@ if [ ${chain} = "main" ];then fi fi -CHOICE_HEIGHT=$(("${#OPTIONS[@]}" / 3)) +CHOICE_HEIGHT=$(("${#OPTIONS[@]}")) CHOICES=$(dialog \ --title ' Node Settings & Options ' \ --checklist ' use spacebar to activate/de-activate ' \ From 8f1f1739ebd9b8412b6557381d71b9fd0110a482 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 21:07:07 +0200 Subject: [PATCH 0652/1295] add default values --- home.admin/00settingsMenuBasics.sh | 13 +++---------- home.admin/00settingsMenuServices.sh | 2 -- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/home.admin/00settingsMenuBasics.sh b/home.admin/00settingsMenuBasics.sh index a5d64d780..69f9604f3 100755 --- a/home.admin/00settingsMenuBasics.sh +++ b/home.admin/00settingsMenuBasics.sh @@ -9,13 +9,14 @@ echo "services default values" if [ ${#autoPilot} -eq 0 ]; then autoPilot="off"; fi if [ ${#autoUnlock} -eq 0 ]; then autoUnlock="off"; fi if [ ${#runBehindTor} -eq 0 ]; then runBehindTor="off"; fi -# if [ ${#chain} -eq 0 ]; then chain="main"; fi if [ ${#autoNatDiscovery} -eq 0 ]; then autoNatDiscovery="off"; fi if [ ${#networkUPnP} -eq 0 ]; then networkUPnP="off"; fi if [ ${#touchscreen} -eq 0 ]; then touchscreen=0; fi if [ ${#lcdrotate} -eq 0 ]; then lcdrotate=0; fi if [ ${#zerotier} -eq 0 ]; then zerotier="off"; fi if [ ${#circuitbreaker} -eq 0 ]; then circuitbreaker="off"; fi +if [ ${#testnet} -eq 0 ]; then testnet="off"; fi +if [ ${#cln} -eq 0 ]; then cln="off"; fi echo "map dropboxbackup to on/off" DropboxBackup="off" @@ -71,10 +72,7 @@ fi # show select dialog echo "run dialog ..." - # BASIC MENU INFO -HEIGHT=19 # add 6 to CHOICE_HEIGHT + MENU lines -WIDTH=45 OPTIONS=() OPTIONS+=(t 'Run behind TOR' ${runBehindTor}) @@ -108,12 +106,7 @@ if [ ${chain} = "main" ];then fi CHOICE_HEIGHT=$(("${#OPTIONS[@]}")) -CHOICES=$(dialog \ - --title ' Node Settings & Options ' \ - --checklist ' use spacebar to activate/de-activate ' \ - $HEIGHT $WIDTH $CHOICE_HEIGHT \ - "${OPTIONS[@]}" 2>&1 >/dev/tty) - +CHOICES=$(dialog --title ' Node Settings & Options ' --checklist ' use spacebar to activate/de-activate ' $CHOICE_HEIGHT 45 $CHOICE_HEIGHT "${OPTIONS[@]}" 2>&1 >/dev/tty) dialogcancel=$? clear diff --git a/home.admin/00settingsMenuServices.sh b/home.admin/00settingsMenuServices.sh index ebf9ebc9e..a33f10f6b 100755 --- a/home.admin/00settingsMenuServices.sh +++ b/home.admin/00settingsMenuServices.sh @@ -23,8 +23,6 @@ if [ ${#sphinxrelay} -eq 0 ]; then sphinxrelay="off"; fi if [ ${#lit} -eq 0 ]; then lit="off"; fi if [ ${#whitepaper} -eq 0 ]; then whitepaper="off"; fi if [ ${#chantools} -eq 0 ]; then chantools="off"; fi -if [ ${#testnet} -eq 0 ]; then testnet="off"; fi -if [ ${#cln} -eq 0 ]; then cln="off"; fi # show select dialog echo "run dialog ..." From 74a72d698cd6d58f9efc5d8bb925ed48dbfa564d Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 21:21:06 +0200 Subject: [PATCH 0653/1295] add config entry if not there yet --- home.admin/config.scripts/bitcoin.chains.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/home.admin/config.scripts/bitcoin.chains.sh b/home.admin/config.scripts/bitcoin.chains.sh index 7709c0b74..2c79c7130 100644 --- a/home.admin/config.scripts/bitcoin.chains.sh +++ b/home.admin/config.scripts/bitcoin.chains.sh @@ -224,7 +224,12 @@ fi 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 + entryExists=$(sudo cat /mnt/hdd/raspiblitz.conf | grep -c "${CHAIN}=") + if [ "${entryExists}" == "0" ]; then + echo "${CHAIN}=on" /mnt/hdd/raspiblitz.conf + else + sudo sed -i "s/^${CHAIN}=.*/${CHAIN}=on/g" /mnt/hdd/raspiblitz.conf + fi exit 0 fi From 5ec136cd46faf557b214b017fcc74caa06c7fcba Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 21:26:08 +0200 Subject: [PATCH 0654/1295] change default value --- home.admin/config.scripts/bitcoin.chains.sh | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/home.admin/config.scripts/bitcoin.chains.sh b/home.admin/config.scripts/bitcoin.chains.sh index 2c79c7130..bcf2501eb 100644 --- a/home.admin/config.scripts/bitcoin.chains.sh +++ b/home.admin/config.scripts/bitcoin.chains.sh @@ -217,19 +217,15 @@ source /mnt/hdd/raspiblitz.conf # add default value to raspi config if needed if ! grep -Eq "^${CHAIN}=" /mnt/hdd/raspiblitz.conf; then - echo "${CHAIN}=off" >> /mnt/hdd/raspiblitz.conf + 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 - entryExists=$(sudo cat /mnt/hdd/raspiblitz.conf | grep -c "${CHAIN}=") - if [ "${entryExists}" == "0" ]; then - echo "${CHAIN}=on" /mnt/hdd/raspiblitz.conf - else - sudo sed -i "s/^${CHAIN}=.*/${CHAIN}=on/g" /mnt/hdd/raspiblitz.conf - fi + sudo sed -i "s/^${CHAIN}=.*/${CHAIN}=on/g" /mnt/hdd/raspiblitz.conf exit 0 fi From 182c0697037f5c5e2bb3483e9bb467b910e3d3d3 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 21:31:17 +0200 Subject: [PATCH 0655/1295] Added exit info for cln --- home.admin/00raspiblitz.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 4777323d8..790f0030b 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -212,8 +212,13 @@ echo "* RaspiBlitz Commandline" echo "* Here be dragons .. have fun :)" echo "***********************************" if [ "${setupPhase}" == "done" ]; then - echo "Bitcoin command line options: bitcoin-cli help" - echo "LND command line options: lncli -h" + echo "Bitcoin command line options: ${network}-cli help" + if [ "${lightning}" == "lnd" ]; then + echo "LND command line options: lncli -h" + fi + if [ "${lightning}" == "cln" ]; then + echo "C-Lightning command line options: lightning-cli help" + fi else echo "Your setup is not finished." echo "For setup logs: cat raspiblitz.log" From 327019e2823c16b187a7d5639b16ebe3654f1976 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 21:33:24 +0200 Subject: [PATCH 0656/1295] make sure to load config file if available --- home.admin/00raspiblitz.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 790f0030b..9fa934765 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -9,6 +9,7 @@ echo "Starting SSH user interface ... (please wait)" # CONFIGFILE - configuration of RaspiBlitz configFile="/mnt/hdd/raspiblitz.conf" +source ${configFile} 2>/dev/null # INFOFILE - state data from bootstrap infoFile="/home/admin/raspiblitz.info" From 81736a6c10a01c78c0a4de405def32a0a6e6e2a9 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 21:51:19 +0200 Subject: [PATCH 0657/1295] add sparko to menu --- home.admin/00settingsMenuServices.sh | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/home.admin/00settingsMenuServices.sh b/home.admin/00settingsMenuServices.sh index a33f10f6b..2c3628257 100755 --- a/home.admin/00settingsMenuServices.sh +++ b/home.admin/00settingsMenuServices.sh @@ -48,8 +48,7 @@ fi # just available for CLN if [ "${lightning}" == "cln" ]; then - # nothing yet - echo "" + OPTIONS+=(k 'Sparko' ${sphinxrelay}) fi OPTIONS+=(j 'JoinMarket' ${joinmarket}) @@ -443,6 +442,27 @@ else echo "Whitepaper setting unchanged." fi +# sparko process choice +choice="off"; check=$(echo "${CHOICES}" | grep -c "k") +if [ ${check} -eq 1 ]; then choice="on"; fi +if [ "${sparko}" != "${choice}" ]; then + echo "# Sparko on mainnet Setting changed .." + anychange=1 + /home/admin/config.scripts/cln-plugin.sparko.sh ${choice} mainnet + errorOnInstall=$? + if [ "${choice}" = "on" ]; then + if [ ${errorOnInstall} -eq 0 ]; then + /home/admin/config.scripts/cln-plugin.sparko.sh menu mainnet + else + l1="# !!! FAIL on Sparko on mainnet install !!!" + l2="# Try manual install on terminal after reboot with:" + l3="/home/admin/config.scripts/cln-plugin.sparko.sh on mainnet" + dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 + fi + fi +else + echo "# Sparko on mainnet Setting unchanged." +fi if [ ${anychange} -eq 0 ]; then dialog --msgbox "NOTHING CHANGED!\nUse Spacebar to check/uncheck services." 8 58 From a9a53302d56d79727394995855f91fb598783b13 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 22:05:20 +0200 Subject: [PATCH 0658/1295] add default for sparko --- home.admin/00mainMenu.sh | 6 ++++++ home.admin/config.scripts/cln-plugin.sparko.sh | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index 9f3c825c5..2ed3b4064 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -77,6 +77,9 @@ fi if [ "${lit}" == "on" ]; then OPTIONS+=(LIT "LIT (loop, pool, faraday)") fi +if [ "${sparko}" == "on" ]; then + OPTIONS+=(SPARKO "Sparko Webwallet") +fi if [ "${ElectRS}" == "on" ]; then OPTIONS+=(ELECTRS "Electrum Rust Server") fi @@ -248,6 +251,9 @@ case $CHOICE in LIT) /home/admin/config.scripts/bonus.lit.sh menu ;; + SPARKO) + /home/admin/config.scripts/cln-plugin.sparko.sh menu mainnet + ;; LNBITS) /home/admin/config.scripts/bonus.lnbits.sh menu ;; diff --git a/home.admin/config.scripts/cln-plugin.sparko.sh b/home.admin/config.scripts/cln-plugin.sparko.sh index 675d179c5..07112cdcc 100644 --- a/home.admin/config.scripts/cln-plugin.sparko.sh +++ b/home.admin/config.scripts/cln-plugin.sparko.sh @@ -145,6 +145,12 @@ sparko-keys=${masterkeythatcandoeverything}; ${secretaccesskeythatcanreadstuff}: # hidden service to https://xx.onion /home/admin/config.scripts/internet.hiddenservice.sh ${netprefix}sparko 443 ${portprefix}9000 + # add default value to raspi config if needed + if ! grep -Eq "^${CHAIN}=" /mnt/hdd/raspiblitz.conf; then + NEWENTRY="${netprefix}sparko=on" + sudo /bin/sh -c "echo '$NEWENTRY' >> /mnt/hdd/raspiblitz.conf" + fi + # setting value in raspi blitz config sudo sed -i "s/^${netprefix}sparko=.*/${netprefix}sparko=on/g" /mnt/hdd/raspiblitz.conf From f9234ed3de54dc28ee9dda704ce07a105d20ce90 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 22:07:02 +0200 Subject: [PATCH 0659/1295] replace default sparko entry --- home.admin/config.scripts/cln-plugin.sparko.sh | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/home.admin/config.scripts/cln-plugin.sparko.sh b/home.admin/config.scripts/cln-plugin.sparko.sh index 07112cdcc..f1211bb59 100644 --- a/home.admin/config.scripts/cln-plugin.sparko.sh +++ b/home.admin/config.scripts/cln-plugin.sparko.sh @@ -51,8 +51,9 @@ ${toraddresstext} fi # add default value to raspi config if needed -if ! grep -Eq "^${netprefix}sparko=" /mnt/hdd/raspiblitz.conf; then - echo "${netprefix}sparko=off" >> /mnt/hdd/raspiblitz.conf +if ! grep -Eq "^${CHAIN}=" /mnt/hdd/raspiblitz.conf; then + NEWENTRY="${netprefix}sparko=off" + sudo /bin/sh -c "echo '$NEWENTRY' >> /mnt/hdd/raspiblitz.conf" fi if [ $1 = connect ];then @@ -145,12 +146,6 @@ sparko-keys=${masterkeythatcandoeverything}; ${secretaccesskeythatcanreadstuff}: # hidden service to https://xx.onion /home/admin/config.scripts/internet.hiddenservice.sh ${netprefix}sparko 443 ${portprefix}9000 - # add default value to raspi config if needed - if ! grep -Eq "^${CHAIN}=" /mnt/hdd/raspiblitz.conf; then - NEWENTRY="${netprefix}sparko=on" - sudo /bin/sh -c "echo '$NEWENTRY' >> /mnt/hdd/raspiblitz.conf" - fi - # setting value in raspi blitz config sudo sed -i "s/^${netprefix}sparko=.*/${netprefix}sparko=on/g" /mnt/hdd/raspiblitz.conf From 583517cf1eb45e45431733319d4bdc547581fdba Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 22:25:36 +0200 Subject: [PATCH 0660/1295] show sparko installed or not --- home.admin/00settingsMenuServices.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/home.admin/00settingsMenuServices.sh b/home.admin/00settingsMenuServices.sh index 2c3628257..9be825e83 100755 --- a/home.admin/00settingsMenuServices.sh +++ b/home.admin/00settingsMenuServices.sh @@ -23,6 +23,7 @@ if [ ${#sphinxrelay} -eq 0 ]; then sphinxrelay="off"; fi if [ ${#lit} -eq 0 ]; then lit="off"; fi if [ ${#whitepaper} -eq 0 ]; then whitepaper="off"; fi if [ ${#chantools} -eq 0 ]; then chantools="off"; fi +if [ ${#sparko} -eq 0 ]; then sparko="off"; fi # show select dialog echo "run dialog ..." @@ -48,7 +49,7 @@ fi # just available for CLN if [ "${lightning}" == "cln" ]; then - OPTIONS+=(k 'Sparko' ${sphinxrelay}) + OPTIONS+=(k 'Sparko' ${sparko}) fi OPTIONS+=(j 'JoinMarket' ${joinmarket}) From f52642134cebda64da5dff8133e283c76652a9bb Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 22:26:36 +0200 Subject: [PATCH 0661/1295] add more description to sparko option --- home.admin/00settingsMenuServices.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/00settingsMenuServices.sh b/home.admin/00settingsMenuServices.sh index 9be825e83..dae75aba8 100755 --- a/home.admin/00settingsMenuServices.sh +++ b/home.admin/00settingsMenuServices.sh @@ -49,7 +49,7 @@ fi # just available for CLN if [ "${lightning}" == "cln" ]; then - OPTIONS+=(k 'Sparko' ${sparko}) + OPTIONS+=(k 'Sparko C-Lightning WebWallet' ${sparko}) fi OPTIONS+=(j 'JoinMarket' ${joinmarket}) From 07b0e3e36f3a90ec09a2c2fd11527c7fa6262569 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 22:31:56 +0200 Subject: [PATCH 0662/1295] RTL for clightnign in service menu --- home.admin/00settingsMenuServices.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/home.admin/00settingsMenuServices.sh b/home.admin/00settingsMenuServices.sh index dae75aba8..b88f21783 100755 --- a/home.admin/00settingsMenuServices.sh +++ b/home.admin/00settingsMenuServices.sh @@ -8,6 +8,7 @@ source /mnt/hdd/raspiblitz.conf echo "services default values" if [ ${#runBehindTor} -eq 0 ]; then runBehindTor="off"; fi if [ ${#rtlWebinterface} -eq 0 ]; then rtlWebinterface="off"; fi +if [ ${#crtlWebinterface} -eq 0 ]; then crtlWebinterface="off"; fi if [ ${#BTCRPCexplorer} -eq 0 ]; then BTCRPCexplorer="off"; fi if [ ${#specter} -eq 0 ]; then specter="off"; fi if [ ${#BTCPayServer} -eq 0 ]; then BTCPayServer="off"; fi @@ -30,7 +31,6 @@ echo "run dialog ..." OPTIONS=() OPTIONS+=(e 'Electrum Rust Server' ${ElectRS}) -OPTIONS+=(r 'RTL Webinterface' ${rtlWebinterface}) OPTIONS+=(p 'BTCPayServer' ${BTCPayServer}) OPTIONS+=(b 'BTC-RPC-Explorer' ${BTCRPCexplorer}) OPTIONS+=(s 'Cryptoadvance Specter' ${specter}) @@ -38,6 +38,7 @@ OPTIONS+=(a 'Mempool Space' ${mempoolExplorer}) # just available for LND if [ "${lightning}" == "lnd" ]; then + OPTIONS+=(r 'RTL Webinterface' ${rtlWebinterface}) OPTIONS+=(t 'ThunderHub' ${thunderhub}) OPTIONS+=(l 'LIT (loop, pool, faraday)' ${lit}) OPTIONS+=(i 'LNbits' ${LNBits}) @@ -49,6 +50,7 @@ fi # just available for CLN if [ "${lightning}" == "cln" ]; then + OPTIONS+=(r 'RTL Webinterface' ${crtlWebinterface}) OPTIONS+=(k 'Sparko C-Lightning WebWallet' ${sparko}) fi @@ -82,14 +84,14 @@ if [ ${check} -eq 1 ]; then choice="on"; fi if [ "${rtlWebinterface}" != "${choice}" ]; then echo "RTL Webinterface Setting changed .." anychange=1 - /home/admin/config.scripts/bonus.rtl.sh ${choice} + /home/admin/config.scripts/bonus.rtl.sh ${choice} ${lightning} mainnet errorOnInstall=$? if [ "${choice}" = "on" ]; then if [ ${errorOnInstall} -eq 0 ]; then sudo systemctl start RTL echo "waiting 10 secs .." sleep 10 - /home/admin/config.scripts/bonus.rtl.sh menu + /home/admin/config.scripts/bonus.rtl.sh menu ${lightning} mainnet else l1="!!! FAIL on RTL install !!!" l2="Try manual install on terminal after reboot with:" From 840014a1c76b9d3dacad634d28b33297b738692d Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 22:34:08 +0200 Subject: [PATCH 0663/1295] main menu item rtl --- home.admin/00mainMenu.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index 2ed3b4064..984bf0828 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -68,7 +68,7 @@ if [ "${rtlWebinterface}" == "on" ]; then fi # Put Activated Apps on top -if [ "${rtlWebinterface}" == "on" ]; then +if [ "${rtlWebinterface}" == "on" ] || [ "${crtlWebinterface}" == "on" ]; then OPTIONS+=(RTL "RTL Web Node Manager") fi if [ "${BTCPayServer}" == "on" ]; then @@ -237,7 +237,7 @@ case $CHOICE in /home/admin/config.scripts/blitz.touchscreen.sh calibrate ;; RTL) - /home/admin/config.scripts/bonus.rtl.sh menu + /home/admin/config.scripts/bonus.rtl.sh menu ${lightning} ;; BTCPAY) /home/admin/config.scripts/bonus.btcpayserver.sh menu From 1703c7c3542dc068e9af4c1b92b2f5747a743b51 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 22:35:44 +0200 Subject: [PATCH 0664/1295] add RTL description --- home.admin/00settingsMenuServices.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/00settingsMenuServices.sh b/home.admin/00settingsMenuServices.sh index b88f21783..9cf3a6f94 100755 --- a/home.admin/00settingsMenuServices.sh +++ b/home.admin/00settingsMenuServices.sh @@ -38,7 +38,7 @@ OPTIONS+=(a 'Mempool Space' ${mempoolExplorer}) # just available for LND if [ "${lightning}" == "lnd" ]; then - OPTIONS+=(r 'RTL Webinterface' ${rtlWebinterface}) + OPTIONS+=(r 'RTL LND Webinterface' ${rtlWebinterface}) OPTIONS+=(t 'ThunderHub' ${thunderhub}) OPTIONS+=(l 'LIT (loop, pool, faraday)' ${lit}) OPTIONS+=(i 'LNbits' ${LNBits}) @@ -50,7 +50,7 @@ fi # just available for CLN if [ "${lightning}" == "cln" ]; then - OPTIONS+=(r 'RTL Webinterface' ${crtlWebinterface}) + OPTIONS+=(r 'RTL C-Lightning Webinterface' ${crtlWebinterface}) OPTIONS+=(k 'Sparko C-Lightning WebWallet' ${sparko}) fi From d55e20811dc07d0162d2ce36b398146ece6716cf Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 22:46:14 +0200 Subject: [PATCH 0665/1295] debug in RTL install --- home.admin/00settingsMenuServices.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/00settingsMenuServices.sh b/home.admin/00settingsMenuServices.sh index 9cf3a6f94..5cefb6f8e 100755 --- a/home.admin/00settingsMenuServices.sh +++ b/home.admin/00settingsMenuServices.sh @@ -93,9 +93,9 @@ if [ "${rtlWebinterface}" != "${choice}" ]; then sleep 10 /home/admin/config.scripts/bonus.rtl.sh menu ${lightning} mainnet else - l1="!!! FAIL on RTL install !!!" + l1="!!! FAIL on RTL ${lightning} install !!!" l2="Try manual install on terminal after reboot with:" - l3="/home/admin/config.scripts/bonus.rtl.sh on" + l3="/home/admin/config.scripts/bonus.rtl.sh on ${lightning} mainnet" dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 fi fi From 1915baf98adf1d624d15221bc3abe73649828af3 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 22:59:39 +0200 Subject: [PATCH 0666/1295] install sparko on recovery --- home.admin/_provision_.sh | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/home.admin/_provision_.sh b/home.admin/_provision_.sh index a22e535a4..2d0ce2c34 100755 --- a/home.admin/_provision_.sh +++ b/home.admin/_provision_.sh @@ -347,14 +347,34 @@ else echo "Provisioning DYNAMIC DOMAIN - keep default" >> ${logFile} fi -# RTL +# RTL (LND) if [ "${rtlWebinterface}" = "on" ]; then - echo "Provisioning RTL - run config script" >> ${logFile} + echo "Provisioning RTL LND - run config script" >> ${logFile} sudo sed -i "s/^message=.*/message='Setup RTL (takes time)'/g" ${infoFile} - sudo -u admin /home/admin/config.scripts/bonus.rtl.sh on >> ${logFile} 2>&1 + sudo -u admin /home/admin/config.scripts/bonus.rtl.sh on lnd mainnet >> ${logFile} 2>&1 sudo systemctl disable RTL # will get enabled after recover dialog else - echo "Provisioning RTL - keep default" >> ${logFile} + echo "Provisioning RTL LND - keep default" >> ${logFile} +fi + +# RTL (CLN) +if [ "${crtlWebinterface}" = "on" ]; then + echo "Provisioning RTL CLN - run config script" >> ${logFile} + sudo sed -i "s/^message=.*/message='Setup RTL (takes time)'/g" ${infoFile} + sudo -u admin /home/admin/config.scripts/bonus.rtl.sh on cln mainnet >> ${logFile} 2>&1 + sudo systemctl disable cRTL # will get enabled after recover dialog +else + echo "Provisioning RTL CLN - keep default" >> ${logFile} +fi + +# SPARKO +if [ "${sparko}" = "on" ]; then + echo "Provisioning Sparko - run config script" >> ${logFile} + sudo sed -i "s/^message=.*/message='Setup SPARKO (takes time)'/g" ${infoFile} + sudo -u admin /home/admin/config.scripts/cln-plugin.sparko.sh on mainnet >> ${logFile} 2>&1 + sudo systemctl disable cRTL # will get enabled after recover dialog +else + echo "Provisioning RTL CLN - keep default" >> ${logFile} fi #LOOP From 992b5da49b8e58adde6f8198acc7b021e32e22a2 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 23:09:45 +0200 Subject: [PATCH 0667/1295] update menu with cln --- home.admin/99updateMenu.sh | 67 ++++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 25 deletions(-) diff --git a/home.admin/99updateMenu.sh b/home.admin/99updateMenu.sh index e80d247ad..eaf522a4b 100755 --- a/home.admin/99updateMenu.sh +++ b/home.admin/99updateMenu.sh @@ -24,32 +24,48 @@ Do you want to start the Update now? exit 0 fi - whiptail --title "LND Data Backup" --yes-button "Download Backup" --no-button "Skip" --yesno " -Before we start the RaspiBlitz Update process, -its recommended to make a backup of all your LND Data -and download that file to your laptop. + if [ "${lightning}" != "" ]; then -Do you want to download LND Data Backup now? + whiptail --title "Lightning Data Backup" --yes-button "Download Backup" --no-button "Skip" --yesno " +Before we start the RaspiBlitz Update process, +its recommended to make a backup of all your Lightning +Channel Data and download that file to your laptop. + +Do you want to download Lightning Data Backup now? " 12 58 - if [ $? -eq 0 ]; then - clear - echo "*************************************" - echo "* PREPARING LND BACKUP DOWNLOAD" - echo "*************************************" - echo "please wait .." - sleep 2 - /home/admin/config.scripts/lnd.backup.sh lnd-export-gui - echo - echo "PRESS ENTER to continue once you're done downloading." - read key - else - clear - echo "*************************************" - echo "* JUST MAKING BACKUP TO OLD SD CARD" - echo "*************************************" - echo "please wait .." - sleep 2 - /home/admin/config.scripts/lnd.backup.sh lnd-export + if [ $? -eq 0 ]; then + clear + echo "*************************************" + echo "* PREPARING LIGHTNING BACKUP DOWNLOAD" + echo "*************************************" + echo "please wait .." + sleep 2 + if [ "${lightning}" == "lnd" ]; then + /home/admin/config.scripts/lnd.backup.sh lnd-export-gui + elif [ "${lightning}" == "cln" ]; then + /home/admin/config.scripts/cln.backup.sh cln-export-gui + else + echo "TODO: Implement Data Backup for '${lightning}'" + fi + echo + echo "PRESS ENTER to continue once you're done downloading." + read key + else + clear + echo "*************************************" + echo "* JUST MAKING BACKUP TO OLD SD CARD" + echo "*************************************" + echo "please wait .." + sleep 2 + if [ "${lightning}" == "lnd" ]; then + /home/admin/config.scripts/lnd.backup.sh lnd-export + elif [ "${lightning}" == "cln" ]; then + /home/admin/config.scripts/cln.backup.sh cln-export + else + echo "TODO: Implement Data Backup for '${lightning}'" + sleep 3 + fi + fi fi whiptail --title "READY TO UPDATE?" --yes-button "START UPDATE" --no-button "Cancel" --yesno "If you start the update: The RaspiBlitz will power down. @@ -68,7 +84,8 @@ and do you WANT TO START UPDATE NOW? dialog --title " Update Canceled " --msgbox " OK. RaspiBlitz will NOT update now. " 7 39 - sudo systemctl start lnd + sudo systemctl start lnd 2>/dev/null + sudo systemctl start lightningd 2>/dev/null exit 0 fi From aa146d5d2de109d8e35e3ac39dd074e319016a13 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 3 Aug 2021 23:15:22 +0200 Subject: [PATCH 0668/1295] rework menu options --- home.admin/00mainMenu.sh | 5 +++-- home.admin/99updateMenu.sh | 37 +++++++++++++++++-------------------- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index 984bf0828..8c47df6a5 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -177,8 +177,9 @@ OPTIONS+=(UPDATE "Check/Prepare RaspiBlitz Update") OPTIONS+=(REBOOT "Reboot RaspiBlitz") OPTIONS+=(OFF "PowerOff RaspiBlitz") -HEIGHT=$(("${#OPTIONS[@]}")) -CHOICE_HEIGHT=$(("${#OPTIONS[@]}" / 2)) + +CHOICE_HEIGHT=$(("${#OPTIONS[@]}")) +HEIGHT=$((CHOICE_HEIGHT+6)) CHOICE=$(dialog --clear \ --backtitle "$BACKTITLE" \ --title "$TITLE" \ diff --git a/home.admin/99updateMenu.sh b/home.admin/99updateMenu.sh index eaf522a4b..b23826332 100755 --- a/home.admin/99updateMenu.sh +++ b/home.admin/99updateMenu.sh @@ -376,52 +376,49 @@ fi HEIGHT=10 # add 6 to CHOICE_HEIGHT + MENU lines WIDTH=55 CHOICE_HEIGHT=4 # 1 line / OPTIONS -OPTIONS=( -RELEASE "RaspiBlitz Release Update/Recovery" -PATCH "Patch RaspiBlitz v${codeVersion}" -LND "Interim LND Update Options" -BITCOIN "Bitcoin Core Update Options" -) +OPTIONS=() +OPTIONS+=(RELEASE "RaspiBlitz Release Update/Recovery") +OPTIONS+=(PATCH "Patch RaspiBlitz v${codeVersion}") +OPTIONS+=(BITCOIN "Bitcoin Core Update Options") + +if [ "${lightning}" == "lnd" ]; then + OPTIONS+=(LND "Interim LND Update Options") +fi if [ "${bos}" == "on" ]; then OPTIONS+=(BOS "Update Balance of Satoshis") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi + if [ "${thunderhub}" == "on" ]; then OPTIONS+=(THUB "Update ThunderHub") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi + if [ "${specter}" == "on" ]; then OPTIONS+=(SPECTER "Update Cryptoadvance Specter") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi + if [ "${rtlWebinterface}" == "on" ]; then OPTIONS+=(RTL "Update RTL") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi + if [ "${sphinxrelay}" == "on" ]; then OPTIONS+=(SPHINX "Update Sphinx Server Relay") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi + if [ "${pyblock}" == "on" ]; then OPTIONS+=(PYBLOCK "Update PyBLOCK") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi + if [ "${mempoolExplorer}" == "on" ]; then OPTIONS+=(MEMPOOL "Update Mempool Explorer") fi + if [ "${runBehindTor}" == "on" ]; then OPTIONS+=(TOR "Update Tor from the source code") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi +CHOICE_HEIGHT=$(("${#OPTIONS[@]}")) +HEIGHT=$((CHOICE_HEIGHT+6)) CHOICE=$(dialog --clear \ --backtitle "" \ --title "Update Options" \ From 074c9d8549c1251fd69afd01c5d020b8c299bb23 Mon Sep 17 00:00:00 2001 From: /rootzoll Date: Wed, 4 Aug 2021 00:18:30 +0200 Subject: [PATCH 0669/1295] merging pre-1.7.1 (#2462) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix copychain returns * typo in sync loop * stop services on inconsistent state * calling correct provisioning * apply bitcoin and lncli aliases in all scripts * network.aliases: add CLNETWORK * make cln default plugin dir: cln-plugins-enabled similar to the nginx model make 2 directories for plugins: cln-plugins-enabled - symlinked to ~/.lightning/plugins plugins from here are loaded automatically on cln start cln-plugins-available: plugins are downloaded here to be run until the next cln restart (or stopped with runonce) note the disk is mounted with noexec so plugins can't run from there discuss in: https://github.com/rootzoll/raspiblitz/issues/2295 * move shutdown script * change all place where shutdown script is used * change notify & release * moved shutdown script * moved shutdown scripts * add more debug info * moving github script * remove chain in sync * no longer needed chain in sync * move debug script * patch patch command * make sure setup file is sourced * remove debug output * make sure lnd is put behind tor * change indent * get fresh sync progress * avoid scrolling in menus * use new selfsignedcert if no lnd tls.cert present * sparko: add info and connect menu with own cert https://github.com/rootzoll/raspiblitz/issues/2295 * cln.rest: add connect option for Zeus https://github.com/rootzoll/raspiblitz/issues/2295 * cln: add the backup plugin + options Usage options: cln-plugin.backup.sh [on] [testnet|mainnet|signet] cln-plugin.backup.sh [restore] [testnet|mainnet|signet] [force] cln-plugin.backup.sh [backup-compact] [testnet|mainnet|signet] https://github.com/lightningd/plugins/tree/master/backup Discussed in: https://github.com/rootzoll/raspiblitz/issues/2295 * cln: add cln-plugin.standard.python.sh Install and show the output of the chosen plugin for C-lightning Usage: cln-plugin.standard-python.sh on [plugin-name] [testnet|mainnet|signet] [runonce] tested plugins: summary | helpme | feeadjuster find more at: https://github.com/lightningd/plugins discussed in: https://github.com/rootzoll/raspiblitz/issues/2295 * shellcheck: change all `egrep` to `grep -E` https://github.com/koalaman/shellcheck/wiki/SC2196 * do not resolve aliases, use as variables * lnd: fix lnd.conf for parallel networks discussed in: https://github.com/rootzoll/raspiblitz/issues/2290 * lnd: add LND option for parallel networks * deprecate Testnet in SETTINGS keysend and autopilot only for mainnet due to: https://github.com/rootzoll/raspiblitz/issues/2290 * lnd: autopilot and autounlock for testnet * fix comments * add the SYSTEM menu for parallel chains * RTL update to v0.11.0 make chain specific directory for the config: /home/rtl/${netprefix}RTL/ use ${netprefix}lnd.conf in config override Environmen tvaribales for cln in the systemd service: /etc/systemd/system/${netprefix}${typeprefix}RTL.service discussed in: https://github.com/rootzoll/raspiblitz/issues/2384 * lnd.setname.sh for testnet * display ${CHAIN} in the SYSTEM menu options * keep _aliases file when live patches are applied * all lncli_aliases to be used as variables * default to KIllMode=control-group in services https://www.man7.org/linux/man-pages/man5/systemd.kill.5.html discussed in: https://github.com/rootzoll/raspiblitz/issues/1901 * add cln.hsmtool.sh for hsm_secret handling encrypt | decrypt | autounlock the hsm_secret for C-lightning usage: cln.hsmtool.sh [unlock] [testnet|mainnet|signet] cln.hsmtool.sh [encrypt|decrypt] [testnet|mainnet|signet] cln.hsmtool.sh [autounlock-on|autounlock-off] [testnet|mainnet|signet] discussed in: https://github.com/rootzoll/raspiblitz/issues/2295 * add cln.install-service.sh to set up cln with systemd script to set up or update the CLN systemd service checks for hsm_secret encryption, autounlock and the sparko plugin usage: /home/admin/config.scripts/cln.install-service.sh $CHAIN discussed in: https://github.com/rootzoll/raspiblitz/issues/2295 * use symlink to cln-plugins-enabled for all plugins * keep lnd autopilot and autounlock mainnet only mainnet only settings: lnd autopilot lnd keysend circuibreaker lnd autounlock StaticChannelBackup to DropBox and USB * cln FUNDING fix parsing address * cln.hsmtool: add change-password and lock options * always set password A * cached peer info * fix printing cache * fix check for existing files * handle bitcoind not running * result with newline * test line break * test new line * test new line * two vars on output * #2388 improve online check (less pinging) * used cached peer status * move chache * cach file permissions * allow sudo call * fix cache * remove double scan info * add conf info to sync screen * reorder info * add space * add space * order info * internet suppress error messages * order info * fix offering Blockchain copy * fix hostname * final ready state info * lnd unlock after provision * remove debug exit * harmonize ready state * add status to lnd unlock * update lnd unlock script * edit the unlock * remove debug echo * add debug * add debug * fix if statement * debug output * switch position of source setupdata * #1126 preparing new setup with new c-lightning (#2396) * move debug script * patch patch command * make sure setup file is sourced * remove debug output * make sure lnd is put behind tor * change indent * get fresh sync progress * always set password A * cached peer info * fix printing cache * fix check for existing files * handle bitcoind not running * result with newline * test line break * test new line * test new line * two vars on output * #2388 improve online check (less pinging) * used cached peer status * move chache * cach file permissions * allow sudo call * fix cache * remove double scan info * add conf info to sync screen * reorder info * add space * add space * order info * internet suppress error messages * order info * fix offering Blockchain copy * fix hostname * final ready state info * lnd unlock after provision * remove debug exit * harmonize ready state * add status to lnd unlock * update lnd unlock script * edit the unlock * remove debug echo * add debug * add debug * fix if statement * debug output * switch position of source setupdata * lnd.unlock: fix typo * netwok.monitor.sh debug * cln-plugin.summary: fix paths * rtl: fix permission of config on copy * CASHOUT: use aliases for lnd * rtl: install correctly for paralell chains * use CHAIN in CLN and LND menu * cln: add CASHOUT option * CLOSEALL and CASHOUT: Improve labels and comments Explaining CASHOUT in the label as discussed in: https://github.com/rootzoll/raspiblitz/issues/2358 * cln.install: fix tor config * cln: installthe latest master until the next release * _commands: source _aliases only if exists * network aliases: fall back to 'main' for 'chain' * new setup: keep testnet3 blocks and chainstate * new setup: improve capitalization in menu * improve help and comments * cln: install Sparko if configured, but not present * cln: add new wallet and import seed options * fix peernum * make sure that aliases get created on lnd setup * no error if aliases not yet exist * debug state * fix network alias when not set * fix syntax error * add debug error info * mute unlocking echos * add debug wait * add debug wait * make sure info is uptodate * make alias info as defaults * rename option * update sync info for no lightning * add action string * update sync info * move name dialog * wait for sync progress info * wait for syncprogress info * fix syntax * get fresh data * make sure to disable lnd * add c-lightning to debug * add setup logs to debug output * fix syntax error * add new-force wallet * try fix call hsmtool * hsm output tool * fix output * add seed-force * refactor blitz.mnemonic.py * test seed * debug info * dump object * try check * correct putput * fix syntax * check lnd for valid seed * fix gui * add Suez install script discussed in: https://github.com/rootzoll/raspiblitz/issues/2366 * cln rescue file export * get correct version * add cln export gui * cln.backup.sh cln-import * correct bytesize * generate cln wallet with passwordc * fix syntax * fix syntax * mute not needed error msg * PEERING: correct message on success * cln.install-service: fix sparko check * add Suez to menu for CLN and LND needs to be installed with the bitcoin user to be able to interact with CLN related: https://github.com/rootzoll/raspiblitz/issues/2366 * debug _provison.setup.sh stop bitcoind and restart with new config to avoid rpc password error disable and enable service instead of daemon-reload CLN: don't use passwordC as seedPassword * add cln.setname.sh make lnd.setname.sh work with parallel wallets * improve comments * SYSTEM: add CLNLOG and CLNCONF options * SYSTEM menu fixes * cln: add more aliases cln, clnlog, clnconf * cln: activate the backup plugin on every install * SERVICES menu: fix chantools/CLN switch * cln: load plugins from ${netprefix}cln-plugins-enabled changed the config paths to $lightning-dir/config or /networkname/config plugins are downloaded to the SDcard: /home/bitcoin/cln-plugins-available/ symlinked and loaded automatically from: /home/bitcoin/${netprefix}cln-plugins-enabled Related: #2295 * sparko: don't show logs after install * #2425 Adding experimental Blitz WebUI & API (#2426) * no password C & D when cln * add debug echos * set defaults before * #2228 wider grep to detect nvms (#2427) * cln.hsmtool: init backup with the new wallet * cln.install: fix access to raspiblitz.conf * cln-plugin.backup: fix path to backup-cli * cln: hide unhelpful warnings during setup * remove old jinja template rendering * fix lnd unlock detection * cln: look for files in .lightning dir with sudo * cln: correct lightning name in FInalDialog + typo * cln: make sure .lightning/bitcoin dir exists * FinalDialog: make the 24 words fit * cln.install.sh: create cln config if not present * Simplify localIP detection and improve compatibility (#2432) * show tail info on provision * only show lnd options when activated * fix syntax * only show main lightning impl options for RC1 * cln: always start the lightnind.service * cln: clear before showing summary * start cln on the end of provisioning * exit 0 on cln menu * press key after single actions * remove key press on cln actions * change to none * detect cln running * fix syntax * fix lightniing info * add TODO for CLN * add clnblockheight * zty with user bitcoin * check synced to chain for cln * fix increment * try scanprogress * use cln sync detection and progress * replace LNTYPE * next line * fix spaces * fix spaces * Update README.md (#2456) Fix 404 * Fix FAQ links (#2441) * Fix invalid URL ( (#2440) * support channels (#2382) * use #2370 height optimization * adjust exit codes in menu scripts * adjust password menu exit codes * adapt shutdown for cln * settings adapt to running lightning impl * fix syntax * debug info * add debug * better height * add default values * add config entry if not there yet * change default value * Added exit info for cln * make sure to load config file if available * add sparko to menu * add default for sparko * replace default sparko entry * show sparko installed or not * add more description to sparko option * RTL for clightnign in service menu * main menu item rtl * add RTL description * debug in RTL install * install sparko on recovery * update menu with cln * rework menu options Co-authored-by: openoms Co-authored-by: openoms <43343391+openoms@users.noreply.github.com> Co-authored-by: rek79 Co-authored-by: Bitpaint <67663265+bitpaint@users.noreply.github.com> Co-authored-by: João Thallis Co-authored-by: Peter Flock <78184669+peterflock@users.noreply.github.com> Co-authored-by: nyxnor --- FAQ.md | 24 +- README.md | 43 +- SECURITY.md | 1 + .../amd64/packer/scripts/init_vagrant.sh | 4 +- alternative.platforms/dietpi/README.md | 2 +- build_sdcard.sh | 2 +- home.admin/00infoBlitz.sh | 342 ++++--- home.admin/00infoLCD.sh | 234 +---- home.admin/00mainMenu.sh | 161 +-- home.admin/00parallelChainsMenu.sh | 197 ++++ home.admin/00parallelMainnetServices.sh | 179 ++++ home.admin/00parallelTestnetServices.sh | 181 ++++ home.admin/00raspiblitz.sh | 632 ++++-------- home.admin/00settingsMenuBasics.sh | 285 +++--- home.admin/00settingsMenuServices.sh | 70 +- home.admin/10setupBlitz.sh | 267 ----- home.admin/20recoverDialog.sh | 127 --- home.admin/20setupDialog.sh | 90 -- home.admin/30initHDD.sh | 136 --- home.admin/40addHDD.sh | 165 --- home.admin/50copyHDD.sh | 256 ----- home.admin/50syncHDD.sh | 98 -- home.admin/60finishHDD.sh | 89 -- home.admin/70initLND.sh | 489 --------- home.admin/80scanLND.sh | 274 ----- home.admin/90finishSetup.sh | 65 -- home.admin/91addBonus.sh | 12 - home.admin/95finalSetup.sh | 50 - home.admin/97addMobileWallet.sh | 18 +- home.admin/98repairBlockchain.sh | 4 +- home.admin/98repairMenu.sh | 137 +-- home.admin/99clnMenu.sh | 117 +++ home.admin/99connectMenu.sh | 13 +- home.admin/99lightningMenu.sh | 116 --- home.admin/99lndMenu.sh | 147 +++ home.admin/99systemMenu.sh | 72 +- home.admin/99updateMenu.sh | 153 +-- home.admin/AAunlockLND.sh | 35 - home.admin/BBcashoutWallet.sh | 58 +- home.admin/BBcloseAllChannels.sh | 98 +- home.admin/BBconnectPeer.sh | 57 +- home.admin/BBcreateInvoice.sh | 101 +- home.admin/BBfundWallet.sh | 64 +- home.admin/BBopenChannel.sh | 157 ++- home.admin/BBpayInvoice.sh | 83 +- home.admin/BlitzTUI/blitztui/main.py | 4 +- home.admin/XXchainInSync.sh | 37 - home.admin/_background.sh | 71 +- home.admin/_bootstrap.migration.sh | 252 ----- home.admin/_bootstrap.sh | 952 +++++++++++------- home.admin/_commands.sh | 42 +- home.admin/_provision.migration.sh | 55 + home.admin/_provision.setup.sh | 421 ++++++++ home.admin/_provision.update.sh | 277 +++++ ..._bootstrap.provision.sh => _provision_.sh} | 216 ++-- home.admin/assets/background.service | 7 +- home.admin/assets/bitcoin.conf | 14 +- home.admin/assets/bitcoind.service | 18 +- home.admin/assets/blitzweb.conf | 44 - home.admin/assets/bootstrap.service | 6 + home.admin/assets/litecoin.conf | 8 + home.admin/assets/litecoind.service | 16 +- home.admin/assets/lnd.service | 7 +- .../assets/nginx/sites-available/public.conf | 18 +- .../assets/nginx/www_blitzweb/favicon.ico | Bin 2106 -> 0 bytes .../RaspiBlitz_Logo_Icon_Negative_Cut.png | Bin 5931 -> 0 bytes .../assets/nginx/www_blitzweb/info/index.html | 1 - .../assets/nginx/www_blitzweb/info/info.j2 | 48 - .../assets/nginx/www_blitzweb/info/status.css | 48 - home.admin/assets/nginx/www_public/index.html | 16 +- .../ui}/index.html | 2 +- .../raspiblitz-v1.6-2020-08-04.img.gz.torrent | Bin 23324 -> 0 bytes ...aspiblitz-v1.6.1-2020-10-20.img.gz.torrent | Bin 23186 -> 0 bytes ...aspiblitz-v1.7.0-2021-04-25.img.gz.torrent | Bin 0 -> 35966 bytes home.admin/config.scripts/bitcoin.chains.sh | 243 +++++ home.admin/config.scripts/blitz.bootdrive.sh | 95 ++ .../config.scripts/blitz.copyblockchain.sh | 57 -- home.admin/config.scripts/blitz.copychain.sh | 397 ++++++++ home.admin/config.scripts/blitz.datadrive.sh | 174 +++- .../blitz.debug.sh} | 56 +- .../blitz.github.sh} | 15 +- home.admin/config.scripts/blitz.hardware.sh | 35 + home.admin/config.scripts/blitz.migration.sh | 307 +----- home.admin/config.scripts/blitz.mnemonic.py | 63 ++ home.admin/config.scripts/blitz.notify.sh | 8 +- .../blitz.preparerelease.sh} | 0 .../blitz.sendnotification.py} | 0 .../config.scripts/blitz.setpassword.sh | 47 +- .../blitz.shutdown.sh} | 5 +- home.admin/config.scripts/blitz.statusscan.sh | 47 +- home.admin/config.scripts/blitz.upload.sh | 143 +++ home.admin/config.scripts/blitz.ups.sh | 4 +- home.admin/config.scripts/blitz.web.api.sh | 190 ++++ home.admin/config.scripts/blitz.web.sh | 167 +-- home.admin/config.scripts/blitz.web.ui.sh | 96 ++ .../config.scripts/bonus.btc-rpc-explorer.sh | 8 +- .../config.scripts/bonus.btcpayserver.sh | 9 +- .../config.scripts/bonus.circuitbreaker.sh | 7 +- .../bonus.cryptoadvance-specter.sh | 10 +- home.admin/config.scripts/bonus.electrs.sh | 9 +- home.admin/config.scripts/bonus.faraday.sh | 6 + .../config.scripts/bonus.kindle-display.sh | 6 + home.admin/config.scripts/bonus.lit.sh | 11 +- home.admin/config.scripts/bonus.lnbits.sh | 8 +- home.admin/config.scripts/bonus.lndconnect.sh | 2 +- home.admin/config.scripts/bonus.loop.sh | 7 +- home.admin/config.scripts/bonus.mempool.sh | 8 +- home.admin/config.scripts/bonus.nodejs.sh | 59 +- home.admin/config.scripts/bonus.pool.sh | 7 +- home.admin/config.scripts/bonus.rtl.sh | 408 +++++--- .../config.scripts/bonus.sphinxrelay.sh | 8 +- home.admin/config.scripts/bonus.suez.sh | 95 ++ home.admin/config.scripts/bonus.thunderhub.sh | 8 +- .../config.scripts/cln-plugin.backup.sh | 132 +++ .../config.scripts/cln-plugin.sparko.sh | 189 ++++ .../cln-plugin.standard-python.sh | 54 + .../config.scripts/cln-plugin.summary.sh | 45 + home.admin/config.scripts/cln.backup.sh | 396 ++++++++ home.admin/config.scripts/cln.hsmtool.sh | 303 ++++++ .../config.scripts/cln.install-service.sh | 64 ++ home.admin/config.scripts/cln.install.sh | 222 ++++ home.admin/config.scripts/cln.rest.sh | 116 +++ home.admin/config.scripts/cln.setname.sh | 66 ++ .../config.scripts/internet.selfsignedcert.sh | 51 +- home.admin/config.scripts/internet.sh | 43 +- .../config.scripts/internet.sshtunnel.py | 6 + home.admin/config.scripts/internet.tor.sh | 35 +- home.admin/config.scripts/internet.wifi.sh | 53 +- home.admin/config.scripts/lnd.autounlock.sh | 2 +- home.admin/config.scripts/lnd.backup.sh | 589 +++++++++++ home.admin/config.scripts/lnd.chain.sh | 207 ++++ home.admin/config.scripts/lnd.check.sh | 38 +- home.admin/config.scripts/lnd.export.sh | 20 +- home.admin/config.scripts/lnd.fwdreport.sh | 2 +- home.admin/config.scripts/lnd.rescue.sh | 280 ------ home.admin/config.scripts/lnd.setname.sh | 27 +- home.admin/config.scripts/lnd.unlock.sh | 42 +- home.admin/config.scripts/network.aliases.sh | 110 ++ home.admin/config.scripts/network.chain.sh | 2 + home.admin/config.scripts/network.monitor.sh | 55 +- home.admin/config.scripts/network.reindex.sh | 2 +- .../setup.scripts/controlFinalDialog.sh | 131 +++ .../setup.scripts/controlSetupDialog.sh | 314 ++++++ home.admin/setup.scripts/dialogBasicSetup.sh | 41 + .../dialogBlockchainLightning.sh | 90 ++ home.admin/setup.scripts/dialogDeleteData.sh | 57 ++ .../dialogLightningWallet-cln.sh | 143 +++ .../dialogLightningWallet-lnd.sh | 183 ++++ home.admin/setup.scripts/dialogMigration.sh | 161 +++ home.admin/setup.scripts/dialogName.sh | 32 + home.admin/setup.scripts/dialogPasswords.sh | 105 ++ home.admin/setup.scripts/dialogRecovery.sh | 24 + home.admin/setup.scripts/dialogUpdate.sh | 25 + .../setup.scripts/eventBlockchainSync.sh | 93 ++ home.admin/setup.scripts/eventInfoWait.sh | 295 ++++++ 155 files changed, 10348 insertions(+), 5807 deletions(-) create mode 100644 home.admin/00parallelChainsMenu.sh create mode 100644 home.admin/00parallelMainnetServices.sh create mode 100644 home.admin/00parallelTestnetServices.sh delete mode 100755 home.admin/10setupBlitz.sh delete mode 100755 home.admin/20recoverDialog.sh delete mode 100755 home.admin/20setupDialog.sh delete mode 100755 home.admin/30initHDD.sh delete mode 100755 home.admin/40addHDD.sh delete mode 100755 home.admin/50copyHDD.sh delete mode 100755 home.admin/50syncHDD.sh delete mode 100755 home.admin/60finishHDD.sh delete mode 100755 home.admin/70initLND.sh delete mode 100755 home.admin/80scanLND.sh delete mode 100755 home.admin/90finishSetup.sh delete mode 100755 home.admin/91addBonus.sh delete mode 100755 home.admin/95finalSetup.sh create mode 100644 home.admin/99clnMenu.sh delete mode 100644 home.admin/99lightningMenu.sh create mode 100644 home.admin/99lndMenu.sh delete mode 100755 home.admin/AAunlockLND.sh delete mode 100755 home.admin/XXchainInSync.sh delete mode 100755 home.admin/_bootstrap.migration.sh create mode 100755 home.admin/_provision.migration.sh create mode 100755 home.admin/_provision.setup.sh create mode 100755 home.admin/_provision.update.sh rename home.admin/{_bootstrap.provision.sh => _provision_.sh} (84%) delete mode 100644 home.admin/assets/blitzweb.conf delete mode 100644 home.admin/assets/nginx/www_blitzweb/favicon.ico delete mode 100644 home.admin/assets/nginx/www_blitzweb/info/RaspiBlitz_Logo_Icon_Negative_Cut.png delete mode 120000 home.admin/assets/nginx/www_blitzweb/info/index.html delete mode 100644 home.admin/assets/nginx/www_blitzweb/info/info.j2 delete mode 100644 home.admin/assets/nginx/www_blitzweb/info/status.css rename home.admin/assets/nginx/{www_blitzweb => www_public/ui}/index.html (88%) delete mode 100755 home.admin/assets/raspiblitz-v1.6-2020-08-04.img.gz.torrent delete mode 100644 home.admin/assets/raspiblitz-v1.6.1-2020-10-20.img.gz.torrent create mode 100755 home.admin/assets/raspiblitz-v1.7.0-2021-04-25.img.gz.torrent create mode 100644 home.admin/config.scripts/bitcoin.chains.sh create mode 100644 home.admin/config.scripts/blitz.bootdrive.sh delete mode 100755 home.admin/config.scripts/blitz.copyblockchain.sh create mode 100644 home.admin/config.scripts/blitz.copychain.sh rename home.admin/{XXdebugLogs.sh => config.scripts/blitz.debug.sh} (77%) rename home.admin/{XXsyncScripts.sh => config.scripts/blitz.github.sh} (95%) create mode 100644 home.admin/config.scripts/blitz.hardware.sh create mode 100755 home.admin/config.scripts/blitz.mnemonic.py rename home.admin/{XXprepareRelease.sh => config.scripts/blitz.preparerelease.sh} (100%) rename home.admin/{XXsendNotification.py => config.scripts/blitz.sendnotification.py} (100%) rename home.admin/{XXshutdown.sh => config.scripts/blitz.shutdown.sh} (91%) create mode 100644 home.admin/config.scripts/blitz.upload.sh create mode 100755 home.admin/config.scripts/blitz.web.api.sh create mode 100755 home.admin/config.scripts/blitz.web.ui.sh create mode 100644 home.admin/config.scripts/bonus.suez.sh create mode 100644 home.admin/config.scripts/cln-plugin.backup.sh create mode 100644 home.admin/config.scripts/cln-plugin.sparko.sh create mode 100644 home.admin/config.scripts/cln-plugin.standard-python.sh create mode 100644 home.admin/config.scripts/cln-plugin.summary.sh create mode 100755 home.admin/config.scripts/cln.backup.sh create mode 100644 home.admin/config.scripts/cln.hsmtool.sh create mode 100644 home.admin/config.scripts/cln.install-service.sh create mode 100644 home.admin/config.scripts/cln.install.sh create mode 100644 home.admin/config.scripts/cln.rest.sh create mode 100644 home.admin/config.scripts/cln.setname.sh create mode 100755 home.admin/config.scripts/lnd.backup.sh create mode 100644 home.admin/config.scripts/lnd.chain.sh delete mode 100755 home.admin/config.scripts/lnd.rescue.sh create mode 100644 home.admin/config.scripts/network.aliases.sh create mode 100755 home.admin/setup.scripts/controlFinalDialog.sh create mode 100755 home.admin/setup.scripts/controlSetupDialog.sh create mode 100644 home.admin/setup.scripts/dialogBasicSetup.sh create mode 100644 home.admin/setup.scripts/dialogBlockchainLightning.sh create mode 100644 home.admin/setup.scripts/dialogDeleteData.sh create mode 100644 home.admin/setup.scripts/dialogLightningWallet-cln.sh create mode 100644 home.admin/setup.scripts/dialogLightningWallet-lnd.sh create mode 100755 home.admin/setup.scripts/dialogMigration.sh create mode 100644 home.admin/setup.scripts/dialogName.sh create mode 100644 home.admin/setup.scripts/dialogPasswords.sh create mode 100644 home.admin/setup.scripts/dialogRecovery.sh create mode 100644 home.admin/setup.scripts/dialogUpdate.sh create mode 100644 home.admin/setup.scripts/eventBlockchainSync.sh create mode 100644 home.admin/setup.scripts/eventInfoWait.sh diff --git a/FAQ.md b/FAQ.md index 9c26087c0..3e19a63d8 100644 --- a/FAQ.md +++ b/FAQ.md @@ -190,7 +190,7 @@ If your RaspiBlitz is not working correctly and you like to get help from the co - SSH into your raspiblitz as admin user with your password A - If you see the menu - use CTRL+C to get to the terminal -- To generate debug report run: `./XXdebugLogs.sh` +- To generate debug report run: `debug` - Then copy all output beginning with `*** RASPIBLITZ LOGS ***` and share this *PLEASE NOTICE: It's possible that these logs can contain private information (like IPs, node IDs, ...) - just share publicly what you feel OK with.* @@ -237,7 +237,7 @@ If you still can SSH in and HDD is readable, we can try to rescue/export your LN To rescue/export your Lightning data from a RaspiBlitz (since v1.1): * SSH into your RaspiBlitz and EXIT to terminal from the menu. -* then run: `/home/admin/config.scripts/lnd.rescue.sh backup` +* then run: `/home/admin/config.scripts/lnd.backup.sh lnd-export-gui` * follow the instructions of the script. This will create a lnd-rescue file (ends on gz.tar) that contains all the data from the LND. The script offers you a command to transfer the lnd-rescue file to your laptop. If the transfer was successful you can now setup a fresh RaspiBlitz. Do all the setup until you have a clean new Lightning node running - just without any funding or channels. @@ -245,7 +245,7 @@ This will create a lnd-rescue file (ends on gz.tar) that contains all the data f Then to restore your old LND data and to recover your funds and channels: * SSH into your new RaspiBlitz and EXIT to terminal from the menu. -* then run: `/home/admin/config.scripts/lnd.rescue.sh restore` +* then run: `/home/admin/config.scripts/lnd.backup.sh lnd-import-gui` * follow the instructions of the script. This script will offer you a way to transfer the lnd-rescue file from your laptop to the new RaspiBlitz and will restore the old data. LND then gets restarted for you, and after some time it should show you the status screen again with your old funds and channels. @@ -416,13 +416,13 @@ For example if you want to make a build from the 'dev' branch you execute the fo If you fork the RaspiBlitz repo (much welcome) and you want to run that code on your RaspiBlitz, there are two ways to do that: -* The quick way: For small changes in scripts, go to `/home/admin` on your running RaspiBlitz, delete the old git with `sudo rm -r raspiblitz` then replace it with your code `git clone [YOURREPO]` and `/home/admin/XXsyncScripts.sh` +* The quick way: For small changes in scripts, go to `/home/admin` on your running RaspiBlitz, delete the old git with `sudo rm -r raspiblitz` then replace it with your code `git clone [YOURREPO]` and `patch` * The long way: If you like to install/remove/change services and system configurations you need to build a SD card from your own code. Prepare like in [Build the SD Card Image](README.md#build-the-sd-card-image) from the README but in the end run the command: `wget --no-cache https://raw.githubusercontent.com/[GITHUB-USERNAME]/raspiblitz/[BRANCH]/build_sdcard.sh && sudo bash build_sdcard.sh false false [GITHUB-USERNAME] [BRANCH] lcd true true` -If you are then working in your forked repo and want to update the scripts on your RaspiBlitz with your latest repo changes, run `/home/admin/XXsyncScripts.sh` - That's OK as long as you don't make changes to the SD card build script - for that you would need to build a fresh SD card again from your repo. +If you are then working in your forked repo and want to update the scripts on your RaspiBlitz with your latest repo changes, run `patch` - That's OK as long as you don't make changes to the SD card build script - for that you would need to build a fresh SD card again from your repo. ## How can I checkout a new branch from the RaspiBlitz repo to my forked repo? @@ -453,7 +453,7 @@ git remote set-url origin [THE-URL-OF-YOUR-FORKED-REPO] Now to sync your branch namend BRANCH on your forked repo with your RaspiBlitz, you always just run: ``` -/home/admin/XXsyncScripts.sh BRANCH +/home/admin/config.scripts/blitz.github.sh BRANCH ``` So your workflow can go like this: You write code on your local computer. Commit to your local repo, push it to your forked repo and use the sync-script above to get the code to your RaspiBlitz. @@ -474,14 +474,14 @@ cd /home/admin/raspiblitz git fetch origin pull/[PRNUMBER]/head:pr[PRNUMBER] git checkout pr[PRNUMBER] cd /home/admin -./XXsyncScripts.sh -justinstall +/home/admin/config.scripts/blitz.github.sh -justinstall ``` Now you have the code of the PR active - depending on what scripts are changed you might need to reboot. To change back to the code: ``` -./XXsyncScripts.sh master +/home/admin/config.scripts/blitz.github.sh master ``` ## How to attach the RaspberryPi to the HDD? @@ -541,7 +541,7 @@ Work notes for the process of producing a new SD card image release: * Run the following command BUT REPLACE `[BRANCH]` with the branch-string of your latest version * `wget --no-cache https://raw.githubusercontent.com/rootzoll/raspiblitz/[BRANCH]/build_sdcard.sh && sudo bash build_sdcard.sh false true rootzoll [BRANCH] lcd true true` * Monitor/Check outputs for warnings/errors - install LCD -* Login new with `ssh admin@[IP-OF-RASPIBLITZ]` (pw: raspiblitz) and run `./XXprepareRelease.sh` +* Login new with `ssh admin@[IP-OF-RASPIBLITZ]` (pw: raspiblitz) and run `release` * Disconnect WiFi/LAN on build laptop (hardware switch off) and shutdown * Remove `Ubuntu LIVE` USB stick and cut power from the RaspberryPi * Connect USB stick with latest `TAILS` (make it stay offline) @@ -839,13 +839,13 @@ https://seravo.fi/2015/using-raid-btrfs-recovering-broken-disks ## How do I fix a displayed Error in my Config? When the LCD display is telling you to do a config check: -- go to the RaspiBlitz terminal (X on main menu) and run './XXsyncScripts.sh' -- start reboot with command: './XXshutdown.sh reboot' +- go to the RaspiBlitz terminal (X on main menu) and run 'patch' +- start reboot with command: 'restart' - go to the RaspiBlitz terminal run the command: 'check' - now edit the RaspiBlitz config and get rid of the errors: 'nano /mnt/hdd/raspiblitz.conf' - save config with: CTRL+o - exit nano editor with: CTRL+x -- start reboot with command: './XXshutdown.sh reboot' +- start reboot with command: 'restart' ## How to fix my upside down LCD after update? diff --git a/README.md b/README.md index 1ddebfd17..232e1242e 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ *Build your own Lightning Node on a RaspberryPi with a nice Display.* -`Version 1.7.0 with lnd 0.12.1 and bitcoin 0.21.0 (or litecoin 0.18.1)` +`Version 1.7.0 with lnd 0.12.1 (or c-lightning 0.10.0) and bitcoin 0.21.0 (or litecoin 0.18.1)` ![RaspiBlitz](pictures/raspiblitz.jpg) @@ -103,6 +103,7 @@ In the end your RaspiBlitz should look like this: ## Downloading the Software + |Method|Install the image|Build the sd card| |------|-----------------|-----------------| |Philosophy|Trust|Sovereignty| @@ -142,9 +143,9 @@ Insert the SD card and connect the power plug. **Troubleshoot:** -* [I don't have a LAN port on my Laptop - how to connect to my RaspiBlitz?](FAQ.md#i-dont-have-a-lan-port-on-my-laptop---how-to-connect-to-my-raspiblitz) +* [I don't have a LAN port on my Laptop - how to connect to my RaspiBlitz?](FAQ.md#i-dont-have-a-lan-port-on-my-laptop---how-do-i-connect-to-my-raspiblitz) * [Is it possible to connect the Blitz over Wifi instead of using a LAN cable?](FAQ.md#is-it-possible-to-connect-the-blitz-over-wifi-instead-of-using-a-lan-cable) -* [Can I directly connect the RaspiBlitz with my laptop?](FAQ.md#can-i-directly-connect-the-raspiblitz-with-my-laptop) +* [Can I directly connect the RaspiBlitz with my laptop?](FAQ.md#can-i-directly-connect-the-raspiblitz-to-my-laptop) * [I connected my HDD, but it still says 'Connect HDD' on the display?](FAQ.md#i-connected-my-hdd-but-it-still-says-connect-hdd-on-the-display) When everything boots up correctly, you should see the local IP address of your RaspiBlitz on the LCD panel. @@ -165,17 +166,39 @@ Now open up a terminal ([OSX](https://www.youtube.com/watch?v=5XgBd6rjuDQ)/[Win1 If you run into a problem or you have still a question, follow the steps below to get support. Also check the [setup documentation](#setup-process-detailed-documentation) for details. +### Documentation + 1. Look up the [FAQ](FAQ.md) if you can't find an answer to this question/problem. 2. If you have a hardware problem, please check that your hardware parts are exactly the parts recommended in the shopping list above. Different screens or even SSD-casings can cause problems. -3. There is a Telegram Group of RaspiBlitz users helping each other: https://t.me/raspiblitz +3. Please determine if your problem/question is about RaspiBlitz or for example with LND. For example if you can't route a payment or get an error when opening a channel that is an LND question/problem and is best answered by the LND dev community: https://dev.lightning.community -4. Please determine if your problem/question is about RaspiBlitz or for example with LND. For example if you can't route a payment or get an error when opening a channel that is an LND question/problem and is best answered by the LND dev community: https://dev.lightning.community +4. Go to the GitHub issues of the RaspiBlitz: https://github.com/rootzoll/raspiblitz/issues Do a search there. Also check closed issues by removing 'is:open' from the filter/search-box. -5. Go to the GitHub issues of the RaspiBlitz: https://github.com/rootzoll/raspiblitz/issues Do a search there. Also check closed issues by removing 'is:open' from the filter/search-box. +5. If you haven't found an answer yet, open a new issue on the RaspiBlitz GitHub. You may have to register an account with GitHub for this. If it's a bug with the RaspiBlitz, please add (copy+paste) a Debug Report to your issue (see [FAQ](FAQ.md) for how to generate them) and/or add some screenshots/photos so the community gets more insight into your problem. -6. If you haven't found an answer yet, open a new issue on the RaspiBlitz GitHub. You may have to register an account with GitHub for this. If it's a bug with the RaspiBlitz, please add (copy+paste) a Debug Report to your issue (see [FAQ](FAQ.md) for how to generate them) and/or add some screenshots/photos so the community gets more insight into your problem. +### Groups + +There are plenty off rooms you can find Raspiblitz users that can help you: + +1. [Telegram English](https://t.me/raspiblitz) + +2. [Telegram Deutsch](https://t.me/raspiblitz_DE) + +3. [Telegram Spanish](https://t.me/raspiblitz_ES) + +4. [Telegram Italian](https://t.me/raspiblitz_IT) + +5. [Telegram Russian](https://t.me/raspiblitz_RU) + +6. [Keybase](https://keybase.io/team/raspiblitz) + +7. [Matrix - Element client](https://element.io/) Channel: #raspiblitz:libera.chat + +8. IRC - Libera chat -> irc.libera.chat:6697 -> Channel: #raspiblitz + +9. Sphinx Chat -> sphinx.chat://?action=tribe&uuid=YFsuxCApuU-TBIRWeWY_Gl52IOx2clJKZYLxDn78Z9RgcWNx9zUube7mkK4IyXQjLril-tgKZs3wOxDlWqpiyxp8jTbt&host=tribes.sphinx.chat -> [Connection code](YFsuxCApuU-TBIRWeWY_Gl52IOx2clJKZYLxDn78Z9RgcWNx9zUube7mkK4IyXQjLril-tgKZs3wOxDlWqpiyxp8jTbt) --> [QR code](https://github.com/rootzoll/raspiblitz/issues/2089#issuecomment-805789854) ## Setup Process (Detailed Documentation) @@ -391,7 +414,7 @@ Under `LIGHTNING` you find some basic steps to manage your Lightning node. Those Before you can open channels with other nodes you need to put some coins in your LND on-chain wallet. Use this option to generate an address to send funds to. -*Reminder: RaspiBlitz & LND is still experimental software. With funding your LND node you accept the risk of losing funds. So just play with small amounts - something in the area of 20 EUR/USD should be enough to make your first experiences. Also, it's a good privacy practice to [coinjoin your coins](https://bitcoin-only.com/#privacy) before sending them to any Lightning Network wallet.* +*Reminder: RaspiBlitz & LND is still experimental software. With funding your LND node you accept the risk of losing funds. So just play with small amounts - something in the area of 20 EUR/USD should be enough to make your first experiences. Also, it's a good privacy practice to [coinjoin your coins](https://bitcoin-only.com/privacy) before sending them to any Lightning Network wallet.* You can fund it multiple times - starting with small amounts first to test. LND will always generate a different address, but all funds you send will get into the same LND on-chain wallet. @@ -622,7 +645,7 @@ After install, you will see a new `LIT` option in the SSH main menu - it will gi ![BTCPAY](pictures/btcpay.png) -Find all details on how to use the BTCPay Server on your RaspiBlitz in this great tutorial: https://coincharge.io/en/raspiblitz-btcpay-server/ +Find all details on how to use the BTCPay Server on your RaspiBlitz in this great tutorial: https://coincharge.io/en/btcpay-server-on-the-raspiblitz/ After install, you will see a new `BTCPAY` option in the SSH main menu - it will give you all the information you need to start using it. @@ -1111,7 +1134,7 @@ Now you are ready to start the SD card build script (check the code to see if th As you can see from the URL, you can find the build script in this Git repo under `build_sdcard.sh`. You can check what gets installed and configured in detail. Feel free to post improvements as pull requests. -The whole build process takes a while. At the end the LCD drivers get installed and a reboot is needed. A user `admin` is created during the process. Remember the default password is now `raspiblitz`. You can login per SSH again - this time use admin: `ssh admin@[IP-OF-YOUR-RASPI]`. The install dialog of the RaspiBlitz should automatically start. If you do not want to continue with the installation at this moment and use this sd card as a template for setting up multiple RaspiBlitzes, click `Cancel` and run `/home/admin/XXprepareRelease.sh`. Once you see the LCD going white and the activity LED of the pi starts going dark, you can unplug power and remove the SD card. You have now built your own RaspiBlitz SD card image. +The whole build process takes a while. At the end the LCD drivers get installed and a reboot is needed. A user `admin` is created during the process. Remember the default password is now `raspiblitz`. You can login per SSH again - this time use admin: `ssh admin@[IP-OF-YOUR-RASPI]`. The install dialog of the RaspiBlitz schould automatically start. If you do not want to continue with the installation at this moment and use this sd card as a template for setting up multiple RaspiBlitzes, click `Cancel` and run `release`. Once you see the LCD going white and the activity LED of the pi starts going dark, you can unplug power and remove the SD card. You have now built your own RaspiBlitz SD card image. *Note: If you plan to use your self-build sd card as a MASTER copy and distribute it: Use a smaller 8GB card for that. This way it's ensured that it will fit on every 16 GB card recommended for RaspiBlitz later on.* diff --git a/SECURITY.md b/SECURITY.md index b50c4860b..a4977d9b0 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -49,6 +49,7 @@ Ensure that you put quotes around fingerprints containing spaces if importing wi # Physical Security * The lightning wallet and user interfaces are password protected by default so this has more privacy implications (in the case of physical theft) than security. +* Basic hardening measures are applied to all systemd services * Optional log in through SSH using a hardware wallet. * LUKS encryption would be welcome in the future. diff --git a/alternative.platforms/amd64/packer/scripts/init_vagrant.sh b/alternative.platforms/amd64/packer/scripts/init_vagrant.sh index 2ead12ece..ed01e8e74 100644 --- a/alternative.platforms/amd64/packer/scripts/init_vagrant.sh +++ b/alternative.platforms/amd64/packer/scripts/init_vagrant.sh @@ -5,10 +5,10 @@ echo "************* Vagrant Provisioning ********************" echo 'Syncing local code with RaspiBlitzVM' # make sure the lastest sync script is in place -cp /vagrant/home.admin/XXsyncScripts.sh /home/admin/XXsyncScripts.sh +cp /vagrant/home.admin/config.scripts/blitz.github.sh /home/admin/config.scripts/blitz.github.sh # execute 'patch' command to sync laptop with VM -/home/admin/XXsyncScripts.sh -run +/home/admin/config.scripts/blitz.github.sh -run source <(/home/admin/config.scripts/internet.sh status) diff --git a/alternative.platforms/dietpi/README.md b/alternative.platforms/dietpi/README.md index e250b154e..db32d9e34 100644 --- a/alternative.platforms/dietpi/README.md +++ b/alternative.platforms/dietpi/README.md @@ -87,7 +87,7 @@ During the RaspiBlitz setup process: `sudo tail -n100 /mnt/hdd/bitcoin/debug.log` - shows the last 100 lines `sudo systemctl status lnd` - status of the lnd service `sudo journalctl -f -u lnd` -`./home/admin/XXdebugLogs.sh` - debug log collection on the RaspiBlitz +`debug` - debug log collection on the RaspiBlitz --- diff --git a/build_sdcard.sh b/build_sdcard.sh index 331684377..a515ec466 100755 --- a/build_sdcard.sh +++ b/build_sdcard.sh @@ -1073,7 +1073,7 @@ echo "Take the chance & look thru the output above if you can spot any errors or echo "" echo "IMPORTANT IF WANT TO MAKE A RELEASE IMAGE FROM THIS BUILD:" echo "1. login fresh --> user:admin password:raspiblitz" -echo "2. run --> ./XXprepareRelease.sh" +echo "2. run --> release" echo "" # (do last - because might trigger reboot) diff --git a/home.admin/00infoBlitz.sh b/home.admin/00infoBlitz.sh index b8cc29f4f..e6fdf4421 100755 --- a/home.admin/00infoBlitz.sh +++ b/home.admin/00infoBlitz.sh @@ -1,5 +1,7 @@ #!/bin/bash +# 00infoBlitz.sh + # load code software version source /home/admin/_version.info @@ -14,6 +16,8 @@ color_gray='\033[0;37m' 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}" @@ -45,7 +49,7 @@ if [ ${#network} -eq 0 ]; then if [ ${litecoinActive} -eq 1 ]; then network="litecoin" else - network=`sudo cat /home/admin/.network 2>/dev/null` + network=$(sudo cat /home/admin/.network 2>/dev/null) fi if [ ${#network} -eq 0 ]; then network="bitcoin" @@ -62,7 +66,6 @@ if [ ${#chain} -eq 0 ]; then fi # set datadir -bitcoin_dir="/home/bitcoin/.${network}" lnd_dir="/home/bitcoin/.lnd" lnd_macaroon_dir="/home/bitcoin/.lnd/data/chain/${network}/${chain}net" @@ -74,9 +77,13 @@ cpu=0 if [ -d "/sys/class/thermal/thermal_zone0/" ]; then cpu=$(cat /sys/class/thermal/thermal_zone0/temp) fi -tempC=$((cpu/1000)) -tempF=$(((tempC * 18 + 325) / 10)) - +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 }')") @@ -90,17 +97,17 @@ fi # Bitcoin blockchain btc_path=$(command -v ${network}-cli) blockInfo="-" -if [ -n ${btc_path} ]; then +if [ -n "${btc_path}" ]; then btc_title=$network - blockchaininfo="$(${network}-cli -datadir=${bitcoin_dir} getblockchaininfo 2>/dev/null)" + blockchaininfo="$($bitcoincli_alias getblockchaininfo 2>/dev/null)" if [ ${#blockchaininfo} -gt 0 ]; then btc_title="${btc_title} (${chain}net)" # get sync status - block_chain="$(${network}-cli -datadir=${bitcoin_dir} getblockcount 2>/dev/null)" + last_block="$($bitcoincli_alias getblockcount 2>/dev/null)" block_verified="$(echo "${blockchaininfo}" | jq -r '.blocks')" - block_diff=$(expr ${block_chain} - ${block_verified}) - blockInfo="${block_verified}/${block_chain}" + block_diff=$(expr ${last_block} - ${block_verified}) + blockInfo="${block_verified}/${last_block}" progress="$(echo "${blockchaininfo}" | jq -r '.verificationprogress')" sync_percentage=$(echo $progress | awk '{printf( "%.2f%%", 100 * $1)}') @@ -124,13 +131,12 @@ if [ -n ${btc_path} ]; then fi # get last known block - last_block="$(${network}-cli -datadir=${bitcoin_dir} getblockcount 2>/dev/null)" if [ ! -z "${last_block}" ]; then btc_line2="${btc_line2} ${color_gray}(block ${last_block})" fi # get mem pool transactions - mempool="$(${network}-cli -datadir=${bitcoin_dir} getmempoolinfo 2>/dev/null | jq -r '.size')" + mempool="$($bitcoincli_alias getmempoolinfo 2>/dev/null | jq -r '.size')" else btc_line2="${color_red}NOT RUNNING\t\t" @@ -138,7 +144,7 @@ if [ -n ${btc_path} ]; then fi # get IP address & port -networkInfo=$(${network}-cli -datadir=${bitcoin_dir} getnetworkinfo 2>/dev/null) +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')" @@ -152,9 +158,14 @@ fi # check if RTL web interface is installed webinterfaceInfo="" -runningRTL=$(sudo ls /etc/systemd/system/RTL.service 2>/dev/null | grep -c 'RTL.service') +runningRTL=$(systemctl status ${netprefix}${typeprefix}RTL.service 2>/dev/null | grep -c active) if [ ${runningRTL} -eq 1 ]; then - webinterfaceInfo="Web admin --> ${color_green}http://${local_ip}:3000" + if [ "${lightning}" == "cln" ]; then + RTLHTTP=${portprefix}7000 + elif [ "${lightning}" == "lnd" ];then + RTLHTTP=${portprefix}3000 + fi + webinterfaceInfo="Web admin --> ${color_green}http://${local_ip}:${RTLHTTP}" fi # CHAIN NETWORK @@ -162,9 +173,8 @@ public_addr_pre="Public " public_addr="??" torInfo="" # Version -networkVersion=$(${network}-cli -datadir=${bitcoin_dir} -version 2>/dev/null | cut -d ' ' -f6) +networkVersion=$($bitcoincli_alias -version 2>/dev/null | cut -d ' ' -f6) # TOR or IP -networkInfo=$(${network}-cli -datadir=${bitcoin_dir} getnetworkinfo) networkConnections=$(echo ${networkInfo} | jq -r '.connections') networkConnectionsInfo="${color_green}${networkConnections} ${color_gray}connections" @@ -222,69 +232,183 @@ else fi # LIGHTNING NETWORK - -ln_baseInfo="-" -ln_channelInfo="\n" -ln_external="\n" -ln_alias="${hostname}" -ln_publicColor="" -ln_port=$(sudo cat /mnt/hdd/lnd/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 - alias_color="${color_red}" - ln_alias="Wallet Locked" -else - ln_getInfo=$(sudo -u bitcoin /usr/local/bin/lncli --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 +if [ "${lightning}" == "cln" ]; then + ln_getInfo=$($lightningcli_alias getinfo 2>/dev/null) + ln_baseInfo="-" + ln_channelInfo="\n" + ln_external="\n" + ln_alias="$(sudo cat /home/bitcoin/.lightning/${netprefix}config | grep "^alias=*" | cut -f2 -d=)" + if [ ${#ln_alias} -eq 0 ];then + ln_alias=$(echo "${ln_getInfo}" | grep '"alias":' | cut -d '"' -f4) fi - alias_color="${color_grey}" - 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 + if [ ${#ln_alias} -eq 0 ];then + ln_alias=${hostname} + fi + ln_publicColor="" + ln_port=$(sudo cat /home/bitcoin/.lightning/${netprefix}config | 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_tor=$(echo "${ln_external}" | grep -c ".onion") + if [ ${ln_tor} -eq 1 ]; then + ln_publicColor="${color_green}" else - ln_walletbalance="$(sudo -u bitcoin /usr/local/bin/lncli --macaroonpath=${lnd_macaroon_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert walletbalance | jq -r '.confirmed_balance')" 2>/dev/null - ln_walletbalance_wait="$(sudo -u bitcoin /usr/local/bin/lncli --macaroonpath=${lnd_macaroon_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert 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 - ln_channelbalance="$(sudo -u bitcoin /usr/local/bin/lncli --macaroonpath=${lnd_macaroon_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert channelbalance | jq -r '.balance')" 2>/dev/null - ln_channelbalance_pending="$(sudo -u bitcoin /usr/local/bin/lncli --macaroonpath=${lnd_macaroon_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert 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="$(sudo -u bitcoin /usr/local/bin/lncli --macaroonpath=${lnd_macaroon_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert listchannels | jq '.[] | length')" 2>/dev/null - ln_baseInfo="${color_gray}wallet ${ln_walletbalance} 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} sat${ln_channelbalance_pending}" - ln_peersInfo="${color_green}${ln_peers} ${color_gray}peers" - ln_dailyfees="$(sudo -u bitcoin /usr/local/bin/lncli --macaroonpath=${lnd_macaroon_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert feereport | jq -r '.day_fee_sum')" 2>/dev/null - ln_weeklyfees="$(sudo -u bitcoin /usr/local/bin/lncli --macaroonpath=${lnd_macaroon_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert feereport | jq -r '.week_fee_sum')" 2>/dev/null - ln_monthlyfees="$(sudo -u bitcoin /usr/local/bin/lncli --macaroonpath=${lnd_macaroon_dir}/readonly.macaroon --tlscertpath=${lnd_dir}/tls.cert 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" + 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 fi + BLOCKHEIGHT=$(echo "$blockchaininfo"|grep blocks|awk '{print $2}'|cut -d, -f1) + CLHEIGHT=$(echo "${ln_getInfo}" | jq .blockheight) + if [ $BLOCKHEIGHT -eq $CLHEIGHT ];then + ln_sync=1 + else + ln_sync=0 + 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 + cln_listfunds=$($lightningcli_alias listfunds 2>/dev/null) + for i in $(echo "$cln_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 "$cln_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 "$cln_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 "$cln_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 "$cln_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 + cln_num_pending_channels="$(echo "${ln_getInfo}" | jq -r '.num_pending_channels')" 2>/dev/null + cln_num_inactive_channels="$(echo "${ln_getInfo}" | jq -r '.num_inactive_channels')" 2>/dev/null + ln_channels_total=$((ln_channels_online+cln_num_pending_channels+cln_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 + 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 fi # show JoinMarket stats in place of the LND URI only if the Yield Generator is running - source /home/joinmarket/joinin.conf 2>/dev/null if [ "${joinmarket}" = "on" ] && [ $(sudo -u joinmarket pgrep -f "python yg-privacyenhanced.py $YGwallet --wallet-password-stdin" 2>/dev/null | wc -l) -gt 2 ]; then JMstats=$(mktemp 2>/dev/null) @@ -305,6 +429,17 @@ ${color_yellow} ${color_yellow}${ln_publicColor}${ln_external}${color_gray}" fi +if [ "${lightning}" == "cln" ];then + LNline="C-LIGHTNING ${color_green}${ln_version}\n ${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 ## get uptime and current date & time @@ -320,14 +455,14 @@ ${color_yellow} ${color_amber}%s ${color_green} ${ln_alias} ${upsI ${color_yellow} ${color_gray}${network^} Fullnode + Lightning Network ${torInfo} ${color_yellow} ,/ ${color_yellow}%s ${color_yellow} ,'/ ${color_gray}%s -${color_yellow} ,' / ${color_gray}%s, temp %s°C %s°F +${color_yellow} ,' / ${color_gray}%s, ${templine} ${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} -${color_yellow} ${color_gray}LND ${color_green}${ln_version} ${ln_baseInfo} +${color_yellow} ${color_gray}${LNline} ${color_yellow} ${color_gray}${ln_channelInfo} ${ln_peersInfo} ${color_yellow} ${color_gray}${ln_feeReport} $lastLine @@ -373,57 +508,4 @@ else fi -# if running as user "pi": -# - write results to a JSON file on RAM disk -# - update info.html file -if [ "${EUID}" = "$(id -u pi)" ]; then - - json_ln_baseInfo=$(echo "${ln_baseInfo}" | cut -c 11-) - - cat < /var/cache/raspiblitz/info.json -{ - "uptime": "${uptime}", - "datetime": "${datetime}", - "codeVersion": "${codeVersion}", - "hostname": "${hostname}", - "network": "${network}", - "torInfo": "${torInfo}", - "load": "${load}", - "tempC": "${tempC}", - "tempF": "${tempF}", - "ram": "${ram}", - "hddUsedInfo": "${hddUsedInfo}", - "local_ip": "${local_ip}", - "network_rx": "${network_rx}", - "network_tx": "${network_tx}", - "runningRTL": "${runningRTL}", - "networkVersion": "${networkVersion}", - "chain": "${chain}", - "progress": "${progress}", - "sync_percentage": "${sync_percentage}", - "public_addr_pre": "${public_addr_pre}", - "public_addr": "${public_addr}", - "public": "${public}", - "networkConnections": "${networkConnections}", - "mempool": "${mempool}", - "ln_sync": "${ln_sync}", - "ln_version": "${ln_version}", - "ln_baseInfo": "${json_ln_baseInfo}", - "ln_peers": "${ln_peers}", - "ln_channelInfo": "${ln_channelInfo}", - "ln_external": "${ln_external}" -} -EOF - - # use Jinja2 and apply json data to template to produce static html file - templateExists=$(sudo ls /var/cache/raspiblitz/info.json 2>/dev/null | grep -c 'info.json') - if [ ${templateExists} -gt 0 ]; then - res=$(/usr/local/bin/j2 /var/www/blitzweb/info/info.j2 /var/cache/raspiblitz/info.json -o /var/cache/raspiblitz/info.html) - if ! [ $? -eq 0 ]; then - echo "an error occured.. maybe JSON syntax is wrong..!" - echo "${res}" - fi - fi - -fi -# EOF +# EOF \ No newline at end of file diff --git a/home.admin/00infoLCD.sh b/home.admin/00infoLCD.sh index d3a711f24..ad1c83f19 100755 --- a/home.admin/00infoLCD.sh +++ b/home.admin/00infoLCD.sh @@ -20,6 +20,8 @@ function usage() { verbose=0 pause=12 +# this is used by touchscreen and command 'satus' +# TODO: remove on v1.8 while [[ "$1" == -* ]]; do case "$1" in -h|--help) @@ -82,239 +84,29 @@ while : # CHECK BASIC DATA ########################### - # get the local network IP to be displayed on the lCD - source <(sudo /home/admin/config.scripts/internet.sh status) - - # waiting for IP in general - if [ ${#localip} -eq 0 ]; then - l1="Waiting for Network ...\n" - l2="Not able to get local IP.\n" - l3="LAN cable connected? WIFI lost?\n" - dialog --backtitle "RaspiBlitz ${codeVersion}" --infobox "$l1$l2$l3" 5 40 - sleep 3 - continue - fi - - # waiting for Internet connection - if [ ${online} -eq 0 ]; then - l1="Waiting for Internet ...\n" - l2="Local Network seems OK but no Internet.\n" - l3="Is router still online?\n" - dialog --backtitle "RaspiBlitz ${codeVersion} ${localip}" --infobox "$l1$l2$l3" 5 45 - sleep 3 - continue - fi - # get config info if already available (with state value) source ${infoFile} configExists=$(ls ${configFile} 2>/dev/null | grep -c '.conf') if [ ${configExists} -eq 1 ]; then source ${configFile} + source <(/home/admin/config.scripts/network.aliases.sh getvars) fi - # reboot info - if [ "${state}" = "reboot" ]; then - dialog --backtitle "RaspiBlitz ${codeVersion}" --infobox "Waiting for Reboot ..." 3 30 - sleep 20 - continue - fi + if [ "${setupPhase}" != "done" ] || [ "${state}" == "copytarget" ] || [ "${state}" == "copysource" ] || [ "${state}" == "copystation" ]; then - # shutdown info - if [ "${state}" = "shutdown" ]; then - dialog --backtitle "RaspiBlitz ${codeVersion}" --infobox "Waiting for Shutdown ..." 3 30 - sleep 20 - continue - fi - - # waiting for DHCP in general - if [ "${state}" = "noDHCP" ]; then - l1="Waiting for DHCP ...\n" - l2="Not able to get local IP.\n" - l3="Check you router if constant.\n" - dialog --backtitle "RaspiBlitz ${codeVersion} (${localip})" --infobox "$l1$l2$l3" 5 40 + # show status info during boot & setup & repair on LCD + /home/admin/setup.scripts/eventInfoWait.sh "${state}" "${message}" lcd sleep 1 continue + fi - # if no information available from files - set default - if [ ${#setupStep} -eq 0 ]; then - setupStep=0 - fi - - # before setup even started - if [ ${setupStep} -eq 0 ]; then - - # check for internet connection - online=$(ping 1.0.0.1 -c 1 -W 2 | grep -c '1 received') - if [ ${online} -eq 0 ]; then - # re-test with other server - online=$(ping 8.8.8.8 -c 1 -W 2 | grep -c '1 received') - fi - if [ ${online} -eq 0 ]; then - # re-test with other server - online=$(ping 208.67.222.222 -c 1 -W 2 | grep -c '1 received') - fi - - if [ ${online} -eq 0 ]; then - message="no internet connection" - - # when in presync - get more info on progress - elif [ "${state}" = "presync" ]; then - blockchaininfo="$(sudo -u root bitcoin-cli --conf=/home/admin/assets/bitcoin.conf getblockchaininfo 2>/dev/null)" - message="starting" - if [ ${#blockchaininfo} -gt 0 ]; then - message="$(echo "${blockchaininfo}" | jq -r '.verificationprogress')" - message=$(echo $message | awk '{printf( "%.2f%%", 100 * $1)}') - fi - - # when old data - improve message - elif [ "${state}" = "sdtoosmall" ]; then - message="SDCARD TOO SMALL - min 16GB" - - # when no HDD - improve message - elif [ "${state}" = "noHDD" ]; then - message="Connect external HDD/SSD" - fi - - # setup process has not started yet - l1="Login to your RaspiBlitz with:\n" - l2="ssh admin@${localip}\n" - l3="Use password: raspiblitz\n" - - if [ "${state}" = "recovering" ]; then - l1="Recovering please wait ..\n" - fi - - boxwidth=$((${#localip} + 24)) - sleep 3 - dialog --backtitle "RaspiBlitz ${codeVersion} (${state}) - ${message}" --infobox "$l1$l2$l3" 5 ${boxwidth} - sleep 5 - continue - fi - - # check if recovering/upgrade is running - if [ "${state}" = "recovering" ]; then - if [ ${#message} -eq 0 ]; then - message="Setup in Progress" - fi - l1="Upgrade/Recover/Provision\n" - l2="---> ${message}\n" - l3="Please keep running until reboot." - boxwidth=$((${#localip} + 28)) - dialog --backtitle "RaspiBlitz ${codeVersion} (${state}) ${setupStep} ${localip}" --infobox "$l1$l2$l3" 5 ${boxwidth} - sleep 3 - continue - fi - - # if freshly recovered - recoveredInfoExists=$(sudo ls /home/admin/recover.flag 2>/dev/null | grep -c '.flag') - if [ ${recoveredInfoExists} -gt 0 ]; then - l1="FINAL RECOVER LOGIN NEEDED:\n" - l2="ssh admin@${localip}\n" - l3="Use password: raspiblitz\n" - boxwidth=$((${#localip} + 28)) - dialog --backtitle "RaspiBlitz ${codeVersion} (${state})" --infobox "$l1$l2$l3" 5 ${boxwidth} - sleep 3 - continue - fi - - # if re-indexing - if [ "${state}" = "reindex" ]; then - l1="REINDEXING BLOCKCHAIN\n" - l2="To monitor & detect finish:\n" - l3="ssh admin@${localip}\n" - boxwidth=$((${#localip} + 28)) - dialog --backtitle "RaspiBlitz ${codeVersion} (${state})" --infobox "$l1$l2$l3" 5 ${boxwidth} - sleep 3 - continue - fi - - # when setup is in progress - password has been changed - if [ ${setupStep} -lt 100 ]; then - l1="Login to your RaspiBlitz with:\n" - l2="ssh admin@${localip}\n" - l3="Use your Password A\n" - boxwidth=$((${#localip} + 24)) - sleep 3 - dialog --backtitle "RaspiBlitz ${codeVersion} ${localip} - Welcome (${setupStep})" --infobox "$l1$l2$l3" 5 ${boxwidth} - sleep 7 - continue - fi - - ########################### - # DISPLAY AFTER SETUP - ########################### - - if [ "${state}" = "repair" ]; then - l1="Repair Mode\n" - l2="ssh admin@${localip}\n" - l3="Use password: PasswordA\n" - boxwidth=$((${#localip} + 28)) - dialog --backtitle "RaspiBlitz ${codeVersion} (${state}) ${setupStep} ${localip}" --infobox "$l1$l2$l3" 5 ${boxwidth} - sleep 3 - continue - fi - - if [ "${state}" = "reboot" ]; then - l1="Reboot needed.\n" - l2="ssh admin@${localip}\n" - l3="Use password: PasswordA\n" - boxwidth=$((${#localip} + 28)) - dialog --backtitle "RaspiBlitz ${codeVersion} (${state}) ${setupStep} ${localip}" --infobox "$l1$l2$l3" 5 ${boxwidth} - sleep 3 - continue - fi - - if [ "${state}" = "retorrent" ]; then - l1="Repair Mode- TORRENT\n" - l2="ssh admin@${localip}\n" - l3="Use password: PasswordA\n" - boxwidth=$((${#localip} + 28)) - dialog --backtitle "RaspiBlitz ${codeVersion} (${state}) ${setupStep} ${localip}" --infobox "$l1$l2$l3" 5 ${boxwidth} - sleep 3 - continue - fi - - if [ "${state}" = "recopy" ]; then - l1="Repair Mode - COPY\n" - l2="ssh admin@${localip}\n" - l3="Use password: PasswordA\n" - boxwidth=$((${#localip} + 28)) - dialog --backtitle "RaspiBlitz ${codeVersion} (${state}) ${setupStep} ${localip}" --infobox "$l1$l2$l3" 5 ${boxwidth} - sleep 3 - continue - fi - - if [ "${state}" = "copystation" ]; then - l1="COPY STATION MODE\n" - l2="${message}" - dialog --backtitle "RaspiBlitz ${codeVersion} ${localip}" --infobox "$l1$l2" 6 56 - sleep 2 - continue - fi - - # if LND is syncing or scanning - lndSynced=$(sudo -u bitcoin /usr/local/bin/lncli --chain=${network} --network=${chain}net getinfo 2>/dev/null | jq -r '.synced_to_chain' | grep -c true) - if [ ${lndSynced} -eq 0 ]; then - /home/admin/80scanLND.sh - sleep 20 - continue - fi - - # perform config check - configCheck=$(/home/admin/config.scripts/blitz.configcheck.py) - if [ $? -eq 0 ]; then - configValid=1 - # echo "Config Valid!" - else - configValid=0 - # echo "Config Not Valid!" - l1="POTENTIAL CONFIG ERROR FOUND\n" - l2="ssh admin@${localip}\n" - l3="use Password A\n" - l4="Run on Terminal command: check" - dialog --backtitle "RaspiBlitz ${codeVersion} cfg-err ${localip}" --infobox "$l1$l2$l3$l4" 6 50 - sleep 20 + # TODO: ALSO SEPERATE GUI/ACTION FOR THE SCANNING / WALLET UNLOCK / ERROR DETECTION + # if lightning is syncing or scanning + source <(sudo /home/admin/config.scripts/blitz.statusscan.sh) + if [ "${syncedToChain}" != "1" ]; then + /home/admin/setup.scripts/eventBlockchainSync.sh lcd + sleep 10 continue fi diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index 674a35664..8c47df6a5 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -40,10 +40,16 @@ confirmation() # get the local network IP to be displayed on the LCD source <(/home/admin/config.scripts/internet.sh status local) +if [ ${chain} = test ];then + netprefix="t" +elif [ ${chain} = sig ];then + netprefix="s" +elif [ ${chain} = main ];then + netprefix="" +fi + # BASIC MENU INFO -HEIGHT=19 WIDTH=64 -CHOICE_HEIGHT=12 BACKTITLE="RaspiBlitz" TITLE="" MENU="Choose one of the following options:" @@ -62,110 +68,98 @@ if [ "${rtlWebinterface}" == "on" ]; then fi # Put Activated Apps on top -if [ "${rtlWebinterface}" == "on" ]; then +if [ "${rtlWebinterface}" == "on" ] || [ "${crtlWebinterface}" == "on" ]; then OPTIONS+=(RTL "RTL Web Node Manager") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${BTCPayServer}" == "on" ]; then OPTIONS+=(BTCPAY "BTCPay Server Info") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${lit}" == "on" ]; then OPTIONS+=(LIT "LIT (loop, pool, faraday)") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) +fi +if [ "${sparko}" == "on" ]; then + OPTIONS+=(SPARKO "Sparko Webwallet") fi if [ "${ElectRS}" == "on" ]; then OPTIONS+=(ELECTRS "Electrum Rust Server") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${BTCRPCexplorer}" == "on" ]; then OPTIONS+=(EXPLORE "BTC RPC Explorer") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${LNBits}" == "on" ]; then OPTIONS+=(LNBITS "LNbits Server") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${lndmanage}" == "on" ]; then OPTIONS+=(LNDMANAGE "LND Manage Script") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${loop}" == "on" ]; then OPTIONS+=(LOOP "Loop In/Out Service") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${mempoolExplorer}" == "on" ]; then OPTIONS+=(MEMPOOL "Mempool Space") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${specter}" == "on" ]; then OPTIONS+=(SPECTER "Cryptoadvance Specter") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${joinmarket}" == "on" ]; then OPTIONS+=(JMARKET "JoinMarket") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${faraday}" == "on" ]; then OPTIONS+=(FARADAY "Faraday Channel Management") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${bos}" == "on" ]; then OPTIONS+=(BOS "Balance of Satoshis") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${pyblock}" == "on" ]; then OPTIONS+=(PYBLOCK "PyBlock") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${thunderhub}" == "on" ]; then OPTIONS+=(THUB "ThunderHub") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${zerotier}" == "on" ]; then OPTIONS+=(ZEROTIER "ZeroTier") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${pool}" == "on" ]; then OPTIONS+=(POOL "Lightning Pool") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${sphinxrelay}" == "on" ]; then OPTIONS+=(SPHINX "Sphinx Chat Relay") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${chantools}" == "on" ]; then OPTIONS+=(CHANTOOLS "ChannelTools (Fund Rescue)") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi if [ "${circuitbreaker}" == "on" ]; then OPTIONS+=(CIRCUIT "Circuitbreaker (LND firewall)") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) +fi + +if [ "${testnet}" == "on" ]&&[ ${chain} != test ]; then + OPTIONS+=(TESTNET "Testnet Service Options") +fi +if [ ${chain} != main ]; then + OPTIONS+=(MAINNET "Mainnet Service Options") fi # Basic Options OPTIONS+=(INFO "RaspiBlitz Status Screen") -OPTIONS+=(LIGHTNING "LND Wallet Options") + +# if LND is main lightning +if [ "${lightning}" == "lnd" ]; then + OPTIONS+=(LND "LND Wallet Options") +fi + +# if C-Lighthing is main lightning +if [ "${lightning}" == "cln" ]; then +# if CLN is main lightning + OPTIONS+=(CLN "C-lightning Wallet Options") +fi + +# TODO: when more then one Lightning is active +#if [ "$cln" == "on" ] || [ $chain = test ] && [ "$tcln" == "on" ]; then +# OPTIONS+=(CLN "C-lightning Wallet Options") +# HEIGHT=$((HEIGHT+1)) +# CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) +#fi + OPTIONS+=(SETTINGS "Node Settings & Options") OPTIONS+=(SERVICES "Additional Apps & Services") OPTIONS+=(SYSTEM "Monitoring & Configuration") @@ -175,8 +169,6 @@ OPTIONS+=(PASSWORD "Change Passwords") if [ "${touchscreen}" == "1" ]; then OPTIONS+=(SCREEN "Touchscreen Calibration") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi # final Options @@ -185,6 +177,9 @@ OPTIONS+=(UPDATE "Check/Prepare RaspiBlitz Update") OPTIONS+=(REBOOT "Reboot RaspiBlitz") OPTIONS+=(OFF "PowerOff RaspiBlitz") + +CHOICE_HEIGHT=$(("${#OPTIONS[@]}")) +HEIGHT=$((CHOICE_HEIGHT+6)) CHOICE=$(dialog --clear \ --backtitle "$BACKTITLE" \ --title "$TITLE" \ @@ -226,21 +221,24 @@ case $CHOICE in exit 0 fi ;; - LIGHTNING) - /home/admin/99lightningMenu.sh + LND) + /home/admin/99lndMenu.sh + ;; + CLN) + /home/admin/99clnMenu.sh ${chain}net ;; CONNECT) /home/admin/99connectMenu.sh ;; SYSTEM) - /home/admin/99systemMenu.sh + /home/admin/99systemMenu.sh ${chain}net ;; SCREEN) dialog --title 'Touchscreen Calibration' --msgbox 'Choose OK and then follow the instructions on touchscreen for calibration.\n\nBest is to use a stylus for accurate touchscreen interaction.' 9 48 /home/admin/config.scripts/blitz.touchscreen.sh calibrate ;; RTL) - /home/admin/config.scripts/bonus.rtl.sh menu + /home/admin/config.scripts/bonus.rtl.sh menu ${lightning} ;; BTCPAY) /home/admin/config.scripts/bonus.btcpayserver.sh menu @@ -254,6 +252,9 @@ case $CHOICE in LIT) /home/admin/config.scripts/bonus.lit.sh menu ;; + SPARKO) + /home/admin/config.scripts/cln-plugin.sparko.sh menu mainnet + ;; LNBITS) /home/admin/config.scripts/bonus.lnbits.sh menu ;; @@ -298,6 +299,12 @@ case $CHOICE in ;; CIRCUIT) sudo /home/admin/config.scripts/bonus.circuitbreaker.sh menu + ;; + TESTNET) + /home/admin/00parallelChainsMenu.sh testnet + ;; + MAINNET) + /home/admin/00parallelChainsMenu.sh mainnet ;; SUBSCRIBE) /home/admin/config.scripts/blitz.subscriptions.py @@ -310,9 +317,6 @@ case $CHOICE in ;; REPAIR) /home/admin/98repairMenu.sh - if [ $? -eq 99 ]; then - exit 1 - fi ;; PASSWORD) sudo /home/admin/config.scripts/blitz.setpassword.sh @@ -321,44 +325,41 @@ case $CHOICE in /home/admin/99updateMenu.sh ;; REBOOT) - clear - confirmation "Are you sure?" "Reboot" "Cancel" true 7 40 - confirmationReboot=$? - if [ $confirmationReboot -eq 0 ]; then + clear + confirmation "Are you sure?" "Reboot" "Cancel" true 7 40 + confirmationReboot=$? + if [ $confirmationReboot -eq 0 ]; then clear echo "" - sudo /home/admin/XXshutdown.sh reboot - exit 0 - fi + sudo /home/admin/config.scripts/blitz.shutdown.sh reboot + exit 1 + fi ;; OFF) - clear - confirmation "Are you sure?" "PowerOff" "Cancel" true 7 40 - confirmationShutdown=$? - if [ $confirmationShutdown -eq 0 ]; then + clear + confirmation "Are you sure?" "PowerOff" "Cancel" true 7 40 + confirmationShutdown=$? + if [ $confirmationShutdown -eq 0 ]; then clear echo "" - sudo /home/admin/XXshutdown.sh - exit 0 - fi + sudo /home/admin/config.scripts/blitz.shutdown.sh + exit 1 + fi ;; DELETE) sudo /home/admin/XXcleanHDD.sh - sudo /home/admin/XXshutdown.sh reboot - exit 0 + sudo /home/admin/config.scripts/blitz.shutdown.sh reboot + exit 1 ;; *) clear - echo "***********************************" - echo "* RaspiBlitz Commandline" - echo "* Here be dragons .. have fun :)" - echo "***********************************" - echo "Bitcoin command line options: bitcoin-cli help" - echo "LND command line options: lncli -h" - echo "Back to main menu use command: raspiblitz" - echo - exit 0 + exit 1 esac -# go into loop - start script from beginning to load config/sate fresh -/home/admin/00mainMenu.sh +# forward exit code of submenu to outside loop +# 0 = continue loop / everything else = break loop and exit to terminal +exitCodeOfSubmenu=$? +if [ "${exitCodeOfSubmenu}" != "0" ]; then + echo "# submenu signaled exit code '${exitCodeOfSubmenu}' --> forward to outside loop" +fi +exit ${exitCodeOfSubmenu} \ No newline at end of file diff --git a/home.admin/00parallelChainsMenu.sh b/home.admin/00parallelChainsMenu.sh new file mode 100644 index 000000000..cd4c13e1f --- /dev/null +++ b/home.admin/00parallelChainsMenu.sh @@ -0,0 +1,197 @@ +#!/bin/bash + +# Usage: +# 00parallelChainsMenu.sh + +source /home/admin/raspiblitz.info +# add default value to raspi config if needed +if ! grep -Eq "^testnet=" /mnt/hdd/raspiblitz.conf; then + echo "testnet=off" >> /mnt/hdd/raspiblitz.conf +fi +if ! grep -Eq "^LNdefault=" /mnt/hdd/raspiblitz.conf; then + echo "LNdefault=lnd" >> /mnt/hdd/raspiblitz.conf +fi +source /mnt/hdd/raspiblitz.conf + +# CHAIN is signet | testnet | mainnet +if [ $# -gt 0 ]; then + CHAIN=$1 + if [ $1 != ${chain}net ];then + nonDefaultChain=1 + fi +else + nonDefaultChain=0 + CHAIN=${chain}net +fi + +# LNTYPE is lnd | cln +if [ $# -gt 1 ]&&[ $2 != $LNdefault ];then + nonDefaultLNtype=1 + LNTYPE=$2 +else + nonDefaultLNtype=0 + LNTYPE=$LNdefault +fi + +# get the local network IP to be displayed on the LCD +source <(/home/admin/config.scripts/internet.sh status local) + +# BASIC MENU INFO +HEIGHT=10 +WIDTH=64 +CHOICE_HEIGHT=3 +BACKTITLE="${CHAIN} options" +TITLE="" +MENU="Choose one of the following options:" +OPTIONS=() +plus="" + +if [ "${runBehindTor}" = "on" ]; then + plus=" / TOR" +fi +if [ ${#dynDomain} -gt 0 ]; then + plus="${plus} / ${dynDomain}" +fi +BACKTITLE="${localip} / ${hostname} / ${network} / ${chain}${plus}" + +# Put Activated Apps on top +if [ $chain = test ]&&[ "$trtlWebinterface" = "on" ]||\ + [ $chain = sig ]&& [ "$srtlWebinterface" = "on" ]||\ + [ $chain = main ]&&[ "$rtlWebinterface" = "on" ]; then + OPTIONS+=(RTL "RTL Web Node Manager for LND ${CHAIN}") + HEIGHT=$((HEIGHT+1)) + CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) +fi + +if [ $chain = test ]&&[ "$tlnd" = "on" ]||\ + [ $chain = sig ]&& [ "$slnd" = "on" ]||\ + [ $chain = main ]&&[ "$lnd" = "on" ]; then + OPTIONS+=(LND "LND options for ${CHAIN}") + HEIGHT=$((HEIGHT+1)) + CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) +fi + +if [ "$chain" = "test" ]&&[ "$tcrtlWebinterface" = "on" ]||\ + [ "$chain" = "sig" ]&& [ "$scrtlWebinterface" = "on" ]||\ + [ "$chain" = "main" ]&&[ "$crtlWebinterface" = "on" ]; then + OPTIONS+=(cRTL "RTL Web Node Manager for C-lightning ${CHAIN}") + HEIGHT=$((HEIGHT+1)) + CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) +fi + +if [ "$chain" = "test" ]&&[ "$tcln" = "on" ]||\ + [ "$chain" = "sig" ]&& [ "$scln" = "on" ]||\ + [ "$chain" = "main" ]&&[ "$cln" = "on" ]; then + OPTIONS+=(CLN "C-lightning options for ${CHAIN}") + HEIGHT=$((HEIGHT+1)) + CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) +fi + +OPTIONS+=(INFO "RaspiBlitz Status Screen for ${CHAIN}") + +if [ "$testnet" == "on" ]; then +OPTIONS+=(SERVICES "Additional Apps & Services on ${CHAIN}") + HEIGHT=$((HEIGHT+1)) + CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) +fi +OPTIONS+=(SYSTEM "Monitoring & Configuration") +#TODO OPTIONS+=(CONNECT "Connect Apps & Show Credentials") + +if [ $nonDefaultLNtype = 1 ];then + OPTIONS+=(SWITCHLN "Make ${LNTYPE} the default lightning wallet") + HEIGHT=$((HEIGHT+1)) + CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) +fi + +if [ $nonDefaultChain = 1 ];then + OPTIONS+=(MKDEFAULT "Make ${CHAIN} the default chain") + HEIGHT=$((HEIGHT+1)) + CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) +fi + +CHOICE=$(dialog --clear \ + --backtitle "$BACKTITLE" \ + --title "$TITLE" \ + --ok-label "Select" \ + --cancel-label "Back" \ + --menu "$MENU" \ + $HEIGHT $WIDTH $CHOICE_HEIGHT \ + "${OPTIONS[@]}" \ + 2>&1 >/dev/tty) + +case $CHOICE in + INFO) + # #TODO + # echo "Gathering Information (please wait) ..." + # walletLocked=$(lncli getinfo 2>&1 | grep -c "Wallet is encrypted") + # if [ ${walletLocked} -eq 0 ]; then + # while : + # do + # # show the same info as on LCD screen + # /home/admin/00infoBlitz.sh + # # wait 6 seconds for user exiting loop + # 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 "" + # echo "Returning to menu ....." + # sleep 4 + # break + # fi + # done + # else + # /home/admin/00raspiblitz.sh + # exit 0 + # fi + /home/admin/00infoBlitz.sh $CHAIN + ;; + RTL) + /home/admin/config.scripts/bonus.rtl.sh menu lnd $CHAIN + ;; + cRTL) + /home/admin/config.scripts/bonus.rtl.sh menu cln $CHAIN + ;; + LND) + /home/admin/99lndMenu.sh $CHAIN + ;; + CLN) + /home/admin/99clnMenu.sh $CHAIN + ;; + SERVICES) + if [ $CHAIN = testnet ];then + /home/admin/00parallelTestnetServices.sh + elif [ $CHAIN = mainnet ];then + /home/admin/00parallelMainnetServices.sh $CHAIN + fi + ;; + SYSTEM) + /home/admin/99systemMenu.sh $CHAIN + ;; + CONNECT) + /home/admin/99connectMenu.sh $CHAIN + ;; + SWITCHLN) + # setting value in raspi blitz config + sudo sed -i "s/^LNdefault=.*/LNdefault=$LNTYPE/g" /mnt/hdd/raspiblitz.conf + echo "# OK - Set LNdefault=$LNTYPE in /mnt/hdd/raspiblitz.conf" + echo + echo "Press ENTER to return to main menu." + ;; + MKDEFAULT) + # setting value in raspi blitz config + newchain=${CHAIN::-3} + sudo sed -i "s/^chain=.*/chain=${newchain}/g" /mnt/hdd/raspiblitz.conf + echo "# OK - Set chain=${newchain} in /mnt/hdd/raspiblitz.conf" + sudo /home/admin/config.scripts/lnd.credentials.sh sync + if grep -Eq "^specter=on" /mnt/hdd/raspiblitz.conf; then + echo "# Restart Specter on $CHAIN" + sudo systemctl restart cryptoadvance-specter.service + fi + echo + echo "Press ENTER to return to main menu." + read key + ;; +esac \ No newline at end of file diff --git a/home.admin/00parallelMainnetServices.sh b/home.admin/00parallelMainnetServices.sh new file mode 100644 index 000000000..d3427ec5a --- /dev/null +++ b/home.admin/00parallelMainnetServices.sh @@ -0,0 +1,179 @@ +#!/bin/bash + +# get raspiblitz config +echo "get raspiblitz config" +source /home/admin/raspiblitz.info +source /mnt/hdd/raspiblitz.conf + +CHAIN=mainnet + +# for testnet +echo "services default values" +if [ ${#rtlWebinterface} -eq 0 ]; then rtlWebinterface="off"; fi +if [ ${#lnd} -eq 0 ]; then lnd="off"; fi +if [ ${#cln} -eq 0 ]; then cln="off"; fi +if [ ${#crtlWebinterface} -eq 0 ]; then crtlWebinterface="off"; fi +if [ ${#sparko} -eq 0 ]; then sparko="off"; fi + +# show select dialog +echo "run dialog ..." + +OPTIONS=() +OPTIONS+=(l "LND on $CHAIN" ${lnd}) +OPTIONS+=(r "RTL for LND $CHAIN" ${rtlWebinterface}) +OPTIONS+=(c "C-lightning on $CHAIN" ${cln}) +OPTIONS+=(t "RTL for CLN on $CHAIN" ${crtlWebinterface}) +OPTIONS+=(s "Sparko for CLN on $CHAIN" ${sparko}) + +CHOICES=$(dialog --title ' Additional Services ' \ + --checklist ' use spacebar to activate/de-activate ' \ + 12 45 5 "${OPTIONS[@]}" 2>&1 >/dev/tty) + +dialogcancel=$? +echo "done dialog" +clear + +# check if user canceled dialog +echo "dialogcancel(${dialogcancel})" +if [ ${dialogcancel} -eq 1 ]; then + echo "user canceled" + exit 0 +elif [ ${dialogcancel} -eq 255 ]; then + echo "ESC pressed" + exit 0 +fi + +needsReboot=0 +anychange=0 + +# lnd process choice +choice="off"; check=$(echo "${CHOICES}" | grep -c "l") +if [ ${check} -eq 1 ]; then choice="on"; fi +if [ "${lnd}" != "${choice}" ]; then + echo "# LND on $CHAIN Setting changed .." + anychange=1 + /home/admin/config.scripts/lnd.chain.sh ${choice} $CHAIN + errorOnInstall=$? + if [ "${choice}" = "on" ]; then + if [ ${errorOnInstall} -eq 0 ]; then + echo "# Successfully installed LND on $CHAIN" + else + l1="# !!! FAIL on LND on $CHAIN install !!!" + l2="# Try manual install on terminal after reboot with:" + l3="/home/admin/config.scripts/lnd.chain.sh on $CHAIN" + dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 + fi + fi +else + echo "# LND on $CHAIN Setting unchanged." +fi + +# cln process choice +choice="off"; check=$(echo "${CHOICES}" | grep -c "c") +if [ ${check} -eq 1 ]; then choice="on"; fi +if [ "${cln}" != "${choice}" ]; then + echo "# CLN on $CHAIN Setting changed .." + anychange=1 + /home/admin/config.scripts/cln.install.sh ${choice} $CHAIN + errorOnInstall=$? + if [ "${choice}" = "on" ]; then + if [ ${errorOnInstall} -eq 0 ]; then + echo "# Successfully installed CLN on $CHAIN" + else + l1="# !!! FAIL on CLN on $CHAIN install !!!" + l2="# Try manual install on terminal after reboot with:" + l3="/home/admin/config.scripts/cln.install.sh on $CHAIN" + dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 + fi + fi +else + echo "# CLN on $CHAIN Setting unchanged." +fi + +# RTL process choice +choice="off"; check=$(echo "${CHOICES}" | grep -c "r") +if [ ${check} -eq 1 ]; then choice="on"; fi +if [ "${rtlWebinterface}" != "${choice}" ]; then + echo "# RTL for LND $CHAIN Setting changed .." + anychange=1 + /home/admin/config.scripts/bonus.rtl.sh ${choice} lnd $CHAIN + errorOnInstall=$? + if [ "${choice}" = "on" ]; then + if [ ${errorOnInstall} -eq 0 ]; then + sudo systemctl start RTL + echo "# waiting 10 secs .." + sleep 10 + /home/admin/config.scripts/bonus.rtl.sh menu lnd $CHAIN + else + l1="# !!! FAIL on RTL for LND $CHAIN install !!!" + l2="# Try manual install on terminal after reboot with:" + l3="/home/admin/config.scripts/bonus.rtl.sh on lnd $CHAIN" + dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 + fi + fi +else + echo "# RTL for LND $CHAIN Setting unchanged." +fi + +# cRTL process choice +choice="off"; check=$(echo "${CHOICES}" | grep -c "t") +if [ ${check} -eq 1 ]; then choice="on"; fi +if [ "${crtlWebinterface}" != "${choice}" ]; then + echo "RTL for CLN $CHAIN Setting changed .." + anychange=1 + /home/admin/config.scripts/bonus.rtl.sh ${choice} cln $CHAIN + errorOnInstall=$? + if [ "${choice}" = "on" ]; then + if [ ${errorOnInstall} -eq 0 ]; then + sudo systemctl start cRTL + echo "waiting 10 secs .." + sleep 10 + /home/admin/config.scripts/bonus.rtl.sh menu cln $CHAIN + else + l1="!!! FAIL on RTL for CLN $CHAIN install !!!" + l2="Try manual install on terminal after reboot with:" + l3="/home/admin/config.scripts/bonus.rtl.sh on cln $CHAIN" + dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 + fi + fi +else + echo "RTL for CLN $CHAIN Setting unchanged." +fi + +# sparko process choice +choice="off"; check=$(echo "${CHOICES}" | grep -c "s") +if [ ${check} -eq 1 ]; then choice="on"; fi +if [ "${sparko}" != "${choice}" ]; then + echo "# Sparko on $CHAIN Setting changed .." + anychange=1 + /home/admin/config.scripts/cln-plugin.sparko.sh ${choice} $CHAIN + errorOnInstall=$? + if [ "${choice}" = "on" ]; then + if [ ${errorOnInstall} -eq 0 ]; then + /home/admin/config.scripts/cln-plugin.sparko.sh menu $CHAIN + else + l1="# !!! FAIL on Sparko on $CHAIN install !!!" + l2="# Try manual install on terminal after reboot with:" + l3="/home/admin/config.scripts/cln-plugin.sparko.sh on $CHAIN" + dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 + fi + fi +else + echo "# Sparko on $CHAIN Setting unchanged." +fi + +if [ ${anychange} -eq 0 ]; then + dialog --msgbox "NOTHING CHANGED!\nUse Spacebar to check/uncheck services." 8 58 + exit 0 +fi + +if [ ${needsReboot} -eq 1 ]; then + sleep 2 + dialog --pause "OK. System will reboot to activate changes." 8 58 8 + clear + echo "rebooting .. (please wait)" + # stop bitcoind + sudo -u bitcoin ${network}-cli stop + sleep 4 + sudo /home/admin/config.scripts/blitz.shutdown.sh reboot +fi \ No newline at end of file diff --git a/home.admin/00parallelTestnetServices.sh b/home.admin/00parallelTestnetServices.sh new file mode 100644 index 000000000..402fd3482 --- /dev/null +++ b/home.admin/00parallelTestnetServices.sh @@ -0,0 +1,181 @@ +#!/bin/bash + +# get raspiblitz config +echo "get raspiblitz config" +source /home/admin/raspiblitz.info +source /mnt/hdd/raspiblitz.conf + +CHAIN=testnet + +# for testnet +echo "services default values" +if [ ${#trtlWebinterface} -eq 0 ]; then trtlWebinterface="off"; fi +if [ ${#tlnd} -eq 0 ]; then tlnd="off"; fi +if [ ${#tcrtlWebinterface} -eq 0 ]; then tcrtlWebinterface="off"; fi +if [ ${#tcln} -eq 0 ]; then tcln="off"; fi +if [ ${#tsparko} -eq 0 ]; then tsparko="off"; fi + +# show select dialog +echo "run dialog ..." + +OPTIONS=() +OPTIONS+=(l "LND on $CHAIN" ${tlnd}) +OPTIONS+=(r "RTL for LND $CHAIN" ${trtlWebinterface}) +OPTIONS+=(c "C-lightning on $CHAIN" ${tcln}) +OPTIONS+=(t "RTL for CLN on $CHAIN" ${tcrtlWebinterface}) +OPTIONS+=(s "Sparko for CLN on $CHAIN" ${tsparko}) + +CHOICES=$(dialog --title ' Additional Services ' \ + --checklist ' use spacebar to activate/de-activate ' \ + 12 45 5 "${OPTIONS[@]}" 2>&1 >/dev/tty) + +dialogcancel=$? +echo "done dialog" +clear + +# check if user canceled dialog +echo "dialogcancel(${dialogcancel})" +if [ ${dialogcancel} -eq 1 ]; then + echo "user canceled" + exit 0 +elif [ ${dialogcancel} -eq 255 ]; then + echo "ESC pressed" + exit 0 +fi + +needsReboot=0 +anychange=0 + +# tlnd process choice +choice="off"; check=$(echo "${CHOICES}" | grep -c "l") +if [ ${check} -eq 1 ]; then choice="on"; fi +if [ "${tlnd}" != "${choice}" ]; then + echo "# LND on $CHAIN Setting changed .." + anychange=1 + /home/admin/config.scripts/lnd.chain.sh ${choice} $CHAIN + errorOnInstall=$? + if [ "${choice}" = "on" ]; then + if [ ${errorOnInstall} -eq 0 ]; then + echo "# Successfully installed LND on $CHAIN" + else + l1="# !!! FAIL on LND on $CHAIN install !!!" + l2="# Try manual install on terminal after reboot with:" + l3="/home/admin/config.scripts/lnd.chain.sh on $CHAIN" + dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 + fi + fi +else + echo "# LND on $CHAIN Setting unchanged." +fi + +# tcln process choice +choice="off"; check=$(echo "${CHOICES}" | grep -c "c") +if [ ${check} -eq 1 ]; then choice="on"; fi +if [ "${tcln}" != "${choice}" ]; then + echo "# CLN on $CHAIN Setting changed .." + anychange=1 + /home/admin/config.scripts/cln.install.sh ${choice} $CHAIN + errorOnInstall=$? + if [ "${choice}" = "on" ]; then + if [ ${errorOnInstall} -eq 0 ]; then + echo "# Successfully installed CLN on $CHAIN" + else + l1="# !!! FAIL on CLN on $CHAIN install !!!" + l2="# Try manual install on terminal after reboot with:" + l3="/home/admin/config.scripts/cln.install.sh on $CHAIN" + dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 + fi + fi +else + echo "# CLN on $CHAIN Setting unchanged." +fi + +# tRTL process choice +choice="off"; check=$(echo "${CHOICES}" | grep -c "r") +if [ ${check} -eq 1 ]; then choice="on"; fi +if [ "${trtlWebinterface}" != "${choice}" ]; then + echo "# RTL for LND $CHAIN Setting changed .." + anychange=1 + /home/admin/config.scripts/bonus.rtl.sh ${choice} lnd $CHAIN + errorOnInstall=$? + if [ "${choice}" = "on" ]; then + if [ ${errorOnInstall} -eq 0 ]; then + sudo systemctl start tRTL + echo "# waiting 10 secs .." + sleep 10 + /home/admin/config.scripts/bonus.rtl.sh menu lnd $CHAIN + else + l1="# !!! FAIL on RTL for LND $CHAIN install !!!" + l2="# Try manual install on terminal after reboot with:" + l3="/home/admin/config.scripts/bonus.rtl.sh on lnd $CHAIN" + dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 + fi + fi +else + echo "# RTL for LND $CHAIN Setting unchanged." +fi + +# ctRTL process choice +choice="off"; check=$(echo "${CHOICES}" | grep -c "t") +if [ ${check} -eq 1 ]; then choice="on"; fi +if [ "${tcrtlWebinterface}" != "${choice}" ]; then + echo "RTL for CLN $CHAIN Setting changed .." + anychange=1 + /home/admin/config.scripts/bonus.rtl.sh ${choice} cln $CHAIN + errorOnInstall=$? + if [ "${choice}" = "on" ]; then + if [ ${errorOnInstall} -eq 0 ]; then + sudo systemctl start tcRTL + echo "waiting 10 secs .." + sleep 10 + /home/admin/config.scripts/bonus.rtl.sh menu cln $CHAIN + else + l1="!!! FAIL on RTL for CLN $CHAIN install !!!" + l2="Try manual install on terminal after reboot with:" + l3="/home/admin/config.scripts/bonus.rtl.sh on cln $CHAIN" + dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 + fi + fi +else + echo "RTL for CLN $CHAIN Setting unchanged." +fi + +# tsparko process choice +choice="off"; check=$(echo "${CHOICES}" | grep -c "s") +if [ ${check} -eq 1 ]; then choice="on"; fi +if [ "${tsparko}" != "${choice}" ]; then + echo "# Sparko on $CHAIN Setting changed .." + anychange=1 + /home/admin/config.scripts/cln-plugin.sparko.sh ${choice} $CHAIN + errorOnInstall=$? + if [ "${choice}" = "on" ]; then + if [ ${errorOnInstall} -eq 0 ]; then + /home/admin/config.scripts/cln-plugin.sparko.sh menu $CHAIN + else + l1="# !!! FAIL on Sparko on $CHAIN install !!!" + l2="# Try manual install on terminal after reboot with:" + l3="/home/admin/config.scripts/cln-plugin.sparko.sh on $CHAIN" + dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 + fi + fi +else + echo "# Sparko on $CHAIN Setting unchanged." +fi + + + +if [ ${anychange} -eq 0 ]; then + dialog --msgbox "NOTHING CHANGED!\nUse Spacebar to check/uncheck services." 8 58 + exit 0 +fi + +if [ ${needsReboot} -eq 1 ]; then + sleep 2 + dialog --pause "OK. System will reboot to activate changes." 8 58 8 + clear + echo "rebooting .. (please wait)" + # stop bitcoind + sudo -u bitcoin ${network}-cli stop + sleep 4 + sudo /home/admin/config.scripts/blitz.shutdown.sh reboot +fi \ No newline at end of file diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 593e66601..9fa934765 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -1,29 +1,175 @@ #!/bin/bash -echo "For debug logs CTRL+C and: tail -n1000 -f raspiblitz.log" -echo "or call the command 'debug' to see bigger report." -echo "Starting the main menu ..." + +####################################### +# SSH USER INTERFACE +# gets called when user logins per SSH +# or calls 'raspiblitz' on the terminal +####################################### +echo "Starting SSH user interface ... (please wait)" # CONFIGFILE - configuration of RaspiBlitz configFile="/mnt/hdd/raspiblitz.conf" +source ${configFile} 2>/dev/null # INFOFILE - state data from bootstrap infoFile="/home/admin/raspiblitz.info" -# use blitz.datadrive.sh to analyse HDD situation -source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) -if [ "${error}" != "" ]; then - echo "# FAIL blitz.datadrive.sh status --> ${error}" - echo "# Please report issue to the raspiblitz github." +# 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 -# check if HDD is connected -if [ "${isMounted}" == "0" ] && [ ${#hddCandidate} -eq 0 ]; then - echo "***********************************************************" - echo "WARNING: NO HDD FOUND -> Shutdown, connect HDD and restart." - echo "***********************************************************" - vagrant=$(df | grep -c "/vagrant") - if [ ${vagrant} -gt 0 ]; then +# get system state information raspiblitz.info +source ${infoFile} + +# check that basic system phase/state information is available +if [ "${setupPhase}" == "" ] || [ "${state}" == "" ]; then + echo "setupPhase(${setupPhase}) state(${state})" + echo "FAIL: ${infoFile} does not exist or missing state." + echo "Check logs & bootstrap.service for errors and report to devs." + exit 1 +fi + +# special state: copysource +if [ "${state}" = "copysource" ]; then + echo "***********************************************************" + echo "INFO: You lost connection during copying the blockchain" + echo "You have the following options:" + echo "a) continue/check progress with command: sourcemode" + echo "b) return to normal mode with command: restart" + echo "***********************************************************" + exit +fi + +# special state: copytarget +source <(/home/admin/config.scripts/blitz.copychain.sh status) +if [ "${copyInProgress}" = "1" ]; then + echo "Detected interrupted COPY blochain process ..." + /home/admin/config.scripts/blitz.copychain.sh target + exit +fi + +# special state: reindex was triggered +if [ "${state}" = "reindex" ]; then + echo "Re-Index in progress ... start monitoring:" + /home/admin/config.scripts/network.reindex.sh + exit +fi + +# special state: copystation +if [ "${state}" = "copystation" ]; then + echo "Copy Station is Runnning ..." + echo "reboot to return to normal" + sudo /home/admin/XXcopyStation.sh + 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 +# an error drops user to terminal +##################################### + +exitMenuLoop=0 +doneIBD=0 +while [ ${exitMenuLoop} -eq 0 ] +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 + sudo /home/admin/config.scripts/blitz.statusscan.sh > /var/cache/raspiblitz/raspiblitz.status + source /var/cache/raspiblitz/raspiblitz.status + + ##################################### + # ALWAYS: Handle System States + ##################################### + + ############################ + # LND Wallet Unlock + + if [ "${lndActive}" == "1" ] && [ "${walletLocked}" == "1" ] && [ "${state}" == "ready" ]; then + /home/admin/config.scripts/lnd.unlock.sh + fi + + ##################################### + # SETUP MENU + ##################################### + + # when is needed & bootstrap process signals that it waits for user dialog + if [ "${setupPhase}" != "done" ] && [ "${state}" == "waitsetup" ]; then + # push user to main menu + /home/admin/setup.scripts/controlSetupDialog.sh + # use the exit code from setup menu as signal if menu loop should exited + # 0 = continue loop / everything else = break loop and exit to terminal + exitMenuLoop=$? + if [ "${exitMenuLoop}" != "0" ]; then break; fi + fi + + ##################################### + # SETUP DONE DIALOGS + ##################################### + + # when is needed & bootstrap process signals that it waits for user dialog + if [ "${setupPhase}" != "done" ] && [ "${state}" == "waitfinal" ]; then + # push to final setup gui dialogs + /home/admin/setup.scripts/controlFinalDialog.sh + continue + fi + + ##################################### + # INITIAL BLOCKCHAIN SYNC (SUBLOOP) + ##################################### + if [ "${setupPhase}" == "done" ] && [ "${state}" == "ready" ] && [ "${initialSync}" == "1" ]; then + echo "debug wait eventBlockchainSync.sh ..." + sleep 3 + /home/admin/setup.scripts/eventBlockchainSync.sh ssh loop + continue + fi + + ##################################### + # MAIN MENU or BLOCKCHAIN SYNC + ##################################### + + # when setup is done & state is ready .. jump to main menu + if [ "${setupPhase}" == "done" ] && [ "${state}" == "ready" ]; then + # MAIN MENU + /home/admin/00mainMenu.sh + # use the exit code from main menu as signal if menu loop should exited + # 0 = continue loop / everything else = break loop and exit to terminal + exitMenuLoop=$? + if [ "${exitMenuLoop}" != "0" ]; then break; fi + fi + + ##################################### + # DURING SETUP: Handle System States + ##################################### + + if [ "${setupPhase}" != "done" ]; then + + #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 + echo "***********************************************************" + echo "VAGRANT INFO" + echo "***********************************************************" echo "To connect a HDD data disk to your VagrantVM:" echo "- shutdown VM with command: off" echo "- open your VirtualBox GUI and select RaspiBlitzVM" @@ -35,436 +181,50 @@ if [ "${isMounted}" == "0" ] && [ ${#hddCandidate} -eq 0 ]; then echo "a VDI with a presynced blockchain to speed up setup. If you dont have 900GB" echo "space on your laptop you can store the VDI file on an external drive." echo "***********************************************************" - fi - exit -fi - -# check if HDD is from another fullnode OS and offer migration -if [ "${hddGotMigrationData}" != "" ] && [ "${hddGotMigrationData}" != "none" ]; then - nodenameUpperCase=$(echo "${hddGotMigrationData}" | tr "[a-z]" "[A-Z]") - whiptail --title " ${nodenameUpperCase} --> RASPIBLITZ " --yes-button "Start Migration" --no-button "Ignore" --yesno "RaspiBlitz found data from ${nodenameUpperCase} - -You can migrate your blockchain & LND data (funds & channels) over to RaspiBlitz. - -Please make sure to have your ${nodenameUpperCase} seed words & static channel backup file (just in case). Also any data of additional apps you had installed on ${nodenameUpperCase} might get lost. - -Do you want to start migration to RaspiBlitz now? - " 16 58 - if [ $? -eq 0 ]; then - err="" - echo "**************************************************" - echo "MIGRATION FROM ${nodenameUpperCase} TO RASPIBLITZ" - echo "**************************************************" - echo "- started ..." - source <(sudo /home/admin/config.scripts/blitz.migration.sh migration-${hddGotMigrationData}) - if [ "${err}" != "" ]; then - echo "MIGRATION FAILED: ${err}" - echo "Format data disk on laptop & recover funds with fresh sd card using seed words + static channel backup." exit 1 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'" - sudo rm -R /mnt/hdd/backup_migration + # for all critical errors (admin info & exit) + if [ "${state}" == "errorHDD" ]; then + echo "***********************************************************" + echo "SETUP ERROR - please report to development team" + echo "***********************************************************" + echo "state(${state}) message(${message})" + if [ "${state}" == "errorHDD" ]; then + # print some debug detail info on HDD/SSD error + sudo /home/admin/config.scripts/blitz.datadrive.sh status + fi + echo "command to shutdown --> off" + exit 1 else - echo "- old data of ${nodenameUpperCase} can be found in '/mnt/hdd/backup_migration'" + # every other state just push as event to SSH frontend + echo "debug wait eventInfoWait.sh ..." + sleep 3 + /home/admin/setup.scripts/eventInfoWait.sh "${state}" "${message}" fi - sleep 3 - # kick into reboot - echo "******************************************************" - echo "OK MIGRATION --> will now reboot and update/recover" - echo "******************************************************" - sudo shutdown -h -r now - sleep 100 - exit 0 - else - echo "******************************************************" - echo "MIGRATION SKIPPED ... starting fresh RaspiBlitz Setup" - echo "******************************************************" - sleep 6 fi -fi -# check data from _bootstrap.sh that was running on device setup -bootstrapInfoExists=$(ls $infoFile | grep -c '.info') -if [ ${bootstrapInfoExists} -eq 0 ]; then - echo "***********************************************************" - echo "WARNING: NO raspiblitz.info FOUND -> bootstrap not running?" - echo "***********************************************************" - exit -fi +done -# load the data from the info file (will get produced on every startup) -source ${infoFile} - -if [ "${state}" = "recovering" ]; then - echo "***********************************************************" - echo "WARNING: bootstrap still updating - close SSH, login later" - echo "To monitor progress --> tail -n1000 -f raspiblitz.log" - echo "***********************************************************" - exit -fi - -if [ "${state}" = "copysource" ]; then - echo "***********************************************************" - echo "INFO: You lost connection during copying the blockchain" - echo "You have the following options:" - echo "a) continue/check progress with command: sourcemode" - echo "b) return to normal mode with command: restart" - echo "***********************************************************" - exit -fi - -# check if copy blockchain over LAN to this RaspiBlitz was running -source <(/home/admin/config.scripts/blitz.copyblockchain.sh status) -if [ "${copyInProgress}" = "1" ]; then - echo "Detected interrupted COPY blochain process ..." - /home/admin/50copyHDD.sh - exit -fi - -# signal that after bootstrap recover user dialog is needed -recoveredInfoExists=$(sudo ls /home/admin/recover.flag 2>/dev/null | grep -c '.flag') -if [ ${recoveredInfoExists} -gt 0 ]; then - echo "System recovered - needs final user settings" - /home/admin/20recoverDialog.sh - exit 1 -fi - -# signal that a reindex was triggered -if [ "${state}" = "reindex" ]; then - echo "Re-Index in progress ... start monitoring:" - /home/admin/config.scripts/network.reindex.sh - exit 1 -fi - -# singal that copstation is running -if [ "${state}" = "copystation" ]; then - echo "Copy Station is Runnning ..." - echo "reboot to return to normal" - sudo /home/admin/XXcopyStation.sh - exit -fi - -# if state=ready -> setup is done or started -if [ "${state}" = "ready" ]; then - configExists=$(ls ${configFile} | grep -c '.conf') - if [ ${configExists} -eq 1 ]; then - echo "loading config data" - source ${configFile} - else - echo "setup still in progress - setupStep(${setupStep})" +echo "# menu loop received exit code ${exitMenuLoop} --> exit to terminal" +echo "***********************************" +echo "* RaspiBlitz Commandline" +echo "* Here be dragons .. have fun :)" +echo "***********************************" +if [ "${setupPhase}" == "done" ]; then + echo "Bitcoin command line options: ${network}-cli help" + if [ "${lightning}" == "lnd" ]; then + echo "LND command line options: lncli -h" + fi + if [ "${lightning}" == "cln" ]; then + echo "C-Lightning command line options: lightning-cli help" fi -fi - -## default menu settings -# to fit the main menu without scrolling: -HEIGHT=13 -WIDTH=64 -CHOICE_HEIGHT=6 -BACKTITLE="RaspiBlitz" -TITLE="" -MENU="Choose one of the following options:" -OPTIONS=() - -# check if RTL web interface is installed -runningRTL=$(sudo ls /etc/systemd/system/RTL.service 2>/dev/null | grep -c 'RTL.service') - -# function to use later -waitUntilChainNetworkIsReady() -{ - source ${configFile} - echo "checking ${network}d - please wait .." - echo "can take longer if device was off or first time" - - # check for error on network - sudo -u bitcoin ${network}-cli -datadir=/home/bitcoin/.${network} getblockchaininfo 1>/dev/null 2>error.tmp - clienterror=`cat error.tmp` - rm error.tmp - - # check for missing blockchain data - if [ "${network}" = "bitcoin" ]; then - if [ "${chain}" = "main" ]; then - minSize=210000000000 - else - minSize=27000000000 - fi - elif [ "${network}" = "litecoin" ]; then - if [ "${chain}" = "main" ]; then - minSize=20000000000 - else - minSize=27000000000 - fi - else - minSize=210000000000000 - fi - isSyncing=$(sudo ls -la /mnt/hdd/${network}/blocks/.selfsync 2>/dev/null | grep -c '.selfsync') - blockchainsize=$(sudo du -shbc /mnt/hdd/${network}/ 2>/dev/null | head -n1 | awk '{print $1;}') - if [ ${#blockchainsize} -gt 0 ]; then - if [ ${blockchainsize} -lt ${minSize} ]; then - if [ ${isSyncing} -eq 0 ]; then - echo "blockchainsize(${blockchainsize})" - echo "Missing Blockchain Data (<${minSize}) ..." - clienterror="missing blockchain" - sleep 3 - fi - fi - fi - - if [ ${#clienterror} -gt 0 ]; then - #echo "clienterror(${clienterror})" - - # analyse LOGS for possible reindex - reindex=$(sudo cat /mnt/hdd/${network}/debug.log 2>/dev/null | grep -c 'Please restart with -reindex or -reindex-chainstate to recover') - if [ ${reindex} -gt 0 ]; then - # dismiss if its just a date thing - futureBlock=$(sudo tail /mnt/hdd/${network}/debug.log 2>/dev/null | grep "Please restart with -reindex or -reindex-chainstate to recover" | grep -c "block database contains a block which appears to be from the future") - if [ ${futureBlock} -gt 0 ]; then - blockchainBroken=0 - echo "-> Ignore reindex - its just a future block" - fi - if [ ${isSyncing} -gt 0 ]; then - reindex=0 - fi - fi - if [ ${reindex} -gt 0 ] || [ "${clienterror}" = "missing blockchain" ]; then - - if [ ${reindex} -gt 0 ]; then - echo "!! DETECTED NEED FOR RE-INDEX in debug.log ... starting repair options." - sudo sed -i "s/^state=.*/state=repair/g" /home/admin/raspiblitz.info - sleep 3 - fi - - whiptail --title "Blockchain not Complete" --yes-button "DELETE+REPAIR" --no-button "Continue Sync" --yesno "Your blockchain data is not complete (yet). - -You can try to sync the chain further but if your stuck -this can be due to power problems or a failing HDD. -For more info see: https://raspiblitz.org -> FAQ - -If you choose to DELETE+REPAIR the old blockchain gets -deleted but your Lightning funds & channel not be touched. - -How do you want to continue? -" 15 65 - if [ $? -eq 0 ]; then - #delete+repair - clear - echo "***********************************************************" - echo "DELETE+REPAIR blockchain ..." - echo "***********************************************************" - /home/admin/XXcleanHDD.sh -blockchain -force - /home/admin/98repairBlockchain.sh - /home/admin/00raspiblitz.sh - exit - else - # ignore - just delete blockchain logfile - clear - echo "***********************************************************" - echo "CONTINUE SYNC blockchain ..." - echo "***********************************************************" - fi - - fi - - # let 80scanLND script to the info to use - /home/admin/80scanLND.sh - if [ $? -gt 0 ]; then - echo "${network} error: ${clienterror}" - exit 0 - fi - fi - - while : - do - - locked=$(sudo -u bitcoin /usr/local/bin/lncli --chain=${network} --network=${chain}net getinfo 2>&1 | grep -c unlock) - if [ ${locked} -gt 0 ]; then - uptime=$(awk '{printf("%d\n",$1 + 0.5)}' /proc/uptime) - if [ "${autoUnlock}" == "on" ] && [ ${uptime} -lt 300 ]; then - # give autounlock 5 min after startup to react - sleep 1 - else - # check how many times LND was restarted - source <(sudo /home/admin/config.scripts/blitz.statusscan.sh) - if [ ${startcountLightning} -lt 4 ]; then - /home/admin/config.scripts/lnd.unlock.sh - echo "Starting up Wallet ... (10sec)" - sleep 5 - sleep 5 - echo "please wait ... update to next screen can be slow" - else - /home/admin/80scanLND.sh lightning-error - sudo rm /home/admin/systemd.lightning.log - echo "(exit after too much restarts/unlocks - restart to try again)" - exit 0 - fi - fi - fi - lndSynced=$(sudo -u bitcoin /usr/local/bin/lncli --chain=${network} --network=${chain}net getinfo 2>/dev/null | jq -r '.synced_to_chain' | grep -c true) - if [ ${lndSynced} -eq 0 ]; then - /home/admin/80scanLND.sh - if [ $? -gt 0 ]; then - exit 0 - fi - else - # everything is ready - return from loop - return - fi - sleep 5 - done -} - -if [ ${#setupStep} -eq 0 ]; then - echo "WARN: no setup step found in raspiblitz.info" - setupStep=0 -fi -if [ ${setupStep} -eq 0 ]; then - - - # start setup - BACKTITLE="RaspiBlitz - Setup" - TITLE="⚡ Welcome to your RaspiBlitz ⚡" - MENU="\nChoose how you want to setup your RaspiBlitz: \n " - OPTIONS+=(BITCOIN "Setup BITCOIN and Lightning (DEFAULT)" \ - LITECOIN "Setup LITECOIN and Lightning (EXPERIMENTAL)" \ - MIGRATION "Upload a Migration File from old RaspiBlitz" ) - HEIGHT=12 - -elif [ ${setupStep} -lt 100 ]; then - - # continue setup - BACKTITLE="${hostname} / ${network} / ${chain}" - TITLE="⚡ Welcome to your RaspiBlitz ⚡" - MENU="\nThe setup process is not finished yet: \n " - OPTIONS+=(CONTINUE "Continue Setup of your RaspiBlitz") - HEIGHT=10 - else - - # check if LND needs re-setup - source <(sudo /home/admin/config.scripts/lnd.check.sh basic-setup) - if [ "${wallet}" == "0" ] || [ "${macaroon}" == "0" ] || [ "${config}" == "0" ] || [ "${tls}" == "0" ]; then - echo "WARN: LND needs re-setup" - /home/admin/70initLND.sh - exit 0 - fi - - # wait all is synced and ready - waitUntilChainNetworkIsReady - - # check if there is a channel.backup to activate - gotSCB=$(ls /home/admin/channel.backup 2>/dev/null | grep -c 'channel.backup') - if [ ${gotSCB} -eq 1 ]; then - - echo "*** channel.backup Recovery ***" - lncli --chain=${network} restorechanbackup --multi_file=/home/admin/channel.backup 2>/home/admin/.error.tmp - error=`cat /home/admin/.error.tmp` - rm /home/admin/.error.tmp 2>/dev/null - - if [ ${#error} -gt 0 ]; then - - # output error message - echo "" - echo "!!! FAIL !!! SOMETHING WENT WRONG:" - echo "${error}" - - # check if its possible to give background info on the error - notMachtingSeed=$(echo $error | grep -c 'unable to unpack chan backup') - if [ ${notMachtingSeed} -gt 0 ]; then - echo "--> ERROR BACKGROUND:" - echo "The WORD SEED is not matching the channel.backup file." - echo "Either there was an error in the word seed list or" - echo "or the channel.backup file is from another RaspiBlitz." - echo - fi - - # basic info on error - echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - echo - echo "You can try after full setup to restore channel.backup file again with:" - echo "lncli --chain=${network} restorechanbackup --multi_file=/home/admin/channel.backup" - echo - echo "Press ENTER to continue for now ..." - read key - else - mv /home/admin/channel.backup /home/admin/channel.backup.done - dialog --title " OK channel.backup IMPORT " --msgbox " -LND accepted the channel.backup file you uploaded. -It will now take around a hour until you can see, -if LND was able to recover funds from your channels. - " 9 56 - fi - - fi - - # check if DNS is working (if not it will trigger dialog) - sudo /home/admin/config.scripts/internet.dns.sh test - - #forward to main menu - /home/admin/00mainMenu.sh - exit 0 - + echo "Your setup is not finished." + echo "For setup logs: cat raspiblitz.log" + echo "or call the command 'debug' to see bigger report." fi - -CHOICE=$(dialog --clear \ - --backtitle "$BACKTITLE" \ - --title "$TITLE" \ - --menu "$MENU" \ - $HEIGHT $WIDTH $CHOICE_HEIGHT \ - "${OPTIONS[@]}" \ - 2>&1 >/dev/tty) - -clear -case $CHOICE in - CLOSE) - exit 1; - ;; - BITCOIN) - # set network info - sed -i "s/^network=.*/network=bitcoin/g" ${infoFile} - sed -i "s/^chain=.*/chain=main/g" ${infoFile} - ###### OPTIMIZE IF RAM >1GB - 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" /home/admin/assets/bitcoin.conf - sudo sed -i "s/^maxmempool=.*/maxmempool=300/g" /home/admin/assets/bitcoin.conf - fi - /home/admin/10setupBlitz.sh - exit 1; - ;; - LITECOIN) - /home/admin/config.scripts/blitz.litecoin.sh on - /home/admin/10setupBlitz.sh - exit 1; - ;; - MANUAL) - echo "************************************************************************************" - echo "PLEASE go to RaspiBlitz FAQ:" - echo "https://github.com/rootzoll/raspiblitz" - echo "And check: How can I recover my coins from a failing RaspiBlitz?" - echo "************************************************************************************" - exit 0 - ;; - MIGRATION) - sudo /home/admin/config.scripts/blitz.migration.sh "import-gui" - # on error clean & repeat - if [ "$?" = "1" ]; then - echo - echo "# clean and unmount for next try" - sudo rm -f ${defaultZipPath}/raspiblitz-*.tar.gz 2>/dev/null - sudo umount /mnt/hdd 2>/dev/null - sudo umount /mnt/storage 2>/dev/null - sudo umount /mnt/temp 2>/dev/null - sleep 2 - /home/admin/00raspiblitz.sh - fi - exit 0 - ;; - CONTINUE) - /home/admin/10setupBlitz.sh - exit 1; - ;; -esac +echo "Back to menus use command: raspiblitz" +echo +exit 0 diff --git a/home.admin/00settingsMenuBasics.sh b/home.admin/00settingsMenuBasics.sh index 9715dce11..69f9604f3 100755 --- a/home.admin/00settingsMenuBasics.sh +++ b/home.admin/00settingsMenuBasics.sh @@ -9,13 +9,14 @@ echo "services default values" if [ ${#autoPilot} -eq 0 ]; then autoPilot="off"; fi if [ ${#autoUnlock} -eq 0 ]; then autoUnlock="off"; fi if [ ${#runBehindTor} -eq 0 ]; then runBehindTor="off"; fi -if [ ${#chain} -eq 0 ]; then chain="main"; fi if [ ${#autoNatDiscovery} -eq 0 ]; then autoNatDiscovery="off"; fi if [ ${#networkUPnP} -eq 0 ]; then networkUPnP="off"; fi if [ ${#touchscreen} -eq 0 ]; then touchscreen=0; fi if [ ${#lcdrotate} -eq 0 ]; then lcdrotate=0; fi if [ ${#zerotier} -eq 0 ]; then zerotier="off"; fi if [ ${#circuitbreaker} -eq 0 ]; then circuitbreaker="off"; fi +if [ ${#testnet} -eq 0 ]; then testnet="off"; fi +if [ ${#cln} -eq 0 ]; then cln="off"; fi echo "map dropboxbackup to on/off" DropboxBackup="off" @@ -29,9 +30,9 @@ echo "map zerotier to on/off" zerotierSwitch="off" if [ "${zerotier}" != "off" ]; then zerotierSwitch="on"; fi -echo "map chain to on/off" -chainValue="off" -if [ "${chain}" = "test" ]; then chainValue="on"; fi +# echo "map chain to on/off" +# chainValue="off" +# if [ "${chain}" = "test" ]; then chainValue="on"; fi echo "map domain to on/off" domainValue="off" @@ -53,7 +54,7 @@ if [ ${touchscreen} -gt 0 ]; then touchscreenMenu='on' fi -echo "check autopilot by lnd.conf" +echo "check autopilot in lnd.conf" lndAutoPilotOn=$(sudo cat /mnt/hdd/lnd/lnd.conf | grep -c 'autopilot.active=1') if [ ${lndAutoPilotOn} -eq 1 ]; then autoPilot="on" @@ -71,140 +72,143 @@ fi # show select dialog echo "run dialog ..." - # BASIC MENU INFO -HEIGHT=19 # add 6 to CHOICE_HEIGHT + MENU lines -WIDTH=45 -CHOICE_HEIGHT=11 # 1 line / OPTIONS OPTIONS=() OPTIONS+=(t 'Run behind TOR' ${runBehindTor}) + if [ "${displayClass}" == "lcd" ]; then OPTIONS+=(s 'Touchscreen' ${touchscreenMenu}) OPTIONS+=(r 'LCD Rotate' ${lcdrotateMenu}) fi -OPTIONS+=(a 'Channel Autopilot' ${autoPilot}) -OPTIONS+=(k 'Accept Keysend' ${keysend}) -OPTIONS+=(n 'Testnet' ${chainValue}) -OPTIONS+=(c 'Circuitbreaker (LND firewall)' ${circuitbreaker}) -OPTIONS+=(u 'LND Auto-Unlock' ${autoUnlock}) -OPTIONS+=(d 'StaticChannelBackup on DropBox' ${DropboxBackup}) -OPTIONS+=(e 'StaticChannelBackup on USB Drive' ${LocalBackup}) + +if [ "${lightning}" == "lnd" ]; then + OPTIONS+=(a 'Channel Autopilot' ${autoPilot}) + OPTIONS+=(k 'Accept Keysend' ${keysend}) + OPTIONS+=(c 'Circuitbreaker (LND firewall)' ${circuitbreaker}) + OPTIONS+=(u 'LND Auto-Unlock' ${autoUnlock}) + OPTIONS+=(d 'StaticChannelBackup on DropBox' ${DropboxBackup}) + OPTIONS+=(e 'StaticChannelBackup on USB Drive' ${LocalBackup}) +fi + OPTIONS+=(z 'ZeroTier' ${zerotierSwitch}) +OPTIONS+=(t 'Parallel Testnet services' ${testnet}) -if [ ${#runBehindTor} -eq 0 ] || [ "${runBehindTor}" = "off" ]; then - OPTIONS+=(y ${dynDomainMenu} ${domainValue}) - OPTIONS+=(b 'BTC UPnP (AutoNAT)' ${networkUPnP}) - OPTIONS+=(l 'LND UPnP (AutoNAT)' ${autoNatDiscovery}) -fi +# choose c-lightning just at setup for now +#OPTIONS+=(n 'C-lightning' ${cln}) -CHOICES=$(dialog \ - --title ' Node Settings & Options ' \ - --checklist ' use spacebar to activate/de-activate ' \ - $HEIGHT $WIDTH $CHOICE_HEIGHT \ - "${OPTIONS[@]}" 2>&1 >/dev/tty) +if [ ${chain} = "main" ];then + if [ ${#runBehindTor} -eq 0 ] || [ "${runBehindTor}" = "off" ]; then + OPTIONS+=(y ${dynDomainMenu} ${domainValue}) + OPTIONS+=(b 'BTC UPnP (AutoNAT)' ${networkUPnP}) + OPTIONS+=(l 'LND UPnP (AutoNAT)' ${autoNatDiscovery}) + fi +fi +CHOICE_HEIGHT=$(("${#OPTIONS[@]}")) +CHOICES=$(dialog --title ' Node Settings & Options ' --checklist ' use spacebar to activate/de-activate ' $CHOICE_HEIGHT 45 $CHOICE_HEIGHT "${OPTIONS[@]}" 2>&1 >/dev/tty) dialogcancel=$? -echo "done dialog" clear # check if user canceled dialog -echo "dialogcancel(${dialogcancel})" +echo "dialogcancel(${dialogcancel}) (${CHOICE_HEIGHT})" if [ ${dialogcancel} -eq 1 ]; then echo "user canceled" - exit 1 + exit 0 elif [ ${dialogcancel} -eq 255 ]; then echo "ESC pressed" - exit 1 + exit 0 fi needsReboot=0 anychange=0 -# TESTNET process choice - KEEP FIRST IN ORDER -choice="main"; check=$(echo "${CHOICES}" | grep -c "n") -if [ ${check} -eq 1 ]; then choice="test"; fi -if [ "${chain}" != "${choice}" ]; then - if [ "${network}" = "litecoin" ] && [ "${choice}"="test" ]; then - dialog --title 'FAIL' --msgbox 'Litecoin-Testnet not available.' 5 25 - elif [ "${BTCRPCexplorer}" = "on" ]; then - dialog --title 'NOTICE' --msgbox 'Please turn off BTC-RPC-Explorer FIRST\nbefore changing testnet.' 6 45 - exit 1 - elif [ "${BTCPayServer}" = "on" ]; then - dialog --title 'NOTICE' --msgbox 'Please turn off BTC-Pay-Server FIRST\nbefore changing testnet.' 6 45 - exit 1 - elif [ "${ElectRS}" = "on" ]; then - dialog --title 'NOTICE' --msgbox 'Please turn off Electrum-Rust-Server FIRST\nbefore changing testnet.' 6 48 - exit 1 - elif [ "${loop}" = "on" ]; then - dialog --title 'NOTICE' --msgbox 'Please turn off Loop-Service FIRST\nbefore changing testnet.' 6 48 - exit 1 - else - echo "Testnet Setting changed .." - anychange=1 - sudo /home/admin/config.scripts/network.chain.sh ${choice}net - walletExists=$(sudo ls /mnt/hdd/lnd/data/chain/${network}/${choice}net/wallet.db 2>/dev/null | grep -c 'wallet.db') - if [ ${walletExists} -eq 0 ]; then - echo "Need to creating a new wallet ... wait 20secs" - sudo systemctl start lnd - sleep 20 - tryAgain=1 - while [ ${tryAgain} -eq 1 ] - do - echo "****************************************************************************" - echo "Creating a new LND Wallet for ${network}/${choice}net" - echo "****************************************************************************" - echo "A) For 'Wallet Password' use your PASSWORD C --> !! minimum 8 characters !!" - echo "B) Answer 'n' because you don't have a 'cipher seed mnemonic' (24 words) yet" - echo "C) For 'passphrase' to encrypt your 'cipher seed' use PASSWORD D (optional)" - echo "****************************************************************************" - sudo -u bitcoin /usr/local/bin/lncli --chain=${network} --network=${chain}net create 2>error.out - error=`sudo cat error.out` - if [ ${#error} -eq 0 ]; then - sleep 2 - # WIN - tryAgain=0 - echo "!!! Make sure to write down the 24 words (cipher seed mnemonic) !!!" - echo "If you are ready. Press ENTER." - else - # FAIL - tryAgain=1 - echo "!!! FAIL ---> SOMETHING WENT WRONG !!!" - echo "${error}" - echo "Press ENTER to retry ... or CTRL-c to EXIT" - fi - read key - done - echo "Check for Macaroon .. (10sec)" - sleep 10 - macaroonExists=$(sudo ls /home/bitcoin/.lnd/data/chain/${network}/${choice}net/admin.macaroon | grep -c 'admin.macaroon') - if [ ${macaroonExists} -eq 0 ]; then - echo "*** PLEASE UNLOCK your wallet with PASSWORD C to create macaroon" - lncli unlock 2>/dev/null - sleep 6 - fi - macaroonExists=$(sudo ls /home/bitcoin/.lnd/data/chain/${network}/${choice}net/admin.macaroon | grep -c 'admin.macaroon') - if [ ${macaroonExists} -eq 0 ]; then - echo "FAIL --> Was not able to create macaroon" - echo "Please report problem." - exit 1 - fi - echo "stopping lnd again" - sleep 5 - sudo systemctl stop lnd - fi - - echo "Update Admin Macaroon" - sudo rm -r /home/admin/.lnd/data/chain/${network}/${choice}net 2>/dev/null - sudo mkdir /home/admin/.lnd/data/chain/${network}/${choice}net - sudo cp /home/bitcoin/.lnd/data/chain/${network}/${choice}net/admin.macaroon /home/admin/.lnd/data/chain/${network}/${choice}net - sudo chown -R admin:admin /home/admin/.lnd/ - - needsReboot=1 - fi -else - echo "Testnet Setting unchanged." -fi +# deprecated - see https://github.com/rootzoll/raspiblitz/issues/2290 +## TESTNET process choice - KEEP FIRST IN ORDER +#choice="main"; check=$(echo "${CHOICES}" | grep -c "n") +#if [ ${check} -eq 1 ]; then choice="test"; fi +#if [ "${chain}" != "${choice}" ]; then +# if [ "${network}" = "litecoin" ] && [ "${choice}"="test" ]; then +# dialog --title 'FAIL' --msgbox 'Litecoin-Testnet not available.' 5 25 +# elif [ "${BTCRPCexplorer}" = "on" ]; then +# dialog --title 'NOTICE' --msgbox 'Please turn off BTC-RPC-Explorer FIRST\nbefore changing testnet.' 6 45 +# exit 1 +# elif [ "${BTCPayServer}" = "on" ]; then +# dialog --title 'NOTICE' --msgbox 'Please turn off BTC-Pay-Server FIRST\nbefore changing testnet.' 6 45 +# exit 1 +# elif [ "${ElectRS}" = "on" ]; then +# dialog --title 'NOTICE' --msgbox 'Please turn off Electrum-Rust-Server FIRST\nbefore changing testnet.' 6 48 +# exit 1 +# elif [ "${loop}" = "on" ]; then +# dialog --title 'NOTICE' --msgbox 'Please turn off Loop-Service FIRST\nbefore changing testnet.' 6 48 +# exit 1 +# else +# echo "Testnet Setting changed .." +# anychange=1 +# sudo /home/admin/config.scripts/network.chain.sh ${choice}net +# walletExists=$(sudo ls /mnt/hdd/lnd/data/chain/${network}/${choice}net/wallet.db 2>/dev/null | grep -c 'wallet.db') +# if [ ${walletExists} -eq 0 ]; then +# echo "Need to creating a new wallet ... wait 20secs" +# sudo systemctl start lnd +# sleep 20 +# tryAgain=1 +# while [ ${tryAgain} -eq 1 ] +# do +# echo "****************************************************************************" +# echo "Creating a new LND Wallet for ${network}/${choice}net" +# echo "****************************************************************************" +# echo "A) For 'Wallet Password' use your PASSWORD C --> !! minimum 8 characters !!" +# echo "B) Answer 'n' because you don't have a 'cipher seed mnemonic' (24 words) yet" +# echo "C) For 'passphrase' to encrypt your 'cipher seed' use PASSWORD D (optional)" +# echo "****************************************************************************" +# source <(/home/admin/config.scripts/network.aliases.sh getvars lnd ${choice}net) +# $lncli_alias create 2>error.out +# error=$(sudo cat error.out) +# if [ ${#error} -eq 0 ]; then +# sleep 2 +# # WIN +# tryAgain=0 +# echo "!!! Make sure to write down the 24 words (cipher seed mnemonic) !!!" +# echo "If you are ready. Press ENTER." +# else +# # FAIL +# tryAgain=1 +# echo "!!! FAIL ---> SOMETHING WENT WRONG !!!" +# echo "${error}" +# echo "Press ENTER to retry ... or CTRL-c to EXIT" +# fi +# read key +# done +# echo "Check for Macaroon .. (10sec)" +# sleep 10 +# macaroonExists=$(sudo ls /home/bitcoin/.lnd/data/chain/${network}/${choice}net/admin.macaroon | grep -c 'admin.macaroon') +# if [ ${macaroonExists} -eq 0 ]; then +# echo "*** PLEASE UNLOCK your wallet with PASSWORD C to create macaroon" +# lncli unlock 2>/dev/null +# sleep 6 +# fi +# macaroonExists=$(sudo ls /home/bitcoin/.lnd/data/chain/${network}/${choice}net/admin.macaroon | grep -c 'admin.macaroon') +# if [ ${macaroonExists} -eq 0 ]; then +# echo "FAIL --> Was not able to create macaroon" +# echo "Please report problem." +# exit 1 +# fi +# echo "stopping lnd again" +# sleep 5 +# sudo systemctl stop lnd +# fi +# +# echo "Update Admin Macaroon" +# sudo rm -r /home/admin/.lnd/data/chain/${network}/${choice}net 2>/dev/null +# sudo mkdir /home/admin/.lnd/data/chain/${network}/${choice}net +# sudo cp /home/bitcoin/.lnd/data/chain/${network}/${choice}net/admin.macaroon /home/admin/.lnd/data/chain/${network}/${choice}net +# sudo chown -R admin:admin /home/admin/.lnd/ +# +# needsReboot=1 +# fi +# else +# echo "Testnet Setting unchanged." +# fi # AUTOPILOT process choice choice="off"; check=$(echo "${CHOICES}" | grep -c "a") @@ -423,6 +427,57 @@ else echo "ZeroTier setting unchanged." fi +# testnet process choice +choice="off"; check=$(echo "${CHOICES}" | grep -c "t") +if [ ${check} -eq 1 ]; then choice="on"; fi +if [ "${testnet}" != "${choice}" ]; then + echo "# Testnet Setting changed .." + anychange=1 + /home/admin/config.scripts/bitcoin.chains.sh ${choice} testnet + errorOnInstall=$? + if [ "${choice}" = "on" ]; then + if [ ${errorOnInstall} -eq 0 ]; then + echo "# Successfully installed Testnet" + echo + echo "# Press ENTER to continue ..." + read key + else + l1="# !!! FAIL on Testnet install !!!" + l2="# Try manual install on terminal after reboot with:" + l3="/home/admin/config.scripts/bitcoin.chains.sh on testnet" + dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 + fi + fi +else + echo "# Testnet Setting unchanged." +fi + + +# cln process choice +#choice="off"; check=$(echo "${CHOICES}" | grep -c "n") +#if [ ${check} -eq 1 ]; then choice="on"; fi +#if [ "${cln}" != "${choice}" ]; then +# echo "# C-lightning Setting changed .." +# anychange=1 +# /home/admin/config.scripts/cln.install.sh ${choice} +# errorOnInstall=$? +# if [ "${choice}" = "on" ]; then +# if [ ${errorOnInstall} -eq 0 ]; then +# echo "# Successfully installed C-lightning" +# echo +# echo "# Press ENTER to continue ..." +# read key +# else +# l1="# !!! FAIL on C-lightning install !!!" +# l2="# Try manual install on terminal after reboot with:" +# l3="/home/admin/config.scripts/cln.install.sh on" +# dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 +# fi +# fi +#else +# echo "# C-lightning Setting unchanged." +#fi + if [ ${anychange} -eq 0 ]; then dialog --msgbox "NOTHING CHANGED!\nUse Spacebar to check/uncheck services." 8 58 exit 0 @@ -436,5 +491,5 @@ if [ ${needsReboot} -eq 1 ]; then # stop bitcoind sudo -u bitcoin ${network}-cli stop sleep 4 - sudo /home/admin/XXshutdown.sh reboot + sudo /home/admin/config.scripts/blitz.shutdown.sh reboot fi diff --git a/home.admin/00settingsMenuServices.sh b/home.admin/00settingsMenuServices.sh index 899ae2fa6..5cefb6f8e 100755 --- a/home.admin/00settingsMenuServices.sh +++ b/home.admin/00settingsMenuServices.sh @@ -6,7 +6,9 @@ source /home/admin/raspiblitz.info source /mnt/hdd/raspiblitz.conf echo "services default values" +if [ ${#runBehindTor} -eq 0 ]; then runBehindTor="off"; fi if [ ${#rtlWebinterface} -eq 0 ]; then rtlWebinterface="off"; fi +if [ ${#crtlWebinterface} -eq 0 ]; then crtlWebinterface="off"; fi if [ ${#BTCRPCexplorer} -eq 0 ]; then BTCRPCexplorer="off"; fi if [ ${#specter} -eq 0 ]; then specter="off"; fi if [ ${#BTCPayServer} -eq 0 ]; then BTCPayServer="off"; fi @@ -22,30 +24,42 @@ if [ ${#sphinxrelay} -eq 0 ]; then sphinxrelay="off"; fi if [ ${#lit} -eq 0 ]; then lit="off"; fi if [ ${#whitepaper} -eq 0 ]; then whitepaper="off"; fi if [ ${#chantools} -eq 0 ]; then chantools="off"; fi +if [ ${#sparko} -eq 0 ]; then sparko="off"; fi # show select dialog echo "run dialog ..." OPTIONS=() OPTIONS+=(e 'Electrum Rust Server' ${ElectRS}) -OPTIONS+=(r 'RTL Webinterface' ${rtlWebinterface}) -OPTIONS+=(t 'ThunderHub' ${thunderhub}) -OPTIONS+=(l 'LIT (loop, pool, faraday)' ${lit}) OPTIONS+=(p 'BTCPayServer' ${BTCPayServer}) -OPTIONS+=(i 'LNbits' ${LNBits}) OPTIONS+=(b 'BTC-RPC-Explorer' ${BTCRPCexplorer}) OPTIONS+=(s 'Cryptoadvance Specter' ${specter}) OPTIONS+=(a 'Mempool Space' ${mempoolExplorer}) + +# just available for LND +if [ "${lightning}" == "lnd" ]; then + OPTIONS+=(r 'RTL LND Webinterface' ${rtlWebinterface}) + OPTIONS+=(t 'ThunderHub' ${thunderhub}) + OPTIONS+=(l 'LIT (loop, pool, faraday)' ${lit}) + OPTIONS+=(i 'LNbits' ${LNBits}) + OPTIONS+=(o 'Balance of Satoshis' ${bos}) + OPTIONS+=(y 'PyBLOCK' ${pyblock}) + OPTIONS+=(h 'ChannelTools (Fund Rescue)' ${chantools}) + OPTIONS+=(x 'Sphinx-Relay' ${sphinxrelay}) +fi + +# just available for CLN +if [ "${lightning}" == "cln" ]; then + OPTIONS+=(r 'RTL C-Lightning Webinterface' ${crtlWebinterface}) + OPTIONS+=(k 'Sparko C-Lightning WebWallet' ${sparko}) +fi + OPTIONS+=(j 'JoinMarket' ${joinmarket}) -OPTIONS+=(o 'Balance of Satoshis' ${bos}) -OPTIONS+=(x 'Sphinx-Relay' ${sphinxrelay}) -OPTIONS+=(y 'PyBLOCK' ${pyblock}) -OPTIONS+=(c 'ChannelTools (Fund Rescue)' ${chantools}) OPTIONS+=(w 'Download Bitcoin Whitepaper' ${whitepaper}) CHOICES=$(dialog --title ' Additional Services ' \ --checklist ' use spacebar to activate/de-activate ' \ - 22 45 15 "${OPTIONS[@]}" 2>&1 >/dev/tty) + 24 45 17 "${OPTIONS[@]}" 2>&1 >/dev/tty) dialogcancel=$? echo "done dialog" @@ -55,10 +69,10 @@ clear echo "dialogcancel(${dialogcancel})" if [ ${dialogcancel} -eq 1 ]; then echo "user canceled" - exit 1 + exit 0 elif [ ${dialogcancel} -eq 255 ]; then echo "ESC pressed" - exit 1 + exit 0 fi needsReboot=0 @@ -70,18 +84,18 @@ if [ ${check} -eq 1 ]; then choice="on"; fi if [ "${rtlWebinterface}" != "${choice}" ]; then echo "RTL Webinterface Setting changed .." anychange=1 - /home/admin/config.scripts/bonus.rtl.sh ${choice} + /home/admin/config.scripts/bonus.rtl.sh ${choice} ${lightning} mainnet errorOnInstall=$? if [ "${choice}" = "on" ]; then if [ ${errorOnInstall} -eq 0 ]; then sudo systemctl start RTL echo "waiting 10 secs .." sleep 10 - /home/admin/config.scripts/bonus.rtl.sh menu + /home/admin/config.scripts/bonus.rtl.sh menu ${lightning} mainnet else - l1="!!! FAIL on RTL install !!!" + l1="!!! FAIL on RTL ${lightning} install !!!" l2="Try manual install on terminal after reboot with:" - l3="/home/admin/config.scripts/bonus.rtl.sh on" + l3="/home/admin/config.scripts/bonus.rtl.sh on ${lightning} mainnet" dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 fi fi @@ -242,7 +256,7 @@ else fi # CHANTOOLS process choice -choice="off"; check=$(echo "${CHOICES}" | grep -c "c") +choice="off"; check=$(echo "${CHOICES}" | grep -c "h") if [ ${check} -eq 1 ]; then choice="on"; fi if [ "${chantools}" != "${choice}" ]; then echo "chantools Setting changed .." @@ -431,6 +445,28 @@ else echo "Whitepaper setting unchanged." fi +# sparko process choice +choice="off"; check=$(echo "${CHOICES}" | grep -c "k") +if [ ${check} -eq 1 ]; then choice="on"; fi +if [ "${sparko}" != "${choice}" ]; then + echo "# Sparko on mainnet Setting changed .." + anychange=1 + /home/admin/config.scripts/cln-plugin.sparko.sh ${choice} mainnet + errorOnInstall=$? + if [ "${choice}" = "on" ]; then + if [ ${errorOnInstall} -eq 0 ]; then + /home/admin/config.scripts/cln-plugin.sparko.sh menu mainnet + else + l1="# !!! FAIL on Sparko on mainnet install !!!" + l2="# Try manual install on terminal after reboot with:" + l3="/home/admin/config.scripts/cln-plugin.sparko.sh on mainnet" + dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 + fi + fi +else + echo "# Sparko on mainnet Setting unchanged." +fi + if [ ${anychange} -eq 0 ]; then dialog --msgbox "NOTHING CHANGED!\nUse Spacebar to check/uncheck services." 8 58 exit 0 @@ -444,5 +480,5 @@ if [ ${needsReboot} -eq 1 ]; then # stop bitcoind sudo -u bitcoin ${network}-cli stop sleep 4 - sudo /home/admin/XXshutdown.sh reboot + sudo /home/admin/config.scripts/blitz.shutdown.sh reboot fi diff --git a/home.admin/10setupBlitz.sh b/home.admin/10setupBlitz.sh deleted file mode 100755 index d6da8ef87..000000000 --- a/home.admin/10setupBlitz.sh +++ /dev/null @@ -1,267 +0,0 @@ -#!/bin/bash - -# CHECK WHAT IS ALREADY WORKING -# check list from top down - so ./10setupBlitz.sh -# and re-enters the setup process at the correct spot -# in case it got interrupted -echo "checking setup script" - -# INFOFILE on SD - state data from bootstrap & setup -infoFile="/home/admin/raspiblitz.info" -source ${infoFile} - -echo "network(${network})" -echo "chain(${chain})" -echo "setupStep(${setupStep})" - -if [ ${#network} -eq 0 ]; then - echo "FAIL: Something is wrong. There is no value for network in ${infoFile}." - echo "Should be at least default value. EXIT" - exit 1 -fi - -# if no setup step in info file init with 0 -if [ ${#setupStep} -eq 0 ];then - echo "Init setupStep=0" - echo "setupStep=0" >> ${infoFile} - setupStep=0 -fi - -# check if LND needs re-setup -if [ ${setupStep} -gt 79 ];then - source <(sudo /home/admin/config.scripts/lnd.check.sh basic-setup) - if [ ${wallet} -eq 0 ] || [ ${macaroon} -eq 0 ] || [ ${config} -eq 0 ] || [ ${tls} -eq 0 ]; then - echo "WARN: LND needs re-setup" - sudo /home/admin/70initLND.sh - exit 0 - fi -fi - -# if setup if ready --> REBOOT -if [ ${setupStep} -gt 89 ];then - echo "FINISH by setupstep(${setupStep})" - sleep 3 - sudo /home/admin/90finishSetup.sh - sudo /home/admin/95finalSetup.sh - exit 0 -fi - -# check if lightning is running -lndRunning=$(systemctl status lnd.service 2>/dev/null | grep -c running) -if [ ${lndRunning} -eq 1 ]; then - - echo "LND is running ..." - sleep 1 - - # check if LND wallet exists and if locked - walletExists=$(sudo ls /mnt/hdd/lnd/data/chain/${network}/${chain}net/wallet.db 2>/dev/null | grep wallet.db -c) - walletLocked=0 - # only when a wallet exists - it can be locked - if [ ${walletExists} -eq 1 ];then - echo "lnd wallet exists ... checking if locked" - sleep 2 - walletLocked=$(sudo -u bitcoin /usr/local/bin/lncli getinfo 2>&1 | grep -c unlock) - fi - if [ ${walletLocked} -gt 0 ]; then - # LND wallet is locked - /home/admin/config.scripts/lnd.unlock.sh - /home/admin/10setupBlitz.sh - exit 0 - fi - - # check if blockchain still syncing (during sync sometimes CLI returns with error at this point) - chainInfo=$(sudo -u bitcoin ${network}-cli getblockchaininfo 2>/dev/null | grep 'initialblockdownload') - chainSyncing=1 - if [ ${#chainInfo} -gt 0 ];then - echo "check chaininfo" - chainSyncing=$(echo "${chainInfo}" | grep "true" -c) - else - echo "chaininfo is zero" - fi - if [ ${chainSyncing} -eq 1 ]; then - echo "Sync Chain ..." - sleep 3 - /home/admin/70initLND.sh - exit 0 - fi - - # check if lnd is scanning blockchain - lndInfo=$(sudo -u bitcoin /usr/local/bin/lncli --chain=${network} getinfo 2>/dev/null | grep "synced_to_chain") - lndSyncing=1 - if [ ${#lndInfo} -gt 0 ];then - lndSyncing=$(echo "${chainInfo}" | grep "false" -c) - fi - if [ ${lndSyncing} -eq 1 ]; then - echo "Sync LND ..." - sleep 3 - /home/admin/70initLND.sh - exit 0 - fi - - # if unlocked, blockchain synced and LND synced to chain .. finisch Setup - echo "FINSIH ... " - sleep 3 - sudo /home/admin/90finishSetup.sh - sudo /home/admin/95finalSetup.sh - exit 0 - -fi #end - when lighting is running - -# check if bitcoin is running -bitcoinRunning=$(systemctl status ${network}d.service 2>/dev/null | grep -c running) -if [ ${bitcoinRunning} -eq 0 ]; then - # double check - seconds=120 - if [ ${setupStep} -lt 60 ]; then - seconds=10 - fi - dialog --pause " Double checking for ${network}d - please wait .." 8 58 ${seconds} - clear - bitcoinRunning=$(${network}-cli getblockchaininfo 2>/dev/null | grep "initialblockdownload" -c) -else - echo "${network} is running" -fi -if [ ${bitcoinRunning} -eq 1 ]; then - echo "OK - ${network}d is running" - echo "Next step run Lightning" - /home/admin/70initLND.sh - exit 1 -else - echo "${network} still not running" -fi #end - when bitcoin is running - -# --- so neither bitcoin or lnd or running yet --> find the earlier step in the setup process: - -# use blitz.datadrive.sh to analyse HDD situation -source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status ${network}) -if [ ${#error} -gt 0 ]; then - echo "# FAIL blitz.datadrive.sh status --> ${error}" - echo "# Please report issue to the raspiblitz github." - exit 1 -fi - -# check if HDD is auto-mounted -if [ ${isMounted} -eq 1 ]; then - - # FAILSAFE: check if raspiblitz.conf is available - configExists=$(ls /mnt/hdd/raspiblitz.conf | grep -c '.conf') - if [ ${configExists} -eq 0 ]; then - echo "" - echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - echo "FAIL: /mnt/hdd/raspiblitz.conf should exists at this point, but not found!" - echo "Please report to: https://github.com/rootzoll/raspiblitz/issues/293" - echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - echo "Press ENTER to EXIT." - read key - exit 1 - fi - - # are there any signs of blockchain data and activity - # setup running with admin user, but has no permission to read /mnt/hdd/bitcoin/blocks/, sudo needed - blockchainDataExists=$(sudo ls /mnt/hdd/${network}/blocks 2>/dev/null | grep -c '.dat') - configExists=$(sudo ls /mnt/hdd/${network}/${network}.conf | grep -c '.conf') - - if [ ${blockchainDataExists} -gt 0 ]; then - if [ ${configExists} -eq 1 ]; then - /home/admin/XXdebugLogs.sh - echo "UNKOWN STATE - there is blockain data config, but blockchain service is not running" - echo "It seems that something went wrong during sync/download/copy of the blockchain." - echo "Or something with the config is not correct." - echo "Sometimes a reboot helps - use command: restart" - echo "Or try to repair blockchain - use command: repair" - exit 1 - else - echo "Got mounted blockchain, but no config and running service yet --> finish HDD" - /home/admin/60finishHDD.sh - exit 1 - fi - fi - - # HDD is empty - get Blockchain - - # detect hardware version of RaspberryPi - # https://www.unixtutorial.org/command-to-confirm-raspberry-pi-model - raspberryPi=$(cat /proc/device-tree/model | cut -d " " -f 3 | sed 's/[^0-9]*//g') - if [ ${#raspberryPi} -eq 0 ]; then - raspberryPi=0 - fi - - # Bitcoin on older/weak RaspberryPi3 (LEGACY) - if [ ${network} = "bitcoin" ] && [ ${raspberryPi} -eq 3 ]; then - echo "Bitcoin-RP3 Options" - menuitem=$(dialog --clear --beep --backtitle "RaspiBlitz" --title " Getting the Blockchain " \ - --menu "You need a copy of the Bitcoin Blockchain - choose method:" 13 75 5 \ - C "COPY --> Copy from laptop/node over LAN (±6hours)" \ - S "SYNC --> Selfvalidate all Blocks (VERY SLOW ±2month)" 2>&1 >/dev/tty) - - # Bitcoin on stronger RaspberryPi4 (new DEFAULT) - elif [ ${network} = "bitcoin" ]; then - echo "Bitcoin-RP4 Options" - menuitem=$(dialog --clear --beep --backtitle "RaspiBlitz" --title " Getting the Blockchain " \ - --menu "You need a copy of the Bitcoin Blockchain - choose method:" 13 75 5 \ - S "SYNC --> Selfvalidate all Blocks (DEFAULT ±2days)" \ - C "COPY --> Copy from laptop/node over LAN (±6hours)" 2>&1 >/dev/tty) - - # Litecoin - elif [ ${network} = "litecoin" ]; then - echo "Litecoin Options" - menuitem=$(dialog --clear --beep --backtitle "RaspiBlitz" --title " Getting the Blockchain " \ - --menu "You need a copy of the Litecoin Blockchain:" 13 75 4 \ - S "SYNC --> Selfvalidate all Blocks (±1day)" 2>&1 >/dev/tty) - - # error - else - echo "FAIL Unkown network(${network})" - exit 1 - fi - - # set SetupState - sudo sed -i "s/^setupStep=.*/setupStep=50/g" ${infoFile} - - clear - case $menuitem in - C) - /home/admin/50copyHDD.sh - ;; - S) - /home/admin/50syncHDD.sh - /home/admin/10setupBlitz.sh - ;; - *) - echo "Use 'raspiblitz' command to return to setup ..." - ;; - esac - exit 1 - -fi # end HDD is already auto-mountes - - -# --- the HDD is not auto-mounted --> very early stage of setup - -# if the script is called for the first time -if [ ${setupStep} -eq 0 ]; then - # run initial user dialog - /home/admin/20setupDialog.sh -fi - -# if the script is called for the first time -if [ ${setupStep} -eq 20 ]; then - # run initial user dialog - /home/admin/30initHDD.sh - exit 1 -fi - -# the HDD is already ext4 formated and cointains blockchain data -if [ "${hddFormat}" = "ext4" ] || [ "${hddFormat}" = "btrfs" ]; then - if [ ${hddGotBlockchain} -eq 1 ]; then - echo "HDD was already initialized/prepared" - echo "Now needs to be mounted" - /home/admin/40addHDD.sh - exit 1 - fi -fi - -# the HDD had no init yet -echo "init HDD ..." -/home/admin/30initHDD.sh -exit 1 \ No newline at end of file diff --git a/home.admin/20recoverDialog.sh b/home.admin/20recoverDialog.sh deleted file mode 100755 index 4980530a5..000000000 --- a/home.admin/20recoverDialog.sh +++ /dev/null @@ -1,127 +0,0 @@ -#!/bin/bash - -## get basic info -source /home/admin/raspiblitz.info -source /mnt/hdd/raspiblitz.conf - -# show password info dialog -resetAlsoPasswordB=$(sudo cat /mnt/hdd/bitcoin/bitcoin.conf 2>/dev/null | grep -c "rpcpassword=passwordB") -resetAlsoPasswordC=$(sudo ls /mnt/hdd/passwordc.flag 2>/dev/null | grep -c ".flag") - -if [ ${resetAlsoPasswordC} -gt 0 ]; then - - # password A + B + C - dialog --backtitle "RaspiBlitz - Migration Setup" --msgbox "Your migration to RaspiBlitz is almost done. - -You need to set a new Password A, B & C: -A) Main User Password (SSH, WebUI, ..) -B) RPC & APP Password (Additional Apps, ..) -C) Lightning Wallet Unlock Password - -Follow Password Rules: Minimal of 8 chars, -no spaces and only special characters - or . -Write them down & store them in a safe place. -" 17 52 - - # call set password a script - sudo /home/admin/config.scripts/blitz.setpassword.sh a - dialog --backtitle "RaspiBlitz" --msgbox "OK - password A was set\nfor all users pi, admin, root & bitcoin" 6 52 - - sudo /home/admin/config.scripts/blitz.setpassword.sh b - dialog --backtitle "RaspiBlitz" --msgbox "OK - password B was set\nit will be used by additional apps you install." 6 52 - - oldPasswordC=$(sudo cat /mnt/hdd/passwordc.flag) - sudo /home/admin/config.scripts/blitz.setpassword.sh c $oldPasswordC - if [ "$?" != "0" ]; then - dialog --backtitle "RaspiBlitz - Setup" --msgbox "Please write down your Password C:\n${oldPasswordC}" 10 52 - else - dialog --backtitle "RaspiBlitz" --msgbox "OK - password C was set\nuse it to unlock your Lightning Wallet after restarts." 8 52 - fi - -elif [ ${resetAlsoPasswordB} -gt 0 ]; then - - # password A + B - dialog --backtitle "RaspiBlitz - Migration Setup" --msgbox "Your migration to RaspiBlitz is almost done. - -You need to set a new Password A & B: -A) Main User Password (SSH, WebUI, ..) -B) RPC & APP Password (Additional Apps, ..) - -Passwords C (for your Lightning wallet) stays to the password you set before. - -Follow Password Rules: Minimal of 8 chars, -no spaces and only special characters - or . -Write them down & store them in a safe place. -" 17 52 - - # call set password a script - sudo /home/admin/config.scripts/blitz.setpassword.sh a - dialog --backtitle "RaspiBlitz" --msgbox "OK - password A was set\nfor all users pi, admin, root & bitcoin" 6 52 - - sudo /home/admin/config.scripts/blitz.setpassword.sh b - dialog --backtitle "RaspiBlitz" --msgbox "OK - password B was set\nit will be used by additional apps you install." 6 52 - -else - - # just password A - dialog --backtitle "RaspiBlitz - Recover Setup" --msgbox "Your previous RaspiBlitz config was recovered. - -You need to set a new Password A: -A) Master User Password - -Passwords B & C stay as before. - -Follow Password Rules: Minimal of 8 chars, -no spaces and only special characters - or . -Write them down & store them in a safe place. -" 14 52 - - # call set password a script - sudo /home/admin/config.scripts/blitz.setpassword.sh a - -# sucess info dialog -dialog --backtitle "RaspiBlitz" --msgbox "OK - password A was set\nfor all users pi, admin, root & bitcoin" 6 52 - -fi - -# activate lnd & bitcoin service -echo "Enabling Services" -sudo systemctl daemon-reload -sudo systemctl enable lnd.service -sudo systemctl enable ${network}d.service -if [ "${rtlWebinterface}" = "on" ]; then - sudo systemctl enable RTL -fi -if [ "${loop}" = "on" ]; then - sudo systemctl enable loopd -fi -if [ "${BTCRPCexplorer}" = "on" ]; then - sudo systemctl enable btc-rpc-explorer -fi -if [ "${ElectRS}" = "on" ]; then - sudo systemctl enable electrs -fi - -# remove flag that freshly recovered -sudo rm /home/admin/recover.flag - -# when auto-unlock is activated then Password C is needed to be restored on SD card -if [ "${autoUnlock}" = "on" ]; then - - # reset auto-unlock feature - dialog --backtitle "RaspiBlitz - Setup" --msgbox "You had the Auto-Unlock feature enabled. - -In the next dialog you need to re-enter your -ACTUAL/OLD Password C to re-activate the -Auto-Unlock feature. Enter a empty password -to deactivate the Auto-Unlock feature. -" 10 52 - echo "Activating Auto-Unlock (please wait) .." - sudo /home/admin/config.scripts/lnd.autounlock.sh on - dialog --backtitle "RaspiBlitz" --pause " FINAL REBOOT IS NEEDED." 8 52 5 - -else - dialog --backtitle "RaspiBlitz" --pause " OK - Passwords set.\n FINAL REBOOT IS NEEDED." 9 52 5 -fi - -sudo /home/admin/XXshutdown.sh reboot \ No newline at end of file diff --git a/home.admin/20setupDialog.sh b/home.admin/20setupDialog.sh deleted file mode 100755 index 22d89752f..000000000 --- a/home.admin/20setupDialog.sh +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/bash -_temp=$(mktemp -p /dev/shm/) - -## get basic info -source /home/admin/raspiblitz.info 2>/dev/null - -################### -# CHECK IF DNS NEEDS SETTING DURING SETUP -# https://github.com/rootzoll/raspiblitz/issues/787 -################### -sudo /home/admin/config.scripts/internet.dns.sh test - -################### -# ENTER NAME -################### - -# welcome and ask for name of RaspiBlitz -result="" -while [ ${#result} -eq 0 ] - do - l1="Please enter the name of your new RaspiBlitz:\n" - l2="one word, keep characters basic & not too long" - dialog --backtitle "RaspiBlitz - Setup (${network}/${chain})" --inputbox "$l1$l2" 11 52 2>$_temp - result=$( cat $_temp | tr -dc '[:alnum:]-.' | tr -d ' ' ) - shred -u $_temp - echo "processing ..." - sleep 3 - done - -# set lightning alias -sed -i "s/^alias=.*/alias=${result}/g" /home/admin/assets/lnd.${network}.conf - -# store hostname for later - to be set right before the next reboot -# work around - because without a reboot the hostname seems not updates in the whole system -valueExistsInInfoFile=$(sudo cat /home/admin/raspiblitz.info | grep -c "hostname=") -if [ ${valueExistsInInfoFile} -eq 0 ]; then - # add - echo "hostname=${result}" >> /home/admin/raspiblitz.info -else - # update - sed -i "s/^hostname=.*/hostname=${result}/g" /home/admin/raspiblitz.info -fi - -################### -# ENTER PASSWORDS -################### - -# show password info dialog -dialog --backtitle "RaspiBlitz - Setup (${network}/${chain})" --msgbox "RaspiBlitz uses 4 different passwords. -Referenced as password A, B, C and D. - -A) Master User Password -B) Blockchain RPC Password -C) LND Wallet Password -D) LND Seed Password - -Choose now 4 new passwords - all min 8 chars, -no spaces and only special characters - or . -Write them down & store them in a safe place. -" 15 52 - -# call set password a script -sudo /home/admin/config.scripts/blitz.setpassword.sh a - -# sucess info dialog -dialog --backtitle "RaspiBlitz" --msgbox "OK - password A was set\nfor all users pi, admin, root & bitcoin" 6 52 - -# call set password b script -sudo /home/admin/config.scripts/blitz.setpassword.sh b - -# success info dialog -dialog --backtitle "RaspiBlitz" --msgbox "OK - RPC password changed \n\nNow starting the Setup of your RaspiBlitz." 7 52 - -################### -# TOR BY DEFAULT -# https://github.com/rootzoll/raspiblitz/issues/592 -# -################### -echo "runBehindTor=on" >> /home/admin/raspiblitz.info -#whiptail --title ' Privacy Level - How do you want to run your node? ' --yes-button='Public IP' --no-button='TOR NETWORK' --yesno "Running your Lightning node with your Public IP is common and faster, but might reveal your personal identity and location.\n -#You can better protect your privacy with running your lightning node as a TOR Hidden Service from the start, but it can make it harder to connect with other non-TOR nodes and remote mobile apps later on. -# " 12 75 -#if [ $? -eq 1 ]; then -# echo "runBehindTor=on" >> /home/admin/raspiblitz.info -#fi - -# set SetupState -sudo sed -i "s/^setupStep=.*/setupStep=20/g" /home/admin/raspiblitz.info - -clear \ No newline at end of file diff --git a/home.admin/30initHDD.sh b/home.admin/30initHDD.sh deleted file mode 100755 index fb7a9dc04..000000000 --- a/home.admin/30initHDD.sh +++ /dev/null @@ -1,136 +0,0 @@ -#!/bin/bash - -## get basic info -source /home/admin/raspiblitz.info - -clear -echo "" -echo "# *** 30initHDD.sh ***" -echo -echo "# --> Checking HDD/SSD status..." - -# use blitz.datadrive.sh to analyse HDD situation -source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status ${network}) -if [ ${#error} -gt 0 ]; then - echo "# FAIL blitz.datadrive.sh status --> ${error}" - echo "# Please report issue to the raspiblitz github." - exit 1 -fi - -# check if HDD is mounted (secure against formatting a mounted disk with data) -echo "isMounted=${isMounted}" -if [ ${isMounted} -eq 1 ]; then - echo "# FAIL HDD/SSD is mounted - please unmount and call ./30initHDD.sh again" - exit 1 -fi - -# check if HDD contains old RaspiBlitz data (secure against wrongly formatting) -echo "hddRaspiData=${hddRaspiData}" -if [ ${hddRaspiData} -eq 1 ]; then - echo "# FAIL HDD/SSD contains old data - please delete manual and call ./30initHDD.sh again" - exit 1 -fi - -# check if there is a HDD connectecd to use as data drive -echo "hddCandidate=${hddCandidate}" -if [ ${#hddCandidate} -eq 0 ]; then - echo "# FAIL please connect a HDD and call ./30initHDD.sh again" - exit 1 -fi -echo "OK" - -# check minimal size of data drive needed -echo -echo "# --> Check HDD/SSD for Size ..." -# bitcoin: 400 GB -# litecoin: 120 GB -minSize=400 -if [ "${network}" = "litecoin" ]; then - minSize=120 -fi -if [ ${hddGigaBytes} -lt ${minSize} ]; then - echo "# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - echo "# WARNING: HDD is too small" - echo "# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - echo "" - echo "# HDD was detected with the size of ${hddGigaBytes} GB" - echo "# For ${network} at least ${minSize} GB is needed" - echo "" - echo "# If you want to change to a bigger HDD:" - echo "# * Unplug power of RaspiBlitz" - echo "# * Make a fresh SD card again" - echo "# * Start again with bigger HDD" - exit 1 -fi -echo " OK" - -# format drive if it does not have any blockchain or blitz data on it -# to be sure that HDD has no faulty partions, etc. -echo -echo "# --> Check HDD/SSD for Blockchain ..." -echo "# hddGotBlockchain=${hddGotBlockchain}" -raidSizeGB=$(echo "${raidCandidate[0]}" | cut -d " " -f 2) -echo "# raidCandidates=${raidCandidates}" -echo "# raidSizeGB=${raidSizeGB}" -if [ "${hddGotBlockchain}" == "" ] || [ ${hddGotBlockchain} -eq 0 ]; then - - format="ext4" - - # test feature: if there is a USB stick as a raid connected, then format in BTRFS an not in EXT4 - if [ ${raidCandidates} -eq 1 ] && [ ${raidSizeGB} -gt 14 ]; then - - echo - echo "# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - echo "# EXPERIMENTAL FEATURE: BTRFS + RAID" - echo "# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - echo "# You connected an extra USB thumb drive to your RaspiBlitz." - echo "# This activates the exterimental feature of running BTRFS" - echo "# instead of EXT4 and is still unstable but needs testing." - echo "# PRESS ENTER to continue with BTRFS+RAID setup or press" - echo "# CTRL+C, remove device & call ./30initHDD.sh again." - read key - format="btrfs" - - # check that raid cadidate is big enough - # a 32GB drive gets shown with 28GB in mby tests - if [ ${raidSizeGB} -lt 27 ]; then - echo "# FAIL the raid device needs to be at least a 32GB thumb drive." - echo "# Please remove or replace and call ./30initHDD.sh again" - exit 1 - fi - - elif [ ${raidCandidates} -gt 1 ]; then - echo "# FAIL more then one USB raid drive candidate connected." - echo "# Please max one extra usb drive and the call ./30initHDD.sh again" - exit 1 - fi - - - # now partition/format HDD - echo - if (whiptail --title "FORMAT HDD/SSD" --yesno "The connected hard drive needs to get formatted.\nIMPORTANT: This will delete all data on that drive." 8 56); then - clear - echo "# --> Formatting HDD/SSD ..." - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh format ${format} ${hddCandidate}) - if [ ${#error} -gt 0 ]; then - echo "# FAIL blitz.datadrive.sh format --> ${error}" - echo "# Please report issue to the raspiblitz github." - exit 1 - fi - else - clear - echo "# Not formatting the HDD/SSD - Setup Process stopped." - echo "# Rearrange your hardware and restart with a fresh sd card again." - exit 1 - fi - -fi -echo "# OK" - -# set SetupState -sudo sed -i "s/^setupStep=.*/setupStep=30/g" /home/admin/raspiblitz.info - -# automatically now add the HDD to the system -./40addHDD.sh - - diff --git a/home.admin/40addHDD.sh b/home.admin/40addHDD.sh deleted file mode 100755 index 261bdcb23..000000000 --- a/home.admin/40addHDD.sh +++ /dev/null @@ -1,165 +0,0 @@ -#!/bin/bash - -## get basic info -source /home/admin/raspiblitz.info - -echo "" -echo "# *** 40addHDD.sh ***" - -# use blitz.datadrive.sh to analyse HDD situation -source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status ${network}) -if [ ${#error} -gt 0 ]; then - echo "FAIL blitz.datadrive.sh status --> ${error}" - echo "Please report issue to the raspiblitz github." - exit 1 -fi - -# temp mount -if [ "$hddFormat" == "btrfs" ]; then - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddCandidate}) -else - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddPartitionCandidate}) -fi - -if [ ${#error} -gt 0 ]; then - echo "FAIL blitz.datadrive.sh tempmount --> ${error}" - echo "Please report issue to the raspiblitz github." - exit 1 -fi - -# linking drives/directories -echo -echo "# --> Linking drives/directories" -echo "# hddCandidate='${hddCandidate}'" -echo "# hddPartitionCandidate='${hddPartitionCandidate}'" -source <(sudo /home/admin/config.scripts/blitz.datadrive.sh link) -if [ ${#error} -gt 0 ]; then - echo "FAIL blitz.datadrive.sh link --> ${error}" - echo "Please report issue to the raspiblitz github." - exit 1 -fi - -# adding drives to fstab for permanent mount -echo -echo "# --> Adding the data drive to OS ..." -echo "# hddCandidate='${hddCandidate}'" -echo "# hddPartitionCandidate='${hddPartitionCandidate}'" -echo "# hddFormat='${hddFormat}'" -if [ "$hddFormat" == "btrfs" ]; then - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh fstab ${hddCandidate}) -else - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh fstab ${hddPartitionCandidate}) -fi - -if [ ${#error} -gt 0 ]; then - echo "FAIL blitz.datadrive.sh fstab --> ${error}" - echo "Please report issue to the raspiblitz github." - exit 1 -fi - -# adding RAID drive -echo "# isBTRFS=${isBTRFS}" -echo "# raidCandidates=${raidCandidates}" -if [ ${isBTRFS} -eq 1 ] && [ ${raidCandidates} -eq 1 ]; then - - # example string: 'sdb 28 GB SanDisk' - raidDevice=$(echo "${raidCandidate[0]}" | cut -d " " -f 1) - raidSizeGB=$(echo "${raidCandidate[0]}" | cut -d " " -f 2) - - echo - echo "# --> Adding Raid Drive ..." - echo "# raidDevice='${raidDevice}'" - echo "# raidSizeGB=${raidSizeGB}" - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh raid on ${raidDevice}) - if [ ${#error} -gt 0 ]; then - echo "# FAIL blitz.datadrive.sh raid on --> ${error}" - echo "# Please report issue to the raspiblitz github." - exit 1 - fi - - fi - -# init the RASPIBLITZ Config -echo -echo "# --> Init raspiblitz.conf ..." -configFile="/mnt/hdd/raspiblitz.conf" -configExists=$(sudo ls ${configFile} 2>/dev/null | grep -c 'raspiblitz.conf') -if [ ${configExists} -eq 1 ]; then - - # config exists - nothing much to do - echo "# config file already exists on HDD/SSD" - sudo chmod 777 ${configFile} - -else - - # create file and use init values from raspiblitz.info - echo "# CREATING new ${configFile}" - source /home/admin/_version.info - echo "# RASPIBLITZ CONFIG FILE" > /home/admin/raspiblitz.conf - echo "raspiBlitzVersion='${codeVersion}'" >> /home/admin/raspiblitz.conf - echo "network=${network}" >> /home/admin/raspiblitz.conf - echo "chain=${chain}" >> /home/admin/raspiblitz.conf - echo "hostname=${hostname}" >> /home/admin/raspiblitz.conf - echo "displayClass=${displayClass}" >> /home/admin/raspiblitz.conf - echo "displayType=${displayType}" >> /home/admin/raspiblitz.conf - echo "lcdrotate=1" >> /home/admin/raspiblitz.conf - - sudo mv /home/admin/raspiblitz.conf $configFile - sudo chown root:root ${configFile} - sudo chmod 777 ${configFile} - sleep 3 - - # try to determine publicIP and make sure its in raspiblitz.conf - # https://github.com/rootzoll/raspiblitz/issues/312#issuecomment-462675101 - /home/admin/config.scripts/internet.sh update-publicip - -fi - -# link ssh directory from SD card to HDD -echo "# --> SSH key settings" -echo "# copying SSH pub keys to HDD" -sudo cp -r /etc/ssh /mnt/hdd/ssh -# just copy dont link anymore -# see: https://github.com/rootzoll/raspiblitz/issues/1798 -#sudo rm -rf /etc/ssh -#sudo ln -s /mnt/hdd/ssh /etc/ssh -#sudo /home/admin/config.scripts/blitz.systemd.sh update-sshd -echo "# OK" -echo "" - -# set SetupState -sudo sed -i "s/^setupStep=.*/setupStep=40/g" /home/admin/raspiblitz.info - -# check if HDD contains a blockchain to work with -echo "hddGotBlockchain=${hddGotBlockchain}" -if [ ${hddGotBlockchain} -eq 1 ]; then - - echo "# Looks like the HDD is prepared with the Blockchain." - - # ask user if prepared blockchain is to use or self-validate - whiptail --title ' Use Blockchain from HDD/SSD? ' --yes-button='Continue' --no-button='DELETE' --yesno " -On the HDD/SSD Blockchain data was found.\n -Continue if you trust that data to be valid.\n -If you dont trust that data you can now choose to delete it - but keep in mind that this can add multiple days of waiting time to your setup process to regain or self-validate the initial blockchain data. - " 14 75 - if [ $? -eq 1 ]; then - # DELETE - echo "# Deleting old blockchain data .." - sudo rm -R /mnt/hdd/bitcoin 2>/dev/null - sudo rm -R /mnt/hdd/litecoin 2>/dev/null - # HDD is now empty - let setupBlitz - display next options - echo "# HDD now empty --> follow further setup" - ./10setupBlitz.sh - else - # CONTINUE - echo "# Continuing with finishing the system setup ..." - ./60finishHDD.sh - fi - -else - - # HDD is empty - let setupBlitz - display next options - echo "# HDD empty --> follow further setup" - ./10setupBlitz.sh - -fi diff --git a/home.admin/50copyHDD.sh b/home.admin/50copyHDD.sh deleted file mode 100755 index b35b142ba..000000000 --- a/home.admin/50copyHDD.sh +++ /dev/null @@ -1,256 +0,0 @@ -#!/bin/bash - -## get basic info -source /home/admin/raspiblitz.info - -# get local ip -localip=$(ip addr | grep 'state UP' -A2 | egrep -v 'docker0|veth' | grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') - -# Basic Options -OPTIONS=(WINDOWS "Windows" \ - MACOS "Apple MacOSX" \ - LINUX "Linux" \ - BLITZ "RaspiBlitz" - ) - -CHOICE=$(dialog --clear --title " Copy Blockchain from another laptop/node over LAN " --menu "\nWhich system is running on the other laptop/node you want to copy the blockchain from?\n " 14 60 9 "${OPTIONS[@]}" 2>&1 >/dev/tty) - -clear -case $CHOICE in - MACOS) echo "Steve";; - LINUX) echo "Linus";; - WINDOWS) echo "Bill";; - BLITZ) echo "Satoshi";; - *) exit 1;; -esac - -# additional prep if this is used to replace corrupted blockchain -if [ "${setupStep}" = "100" ]; then - # make sure services are not running - echo "stopping services ..." - sudo systemctl stop background - sudo systemctl stop lnd - sudo systemctl stop bitcoind - sudo cp -f /mnt/hdd/bitcoin/bitcoin.conf /home/admin/assets/bitcoin.conf -else - # make sure bitcoind is not running - sudo systemctl stop background <2 /dev/null - sudo systemctl stop bitcoind <2 /dev/null -fi - -# check if old blockchain data exists -hasOldBlockchainData=0 -sizeBlocks=$(sudo du -s /mnt/hdd/bitcoin/blocks 2>/dev/null | tr -dc '[0-9]') -if [ ${#sizeBlocks} -gt 0 ] && [ ${sizeBlocks} -gt 0 ]; then - hasOldBlockchainData=1 -fi -sizeChainstate=$(sudo du -s /mnt/hdd/bitcoin/chainstate 2>/dev/null | tr -dc '[0-9]') -if [ ${#sizeChainstate} -gt 0 ] && [ ${sizeChainstate} -gt 0 ]; then - hasOldBlockchainData=1 -fi - -if [ ${hasOldBlockchainData} -eq 1 ] && [ "$1" != "stop-after-script" ]; then - dialog --title " Old Blockchain Data Found " --yesno "\nDo you want to delete the existing blockchain data now?" 7 60 - response=$? - echo "response(${response})" - if [ "${response}" = "1" ]; then - echo "OK - keep old blockchain - just try to repair by copying over it" - sleep 3 - else - echo "OK - delete old blockchain" - sudo rm -rfv /mnt/hdd/bitcoin/blocks/* 2>/dev/null - sudo rm -rfv /mnt/hdd/bitcoin/chainstate/* 2>/dev/null - sleep 3 - fi -fi - -# make sure /mnt/hdd/bitcoin exists -sudo mkdir /mnt/hdd/bitcoin 2>/dev/null - -# allow all users write to it -sudo chmod 777 /mnt/hdd/bitcoin - -echo -clear -if [ "${CHOICE}" = "WINDOWS" ]; then - echo "****************************************************************************" - echo "Instructions to COPY/TRANSFER SYNCED BLOCKCHAIN from a WINDOWS computer" - echo "****************************************************************************" - echo "" - echo "ON YOUR WINDOWS COMPUTER download and validate the blockchain with the Bitcoin" - echo "Core wallet software (>=0.17.1) from: bitcoincore.org/en/download" - echo "If the Bitcoin Blockchain is synced up - make sure that your Windows computer &" - echo "your RaspiBlitz are in the same local network." - echo "" - echo "Open a fresh terminal on your Windows computer & change into the directory that" - echo "contains the blockchain data - should see folders named 'blocks' & 'chainstate'" - echo "there. Normally on Windows thats: C:\Users\YourUserName\Appdata\Roaming\Bitcoin" - echo "Make sure that the Bitcoin Core Wallet is not running in the background anymore." - echo "" - echo "COPY, PASTE & EXECUTE the following command on your Windows computer terminal:" - echo "scp -r ./chainstate ./blocks bitcoin@${localip}:/mnt/hdd/bitcoin" - echo "" - echo "If asked for a password use PASSWORD A (or 'raspiblitz')." -fi -if [ "${CHOICE}" = "MACOS" ]; then - echo "****************************************************************************" - echo "Instructions to COPY/TRANSFER SYNCED BLOCKCHAIN from a MacOSX computer" - echo "****************************************************************************" - echo "" - echo "ON YOUR MacOSX COMPUTER download and validate the blockchain with the Bitcoin" - echo "Core wallet software (>=0.17.1) from: bitcoincore.org/en/download" - echo "If the Bitcoin Blockchain is synced up - make sure that your MacOSX computer &" - echo "your RaspiBlitz are in the same local network." - echo "" - echo "Open a fresh terminal on your MacOSX computer and change into the directory that" - echo "contains the blockchain data - should see folders named 'blocks' & 'chainstate'" - echo "there. Normally on MacOSX thats: cd ~/Library/Application Support/Bitcoin/" - echo "Make sure that the Bitcoin Core Wallet is not running in the background anymore." - echo "" - echo "COPY, PASTE & EXECUTE the following command on your MacOSX terminal:" - echo "sudo rsync -avhW --progress ./chainstate ./blocks bitcoin@${localip}:/mnt/hdd/bitcoin" - echo "" - echo "You will be asked for passwords. First can be the user password of your MacOSX" - echo "computer and the last is the PASSWORD A (or 'raspiblitz') of this RaspiBlitz." -fi -if [ "${CHOICE}" = "LINUX" ]; then - echo "****************************************************************************" - echo "Instructions to COPY/TRANSFER SYNCED BLOCKCHAIN from a LINUX computer" - echo "****************************************************************************" - echo "" - echo "ON YOUR LINUX COMPUTER download and validate the blockchain with the Bitcoin" - echo "Core wallet software (>=0.17.1) from: bitcoincore.org/en/download" - echo "If the Bitcoin Blockchain is synced up - make sure that your Linux computer &" - echo "your RaspiBlitz are in the same local network." - echo "" - echo "Open a fresh terminal on your Linux computer and change into the directory that" - echo "contains the blockchain data - should see folders named 'blocks' & 'chainstate'" - echo "there. Normally on Linux thats: cd ~/.bitcoin/" - echo "Make sure that the Bitcoin Core Wallet is not running in the background anymore." - echo "" - echo "COPY, PASTE & EXECUTE the following command on your Linux terminal:" - echo "sudo rsync -avhW --progress ./chainstate ./blocks bitcoin@${localip}:/mnt/hdd/bitcoin" - echo "" - echo "You will be asked for passwords. First can be the user password of your Linux" - echo "computer and the last is the PASSWORD A (or 'raspiblitz') of this RaspiBlitz." -fi -if [ "${CHOICE}" = "BLITZ" ]; then - echo "****************************************************************************" - echo "Instructions to COPY/TRANSFER SYNCED BLOCKCHAIN from another RaspiBlitz" - echo "****************************************************************************" - echo "" - echo "The other RaspiBlitz needs a minimum version of 1.6 (if lower, update first)." - echo "Make sure that the other RaspiBlitz is on the same local network." - echo "" - echo "Open a fresh terminal and login per SSH into that other RaspiBlitz." - echo "Once in the main menu go: MAINMENU > REPAIR > COPY-SOURCE" - echo "Follow the given instructions ..." - echo "" - echo "The LOCAL IP of this target RaspiBlitz is: ${localip}" -fi -echo "" -echo "It can take multiple hours until transfer is complete - be patient." -echo "****************************************************************************" -echo "PRESS ENTER if transfers is done OR if you want to choose another option." -sleep 2 -read key - -# make quick check if data is there -anyDataAtAll=0 -quickCheckOK=1 -count=$(sudo find /mnt/hdd/bitcoin/ -iname *.dat -type f | wc -l) -if [ ${count} -gt 0 ]; then - echo "Found data in /mnt/hdd/bitcoin/blocks" - anyDataAtAll=1 -fi -if [ ${count} -lt 300 ]; then - echo "FAIL: transfer seems invalid - less then 300 .dat files (${count})" - quickCheckOK=0 -fi -count=$(sudo find /mnt/hdd/bitcoin/ -iname *.ldb -type f | wc -l) -if [ ${count} -gt 0 ]; then - echo "Found data in /mnt/hdd/bitcoin/chainstate" - anyDataAtAll=1 -fi -if [ ${count} -lt 700 ]; then - echo "FAIL: transfer seems invalid - less then 700 .ldb files (${count})" - quickCheckOK=0 -fi - -echo "*********************************************" -echo "QUICK CHECK RESULT" -echo "*********************************************" - -# just if any data transferred .. -if [ ${anyDataAtAll} -eq 1 ]; then - - # data was invalid - ask user to keep? - if [ ${quickCheckOK} -eq 0 ]; then - - echo "FAIL -> DATA seems incomplete." - - else - - echo "OK -> DATA LOOKS GOOD :D" - sudo rm /mnt/hdd/bitcoin/debug.log 2>/dev/null - - fi - -else - - echo "CANCEL -> NO DATA was copied." - quickCheckOK=0 - -fi -echo "*********************************************" - -# if started with parameter "stop-after-script" - quit here -if [ "$1" == "stop-after-script" ]; then - echo "DONE Copy" - exit 0 -fi - -# if started after intial setup - quit here -if [ "${setupStep}" = "100" ]; then - sudo cp /home/admin/assets/bitcoin.conf /mnt/hdd/bitcoin/bitcoin.conf - sudo systemctl enable bitcoind - echo "DONE - rebooting: sudo shutdown -r now" - sudo shutdown -r now - exit 0 -fi - -# REACT ON QUICK CHECK DURING INITAL SETUP - -if [ ${quickCheckOK} -eq 0 ]; then - - echo "*********************************************" - echo "There seems to be an invalid transfer." - - echo "Wait 5 secs ..." - sleep 5 - - dialog --title " INVALID TRANSFER - TRY AGAIN?" --yesno "Quickcheck shows the data you transferred is invalid/incomplete. Maybe transfere was interrupted and not completed.\n\nDo you want retry/proceed the copy process?" 8 70 - response=$? - echo "response(${response})" - if [ "${response}" == "0" ]; then - /home/admin/50copyHDD.sh - exit 0 - fi - - dialog --title " INVALID TRANSFER - DELETE DATA?" --yesno "Quickcheck shows the data you transferred is invalid/incomplete. This can lead further RaspiBlitz setup to get stuck in error state.\nDo you want to reset/delete data?" 8 60 - response=$? - echo "response(${response})" - case $response in - 1) quickCheckOK=1 ;; - esac - -fi - -if [ ${quickCheckOK} -eq 0 ]; then - echo "Deleting invalid Data ... " - sudo rm -rf /mnt/hdd/bitcoin - sleep 2 -fi - -# setup script will decide the next logical step -/home/admin/10setupBlitz.sh diff --git a/home.admin/50syncHDD.sh b/home.admin/50syncHDD.sh deleted file mode 100755 index 6e14b6fcd..000000000 --- a/home.admin/50syncHDD.sh +++ /dev/null @@ -1,98 +0,0 @@ -#!/bin/bash - -## get basic info -source /home/admin/raspiblitz.info - -# only show warning when bitcoin -if [ "$network" = "bitcoin" ]; then - - # detect hardware version of RaspberryPi - # https://www.unixtutorial.org/command-to-confirm-raspberry-pi-model - raspberryPi=$(cat /proc/device-tree/model | cut -d " " -f 3 | sed 's/[^0-9]*//g') - if [ ${#raspberryPi} -eq 0 ]; then - raspberryPi=0 - fi - echo "RaspberryPi Model Version: ${raspberryPi}" - if [ ${raspberryPi} -lt 4 ]; then - # raspberryPi 3 and lower - msg=" This old RaspberryPi has very limited CPU power.\n" - msg="$msg To sync & validate the complete blockchain\n" - msg="$msg can take multiple days - even weeks\n" - msg="$msg Its recommended to use another option.\n" - msg="$msg \n" - msg="$msg So do you really want start syncing now?" - dialog --title " WARNING " --yesno "${msg}" 11 57 - response=$? - case $response in - 0) echo "--> OK";; - 1) exit 1;; - 255) exit 1;; - esac - fi -fi - -# ask if really sync behind TOR -# if [ "${runBehindTor}" = "on" ]; then -# whiptail --title ' Sync Blockchain from behind TOR? ' --yes-button='Public-Sync' --no-button='TOR-Sync' --yesno "You decided to run your node behind TOR and validate the blockchain with your RaspiBlitz - thats good. But downloading the complete blockchain thru TOR can add some extra time (maybe a day) to the process and adds a heavy load on the TOR network.\n -#Your RaspiBlitz can just run the initial blockchain download with your public IP (Public-Sync) but keep your Lighting node safe behind TOR. -#It would speed up the self-validation while not revealing your Lightning node identity. But for most privacy choose (TOR-Sync). -# " 15 76 -# if [ $? -eq 0 ]; then -# # set flag to not run bitcoin behind TOR during IDB -# echo "ibdBehindTor=off" >> /home/admin/raspiblitz.info -# fi -#fi - -echo "**********************************" -echo "Dont Trust, verify - starting sync" -echo "**********************************" -echo "" -sleep 3 - - -echo "*** Optimizing RAM for Sync ***" - -kbSizeRAM=$(cat /proc/meminfo | grep "MemTotal" | sed 's/[^0-9]*//g') -echo "dont forget to reduce dbcache once IBD is done" > "/home/admin/selfsync.flag" -# RP4 4GB -if [ ${kbSizeRAM} -gt 3500000 ]; then - echo "Detected RAM >=4GB --> optimizing ${network}.conf" - sudo sed -i "s/^dbcache=.*/dbcache=3072/g" /home/admin/assets/${network}.conf -# RP4 2GB -elif [ ${kbSizeRAM} -gt 1500000 ]; then - echo "Detected RAM >=2GB --> optimizing ${network}.conf" - sudo sed -i "s/^dbcache=.*/dbcache=1536/g" /home/admin/assets/${network}.conf -# RP3/4 1GB -else - echo "Detected RAM <=1GB --> optimizing ${network}.conf" - sudo sed -i "s/^dbcache=.*/dbcache=512/g" /home/admin/assets/${network}.conf -fi - -echo "" -echo "*** Activating Blockain Sync ***" - -sudo mkdir /mnt/hdd/${network} 2>/dev/null -sudo /home/admin/XXcleanHDD.sh -blockchain -force -sudo -u bitcoin mkdir /mnt/hdd/${network}/blocks 2>/dev/null -sudo -u bitcoin mkdir /mnt/hdd/${network}/chainstate 2>/dev/null - -# set so that 10raspiblitz.sh has a flag to see that resync is running -sudo touch /mnt/hdd/${network}/blocks/.selfsync -sudo sed -i "s/^state=.*/state=sync/g" /home/admin/raspiblitz.info - -echo "OK - sync is activated" - -if [ "${setupStep}" = "100" ]; then - - # start servives - echo "reboot needed: shutdown -r now" - -else - - # set SetupState - sudo sed -i "s/^setupStep=.*/setupStep=50/g" /home/admin/raspiblitz.info - - # continue setup - ./60finishHDD.sh - -fi diff --git a/home.admin/60finishHDD.sh b/home.admin/60finishHDD.sh deleted file mode 100755 index 02564cc27..000000000 --- a/home.admin/60finishHDD.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/bash - -## get basic info -source /home/admin/raspiblitz.info -source /mnt/hdd/raspiblitz.conf - -echo "" -echo "*** 60finishHDD.sh ***" - -# use blitz.datadrive.sh to analyse HDD situation -source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status ${network}) -if [ ${#error} -gt 0 ]; then - echo "# FAIL blitz.datadrive.sh status --> ${error}" - echo "# Please report issue to the raspiblitz github." - exit 1 -fi - -# check that data drive is mounted -if [ ${isMounted} -eq 0 ]; then - echo "# FAIL - HDD is not mounted." - exit 1 -fi - -###### COPY BASIC NETWORK CONFIG - -echo "" -echo "*** Prepare ${network} ***" -sudo cp /home/admin/assets/${network}.conf /mnt/hdd/${network}/${network}.conf -sudo mkdir /home/admin/.${network} 2>/dev/null -sudo cp /home/admin/assets/${network}.conf /home/admin/.${network}/${network}.conf - -# make sure all files are linked correct -sudo /home/admin/config.scripts/blitz.datadrive.sh link - -# BLITZ WEB SERVICE -/home/admin/config.scripts/blitz.web.sh on - -###### ACTIVATE TOR IF SET DURING SETUP -if [ "${runBehindTor}" = "on" ]; then - - echo "runBehindTor --> ON" - sudo /home/admin/config.scripts/internet.tor.sh on - - # but if IBD is allowed to be public switch off TOR just fro bitcoin - # until IBD is done. background service will after that switch TOR on - if [ "${ibdBehindTor}" = "off" ]; then - echo "ibdBehindTor --> OFF" - sudo /home/admin/config.scripts/internet.tor.sh btcconf-off - else - echo "ibdBehindTor --> ON" - fi - -else - echo "runBehindTor --> OFF" -fi - -###### START NETWORK SERVICE -echo "" -echo "*** Start ${network} ***" -echo "- This can take a while .." -sudo cp /home/admin/assets/${network}d.service /etc/systemd/system/${network}d.service -#sudo chmod +x /etc/systemd/system/${network}d.service -sudo systemctl daemon-reload -sudo systemctl enable ${network}d.service -sudo systemctl start ${network}d.service - -# check if bitcoin has started -bitcoinRunning=0 -loopcount=0 -while [ ${bitcoinRunning} -eq 0 ] -do - >&2 echo "# (${loopcount}/200) checking if ${network}d is running ... " - bitcoinRunning=$(${network}-cli getblockchaininfo 2>/dev/null | grep "initialblockdownload" -c) - sleep 2 - sync - loopcount=$(($loopcount +1)) - if [ ${loopcount} -gt 200 ]; then - /home/admin/XXdebugLogs.sh - echo "***********************************" - echo "FAIL: ${network} failed to start :(" - echo "Get support or try again the command: raspiblitz" - exit 1 - fi -done - -# set SetupState -sudo sed -i "s/^setupStep=.*/setupStep=60/g" /home/admin/raspiblitz.info - -./10setupBlitz.sh \ No newline at end of file diff --git a/home.admin/70initLND.sh b/home.admin/70initLND.sh deleted file mode 100755 index d75117afa..000000000 --- a/home.admin/70initLND.sh +++ /dev/null @@ -1,489 +0,0 @@ -#!/bin/bash - -## get basic info -source /home/admin/raspiblitz.info -source /mnt/hdd/raspiblitz.conf - -echo "" -echo "*** 70initLND.sh ***" - -# CHECK ######### - -echo "*** Check Basic Config ***" -if [ ${#network} -eq 0 ]; then - echo "FAIL - missing: network" - exit 1 -fi -if [ ${#chain} -eq 0 ]; then - echo "FAIL - missing: chain" - exit 1 -fi - -# CHECK ######### - -echo "*** Check ${network} Running ***" -bitcoinRunning=$(systemctl status ${network}d.service 2>/dev/null | grep -c running) -if [ ${bitcoinRunning} -eq 0 ]; then - bitcoinRunning=$(sudo -u bitcoin ${network}-cli -datadir=/home/bitcoin/.${network} getblockchaininfo | grep -c verificationprogress) -fi -if [ ${bitcoinRunning} -eq 0 ]; then - whiptail --title "70initLND - WARNING" --yes-button "Retry" --no-button "EXIT+Logs" --yesno "Service ${network}d is not running." 8 50 - if [ $? -eq 0 ]; then - /home/admin/70initLND.sh - else - /home/admin/XXdebugLogs.sh - fi - exit 1 -fi - -# CHECK ######### - -echo "*** Check ${network} Responding *** (can take a while)" -chainIsReady=0 -loopCount=0 -while [ ${chainIsReady} -eq 0 ] - do - loopCount=$(($loopCount +1)) - result=$(sudo -u bitcoin ${network}-cli -datadir=/home/bitcoin/.${network} getblockchaininfo 2>error.out) - error=$(cat error.out) - rm error.out - if [ ${#error} -gt 0 ]; then - if [ ${loopCount} -gt 33 ]; then - echo "*** TAKES LONGER THEN EXCEPTED ***" - date +%s - echo "result(${result})" - echo "error(${error})" - testnetAdd="" - if [ "${chain}" = "test" ]; then - testnetAdd="testnet3/" - fi - sudo tail -n 5 /mnt/hdd/${network}/${testnetAdd}debug.log - echo "If you see an error -28 relax, just give it some time." - echo "Waiting 1 minute and then trying again ..." - sleep 60 - else - echo "(${loopCount}/33) still waiting .." - sleep 10 - fi - else - echo "OK - chainnetwork is working" - echo "" - chainIsReady=1 - break - fi - done - -# CHECK ######### - -echo "*** Check LND Config ***" -configExists=$( sudo ls /mnt/hdd/lnd/lnd.conf 2>/dev/null | grep -c lnd.conf ) -if [ ${configExists} -eq 0 ]; then - echo "Creating LND config ..." - sudo mkdir /mnt/hdd/lnd 2> /dev/null - sudo chown -R bitcoin:bitcoin /mnt/hdd/lnd - sudo cp /home/admin/assets/lnd.${network}.conf /mnt/hdd/lnd/lnd.conf - sudo chown bitcoin:bitcoin /mnt/hdd/lnd/lnd.conf - if [ -d /home/bitcoin/.lnd ]; then - echo "OK - LND config written" - else - echo "FAIL - Was not able to setup LND" - exit 1 - fi -else - echo "OK - exists" -fi -echo "" - -###### Init LND service & start - -echo "*** Init LND Service & Start ***" -lndRunning=$(sudo systemctl status lnd.service 2>/dev/null | grep -c running) -if [ ${lndRunning} -eq 0 ]; then - - echo "stopping lnd .." - sudo systemctl stop lnd 2>/dev/null - sudo systemctl disable lnd 2>/dev/null - - sed -i "5s/.*/Wants=${network}d.service/" /home/admin/assets/lnd.service - sed -i "6s/.*/After=${network}d.service/" /home/admin/assets/lnd.service - sudo cp /home/admin/assets/lnd.service /etc/systemd/system/lnd.service - #sudo chmod +x /etc/systemd/system/lnd.service - - ###### ACTIVATE TOR IF SET DURING SETUP - if [ "${runBehindTor}" = "on" ]; then - echo "TOR was selected" - sudo /home/admin/config.scripts/internet.tor.sh lndconf-on - else - echo "TOR was not selected" - fi - - echo "Starting LND Service ..." - sudo systemctl enable lnd - sudo systemctl start lnd - - echo "" - echo "waiting ." - sleep 10 - echo "waiting .." - sleep 10 - echo "waiting ..." - sleep 10 - dialog --pause " Starting LND - please wait .." 8 58 90 -fi - -###### Check LND starting - -while [ ${lndRunning} -eq 0 ] -do - lndRunning=$(sudo systemctl status lnd.service | grep -c running) - if [ ${lndRunning} -eq 0 ]; then - date +%s - echo "LND not ready yet ... waiting another 60 seconds." - echo "If this takes too long (more then 10min total) --> CTRL+c and report Problem" - sleep 60 - fi -done -echo "OK - LND is running" -echo "" - -###### Check LND health/fails (to be extended) -fail="" -tlsExists=$(sudo ls /mnt/hdd/lnd/tls.cert 2>/dev/null | grep -c "tls.cert") -if [ ${tlsExists} -eq 0 ]; then - fail="LND was starting, but missing /mnt/hdd/lnd/tls.cert" -fi -if [ ${#fail} -gt 0 ]; then - whiptail --title "70initLND - WARNING" --yes-button "Retry" --no-button "EXIT+Logs" --yesno "${fail}" 8 50 - if [ $? -eq 0 ]; then - /home/admin/70initLND.sh - else - /home/admin/XXdebugLogs.sh - fi - exit 1 -fi - -###### Instructions on Creating/Restoring LND Wallet -walletExists=$(sudo ls /mnt/hdd/lnd/data/chain/${network}/${chain}net/wallet.db 2>/dev/null | grep wallet.db -c) -echo "walletExists(${walletExists})" -sleep 2 -if [ ${walletExists} -eq 0 ]; then - - # UI: Ask if user wants NEW wallet or RECOVER a wallet - OPTIONS=(NEW "Setup a brand new Lightning Node (DEFAULT)" \ - OLD "I had an old Node I want to recover/restore") - CHOICE=$(dialog --backtitle "RaspiBlitz" --clear --title "LND Setup" --menu "LND Data & Wallet" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) - echo "choice($CHOICE)" - - if [ "${CHOICE}" == "NEW" ]; then - -############################ -# NEW WALLET -############################ - - # let user enter password c - sudo shred -u /var/cache/raspiblitz/.pass.tmp 2>/dev/null - sudo touch /var/cache/raspiblitz/.pass.tmp - sudo chown admin:admin /var/cache/raspiblitz/.pass.tmp - sudo /home/admin/config.scripts/blitz.setpassword.sh x "Set your Password C for the LND Wallet Unlock" /var/cache/raspiblitz/.pass.tmp - passwordC=$(sudo cat /var/cache/raspiblitz/.pass.tmp) - sudo shred -u /var/cache/raspiblitz/.pass.tmp 2>/dev/null - - # make sure passwordC is set - if [ ${#passwordC} -eq 0 ]; then - /home/admin/70initLND.sh - exit 1 - fi - - # generate wallet with seed and set passwordC - clear - echo "Generating new Wallet ...." - sudo touch /var/cache/raspiblitz/.seed.tmp - sudo chown admin:admin /var/cache/raspiblitz/.seed.tmp - python3 /home/admin/config.scripts/lnd.initwallet.py new ${passwordC} > /var/cache/raspiblitz/.seed.tmp - source /var/cache/raspiblitz/.seed.tmp - sudo shred -u /var/cache/raspiblitz/.seed.tmp 2>/dev/null - - # in case of error - retry - if [ ${#err} -gt 0 ]; then - whiptail --title "lnd.initwallet.py - ERROR" --msgbox "${err}" 8 50 - /home/admin/70initLND.sh - exit 1 - else - if [ ${#seedwords} -eq 0 ]; then - echo "FAIL!! -> MISSING seedwords data - but also no err data ?!?" - echo "CHECK output data above - PRESS ENTER to restart 70initLND.sh" - read key - /home/admin/70initLND.sh - exit 1 - fi - fi - - if [ ${#seedwords6x4} -eq 0 ]; then - seedwords6x4="${seedwords}" - fi - - ack=0 - while [ ${ack} -eq 0 ] - do - whiptail --title "IMPORTANT SEED WORDS - PLEASE WRITE DOWN" --msgbox "LND Wallet got created. Store these numbered words in a safe location:\n\n${seedwords6x4}" 12 76 - whiptail --title "Please Confirm" --yes-button "Show Again" --no-button "CONTINUE" --yesno " Are you sure that you wrote down the word list?" 8 55 - if [ $? -eq 1 ]; then - ack=1 - fi - done - - if [ ${setupStep} -lt 100 ]; then - sudo sed -i "s/^setupStep=.*/setupStep=65/g" /home/admin/raspiblitz.info - fi - - echo "waiting ." - sleep 10 - - else - -############################ -# RECOVER OLD WALLET -############################ - - OPTIONS=(LNDRESCUE "LND tar.gz-Backupfile (BEST)" \ - SEED+SCB "Seed & channel.backup file (OK)" \ - ONLYSEED "Only Seed Word List (FALLBACK)") - CHOICE=$(dialog --backtitle "RaspiBlitz" --clear --title "RECOVER LND DATA & WALLET" --menu "Data you have to recover from?" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) - - # LND RESCUE - if [ "${CHOICE}" == "LNDRESCUE" ]; then - sudo /home/admin/config.scripts/lnd.rescue.sh restore - echo "" - echo "PRESS ENTER to continue." - read key - /home/admin/70initLND.sh - exit 1 - fi - - # WARNING ON ONLY SEED - if [ "${CHOICE}" == "ONLYSEED" ]; then - - # let people know about the difference between SEED & SEED+SCB - whiptail --title "IMPORTANT INFO" --yes-button "Continue" --no-button "Go Back" --yesno " -Using JUST SEED WORDS will only recover your on-chain funds. -To also try to recover the open channel funds you need the -channel.backup file (since RaspiBlitz v1.2 / LND 0.6-beta) -or having a complete LND rescue-backup from your old node. - " 11 65 - if [ $? -eq 1 ]; then - /home/admin/70initLND.sh - exit 1 - fi - fi - - # IF SEED and SCB - make user upload channel.backup file now - # and it will get automated activated after syns are ready - # TODO: later activate directly with call to lnd.iniwallet.py - if [ "${CHOICE}" == "SEED+SCB" ]; then - - # let lnd.rescue script do the upload process - /home/admin/config.scripts/lnd.rescue.sh scb-up - - # check exit code of script - if [ $? -eq 1 ]; then - echo "USER CANCEL --> back to menu" - /home/admin/70initLND.sh - exit 1 - else - clear - echo "channel.backup will get checked/activated after blockchain/lightning is synced" - sleep 2 - echo "NEXT --> Set password for new LND wallet" - sleep 3 - fi - fi - - clear - - # let user enter password c - sudo shred -u /var/cache/raspiblitz/.pass.tmp 2>/dev/null - sudo touch /var/cache/raspiblitz/.pass.tmp - sudo chown admin:admin /var/cache/raspiblitz/.pass.tmp - sudo /home/admin/config.scripts/blitz.setpassword.sh x "Set your Password C for the LND Wallet Unlock" /var/cache/raspiblitz/.pass.tmp - passwordC=$(sudo cat /var/cache/raspiblitz/.pass.tmp) - sudo shred -u /var/cache/raspiblitz/.pass.tmp 2>/dev/null - - # get seed word list - if [ "${CHOICE}" == "SEED+SCB" ] || [ "${CHOICE}" == "ONLYSEED" ]; then - - wordsCorrect=0 - while [ ${wordsCorrect} -eq 0 ] - do - # dialog to enter - sudo touch /var/cache/raspiblitz/.seed.tmp - sudo chown admin:admin /var/cache/raspiblitz/.seed.tmp - dialog --backtitle "RaspiBlitz - LND Recover" --inputbox "Please enter/paste the SEED WORD LIST:\n(just the words, seperated by spaces, in correct order as numbered)" 9 78 2>/var/cache/raspiblitz/.seed.tmp - wordstring=$( cat /var/cache/raspiblitz/.seed.tmp | sed 's/[^a-zA-Z0-9 ]//g' ) - shred -u /var/cache/raspiblitz/.seed.tmp - echo "processing ... ${wordstring}" - - # check correct number of words - wordcount=$(echo "${wordstring}" | wc -w) - if [ ${wordcount} -eq 24 ]; then - echo "OK - 24 words" - wordsCorrect=1 - else - whiptail --title " WARNING " \ - --yes-button "Try Again" \ - --no-button "Cancel" \ - --yesno " -The word list has ${wordcount} words. But it must be 24. -Please check your list and try again. - -Best is to write words in external editor -and then copy and paste them into dialog. - -The Word list should look like this: -wordone wordtweo wordthree ... - -" 16 52 - - if [ $? -eq 1 ]; then - /home/admin/70initLND.sh - exit 1 - fi - fi - done - - # ask if seed was protected by password D - passwordD="" - dialog --title "SEED PASSWORD" --yes-button "No extra Password" --no-button "Yes" --yesno " -Are your seed words protected by an extra password? - -During wallet creation LND offers to set an extra password -to protect the seed words. Most users did not set this. - " 11 65 - if [ $? -eq 1 ]; then - sudo shred -u /var/cache/raspiblitz/.pass.tmp 2>/dev/null - sudo touch /var/cache/raspiblitz/.pass.tmp - sudo chown admin:admin /var/cache/raspiblitz/.pass.tmp - sudo /home/admin/config.scripts/blitz.setpassword.sh x "Enter extra Password D" /var/cache/raspiblitz/.pass.tmp empty-allowed - passwordD=$(sudo cat /var/cache/raspiblitz/.pass.tmp) - sudo shred -u /var/cache/raspiblitz/.pass.tmp 2>/dev/null - fi - - fi - - # FOR NOW: let channel.backup file get activated by lncli after syncs - # LATER: make different call to lnd.initwallet.py - if [ "${CHOICE}" == "SEED+SCB" ] || [ "${CHOICE}" == "ONLYSEED" ]; then - - # trigger wallet recovery - source <(python3 /home/admin/config.scripts/lnd.initwallet.py seed ${passwordC} "${wordstring}" ${passwordD} 2>/dev/null) - - # check if wallet was created for real - if [ ${#err} -eq 0 ]; then - walletExists=$(sudo ls /mnt/hdd/lnd/data/chain/${network}/${chain}net/wallet.db 2>/dev/null | grep wallet.db -c) - if [ ${walletExists} -eq 0 ]; then - err="Was not able to create wallet (unknown error)." - fi - fi - - # set fundRecovery=1 in raspiblitz.info - sed -i "s/^fundRecovery=.*/fundRecovery=1/g" /home/admin/raspiblitz.info - - # user feedback - if [ ${#err} -eq 0 ]; then - dialog --title " SUCCESS " --msgbox " -Looks good :) LND was able to recover the wallet. - -IMPORTANT: LND needs now to scan the blockchain -for your funds - this can take some extra time. - " 10 60 - clear - - else - whiptail --title " FAIL " --msgbox " -Something went wrong - see info below: - -${err} -${errMore} - " 13 72 - clear - echo "Restarting LND Wallet Setup .." - sleep 2 - echo - /home/admin/70initLND.sh - exit 1 - fi - fi - - fi # END OLD WALLET - -else - echo "OK - LND wallet already exists." -fi - - -echo "waiting .." -sleep 10 -dialog --pause " Waiting for LND - please wait .." 8 58 45 - -############################ -# Copy LND macaroons to admin -############################ - -clear -echo "" -echo "*** Copy LND Macaroons to user admin ***" - -# check if macaroon exists and if not try to unlock LND wallet first -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 - /home/admin/config.scripts/lnd.unlock.sh - sleep 3 -fi - -# 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 - sudo -u bitcoin ls -la /home/bitcoin/.lnd/data/chain/${network}/${chain}net/admin.macaroon - echo "" - echo "FAIL - LND Macaroons not created" - echo "Please check the following LND issue:" - echo "https://github.com/lightningnetwork/lnd/issues/890" - echo "You may want try again with starting ./70initLND.sh" - exit 1 -fi - -# copy macaroons to all needed users -sudo /home/admin/config.scripts/lnd.credentials.sh sync -echo "OK - LND Macaroons created and copied" -echo "" - -###### Unlock Wallet (if needed) -echo "*** Check Wallet Lock ***" -locked=$(sudo tail -n 1 /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log 2>/dev/null | grep -c unlock) -if [ ${locked} -gt 0 ]; then - echo "OK - Wallet is locked ... starting unlocking dialog" - /home/admin/config.scripts/lnd.unlock.sh -else - echo "OK - Wallet is already unlocked" -fi -echo "" - -if [ ${setupStep} -lt 100 ]; then - - # set SetupState (scan is done - so its 80%) - sudo sed -i "s/^setupStep=.*/setupStep=80/g" /home/admin/raspiblitz.info - - ###### finishSetup - sudo /home/admin/90finishSetup.sh - sudo /home/admin/95finalSetup.sh - -else - - # its important that RaspiBlitz dont get rebooted - # before LND rescan is finished - whiptail --title "RESET DONE" --msgbox " -OK LND Reset is done. -You may now give it -extra time to rescan. -" 10 25 - -fi diff --git a/home.admin/80scanLND.sh b/home.admin/80scanLND.sh deleted file mode 100755 index e269d0a49..000000000 --- a/home.admin/80scanLND.sh +++ /dev/null @@ -1,274 +0,0 @@ -#!/bin/bash - -source /home/admin/_version.info -source /home/admin/raspiblitz.info -source /mnt/hdd/raspiblitz.conf - -# all system/service info gets detected by blitz.statusscan.sh -source <(sudo /home/admin/config.scripts/blitz.statusscan.sh) -source <(sudo /home/admin/config.scripts/internet.sh status) - -# when admin and no other error found run LND setup check -if [ "$USER" == "admin" ] && [ ${#lndErrorFull} -eq 0 ]; then - lndErrorFull=$(sudo /home/admin/config.scripts/lnd.check.sh basic-setup | grep "err=" | tail -1) -fi - -# set follow up info different for LCD and ADMIN -adminStr="ssh admin@${localip} ->Password A" -if [ "$USER" == "admin" ]; then - adminStr="Use CTRL+c to EXIT to Terminal" -fi - -# waiting for Internet connection -if [ "${state}" = "nointernet" ]; then - l1="Waiting for Internet ...\n" - l2="Please check infrastructure:\n" - l3="Router online? Network connected?\n" - dialog --backtitle "RaspiBlitz ${codeVersion} ${localip}" --infobox "$l1$l2$l3" 5 45 - sleep 3 - exit 0 -fi - -# bitcoin errors always first -if [ ${bitcoinActive} -eq 0 ] || [ ${#bitcoinErrorFull} -gt 0 ] || [ "${1}" == "blockchain-error" ]; then - - #################### - # Copy Blockchain Source Mode - # https://github.com/rootzoll/raspiblitz/issues/1081 - #################### - - if [ "${state}" = "copysource" ]; then - l1="Copy Blockchain Source Modus\n" - l2="May needs restart node when done.\n" - l3="Restart from Terminal: restart" - dialog --backtitle "RaspiBlitz ${codeVersion} (${state}) ${localIP}" --infobox "$l1$l2$l3" 5 45 - sleep 3 - exit 1 - fi - - #################### - # On Bitcoin Error - #################### - - height=6 - width=43 - title="Blockchain Info" - - if [ ${#bitcoinErrorShort} -eq 0 ]; then - bitcoinErrorShort="Initial Startup - Please Wait" - fi - - if [ "$USER" != "admin" ]; then - - if [ ${uptime} -gt 600 ]; then - if [ ${uptime} -gt 1000 ] || [ ${#bitcoinErrorFull} -gt 0 ] || [ "${1}" == "blockchain-error" ]; then - infoStr=" The ${network}d service is NOT RUNNING!\n ${bitcoinErrorShort}\n Login for more details & options:" - else - infoStr=" The ${network}d service is running:\n ${bitcoinErrorShort}\n Login with SSH for more details:" - fi - else - infoStr=" The ${network}d service is starting:\n ${bitcoinErrorShort}\n Login with SSH for more details:" - fi - - else - - # output when user login in as admin and bitcoind is not running - if [ ${uptime} -lt 600 ]; then - infoStr=" The ${network}d service is starting:\n ${bitcoinErrorShort}\n Please wait at least 10min ..." - elif [[ "${bitcoinErrorFull}" == *"error code: -28"* ]]; then - infoStr=" The ${network}d service is warming up:\n ${bitcoinErrorShort}\n Please wait ..." - elif [ ${#bitcoinErrorFull} -gt 0 ] || [ "${bitcoinErrorShort}" == "Error found in Logs" ] || [ "${1}" == "blockchain-error" ]; then - clear - echo "" - echo "*****************************************" - echo "* The ${network}d service is not running." - echo "*****************************************" - echo "If you just started some config/setup, this might be OK." - echo - if [ ${startcountBlockchain} -gt 1 ]; then - echo "${startcountBlockchain} RESTARTS DETECTED - ${network}d might be in a error loop" - cat /home/admin/systemd.blockchain.log | grep "ERROR" | tail -n -1 - echo - fi - if [ ${#bitcoinErrorFull} -gt 0 ]; then - echo "More Error Detail:" - echo ${bitcoinErrorFull} - echo - fi - - echo "POSSIBLE OPTIONS:" - source <(/home/admin/config.scripts/network.txindex.sh status) - if [ "${txindex}" == "1" ]; then - echo "-> Use command 'repair' and then choose 'DELETE-INDEX' to try rebuilding transaction index." - fi - echo "-> Use command 'repair' and then choose 'RESET-CHAIN' to try downloading new blockchain." - echo "-> Use command 'debug' for more log output you can use for getting support." - echo "-> Use command 'menu' to open main menu." - echo "-> Have you tried to turn it off and on again? Use command 'restart'" - echo "" - exit 1 - fi - - fi - -# LND errors second -elif [ ${lndActive} -eq 0 ] || [ ${#lndErrorFull} -gt 0 ] || [ "${1}" == "lightning-error" ]; then - - #################### - # On LND Error - #################### - - height=6 - width=43 - title="Lightning Info" - if [ ${uptime} -gt 600 ] || [ "${1}" == "lightning-error" ]; then - if [ ${#lndErrorShort} -gt 0 ]; then - height=6 - lndErrorShort=" ${lndErrorShort}\n" - fi - if [ ${lndActive} -eq 0 ]; then - infoStr=" The LND service is not running.\n${lndErrorShort} Login for more details:" - else - infoStr=" The LND service is running with error.\n${lndErrorShort} Login for more details:" - fi - if [ "$USER" == "admin" ]; then - clear - echo "" - echo "****************************************" - if [ ${lndActive} -eq 0 ]; then - echo "* The LND service is not running." - else - echo "* The LND service is running with error." - fi - echo "****************************************" - echo "If you just started some config/setup, this might be OK." - echo - if [ ${startcountLightning} -gt 1 ]; then - echo "${startcountLightning} RESTARTS DETECTED - LND might be in a error loop" - cat /home/admin/systemd.lightning.log | grep "ERROR" | tail -n -1 - fi - sudo journalctl -u lnd -b --no-pager -n14 | grep "lnd\[" - sudo /home/admin/config.scripts/lnd.check.sh basic-setup | grep "err=" - if [ ${#lndErrorFull} -gt 0 ]; then - echo "More Error Detail:" - echo ${lndErrorFull} - fi - echo - echo "-> Use command 'repair' and then choose 'BACKUP-LND' to make a just in case backup." - echo "-> Use command 'debug' for more log output you can use for getting support." - echo "-> Use command 'menu' to open main menu." - echo "-> Have you tried to turn it off and on again? Use command 'restart'" - echo "" - exit 1 - else - source <(sudo /home/admin/config.scripts/lnd.check.sh basic-setup) - if [ ${wallet} -eq 0 ] || [ ${macaroon} -eq 0 ] || [ ${config} -eq 0 ] || [ ${tls} -eq 0 ]; then - infoStr=" The LND service needs RE-SETUP.\n Login with SSH to continue:" - fi - fi - else - infoStr=" The LND service is starting.\n Login for more details:" - if [ "$USER" == "admin" ]; then - infoStr=" The LND service is starting.\n Please wait up to 5min ..." - fi - fi - -# if LND wallet is locked -elif [ ${walletLocked} -gt 0 ]; then - - height=5 - width=43 - - if [ "${autoUnlock}" = "on" ]; then - title="Auto Unlock" - infoStr=" Waiting for Wallet Auto-Unlock.\n Please wait up to 5min ..." - else - - if [ "$USER" == "admin" ]; then - /home/admin/config.scripts/lnd.unlock.sh - else - title="Action Required" - infoStr=" LND WALLET IS LOCKED !!!\n" - if [ "${rtlWebinterface}" = "on" ]; then - height=6 - infoStr="${infoStr} Browser: http://${localip}:3000\n PasswordB=login / PasswordC=unlock" - else - infoStr="${infoStr} Please use SSH to unlock:" - fi - if [ ${startcountLightning} -gt 1 ]; then - width=45 - height=$((height+3)) - infoStr=" LIGHTNING RESTARTED - login for details\n${infoStr}" - adminStr="${adminStr}\n or choose 'INFO' in main menu\n or type 'raspiblitz' on terminal" - fi - fi - - fi - -else - - #################### - # Sync Progress - #################### - - # check number of peers - source <(sudo -u admin /home/admin/config.scripts/network.monitor.sh peer-status) - - # basic dialog info - height=6 - width=45 - title="Node is Syncing" - actionString="Please wait - this can take some time" - - # formatting BLOCKCHAIN SYNC PROGRESS - if [ ${#syncProgress} -eq 0 ]; then - if [ ${startcountBlockchain} -lt 2 ]; then - syncProgress="waiting" - else - syncProgress="${startcountBlockchain} restarts" - actionString="Login with SSH for more details:" - fi - elif [ ${#syncProgress} -lt 6 ]; then - syncProgress=" ${syncProgress} % ${peers} peers" - else - syncProgress="${syncProgress} % ${peers} peers" - fi - - # formatting LIGHTNING SCAN PROGRESS - if [ ${#scanProgress} -eq 0 ]; then - - # in case of LND RPC is not ready yet - if [ ${scanTimestamp} -eq -2 ]; then - - scanProgress="prepare sync" - - # in case LND restarting >2 - elif [ ${startcountLightning} -gt 2 ]; then - - scanProgress="${startcountLightning} restarts" - actionString="Login with SSH for more details:" - - # check if a specific error can be identified for restarts - lndSetupErrorCount=$(sudo /home/admin/config.scripts/lnd.check.sh basic-setup | grep -c "err=") - if [ ${lndSetupErrorCount} -gt 0 ]; then - scanProgress="possible error" - fi - - # unkown cases - else - scanProgress="waiting" - fi - - elif [ ${#scanProgress} -lt 6 ]; then - scanProgress=" ${scanProgress} % ${lndPeers} peers" - else - scanProgress="${scanProgress} % ${lndPeers} peers" - fi - - # setting info string - infoStr=" Blockchain Progress : ${syncProgress}\n Lightning Progress : ${scanProgress}\n ${actionString}" - -fi - -# display info to user -dialog --title " ${title} " --backtitle "RaspiBlitz ${codeVersion} ${hostname} / ${network} / ${chain} / ${tempCelsius}°C" --infobox "${infoStr}\n ${adminStr}" ${height} ${width} diff --git a/home.admin/90finishSetup.sh b/home.admin/90finishSetup.sh deleted file mode 100755 index e1356f8f1..000000000 --- a/home.admin/90finishSetup.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/bash -echo "" - -# add bonus scripts (auto install deactivated to reduce third party repos) -/home/admin/91addBonus.sh - -###### SWAP File -source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) -if [ ${isSwapExternal} -eq 0 ]; then - - echo "No external SWAP found - creating ... " - sudo /home/admin/config.scripts/blitz.datadrive.sh swap on - -else - echo "SWAP already OK" -fi - -####### FIREWALL - just install (not configure) -echo "" -echo "*** Setting and Activating Firewall ***" -echo "deny incoming connection on other ports" -sudo ufw default deny incoming -echo "allow outgoing connections" -sudo ufw default allow outgoing -echo "allow: ssh" -sudo ufw allow ssh -echo "allow: bitcoin testnet" -sudo ufw allow 18333 comment 'bitcoin testnet' -echo "allow: bitcoin mainnet" -sudo ufw allow 8333 comment 'bitcoin mainnet' -echo "allow: litecoin mainnet" -sudo ufw allow 9333 comment 'litecoin mainnet' -echo 'allow: lightning testnet' -sudo ufw allow 19735 comment 'lightning testnet' -echo "allow: lightning mainnet" -sudo ufw allow 9735 comment 'lightning mainnet' -echo "allow: lightning gRPC" -sudo ufw allow 10009 comment 'lightning gRPC' -echo "allow: lightning REST API" -sudo ufw allow 8080 comment 'lightning REST API' -echo "allow: transmission" -sudo ufw allow 49200:49250/tcp comment 'rtorrent' -echo "allow: public web HTTP" -sudo ufw allow from any to any port 80 comment 'allow public web HTTP' -echo "allow: local web admin HTTPS" -sudo ufw allow from 10.0.0.0/8 to any port 443 comment 'allow local LAN HTTPS' -sudo ufw allow from 172.16.0.0/12 to any port 443 comment 'allow local LAN HTTPS' -sudo ufw allow from 192.168.0.0/16 to any port 443 comment 'allow local LAN HTTPS' -echo "open firewall for auto nat discover (see issue #129)" -sudo ufw allow proto udp from 10.0.0.0/8 port 1900 to any comment 'allow local LAN SSDP for UPnP discovery' -sudo ufw allow proto udp from 172.16.0.0/12 port 1900 to any comment 'allow local LAN SSDP for UPnP discovery' -sudo ufw allow proto udp from 192.168.0.0/16 port 1900 to any comment 'allow local LAN SSDP for UPnP discovery' -echo "enable lazy firewall" -sudo ufw --force enable -echo "" - -# update system -echo "" -echo "*** Update System ***" -sudo apt-mark hold raspberrypi-bootloader -sudo apt-get update -y -echo "OK - System is now up to date" - -# mark setup is done -sudo sed -i "s/^setupStep=.*/setupStep=100/g" /home/admin/raspiblitz.info diff --git a/home.admin/91addBonus.sh b/home.admin/91addBonus.sh deleted file mode 100755 index 9287c512d..000000000 --- a/home.admin/91addBonus.sh +++ /dev/null @@ -1,12 +0,0 @@ - -mkdir /home/admin/tmpScriptDL -cd /home/admin/tmpScriptDL -echo "installing bash completion for bitcoin-cli and lncli" -wget https://raw.githubusercontent.com/bitcoin/bitcoin/master/contrib/bitcoin-cli.bash-completion -wget https://raw.githubusercontent.com/lightningnetwork/lnd/master/contrib/lncli.bash-completion -sudo cp *.bash-completion /etc/bash_completion.d/ -echo "OK - bash completion available after next login" -echo "type \"bitcoin-cli getblockch\", press [Tab] → bitcoin-cli getblockchaininfo" -rm -r /home/admin/tmpScriptDL - -cd diff --git a/home.admin/95finalSetup.sh b/home.admin/95finalSetup.sh deleted file mode 100755 index 61f655c2b..000000000 --- a/home.admin/95finalSetup.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash -echo "" - -# load setup config -source /home/admin/raspiblitz.info - -# in case the config already exists -source /mnt/hdd/raspiblitz.conf 2>/dev/null - -# load version -source /home/admin/_version.info - -# show info to user -sudo sed -i "s/^state=.*/state=reboot/g" /home/admin/raspiblitz.info -dialog --backtitle "RaspiBlitz - Setup" --title " RaspiBlitz Setup is done :) " --msgbox " - After reboot RaspiBlitz - needs to be unlocked and - sync with the network. - - Press OK for a final reboot. -" 10 42 - -# let migration/init script do the rest -/home/admin/_bootstrap.migration.sh - -# copy logfile to analyse setup -cp $logFile /home/admin/raspiblitz.setup.log - -# set the name of the node -echo "Setting the Name/Alias/Hostname .." -sudo /home/admin/config.scripts/lnd.setname.sh ${hostname} - -# expanding the root of the sd card -if [ "${baseimage}" = "raspbian" ] || [ "${baseimage}" = "raspios_arm64" ]; then - sudo raspi-config --expand-rootfs - sudo sed -i "s/^fsexpanded=.*/fsexpanded=1/g" /home/admin/raspiblitz.info -elif [ "${baseimage}" = "armbian" ]; then - sudo /usr/lib/armbian/armbian-resize-filesystem start - sudo sed -i "s/^fsexpanded=.*/fsexpanded=1/g" /home/admin/raspiblitz.info -fi - -# mark setup is done -sudo sed -i "s/^setupStep=.*/setupStep=100/g" /home/admin/raspiblitz.info - -clear -echo "Setup done. Rebooting now." -sudo -u bitcoin ${network}-cli stop - -sleep 3 -sudo /home/admin/XXshutdown.sh reboot \ No newline at end of file diff --git a/home.admin/97addMobileWallet.sh b/home.admin/97addMobileWallet.sh index 874286136..4de3e2f44 100755 --- a/home.admin/97addMobileWallet.sh +++ b/home.admin/97addMobileWallet.sh @@ -155,7 +155,7 @@ clear echo "creating install info ..." case $CHOICE in CLOSE) - exit 1; + exit 0; ;; SPHINX) if [ "${sphinxrelay}" != "on" ]; then @@ -173,7 +173,7 @@ case $CHOICE in fi # make pairing thru sphinx relay script /home/admin/config.scripts/bonus.sphinxrelay.sh menu - exit 1; + exit 0; ;; ZAP_IOS) appstoreLink="https://apps.apple.com/us/app/zap-bitcoin-lightning-wallet/id1406311960" @@ -206,7 +206,7 @@ Or scan the qr code on the LCD with your mobile phone. choose_IP_or_TOR fi /home/admin/config.scripts/bonus.lndconnect.sh zap-ios ${connect} - exit 1; + exit 0; ;; ZAP_ANDROID) appstoreLink="https://play.google.com/store/apps/details?id=zapsolutions.zap" @@ -229,7 +229,7 @@ Or scan the qr code on the LCD with your mobile phone. choose_IP_or_TOR fi /home/admin/config.scripts/bonus.lndconnect.sh zap-android ${connect} - exit 1; + exit 0; ;; SENDMANY_ANDROID) @@ -241,7 +241,7 @@ To use the chat feature of the SendMany app, you need to activate the Keysend fe Please go to MAINMENU > SERVICES and activate KEYSEND first. " 12 65 - exit 1 + exit 0 fi appstoreLink="https://github.com/fusion44/sendmany/releases" @@ -256,7 +256,7 @@ Please go to MAINMENU > SERVICES and activate KEYSEND first. /home/admin/config.scripts/blitz.display.sh hide checkIP2TOR LND-GRPC-API /home/admin/config.scripts/bonus.lndconnect.sh sendmany-android ${connect} - exit 1; + exit 0; ;; ZEUS_IOS) appstoreLink="https://testflight.apple.com/join/gpVFzEHN" @@ -271,7 +271,7 @@ Please go to MAINMENU > SERVICES and activate KEYSEND first. fi /home/admin/config.scripts/blitz.display.sh hide /home/admin/config.scripts/bonus.lndconnect.sh zeus-ios tor - exit 1; + exit 0; ;; ZEUS_ANDROID) appstoreLink="https://play.google.com/store/apps/details?id=app.zeusln.zeus" @@ -290,7 +290,7 @@ Or scan the qr code on the LCD with your mobile phone. fi /home/admin/config.scripts/blitz.display.sh hide /home/admin/config.scripts/bonus.lndconnect.sh zeus-android tor - exit 1; + exit 0; ;; FULLY_NODED) appstoreLink="https://apps.apple.com/us/app/fully-noded/id1436425586" @@ -309,6 +309,6 @@ Or scan the qr code on the LCD with your mobile phone. fi /home/admin/config.scripts/blitz.display.sh hide /home/admin/config.scripts/bonus.fullynoded.sh - exit 1; + exit 0; ;; esac diff --git a/home.admin/98repairBlockchain.sh b/home.admin/98repairBlockchain.sh index e31dcad59..c4c101903 100755 --- a/home.admin/98repairBlockchain.sh +++ b/home.admin/98repairBlockchain.sh @@ -26,14 +26,14 @@ elif [ "${CHOICE}" = "RESYNC" ]; then dialog --pause "OK. System will reboot to activate changes." 8 58 8 clear echo "rebooting .. (please wait)" - sudo /home/admin/XXshutdown.sh reboot + sudo /home/admin/config.scripts/blitz.shutdown.sh reboot elif [ "${CHOICE}" = "REINDEX" ]; then echo "Starting REINDEX ..." sudo /home/admin/config.scripts/network.reindex.sh elif [ "${CHOICE}" = "BACKUP" ]; then - sudo /home/admin/config.scripts/lnd.rescue.sh backup + sudo /home/admin/config.scripts/lnd.backup.sh lnd-export-gui echo "PRESS ENTER to continue." read key diff --git a/home.admin/98repairMenu.sh b/home.admin/98repairMenu.sh index 4a9c45ee3..a6b172565 100755 --- a/home.admin/98repairMenu.sh +++ b/home.admin/98repairMenu.sh @@ -20,7 +20,7 @@ Download LND Data Backup now? echo "*************************************" echo "please wait .." sleep 2 - /home/admin/config.scripts/lnd.rescue.sh backup + /home/admin/config.scripts/lnd.backup.sh lnd-export-gui echo echo "PRESS ENTER to continue once you are done downloading." read key @@ -31,7 +31,7 @@ Download LND Data Backup now? echo "*************************************" echo "please wait .." sleep 2 - /home/admin/config.scripts/lnd.rescue.sh backup no-download + /home/admin/config.scripts/lnd.backup.sh lnd-export fi } @@ -46,123 +46,6 @@ RaspiBlitz image to your SD card. " 12 40 } -copyHost() -{ - clear - echo - echo "# *** Copy Blockchain Source Modus ***" - - echo "# get IP of RaspiBlitz to copy to ..." - targetIP=$(whiptail --inputbox "\nPlease enter the LOCAL IP of the\nRaspiBlitz to copy Blockchain to:" 10 38 "" --title " Target IP " --backtitle "RaspiBlitz - Copy Blockchain" 3>&1 1>&2 2>&3) - targetIP=$(echo "${targetIP[0]}") - localIP=$(ip addr | grep 'state UP' -A2 | egrep -v 'docker0|veth' | grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') - if [ ${#targetIP} -eq 0 ]; then - return - fi - if [ "${localIP}" == "${targetIP}" ]; then - whiptail --msgbox "Dont type in the local IP of this RaspiBlitz,\nthe LOCAL IP of the other RaspiBlitz is needed." 8 54 "" --title " Testing Target IP " --backtitle "RaspiBlitz - Copy Blockchain" - return - fi - canPingIP=$(ping ${targetIP} -c 1 | grep -c "1 received") - if [ ${canPingIP} -eq 0 ]; then - whiptail --msgbox "Was not able to contact/ping: ${targetIP}\n\n- check if IP of target RaspiBlitz is correct.\n- check to be on the same local network.\n- try again ..." 11 58 "" --title " Testing Target IP " --backtitle "RaspiBlitz - Copy Blockchain" - return - fi - - echo "# get Password of RaspiBlitz to copy to ..." - targetPassword=$(whiptail --passwordbox "\nPlease enter the PASSWORD A of the\nRaspiBlitz to copy Blockchain to:" 10 38 "" --title "Target Password" --backtitle "RaspiBlitz - Copy Blockchain" 3>&1 1>&2 2>&3) - if [ ${#targetPassword} -eq 0 ]; then - return - fi - - sudo rm /root/.ssh/known_hosts 2>/dev/null - canLogin=$(sudo sshpass -p "${targetPassword}" ssh -t -o StrictHostKeyChecking=no bitcoin@${targetIP} "echo 'working'" 2>/dev/null | grep -c 'working') - if [ ${canLogin} -eq 0 ]; then - whiptail --msgbox "Password was not working for IP: ${targetIP}\n\n- check thats the correct IP for correct RaspiBlitz\n- check that you used PASSWORD A and had no typo\n- If you tried too often, wait 1h try again" 11 58 "" --title " Testing Target Password " --backtitle "RaspiBlitz - Copy Blockchain" - return - fi - - echo "# stopping services ..." - sudo systemctl stop background - sudo systemctl stop lnd - sudo systemctl stop ${network}d - sudo systemctl disable ${network}d - sleep 5 - sudo systemctl stop bitcoind 2>/dev/null - - clear - echo - echo "# Starting copy over LAN (around 4-6 hours) ..." - sed -i "s/^state=.*/state=copysource/g" /home/admin/raspiblitz.info - cd /mnt/hdd/${network} - - # transfere beginning flag - date +%s > /home/admin/copy_begin.time - sudo sshpass -p "${targetPassword}" rsync -avhW -e 'ssh -o StrictHostKeyChecking=no -p 22' /home/admin/copy_begin.time bitcoin@${targetIP}:/mnt/hdd/bitcoin - sudo rm -f /home/admin/copy_begin.time - - # repeat the syncing of directories until - # a) there are no files left to transfere (be robust against failing connections, etc) - # b) the user hits a key to break loop after report - - - while : - do - - # transfere blockchain data - rm -f ./transferred.rsync - sudo sshpass -p "${targetPassword}" rsync -avhW -e 'ssh -o StrictHostKeyChecking=no -p 22' --info=progress2 --log-file=./transferred.rsync ./chainstate ./blocks bitcoin@${targetIP}:/mnt/hdd/bitcoin - - # check result - # the idea is even after successfull transfer the loop will run a second time - # but on the second time there will be no files transfered (log lines are below 4) - # thats the signal that its done - linesInLogFile=$(wc -l ./transferred.rsync | cut -d " " -f 1) - if [ ${linesInLogFile} -lt 4 ]; then - echo "" - echo "OK all files transfered. DONE" - sleep 2 - break - fi - - # wait 20 seconds for user exiting loop - echo "" - echo -en "OK on sync loop done ... will test in another if all was transferred." - echo -en "PRESS X TO MANUALLY FINISH SYNCING" - read -n 1 -t 6 keyPressed - if [ "${keyPressed}" = "x" ]; then - echo "" - echo "Ending Sync ..." - sleep 2 - break - fi - - done - - # transfere end flag - sed -i "s/^state=.*/state=/g" /home/admin/raspiblitz.info - date +%s > /home/admin/copy_end.time - sudo sshpass -p "${targetPassword}" rsync -avhW -e 'ssh -o StrictHostKeyChecking=no -p 22' /home/admin/copy_end.time bitcoin@${targetIP}:/mnt/hdd/bitcoin - sudo rm -f /home/admin/copy_end.time - - echo "# start services again ..." - sudo systemctl enable ${network}d - sudo systemctl start ${network}d - sudo systemctl start lnd - sudo systemctl start background - - echo "# show final message" - whiptail --msgbox "OK - Copy Process Finished.\n\nNow check on the target RaspiBlitz if it was sucessful." 10 40 "" --title " DONE " --backtitle "RaspiBlitz - Copy Blockchain" - -} - -# when called with parameter "sourcemode" -if [ "$1" == "sourcemode" ]; then - copyHost - raspiblitz - exit 0 -fi - # Basic Options #OPTIONS=(HARDWARE "Run Hardwaretest" \ OPTIONS=(SOFTWARE "Run Softwaretest (DebugReport)" \ @@ -184,16 +67,16 @@ case $CHOICE in # HARDWARE) # ;; SOFTWARE) - sudo /home/admin/XXdebugLogs.sh + sudo /home/admin/config.scripts/blitz.debug.sh echo "Press ENTER to return to main menu." read key ;; BACKUP-LND) - sudo /home/admin/config.scripts/lnd.rescue.sh backup + sudo /home/admin/config.scripts/lnd.backup.sh lnd-export-gui echo echo "Press ENTER when your backup download is done to shutdown." read key - /home/admin/XXshutdown.sh + /home/admin/config.scripts/blitz.shutdown.sh ;; MIGRATION) sudo /home/admin/config.scripts/blitz.migration.sh "export-gui" @@ -225,7 +108,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 ${result} + sudo /home/admin/config.scripts/lnd.setname.sh mainnet ${result} sudo sed -i "s/^hostname=.*/hostname=${result}/g" /mnt/hdd/raspiblitz.conf echo "stopping lnd ..." @@ -235,7 +118,7 @@ case $CHOICE in # go back to main menu (and show) /home/admin/00raspiblitz.sh - exit 1; + exit 0; ;; RESET-HDD) askBackupCopy @@ -253,14 +136,14 @@ case $CHOICE in ;; DELETE-ELEC) /home/admin/config.scripts/bonus.electrs.sh off deleteindex - exit 1; + exit 0; ;; DELETE-INDEX) /home/admin/config.scripts/network.txindex.sh delete - exit 1; + exit 0; ;; COPY-SOURCE) - copyHost + /home/admin/config.scripts/blitz.copychain.sh source /home/admin/config.scripts/lnd.unlock.sh ;; esac diff --git a/home.admin/99clnMenu.sh b/home.admin/99clnMenu.sh new file mode 100644 index 000000000..a8d66e844 --- /dev/null +++ b/home.admin/99clnMenu.sh @@ -0,0 +1,117 @@ +#!/bin/bash + +# get raspiblitz config +echo "# get raspiblitz config" +source /home/admin/raspiblitz.info +source /mnt/hdd/raspiblitz.conf + +source <(/home/admin/config.scripts/network.aliases.sh getvars cln $1) + +# get the local network IP to be displayed on the LCD +source <(/home/admin/config.scripts/internet.sh status local) + +# BASIC MENU INFO +HEIGHT=14 +WIDTH=64 +CHOICE_HEIGHT=8 +BACKTITLE="RaspiBlitz" +TITLE="C-Lightning Options" +MENU="" +OPTIONS=() + +OPTIONS+=(FUNDING "Fund your C-Lightning Wallet") +OPTIONS+=(PEERING "Connect to a Peer") +OPTIONS+=(CHANNEL "Open a Channel with Peer") +OPTIONS+=(SEND "Pay an Invoice/PaymentRequest") +OPTIONS+=(RECEIVE "Create Invoice/PaymentRequest") +OPTIONS+=(SUMMARY "Information about this node") +OPTIONS+=(NAME "Change Name/Alias of the Node") + +ln_getInfo=$($lightningcli_alias getinfo 2>/dev/null) +ln_channels_online="$(echo "${ln_getInfo}" | jq -r '.num_active_channels')" 2>/dev/null +cln_num_inactive_channels="$(echo "${ln_getInfo}" | jq -r '.num_inactive_channels')" 2>/dev/null +openChannels=$((ln_channels_online+cln_num_inactive_channels)) +if [ ${#openChannels} -gt 0 ] && [ ${openChannels} -gt 0 ]; then +OPTIONS+=(SUEZ "Visualize channels") +OPTIONS+=(CLOSEALL "Close all open Channels on $CHAIN") + HEIGHT=$((HEIGHT+2)) + CHOICE_HEIGHT=$((CHOICE_HEIGHT+2)) +fi + +if [ ${#LNdefault} -gt 0 ]&&[ $LNdefault = lnd ];then + OPTIONS+=(SWITCHLN "Use C-lightning as default") + HEIGHT=$((HEIGHT+1)) + CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) +fi + +OPTIONS+=(CASHOUT "Withdraw all funds from C-lightning on $CHAIN") + +CHOICE=$(dialog --clear \ + --backtitle "$BACKTITLE" \ + --title "$TITLE" \ + --ok-label "Select" \ + --cancel-label "Main menu" \ + --menu "$MENU" \ + $HEIGHT $WIDTH $CHOICE_HEIGHT \ + "${OPTIONS[@]}" \ + 2>&1 >/dev/tty) + +case $CHOICE in + SUMMARY) + clear + /home/admin/config.scripts/cln-plugin.summary.sh $CHAIN + echo "Press ENTER to return to main menu." + read key + ;; + PEERING) + /home/admin/BBconnectPeer.sh cln $CHAIN + ;; + FUNDING) + /home/admin/BBfundWallet.sh cln $CHAIN + ;; + CASHOUT) + /home/admin/BBcashoutWallet.sh cln $CHAIN + ;; + CHANNEL) + /home/admin/BBopenChannel.sh cln $CHAIN + ;; + SEND) + /home/admin/BBpayInvoice.sh cln $CHAIN + ;; + RECEIVE) + /home/admin/BBcreateInvoice.sh cln $CHAIN + ;; + NAME) + sudo /home/admin/config.scripts/cln.setname.sh $CHAIN + ;; + SUEZ) + clear + if [ ! -f /home/bitcoin/suez/suez ];then + /home/admin/config.scripts/bonus.suez.sh on + fi + cd /home/bitcoin/suez || exit 0 + sudo -u bitcoin /home/bitcoin/.local/bin/poetry run ./suez \ + --client=c-lightning \ + --client-args=--conf=/home/bitcoin/.lightning/${netprefix}config + echo + echo "Press ENTER to return to main menu." + read key + ;; + CLOSEALL) + /home/admin/BBcloseAllChannels.sh cln $CHAIN + echo "Press ENTER to return to main menu." + read key + ;; + SWITCHLN) + clear + echo + # setting value in raspi blitz config + sudo sed -i "s/^LNdefault=.*/LNdefault=cln/g" /mnt/hdd/raspiblitz.conf + echo "# OK - LNdefault=cln is set in /mnt/hdd/raspiblitz.conf" + echo + echo "Press ENTER to return to main menu." + read key + ;; +esac + +exit 0 \ No newline at end of file diff --git a/home.admin/99connectMenu.sh b/home.admin/99connectMenu.sh index 1c619af6a..bdbb35f0f 100644 --- a/home.admin/99connectMenu.sh +++ b/home.admin/99connectMenu.sh @@ -58,7 +58,7 @@ case $CHOICE in RESET) sudo /home/admin/config.scripts/lnd.credentials.sh reset sudo /home/admin/config.scripts/lnd.credentials.sh sync - sudo /home/admin/XXshutdown.sh reboot + sudo /home/admin/config.scripts/blitz.shutdown.sh reboot exit 0;; SYNC) sudo /home/admin/config.scripts/lnd.credentials.sh sync @@ -166,12 +166,11 @@ HiddenServicePort 8333 127.0.0.1:8333" | sudo tee -a /etc/tor/torrc echo "# Running on ${chain}net" echo localIPrange=$(ip addr | grep 'state UP' -A2 | grep -E -v 'docker0|veth' |\ - grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' |\ + grep 'eth0\|wlan0\|enp0\|inet' | tail -n1 | awk '{print $2}' |\ awk -F. '{print $1"."$2"."$3".0/24"}') - localIP=$(ip addr | grep 'state UP' -A2 | grep -E -v 'docker0|veth' |\ - grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + localIP=$(hostname -I | awk '{print $1}') allowIPrange=$(grep -c "rpcallowip=$localIPrange" < /mnt/hdd/${network}/${network}.conf) - bindIP=$(grep -c "rpcbind=$localIP" < /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) TorRPCaddress=$(sudo cat /mnt/hdd/tor/bitcoin${BITCOINRPCPORT}/hostname) @@ -239,7 +238,7 @@ HiddenServicePort 8333 127.0.0.1:8333" | sudo tee -a /etc/tor/torrc restartCore=1 fi if [ $bindIP -eq 0 ]; then - echo "rpcbind=$localIP" | sudo tee -a /mnt/hdd/${network}/${network}.conf + echo "${chain}.rpcbind=$localIP" | sudo tee -a /mnt/hdd/${network}/${network}.conf restartCore=1 fi if [ $restartCore = 1 ];then @@ -286,7 +285,7 @@ HiddenServicePort 8333 127.0.0.1:8333" | sudo tee -a /etc/tor/torrc restartCore=1 fi if [ $bindIP -gt 0 ]; then - sudo sed -i "/^rpcbind=$localIP/d" /mnt/hdd/${network}/${network}.conf + sudo sed -i "/^${chain}.rpcbind=$localIP/d" /mnt/hdd/${network}/${network}.conf restartCore=1 fi if [ $restartCore = 1 ];then diff --git a/home.admin/99lightningMenu.sh b/home.admin/99lightningMenu.sh deleted file mode 100644 index 63ea9d920..000000000 --- a/home.admin/99lightningMenu.sh +++ /dev/null @@ -1,116 +0,0 @@ -#!/bin/bash - -# get raspiblitz config -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) - -# BASIC MENU INFO -HEIGHT=13 -WIDTH=64 -CHOICE_HEIGHT=7 -BACKTITLE="RaspiBlitz" -TITLE="Lightning Options" -MENU="" -OPTIONS=() - -OPTIONS+=(FUNDING "Fund your LND Wallet") -OPTIONS+=(PEERING "Connect to a Peer") -OPTIONS+=(CHANNEL "Open a Channel with Peer") -OPTIONS+=(SEND "Pay an Invoice/PaymentRequest") -OPTIONS+=(RECEIVE "Create Invoice/PaymentRequest") - -if [ "${chain}" = "main" ]; then - OPTIONS+=(lnbalance "Detailed Wallet Balances") - OPTIONS+=(lnchannels "Lightning Channel List") - OPTIONS+=(lnfwdreport "Lightning Forwarding Events Report") - HEIGHT=$((HEIGHT+3)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+3)) -fi - -OPTIONS+=(NAME "Change Name/Alias of Node") - -openChannels=$(sudo -u bitcoin /usr/local/bin/lncli --chain=${network} --network=${chain}net listchannels 2>/dev/null | jq '.[] | length') -if [ ${#openChannels} -gt 0 ] && [ ${openChannels} -gt 0 ]; then - OPTIONS+=(CLOSEALL "Close all open Channels") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) -fi - -OPTIONS+=(CASHOUT "Remove Funds from LND") - -CHOICE=$(dialog --clear \ - --backtitle "$BACKTITLE" \ - --title "$TITLE" \ - --ok-label "Select" \ - --cancel-label "Main menu" \ - --menu "$MENU" \ - $HEIGHT $WIDTH $CHOICE_HEIGHT \ - "${OPTIONS[@]}" \ - 2>&1 >/dev/tty) - -case $CHOICE in - lnbalance) - clear - echo "*** YOUR SATOSHI BALANCES ***" - /home/admin/config.scripts/lnd.balance.sh ${network} - echo "Press ENTER to return to main menu." - read key - ;; - lnchannels) - clear - echo "*** YOUR LIGHTNING CHANNELS ***" - echo "" - echo "Capacity -> total sats in the channel (their side + your side)" - echo "Commit-Fee -> the fee that's charged if either side of the channel closes" - echo "Balance-Local -> sats on your side of the channel (outbound liquidity)" - echo "Balance-Remote -> sats on their side of the channel (inbound liquidity)" - echo "Fee-Base -> fixed fee (in millisatoshis) per forwarding on channel" - echo "Fee-PerMil -> amount based fee (millisatoshis per 1 satoshi) on forwarding" - /home/admin/config.scripts/lnd.channels.sh ${network} - echo "Press ENTER to return to main menu." - read key - ;; - lnfwdreport) - /home/admin/config.scripts/lnd.fwdreport.sh -menu - echo "Press ENTER to return to main menu." - read key - ;; - PEERING) - /home/admin/BBconnectPeer.sh - ;; - FUNDING) - /home/admin/BBfundWallet.sh - ;; - CASHOUT) - /home/admin/BBcashoutWallet.sh - ;; - CHANNEL) - /home/admin/BBopenChannel.sh - ;; - SEND) - /home/admin/BBpayInvoice.sh - ;; - RECEIVE) - /home/admin/BBcreateInvoice.sh - ;; - NAME) - sudo /home/admin/config.scripts/lnd.setname.sh - noreboot=$? - if [ "${noreboot}" = "0" ]; then - sudo -u bitcoin ${network}-cli stop - echo "Press ENTER to Reboot." - read key - sudo /home/admin/XXshutdown.sh reboot - exit 0 - fi - ;; - CLOSEALL) - /home/admin/BBcloseAllChannels.sh - echo "Press ENTER to return to main menu." - read key - ;; -esac diff --git a/home.admin/99lndMenu.sh b/home.admin/99lndMenu.sh new file mode 100644 index 000000000..6350b6750 --- /dev/null +++ b/home.admin/99lndMenu.sh @@ -0,0 +1,147 @@ +#!/bin/bash + +# get raspiblitz config +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) + +# BASIC MENU INFO +HEIGHT=13 +WIDTH=64 +CHOICE_HEIGHT=7 +BACKTITLE="RaspiBlitz" +TITLE="Lightning Options" +MENU="" +OPTIONS=() + +OPTIONS+=(FUNDING "Fund your LND Wallet") +OPTIONS+=(PEERING "Connect to a Peer") +OPTIONS+=(CHANNEL "Open a Channel with Peer") +OPTIONS+=(SEND "Pay an Invoice/PaymentRequest") +OPTIONS+=(RECEIVE "Create Invoice/PaymentRequest") + +if [ "${chain}" = "main" ]; then + OPTIONS+=(lnbalance "Detailed Wallet Balances") + OPTIONS+=(lnchannels "Lightning Channel List") + OPTIONS+=(lnfwdreport "Lightning Forwarding Events Report") + HEIGHT=$((HEIGHT+3)) + CHOICE_HEIGHT=$((CHOICE_HEIGHT+3)) +fi + +OPTIONS+=(NAME "Change Name/Alias of Node") + +openChannels=$($lncli_alias listchannels 2>/dev/null | jq '.[] | length') +if [ ${#openChannels} -gt 0 ] && [ ${openChannels} -gt 0 ]; then +OPTIONS+=(SUEZ "Visualize channels") +OPTIONS+=(CLOSEALL "Close all open Channels on $CHAIN") + HEIGHT=$((HEIGHT+2)) + CHOICE_HEIGHT=$((CHOICE_HEIGHT+2)) +fi + +OPTIONS+=(CASHOUT "Withdraw all funds from LND on $CHAIN") +if [ ${#LNdefault} -gt 0 ]&&[ $LNdefault = cln ];then + OPTIONS+=(SWITCHLN "Use LND as default") + HEIGHT=$((HEIGHT+1)) + CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) +fi + +CHOICE=$(dialog --clear \ + --backtitle "$BACKTITLE" \ + --title "$TITLE" \ + --ok-label "Select" \ + --cancel-label "Main menu" \ + --menu "$MENU" \ + $HEIGHT $WIDTH $CHOICE_HEIGHT \ + "${OPTIONS[@]}" \ + 2>&1 >/dev/tty) + +case $CHOICE in + lnbalance) + clear + echo "*** YOUR SATOSHI BALANCES ***" + /home/admin/config.scripts/lnd.balance.sh ${network} + echo "Press ENTER to return to main menu." + read key + ;; + lnchannels) + clear + echo "*** YOUR LIGHTNING CHANNELS ***" + echo "" + echo "Capacity -> total sats in the channel (their side + your side)" + echo "Commit-Fee -> the fee that's charged if either side of the channel closes" + echo "Balance-Local -> sats on your side of the channel (outbound liquidity)" + echo "Balance-Remote -> sats on their side of the channel (inbound liquidity)" + echo "Fee-Base -> fixed fee (in millisatoshis) per forwarding on channel" + echo "Fee-PerMil -> amount based fee (millisatoshis per 1 satoshi) on forwarding" + /home/admin/config.scripts/lnd.channels.sh ${network} + echo "Press ENTER to return to main menu." + read key + ;; + lnfwdreport) + /home/admin/config.scripts/lnd.fwdreport.sh -menu + echo "Press ENTER to return to main menu." + read key + ;; + PEERING) + /home/admin/BBconnectPeer.sh lnd $CHAIN + ;; + FUNDING) + /home/admin/BBfundWallet.sh lnd $CHAIN + ;; + CASHOUT) + /home/admin/BBcashoutWallet.sh lnd $CHAIN + ;; + CHANNEL) + /home/admin/BBopenChannel.sh lnd $CHAIN + ;; + SEND) + /home/admin/BBpayInvoice.sh lnd $CHAIN + ;; + RECEIVE) + /home/admin/BBcreateInvoice.sh lnd $CHAIN + ;; + NAME) + sudo /home/admin/config.scripts/lnd.setname.sh $CHAIN + noreboot=$? + if [ "${noreboot}" = "0" ]; then + sudo -u bitcoin ${network}-cli stop + echo "Press ENTER to Reboot." + read key + sudo /home/admin/config.scripts/blitz.shutdown.sh reboot + exit 0 + fi + ;; + SUEZ) + clear + if [ ! -f /home/bitcoin/suez/suez ];then + /home/admin/config.scripts/bonus.suez.sh on + fi + cd /home/bitcoin/suez || exit 1 + sudo -u bitcoin /home/bitcoin/.local/bin/poetry run ./suez \ + --client-args=-n=${CHAIN} \ + --client-args=--rpcserver=localhost:1${L2rpcportmod}009 + echo + echo "Press ENTER to return to main menu." + read key + ;; + CLOSEALL) + /home/admin/BBcloseAllChannels.sh lnd $CHAIN + echo "Press ENTER to return to main menu." + read key + ;; + SWITCHLN) + clear + echo + # setting value in raspi blitz config + sudo sed -i "s/^LNdefault=.*/LNdefault=lnd/g" /mnt/hdd/raspiblitz.conf + echo "# OK - LNdefault=lnd is set in /mnt/hdd/raspiblitz.conf" + echo + echo "Press ENTER to return to main menu." + read key + ;; +esac diff --git a/home.admin/99systemMenu.sh b/home.admin/99systemMenu.sh index 00ff764a9..817031027 100644 --- a/home.admin/99systemMenu.sh +++ b/home.admin/99systemMenu.sh @@ -5,19 +5,29 @@ echo "get raspiblitz config" source /home/admin/raspiblitz.info source /mnt/hdd/raspiblitz.conf +# source <(/home/admin/config.scripts/network.aliases.sh getvars ) +source <(/home/admin/config.scripts/network.aliases.sh getvars cln $1) + # BASIC MENU INFO HEIGHT=12 # add 6 to CHOICE_HEIGHT + MENU lines WIDTH=64 CHOICE_HEIGHT=6 # 1 line / OPTIONS BACKTITLE="RaspiBlitz" -TITLE="System Options" +TITLE="${CHAIN} System Options" MENU="" # adds lines to HEIGHT OPTIONS=() # adds lines to HEIGHt + CHOICE_HEIGHT -OPTIONS+=(${network}LOG "Monitor the debug.log") +OPTIONS+=(${network}LOG "Monitor the debug.log for ${CHAIN}") OPTIONS+=(${network}CONF "Edit the bitcoin.conf") -OPTIONS+=(LNDLOG "Monitor the lnd.log") -OPTIONS+=(LNDCONF "Edit the lnd.conf") +OPTIONS+=(LNDLOG "Monitor the lnd.log for ${CHAIN}") +OPTIONS+=(LNDCONF "Edit the lnd.conf for ${CHAIN}") + +if grep "^${netprefix}cln=on" /mnt/hdd/raspiblitz.conf;then + OPTIONS+=(CLNLOG "Monitor the CLN log for ${CHAIN}") + OPTIONS+=(CLNCONF "Edit the CLN config for ${CHAIN}") + HEIGHT=$((HEIGHT+2)) + CHOICE_HEIGHT=$((CHOICE_HEIGHT+2)) +fi if [ "${runBehindTor}" == "on" ]; then OPTIONS+=(TORLOG "Monitor the Tor Service with Nyx") @@ -39,26 +49,33 @@ CHOICE=$(dialog --clear \ case $CHOICE in ${network}LOG) + if [ ${CHAIN} = signet ]; then + bitcoinlogpath="/mnt/hdd/bitcoin/signet/debug.log" + elif [ ${CHAIN} = testnet ]; then + bitcoinlogpath="/mnt/hdd/bitcoin/testnet3/debug.log" + elif [ ${CHAIN} = mainnet ]; then + bitcoinlogpath="/mnt/hdd/bitcoin/debug.log" + fi clear echo - echo "Will follow the /mnt/hdd/${network}/debug.log" - echo "running: 'sudo tail -n 30 -f /mnt/hdd/${network}/debug.log'" + echo "Will follow the ${bitcoinlogpath}" + echo "running: 'sudo tail -n 30 -f ${bitcoinlogpath}'" echo echo "Press ENTER to continue" echo "use CTRL+C any time to abort .. then use command 'raspiblitz' to return to menu" echo "###############################################################################" read key - sudo tail -n 30 -f /mnt/hdd/${network}/debug.log;; + sudo tail -n 30 -f ${bitcoinlogpath};; ${network}CONF) if /home/admin/config.scripts/blitz.setconf.sh "/mnt/hdd/${network}/${network}.conf" "root" then whiptail \ --title "Restart" --yes-button "Restart" --no-button "Not now" \ - --yesno "To apply the new settings ${network}d needs to restart. - Do you want to restart ${network}d now?" 10 55 + --yesno "To apply the new settings ${netprefix}${network}d needs to restart. + Do you want to restart ${netprefix}${network}d now?" 10 55 if [ $? -eq 0 ]; then - echo "# Restarting ${network}d" - sudo systemctl restart ${network}d + echo "# Restarting ${netprefix}${network}d" + sudo systemctl restart ${netprefix}${network}d else echo "# Continue without restarting." fi @@ -77,7 +94,7 @@ case $CHOICE in read key sudo tail -n 30 -f /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log;; LNDCONF) - if /home/admin/config.scripts/blitz.setconf.sh "/mnt/hdd/lnd/lnd.conf" "root" + if /home/admin/config.scripts/blitz.setconf.sh "/mnt/hdd/lnd/${netprefix}lnd.conf" "root" then whiptail \ --title "Restart" --yes-button "Restart" --no-button "Not now" \ @@ -85,13 +102,40 @@ case $CHOICE in Do you want to restart LND now?" 10 55 if [ $? -eq 0 ]; then echo "# Restarting LND" - sudo systemctl restart lnd + sudo systemctl restart ${netprefix}lnd else echo "# Continue without restarting." fi else echo "# No change made" - fi;; + fi;; + CLNLOG) + clear + echo + echo "Will follow the /home/bitcoin/.lightning/${CLNETWORK}/cl.log" + echo "running 'sudo tail -n 30 -f /home/bitcoin/.lightning/${CLNETWORK}/cl.log'" + echo + echo "Press ENTER to continue" + echo "use CTRL+C any time to abort .. then use command 'raspiblitz' to return to menu" + echo "###############################################################################" + read key + sudo tail -n 30 -f /home/bitcoin/.lightning/${CLNETWORK}/cl.log;; + CLNCONF) + if /home/admin/config.scripts/blitz.setconf.sh "/home/bitcoin/.lightning/${netprefix}config" "root" + then + whiptail \ + --title "Restart" --yes-button "Restart" --no-button "Not now" \ + --yesno "To apply the new settings C-lightning needs to restart. + Do you want to restart C-lightning now?" 0 0 + if [ $? -eq 0 ]; then + echo "# Restarting C-lightning" + sudo systemctl restart ${netprefix}lightningd + else + echo "# Continue without restarting." + fi + else + echo "# No change made" + fi;; TORLOG) sudo -u debian-tor nyx;; TORRC) diff --git a/home.admin/99updateMenu.sh b/home.admin/99updateMenu.sh index 0d76ecdd7..b23826332 100755 --- a/home.admin/99updateMenu.sh +++ b/home.admin/99updateMenu.sh @@ -1,9 +1,9 @@ #!/bin/bash # load raspiblitz config data -source /home/admin/raspiblitz.info -source /mnt/hdd/raspiblitz.conf source /home/admin/_version.info +source /home/admin/raspiblitz.info +source /mnt/hdd/raspiblitz.conf 2>/dev/null ## PROCEDURES @@ -21,35 +21,51 @@ No need to close channels or download blockchain again. Do you want to start the Update now? " 16 62 if [ $? -eq 0 ]; then - exit 1 + exit 0 fi - whiptail --title "LND Data Backup" --yes-button "Download Backup" --no-button "Skip" --yesno " -Before we start the RaspiBlitz Update process, -its recommended to make a backup of all your LND Data -and download that file to your laptop. + if [ "${lightning}" != "" ]; then -Do you want to download LND Data Backup now? + whiptail --title "Lightning Data Backup" --yes-button "Download Backup" --no-button "Skip" --yesno " +Before we start the RaspiBlitz Update process, +its recommended to make a backup of all your Lightning +Channel Data and download that file to your laptop. + +Do you want to download Lightning Data Backup now? " 12 58 - if [ $? -eq 0 ]; then - clear - echo "*************************************" - echo "* PREPARING LND BACKUP DOWNLOAD" - echo "*************************************" - echo "please wait .." - sleep 2 - /home/admin/config.scripts/lnd.rescue.sh backup - echo - echo "PRESS ENTER to continue once you're done downloading." - read key - else - clear - echo "*************************************" - echo "* JUST MAKING BACKUP TO OLD SD CARD" - echo "*************************************" - echo "please wait .." - sleep 2 - /home/admin/config.scripts/lnd.rescue.sh backup no-download + if [ $? -eq 0 ]; then + clear + echo "*************************************" + echo "* PREPARING LIGHTNING BACKUP DOWNLOAD" + echo "*************************************" + echo "please wait .." + sleep 2 + if [ "${lightning}" == "lnd" ]; then + /home/admin/config.scripts/lnd.backup.sh lnd-export-gui + elif [ "${lightning}" == "cln" ]; then + /home/admin/config.scripts/cln.backup.sh cln-export-gui + else + echo "TODO: Implement Data Backup for '${lightning}'" + fi + echo + echo "PRESS ENTER to continue once you're done downloading." + read key + else + clear + echo "*************************************" + echo "* JUST MAKING BACKUP TO OLD SD CARD" + echo "*************************************" + echo "please wait .." + sleep 2 + if [ "${lightning}" == "lnd" ]; then + /home/admin/config.scripts/lnd.backup.sh lnd-export + elif [ "${lightning}" == "cln" ]; then + /home/admin/config.scripts/cln.backup.sh cln-export + else + echo "TODO: Implement Data Backup for '${lightning}'" + sleep 3 + fi + fi fi whiptail --title "READY TO UPDATE?" --yes-button "START UPDATE" --no-button "Cancel" --yesno "If you start the update: The RaspiBlitz will power down. @@ -68,8 +84,9 @@ and do you WANT TO START UPDATE NOW? dialog --title " Update Canceled " --msgbox " OK. RaspiBlitz will NOT update now. " 7 39 - sudo systemctl start lnd - exit 1 + sudo systemctl start lnd 2>/dev/null + sudo systemctl start lightningd 2>/dev/null + exit 0 fi clear @@ -93,7 +110,7 @@ hotfix the code and might compromise your security. Do you want to Patch your RaspiBlitz now? " 18 58 if [ $? -eq 0 ]; then - exit 1 + exit 0 fi } @@ -101,7 +118,7 @@ patch() { # get sync info - source <(sudo /home/admin/XXsyncScripts.sh info) + source <(sudo /home/admin/config.scripts/blitz.github.sh info) # Patch Options OPTIONS=(PATCH "Patch/Sync RaspiBlitz with GitHub Repo" \ @@ -115,7 +132,7 @@ patch() clear case $CHOICE in PATCH) - sudo -u admin /home/admin/XXsyncScripts.sh -run + sudo -u admin /home/admin/config.scripts/blitz.github.sh -run sleep 4 whiptail --title " Patching/Syncing " --yes-button "Reboot" --no-button "Skip Reboot" --yesno " OK patching/syncing done. @@ -126,12 +143,13 @@ patch() if [ $? -eq 0 ]; then clear echo "REBOOT .." - /home/admin/XXshutdown.sh reboot + /home/admin/config.scripts/blitz.shutdown.sh reboot sleep 8 + exit 1 else echo "SKIP REBOOT .." + exit 0 fi - exit 1 ;; REPO) clear @@ -142,13 +160,13 @@ patch() newGitHubUser=$(echo "${newGitHubUser}" | cut -d " " -f1) echo "--> " ${newGitHubUser} error="" - source <(sudo -u admin /home/admin/XXsyncScripts.sh -clean ${activeBranch} ${newGitHubUser}) + source <(sudo -u admin /home/admin/config.scripts/blitz.github.sh -clean ${activeBranch} ${newGitHubUser}) if [ ${#error} -gt 0 ]; then whiptail --title "ERROR" --msgbox "${error}" 8 30 fi fi patch - exit 1 + exit 0 ;; BRANCH) clear @@ -159,13 +177,13 @@ patch() newGitHubBranch=$(echo "${newGitHubBranch}" | cut -d " " -f1) echo "--> " $newGitHubBranch error="" - source <(sudo -u admin /home/admin/XXsyncScripts.sh ${newGitHubBranch}) + source <(sudo -u admin /home/admin/config.scripts/blitz.github.sh ${newGitHubBranch}) if [ ${#error} -gt 0 ]; then whiptail --title "ERROR" --msgbox "${error}" 8 30 fi fi patch - exit 1 + exit 0 ;; PR) clear @@ -178,15 +196,15 @@ patch() cd /home/admin/raspiblitz git fetch origin pull/${pullRequestID}/head:pr${pullRequestID} error="" - source <(sudo -u admin /home/admin/XXsyncScripts.sh pr${pullRequestID}) + source <(sudo -u admin /home/admin/config.scripts/blitz.github.sh pr${pullRequestID}) if [ ${#error} -gt 0 ]; then whiptail --title "ERROR" --msgbox "${error}" 8 30 else echo "# update installs .." - /home/admin/XXsyncScripts.sh -justinstall + /home/admin/config.scripts/blitz.github.sh -justinstall fi fi - exit 1 + exit 0 ;; esac @@ -212,7 +230,7 @@ lnd() VERIFIED) if [ ${lndUpdateInstalled} -eq 1 ]; then whiptail --title "ALREADY INSTALLED" --msgbox "The LND version ${lndUpdateVersion} is already installed." 8 30 - exit 1 + exit 0 fi whiptail --title "OPTIONAL LND UPDATE" --yes-button "Cancel" --no-button "Update" --yesno "BEWARE on updating to LND v${lndUpdateVersion}: @@ -222,7 +240,7 @@ Do you really want to update LND now? " 16 58 if [ $? -eq 0 ]; then echo "# cancel update" - exit 1 + exit 0 fi # if loop is installed remove if [ "${loop}" == "on" ]; then @@ -238,7 +256,7 @@ Do you really want to update LND now? if [ "${loop}" == "on" ]; then sudo -u admin /home/admin/config.scripts/bonus.loop.sh on fi - /home/admin/XXshutdown.sh reboot + /home/admin/config.scripts/blitz.shutdown.sh reboot sleep 8 fi ;; @@ -255,14 +273,14 @@ Do you really want to update LND now? " 16 58 if [ $? -eq 0 ]; then echo "# cancel update" - exit 1 + exit 0 fi error="" source <(sudo -u admin /home/admin/config.scripts/lnd.update.sh reckless) if [ ${#error} -gt 0 ]; then whiptail --title "ERROR" --msgbox "${error}" 8 30 else - /home/admin/XXshutdown.sh reboot + /home/admin/config.scripts/blitz.shutdown.sh reboot sleep 8 fi ;; @@ -296,7 +314,7 @@ bitcoinUpdate() { if [ ${bitcoinUpdateInstalled} -eq 1 ]; then whiptail --title "ALREADY INSTALLED" \ --msgbox "The Bitcoin Core version ${bitcoinUpdateVersion} is already installed." 8 30 - exit 1 + exit 0 fi whiptail --title "OPTIONAL Bitcoin Core update" --yes-button "Cancel" --no-button "Update" \ --yesno "Info on updating to Bitcoin Core v${bitcoinVersion}: @@ -308,7 +326,7 @@ Do you really want to update Bitcoin Core now? " 12 58 if [ $? -eq 0 ]; then echo "# cancel update" - exit 1 + exit 0 fi error="" @@ -332,7 +350,7 @@ Do you really want to update Bitcoin Core now? " 16 58 if [ $? -eq 0 ]; then echo "# cancel update" - exit 1 + exit 0 fi error="" source <(sudo -u admin /home/admin/config.scripts/bitcoin.update.sh reckless) @@ -358,52 +376,49 @@ fi HEIGHT=10 # add 6 to CHOICE_HEIGHT + MENU lines WIDTH=55 CHOICE_HEIGHT=4 # 1 line / OPTIONS -OPTIONS=( -RELEASE "RaspiBlitz Release Update/Recovery" -PATCH "Patch RaspiBlitz v${codeVersion}" -LND "Interim LND Update Options" -BITCOIN "Bitcoin Core Update Options" -) +OPTIONS=() +OPTIONS+=(RELEASE "RaspiBlitz Release Update/Recovery") +OPTIONS+=(PATCH "Patch RaspiBlitz v${codeVersion}") +OPTIONS+=(BITCOIN "Bitcoin Core Update Options") + +if [ "${lightning}" == "lnd" ]; then + OPTIONS+=(LND "Interim LND Update Options") +fi if [ "${bos}" == "on" ]; then OPTIONS+=(BOS "Update Balance of Satoshis") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi + if [ "${thunderhub}" == "on" ]; then OPTIONS+=(THUB "Update ThunderHub") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi + if [ "${specter}" == "on" ]; then OPTIONS+=(SPECTER "Update Cryptoadvance Specter") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi + if [ "${rtlWebinterface}" == "on" ]; then OPTIONS+=(RTL "Update RTL") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi + if [ "${sphinxrelay}" == "on" ]; then OPTIONS+=(SPHINX "Update Sphinx Server Relay") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi + if [ "${pyblock}" == "on" ]; then OPTIONS+=(PYBLOCK "Update PyBLOCK") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi + if [ "${mempoolExplorer}" == "on" ]; then OPTIONS+=(MEMPOOL "Update Mempool Explorer") fi + if [ "${runBehindTor}" == "on" ]; then OPTIONS+=(TOR "Update Tor from the source code") - HEIGHT=$((HEIGHT+1)) - CHOICE_HEIGHT=$((CHOICE_HEIGHT+1)) fi +CHOICE_HEIGHT=$(("${#OPTIONS[@]}")) +HEIGHT=$((CHOICE_HEIGHT+6)) CHOICE=$(dialog --clear \ --backtitle "" \ --title "Update Options" \ diff --git a/home.admin/AAunlockLND.sh b/home.admin/AAunlockLND.sh deleted file mode 100755 index fd3c45b09..000000000 --- a/home.admin/AAunlockLND.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash - -# load raspiblitz config data (with backup from old config) -source /home/admin/raspiblitz.info -source /mnt/hdd/raspiblitz.conf -if [ ${#network} -eq 0 ]; then network=`cat .network`; fi -if [ ${#network} -eq 0 ]; then network="bitcoin"; fi -if [ ${#chain} -eq 0 ]; then - echo "gathering chain info ... please wait" - chain=$(${network}-cli getblockchaininfo | jq -r '.chain') -fi - -clear -echo "" -echo "****************************************************************************" -echo "Unlock LND Wallet --> lncli --chain=${network} unlock" -echo "****************************************************************************" -echo "HELP: Enter your PASSWORD C" -echo "You may wait some seconds until you get asked for password." -echo "****************************************************************************" -while : - do - sudo -u bitcoin /usr/local/bin/lncli --chain=${network} unlock - sleep 4 - locked=$(sudo tail -n 1 /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log 2>/dev/null | grep -c unlock) - if [ ${locked} -eq 0 ]; then - break - fi - - echo "" - echo "network(${network}) chain(${chain})" - sudo tail -n 1 /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log - echo "Wallet still locked - please try again or" - echo "Cancel with CTRL+C - back to setup with command: raspiblitz" - done diff --git a/home.admin/BBcashoutWallet.sh b/home.admin/BBcashoutWallet.sh index 5be7e514b..95db2d24e 100755 --- a/home.admin/BBcashoutWallet.sh +++ b/home.admin/BBcashoutWallet.sh @@ -7,40 +7,59 @@ echo "please wait ..." # load raspiblitz config data (with backup from old config) source /home/admin/raspiblitz.info source /mnt/hdd/raspiblitz.conf -if [ ${#network} -eq 0 ]; then network=`cat .network`; fi +if [ ${#network} -eq 0 ]; then network=$(cat .network); fi if [ ${#network} -eq 0 ]; then network="bitcoin"; fi if [ ${#chain} -eq 0 ]; then - chain=$(${network}-cli -datadir=/home/bitcoin/.${network} getblockchaininfo | jq -r '.chain') + chain=$($bitcoincli_alias getblockchaininfo | jq -r '.chain') fi +source <(/home/admin/config.scripts/network.aliases.sh getvars $1 $2) + # check if user has money in lightning channels - info about close all -openChannels=$(lncli --chain=${network} --network=${chain}net listchannels 2>/dev/null | jq '.[] | length') +if [ $LNTYPE = cln ];then + ln_getInfo=$($lightningcli_alias getinfo 2>/dev/null) + ln_channels_online="$(echo "${ln_getInfo}" | jq -r '.num_active_channels')" 2>/dev/null + cln_num_inactive_channels="$(echo "${ln_getInfo}" | jq -r '.num_inactive_channels')" 2>/dev/null + openChannels=$((ln_channels_online+cln_num_inactive_channels)) +elif [ $LNTYPE = lnd ];then + openChannels=$($lncli_alias listchannels 2>/dev/null | jq '.[] | length') +fi if [ ${#openChannels} -eq 0 ]; then clear echo "*** IMPORTANT **********************************" - echo "It looks like LND is not responding." + echo "It looks like $LNTYPE is not responding." echo "Still starting up, is locked or is not running?" - echo "Try later, try reboot or check ./XXdebugLogs.sh" + echo "Try later, try reboot or run command: debug" echo "************************************************" echo "Press ENTER to return to main menu." read key - exit 1 + exit 0 fi if [ ${openChannels} -gt 0 ]; then whiptail --title 'Info' --yes-button='Cashout Anyway' --no-button='Go Back' --yesno 'You still have funds in open Lightning Channels.\nUse CLOSEALL first if you want to cashout all funds.\nNOTICE: Just confirmed on-chain funds can be moved.' 10 56 if [ $? -eq 1 ]; then - exit 1 + exit 0 fi echo "..." fi # check if money is waiting to get confirmed -unconfirmed=$(lncli --chain=${network} --network=${chain}net walletbalance | grep '"unconfirmed_balance"' | cut -d '"' -f4) +if [ $LNTYPE = cln ];then + ln_walletbalance_wait=0 + cln_listfunds=$($lightningcli_alias listfunds 2>/dev/null) + for i in $(echo "$cln_listfunds" \ + |jq .outputs[]|jq 'select(.status=="unconfirmed")'|grep value|awk '{print $2}'|cut -d, -f1);do + ln_walletbalance_wait=$((ln_walletbalance_wait+i)) + done + unconfirmed=$ln_walletbalance_wait +elif [ $LNTYPE = lnd ];then + unconfirmed=$($lncli_alias walletbalance | grep '"unconfirmed_balance"' | cut -d '"' -f4) +fi if [ ${unconfirmed} -gt 0 ]; then whiptail --title 'Info' --yes-button='Cashout Anyway' --no-button='Go Back' --yesno "Still waiting confirmation for (some of) your funds.\nNOTICE: Just confirmed on-chain funds can be moved." 8 58 if [ $? -eq 1 ]; then - exit 1 + exit 0 fi echo "..." fi @@ -53,7 +72,7 @@ then echo "ok pressed" else echo "cancel pressed" - exit 1 + exit 0 fi address=$(cat $_temp | xargs) shred -u $_temp @@ -61,7 +80,7 @@ if [ ${#address} -eq 0 ]; then echo "FAIL - not a valid address (${address})" echo "Press ENTER to return to main menu." read key - exit 1 + exit 0 fi clear @@ -70,22 +89,27 @@ echo "Sweep all possible Funds" echo "******************************" # execute command -command="lncli --chain=${network} --network=${chain}net sendcoins --sweepall --addr=${address} --conf_target=36" +if [ ${LNTYPE} = "cln" ];then + # withdraw destination satoshi [feerate] [minconf] [utxos] + command="$lightningcli_alias withdraw ${address} all slow" +elif [ ${LNTYPE} = "lnd" ];then + command="$lncli_alias sendcoins --sweepall --addr=${address} --conf_target=36" +fi echo "$command" result=$($command 2>$_error) -error=`cat ${_error}` -echo "" +error=$(cat ${_error}) +echo if [ ${#error} -gt 0 ]; then echo "FAIL: $error" - echo "" + echo echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo "FAIL --> Was not able to send transaction (see error above)" echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" else echo "Result: $result" - echo "" + echo echo "********************************************************************" fi -echo "" +echo echo "Press ENTER to return to main menu." read key \ No newline at end of file diff --git a/home.admin/BBcloseAllChannels.sh b/home.admin/BBcloseAllChannels.sh index af849a1a6..7f23b223e 100755 --- a/home.admin/BBcloseAllChannels.sh +++ b/home.admin/BBcloseAllChannels.sh @@ -3,42 +3,88 @@ # load raspiblitz config data (with backup from old config) source /home/admin/raspiblitz.info source /mnt/hdd/raspiblitz.conf -if [ ${#network} -eq 0 ]; then network=`cat .network`; fi +if [ ${#network} -eq 0 ]; then network=$(cat .network); fi if [ ${#network} -eq 0 ]; then network="bitcoin"; fi if [ ${#chain} -eq 0 ]; then chain=$(${network}-cli getblockchaininfo | jq -r '.chain') fi -# precheck: AutoPilot -if [ "${autoPilot}" = "on" ]; then - dialog --title 'Info' --msgbox 'You need to turn OFF the LND AutoPilot first,\nso that closed channels are not opening up again.\nYou find the AutoPilot -----> SERVICES section' 7 55 - exit 1 -fi +source <(/home/admin/config.scripts/network.aliases.sh getvars $1 $2) -command="lncli --chain=${network} --network=${chain}net closeallchannels --force" +if [ $LNTYPE = cln ];then + # https://lightning.readthedocs.io/lightning-close.7.html + peerlist=$($lightningcli_alias listpeers|grep '"id":'|awk '{print $2}'|cut -d, -f1) + # to display + function cln_closeall_command { + for i in $peerlist; do + # close id [unilateraltimeout] [destination] [fee_negotiation_step] [*wrong_funding*] + echo "$lightningcli_alias close $i 30;" + done + } + command=$(cln_closeall_command) + # to run + function cln_closeall { + for i in $peerlist; do + # close id [unilateraltimeout] [destination] [fee_negotiation_step] [*wrong_funding*] + echo "# Attempting a mutual close one-by-one with a 30 seconds timeout" + $lightningcli_alias close $i 30 + done + } +elif [ $LNTYPE = lnd ];then + # precheck: AutoPilot + if [ "${autoPilot}" = "on" ]; then + dialog --title 'Info' --msgbox 'You need to turn OFF the LND AutoPilot first,\nso that closed channels are not opening up again.\nYou find the AutoPilot -----> SERVICES section' 7 55 + exit 0 + fi + command="$lncli_alias closeallchannels --force" +fi clear -echo "***********************************" -echo "Closing All Channels (EXPERIMENTAL)" -echo "***********************************" -echo "" -echo "COMMAND LINE: " -echo $command -echo "" -echo "RESULT:" - -# PRECHECK) check if chain is in sync -chainInSync=$(lncli --chain=${network} --network=${chain}net getinfo | grep '"synced_to_chain": true' -c) -if [ ${chainInSync} -eq 0 ]; then - command="" - result="FAIL PRECHECK - lncli getinfo shows 'synced_to_chain': false - wait until chain is sync " +echo +echo "# Precheck" # PRECHECK) check if chain is in sync +if [ $LNTYPE = cln ];then + BLOCKHEIGHT=$($bitcoincli_alias getblockchaininfo|grep blocks|awk '{print $2}'|cut -d, -f1) + CLHEIGHT=$($lightningcli_alias getinfo | jq .blockheight) + if [ $BLOCKHEIGHT -eq $CLHEIGHT ];then + chainOutSync=0 + else + chainOutSync=1 + fi +elif [ $LNTYPE = lnd ];then + chainOutSync=$($lncli_alias getinfo | grep '"synced_to_chain": false' -c) fi +if [ ${chainOutSync} -eq 1 ]; then + if [ $LNTYPE = cln ];then + echo "# FAIL PRECHECK - '${netprefix}lightning-cli getinfo' blockheight is different from '${netprefix}bitcoind getblockchaininfo' - wait until chain is sync " + elif [ $LNTYPE = lnd ];then + echo "# FAIL PRECHECK - ${netprefix}lncli getinfo shows 'synced_to_chain': false - wait until chain is sync " + fi + echo + echo "# PRESS ENTER to return to menu" + read key + exit 0 +else + echo "# OK - the chain is synced" +fi + +echo "#####################################" +echo "# Closing All Channels (EXPERIMENTAL)" +echo "#####################################" +echo +echo "# COMMAND LINE: " +echo $command +echo +echo "# RESULT:" # execute command if [ ${#command} -gt 0 ]; then - ${command} + if [ $LNTYPE = cln ];then + cln_closeall + elif [ $LNTYPE = lnd ];then + ${command} + fi fi - -echo "" -echo "OK - please recheck if channels really closed" -sleep 5 + +echo +echo "# OK - please recheck if channels really closed" +sleep 5 \ No newline at end of file diff --git a/home.admin/BBconnectPeer.sh b/home.admin/BBconnectPeer.sh index 96ece91e9..008f385ef 100755 --- a/home.admin/BBconnectPeer.sh +++ b/home.admin/BBconnectPeer.sh @@ -5,26 +5,23 @@ _error=$(mktemp -p /dev/shm/) # load raspiblitz config data (with backup from old config) source /home/admin/raspiblitz.info source /mnt/hdd/raspiblitz.conf -if [ ${#network} -eq 0 ]; then network=`cat .network`; fi +if [ ${#network} -eq 0 ]; then network=$(cat .network); fi if [ ${#network} -eq 0 ]; then network="bitcoin"; fi if [ ${#chain} -eq 0 ]; then echo "gathering chain info ... please wait" chain=$(${network}-cli getblockchaininfo | jq -r '.chain') fi -# set ntwork map info -networkMap="https://lnmainnet.gaben.win" -if [ "$network" = "litecoin" ]; then - networkMap="https://lnexplorer.hcwong.me" -fi -if [ "$chain" = "test" ]; then - networkMap="https://explorer.acinq.co" -fi +source <(/home/admin/config.scripts/network.aliases.sh getvars $1 $2) # let user enter a @host l1="Enter the node pubkey address with host information:" l2="example -----> 024ddf33[...]1f5f9f3@91.65.1.38:9735" -l3="node directory -> 1ml.com" +if [ "$chain" = "main" ]; then + l3="node directory -> https://1ml.com" +elif [ "$chain" = "test" ]; then + l3="node directory -> https://1ml.com/testnet" +fi dialog --title "Open a Connection to a Peer" \ --backtitle "Lightning ( ${network} | ${chain} )" \ --inputbox "$l1\n$l2\n$l3" 10 60 2>$_temp @@ -35,21 +32,29 @@ if [ ${#_input} -eq 0 ]; then echo echo "no peer entered - returning to menu ..." sleep 2 - exit 1 + exit 0 fi +pubkey=$(echo "${_input}"|cut -d@ -f1) +# address=$(echo "${_input}"|cut -d@ -f2|cut -d: -f1) +# port=$(echo "${_input}"|cut -d: -f2) # build command -command="lncli --chain=${network} --network=${chain}net connect ${_input}" +if [ $LNTYPE = cln ];then + # connect id [host port] + command="$lightningcli_alias connect ${_input}" +elif [ $LNTYPE = lnd ];then + command="$lncli_alias connect ${_input}" +fi # info output clear echo "******************************" -echo "Connect to A Lightning Node" +echo "Connect to a Lightning Node" echo "******************************" -echo "" +echo echo "COMMAND LINE: " echo $command -echo "" +echo echo "RESULT (might have to wait for timeout):" win=1 @@ -59,7 +64,7 @@ info="" if [ ${#_input} -lt 10 ]; then win=0 info="node pubkey@host info is too short" -else +elif [ $LNTYPE = lnd ];then gotAt=$(echo $_input | grep '@' -c) if [ ${gotAt} -eq 0 ]; then win=0 @@ -82,13 +87,13 @@ if [ ${#result} -eq 0 ]; then info="No return value. Error not known." # try to get error output - result=`cat ${_error}` + result=$(cat "${_error}") echo "$result" # basic cli error cliError=$(echo "${result}" | grep "[lncli]" -c ) if [ ${cliError} -gt 0 ]; then - info="Its possible that LND daemon is not running, not configured correct or not connected to the lncli." + info="It's possible that the lightning daemon is not running, not configured correct or not connected to the cli." fi else @@ -97,8 +102,11 @@ else echo "$result" # check if the node is now in peer list - pubkey=$(echo $_input | cut -d '@' -f1) - isPeer=$(lncli --chain=${network} --network=${chain}net listpeers 2>/dev/null| grep "${pubkey}" -c) + if [ $LNTYPE = cln ];then + isPeer=$($lightningcli_alias listpeers 2>/dev/null| grep "${pubkey}" -c) + elif [ $LNTYPE = lnd ];then + isPeer=$($lncli_alias listpeers 2>/dev/null| grep "${pubkey}" -c) + fi if [ ${isPeer} -eq 0 ]; then # basic error message @@ -108,20 +116,21 @@ else # TODO: try to find out more details from cli output else + win=1 info="Perfect - a connection to that node got established :)" fi fi # output info -echo "" +echo if [ ${win} -eq 1 ]; then echo "******************************" echo "WIN" echo "******************************" echo "${info}" - echo "" - echo "Whats next? --> Open a channel with that node." + echo + echo "What's next? --> Open a channel with that node." else echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo "FAIL" @@ -129,6 +138,6 @@ else echo "${info}" fi -echo "" +echo echo "Press ENTER to return to main menu." read key \ No newline at end of file diff --git a/home.admin/BBcreateInvoice.sh b/home.admin/BBcreateInvoice.sh index a291bf1a7..aa1ba034e 100755 --- a/home.admin/BBcreateInvoice.sh +++ b/home.admin/BBcreateInvoice.sh @@ -7,23 +7,64 @@ sudo chmod 7777 ${_error} 2>/dev/null # load raspiblitz config data (with backup from old config) source /home/admin/raspiblitz.info source /mnt/hdd/raspiblitz.conf -if [ ${#network} -eq 0 ]; then network=`cat .network`; fi +if [ ${#network} -eq 0 ]; then network=$(cat .network); fi if [ ${#network} -eq 0 ]; then network="bitcoin"; fi if [ ${#chain} -eq 0 ]; then echo "gathering chain info ... please wait" chain=$(${network}-cli getblockchaininfo | jq -r '.chain') fi -# Check if ready (chain in sync and channels open) -./XXchainInSync.sh $network $chain -if [ $? != 0 ]; then - exit 1 +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 +if [ $LNTYPE = cln ];then + lncommand="${netprefix}lightning-cli" + BLOCKHEIGHT=$($bitcoincli_alias getblockchaininfo|grep blocks|awk '{print $2}'|cut -d, -f1) + CLHEIGHT=$($lightningcli_alias getinfo | jq .blockheight) + if [ $BLOCKHEIGHT -eq $CLHEIGHT ];then + cmdChainInSync=1 + else + cmdChainInSync=0 + fi +elif [ $LNTYPE = lnd ];then + lncommand="${netprefix}lncli" + cmdChainInSync="$lncli_alias getinfo | grep '"synced_to_chain": true' -c" +fi +chainInSync=${cmdChainInSync} +while [ "${chainInSync}" == "0" ]; do + dialog --title "Fail: not in sync" \ + --ok-label "Try now" \ + --cancel-label "Give up" \ + --pause "\n\n'$lncommand getinfo' shows 'synced_to_chain': false\n\nTry again in a few seconds." 15 60 5 + + if [ $? -gt 0 ]; then + exit 0 + fi + chainInSync=${cmdChainInSync} +done + +# check number of connected peers +echo "check for open channels" +if [ $LNTYPE = cln ];then + openChannels=$($lightningcli_alias listpeers | grep -c "CHANNELD_NORMAL") +elif [ $LNTYPE = lnd ];then + openChannels=$($lncli_alias listchannels 2>/dev/null | grep chan_id -c) +fi +if [ ${openChannels} -eq 0 ]; then + echo + echo "!!!!!!!!!!!!!!!!!!!" + echo "FAIL - You have NO ESTABLISHED CHANNELS .. open a channel first." + echo "!!!!!!!!!!!!!!!!!!!" + sleep 3 + exit 0 fi # let user enter the invoice -l1="Enter the AMOUNT IN SATOSHI of the invoice:" +l1="Enter the AMOUNT IN SATOSHIS to invoice:" l2="1 ${network} = 100 000 000 SAT" -dialog --title "Pay thru Lightning Network" \ +dialog --title "Request payment through Lightning" \ --inputbox "$l1\n$l2" 9 50 2>$_temp amount=$(cat $_temp | xargs | tr -dc '0-9') shred -u $_temp @@ -31,30 +72,37 @@ if [ ${#amount} -eq 0 ]; then clear echo echo "no amount entered - returning to menu ..." - sleep 2 - exit 1 + sleep 3 + exit 0 fi # TODO let user enter a description # build command -command="lncli --chain=${network} --network=${chain}net addinvoice ${amount}" +if [ $LNTYPE = cln ];then + label=$(date +%s) # seconds since 1970-01-01 00:00:00 UTC + # invoice msatoshi label description [expiry] [fallbacks] [preimage] [exposeprivatechannels] [cltv] + command="$lightningcli_alias invoice ${amount}sat $label ''" + # TODO warn about insufficient liquidity +elif [ $LNTYPE = lnd ];then + command="$lncli_alias addinvoice ${amount}" +fi # info output clear echo "******************************" echo "Create Invoice / Payment Request" echo "******************************" -echo "" +echo echo "COMMAND LINE: " echo $command -echo "" +echo echo "RESULT:" sleep 2 # execute command result=$($command 2>$_error) -error=`cat ${_error} 2>/dev/null` +error=$(cat ${_error} 2>/dev/null) #echo "result(${result})" #echo "error(${error})" @@ -65,9 +113,12 @@ if [ ${#error} -gt 0 ]; then echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo "${error}" else - - rhash=$(echo "$result" | grep r_hash | cut -d '"' -f4) - payReq=$(echo "$result" | grep payment_request | cut -d '"' -f4) + if [ $LNTYPE = cln ];then + payReq=$(echo "$result" | grep bolt11 | cut -d '"' -f4) + elif [ $LNTYPE = lnd ];then + rhash=$(echo "$result" | grep r_hash | cut -d '"' -f4) + payReq=$(echo "$result" | grep payment_request | cut -d '"' -f4) + fi /home/admin/config.scripts/blitz.display.sh qr "${payReq}" if [ $(sudo dpkg-query -l | grep "ii qrencode" | wc -l) = 0 ]; then @@ -86,19 +137,27 @@ else echo "${payReq}" echo echo "Monitoring the Incoming Payment with:" - echo "lncli --chain=${network} --network=${chain}net lookupinvoice ${rhash}" + if [ $LNTYPE = cln ];then + echo "$lightningcli_alias waitinvoice $label" + elif [ $LNTYPE = lnd ];then + echo "$lncli_alias lookupinvoice ${rhash}" + fi echo "Press x and hold to skip to menu." while : do - - result=$(lncli --chain=${network} --network=${chain}net lookupinvoice ${rhash}) - wasPayed=$(echo $result | grep -c '"settled": true') + if [ $LNTYPE = cln ];then + result=$($lightningcli_alias waitinvoice $label) + wasPayed=$(echo $result | grep -c 'paid') + elif [ $LNTYPE = lnd ];then + result=$($lncli_alias lookupinvoice ${rhash}) + wasPayed=$(echo $result | grep -c '"settled": true') + fi if [ ${wasPayed} -gt 0 ]; then echo echo $result echo - echo "Returning to menu - OK Invoice payed." + echo "OK the Invoice was paid - returning to menu." /home/admin/config.scripts/blitz.display.sh hide /home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/ok.png sleep 2 diff --git a/home.admin/BBfundWallet.sh b/home.admin/BBfundWallet.sh index 3425089a2..a55b3bd90 100755 --- a/home.admin/BBfundWallet.sh +++ b/home.admin/BBfundWallet.sh @@ -4,41 +4,68 @@ clear # load raspiblitz config data (with backup from old config) source /home/admin/raspiblitz.info source /mnt/hdd/raspiblitz.conf -if [ ${#network} -eq 0 ]; then network=`cat .network`; fi +if [ ${#network} -eq 0 ]; then network=$(cat .network); fi if [ ${#network} -eq 0 ]; then network="bitcoin"; fi if [ ${#chain} -eq 0 ]; then echo "gathering chain info ... please wait" chain=$(${network}-cli getblockchaininfo | jq -r '.chain') fi +source <(/home/admin/config.scripts/network.aliases.sh getvars $1 $2) + # PRECHECK) check if chain is in sync -chainOutSync=$(lncli --chain=${network} --network=${chain}net getinfo | grep '"synced_to_chain": false' -c) +if [ $LNTYPE = cln ];then + BLOCKHEIGHT=$($bitcoincli_alias getblockchaininfo|grep blocks|awk '{print $2}'|cut -d, -f1) + CLHEIGHT=$($lightningcli_alias getinfo | jq .blockheight) + if [ $BLOCKHEIGHT -eq $CLHEIGHT ];then + chainOutSync=0 + else + chainOutSync=1 + fi +elif [ $LNTYPE = lnd ];then + chainOutSync=$($lncli_alias getinfo | grep '"synced_to_chain": false' -c) +fi if [ ${chainOutSync} -eq 1 ]; then - echo "FAIL PRECHECK - lncli getinfo shows 'synced_to_chain': false - wait until chain is sync " - echo "" - echo "PRESS ENTER to return to menu" + if [ $LNTYPE = cln ];then + echo "# FAIL PRECHECK - lncli getinfo shows 'synced_to_chain': false - wait until chain is sync " + else + echo "# FAIL PRECHECK - 'lightning-cli getinfo' blockheight is different from 'bitcoind getblockchaininfo' - wait until chain is sync " + fi + echo + echo "# PRESS ENTER to return to menu" read key - exit 1 + exit 0 +else + echo "# OK - the chain is synced" fi # execute command -echo "calling lncli ... please wait" -command="lncli --chain=${network} --network=${chain}net newaddress p2wkh" +if [ $LNTYPE = cln ];then + command="$lightningcli_alias newaddr bech32" +elif [ $LNTYPE = lnd ];then + command="$lncli_alias newaddress p2wkh" +fi +echo "# Calling:" echo "${command}" +echo result=$($command) echo "$result" # on no result if [ ${#result} -eq 0 ]; then - echo "Empty result - sorry something went wrong - thats unusual." - echo "" - echo "PRESS ENTER to return to menu" + echo "# Empty result - sorry something went wrong - that is unusual." + echo + echo "# Press ENTER to return to menu" read key exit 1 fi - + # parse address from result -address=$( echo "$result" | grep "address" | cut -d '"' -f4) +if [ $LNTYPE = cln ];then + address=$( echo "$result" | grep "bech32" | cut -d '"' -f4) +elif [ $LNTYPE = lnd ];then + address=$( echo "$result" | grep "address" | cut -d '"' -f4) +fi # prepare coin info coininfo="Bitcoin" @@ -58,7 +85,7 @@ echo "generating QR code ... please wait" /home/admin/config.scripts/blitz.display.sh qr "$network:${address}" # dialog with instructions while QR code is shown on LCD -whiptail --backtitle "Fund your on chain wallet" \ +whiptail --backtitle "Fund your onchain wallet" \ --title "Send ${coininfo}" \ --yes-button "DONE" \ --no-button "Console QRcode" \ @@ -73,6 +100,11 @@ fi /home/admin/config.scripts/blitz.display.sh hide # follow up info -whiptail --backtitle "Fund your on chain wallet" \ +if [ $LNTYPE = cln ];then + string="Wait for confirmations." +elif [ $LNTYPE = lnd ];then + string="Wait for confirmations. \n\nYou can use info on LCD to check if funds have arrived. \n\nIf you want your lighting node to open channels automatically, activate the 'Autopilot' under 'Activate/Deactivate Services'" +fi +whiptail --backtitle "Fund your onchain wallet" \ --title "What's next?" \ - --msgbox "Wait for confirmations. \n\nYou can use info on LCD to check if funds have arrived. \n\nIf you want your lighting node to open channels automatically, activate the 'Autopilot' under 'Activate/Deactivate Services'" 0 0 \ No newline at end of file + --msgbox "$string" 0 0 \ No newline at end of file diff --git a/home.admin/BBopenChannel.sh b/home.admin/BBopenChannel.sh index 43ef1e100..59617a538 100755 --- a/home.admin/BBopenChannel.sh +++ b/home.admin/BBopenChannel.sh @@ -5,58 +5,95 @@ _error=$(mktemp -p /dev/shm/) # load raspiblitz config data (with backup from old config) source /home/admin/raspiblitz.info source /mnt/hdd/raspiblitz.conf -if [ ${#network} -eq 0 ]; then network=`cat .network`; fi +if [ ${#network} -eq 0 ]; then network=$(cat .network); fi if [ ${#network} -eq 0 ]; then network="bitcoin"; fi if [ ${#chain} -eq 0 ]; then echo "gathering chain info ... please wait" chain=$(${network}-cli getblockchaininfo | jq -r '.chain') fi -echo "" -echo "*** Precheck ***" +source <(/home/admin/config.scripts/network.aliases.sh getvars $1 $2) -# check if chain is in sync -chainInSync=$(lncli --chain=${network} --network=${chain}net getinfo | grep '"synced_to_chain": true' -c) -if [ ${chainInSync} -eq 0 ]; then - echo "FAIL - 'lncli getinfo' shows 'synced_to_chain': false" - echo "Wait until chain is sync with LND and try again." - echo "" - echo "Press ENTER to return to main menu." +echo +echo "# Precheck" # PRECHECK) check if chain is in sync +if [ $LNTYPE = cln ];then + BLOCKHEIGHT=$($bitcoincli_alias getblockchaininfo|grep blocks|awk '{print $2}'|cut -d, -f1) + CLHEIGHT=$($lightningcli_alias getinfo | jq .blockheight) + if [ $BLOCKHEIGHT -eq $CLHEIGHT ];then + chainOutSync=0 + else + chainOutSync=1 + fi +elif [ $LNTYPE = lnd ];then + chainOutSync=$($lncli_alias getinfo | grep '"synced_to_chain": false' -c) +fi +if [ ${chainOutSync} -eq 1 ]; then + if [ $LNTYPE = cln ];then + echo "# FAIL PRECHECK - 'lightning-cli getinfo' blockheight is different from 'bitcoind getblockchaininfo' - wait until chain is sync " + elif [ $LNTYPE = lnd ];then + echo "# FAIL PRECHECK - lncli getinfo shows 'synced_to_chain': false - wait until chain is sync " + fi + echo + echo "# PRESS ENTER to return to menu" read key - exit 1 + exit 0 +else + echo "# OK - the chain is synced" fi # check available funding -confirmedBalance=$(lncli --chain=${network} --network=${chain}net walletbalance | grep '"confirmed_balance"' | cut -d '"' -f4) +if [ $LNTYPE = cln ];then + for i in $($lightningcli_alias \ + listfunds|jq .outputs[]|jq 'select(.status=="confirmed")'|grep value|awk '{print $2}'|cut -d, -f1);do + confirmedBalance=$((confirmedBalance+i)) + done +elif [ $LNTYPE = lnd ];then + confirmedBalance=$($lncli_alias walletbalance | grep '"confirmed_balance"' | cut -d '"' -f4) +fi + if [ ${confirmedBalance} -eq 0 ]; then echo "FAIL - You have 0 SATOSHI in your confirmed LND On-Chain Wallet." echo "Please fund your on-chain wallet first and wait until confirmed." - echo "" + echo echo "Press ENTER to return to main menu." read key - exit 1 + exit 0 fi # check number of connected peers -numConnectedPeers=$(lncli --chain=${network} --network=${chain}net listpeers | grep pub_key -c) +if [ $LNTYPE = cln ];then + numConnectedPeers=$($lightningcli_alias listpeers | grep -c '"id":') +elif [ $LNTYPE = lnd ];then + numConnectedPeers=$($lncli_alias listpeers | grep pub_key -c) +fi + if [ ${numConnectedPeers} -eq 0 ]; then - echo "FAIL - no peers connected on lightning network" + echo "FAIL - no peers connected on the lightning network" echo "You can only open channels to peer nodes to connected to first." echo "Use CONNECT peer option in main menu first." - echo "" + echo echo "Press ENTER to return to main menu." read key - exit 1 + exit 0 fi # let user pick a peer to open a channels with OPTIONS=() -while IFS= read -r grepLine -do - pubKey=$(echo ${grepLine} | cut -d '"' -f4) - #echo "grepLine(${pubKey})" - OPTIONS+=(${pubKey} "") -done < <(lncli --chain=${network} --network=${chain}net listpeers | grep pub_key) +if [ $LNTYPE = cln ];then + while IFS= read -r grepLine + do + pubKey=$(echo ${grepLine} | cut -d '"' -f4) + # echo "grepLine(${pubKey})" + OPTIONS+=(${pubKey} "") + done < <($lightningcli_alias listpeers | grep '"id":') +elif [ $LNTYPE = lnd ];then + while IFS= read -r grepLine + do + pubKey=$(echo ${grepLine} | cut -d '"' -f4) + # echo "grepLine(${pubKey})" + OPTIONS+=(${pubKey} "") + done < <($lncli_alias listpeers | grep pub_key) +fi TITLE="Open (Payment) Channel" MENU="\nChoose a peer you connected to, to open the channel with: \n " pubKey=$(dialog --clear \ @@ -68,11 +105,11 @@ pubKey=$(dialog --clear \ clear if [ ${#pubKey} -eq 0 ]; then - clear - echo - echo "no channel selected - returning to menu ..." - sleep 4 - exit 1 + clear + echo + echo "no channel selected - returning to menu ..." + sleep 4 + exit 0 fi # find out what is the minimum amount @@ -82,15 +119,17 @@ minSat=20000 if [ "${network}" = "bitcoin" ]; then minSat=50000 fi -_error="./.error.out" -lncli --chain=${network} openchannel --network=${chain}net ${CHOICE} 1 0 2>$_error -error=`cat ${_error}` -if [ $(echo "${error}" | grep "channel is too small" -c) -eq 1 ]; then - minSat=$(echo "${error}" | tr -dc '0-9') +if [ $LNTYPE = lnd ];then + _error="./.error.out" + $lncli_alias openchannel ${pubkey} 1 0 2>$_error + error=$(cat ${_error}) + if [ $(echo "${error}" | grep "channel is too small" -c) -eq 1 ]; then + minSat=$(echo "${error}" | tr -dc '0-9') + fi fi # let user enter an amount -l1="Amount in SATOSHI to fund this channel:" +l1="Amount in satoshis to fund this channel:" l2="min required : ${minSat}" l3="max available : ${confirmedBalance}" dialog --title "Funding of Channel" \ @@ -101,7 +140,7 @@ if [ ${#amount} -eq 0 ]; then echo echo "no valid amount entered - returning to menu ..." sleep 4 - exit 1 + exit 0 fi # let user enter a confirmation target @@ -115,26 +154,31 @@ if [ ${#conf_target} -eq 0 ]; then echo echo "no valid target entered - returning to menu ..." sleep 4 - exit 1 + exit 0 fi # build command -command="lncli --chain=${network} --network=${chain}net openchannel --conf_target=${conf_target} ${pubKey} ${amount} 0" - +if [ $LNTYPE = cln ];then + # fundchannel id amount [feerate] [announce] [minconf] [utxos] [push_msat] [close_to] + feerate=$($bitcoincli_alias estimatesmartfee $conf_target |grep feerate|awk '{print $2}'|cut -c 5-7|bc) + command="$lightningcli_alias fundchannel ${pubKey} ${amount} $feerate" +elif [ $LNTYPE = lnd ];then + command="$lncli_alias openchannel --conf_target=${conf_target} ${pubKey} ${amount} 0" +fi # info output clear echo "******************************" echo "Open Channel" echo "******************************" -echo "" +echo echo "COMMAND LINE: " echo $command -echo "" +echo echo "RESULT:" # execute command -result=$($command 2>$_error) -error=`cat ${_error}` +result=$(eval $command 2>$_error) +error=$(cat ${_error}) #echo "result(${result})" #echo "error(${error})" @@ -149,20 +193,33 @@ else echo "WIN" echo "******************************" echo "${result}" - echo "" - echo "Whats next? --> You need to wait 3 confirmations, for the channel to be ready." - fundingTX=$(echo "${result}" | grep 'funding_txid' | cut -d '"' -f4) + echo + echo "What's next? --> You need to wait 3 confirmations for the channel to be ready." + if [ $LNTYPE = cln ];then + fundingTX=$(echo "${result}" | grep 'txid' | cut -d '"' -f4) + elif [ $LNTYPE = lnd ];then + fundingTX=$(echo "${result}" | grep 'funding_txid' | cut -d '"' -f4) + fi + echo if [ "${network}" = "bitcoin" ]; then if [ "${chain}" = "main" ]; then - echo "https://live.blockcypher.com/btc/tx/${fundingTX}" - else - echo "https://live.blockcypher.com/btc-testnet/tx/${fundingTX}" + #echo "https://live.blockcypher.com/btc/tx/${fundingTX}" + echo "https://mempool.space/tx/${fundingTX}" + elif [ "${chain}" = "test" ]||[ "${chain}" = "sig" ]; then + echo "https://mempool.space/${chain}net/tx/${fundingTX}" + fi + echo + echo "In the Tor Browser:" + if [ "${chain}" = "main" ]; then + echo "http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/tx/${fundingTX}" + elif [ "${chain}" = "test" ]||[ "${chain}" = "sig" ]; then + echo "http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/${chain}net/tx/${fundingTX}" fi fi if [ "${network}" = "litecoin" ]; then echo "https://live.blockcypher.com/ltc/tx/${fundingTX}/" fi fi -echo "" +echo echo "Press ENTER to return to main menu." read key \ No newline at end of file diff --git a/home.admin/BBpayInvoice.sh b/home.admin/BBpayInvoice.sh index aafcc8418..2785c688c 100755 --- a/home.admin/BBpayInvoice.sh +++ b/home.admin/BBpayInvoice.sh @@ -7,17 +7,59 @@ sudo chmod 7777 ${_error} 2>/dev/null # load raspiblitz config data (with backup from old config) source /home/admin/raspiblitz.info source /mnt/hdd/raspiblitz.conf -if [ ${#network} -eq 0 ]; then network=`cat .network`; fi +if [ ${#network} -eq 0 ]; then network=$(cat .network); fi if [ ${#network} -eq 0 ]; then network="bitcoin"; fi if [ ${#chain} -eq 0 ]; then echo "gathering chain info ... please wait" chain=$(${network}-cli getblockchaininfo | jq -r '.chain') fi -# Check if ready (chain in sync and channels open) -./XXchainInSync.sh $network $chain -if [ $? != 0 ]; then - exit 1 +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 +if [ $LNTYPE = cln ];then + lncommand="${netprefix}lightning-cli" + BLOCKHEIGHT=$($bitcoincli_alias getblockchaininfo|grep blocks|awk '{print $2}'|cut -d, -f1) + CLHEIGHT=$($lightningcli_alias getinfo | jq .blockheight) + if [ $BLOCKHEIGHT -eq $CLHEIGHT ];then + cmdChainInSync=1 + else + cmdChainInSync=0 + fi +elif [ $LNTYPE = lnd ];then + lncommand="${netprefix}lncli" + cmdChainInSync="$lncli_alias getinfo | grep '"synced_to_chain": true' -c" +fi +chainInSync=${cmdChainInSync} +while [ "${chainInSync}" == "0" ]; do + dialog --title "Fail: not in sync" \ + --ok-label "Try now" \ + --cancel-label "Give up" \ + --pause "\n\n'$lncommand getinfo' shows 'synced_to_chain': false\n\nTry again in a few seconds." 15 60 5 + + if [ $? -gt 0 ]; then + exit 0 + fi + chainInSync=${cmdChainInSync} +done + +# check number of connected peers +echo "check for open channels" +if [ $LNTYPE = cln ];then + openChannels=$($lightningcli_alias listpeers | grep -c "CHANNELD_NORMAL") +elif [ $LNTYPE = lnd ];then + openChannels=$($lncli_alias listchannels 2>/dev/null | grep chan_id -c) +fi +if [ ${openChannels} -eq 0 ]; then + echo + echo "!!!!!!!!!!!!!!!!!!!" + echo "FAIL - You have NO ESTABLISHED CHANNELS .. open a channel first." + echo "!!!!!!!!!!!!!!!!!!!" + sleep 3 + echo + exit 0 fi paymentRequestStart="???" @@ -36,7 +78,7 @@ if [ "${network}" = "bitcoin" ]; then if [ "${chain}" = "main" ]; then testSite="https://satoshis.place" else - testSite="https://testnet.satoshis.place" + testSite="https://starblocks.acinq.co/" fi elif [ "${network}" = "litecoin" ]; then testSite="https://millionlitecoinhomepage.net" @@ -46,7 +88,7 @@ fi l1="Copy the LightningInvoice/PaymentRequest into here:" l2="Its a long string starting with '${paymentRequestStart}'" l3="To try it out go to: ${testSite}" -dialog --title "Pay thru Lightning Network" \ +dialog --title "Pay through the Lightning Network" \ --inputbox "$l1\n$l2\n$l3" 10 70 2>$_temp invoice=$(cat $_temp | xargs) shred -u $_temp @@ -54,14 +96,19 @@ if [ ${#invoice} -eq 0 ]; then clear echo echo "no invoice entered - returning to menu ..." - sleep 2 - exit 1 + sleep 3 + exit 0 fi # TODO: maybe try/show the decoded info first by using https://api.lightning.community/#decodepayreq # build command -command="lncli --chain=${network} --network=${chain}net sendpayment --force --pay_req=${invoice}" +if [ $LNTYPE = cln ];then + # pay bolt11 [msatoshi] [label] [riskfactor] [maxfeepercent] [retry_for] [maxdelay] [exemptfee] + command="$lightningcli_alias pay ${invoice}" +elif [ $LNTYPE = lnd ];then + command="$lncli_alias sendpayment --force --pay_req=${invoice}" +fi # info output clear @@ -70,20 +117,24 @@ echo "Pay Invoice / Payment Request" echo "This script is as an example how to use the lncli interface." echo "Its not optimized for performance or error handling." echo "************************************************************" -echo "" +echo echo "COMMAND LINE: " echo $command -echo "" +echo echo "RESULT (may wait in case of timeout):" # execute command result=$($command 2>$_error) -error=`cat ${_error}` +error=$(cat ${_error}) #echo "result(${result})" #echo "error(${error})" -resultIsError=$(echo "${result}" | grep -c "payment_error") +if [ $LNTYPE = cln ];then + resultIsError=$(echo "${result}" | grep -c '"code":') +elif [ $LNTYPE = lnd ];then + resultIsError=$(echo "${result}" | grep -c "payment_error") +fi if [ ${resultIsError} -gt 0 ]; then error="${result}" fi @@ -99,8 +150,8 @@ else echo "******************************" echo "WIN" echo "******************************" - echo "It worked :) - check out the service you were paying." + echo "It worked :) - check the service you were paying." fi -echo "" +echo echo "Press ENTER to return to main menu." read key diff --git a/home.admin/BlitzTUI/blitztui/main.py b/home.admin/BlitzTUI/blitztui/main.py index 70493268c..b24e5b987 100644 --- a/home.admin/BlitzTUI/blitztui/main.py +++ b/home.admin/BlitzTUI/blitztui/main.py @@ -522,7 +522,7 @@ class AppWindow(QMainWindow): process = QProcess(self) process.start('uxterm', ['-fa', 'Terminus', '-fs', '9', '-fn', 'fixed', '-into', str(int(self.ui.widget.winId())), - '+sb', '-hold', '-e', 'bash -c \"sudo /home/admin/XXshutdown.sh\"']) + '+sb', '-hold', '-e', 'bash -c \"sudo /home/admin/config.scripts/blitz.shutdown.sh\"']) def b4_restart(self): log.info("restart") @@ -532,7 +532,7 @@ class AppWindow(QMainWindow): process = QProcess(self) process.start('uxterm', ['-fa', 'Terminus', '-fs', '9', '-fn', 'fixed', '-into', str(int(self.ui.widget.winId())), - '+sb', '-hold', '-e', 'bash -c \"sudo /home/admin/XXshutdown.sh reboot\"']) + '+sb', '-hold', '-e', 'bash -c \"sudo /home/admin/config.scripts/blitz.shutdown.sh reboot\"']) def create_new_invoice(self, memo="Pay to RaspiBlitz", amt=0): if IS_DEV_ENV: diff --git a/home.admin/XXchainInSync.sh b/home.admin/XXchainInSync.sh deleted file mode 100755 index 9e102072e..000000000 --- a/home.admin/XXchainInSync.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash - -# Check if lnd is synced to chain and channels are open -# If it isn't, wait until it is -# exits with 1 if it isn't. - -network=$1 -chain=$2 - -# check if chain is in sync -cmdChainInSync="lncli --chain=${network} --network=${chain}net getinfo | grep '"synced_to_chain": true' -c" -chainInSync=${cmdChainInSync} -while [ "${chainInSync}" == "0" ]; do - dialog --title "Fail: not in sync" \ - --ok-label "Try now" \ - --cancel-label "Give up" \ - --pause "\n\n'lncli getinfo' shows 'synced_to_chain': false\n\nTry again in a few seconds." 15 60 5 - - if [ $? -gt 0 ]; then - exit 1 - fi - chainInSync=${cmdChainInSync} -done - -# check number of connected peers -echo "check for open channels" -openChannels=$(sudo -u bitcoin /usr/local/bin/lncli --chain=${network} --network=${chain}net listchannels 2>/dev/null | grep chan_id -c) -if [ ${openChannels} -eq 0 ]; then - echo "" - echo "!!!!!!!!!!!!!!!!!!!" - echo "FAIL - You have NO ESTABLISHED CHANNELS .. open a channel first." - echo "!!!!!!!!!!!!!!!!!!!" - echo "" - exit 1 -fi - -exit 0 diff --git a/home.admin/_background.sh b/home.admin/_background.sh index d07346459..b2471b931 100755 --- a/home.admin/_background.sh +++ b/home.admin/_background.sh @@ -1,5 +1,7 @@ #!/bin/bash +# TODO: check & update localip in raspiblitz info for display (only write on change) + # This script runs on after start in background # as a service and gets restarted on failure # it runs ALMOST every seconds @@ -37,15 +39,47 @@ do # count up counter=$(($counter+1)) + # limit counter to max seconds per week: + # 604800 = 60sec * 60min * 24hours * 7days + if [ ${counter} -gt 604800 ]; then + counter=0 + echo "counter zero reset" + fi + # gather the uptime seconds upSeconds=$(cat /proc/uptime | grep -o '^[0-9]\+') - # prevent restart if COPY OVER LAN is running - # see: https://github.com/rootzoll/raspiblitz/issues/1179#issuecomment-646079467 - source ${infoFile} - if [ "${state}" == "copysource" ]; then - echo "copysource mode: skipping background loop" - sleep 10 + # source info file fresh on every loop + source ${infoFile} 2>/dev/null + + #################################################### + # SKIP BACKGROUND TASK LOOP ON CERTAIN SYSTEM STATES + # https://github.com/rootzoll/raspiblitz/issues/160 + #################################################### + + if [ "${state}" == "" ] || [ "${state}" == "copysource" ] || [ "${state}" == "copytarget" ]; then + echo "skipping background loop (${counter}) - state(${state})" + sleep 1 + 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 + #################################################### + + if [ "${setupPhase}" != "done" ]; then + echo "skipping rest of tasks because still in setupPhase(${setupPhase})" + sleep 1 continue fi @@ -60,13 +94,13 @@ do echo "*** RECHECK DHCP-SERVER ***" # get the local network IP - localip=$(ip addr | grep 'state UP' -A2 | egrep -v 'docker0|veth' | grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + localip=$(hostname -I | awk '{print $1}') echo "localip(${localip})" # detect a missing DHCP config if [ "${localip:0:4}" = "169." ]; then echo "Missing DHCP detected ... trying emergency reboot" - sudo /home/admin/XXshutdown.sh reboot + sudo /home/admin/config.scripts/blitz.shutdown.sh reboot else echo "DHCP OK" fi @@ -183,9 +217,9 @@ do # check every 1min recheckSync=$(($counter % 60)) if [ ${recheckSync} -eq 1 ]; then - source <(sudo -u admin /home/admin/config.scripts/network.monitor.sh peer-status) + source <(sudo /home/admin/config.scripts/network.monitor.sh peer-status) echo "Blockchain Sync Monitoring: peers=${peers}" - if [ "${peers}" == "0" ]; then + if [ "${peers}" == "0" ] && [ "${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 fi @@ -354,7 +388,6 @@ do fi - ############################### # LND AUTO-UNLOCK ############################### @@ -367,8 +400,8 @@ do if [ "${autoUnlock}" = "on" ]; then # check if lnd is locked - locked=$(sudo -u bitcoin /usr/local/bin/lncli --chain=${network} --network=${chain}net getinfo 2>&1 | grep -c unlock) - if [ ${locked} -gt 0 ]; then + source <(/home/admin/config.scripts/lnd.unlock.sh status) + if [ "${locked}" != "0" ]; then echo "STARTING AUTO-UNLOCK ..." sudo /home/admin/config.scripts/lnd.unlock.sh @@ -406,9 +439,10 @@ do recheckIBD=$((($counter % 60)+1)) if [ ${recheckIBD} -eq 1 ]; then # check if flag exists (got created on 50syncHDD.sh) - flagExists=$(ls /home/admin/selfsync.flag 2>/dev/null | grep -c "selfsync.flag") + flagExists=$(ls /mnt/hdd/${network}/blocks/selfsync.flag 2>/dev/null | grep -c "selfsync.flag") if [ ${flagExists} -eq 1 ]; then - finishedIBD=$(sudo -u bitcoin ${network}-cli getblockchaininfo | grep "initialblockdownload" | grep -c "false") + source <(/home/admin/config.scripts/network.aliases.sh getvars) + finishedIBD=$($bitcoincli_alias getblockchaininfo | grep "initialblockdownload" | grep -c "false") if [ ${finishedIBD} -eq 1 ]; then echo "CHECK FOR END OF IBD --> reduce RAM, check TOR and restart ${network}d" @@ -463,12 +497,5 @@ do # sleep 1 sec sleep 1 - # limit counter to max seconds per week: - # 604800 = 60sec * 60min * 24hours * 7days - if [ ${counter} -gt 604800 ]; then - counter=0 - echo "counter zero reset" - fi - done diff --git a/home.admin/_bootstrap.migration.sh b/home.admin/_bootstrap.migration.sh deleted file mode 100755 index 97f4622d9..000000000 --- a/home.admin/_bootstrap.migration.sh +++ /dev/null @@ -1,252 +0,0 @@ -#!/bin/bash - -# LOGFILE - store debug logs of bootstrap -logFile="/home/admin/raspiblitz.log" - -# INFOFILE - state data from bootstrap -infoFile="/home/admin/raspiblitz.info" - -# CONFIGFILE - configuration of RaspiBlitz -configFile="/mnt/hdd/raspiblitz.conf" - -# debug info -echo "STARTED Migration/Init --> see logs in ${logFile}" -echo "STARTED Migration/Init" >> ${logFile} -sudo sed -i "s/^message=.*/message='Running Data Migration'/g" ${infoFile} - -# HDD BTRFS RAID REPAIR IF NEEDED -source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) -if [ ${isBTRFS} -eq 1 ] && [ ${isMounted} -eq 1 ]; then - echo "CHECK BTRFS RAID" >> ${logFile} - if [ ${isRaid} -eq 1 ] && [ ${#raidUsbDev} -eq 0 ]; then - echo "HDD was set to work in RAID, but RAID drive is not connected" >> ${logFile} - echo "Trying to set HDD back to single mode." >> ${logFile} - sudo /home/admin/config.scripts/blitz.datadrive.sh raid off >> ${logFile} - else - echo "OK" >> ${logFile} - fi -fi - -# LOAD DATA & PRECHECK - -# check if there is a config file -configExists=$(ls ${configFile} 2>/dev/null | grep -c '.conf') -if [ ${configExists} -eq 0 ]; then - echo "FAIL see ${logFile}" - echo "FAIL: no config file (${configFile}) found to init or upgrade!" >> ${logFile} - exit 1 -fi - -# load old or init raspiblitz config -source ${configFile} - -# check if config files contains basic: hostname -if [ ${#hostname} -eq 0 ]; then - echo "FAIL see ${logFile}" - echo "FAIL: missing hostname in (${configFile})!" >> ${logFile} - exit 1 -fi - -# load codeVersion -source /home/admin/_version.info - -# check if code version was loaded -if [ ${#codeVersion} -eq 0 ]; then - echo "FAIL see ${logFile}" - echo "FAIL: no code version (/home/admin/_version.info) found!" >> ${logFile} - exit 1 -fi - -echo "prechecks OK" >> ${logFile} - -# DEFAULT VALUES - MISSING data fields on init or upadte - -# AUTOPILOT -# autoPilot=off|on -if [ ${#autoPilot} -eq 0 ]; then - echo "autoPilot=off" >> $configFile -fi - -# AUTO NAT DISCOVERY -# autoNatDiscovery=off|on -if [ ${#autoNatDiscovery} -eq 0 ]; then - echo "autoNatDiscovery=off" >> $configFile -fi - -# TOR -# runBehindTor=off|on -if [ ${#runBehindTor} -eq 0 ]; then - echo "runBehindTor=off" >> $configFile -fi - -# RideTheLightning RTL -# rtlWebinterface=off|on -if [ ${#rtlWebinterface} -eq 0 ]; then - echo "rtlWebinterface=off" >> $configFile -fi - -echo "default values OK" >> ${logFile} - -# MIGRATION - DATA CONVERSION when updating config -# this is the place if on a future version change -# a conversion of config data or app data is needed - -# if old bitcoin.conf exists ... -configExists=$(sudo ls /mnt/hdd/bitcoin/bitcoin.conf | grep -c '.conf') -if [ ${configExists} -eq 1 ]; then - echo "Checking old bitcoin.conf ..." >> ${logFile} - - # make sure to fix bitcoind RPC port if not done in old version - # https://github.com/rootzoll/raspiblitz/issues/217 - # https://github.com/rootzoll/raspiblitz/issues/950 - - if ! grep -Eq "^rpcallowip=.*" /mnt/hdd/${network}/${network}.conf; then - echo "fix issue #217 -> adding rpcallowip=127.0.0.1" >> ${logFile} - echo "rpcallowip=127.0.0.1" >> /mnt/hdd/${network}/${network}.conf - else - echo "check issue #217 -> ok rpcallow exists" >> ${logFile} - fi - - # check whether "main." needs to be added to rpcport and rpcbind - if grep -Eq "^rpcport=.*" /mnt/hdd/${network}/${network}.conf; then - echo "fix issue #950 -> change rpcport to main.rpcport" >> ${logFile} - sudo sed -i -E 's/^(rpcport=.*)/main.\1/g' /mnt/hdd/${network}/${network}.conf - else - echo "check issue #950 -> ok ^rpcport does not exist" >> ${logFile} - fi - - if grep -Eq "^rpcbind=.*" /mnt/hdd/${network}/${network}.conf; then - echo "fix issue #950 -> change rpcbind to main.rpcbind" >> ${logFile} - sudo sed -i -E 's/^(rpcbind=.*)/main.\1/g' /mnt/hdd/${network}/${network}.conf - else - echo "check issue #950 -> ok ^rpcbind does not exist" >> ${logFile} - fi - - # check whether right settings are there ("main.") - if ! grep -Eq "^main.rpcport=.*" /mnt/hdd/${network}/${network}.conf; then - echo "fix issue #217 -> adding main.rpcport=8332" >> ${logFile} - echo "main.rpcport=8332" >> /mnt/hdd/${network}/${network}.conf - else - echo "check issue #217 -> ok main.rpcport exists" >> ${logFile} - fi - - if ! grep -Eq "^main.rpcbind=.*" /mnt/hdd/${network}/${network}.conf; then - echo "fix issue #217 -> adding main.rpcbind=127.0.0.1:8332" >> ${logFile} - echo "main.rpcbind=127.0.0.1:8332" >> /mnt/hdd/${network}/${network}.conf - else - echo "check issue #217 -> ok main.rpcbind exists" >> ${logFile} - fi - - # same for testnet - if ! grep -Eq "^test.rpcport=.*" /mnt/hdd/${network}/${network}.conf; then - echo "fix issue #950 -> adding test.rpcport=18332" >> ${logFile} - echo "test.rpcport=18332" >> /mnt/hdd/${network}/${network}.conf - else - echo "check issue #950 -> ok test.rpcport exists" >> ${logFile} - fi - - if ! grep -Eq "^test.rpcbind=.*" /mnt/hdd/${network}/${network}.conf; then - echo "fix issue #950 -> adding test.rpcbind=127.0.0.1:18332" >> ${logFile} - echo "test.rpcbind=127.0.0.1:18332" >> /mnt/hdd/${network}/${network}.conf - else - echo "check issue #950 -> ok test.rpcbind exists" >> ${logFile} - fi - -else - echo "WARN: /mnt/hdd/bitcoin/bitcoin.conf not found" >> ${logFile} -fi - -# if old lnd.conf exists ... -configExists=$(sudo ls /mnt/hdd/lnd/lnd.conf | grep -c '.conf') -if [ ${configExists} -eq 1 ]; then - - # remove RPC user & pass from lnd.conf ... since v1.7 - # https://github.com/rootzoll/raspiblitz/issues/2160 - echo "- #2160 lnd.conf --> make sure contains no RPC user/pass for bitcoind" >> ${logFile} - sudo sed -i '/^\[Bitcoind\]/d' /mnt/hdd/lnd/lnd.conf - sudo sed -i '/^bitcoind.rpchost=/d' /mnt/hdd/lnd/lnd.conf - sudo sed -i '/^bitcoind.rpcpass=/d' /mnt/hdd/lnd/lnd.conf - sudo sed -i '/^bitcoind.rpcuser=/d' /mnt/hdd/lnd/lnd.conf - sudo sed -i '/^bitcoind.zmqpubrawblock=/d' /mnt/hdd/lnd/lnd.conf - sudo sed -i '/^bitcoind.zmqpubrawtx=/d' /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) - 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) - 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 - 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) - if [ "${configParamExists}" == "0" ]; then - echo " - ADDING 'sync-freelist'" >> ${logFile} - sudo 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) - if [ "${configParamExists}" == "0" ]; then - echo " - ADDING 'stagger-initial-reconnect'" >> ${logFile} - sudo 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) - if [ "${configParamExists}" == "0" ]; then - echo " - ADDING 'tlsautorefresh'" >> ${logFile} - sudo 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) - if [ "${configParamExists}" == "0" ]; then - echo " - ADDING 'tlsdisableautofill'" >> ${logFile} - sudo sed -i "${applicationOptionsLineNumber}itlsdisableautofill=1" /mnt/hdd/lnd/lnd.conf - else - echo " - OK 'tlsdisableautofill' exists (${configParamExists})" >> ${logFile} - fi - - else - echo " - WARN: section '[Application Options]' not found in lnd.conf" >> ${logFile} - fi - -else - echo "WARN: /mnt/hdd/lnd/lnd.conf not found" >> ${logFile} -fi - -echo "Version Code: ${codeVersion}" >> ${logFile} -echo "Version Data: ${raspiBlitzVersion}" >> ${logFile} - -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} -else - echo "OK - version of config data is up to date" >> ${logFile} -fi - -echo "END Migration/Init" >> ${logFile} - -exit 0 - diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index f12134300..995cefd29 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -1,8 +1,7 @@ #!/bin/bash # This script runs on every start called by boostrap.service -# It makes sure that the system is configured like the -# default values or as in the config. +# see logs with --> tail -n 100 /home/admin/raspiblitz.log ################################ # BASIC SETTINGS @@ -26,37 +25,11 @@ logFile="/home/admin/raspiblitz.log" # used by display and later setup steps infoFile="/home/admin/raspiblitz.info" +# SETUPFILE +# this key/value file contains the state during the setup process +setupFile="/var/cache/raspiblitz/temp/raspiblitz.setup" -# FUNCTIONS to be used later on in the script - -# wait until raspberry pi gets a local IP -function wait_for_local_network() { - gotLocalIP=0 - until [ ${gotLocalIP} -eq 1 ] - do - localip=$(ip addr | grep 'state UP' -A2 | egrep -v 'docker0|veth' | egrep -i '(*[eth|ens|enp|eno|wlan|wlp][0-9]$)' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') - if [ ${#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/g" ${infoFile} - sed -i "s/^message=.*/message='Connect the LAN/WAN'/g" ${infoFile} - else - # display user that wifi settings are not working - sed -i "s/^state=.*/state=noIP/g" ${infoFile} - sed -i "s/^message=.*/message='WIFI Settings not working'/g" ${infoFile} - fi - elif [ "${localip:0:4}" = "169." ]; then - # display user waiting for DHCP - sed -i "s/^state=.*/state=noDCHP/g" ${infoFile} - sed -i "s/^message=.*/message='Waiting for DHCP'/g" ${infoFile} - else - gotLocalIP=1 - fi - sleep 1 - done -} - +# Init boostrap log file echo "Writing logs to: ${logFile}" echo "" > $logFile echo "***********************************************" >> $logFile @@ -68,36 +41,210 @@ echo "***********************************************" >> $logFile network="" chain="" setupStep=0 +setupPhase='boot' fsexpanded=0 # see https://github.com/rootzoll/raspiblitz/issues/1265#issuecomment-813369284 displayClass="lcd" displayType="" fundRecovery=0 +################################ +# INIT raspiblitz.info +################################ + # try to load old values if available (overwrites defaults) source ${infoFile} 2>/dev/null # 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/.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 "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 777 ${infoFile} +###################################### +# CHECK SD CARD INCONSISTENT STATE + +# when the provision did not ran thru without error (ask user for fresh sd card) +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} + echo "FAIL: 'provision did not ran thru - need fresh sd card!" >> ${logFile} + exit 1 +fi + +###################################### +# SECTION FOR POSSIBLE REBOOT ACTIONS +systemInitReboot=0 + +################################ +# FORCED SWITCH TO HDMI +# if a file called 'hdmi' gets +# placed onto the boot part of +# the sd card - switch to hdmi +################################ + +forceHDMIoutput=$(sudo ls /boot/hdmi* 2>/dev/null | grep -c hdmi) +if [ ${forceHDMIoutput} -eq 1 ]; then + # delete that file (to prevent loop) + sudo rm /boot/hdmi* + # switch to HDMI what will trigger reboot + echo "HDMI switch found ... activating HDMI display output & reboot" >> $logFile + sudo /home/admin/config.scripts/blitz.display.sh set-display hdmi >> $logFile + systemInitReboot=1 +else + echo "No HDMI switch found. " >> $logFile +fi + +################################ +# SSH SERVER CERTS RESET +# if a file called 'ssh.reset' gets +# placed onto the boot part of +# the sd card - delete old ssh data +################################ + +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 + # delete ssh certs + echo "SSHRESET switch found ... stopping SSH and deleting old certs" >> $logFile + sudo systemctl stop sshd >> $logFile + sudo rm /mnt/hdd/ssh/ssh_host* >> $logFile + sudo ssh-keygen -A >> $logFile + systemInitReboot=1 +else + echo "No SSHRESET switch found. " >> $logFile +fi + +################################ +# BACKGROUND TASK RUN FROM BEGINNING +# on 1.7 sd card build background task runs after boostrap +# but bootstrap already needs background task running now +# REMOVE ON v1.8 release #2328 +################################ + +backgroundNeedsEdit=$(sudo cat /etc/systemd/system/background.service 2>/dev/null | grep -c 'Wants=bootstrap.service') +if [ ${backgroundNeedsEdit} -eq 1 ]; then + echo "BACKGROUND EDIT needed ..." >> $logFile + sudo sed -i "s/^Wants=.*/Wants=network.target/g" /etc/systemd/system/background.service + sudo sed -i "s/^After=.*/After=network.target/g" /etc/systemd/system/background.service + systemInitReboot=1 +else + echo "BACKGROUND EDIT already done. " >> $logFile +fi + +################################ +# FS EXPAND +# if a file called 'ssh.reset' gets +# placed onto the boot part of +# the sd card - delete old ssh data +################################ +source <(sudo /home/admin/config.scripts/blitz.bootdrive.sh status) +if [ "${needsExpansion}" == "1" ] && [ "${fsexpanded}" == "0" ]; then + echo "FSEXPAND needed ... starting process" >> $logFile + sudo /home/admin/config.scripts/blitz.bootdrive.sh status >> $logFile + sudo /home/admin/config.scripts/blitz.bootdrive.sh fsexpand >> $logFile + systemInitReboot=1 +elif [ "${tooSmall}" == "1" ]; then + echo "!!! FAIL !!!!!!!!!!!!!!!!!!!!" >> $logFile + echo "SDCARD TOO SMALL 16G minimum" >> $logFile + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >> $logFile + sed -i "s/^state=.*/state=sdtoosmall/g" ${infoFile} + echo "System stopped. Please cut power." >> $logFile + sleep 6000 + sudo shutdown -r now + slepp 100 + exit 1 +else + echo "No FS EXPAND needed. needsExpansion(${needsExpansion}) fsexpanded(${fsexpanded})" >> $logFile +fi + +################################ +# UASP FIX - first try +# if HDD is connected on start +################################ +source <(sudo /home/admin/config.scripts/blitz.datadrive.sh uasp-fix) +if [ "${neededReboot}" == "1" ]; then + echo "UASP FIX applied (1st-try) ... reboot needed." >> $logFile + systemInitReboot=1 +else + echo "No UASP FIX needed (1st-try)." >> $logFile +fi + +###################################### +# CHECK IF REBOOT IS NEEDED +# from actions above + +if [ "${systemInitReboot}" == "1" ]; then + sudo cp ${logFile} ${logFile}.systeminit + sudo sed -i "s/^state=.*/state=reboot/g" ${infoFile} + 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 + +################################ +# GENERATE UNIQUE SSH PUB KEYS +# on first boot up +################################ + +numberOfPubKeys=$(sudo ls /etc/ssh/ | grep -c 'ssh_host_') +if [ ${numberOfPubKeys} -eq 0 ]; then + echo "*** Generating new SSH PubKeys" >> $logFile + sudo dpkg-reconfigure openssh-server + echo "OK" >> $logFile +fi + +################################ +# CLEANING BOOT SYSTEM +################################ + # resetting start count files echo "SYSTEMD RESTART LOG: blockchain (bitcoind/litecoind)" > /home/admin/systemd.blockchain.log echo "SYSTEMD RESTART LOG: lightning (LND)" > /home/admin/systemd.lightning.log @@ -129,195 +276,199 @@ fi echo "" ############################### -# RAID data check (BRTFS) -############################### -# see https://github.com/rootzoll/raspiblitz/issues/360#issuecomment-467698260 +# WAIT FOR ALL SERVICES +# get the state of data drive source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) -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/ -fi ################################ -# BOOT LOGO +# WAIT LOOP: HDD CONNECTED ################################ -# 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 +echo "Waiting for HDD/SSD ..." >> $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 ################################ -# GENERATE UNIQUE SSH PUB KEYS -# on first boot up +# UASP FIX - second try +# when HDD gets connected later ################################ - -numberOfPubKeys=$(sudo ls /etc/ssh/ | grep -c 'ssh_host_') -if [ ${numberOfPubKeys} -eq 0 ]; then - echo "*** Generating new SSH PubKeys" >> $logFile - sudo dpkg-reconfigure openssh-server - echo "OK" >> $logFile -fi - -################################ -# AFTER BOOT SCRIPT -# when a process needs to -# execute stuff after a reboot -# it should in file -# /home/admin/setup.sh -################################ - -# check for after boot script -afterSetupScriptExists=$(ls /home/admin/setup.sh 2>/dev/null | grep -c setup.sh) -if [ ${afterSetupScriptExists} -eq 1 ]; then - echo "*** SETUP SCRIPT DETECTED ***" - # LCD info - sudo sed -i "s/^state=.*/state=recovering/g" ${infoFile} - sudo sed -i "s/^message=.*/message='After Boot Setup (takes time)'/g" ${infoFile} - # echo out script to journal logs - sudo cat /home/admin/setup.sh - # execute the after boot script - echo "Logs in stored to: /home/admin/raspiblitz.log.recover" - echo "\n***** RUNNING AFTER BOOT SCRIPT ******** " >> ${logFile} - sudo /home/admin/setup.sh >> ${logFile} - # delete the after boot script - sudo rm /home/admin/setup.sh - # reboot again - echo "DONE wait 10 secs ... one more reboot needed ... " >> ${logFile} - sudo cp ${logFile} ${logFile}.afterboot - sudo shutdown -r now - sleep 100 - exit 0 -fi - -################################ -# FORCED SWITCH TO HDMI -# if a file called 'hdmi' gets -# placed onto the boot part of -# the sd card - switch to hdmi -################################ - -forceHDMIoutput=$(sudo ls /boot/hdmi* 2>/dev/null | grep -c hdmi) -if [ ${forceHDMIoutput} -eq 1 ]; then - # delete that file (to prevent loop) - sudo rm /boot/hdmi* - # switch to HDMI what will trigger reboot - echo "Yes HDMI switch found ... activating HDMI display output & reboot" >> $logFile - sudo /home/admin/config.scripts/blitz.display.sh set-display hdmi >> $logFile - sudo cp ${logFile} ${logFile}.hdmiswitch +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} sudo shutdown -r now sleep 100 exit 0 else - echo "No HDMI switch found. " >> $logFile + echo "No UASP FIX needed (2nd-try)." >> $logFile fi -################################ -# SSH SERVER CERTS RESET -# if a file called 'ssh.reset' gets -# placed onto the boot part of -# the sd card - delete old ssh data -################################ +################################### +# WAIT LOOP: LOCALNET / INTERNET +# after HDD > can contain WIFI conf +################################### -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 - # show info ssh reset - sed -i "s/^state=.*/state=sshreset/g" ${infoFile} - sed -i "s/^message=.*/message='resetting SSH & reboot'/g" ${infoFile} - # delete ssh certs - sudo systemctl stop sshd >> $logFile - sudo rm /mnt/hdd/ssh/ssh_host* >> $logFile - sudo ssh-keygen -A >> $logFile - echo "SSH SERVER CERTS RESET ... (reboot) " >> $logFile - sudo cp ${logFile} ${logFile}.sshcerts - sudo shutdown -r now - sleep 100 - exit 0 -fi - -################################ -# HDD CHECK & PRE-INIT -################################ - -# Without LCD message needs to be printed -# wait loop until HDD is connected -echo "" -until [ ${isMounted} -eq 1 ] || [ ${#hddCandidate} -gt 0 ] +gotLocalIP=0 +until [ ${gotLocalIP} -eq 1 ] do - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) - echo "isMounted: $isMounted" >> $logFile - echo "hddCandidate: $hddCandidate" >> $logFile - message="Connect the Hard Drive" - echo $message - if [ ${isMounted} -eq 0 ] && [ ${#hddCandidate} -eq 0 ]; then - sed -i "s/^state=.*/state=noHDD/g" ${infoFile} - sed -i "s/^message=.*/message='$message'/g" ${infoFile} + + # get latest network info & update raspiblitz.info + source <(/home/admin/config.scripts/internet.sh status) + sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} + + # 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} + elif [ ${#localip} -eq 0 ]; then + 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} + 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} + 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} + else + gotLocalIP=1 fi - sleep 2 + sleep 1 done # write info for LCD -sed -i "s/^state=.*/state=booting/g" ${infoFile} +sed -i "s/^state=.*/state=inspect-hdd/g" ${infoFile} sed -i "s/^message=.*/message='please wait'/g" ${infoFile} # 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 + +############################ +############################ +# WHEN SETUP IS NEEDED +############################ + if [ ${isMounted} -eq 0 ]; then - echo "HDD is there but not AutoMounted yet - checking Setup" >> $logFile + # write data needed for setup process into raspiblitz.info + echo "hddCandidate='${hddCandidate}'" >> ${infoFile} + echo "hddBlocksBitcoin=${hddBlocksBitcoin}" >> ${infoFile} + echo "hddBlocksLitecoin=${hddBlocksLitecoin}" >> ${infoFile} + echo "hddGotMigrationData=${hddGotMigrationData}" >> ${infoFile} + echo "" - # when format is not EXT4 or BTRFS - stop bootstrap and await user setup - if [ "${hddFormat}" != "ext4" ] && [ "${hddFormat}" != "btrfs" ]; then - echo "HDD is NOT formatted in ${hddFormat} .. awaiting user setup." >> $logFile - sed -i "s/^state=.*/state=waitsetup/g" ${infoFile} - sed -i "s/^message=.*/message='HDD needs SetUp (1)'/g" ${infoFile} - exit 0 + echo "HDD is there but not AutoMounted yet - Waiting for user Setup/Update" >> $logFile + + # determine correct setup phase + infoMessage="Please Login for Setup" + setupPhase="setup" + if [ "${hddGotMigrationData}" != "" ]; then + infoMessage="Please Login for Migration" + setupPhase="migration" + elif [ "${hddRaspiData}" == "1" ]; then + # determine if this is a recovery or an update + # TODO: improve version/update detetion later + isRecovery=$(echo "${hddRaspiVersion}" | grep -c "${codeVersion}") + if [ "${isRecovery}" == "1" ]; then + infoMessage="Please Login for Recovery" + setupPhase="recovery" + else + infoMessage="Please Login for Update" + setupPhase="update" + fi fi - # when error on analysing HDD - stop bootstrap and await user setup - if [ ${#hddError} -gt 0 ]; then - echo "FAIL - error on HDD analysis: ${hddError}" >> $logFile - sed -i "s/^state=.*/state=waitsetup/g" ${infoFile} - sed -i "s/^message=.*/message='${hddError}'/g" ${infoFile} - exit 0 - fi + # 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} + + ############################################# + # WAIT LOOP: USER SETUP/UPDATE/MIGRATION + # until SSH or WEBUI setup data is available + ############################################# + + echo "## WAIT LOOP: USER SETUP/UPDATE/MIGRATION" >> $logFile + until [ "${state}" == "waitprovision" ] + do + + # 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 + sleep 6 + sudo shutdown -r now + sleep 100 + exit 0 + fi + + # give the loop a little bed time + sleep 4 + + # check info file for updated values + # especially the state for checking loop + source ${infoFile} + + done + + ############################################# + # PROVISION PROCESS + ############################################# + + # refresh data from info file + source ${infoFile} + echo "# PROVISION PROCESS with setupPhase(${setupPhase})" >> $logFile + + # mark system on sd card as in setup process + echo "the provision process was started but did not finish yet" > /home/admin/provision.flag # temp mount the HDD echo "Temp mounting data drive ($hddCandidate)" >> $logFile @@ -326,93 +477,217 @@ if [ ${isMounted} -eq 0 ]; then else source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddCandidate}) fi - if [ ${#error} -gt 0 ]; then - echo "Failed to tempmount the HDD .. awaiting user setup." >> $logFile - sed -i "s/^state=.*/state=waitsetup/g" ${infoFile} - sed -i "s/^message=.*/message='${error}'/g" ${infoFile} - exit 0 - fi # make sure all links between directories/drives are correct echo "Refreshing links between directories/drives .." >> $logFile sudo /home/admin/config.scripts/blitz.datadrive.sh link - # check if there is a WIFI configuration to backup or restore - sudo /home/admin/config.scripts/internet.wifi.sh backup-restore + # copy over the raspiblitz.conf created from setup to HDD + configExists=$(ls /mnt/hdd/raspiblitz.conf 2>/dev/null | grep -c "raspiblitz.conf") + if [ "${configExists}" != "1" ]; then + sudo cp /var/cache/raspiblitz/temp/raspiblitz.conf /mnt/hdd/raspiblitz.conf + fi - # make sure at this point local network is connected - wait_for_local_network + # kick-off provision process + sed -i "s/^state=.*/state=provision/g" ${infoFile} + sed -i "s/^message=.*/message='Starting Provision'/g" ${infoFile} - # make sure before update/recovery that a internet connection is working - wait_for_local_internet + # load setup data + source ${setupFile} 2>$logFile + + # make sure basic info id in raspiblitz.info + 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} - # check if HDD contains already a configuration - configExists=$(ls ${configFile} | grep -c '.conf') - echo "HDD contains already a configuration: ${configExists}" >> $logFile - if [ ${configExists} -eq 1 ]; then - echo "Found existing configuration" >> $logFile - source ${configFile} - # check if config files contains basic: version - if [ ${#raspiBlitzVersion} -eq 0 ]; then - echo "Invalid Config: missing raspiBlitzVersion in (${configFile})!" >> ${logFile} - configExists=0 + ################################### + # 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} + exit 1 + fi + + echo "SETTING PASSWORD A" >> ${logFile} + sudo /home/admin/config.scripts/blitz.setpassword.sh a "${passwordA}" >> ${logFile} + + # if setup - run provision setup first + if [ "${setupPhase}" == "setup" ]; then + echo "Calling _provision.setup.sh for basic setup tasks .." >> $logFile + sed -i "s/^message=.*/message='Provision Setup'/g" ${infoFile} + sudo /home/admin/_provision.setup.sh + if [ "$?" != "0" ]; then + echo "EXIT _provision.setup.sh BECAUSE OF ERROR STATE ($?)" >> $logFile + echo "This can also happen if _provision.setup.sh has syntax errros" >> $logFile + sed -i "s/^state=.*/state='error'/g" ${infoFile} + sed -i "s/^message=.*/message='_provision.setup.sh fail'/g" ${infoFile} + exit 1 fi - # check if config files contains basic: network - if [ ${#network} -eq 0 ]; then - echo "Invalid Config: missing network in (${configFile})!" >> ${logFile} - configExists=0 + fi + + # if migration - run the migration provision first + if [ "${setupPhase}" == "migration" ]; then + echo "Calling _provision.migration.sh for possible migrations .." >> $logFile + sed -i "s/^message=.*/message='Provision migration'/g" ${infoFile} + sudo /home/admin/_provision.migration.sh + if [ "$?" != "0" ]; then + echo "EXIT _provision.migration.sh BECAUSE OF ERROR STATE ($?)" >> $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} + exit 1 fi - # check if config files contains basic: chain - if [ ${#chain} -eq 0 ]; then - echo "Invalid Config: missing chain in (${configFile})!" >> ${logFile} - configExists=0 - fi - if [ ${configExists} -eq 0 ]; then - echo "Moving invalid config to raspiblitz.invalid.conf" >> ${logFile} - sudo mv ${configFile} /mnt/hdd/raspiblitz.invalid.conf 2>/dev/null + fi + + # if update/recovery/migration + if [ "${setupPhase}" == "update" ] || [ "${setupPhase}" == "recovery" ] || [ "${setupPhase}" == "migration" ]; then + echo "Calling _provision.update.sh .." >> $logFile + sed -i "s/^message=.*/message='Provision Update/Recovery/Migration'/g" ${infoFile} + sudo /home/admin/_provision.update.sh + if [ "$?" != "0" ]; then + echo "EXIT _provision.update.sh BECAUSE OF ERROR STATE ($?)" >> $logFile + echo "This can also happen if _provision.update.sh has syntax errros" >> $logFile + sed -i "s/^state=.*/state='error'/g" ${infoFile} + sed -i "s/^message=.*/message='_provision.update.sh fail'/g" ${infoFile} + exit 1 fi fi - # UPDATE MIGRATION & CONFIG PROVISIONING - if [ ${configExists} -eq 1 ]; then - echo "Found valid configuration" >> $logFile - sed -i "s/^state=.*/state=recovering/g" ${infoFile} - sed -i "s/^message=.*/message='Starting Recover'/g" ${infoFile} - sed -i "s/^chain=.*/chain=${chain}/g" ${infoFile} - sed -i "s/^network=.*/network=${network}/g" ${infoFile} - echo "Calling Data Migration .." >> $logFile - sudo /home/admin/_bootstrap.migration.sh - echo "Calling Provisioning .." >> $logFile - sudo /home/admin/_bootstrap.provision.sh - sed -i "s/^state=.*/state=reboot/g" ${infoFile} - sed -i "s/^message=.*/message='Done Recover'/g" ${infoFile} - echo "rebooting" >> $logFile - # set flag that system is freshly recovered and needs setup dialogs - sudo touch /home/admin/recover.flag - echo "state=recovered" >> /home/admin/recover.flag - echo "shutdown in 1min" >> $logFile - # save log file for inspection before reboot - echo "REBOOT FOR SSH CERTS RESET ..." >> $logFile - sudo cp ${logFile} ${logFile}.recover - sync - sudo shutdown -r -F -t 60 - exit 0 - else - echo "OK - No config file found: ${configFile}" >> $logFile + # finalize provisioning + echo "Calling _bootstrap.provision.sh for general system provisioning (${setupPhase}) .." >> $logFile + sed -i "s/^message=.*/message='Provision Basics'/g" ${infoFile} + sudo /home/admin/_provision_.sh + if [ "$?" != "0" ]; then + echo "EXIT _provision_.sh BECAUSE OF ERROR STATE" >> $logFile + echo "This can also happen if _provision_.sh has syntax errros" >> $logFile + sed -i "s/^state=.*/state='error'/g" ${infoFile} + sed -i "s/^message=.*/message='_provision_.sh fail'/g" ${infoFile} + exit 1 fi - # if it got until here: HDD is empty ext4 - echo "Waiting for SetUp." >> $logFile - sed -i "s/^state=.*/state=waitsetup/g" ${infoFile} - sed -i "s/^message=.*/message='HDD needs SetUp (2)'/g" ${infoFile} - # unmount HDD to be ready for auto-mount during setup - sudo umount -l /mnt/hdd - exit 0 + # unlock lnd if needed + source ${setupFile} + echo "checking Unlock ..." >> $logFile + if [ "${lightning}" == "lnd" ] && [ "${passwordC}" != "" ]; then + echo "Unlock LND at end of provision with temp stored password C" >> $logFile + /home/admin/config.scripts/lnd.unlock.sh unlock "${passwordC}" >> ${logFile} + sleep 3 + else + echo "No lightning unlock (${lightning}) or password C temp stored" >> $logFile + fi -fi # END - no automount - after this HDD is mounted + # mark provision process done + sed -i "s/^message=.*/message='Provision Done'/g" ${infoFile} -# make sure at this point local network is connected -wait_for_local_network + # wait until syncProgress is available (neeed for final dialogs) + while [ "${syncProgress}" == "" ] + 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} + sleep 2 + done + + ################################################### + # WAIT LOOP: AFTER FRESH SETUP, MIGRATION + # successfull update & recover can skip this + ################################################### + + if [ "${setupPhase}" == "setup" ] || [ "${setupPhase}" == "migration" ]; then + echo "# Go into WAIT LOOP for final setup dialog ..." >> $logFile + sed -i "s/^state=.*/state=waitfinal/g" ${infoFile} + sed -i "s/^message=.*/message='Setup Done'/g" ${infoFile} + else + echo "# Skip WAIT LOOP boot directly into main menu ..." >> $logFile + sed -i "s/^state=.*/state=ready/g" ${infoFile} + sed -i "s/^message=.*/message='Setup Done'/g" ${infoFile} + fi + + source ${infoFile} + echo "WAIT LOOP: FINAL SETUP .. see controlFinalDialog.sh" >> $logFile + until [ "${state}" == "ready" ] + do + + # get latest network info & update raspiblitz.info (in case network changes) + source <(/home/admin/config.scripts/internet.sh status) + sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} + + # give the loop a little bed time + sleep 4 + + # check info file for updated values + # especially the state for checking loop + source ${infoFile} + + done + echo "WAIT LOOP: DONE" >> $logFile + + ######################################## + # AFTER FINAL SETUP TASKS + + # make sure for future starts that blockchain service gets started after boostrap + sed -i "s/^Wants=.*/Wants=bootstrap.service/g" /etc/systemd/system/${network}d.service + sed -i "s/^After=.*/After=network.target/g" /etc/systemd/system/${network}d.service + + # delete provision in progress flag + sudo rm /home/admin/provision.flag + + # delete setup data from RAM + sudo rm ${setupFile} + + # signal that setup phas is over + sed -i "s/^setupPhase=.*/setupPhase='done'/g" ${infoFile} + +else + + ############################ + ############################ + # NORMAL START BOOTSTRAP (not executed after setup) + # Blockchain & Lightning not running + ############################ + + ###################################################################### + # MAKE SURE LND RPC/REST ports are standard & open to all connections + ###################################################################### + sudo sed -i "s/^rpclisten=.*/rpclisten=0.0.0.0:10009/g" /mnt/hdd/lnd/lnd.conf + sudo sed -i "s/^restlisten=.*/restlisten=0.0.0.0:8080/g" /mnt/hdd/lnd/lnd.conf + + ################################# + # 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 + + ################################# + # 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 + + ################################ + # DELETE LOG & LOCK FILES + ################################ + # 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 + # /mnt/hdd/lnd/logs/bitcoin/mainnet/lnd.log + sudo 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 + +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=") @@ -421,85 +696,26 @@ if [ ${configWifiExists} -eq 1 ]; then sudo cp /etc/wpa_supplicant/wpa_supplicant.conf /mnt/hdd/app-data/wpa_supplicant.conf fi -# config should exist now -configExists=$(ls ${configFile} | grep -c '.conf') -if [ ${configExists} -eq 0 ]; then - sed -i "s/^state=.*/state=waitsetup/g" ${infoFile} - sed -i "s/^message=.*/message='no config'/g" ${infoFile} - exit 0 +# make sure lndAddress & lndPort exist in cofigfile +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 -##################################### -# UPDATE HDD CONFIG FILE (if exists) -# needs to be done before starting LND -# so that environment info is fresh -##################################### +# load data from config file fresh +echo "load configfile data" >> $logFile +source ${configFile} -echo "Check if HDD contains configuration .." >> $logFile -configExists=$(ls ${configFile} | grep -c '.conf') -if [ ${configExists} -eq 1 ]; then - - # make sure lndAddress & lndPort exist - 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 - - # load values - echo "load and update publicIP" >> $logFile - source ${configFile} - - # if not running TOR before starting LND internet connection with a valid public IP is needed - waitForPublicIP=1 - if [ "${runBehindTor}" = "on" ] || [ "${runBehindTor}" = "1" ]; then - echo "# no need to wait for internet - public Tor address already known" >> $logFile - waitForPublicIP=0 - fi - while [ ${waitForPublicIP} -eq 1 ] - do - source <(/home/admin/config.scripts/internet.sh status) - if [ ${online} -eq 0 ]; then - echo "# (loop) waiting for internet ... " >> $logFile - sed -i "s/^state=.*/state=nointernet/g" ${infoFile} - sed -i "s/^message=.*/message='Waiting for Internet'/g" ${infoFile} - sleep 4 - else - echo "# OK internet detected ... continue" >> $logFile - waitForPublicIP=0 - fi - done - - # update public IP on boot - set to domain is available - /home/admin/config.scripts/internet.sh update-publicip ${lndAddress} - -fi - -###################################################################### -# MAKE SURE LND RPC/REST ports are standard & open to all connections -###################################################################### -sudo sed -i "s/^rpclisten=.*/rpclisten=0.0.0.0:10009/g" /mnt/hdd/lnd/lnd.conf -sudo sed -i "s/^restlisten=.*/restlisten=0.0.0.0:8080/g" /mnt/hdd/lnd/lnd.conf - -################################# -# 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 - -################################# -# 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 +# update public IP on boot - set to domain if available +/home/admin/config.scripts/internet.sh update-publicip ${lndAddress} ################################# # MAKE SURE USERS HAVE LATEST LND CREDENTIALS @@ -528,58 +744,6 @@ else echo "No additional backup device was configured." >> $logFile fi -################################ -# DETECT FRESHLY RECOVERED SD -################################ - -recoveredInfoExists=$(ls /home/admin/recover.flag | grep -c '.flag') -if [ ${recoveredInfoExists} -eq 1 ]; then - sed -i "s/^state=.*/state=recovered/g" ${infoFile} - sed -i "s/^message=.*/message='login to finish'/g" ${infoFile} - exit 0 -fi - -################################ -# SD INFOFILE BASICS -################################ - -# state info -sed -i "s/^state=.*/state=ready/g" ${infoFile} -sed -i "s/^message=.*/message='waiting login'/g" ${infoFile} - -# determine network and chain from system - -# check for BITCOIN -loaded=$(sudo systemctl status bitcoind | grep -c 'loaded') -if [ ${loaded} -gt 0 ]; then - sed -i "s/^network=.*/network=bitcoin/g" ${infoFile} - source /mnt/hdd/bitcoin/bitcoin.conf >/dev/null 2>&1 - if [ ${testnet} -gt 0 ]; then - sed -i "s/^chain=.*/chain=test/g" ${infoFile} - else - sed -i "s/^chain=.*/chain=main/g" ${infoFile} - fi -fi - -# check for LITECOIN -loaded=$(sudo systemctl status litecoind | grep -c 'loaded') -if [ ${loaded} -gt 0 ]; then - sed -i "s/^network=.*/network=litecoin/g" ${infoFile} - sed -i "s/^chain=.*/chain=main/g" ${infoFile} -fi - -################################ -# DELETE LOG & LOCK FILES -################################ -# 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 -# /mnt/hdd/lnd/logs/bitcoin/mainnet/lnd.log -sudo 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 - ##################################### # CLEAN HDD TEMP ##################################### @@ -592,6 +756,17 @@ else echo "OK: Temp cleaned" >> $logFile fi +############################### +# RAID data check (BRTFS) +############################### +# see https://github.com/rootzoll/raspiblitz/issues/360#issuecomment-467698260 + +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/ +fi + ###################################### # PREPARE SUBSCRIPTIONS DATA DIRECTORY ###################################### @@ -611,5 +786,8 @@ sed -i "s/^message=.*/message='Node Running'/g" ${infoFile} # make sure that bitcoin service is active sudo systemctl enable ${network}d +sed -i "s/^setupPhase=.*/setupPhase='done'/g" ${infoFile} +sed -i "s/^state=.*/state=ready/g" ${infoFile} + echo "DONE BOOTSTRAP" >> $logFile exit 0 diff --git a/home.admin/_commands.sh b/home.admin/_commands.sh index cb1ccf744..954fc6c0b 100755 --- a/home.admin/_commands.sh +++ b/home.admin/_commands.sh @@ -1,5 +1,10 @@ #!/bin/bash +# source aliases from /home/admin/_aliases +if [ -f /home/admin/_aliases ];then + source /home/admin/_aliases +fi + # SHORTCUT COMMANDS you can call as user 'admin' from terminal # command: raspiblitz @@ -32,14 +37,12 @@ function repair() { # command: restart function restart() { - cd /home/admin - ./XXshutdown.sh reboot + /home/admin/config.scripts/blitz.shutdown.sh reboot } # command: sourcemode function sourcemode() { - cd /home/admin - ./98repairMenu.sh sourcemode + /home/admin/config.scripts/blitz.copychain.sh source } # command: check @@ -47,23 +50,27 @@ function check() { /home/admin/config.scripts/blitz.configcheck.py } +# command: release +function release() { + /home/admin/config.scripts/blitz.preparerelease.sh +} + # command: debug function debug() { cd /home/admin - ./XXdebugLogs.sh + /home/admin/config.scripts/blitz.debug.sh } # command: patch # syncs script with latest set github and branch function patch() { cd /home/admin - ./XXsyncScripts.sh -run + /home/admin/config.scripts/blitz.github.sh -run } # command: off function off() { - cd /home/admin - ./XXshutdown.sh + /home/admin/config.scripts/blitz.shutdown.sh } # command: github @@ -123,7 +130,24 @@ function torthistx() { # start the status screen in the terminal function status() { echo "Gathering data - please wait a moment..." - sudo -u pi /home/admin/00infoLCD.sh --pause 0 + while : + do + # show the same info as on LCD screen + # 00infoBlitz.sh + /home/admin/00infoBlitz.sh $1 $2 + # wait 6 seconds for user exiting loop + #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 + echo "Returning to menu ....." + sleep 4 + break + fi + done } # command: lnbalance diff --git a/home.admin/_provision.migration.sh b/home.admin/_provision.migration.sh new file mode 100755 index 000000000..687e2f631 --- /dev/null +++ b/home.admin/_provision.migration.sh @@ -0,0 +1,55 @@ +#!/bin/bash + +# LOGFILE - store debug logs of bootstrap +logFile="/home/admin/raspiblitz.log" + +# INFOFILE - state data from bootstrap +infoFile="/home/admin/raspiblitz.info" +source ${infoFile} + +# 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} + +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} + exit 1 +fi + +source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) + +err="" +nodenameUpperCase=$(echo "${hddGotMigrationData}" | tr "[a-z]" "[A-Z]") +echo "**************************************************" >> ${logFile} +echo "MIGRATION FROM ${nodenameUpperCase} TO RASPIBLITZ" >> ${logFile} +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} + exit 1 +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 +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 + diff --git a/home.admin/_provision.setup.sh b/home.admin/_provision.setup.sh new file mode 100755 index 000000000..d38fd469b --- /dev/null +++ b/home.admin/_provision.setup.sh @@ -0,0 +1,421 @@ +#!/bin/bash + +# this provision file is just executed on fresh setups +# not on recoveries or updates + +# LOGFILE - store debug logs of bootstrap +logFile="/home/admin/raspiblitz.log" + +# INFOFILE - state data from bootstrap +infoFile="/home/admin/raspiblitz.info" +source ${infoFile} + +# SETUPFILE - setup data of RaspiBlitz +setupFile="/var/cache/raspiblitz/temp/raspiblitz.setup" +source ${setupFile} + +# CONFIGFILE - configuration of RaspiBlitz +configFile="/mnt/hdd/raspiblitz.conf" +source ${configFile} + +# log header +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 +sudo sed -i "s/^message=.*/message='SSH Keys'/g" ${infoFile} + +# link ssh directory from SD card to HDD +echo "# --> SSH key settings" >> ${logFile} +echo "# copying SSH pub keys to HDD" >> ${logFile} +sudo cp -r /etc/ssh /mnt/hdd/ssh >> ${logFile} +echo "# OK" >> ${logFile} + +################################### +# Prepare Blockchain Service +sudo sed -i "s/^message=.*/message='Blockchain Setup'/g" ${infoFile} + +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 1 +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 1 +fi + +# make sure choosen blockchain service is installed +if [ "${network}" != "bitcoin" ]; then + # TODO also ... check if /home/admin/selfsync.flag is needed on other chains + sed -i "s/^state=.*/state=error/g" ${infoFile} + sed -i "s/^message=.*/message='TODO: install ${network}'/g" ${infoFile} + echo "FAIL see ${logFile}" + echo "TODO: make sure ${network} is installed!" >> ${logFile} + exit 1 +fi + +# copy configs files and directories +echo "" +echo "*** Prepare ${network} ***" >> ${logFile} +sudo -u bitcoin mkdir /mnt/hdd/${network} 2>/dev/null +sudo -u bitcoin mkdir /mnt/hdd/${network}/blocks 2>/dev/null +sudo -u bitcoin mkdir /mnt/hdd/${network}/chainstate 2>/dev/null +sudo cp /home/admin/assets/${network}.conf /mnt/hdd/${network}/${network}.conf +sudo mkdir /home/admin/.${network} 2>/dev/null +sudo cp /home/admin/assets/${network}.conf /home/admin/.${network}/${network}.conf + +# set password B as RPC password +echo "SETTING PASSWORD B" >> ${logFile} +sudo /home/admin/config.scripts/blitz.setpassword.sh b "${passwordB}" >> ${logFile} + +# optimize RAM for blockchain validation (bitcoin only) +if [ "${network}" == "bitcoin" ] && [ "${hddBlocksBitcoin}" == "0" ]; then + echo "*** Optimizing RAM for Sync ***" >> ${logFile} + kbSizeRAM=$(cat /proc/meminfo | grep "MemTotal" | sed 's/[^0-9]*//g') + echo "dont forget to reduce dbcache once IBD is done" > "/mnt/hdd/${network}/blocks/selfsync.flag" + # RP4 4GB + if [ ${kbSizeRAM} -gt 3500000 ]; then + echo "Detected RAM >=4GB --> optimizing ${network}.conf" >> ${logFile} + sudo sed -i "s/^dbcache=.*/dbcache=3072/g" /mnt/hdd/${network}/${network}.conf + # RP4 2GB + elif [ ${kbSizeRAM} -gt 1500000 ]; then + echo "Detected RAM >=2GB --> optimizing ${network}.conf" >> ${logFile} + sudo sed -i "s/^dbcache=.*/dbcache=1536/g" /mnt/hdd/${network}/${network}.conf + #RP3/4 1GB + else + echo "Detected RAM <=1GB --> optimizing ${network}.conf" >> ${logFile} + sudo sed -i "s/^dbcache=.*/dbcache=512/g" /mnt/hdd/${network}/${network}.conf + fi +fi + +# start network service +echo "" +echo "*** Start ${network} ***" >> ${logFile} +sudo sed -i "s/^message=.*/message='Blockchain Testrun'/g" ${infoFile} +echo "- This can take a while .." >> ${logFile} +sudo systemctl stop ${network}d.service +sudo systemctl disable ${network}d.service +sudo cp /home/admin/assets/${network}d.service /etc/systemd/system/${network}d.service +sudo systemctl enable ${network}d.service +sudo systemctl start ${network}d.service + +# check if bitcoin has started +bitcoinRunning=0 +loopcount=0 +while [ ${bitcoinRunning} -eq 0 ] +do + >&2 echo "# (${loopcount}/200) checking if ${network}d is running ... " >> ${logFile} + bitcoinRunning=$(sudo -u bitcoin ${network}-cli getblockchaininfo 2>/dev/null | grep "initialblockdownload" -c) + sleep 2 + sync + loopcount=$(($loopcount +1)) + if [ ${loopcount} -gt 200 ]; 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} + exit 1 + fi +done +echo "OK ${network} startup successful " >> ${logFile} + + +################################### +# Prepare Lightning +echo "Prepare Lightning (${lightning})" >> ${logFile} + +if [ "${lightning}" != "lnd" ]; then + + ################################### + # Remove LND from systemd + echo "Remove LND" >> ${logFile} + sudo sed -i "s/^message=.*/message='Deactivate Lightning'/g" ${infoFile} + sudo systemctl disable lnd + sudo rm /etc/systemd/system/lnd.service 2>/dev/null + sudo systemctl daemon-reload +fi + +if [ "${lightning}" == "lnd" ]; then + + ################################### + # LND + echo "############## Setup LND" >> ${logFile} + sudo sed -i "s/^message=.*/message='LND Setup'/g" ${infoFile} + + 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} + exit 1 + fi + + # if user uploaded an LND rescue file + 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} + exit 1 + fi + else + # preparing new LND config + echo "Creating new LND config ..." >> ${logFile} + sudo -u bitcoin mkdir /mnt/hdd/lnd 2> /dev/null + sudo cp /home/admin/assets/lnd.${network}.conf /mnt/hdd/lnd/lnd.conf + sudo chown bitcoin:bitcoin /mnt/hdd/lnd/lnd.conf + sudo /home/admin/config.scripts/lnd.chain.sh on mainnet + sudo /home/admin/config.scripts/lnd.setname.sh mainnet ${hostname} + fi + + # 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} + exit 1 + fi + + # Init LND service & start + echo "*** Init LND Service & Start ***" >> ${logFile} + sudo sed -i "s/^message=.*/message='LND Testrun'/g" ${infoFile} + + # just in case + sudo systemctl stop lnd 2>/dev/null + sudo systemctl disable lnd 2>/dev/null + + # make sure lnd gets started after blockchain service + sed -i "5s/.*/Wants=${network}d.service/" /home/admin/assets/lnd.service >> ${logFile} + sed -i "6s/.*/After=${network}d.service/" /home/admin/assets/lnd.service >> ${logFile} + sudo cp /home/admin/assets/lnd.service /etc/systemd/system/lnd.service >> ${logFile} + + # make sure LND starts with Tor by default + sudo /home/admin/config.scripts/internet.tor.sh lndconf-on >> ${logFile} + + # start lnd up + echo "Starting LND Service ..." >> ${logFile} + sudo systemctl enable lnd >> ${logFile} + sudo systemctl start lnd >> ${logFile} + + # check that lnd started + lndRunning=0 + loopcount=0 + while [ ${lndRunning} -eq 0 ] + do + lndRunning=$(sudo 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} + sleep 10 + 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} + exit 1 + fi + done + echo "OK - LND is running" ${logFile} + sleep 10 + + # Check LND health/fails (to be extended) + tlsExists=$(sudo 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} + exit 1 + 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}) + 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} + exit 1 + fi + fi + + # WALLET --> SEED + SCB + if [ "${seedWords}" != "" ] && [ "${staticchannelbackup}" != "" ]; then + + echo "WALLET --> SEED + SCB " >> ${logFile} + sudo sed -i "s/^message=.*/message='LND Wallet (SEED & SCB)'/g" ${infoFile} + sudo /home/admin/config.scripts/lnd.initwallet.py scb ${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} + exit 1 + fi + + # WALLET --> SEED + elif [ "${seedWords}" != "" ]; then + + echo "WALLET --> SEED" >> ${logFile} + sudo sed -i "s/^message=.*/message='LND Wallet (SEED)'/g" ${infoFile} + sudo /home/admin/config.scripts/lnd.initwallet.py seed ${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} + exit 1 + fi + + # WALLET --> NEW + else + + echo "WALLET --> NEW" >> ${logFile} + sudo sed -i "s/^message=.*/message='LND Wallet (NEW)'/g" ${infoFile} + source <(sudo /home/admin/config.scripts/lnd.initwallet.py new ${passwordC}) + 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} + exit 1 + fi + + # write created seedwords into SETUPFILE to be displayed to user on final setup later + echo "seedwordsNEW='${seedwords}'" >> ${setupFile} + echo "seedwords6x4NEW='${seedwords6x4}'" >> ${setupFile} + + fi + + # sync macaroons & TLS to other users + echo "*** Copy LND Macaroons to user admin ***" >> ${logFile} + sudo sed -i "s/^message=.*/message='LND Credentials'/g" ${infoFile} + + # 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} + exit 1 + fi + + # now sync macaroons & TLS zo other users + sudo /home/admin/config.scripts/lnd.credentials.sh sync >> ${logFile} + + # 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} + exit 1 + fi + +fi + +if [ "${lightning}" == "cln" ]; then + + ################################### + # c-lightning + echo "############## c-lightning" >> ${logFile} + + sudo sed -i "s/^message=.*/message='C-Lightning Install'/g" ${infoFile} + sudo /home/admin/config.scripts/cln.install.sh on mainnet >> ${logFile} + sudo sed -i "s/^message=.*/message='C-Lightning Setup'/g" ${infoFile} + + # OLD WALLET FROM CLIGHTNING RESCUE + if [ "${clnrescue}" != "" ]; then + + echo "Restore CLN data from uploaded rescue file ${lndrescue} ..." >> ${logFile} + source <(sudo /home/admin/config.scripts/cln.backup.sh cln-import ${lndrescue}) + if [ "${error}" != "" ]; then + sed -i "s/^state=.*/state=error/g" ${infoFile} + sed -i "s/^message=.*/message='setup: cln import backup failed'/g" ${infoFile} + echo "FAIL see ${logFile}" + echo "FAIL: setup: cln import backup failed" >> ${logFile} + echo "${error}" >> ${logFile} + exit 1 + fi + + # OLD WALLET FROM SEEDWORDS + elif [ "${seedWords}" != "" ]; then + + echo "Restore CLN wallet from seedWords ..." >> ${logFile} + source <(sudo /home/admin/config.scripts/cln.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") + 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 cln wallet created - seed maybe wrong" >> ${logFile} + exit 1 + fi + + # NEW WALLET + else + + echo "Generate new CLN wallet ..." >> ${logFile} + + # generate new wallet + source <(sudo /home/admin/config.scripts/cln.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 cln seedwords'/g" ${infoFile} + echo "FAIL: setup: no cln seedwords" >> ${logFile} + exit 1 + 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 cln wallet created'/g" ${infoFile} + echo "FAIL: setup: no cln wallet created" >> ${logFile} + exit 1 + fi + + # write created seedwords into SETUPFILE to be displayed to user on final setup later + echo "seedwordsNEW='${seedwords}'" >> ${setupFile} + echo "seedwords6x4NEW='${seedwords6x4}'" >> ${setupFile} + + fi + +fi + +sudo sed -i "s/^message=.*/message='Provision Setup Finish'/g" ${infoFile} +echo "END Setup" >> ${logFile} +exit 0 \ No newline at end of file diff --git a/home.admin/_provision.update.sh b/home.admin/_provision.update.sh new file mode 100755 index 000000000..4df22f739 --- /dev/null +++ b/home.admin/_provision.update.sh @@ -0,0 +1,277 @@ +#!/bin/bash + +# LOGFILE - store debug logs of bootstrap +logFile="/home/admin/raspiblitz.log" + +# INFOFILE - state data from bootstrap +infoFile="/home/admin/raspiblitz.info" + +# CONFIGFILE - configuration of RaspiBlitz +configFile="/mnt/hdd/raspiblitz.conf" + +# SETUPFILE - - setup data of RaspiBlitz +setupFile="/var/cache/raspiblitz/temp/raspiblitz.setup" +source ${setupFile} + +# log header +echo "" >> ${logFile} +echo "###################################" >> ${logFile} +echo "# _provision.update.sh" >> ${logFile} +echo "###################################" >> ${logFile} +sudo sed -i "s/^message=.*/message='Running Data Update'/g" ${infoFile} + +# HDD BTRFS RAID REPAIR IF NEEDED +source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) +if [ ${isBTRFS} -eq 1 ] && [ ${isMounted} -eq 1 ]; then + echo "CHECK BTRFS RAID" >> ${logFile} + if [ ${isRaid} -eq 1 ] && [ ${#raidUsbDev} -eq 0 ]; then + echo "HDD was set to work in RAID, but RAID drive is not connected" >> ${logFile} + echo "Trying to set HDD back to single mode." >> ${logFile} + sudo /home/admin/config.scripts/blitz.datadrive.sh raid off >> ${logFile} + else + echo "OK" >> ${logFile} + fi +fi + +# LOAD DATA & PRECHECK + +# load old or init raspiblitz config +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} + exit 1 +fi + +# check if config files contain lightning (lnd is default) +if [ "${lightning}" == "" ]; then + lightning="lnd" + echo "lightning=${lightning}" >> ${configFile} +fi + +# load codeVersion +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} + exit 1 +fi + +echo "prechecks OK" >> ${logFile} + +# MIGRATION - DATA CONVERSION when updating config +# this is the place if on a future version change +# a conversion of config data or app data is needed + +# if old bitcoin.conf exists ... +configExists=$(sudo ls /mnt/hdd/bitcoin/bitcoin.conf | grep -c '.conf') +if [ ${configExists} -eq 1 ]; then + echo "Checking old bitcoin.conf ..." >> ${logFile} + + # make sure to fix bitcoind RPC port if not done in old version + # https://github.com/rootzoll/raspiblitz/issues/217 + # https://github.com/rootzoll/raspiblitz/issues/950 + + if ! grep -Eq "^rpcallowip=.*" /mnt/hdd/${network}/${network}.conf; then + echo "fix issue #217 -> adding rpcallowip=127.0.0.1" >> ${logFile} + echo "rpcallowip=127.0.0.1" >> /mnt/hdd/${network}/${network}.conf + else + echo "check issue #217 -> ok rpcallow exists" >> ${logFile} + fi + + # check whether "main." needs to be added to rpcport and rpcbind + if grep -Eq "^rpcport=.*" /mnt/hdd/${network}/${network}.conf; then + echo "fix issue #950 -> change rpcport to main.rpcport" >> ${logFile} + sudo sed -i -E 's/^(rpcport=.*)/main.\1/g' /mnt/hdd/${network}/${network}.conf + else + echo "check issue #950 -> ok ^rpcport does not exist" >> ${logFile} + fi + + if grep -Eq "^rpcbind=.*" /mnt/hdd/${network}/${network}.conf; then + echo "fix issue #950 -> change rpcbind to main.rpcbind" >> ${logFile} + sudo sed -i -E 's/^(rpcbind=.*)/main.\1/g' /mnt/hdd/${network}/${network}.conf + else + echo "check issue #950 -> ok ^rpcbind does not exist" >> ${logFile} + fi + + # check whether right settings are there ("main.") + if ! grep -Eq "^main.rpcport=.*" /mnt/hdd/${network}/${network}.conf; then + echo "fix issue #217 -> adding main.rpcport=8332" >> ${logFile} + echo "main.rpcport=8332" >> /mnt/hdd/${network}/${network}.conf + else + echo "check issue #217 -> ok main.rpcport exists" >> ${logFile} + fi + + if ! grep -Eq "^main.rpcbind=.*" /mnt/hdd/${network}/${network}.conf; then + echo "fix issue #217 -> adding main.rpcbind=127.0.0.1:8332" >> ${logFile} + echo "main.rpcbind=127.0.0.1:8332" >> /mnt/hdd/${network}/${network}.conf + else + echo "check issue #217 -> ok main.rpcbind exists" >> ${logFile} + fi + + # same for testnet + if ! grep -Eq "^test.rpcport=.*" /mnt/hdd/${network}/${network}.conf; then + echo "fix issue #950 -> adding test.rpcport=18332" >> ${logFile} + echo "test.rpcport=18332" >> /mnt/hdd/${network}/${network}.conf + else + echo "check issue #950 -> ok test.rpcport exists" >> ${logFile} + fi + + if ! grep -Eq "^test.rpcbind=.*" /mnt/hdd/${network}/${network}.conf; then + echo "fix issue #950 -> adding test.rpcbind=127.0.0.1:18332" >> ${logFile} + echo "test.rpcbind=127.0.0.1:18332" >> /mnt/hdd/${network}/${network}.conf + else + echo "check issue #950 -> ok test.rpcbind exists" >> ${logFile} + fi + +else + echo "WARN: /mnt/hdd/bitcoin/bitcoin.conf not found" >> ${logFile} +fi + +echo "Version Code: ${codeVersion}" >> ${logFile} +echo "Version Data: ${raspiBlitzVersion}" >> ${logFile} + +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} +else + echo "OK - version of config data is up to date" >> ${logFile} +fi + +# start network service +echo "" +echo "*** Start ${network} ***" >> ${logFile} +sudo sed -i "s/^message=.*/message='Blockchain Testrun'/g" ${infoFile} +echo "- This can take a while .." >> ${logFile} +sudo cp /home/admin/assets/${network}d.service /etc/systemd/system/${network}d.service +#sudo chmod +x /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} + +# INSTALL LND on Upadte/Recovery +if [ "${lightning}" == "lnd" ]; then + + # prepare lnd service + sed -i "5s/.*/Wants=${network}d.service/" /home/admin/assets/lnd.service >> ${logFile} 2>&1 + sed -i "6s/.*/After=${network}d.service/" /home/admin/assets/lnd.service >> ${logFile} 2>&1 + sudo cp /home/admin/assets/lnd.service /etc/systemd/system/lnd.service >> ${logFile} 2>&1 + + # if old lnd.conf exists ... + configExists=$(sudo ls /mnt/hdd/lnd/lnd.conf | grep -c '.conf') + if [ ${configExists} -eq 1 ]; then + + # remove RPC user & pass from lnd.conf ... since v1.7 + # https://github.com/rootzoll/raspiblitz/issues/2160 + echo "- #2160 lnd.conf --> make sure contains no RPC user/pass for bitcoind" >> ${logFile} + sudo sed -i '/^\[Bitcoind\]/d' /mnt/hdd/lnd/lnd.conf + sudo sed -i '/^bitcoind.rpchost=/d' /mnt/hdd/lnd/lnd.conf + sudo sed -i '/^bitcoind.rpcpass=/d' /mnt/hdd/lnd/lnd.conf + sudo sed -i '/^bitcoind.rpcuser=/d' /mnt/hdd/lnd/lnd.conf + sudo sed -i '/^bitcoind.zmqpubrawblock=/d' /mnt/hdd/lnd/lnd.conf + sudo sed -i '/^bitcoind.zmqpubrawtx=/d' /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) + 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) + 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 + 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) + if [ "${configParamExists}" == "0" ]; then + echo " - ADDING 'sync-freelist'" >> ${logFile} + sudo 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) + if [ "${configParamExists}" == "0" ]; then + echo " - ADDING 'stagger-initial-reconnect'" >> ${logFile} + sudo 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) + if [ "${configParamExists}" == "0" ]; then + echo " - ADDING 'tlsautorefresh'" >> ${logFile} + sudo 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) + if [ "${configParamExists}" == "0" ]; then + echo " - ADDING 'tlsdisableautofill'" >> ${logFile} + sudo sed -i "${applicationOptionsLineNumber}itlsdisableautofill=1" /mnt/hdd/lnd/lnd.conf + else + echo " - OK 'tlsdisableautofill' exists (${configParamExists})" >> ${logFile} + fi + + else + echo " - WARN: section '[Application Options]' not found in lnd.conf" >> ${logFile} + fi + else + echo "WARN: /mnt/hdd/lnd/lnd.conf not found" >> ${logFile} + fi + + # start LND service + echo "Starting LND Service ..." >> ${logFile} + sudo systemctl enable lnd >> ${logFile} + sudo systemctl start lnd >> ${logFile} + + +elif [ "${lightning}" == "cln" ]; then + + echo "Install C-lightning on update" >> ${logFile} + sudo sed -i "s/^message=.*/message='C-Lightning Install'/g" ${infoFile} + sudo /home/admin/config.scripts/cln.install.sh on mainnet >> ${logFile} + sudo sed -i "s/^message=.*/message='C-Lightning Setup'/g" ${infoFile} + +elif [ "${lightning}" == "none" ]; then + + echo "No Lightnig" >> ${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 + +echo "END Migration/Init" >> ${logFile} + +exit 0 + diff --git a/home.admin/_bootstrap.provision.sh b/home.admin/_provision_.sh similarity index 84% rename from home.admin/_bootstrap.provision.sh rename to home.admin/_provision_.sh index eb3384a2d..2d0ce2c34 100755 --- a/home.admin/_bootstrap.provision.sh +++ b/home.admin/_provision_.sh @@ -14,9 +14,11 @@ infoFile="/home/admin/raspiblitz.info" # CONFIGFILE - configuration of RaspiBlitz configFile="/mnt/hdd/raspiblitz.conf" -# debug info -echo "STARTED Provisioning --> see logs in ${logFile}" -echo "STARTED Provisioning from preset config file" >> ${logFile} +# log header +echo "" >> ${logFile} +echo "###################################" >> ${logFile} +echo "# _provision_.sh" >> ${logFile} +echo "###################################" >> ${logFile} sudo sed -i "s/^message=.*/message='Provisioning from Config'/g" ${infoFile} # check if there is a config file @@ -32,80 +34,7 @@ if [ ${parameterExists} -eq 0 ]; then echo "lndExtraParameter=''" >> ${configFile} fi -# check if file system was expanded to full capacity and sd card is bigger than 8GB -# see: https://github.com/rootzoll/raspiblitz/issues/936 -echo "CHECK IF SD CARD NEEDS EXPANSION" >> ${logFile} -source ${infoFile} - -# remember the DisplayClass from info file - before its gets overwritten by raspiblitz.conf to detect change -infoFileDisplayClass="${displayClass}" - -minimumSizeByte=8192000000 -rootPartition=$(sudo mount | grep " / " | cut -d " " -f 1 | cut -d "/" -f 3) -rootPartitionBytes=$(lsblk -b -o NAME,SIZE | grep "${rootPartition}" | tr -s ' ' | cut -d " " -f 2) - -echo "rootPartition(${rootPartition})" >> ${logFile} -echo "rootPartitionBytes(${rootPartitionBytes})" >> ${logFile} - -if [ ${#rootPartition} -gt 0 ]; then - echo "### CHECKING ROOT PARTITION SIZE ###" >> ${logFile} - sudo sed -i "s/^message=.*/message='Checking Disk size'/g" ${infoFile} - echo "Size in Bytes is: ${rootPartitionBytes} bytes on ($rootPartition)" >> ${logFile} - if [ $rootPartitionBytes -lt $minimumSizeByte ]; then - echo "Disk filesystem is smaller than ${minimumSizeByte} byte." >> ${logFile} - if [ ${fsexpanded} -eq 1 ]; then - echo "There was already an attempt to expand the fs, but still not bigger than 8GB." >> ${logFile} - echo "SD card seems to small - at least a 16GB disk is needed. Display on LCD to user." >> ${logFile} - sudo sed -i "s/^state=.*/state=sdtoosmall/g" ${infoFile} - sudo sed -i "s/^message=.*/message='Min 16GB SD card needed'/g" ${infoFile} - exit 1 - else - echo "Try to expand SD card FS, display info and reboot." >> ${logFile} - sudo sed -i "s/^state=.*/state=reboot/g" ${infoFile} - sudo sed -i "s/^message=.*/message='Expanding SD Card'/g" ${infoFile} - sudo sed -i "s/^fsexpanded=.*/fsexpanded=1/g" ${infoFile} - sleep 4 - if [ "${cpu}" == "x86_64" ]; then - echo "Please expand disk size." >> ${logFile} - # TODO: Expand disk size on x86_64 - elif [ "${baseimage}" = "raspbian" ] || [ "${baseimage}" = "raspios_arm64" ]; then - resizeRaspbian="/usr/bin/raspi-config" - if [ -x ${resizeRaspbian} ]; then - echo "RUNNING EXPAND RASPBERRYPI: ${resizeRaspbian}" >> ${logFile} - sudo $resizeRaspbian --expand-rootfs - echo "going into reboot" >> ${logFile} - sudo cp ${logFile} ${logFile}.fsexpand.recover - sudo shutdown -r now - exit 0 - else - echo "FAIL to execute: ${resizeRaspbian}" >> ${logFile} - fi - elif [ "${baseimage}" = "armbian" ]; then - resizeArmbian="/usr/lib/armbian/armbian-resize-filesystem" - if [ -x ${resizeArmbian} ]; then - echo "RUNNING EXPAND ARMBIAN: ${resizeArmbian}" >> ${logFile} - sudo $resizeArmbian start - echo "going into reboot" >> ${logFile} - sudo cp ${logFile} ${logFile}.fsexpand.recover - sudo shutdown -r now - sleep 100 - exit 0 - else - echo "FAIL to execute: ${resizeArmbian}" >> ${logFile} - fi - else - echo "WARN on provision - Not known system expand-rootfs OS: ${baseimage}" >> ${logFile} - fi - fi - else - echo "Size looks good. Bigger than ${minimumSizeByte} byte disk is used." >> ${logFile} - fi -else - echo "Disk of root partition ('$rootPartition') not detected, skipping the size check." >> ${logFile} -fi - # import config values -sudo chmod 777 ${configFile} source ${configFile} ########################## @@ -175,6 +104,9 @@ if [ "${network}" = "litecoin" ]; then /home/admin/config.scripts/blitz.litecoin.sh on >> ${logFile} fi +echo "# Make sure the user bitcoin is in the debian-tor group" +sudo usermod -a -G debian-tor bitcoin + # set hostname data echo "Setting lightning alias: ${hostname}" >> ${logFile} sudo sed -i "s/^alias=.*/alias=${hostname}/g" /home/admin/assets/lnd.${network}.conf >> ${logFile} 2>&1 @@ -194,11 +126,10 @@ fi #sudo ln -s /mnt/hdd/ssh /etc/ssh >> ${logFile} 2>&1 #sudo /home/admin/config.scripts/blitz.systemd.sh update-sshd >> ${logFile} 2>&1 -# optimze if RAM >1GB +# optimze mempool if RAM >1GB 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=1024/g" /mnt/hdd/${network}/${network}.conf sudo sed -i "s/^maxmempool=.*/maxmempool=300/g" /mnt/hdd/${network}/${network}.conf fi if [ ${kbSizeRAM} -gt 3500000 ]; then @@ -218,18 +149,15 @@ sudo cp -r /mnt/hdd/lnd/data/chain /home/admin/.lnd/data/chain >> ${logFile} 2>& sudo chown -R admin:admin /home/admin/.${network} >> ${logFile} 2>&1 sudo chown -R admin:admin /home/admin/.lnd >> ${logFile} 2>&1 sudo cp /home/admin/assets/${network}d.service /etc/systemd/system/${network}d.service >> ${logFile} 2>&1 -sed -i "5s/.*/Wants=${network}d.service/" /home/admin/assets/lnd.service >> ${logFile} 2>&1 -sed -i "6s/.*/After=${network}d.service/" /home/admin/assets/lnd.service >> ${logFile} 2>&1 -sudo cp /home/admin/assets/lnd.service /etc/systemd/system/lnd.service >> ${logFile} 2>&1 - sudo cp /home/admin/assets/tmux.conf.local /mnt/hdd/.tmux.conf.local >> ${logFile} 2>&1 sudo chown admin:admin /mnt/hdd/.tmux.conf.local >> ${logFile} 2>&1 sudo ln -s -f /mnt/hdd/.tmux.conf.local /home/admin/.tmux.conf.local >> ${logFile} 2>&1 + # backup LND dir (especially for macaroons and tlscerts) # https://github.com/rootzoll/raspiblitz/issues/324 echo "*** Make backup of LND directory" >> ${logFile} -sudo rm -r /mnt/hdd/backup_lnd +sudo rm -r /mnt/hdd/backup_lnd 2>/dev/null sudo cp -r /mnt/hdd/lnd /mnt/hdd/backup_lnd >> ${logFile} 2>&1 numOfDiffers=$(sudo diff -arq /mnt/hdd/lnd /mnt/hdd/backup_lnd | grep -c "differ") if [ ${numOfDiffers} -gt 0 ]; then @@ -241,9 +169,82 @@ else fi echo "" >> ${logFile} +########################## +# FINISH SETUP +########################## + # finish setup (SWAP, Benus, Firewall, Update, ..) sudo sed -i "s/^message=.*/message='Setup System ..'/g" ${infoFile} -/home/admin/90finishSetup.sh >> ${logFile} 2>&1 + +# add bonus scripts (auto install deactivated to reduce third party repos) +mkdir /home/admin/tmpScriptDL +cd /home/admin/tmpScriptDL +echo "installing bash completion for bitcoin-cli and lncli" +wget https://raw.githubusercontent.com/bitcoin/bitcoin/master/contrib/bitcoin-cli.bash-completion +wget https://raw.githubusercontent.com/lightningnetwork/lnd/master/contrib/lncli.bash-completion +sudo cp *.bash-completion /etc/bash_completion.d/ +echo "OK - bash completion available after next login" +echo "type \"bitcoin-cli getblockch\", press [Tab] → bitcoin-cli getblockchaininfo" +rm -r /home/admin/tmpScriptDL +cd + +###### SWAP File +source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) +if [ ${isSwapExternal} -eq 0 ]; then + echo "No external SWAP found - creating ... " + sudo /home/admin/config.scripts/blitz.datadrive.sh swap on +else + echo "SWAP already OK" +fi + +####### FIREWALL - just install (not configure) +echo "" +echo "*** Setting and Activating Firewall ***" +echo "deny incoming connection on other ports" +sudo ufw default deny incoming +echo "allow outgoing connections" +sudo ufw default allow outgoing +echo "allow: ssh" +sudo ufw allow ssh +echo "allow: bitcoin testnet" +sudo ufw allow 18333 comment 'bitcoin testnet' +echo "allow: bitcoin mainnet" +sudo ufw allow 8333 comment 'bitcoin mainnet' +echo "allow: litecoin mainnet" +sudo ufw allow 9333 comment 'litecoin mainnet' +echo 'allow: lightning testnet' +sudo ufw allow 19735 comment 'lightning testnet' +echo "allow: lightning mainnet" +sudo ufw allow 9735 comment 'lightning mainnet' +echo "allow: lightning gRPC" +sudo ufw allow 10009 comment 'lightning gRPC' +echo "allow: lightning REST API" +sudo ufw allow 8080 comment 'lightning REST API' +echo "allow: transmission" +sudo ufw allow 49200:49250/tcp comment 'rtorrent' +echo "allow: public web HTTP" +sudo ufw allow from any to any port 80 comment 'allow public web HTTP' +echo "allow: local web admin HTTPS" +sudo ufw allow from 10.0.0.0/8 to any port 443 comment 'allow local LAN HTTPS' +sudo ufw allow from 172.16.0.0/12 to any port 443 comment 'allow local LAN HTTPS' +sudo ufw allow from 192.168.0.0/16 to any port 443 comment 'allow local LAN HTTPS' +echo "open firewall for auto nat discover (see issue #129)" +sudo ufw allow proto udp from 10.0.0.0/8 port 1900 to any comment 'allow local LAN SSDP for UPnP discovery' +sudo ufw allow proto udp from 172.16.0.0/12 port 1900 to any comment 'allow local LAN SSDP for UPnP discovery' +sudo ufw allow proto udp from 192.168.0.0/16 port 1900 to any comment 'allow local LAN SSDP for UPnP discovery' +echo "enable lazy firewall" +sudo ufw --force enable +echo "" + +# update system +echo "" +echo "*** Update System ***" +sudo apt-mark hold raspberrypi-bootloader +sudo apt-get update -y +echo "OK - System is now up to date" + +# mark setup is done +sudo sed -i "s/^setupStep=.*/setupStep=100/g" /home/admin/raspiblitz.info ########################## # PROVISIONING SERVICES @@ -302,7 +303,7 @@ else fi # TOR -if [ "${runBehindTor}" = "on" ]; then +if [ "${runBehindTor}" == "on" ]; then echo "Provisioning TOR - run config script" >> ${logFile} sudo sed -i "s/^message=.*/message='Setup Tor (takes time)'/g" ${infoFile} sudo /home/admin/config.scripts/internet.tor.sh on >> ${logFile} 2>&1 @@ -346,14 +347,34 @@ else echo "Provisioning DYNAMIC DOMAIN - keep default" >> ${logFile} fi -# RTL +# RTL (LND) if [ "${rtlWebinterface}" = "on" ]; then - echo "Provisioning RTL - run config script" >> ${logFile} + echo "Provisioning RTL LND - run config script" >> ${logFile} sudo sed -i "s/^message=.*/message='Setup RTL (takes time)'/g" ${infoFile} - sudo -u admin /home/admin/config.scripts/bonus.rtl.sh on >> ${logFile} 2>&1 + sudo -u admin /home/admin/config.scripts/bonus.rtl.sh on lnd mainnet >> ${logFile} 2>&1 sudo systemctl disable RTL # will get enabled after recover dialog else - echo "Provisioning RTL - keep default" >> ${logFile} + echo "Provisioning RTL LND - keep default" >> ${logFile} +fi + +# RTL (CLN) +if [ "${crtlWebinterface}" = "on" ]; then + echo "Provisioning RTL CLN - run config script" >> ${logFile} + sudo sed -i "s/^message=.*/message='Setup RTL (takes time)'/g" ${infoFile} + sudo -u admin /home/admin/config.scripts/bonus.rtl.sh on cln mainnet >> ${logFile} 2>&1 + sudo systemctl disable cRTL # will get enabled after recover dialog +else + echo "Provisioning RTL CLN - keep default" >> ${logFile} +fi + +# SPARKO +if [ "${sparko}" = "on" ]; then + echo "Provisioning Sparko - run config script" >> ${logFile} + sudo sed -i "s/^message=.*/message='Setup SPARKO (takes time)'/g" ${infoFile} + sudo -u admin /home/admin/config.scripts/cln-plugin.sparko.sh on mainnet >> ${logFile} 2>&1 + sudo systemctl disable cRTL # will get enabled after recover dialog +else + echo "Provisioning RTL CLN - keep default" >> ${logFile} fi #LOOP @@ -392,13 +413,7 @@ if [ "${BTCPayServer}" = "on" ]; then echo "Provisioning BTCPAYSERVER on TOR - running setup" >> ${logFile} sudo sed -i "s/^message=.*/message='Setup BTCPay (takes time)'/g" ${infoFile} sudo -u admin /home/admin/config.scripts/bonus.btcpayserver.sh on >> ${logFile} 2>&1 - - #echo "Provisioning BTCPAYSERVER on TOR - run on after bootup script" >> ${logFile} - # because BTCPAY server freezes during recovery .. it will get installed after reboot - #echo "sudo -u admin /home/admin/config.scripts/bonus.btcpayserver.sh on" >> /home/admin/setup.sh - #sudo chmod +x /home/admin/setup.sh >> ${logFile} - #sudo ls -la /home/admin/setup.sh >> ${logFile} - + else echo "Provisioning BTCPayServer - keep default" >> ${logFile} fi @@ -720,6 +735,15 @@ else sudo /home/admin/config.scripts/blitz.datadrive.sh fstab ${datadisk} >> ${logFile} fi +# MAKE SURE SERVICES ARE RUNNING +echo "Make sure main services are running .." >> ${logFile} +sudo systemctl start ${network}d +if [ "${lightning}" == "lnd" ];then + sudo systemctl start lnd +elif [ "${lightning}" == "cln" ];then + sudo systemctl start lightningd +fi + echo "DONE - Give raspi some cool off time after hard building .... 5 secs sleep" >> ${logFile} sleep 5 diff --git a/home.admin/assets/background.service b/home.admin/assets/background.service index bf6e14992..83c6e13c1 100644 --- a/home.admin/assets/background.service +++ b/home.admin/assets/background.service @@ -14,11 +14,16 @@ User=root Group=root Type=simple ExecStart=/home/admin/_background.sh -KillMode=process Restart=always TimeoutSec=10 RestartSec=10 StandardOutput=journal +# Hardening measures +PrivateTmp=true +ProtectSystem=full +NoNewPrivileges=true +PrivateDevices=true + [Install] WantedBy=multi-user.target diff --git a/home.admin/assets/bitcoin.conf b/home.admin/assets/bitcoin.conf index 6c92fbf6e..b9a32c9ca 100755 --- a/home.admin/assets/bitcoin.conf +++ b/home.admin/assets/bitcoin.conf @@ -13,9 +13,11 @@ peerbloomfilters=1 # Connection settings rpcuser=raspibolt rpcpassword=passwordB -rpcport=8332 +main.rpcport=8332 +test.rpcport=18332 rpcallowip=127.0.0.1 -rpcbind=127.0.0.1:8332 +main.rpcbind=127.0.0.1:8332 +test.rpcbind=127.0.0.1:18332 zmqpubrawblock=tcp://127.0.0.1:28332 zmqpubrawtx=tcp://127.0.0.1:28333 @@ -27,3 +29,11 @@ maxconnections=40 maxuploadtarget=5000 datadir=/mnt/hdd/bitcoin + +# tor by default +onlynet=onion +proxy=127.0.0.1:9050 +main.bind=127.0.0.1 +test.bind=127.0.0.1 +dnsseed=0 +dns=0 diff --git a/home.admin/assets/bitcoind.service b/home.admin/assets/bitcoind.service index 550d23ad6..e9f221aa3 100644 --- a/home.admin/assets/bitcoind.service +++ b/home.admin/assets/bitcoind.service @@ -1,11 +1,12 @@ # RaspiBlitz: systemd unit for bitcoind +# edit final Wants/After when provision is done +Wants=network.target +After=network.target [Unit] -Description=Bitcoin daemon -Wants=bootstrap.service -After=bootstrap.service +Description=Bitcoin-Daemon -# for use with sendmail alert (coming soon) +# for use with sendmail alert #OnFailure=systemd-sendmail@%n [Service] @@ -14,13 +15,18 @@ Group=bitcoin Type=forking PIDFile=/mnt/hdd/bitcoin/bitcoind.pid ExecStartPre=-/home/admin/config.scripts/blitz.systemd.sh log blockchain STARTED -ExecStart=/usr/local/bin/bitcoind -daemon -conf=/home/bitcoin/.bitcoin/bitcoin.conf -pid=/mnt/hdd/bitcoin/bitcoind.pid -KillMode=process +ExecStart=/usr/local/bin/bitcoind -daemon -conf=/mnt/hdd/bitcoin/bitcoin.conf -pid=/mnt/hdd/bitcoin/bitcoind.pid Restart=always TimeoutSec=120 RestartSec=30 StandardOutput=null StandardError=journal +# Hardening measures +PrivateTmp=true +ProtectSystem=full +NoNewPrivileges=true +PrivateDevices=true + [Install] WantedBy=multi-user.target \ No newline at end of file diff --git a/home.admin/assets/blitzweb.conf b/home.admin/assets/blitzweb.conf deleted file mode 100644 index 43e0bbcf5..000000000 --- a/home.admin/assets/blitzweb.conf +++ /dev/null @@ -1,44 +0,0 @@ -## RaspiBlitz NGINX config: blitzweb.conf - -server { - - # localhost only - listen 127.0.0.1:443 ssl default_server; - listen [::1]:443 ssl default_server; - # any interface - #listen 443 ssl default_server; - #listen [::]:443 ssl default_server; - - server_name _; - - ssl_protocols TLSv1 TLSv1.1 TLSv1.2; - ssl_prefer_server_ciphers on; - ssl_ciphers "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA256:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EDH+aRSA+AESGCM:EDH+aRSA+SHA256:EDH+aRSA:EECDH:!aNULL:!eNULL:!MEDIUM:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED"; - - add_header Strict-Transport-Security "max-age=31536000"; - - # ToDo(frennkie) if /mnt/hdd/app-data is missing (e.g. no disk) this will cause nginx to fail! - ssl_certificate /mnt/hdd/app-data/nginx/tls.cert; - ssl_certificate_key /mnt/hdd/app-data/nginx/tls.key; - - ## - # Logging Settings - ## - - access_log /var/log/nginx/access_raspiblitz.log; - error_log /var/log/nginx/error_raspiblitz.log; - - root /var/www/blitzweb; - - location / { - # First attempt to serve request as file, then - # as directory, then fall back to displaying a 404. - try_files $uri $uri/ =404; - } - - location /info/ { - auth_basic "BlitzWeb (admin:Password B)"; - auth_basic_user_file /etc/nginx/.htpasswd; - } - -} diff --git a/home.admin/assets/bootstrap.service b/home.admin/assets/bootstrap.service index 0ef49bc01..3c8ec0a52 100644 --- a/home.admin/assets/bootstrap.service +++ b/home.admin/assets/bootstrap.service @@ -14,5 +14,11 @@ ExecStart=/home/admin/_bootstrap.sh StandardOutput=journal StandardError=journal +# Hardening measures +PrivateTmp=true +ProtectSystem=full +NoNewPrivileges=true +PrivateDevices=true + [Install] WantedBy=multi-user.target \ No newline at end of file diff --git a/home.admin/assets/litecoin.conf b/home.admin/assets/litecoin.conf index 24b9bbfab..83e8ce6af 100755 --- a/home.admin/assets/litecoin.conf +++ b/home.admin/assets/litecoin.conf @@ -27,3 +27,11 @@ discardfee=0.00000001 mintxfee=0.00000001 minrelaytxfee=0.00000001 datadir=/mnt/hdd/litecoin + +# tor by default +onlynet=onion +proxy=127.0.0.1:9050 +main.bind=127.0.0.1 +test.bind=127.0.0.1 +dnsseed=0 +dns=0 diff --git a/home.admin/assets/litecoind.service b/home.admin/assets/litecoind.service index 5584fbe66..7f7007e0c 100644 --- a/home.admin/assets/litecoind.service +++ b/home.admin/assets/litecoind.service @@ -1,7 +1,10 @@ +# RaspiBlitz: systemd unit for bitcoind +# edit final Wants/After when provision is done +Wants=network.target +After=network.target + [Unit] -Description=Litecoin daemon -Wants=bootstrap.service -After=bootstrap.service +Description=Litecoin-Daemon # for use with sendmail alert (coming soon) #OnFailure=systemd-sendmail@%n @@ -13,12 +16,17 @@ Type=forking PIDFile=/home/bitcoin/.litecoin/litecoind.pid ExecStartPre=-/home/admin/config.scripts/blitz.systemd.sh log blockchain STARTED ExecStart=/usr/local/bin/litecoind -daemon -conf=/home/bitcoin/.litecoin/litecoin.conf -pid=/home/bitcoin/.litecoin/litecoind.pid -KillMode=process Restart=always TimeoutSec=120 RestartSec=30 StandardOutput=null StandardError=journal +# Hardening measures +PrivateTmp=true +ProtectSystem=full +NoNewPrivileges=true +PrivateDevices=true + [Install] WantedBy=multi-user.target \ No newline at end of file diff --git a/home.admin/assets/lnd.service b/home.admin/assets/lnd.service index 7e74bf2d0..df20d047a 100644 --- a/home.admin/assets/lnd.service +++ b/home.admin/assets/lnd.service @@ -17,12 +17,17 @@ User=bitcoin Group=bitcoin LimitNOFILE=128000 Type=simple -KillMode=process TimeoutSec=180 Restart=always RestartSec=60 StandardOutput=null StandardError=journal +# Hardening measures +PrivateTmp=true +ProtectSystem=full +NoNewPrivileges=true +PrivateDevices=true + [Install] WantedBy=multi-user.target \ No newline at end of file diff --git a/home.admin/assets/nginx/sites-available/public.conf b/home.admin/assets/nginx/sites-available/public.conf index 9becc451d..2e018f325 100644 --- a/home.admin/assets/nginx/sites-available/public.conf +++ b/home.admin/assets/nginx/sites-available/public.conf @@ -4,17 +4,23 @@ server { listen 80 default_server; listen [::]:80 default_server; + root /var/www/public; + index index.html; + server_name _; + + # proxy for API + location /api/ { + proxy_pass http://127.0.0.1:11111/; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Host $host; + } + + # directory for acme challenge location ^~ /.well-known/acme-challenge/ { default_type "text/plain"; root /var/www/letsencrypt; } - root /var/www/public; - - index index.html; - - server_name _; - location / { # make sure to have https link to exact same host that was called sub_filter '0{{R3FC5Sl0001rP)t-s|Ns90 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 diff --git a/home.admin/assets/nginx/www_blitzweb/info/index.html b/home.admin/assets/nginx/www_blitzweb/info/index.html deleted file mode 120000 index 779063a79..000000000 --- a/home.admin/assets/nginx/www_blitzweb/info/index.html +++ /dev/null @@ -1 +0,0 @@ -/var/cache/raspiblitz/info.html \ No newline at end of file diff --git a/home.admin/assets/nginx/www_blitzweb/info/info.j2 b/home.admin/assets/nginx/www_blitzweb/info/info.j2 deleted file mode 100644 index 74b671121..000000000 --- a/home.admin/assets/nginx/www_blitzweb/info/info.j2 +++ /dev/null @@ -1,48 +0,0 @@ - - - - - RaspiBlitz Status - - - - -

-
-

Info Dashboard (Updated: {{ datetime }})

-
- - - -
-

RaspiBlitz v{{ codeVersion }} {{ hostname }}

-

{{ network }} Fullnode + Lightning Network {{ torInfo }}

-

 

-

CPU load {{ load }}, temp {{ tempC }}°C {{ tempF }}°F

-

Free Mem {{ ram }} HDDuse {{ hddUsedInfo }}

-

{{ uptime }}

-

ssh admin@{{ local_ip }} ▼{{ network_rx }} ▲{{ network_tx }}

- {% if runningRTL == '1' %} -

web admin --> http://{{ local_ip }}:3000

- {% endif %} -

 

-

{{ network }} {{ networkVersion }} {{ chain }}net Sync OK {{ sync_percentage }}

-

{{ public_addr_pre }} {{ public_addr }} {{ networkConnections }} peers

-

 

-

LND {{ ln_version }} {{ ln_baseInfo }}

- {% if ln_version|length %} -

{{ ln_channelInfo }} {{ ln_peers }} peers

- {% endif %} -

- - -
- - - diff --git a/home.admin/assets/nginx/www_blitzweb/info/status.css b/home.admin/assets/nginx/www_blitzweb/info/status.css deleted file mode 100644 index e239afcc4..000000000 --- a/home.admin/assets/nginx/www_blitzweb/info/status.css +++ /dev/null @@ -1,48 +0,0 @@ -#regular { - /* The size of the LCD on shopping list */ - width: 920px; - height: 440px; -} - -.header { - grid-area: header; - text-align: center; -} - -.logo { - grid-area: logo; - text-align: center; -} - -.main { - grid-area: main; -} - -.footer { - grid-area: footer; -} - -.grid-container { - display: grid; - grid-template-areas: 'header header header header' 'logo main main main' 'footer footer footer footer'; - grid-gap: 1px; - background-color: #02192b; - padding: 1px; -} - -.grid-container > div { - background-color: rgba(0, 0, 0, 0.8); - padding: 4px 8px; - font-size: 30px; -} - -body { - background-color: black; - font-family: monospace, monospace; - color: LightSteelBlue; -} - -p { - font-size: 12px; - margin: 4px; -} diff --git a/home.admin/assets/nginx/www_public/index.html b/home.admin/assets/nginx/www_public/index.html index 5167fa05a..7d0eba5bc 100644 --- a/home.admin/assets/nginx/www_public/index.html +++ b/home.admin/assets/nginx/www_public/index.html @@ -17,9 +17,23 @@

- Welcome + Welcome Node Operator

+

Please Wait ...

+ +

Use one the following link to access your RaspiBlitz

Please be aware about HTTPS Certificate Warning! Here is some useful information on that... diff --git a/home.admin/assets/nginx/www_blitzweb/index.html b/home.admin/assets/nginx/www_public/ui/index.html similarity index 88% rename from home.admin/assets/nginx/www_blitzweb/index.html rename to home.admin/assets/nginx/www_public/ui/index.html index 2da139ae5..f4fb2b5eb 100644 --- a/home.admin/assets/nginx/www_blitzweb/index.html +++ b/home.admin/assets/nginx/www_public/ui/index.html @@ -4,7 +4,7 @@ - RaspiBlitz Welcome + WebUI diff --git a/home.admin/assets/raspiblitz-v1.6-2020-08-04.img.gz.torrent b/home.admin/assets/raspiblitz-v1.6-2020-08-04.img.gz.torrent deleted file mode 100755 index 96264baf75f8c8fe7252f9f1d1ecee697dd6c607..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23324 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 diff --git a/home.admin/assets/raspiblitz-v1.6.1-2020-10-20.img.gz.torrent b/home.admin/assets/raspiblitz-v1.6.1-2020-10-20.img.gz.torrent deleted file mode 100644 index 19288d03e33c785be57c3cb36d6c75ca201df9cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23186 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 wkgjv+`B5M*roX8#{0rXKbtuFiBO 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 /home/admin/_aliases" + bash -c "echo 'alias ${prefix}bitcoind=\"/usr/local/bin/bitcoind\ + -${CHAIN}\"' \ + >> /home/admin/_aliases" + fi + fi + + source /home/admin/raspiblitz.info + if [ "${state}" == "ready" ]; then + echo "# OK - the ${prefix}bitcoind.service is enabled, system is ready so starting service" + sudo systemctl start ${prefix}bitcoind + else + echo "# OK - the ${prefix}bitcoindservice is enabled, to start manually use:" + echo "sudo systemctl start ${prefix}bitcoind" + fi + + isInstalled=$(systemctl status ${prefix}bitcoind | grep -c active) + if [ $isInstalled -gt 0 ];then + echo "# Installed $(bitcoind --version | grep version)" + echo + echo "# Monitor the ${prefix}bitcoind with:" + if [ ${CHAIN} = signet ]; then + echo "sudo tail -f /mnt/hdd/bitcoin/signet/debug.log" + elif [ ${CHAIN} = testnet ]; then + echo "sudo tail -f /mnt/hdd/bitcoin/testnet3/debug.log" + elif [ ${CHAIN} = mainnet ]; then + echo "sudo tail -f /mnt/hdd/bitcoin/debug.log" + fi + echo + else + echo "# Installation failed" + echo "# See:" + echo "# sudo journalctl -fu ${prefix}bitcoind" + exit 1 + fi +} + +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 + exit 0 +fi + +# switch off +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 + exit 0 +fi + +echo "# FAIL - Unknown Parameter $1" +echo "# may need reboot to run" +exit 1 \ No newline at end of file diff --git a/home.admin/config.scripts/blitz.bootdrive.sh b/home.admin/config.scripts/blitz.bootdrive.sh new file mode 100644 index 000000000..217510285 --- /dev/null +++ b/home.admin/config.scripts/blitz.bootdrive.sh @@ -0,0 +1,95 @@ +#!/bin/bash + +# basic background on this feature +# see: https://github.com/rootzoll/raspiblitz/issues/936 + +# get basic system information +# these are the same set of infos the WebGUI dialog/controler has +source /home/admin/raspiblitz.info &2 + echo "# DONE - please reboot" + else + echo "# FAIL to execute on ${baseimage}: ${resizeRaspbian}" + echo "err='expand failed'" + exit 1 + fi + elif [ "${baseimage}" = "armbian" ]; then + resizeArmbian="/usr/lib/armbian/armbian-resize-filesystem" + if [ -x ${resizeArmbian} ]; then + echo "# RUNNING EXPAND ARMBIAN: ${resizeArmbian}" + sudo $resizeArmbian start 1>&2 + echo "# DONE - please reboot" + else + echo "# FAIL to execute on ${baseimage}: ${resizeArmbian}" + echo "err='expand failed'" + exit 1 + fi + else + echo "#FAIL no implementation for: ${baseimage}" + echo "err='missing implementation'" + exit 1 + fi + exit 0 +fi + +echo "err='unknown parameter'" +exit 1 \ No newline at end of file diff --git a/home.admin/config.scripts/blitz.copyblockchain.sh b/home.admin/config.scripts/blitz.copyblockchain.sh deleted file mode 100755 index 9829b7652..000000000 --- a/home.admin/config.scripts/blitz.copyblockchain.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/bash - -if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then - echo "# managing the copy of blockchain data over LAN" - echo "# blitz.copyblockchain.sh [status]" - echo "error='missing parameters'" - exit 1 -fi - -# load basic system settings -source /home/admin/raspiblitz.info 2>/dev/null -source /mnt/hdd/raspiblitz.conf 2>/dev/null - -# check that blockchain is set & supported -if [ "${network}" != "bitcoin" ] && [ "${network}" != "litecoin" ]; then - echo "blockchain='{$network}'" - echo "error='blockchain type missing or not supported'" - exit 1 -fi - -# check that HDD is available -isMounted=$(sudo df | grep -c /mnt/hdd) -if [ "${isMounted}" != "1" ]; then - echo "error='no datadrive is mounted'" - exit 1 -fi - -################### -# STATUS -################### - -# check if copy is in progress -copyBeginTime=$(cat /mnt/hdd/${network}/copy_begin.time 2>/dev/null | tr -cd '[[:digit:]]') -if [ ${#copyBeginTime} -eq 0 ]; then - copyBeginTime=0 -fi -copyEndTime=$(cat /mnt/hdd/${network}/copy_end.time 2>/dev/null | tr -cd '[[:digit:]]') -if [ ${#copyEndTime} -eq 0 ]; then - copyEndTime=0 -fi -copyInProgress=0 -if [ ${copyBeginTime} -gt ${copyEndTime} ]; then - copyInProgress=1 -fi - -# output status data & exit -if [ "$1" = "status" ]; then - echo "# blitz.copyblockchain.sh" - echo "copyInProgress=${copyInProgress}" - echo "copyBeginTime=${copyBeginTime}" - echo "copyEndTime=${copyEndTime}" - exit 1 -fi - -# if no other -echo "error='unknown command'" -exit 1 diff --git a/home.admin/config.scripts/blitz.copychain.sh b/home.admin/config.scripts/blitz.copychain.sh new file mode 100644 index 000000000..27a02ca12 --- /dev/null +++ b/home.admin/config.scripts/blitz.copychain.sh @@ -0,0 +1,397 @@ +#!/bin/bash + +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then + echo "# managing the copy of blockchain data over LAN" + echo "# blitz.copychain.sh [status|target|source]" + echo "error='missing parameters'" + exit 1 +fi + +# load basic system settings +source /home/admin/raspiblitz.info 2>/dev/null +source /mnt/hdd/raspiblitz.conf 2>/dev/null + +# check that blockchain is set & supported +if [ "${network}" != "bitcoin" ] && [ "${network}" != "litecoin" ]; then + echo "blockchain='{$network}'" + echo "error='blockchain type missing or not supported'" + exit 1 +fi + +# check that HDD is available +isMounted=$(sudo df | grep -c /mnt/hdd) +if [ "${isMounted}" != "1" ]; then + echo "error='no datadrive is mounted'" + exit 1 +fi + +################### +# STATUS +################### + +# check if copy is in progress +copyBeginTime=$(cat /mnt/hdd/${network}/copy_begin.time 2>/dev/null | tr -cd '[[:digit:]]') +if [ ${#copyBeginTime} -eq 0 ]; then + copyBeginTime=0 +fi +copyEndTime=$(cat /mnt/hdd/${network}/copy_end.time 2>/dev/null | tr -cd '[[:digit:]]') +if [ ${#copyEndTime} -eq 0 ]; then + copyEndTime=0 +fi +copyInProgress=0 +if [ ${copyBeginTime} -gt ${copyEndTime} ]; then + copyInProgress=1 +fi + +# output status data & exit +if [ "$1" = "status" ]; then + echo "# blitz.copychain.sh" + echo "copyInProgress=${copyInProgress}" + echo "copyBeginTime=${copyBeginTime}" + echo "copyEndTime=${copyEndTime}" + exit 1 +fi + +################### +# COPYTARGET +################### + +# output status data & exit +if [ "$1" = "target" ]; then + + # Basic Options + OPTIONS=(WINDOWS "Windows" \ + MACOS "Apple MacOSX" \ + LINUX "Linux" \ + BLITZ "RaspiBlitz" + ) + CHOICE=$(dialog --clear --title " Copy Blockchain from another laptop/node over LAN " --menu "\nWhich system is running on the other laptop/node you want to copy the blockchain from?\n " 14 60 9 "${OPTIONS[@]}" 2>&1 >/dev/tty) + + clear + case $CHOICE in + MACOS) echo "Steve";; + LINUX) echo "Linus";; + WINDOWS) echo "Bill";; + BLITZ) echo "Satoshi";; + *) exit 1;; + esac + + # setting copy state + sed -i "s/^state=.*/state=copytarget/g" /home/admin/raspiblitz.info + sed -i "s/^message=.*/message='Receiving Blockchain over LAN'/g" /home/admin/raspiblitz.info + + echo "stopping services ..." + sudo systemctl stop bitcoind <2 /dev/null + + # check if old blockchain data exists + hasOldBlockchainData=0 + sizeBlocks=$(sudo du -s /mnt/hdd/bitcoin/blocks 2>/dev/null | tr -dc '[0-9]') + if [ ${#sizeBlocks} -gt 0 ] && [ ${sizeBlocks} -gt 0 ]; then + hasOldBlockchainData=1 + fi + sizeChainstate=$(sudo du -s /mnt/hdd/bitcoin/chainstate 2>/dev/null | tr -dc '[0-9]') + if [ ${#sizeChainstate} -gt 0 ] && [ ${sizeChainstate} -gt 0 ]; then + hasOldBlockchainData=1 + fi + + dialog --title " Old Blockchain Data Found " --yesno "\nDo you want to delete the existing blockchain data now?" 7 60 + response=$? + clear + echo "response(${response})" + if [ "${response}" = "1" ]; then + echo "OK - keep old blockchain - just try to repair by copying over it" + sleep 3 + else + echo "OK - delete old blockchain" + sudo rm -rfv /mnt/hdd/bitcoin/blocks/* 2>/dev/null + sudo rm -rfv /mnt/hdd/bitcoin/chainstate/* 2>/dev/null + sleep 3 + fi + + # make sure /mnt/hdd/bitcoin exists + sudo mkdir /mnt/hdd/bitcoin 2>/dev/null + + # allow all users write to it + sudo chmod 777 /mnt/hdd/bitcoin + + echo + clear + if [ "${CHOICE}" = "WINDOWS" ]; then + echo "****************************************************************************" + echo "Instructions to COPY/TRANSFER SYNCED BLOCKCHAIN from a WINDOWS computer" + echo "****************************************************************************" + echo "" + echo "ON YOUR WINDOWS COMPUTER download and validate the blockchain with the Bitcoin" + echo "Core wallet software (>=0.17.1) from: bitcoincore.org/en/download" + echo "If the Bitcoin Blockchain is synced up - make sure that your Windows computer &" + echo "your RaspiBlitz are in the same local network." + echo "" + echo "Open a fresh terminal on your Windows computer & change into the directory that" + echo "contains the blockchain data - should see folders named 'blocks' & 'chainstate'" + echo "there. Normally on Windows thats: C:\Users\YourUserName\Appdata\Roaming\Bitcoin" + echo "Make sure that the Bitcoin Core Wallet is not running in the background anymore." + echo "" + echo "COPY, PASTE & EXECUTE the following command on your Windows computer terminal:" + echo "scp -r ./chainstate ./blocks bitcoin@${localip}:/mnt/hdd/bitcoin" + echo "" + echo "If asked for a password use PASSWORD A (or 'raspiblitz')." + fi + if [ "${CHOICE}" = "MACOS" ]; then + echo "****************************************************************************" + echo "Instructions to COPY/TRANSFER SYNCED BLOCKCHAIN from a MacOSX computer" + echo "****************************************************************************" + echo "" + echo "ON YOUR MacOSX COMPUTER download and validate the blockchain with the Bitcoin" + echo "Core wallet software (>=0.17.1) from: bitcoincore.org/en/download" + echo "If the Bitcoin Blockchain is synced up - make sure that your MacOSX computer &" + echo "your RaspiBlitz are in the same local network." + echo "" + echo "Open a fresh terminal on your MacOSX computer and change into the directory that" + echo "contains the blockchain data - should see folders named 'blocks' & 'chainstate'" + echo "there. Normally on MacOSX thats: cd ~/Library/Application Support/Bitcoin/" + echo "Make sure that the Bitcoin Core Wallet is not running in the background anymore." + echo "" + echo "COPY, PASTE & EXECUTE the following command on your MacOSX terminal:" + echo "sudo rsync -avhW --progress ./chainstate ./blocks bitcoin@${localip}:/mnt/hdd/bitcoin" + echo "" + echo "You will be asked for passwords. First can be the user password of your MacOSX" + echo "computer and the last is the PASSWORD A (or 'raspiblitz') of this RaspiBlitz." + fi + if [ "${CHOICE}" = "LINUX" ]; then + echo "****************************************************************************" + echo "Instructions to COPY/TRANSFER SYNCED BLOCKCHAIN from a LINUX computer" + echo "****************************************************************************" + echo "" + echo "ON YOUR LINUX COMPUTER download and validate the blockchain with the Bitcoin" + echo "Core wallet software (>=0.17.1) from: bitcoincore.org/en/download" + echo "If the Bitcoin Blockchain is synced up - make sure that your Linux computer &" + echo "your RaspiBlitz are in the same local network." + echo "" + echo "Open a fresh terminal on your Linux computer and change into the directory that" + echo "contains the blockchain data - should see folders named 'blocks' & 'chainstate'" + echo "there. Normally on Linux thats: cd ~/.bitcoin/" + echo "Make sure that the Bitcoin Core Wallet is not running in the background anymore." + echo "" + echo "COPY, PASTE & EXECUTE the following command on your Linux terminal:" + echo "sudo rsync -avhW --progress ./chainstate ./blocks bitcoin@${localip}:/mnt/hdd/bitcoin" + echo "" + echo "You will be asked for passwords. First can be the user password of your Linux" + echo "computer and the last is the PASSWORD A (or 'raspiblitz') of this RaspiBlitz." + fi + if [ "${CHOICE}" = "BLITZ" ]; then + echo "****************************************************************************" + echo "Instructions to COPY/TRANSFER SYNCED BLOCKCHAIN from another RaspiBlitz" + echo "****************************************************************************" + echo "" + echo "The other RaspiBlitz needs a minimum version of 1.6 (if lower, update first)." + echo "Make sure that the other RaspiBlitz is on the same local network." + echo "" + echo "Open a fresh terminal and login per SSH into that other RaspiBlitz." + echo "Once in the main menu go: MAINMENU > REPAIR > COPY-SOURCE" + echo "Follow the given instructions ..." + echo "" + echo "The LOCAL IP of this target RaspiBlitz is: ${localip}" + fi + echo "" + echo "It can take multiple hours until transfer is complete - be patient." + echo "****************************************************************************" + echo "PRESS ENTER if transfers is done OR if you want to choose another option." + sleep 2 + read key + + # make quick check if data is there + anyDataAtAll=0 + quickCheckOK=1 + count=$(sudo find /mnt/hdd/bitcoin/ -iname *.dat -type f | wc -l) + if [ ${count} -gt 0 ]; then + echo "Found data in /mnt/hdd/bitcoin/blocks" + anyDataAtAll=1 + fi + if [ ${count} -lt 300 ]; then + echo "FAIL: transfer seems invalid - less then 300 .dat files (${count})" + quickCheckOK=0 + fi + count=$(sudo find /mnt/hdd/bitcoin/ -iname *.ldb -type f | wc -l) + if [ ${count} -gt 0 ]; then + echo "Found data in /mnt/hdd/bitcoin/chainstate" + anyDataAtAll=1 + fi + if [ ${count} -lt 700 ]; then + echo "FAIL: transfer seems invalid - less then 700 .ldb files (${count})" + quickCheckOK=0 + fi + + echo "*********************************************" + echo "QUICK CHECK RESULT" + echo "*********************************************" + + # just if any data transferred .. + if [ ${anyDataAtAll} -eq 1 ]; then + + # data was invalid - ask user to keep? + if [ ${quickCheckOK} -eq 0 ]; then + echo "FAIL -> DATA seems incomplete." + else + echo "OK -> DATA LOOKS GOOD :D" + sudo rm /mnt/hdd/bitcoin/debug.log 2>/dev/null + fi + + else + echo "CANCEL -> NO DATA was copied." + quickCheckOK=0 + fi + echo "*********************************************" + + + # REACT ON QUICK CHECK DURING INITAL SETUP + if [ ${quickCheckOK} -eq 0 ]; then + + echo "*********************************************" + echo "There seems to be an invalid transfer." + + echo "Wait 5 secs ..." + sleep 5 + + dialog --title " INVALID TRANSFER - TRY AGAIN?" --yesno "Quickcheck shows the data you transferred is invalid/incomplete. Maybe transfere was interrupted and not completed.\n\nDo you want retry/proceed the copy process?" 8 70 + response=$? + echo "response(${response})" + if [ "${response}" == "0" ]; then + /home/admin/config.scripts/blitz.copychain.sh + exit 0 + fi + + dialog --title " INVALID TRANSFER - DELETE DATA?" --yesno "Quickcheck shows the data you transferred is invalid/incomplete. This can lead further RaspiBlitz setup to get stuck in error state.\nDo you want to reset/delete data?" 8 60 + response=$? + echo "response(${response})" + case $response in + 1) quickCheckOK=1 ;; + esac + + fi + + if [ ${quickCheckOK} -eq 0 ]; then + echo "Deleting invalid Data ... " + sudo rm -rf /mnt/hdd/bitcoin + sleep 2 + fi + + echo "restarting services ... (please wait)" + sudo systemctl start bitcoind + sleep 10 + + # setting copy state + sed -i "s/^state=.*/state=ready/g" /home/admin/raspiblitz.info + sed -i "s/^message=.*/message='Node Running'/g" /home/admin/raspiblitz.info +fi + +################### +# COPYSOURCE +################### + +if [ "$1" = "source" ]; then + + clear + echo + echo "# *** Copy Blockchain Source Modus ***" + + echo "# get IP of RaspiBlitz to copy to ..." + targetIP=$(whiptail --inputbox "\nPlease enter the LOCAL IP of the\nRaspiBlitz to copy Blockchain to:" 10 38 "" --title " Target IP " --backtitle "RaspiBlitz - Copy Blockchain" 3>&1 1>&2 2>&3) + targetIP=$(echo "${targetIP[0]}") + localIP=$(ip addr | grep 'state UP' -A2 | egrep -v 'docker0|veth' | grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + if [ ${#targetIP} -eq 0 ]; then + exit 1 + fi + if [ "${localIP}" == "${targetIP}" ]; then + whiptail --msgbox "Dont type in the local IP of this RaspiBlitz,\nthe LOCAL IP of the other RaspiBlitz is needed." 8 54 "" --title " Testing Target IP " --backtitle "RaspiBlitz - Copy Blockchain" + exit 1 + fi + canPingIP=$(ping ${targetIP} -c 1 | grep -c "1 received") + if [ ${canPingIP} -eq 0 ]; then + whiptail --msgbox "Was not able to contact/ping: ${targetIP}\n\n- check if IP of target RaspiBlitz is correct.\n- check to be on the same local network.\n- try again ..." 11 58 "" --title " Testing Target IP " --backtitle "RaspiBlitz - Copy Blockchain" + exit 1 + fi + + echo "# get Password of RaspiBlitz to copy to ..." + targetPassword=$(whiptail --passwordbox "\nPlease enter the PASSWORD A of the\nRaspiBlitz to copy Blockchain to:" 10 38 "" --title "Target Password" --backtitle "RaspiBlitz - Copy Blockchain" 3>&1 1>&2 2>&3) + if [ ${#targetPassword} -eq 0 ]; then + exit 1 + fi + + sudo rm /root/.ssh/known_hosts 2>/dev/null + canLogin=$(sudo sshpass -p "${targetPassword}" ssh -t -o StrictHostKeyChecking=no bitcoin@${targetIP} "echo 'working'" 2>/dev/null | grep -c 'working') + if [ ${canLogin} -eq 0 ]; then + whiptail --msgbox "Password was not working for IP: ${targetIP}\n\n- check thats the correct IP for correct RaspiBlitz\n- check that you used PASSWORD A and had no typo\n- If you tried too often, wait 1h try again" 11 58 "" --title " Testing Target Password " --backtitle "RaspiBlitz - Copy Blockchain" + exit 1 + fi + + echo "# stopping services ..." + sudo systemctl stop background + sudo systemctl stop lnd + sudo systemctl stop ${network}d + sudo systemctl disable ${network}d + sleep 5 + sudo systemctl stop bitcoind 2>/dev/null + + clear + echo + echo "# Starting copy over LAN (around 4-6 hours) ..." + sed -i "s/^state=.*/state=copysource/g" /home/admin/raspiblitz.info + cd /mnt/hdd/${network} + + # transfere beginning flag + date +%s > /home/admin/copy_begin.time + sudo sshpass -p "${targetPassword}" rsync -avhW -e 'ssh -o StrictHostKeyChecking=no -p 22' /home/admin/copy_begin.time bitcoin@${targetIP}:/mnt/hdd/bitcoin + sudo rm -f /home/admin/copy_begin.time + + # repeat the syncing of directories until + # a) there are no files left to transfere (be robust against failing connections, etc) + # b) the user hits a key to break loop after report + while : + do + + # transfere blockchain data + rm -f ./transferred.rsync + sudo sshpass -p "${targetPassword}" rsync -avhW -e 'ssh -o StrictHostKeyChecking=no -p 22' --info=progress2 --log-file=./transferred.rsync ./chainstate ./blocks bitcoin@${targetIP}:/mnt/hdd/bitcoin + + # check result + # the idea is even after successfull transfer the loop will run a second time + # but on the second time there will be no files transfered (log lines are below 4) + # thats the signal that its done + linesInLogFile=$(wc -l ./transferred.rsync | cut -d " " -f 1) + if [ ${linesInLogFile} -lt 4 ]; then + echo "" + echo "OK all files transfered. DONE" + sleep 2 + break + fi + + # wait 20 seconds for user exiting loop + echo "" + echo -en "OK one sync loop done ... will test in next loop if all was transferred." + echo -en "PRESS X TO MANUALLY FINISH SYNCING" + read -n 1 -t 6 keyPressed + if [ "${keyPressed}" = "x" ]; then + echo "" + echo "Ending Sync ..." + sleep 2 + break + fi + + done + + # transfere end flag + sed -i "s/^state=.*/state=ready/g" /home/admin/raspiblitz.info + date +%s > /home/admin/copy_end.time + sudo sshpass -p "${targetPassword}" rsync -avhW -e 'ssh -o StrictHostKeyChecking=no -p 22' /home/admin/copy_end.time bitcoin@${targetIP}:/mnt/hdd/bitcoin + sudo rm -f /home/admin/copy_end.time + + echo "# start services again ..." + sudo systemctl enable ${network}d + sudo systemctl start ${network}d + sudo systemctl start lnd + sudo systemctl start background + + echo "# show final message" + whiptail --msgbox "OK - Copy Process Finished.\n\nNow check on the target RaspiBlitz if it was sucessful." 10 40 "" --title " DONE " --backtitle "RaspiBlitz - Copy Blockchain" + +fi \ No newline at end of file diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index 140bc4ba4..ea5002b52 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -1,7 +1,7 @@ #!/bin/bash if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then >&2 echo "# managing the data drive(s) with old EXT4 or new BTRFS" - >&2 echo "# blitz.datadrive.sh [status|tempmount|format|fstab|raid|link|swap|clean|snapshot]" + >&2 echo "# blitz.datadrive.sh [status|tempmount|unmount|format|fstab|raid|link|swap|clean|snapshot|uasp-fix]" echo "error='missing parameters'" exit 1 fi @@ -49,7 +49,7 @@ fi isMounted=$(sudo df | grep -c /mnt/hdd) isBTRFS=$(sudo btrfs filesystem show 2>/dev/null| grep -c 'BLITZSTORAGE') isRaid=$(btrfs filesystem df /mnt/hdd 2>/dev/null | grep -c "Data, RAID1") -isSSD="Unknown" +isSSD="0" # determine if swap is external on or not externalSwapPath="/mnt/hdd/swapfile" @@ -71,7 +71,7 @@ if [ "$1" = "status" ]; then echo "isMounted=${isMounted}" echo "isBTRFS=${isBTRFS}" - # if HDD is not mounted system is in the pre-setup phase + # if HDD is not mounted system then it is in the pre-setup phase # deliver all the detailes needed about the data drive # and it content for the setup dialogs if [ ${isMounted} -eq 0 ]; then @@ -79,11 +79,11 @@ if [ "$1" = "status" ]; then echo "# SETUP INFO" # find the HDD (biggest single partition) + # will then be used to offer formatting and permanent mounting hdd="" sizeDataPartition=0 OSPartition=$(sudo df /usr | grep dev | cut -d " " -f 1 | sed "s/\/dev\///g") - - lsblk -o NAME,SIZE -b | grep -P "[s|v]d[a-z][0-9]?" > .lsblk.tmp + lsblk -o NAME,SIZE -b | grep -P "[s|vn][dv][a-z][0-9]?" > .lsblk.tmp while read line; do # cut line info into different informations @@ -141,14 +141,17 @@ if [ "$1" = "status" ]; then done < .lsblk.tmp rm -f .lsblk.tmp 1>/dev/null 2>/dev/null + # display possible warnings from hdd partition detection if [ "${hddPartitionCandidate}" != "" ] && [ ${#hddDataPartition} -lt 4 ]; then echo "# WARNING: found invalid partition (${hddDataPartition}) - redacting" hddDataPartition="" fi + # try to detect if its an SSD isSSD=$(sudo cat /sys/block/${hdd}/queue/rotational 2>/dev/null | grep -c 0) echo "isSSD=${isSSD}" + # display results from hdd & partition detection echo "hddCandidate='${hdd}'" hddBytes=0 hddGigaBytes=0 @@ -158,9 +161,9 @@ if [ "$1" = "status" ]; then fi echo "hddBytes=${hddBytes}" echo "hddGigaBytes=${hddGigaBytes}" - echo "hddPartitionCandidate='${hddDataPartition}'" + # if positive deliver more data if [ ${#hddDataPartition} -gt 0 ]; then # check partition size in bytes and GBs @@ -168,13 +171,6 @@ if [ "$1" = "status" ]; then hddDataPartitionGigaBytes=$(echo "scale=0; ${sizeDataPartition}/1024/1024/1024" | bc -l) echo "hddPartitionGigaBytes=${hddDataPartitionGigaBytes}" - # check if single drive with that size - hddCount=0 - if [ ${#hddDataPartition} -gt 0 ]; then - hddCount=1 - fi - echo "hddCount=${hddCount}" - # check format of devices partition hddFormat=$(lsblk -o FSTYPE,NAME,TYPE | grep part | grep "${hddDataPartition}" | cut -d " " -f 1) echo "hddFormat='${hddFormat}'" @@ -182,7 +178,7 @@ if [ "$1" = "status" ]; then # if 'ext4' or 'btrfs' then temp mount and investigate content if [ "${hddFormat}" = "ext4" ] || [ "${hddFormat}" = "btrfs" ]; then - # BTRFS is working with subvolumnes for snapshots / ext4 has no SubVolumes + # BTRFS is working with subvolumes for snapshots / ext4 has no SubVolumes subVolumeDir="" if [ "${hddFormat}" = "btrfs" ]; then subVolumeDir="/WORKINGDIR" @@ -206,11 +202,30 @@ if [ "$1" = "status" ]; then echo "hddError='data mount failed'" else - # 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") - echo "hddRaspiData=${hddRaspiData}" - sudo umount /mnt/hdd + ##################################### + # Pre-Setup Investigation of DATA-PART + + # 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") + echo "hddRaspiData=${hddRaspiData}" + hddRaspiVersion="" + if [ ${hddRaspiData} -eq 1 ]; then + source /mnt/hdd${subVolumeDir}/raspiblitz.conf + hddRaspiVersion="${raspiBlitzVersion}" + fi + echo "hddRaspiVersion='${hddRaspiVersion}'" + + # 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 + + # comment this line out if case to study the contect of the data section + sudo umount /mnt/hdd fi # temp storage data drive @@ -228,6 +243,9 @@ if [ "$1" = "status" ]; then echo "hddError='storage mount failed'" else + ######################################## + # Pre-Setup Invetigation of STORAGE-PART + # check for blockchain data on storage hddBlocksBitcoin=$(sudo ls /mnt/storage${subVolumeDir}/bitcoin/blocks/blk00000.dat 2>/dev/null | grep -c '.dat') echo "hddBlocksBitcoin=${hddBlocksBitcoin}" @@ -252,7 +270,7 @@ if [ "$1" = "status" ]; then echo "hddDataFreeKB=${hdd_data_free1Kblocks}" # check if its another fullnode implementation data disk - hddGotMigrationData="none" + hddGotMigrationData="" if [ "${hddFormat}" = "ext4" ]; then # check for umbrel isUmbrelHDD=$(sudo ls /mnt/storage/umbrel/info.json 2>/dev/null | grep -c '.json') @@ -268,7 +286,7 @@ if [ "$1" = "status" ]; then fi echo "hddGotMigrationData='${hddGotMigrationData}'" - # unmount + # comment this line out if case to study the contect of the storage section sudo umount /mnt/storage fi else @@ -298,6 +316,12 @@ if [ "$1" = "status" ]; then fi hddRaspiData=$(sudo ls -l /mnt/hdd | grep -c raspiblitz.conf) echo "hddRaspiData=${hddRaspiData}" + hddRaspiVersion="" + if [ ${hddRaspiData} -eq 1 ]; then + source /mnt/hdd/raspiblitz.conf + hddRaspiVersion="${raspiBlitzVersion}" + fi + echo "hddRaspiVersion='${hddRaspiVersion}'" isSSD=$(sudo cat /sys/block/${hdd}/queue/rotational 2>/dev/null | grep -c 0) echo "isSSD=${isSSD}" @@ -346,6 +370,7 @@ if [ "$1" = "status" ]; then fi # HDD Adpater UASP support --> https://www.pragmaticlinux.com/2021/03/fix-for-getting-your-ssd-working-via-usb-3-on-your-raspberry-pi/ + # in both cases (if mounted or not - using the hdd selection from both cases) if [ ${#hdd} -gt 0 ]; then # determine USB HDD adapter model ID @@ -1174,17 +1199,28 @@ fi if [ "$1" = "tempmount" ]; then + # get HDD status and candidates + source <(/home/admin/config.scripts/blitz.datadrive.sh status) + if [ ${isMounted} -eq 1 ]; then echo "error='already mounted'" exit 1 fi - # get device to temp mount + # get device to temp mount from parameter (optional) hdd=$2 - if [ ${#hdd} -eq 0 ]; then - >&2 echo "# FAIL which device should be temp mounted (e.g. sda)" - >&2 echo "# run 'status' to see device candidates" - echo "error='missing second parameter'" + # automount if no parameter the hddcandinate + if [ "${hdd}" == "" ]; then + if [ "${hddFormat}" != "btrfs" ]; then + hdd="${hddPartitionCandidate}" + else + hdd="${hddCandidate}" + fi + fi + # if still no hdd .. throw error + if [ "${hdd}" == "" ]; then + >&2 echo "# FAIL there is no detected hdd candidate to tempmount" + echo "error='hdd not found'" exit 1 fi @@ -1264,6 +1300,14 @@ if [ "$1" = "tempmount" ]; then fi +if [ "$1" = "unmount" ]; then + sudo umount /mnt/hdd 2>/dev/null + sudo umount /mnt/storage 2>/dev/null + sudo umount /mnt/temp 2>/dev/null + echo "# OK done unmount" + exit 1 +fi + ######################################## # LINKING all directories with ln ######################################## @@ -1482,6 +1526,9 @@ if [ "$1" = "clean" ]; then >&2 echo "# RASPIBLITZ DATA DRIVES - CLEANING" + # get HDD status + source <(/home/admin/config.scripts/blitz.datadrive.sh status) + if [ ${isMounted} -eq 0 ]; then >&2 echo "# FAIL: cannot clean - the drive is not mounted'" echo "error='not mounted'" @@ -1492,9 +1539,9 @@ if [ "$1" = "clean" ]; then sudo apt-get install -y secure-delete 1>/dev/null >&2 echo - >&2 echo "# IMPORTANT: There is no 100% guarantee that sensitive data is completely deleted!" - >&2 echo "# see: https://www.davescomputers.com/securely-deleting-files-solid-state-drive/" - >&2 echo "# see: https://unix.stackexchange.com/questions/62345/securely-delete-files-on-btrfs-filesystem" + >&2 echo "# IMPORTANT: No 100% guarantee that sensitive data is completely deleted!" + # see: https://www.davescomputers.com/securely-deleting-files-solid-state-drive/" + # see: https://unix.stackexchange.com/questions/62345/securely-delete-files-on-btrfs-filesystem" >&2 echo "# --> Dont resell or gift data drive. Destroy physically if needed." >&2 echo @@ -1537,7 +1584,7 @@ if [ "$1" = "clean" ]; then fi # on SSDs never shredd # https://www.davescomputers.com/securely-deleting-files-solid-state-drive/ - if [ ${isSSD} -eq 1 ]; then + if [ "${isSSD}" == "1" ]; then whenDeleteSchredd=0 fi @@ -1578,12 +1625,13 @@ if [ "$1" = "clean" ]; then # take extra care if wallet.db exists sudo srm /mnt/hdd/${chain}/wallet.db 2>/dev/null - # the rest just delete (keep blocks and chainstate) + # the rest just delete (keep blocks and chainstate and testnet3) for entry in $(ls -A1 /mnt/hdd/${chain} 2>/dev/null) do # sorting file delete=1 - if [ "${entry}" = "blocks" ] || [ "${entry}" = "chainstate" ]; then + if [ "${entry}" = "blocks" ] || [ "${entry}" = "chainstate" ]\ + || [ "${entry}" = "testnet3" ] ; then delete=0 fi # delete or keep @@ -1599,6 +1647,30 @@ if [ "$1" = "clean" ]; then >&2 echo "# keeping: ${entry}" fi done + + # keep blocks and chainstate in testnet3 if exists + if [ -d /mnt/hdd/bitcoin/testnet3 ];then + for entry in $(ls -A1 /mnt/hdd/bitcoin/testnet3 2>/dev/null) + do + # sorting file + delete=1 + if [ "${entry}" = "blocks" ] || [ "${entry}" = "chainstate" ]; then + delete=0 + fi + # delete or keep + if [ ${delete} -eq 1 ]; then + if [ -d "/mnt/hdd/bitcoin/testnet3/$entry" ]; then + >&2 echo "# Deleting DIR : /mnt/hdd/bitcoin/testnet3/${entry}" + sudo rm -r /mnt/hdd/bitcoin/testnet3/$entry + else + >&2 echo "# deleting FILE : /mnt/hdd/bitcoin/testnet3/${entry}" + sudo rm /mnt/hdd/bitcoin/testnet3/$entry + fi + else + >&2 echo "# keeping: ${entry}" + fi + done + fi done fi @@ -1672,5 +1744,43 @@ if [ "$1" = "clean" ]; then fi +######################################## +# UASP-fix +######################################## + +if [ "$1" = "uasp-fix" ]; then + + # get HDD status and if the connected adapter is supports UASP + source <(/home/admin/config.scripts/blitz.datadrive.sh status) + + # 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 ..." + usbQuirkActive=$(sudo cat /boot/cmdline.txt | grep -c "usb-storage.quirks=") + 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 + # go into reboot to activate new setting + echo "# DONE deactivating UASP for ${hddAdapterUSB} ... reboot needed" + echo "neededReboot=1" + else + echo "# Already UASP deactivated for ${hddAdapterUSB}" + echo "neededReboot=0" + fi + else + echo "# Skipping UASP deactivation ... cmdlineExists(${cmdlineExists}) hddAdapterUSB(${hddAdapterUSB}) hddAdapterUSAP(${hddAdapterUSAP})" + echo "neededReboot=0" + fi + + exit 0 +fi + echo "error='unkown command'" exit 1 diff --git a/home.admin/XXdebugLogs.sh b/home.admin/config.scripts/blitz.debug.sh similarity index 77% rename from home.admin/XXdebugLogs.sh rename to home.admin/config.scripts/blitz.debug.sh index 6d15acb94..7e44897d8 100755 --- a/home.admin/XXdebugLogs.sh +++ b/home.admin/config.scripts/blitz.debug.sh @@ -39,10 +39,22 @@ echo "chainnetwork: ${network} / ${chain}" uptime echo "" +echo "*** SETUPPHASE / BOOTSTRAP ***" +echo "see logs: cat /home/admin/raspiblitz.log" +echo "setupPhase--> ${setupPhase}" +echo "state--> ${state}" +if [ "${setupPhase}" != "done" ]; then + sudo tail -n 20 /home/admin/raspiblitz.log +fi +echo "" + +echo "*** BACKGROUNDSERVICE ***" +echo "to monitor Background service call: sudo journalctl -f -u background" +echo "" + echo "*** BLOCKCHAIN SYSTEMD STATUS ***" sudo systemctl status ${network}d -n2 --no-pager echo "" - echo "*** LAST BLOCKCHAIN ERROR LOGS ***" echo "sudo journalctl -u ${network}d -b --no-pager -n8" sudo journalctl -u ${network}d -b --no-pager -n8 @@ -60,7 +72,6 @@ echo "" echo "*** LND SYSTEMD STATUS ***" sudo systemctl status lnd -n2 --no-pager echo "" - echo "*** LAST LND ERROR LOGS ***" echo "sudo journalctl -u lnd -b --no-pager -n12" sudo journalctl -u lnd -b --no-pager -n12 @@ -71,6 +82,14 @@ echo "sudo tail -n 30 /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log" sudo tail -n 30 /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log echo "" +echo "*** C-LIGHTNING SYSTEMD STATUS ***" +sudo systemctl status lightningd -n2 --no-pager +echo "" +echo "*** LAST 30 C-LIGHTNING INFO LOGS ***" +echo "sudo tail -n 30 /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log" +sudo tail -n 30 /home/bitcoin/.lightning/${network}/cl.log +echo "" + echo "*** NGINX SYSTEMD STATUS ***" sudo systemctl status nginx -n2 --no-pager echo "" @@ -82,7 +101,18 @@ echo "--> CHECK CONFIG: sudo nginx -t" sudo nginx -t echo "" -if [ "${touchscreen}" = "0" ]; then +echo "*** BLITZAPI SYSTEMD STATUS ***" +sudo systemctl status blitzapi -n2 --no-pager +echo "" + +echo "*** LAST BLITZAPI LOGS ***" +echo "sudo journalctl -u blitzapi -b --no-pager -n20" +sudo journalctl -u nginx -b --no-pager -n20 +echo "--> CHECK CONFIG: sudo nginx -t" +sudo nginx -t +echo "" + +if [ "${touchscreen}" = "" ] || [ "${touchscreen}" = "0" ]; then echo "- TOUCHSCREEN is OFF by config" else echo "" @@ -92,7 +122,7 @@ else echo "" fi -if [ "${loop}" = "off" ]; then +if [ "${loop}" = "" ] || [ "${loop}" = "off" ]; then echo "- Loop is OFF by config" else echo "" @@ -102,7 +132,7 @@ else echo "" fi -if [ "${rtlWebinterface}" = "off" ]; then +if [ "${rtlWebinterface}" = "" ] || [ "${rtlWebinterface}" = "off" ]; then echo "- RTL is OFF by config" else echo "" @@ -112,7 +142,7 @@ else echo "" fi -if [ "${ElectRS}" = "off" ]; then +if [ "${ElectRS}" = "" ] || [ "${ElectRS}" = "off" ]; then echo "- Electrum Rust Server is OFF by config" else echo "" @@ -125,7 +155,7 @@ else echo "" fi -if [ "${lit}" = "off" ]; then +if [ "${lit}" = "" ] || [ "${lit}" = "off" ]; then echo "- LIT is OFF by config" else echo "" @@ -135,7 +165,7 @@ else echo "" fi -if [ "${BTCPayServer}" = "off" ]; then +if [ "${BTCPayServer}" = "" ] || [ "${BTCPayServer}" = "off" ]; then echo "- BTCPayServer is OFF by config" else echo "" @@ -145,7 +175,7 @@ else echo "" fi -if [ "${LNBits}" = "off" ]; then +if [ "${LNBits}" = "" ] || [ "${LNBits}" = "off" ]; then echo "- LNbits is OFF by config" else echo "" @@ -155,7 +185,7 @@ else echo "" fi -if [ "${thunderhub}" = "off" ]; then +if [ "${thunderhub}" = "" ] || [ "${thunderhub}" = "off" ]; then echo "- Thunderhub is OFF by config" else echo "" @@ -165,7 +195,7 @@ else echo "" fi -if [ "${specter}" = "off" ]; then +if [ "${specter}" = "" ] || [ "${specter}" = "off" ]; then echo "- SPECTER is OFF by config" else echo "" @@ -175,7 +205,7 @@ else echo "" fi -if [ "${sphinxrelay}" = "off" ]; then +if [ "${sphinxrelay}" = "" ] || [ "${sphinxrelay}" = "off" ]; then echo "- SPHINX is OFF by config" else echo "" @@ -216,5 +246,5 @@ 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:" -echo "/home/admin/XXdebugLogs.sh | nc termbin.com 9999" +echo "debug | nc termbin.com 9999" echo "" diff --git a/home.admin/XXsyncScripts.sh b/home.admin/config.scripts/blitz.github.sh similarity index 95% rename from home.admin/XXsyncScripts.sh rename to home.admin/config.scripts/blitz.github.sh index 1e537d225..f010bfca8 100755 --- a/home.admin/XXsyncScripts.sh +++ b/home.admin/config.scripts/blitz.github.sh @@ -158,14 +158,17 @@ fi echo "# COPYING from GIT-Directory to /home/admin/" sudo rm -r /home/admin/config.scripts -sudo -u admin cp -r -f /home/admin/raspiblitz/home.admin/*.* /home/admin -sudo -u admin cp -r -f /home/admin/raspiblitz/home.admin/assets /home/admin -sudo -u admin chmod +x /home/admin/*.sh -sudo -u admin chmod +x /home/admin/*.py -sudo -u admin chmod +x /home/admin/config.scripts/*.sh -sudo -u admin chmod +x /home/admin/config.scripts/*.py +sudo -u admin cp -r -f /home/admin/raspiblitz/home.admin/* /home/admin +sudo -u admin chmod -R +x /home/admin/config.scripts +sudo -u admin chmod -R +x /home/admin/setup.scripts echo "# ******************************************" +echo "# Syncing Webcontent .." +if [ -d /var/www/public ]; then + sudo cp -a /home/admin/assets/nginx/www_public/* /var/www/public + sudo chown www-data:www-data /var/www/public +fi + echo "# Checking if the content of BlitzPy changed .." checkSumBlitzPyAfter=$(find /home/admin/raspiblitz/home.admin/BlitzPy -type f -exec md5sum {} \; | md5sum) echo "# checkSumBlitzPyBefore = ${checkSumBlitzPyBefore}" diff --git a/home.admin/config.scripts/blitz.hardware.sh b/home.admin/config.scripts/blitz.hardware.sh new file mode 100644 index 000000000..dbc30baab --- /dev/null +++ b/home.admin/config.scripts/blitz.hardware.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +# command info +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then + echo "Hardware Tool Script" + echo "blitz.hardware.sh [status]" + exit 1 +fi + +######################## +# GATHER HARDWARE INFO +####################### + +# detect known SBCs +board="" +isRaspberryPi4=$(cat /proc/device-tree/model | grep -c "Raspberry Pi 4") +if [ "${isRaspberryPi4}" == "1" ]; then + board="rp4" +fi + +# get how many RAM (in MB) +ramMB=$(awk '/MemTotal/ {printf( "%d\n", $2 / 1024 )}' /proc/meminfo) + +# get how many RAM (in GB - approx) +ramGB=$(awk '/MemTotal/ {printf( "%d\n", $2 / 950000 )}' /proc/meminfo) + +######################## +# OUTPUT HARDWARE INFO +####################### + +if [ "$1" = "status" ]; then + echo "board='${board}'" + echo "ramMB=${ramMB}" + echo "ramGB=${ramGB}" +fi diff --git a/home.admin/config.scripts/blitz.migration.sh b/home.admin/config.scripts/blitz.migration.sh index dd98c15b2..9d7115628 100755 --- a/home.admin/config.scripts/blitz.migration.sh +++ b/home.admin/config.scripts/blitz.migration.sh @@ -1,10 +1,8 @@ #!/bin/bash -# TODO: check if services/apps are running and stop all ... or let thet to outside? - if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo "# managing the RaspiBlitz data - import, export, backup." - echo "# blitz.migration.sh [status|export|import|export-gui|import-gui|migration-umbrel|migration-mynode]" + echo "# blitz.migration.sh [export|import|export-gui|migration-umbrel|migration-mynode]" echo "error='missing parameters'" exit 1 fi @@ -22,25 +20,23 @@ fi # check if data drive is mounted - other wise cannot operate isMounted=$(sudo df | grep -c /mnt/hdd) -# gathering system info -isBTRFS=$(lsblk -o FSTYPE,MOUNTPOINT | grep /mnt/hdd | awk '$1=$1' | cut -d " " -f 1 | grep -c btrfs) - # set place where zipped TAR file gets stored -defaultZipPath="/mnt/hdd/temp" +defaultUploadPath="/mnt/hdd/temp/migration" # get local ip source <(/home/admin/config.scripts/internet.sh status local) # SCP download and upload links -scpDownloadUnix="scp -r 'bitcoin@${localip}:${defaultZipPath}/raspiblitz-*.tar.gz' ./" -scpDownloadWin="scp -r bitcoin@${localip}:${defaultZipPath}/raspiblitz-*.tar.gz ." -scpUploadUnix="scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultZipPath}" -scpUploadWin="scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultZipPath}" +scpDownloadUnix="scp -r 'bitcoin@${localip}:${defaultUploadPath}/raspiblitz-*.tar.gz' ./" +scpDownloadWin="scp -r bitcoin@${localip}:${defaultUploadPath}/raspiblitz-*.tar.gz ." +scpUploadUnix="scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultUploadPath}" +scpUploadWin="scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultUploadPath}" # output status data & exit if [ "$1" = "status" ]; then echo "# RASPIBLITZ Data Import & Export" - echo "isBTRFS=${isBTRFS}" + echo "localip=\"${localip}\"" + echo "defaultUploadPath=\"${defaultUploadPath}\"" echo "scpDownloadUnix=\"${scpDownloadUnix}\"" echo "scpUploadUnix=\"${scpUploadUnix}\"" echo "scpDownloadWin=\"${scpDownloadWin}\"" @@ -310,23 +306,23 @@ if [ "$1" = "export" ]; then # zip it echo "# Building the Export File (this can take some time) .." - sudo tar -zcvf ${defaultZipPath}/raspiblitz-export-temp.tar.gz -X ~/.exclude.temp /mnt/hdd 1>~/.include.temp 2>/dev/null + sudo tar -zcvf ${defaultUploadPath}/raspiblitz-export-temp.tar.gz -X ~/.exclude.temp /mnt/hdd 1>~/.include.temp 2>/dev/null # get md5 checksum echo "# Building checksum (can take also a while) ..." - md5checksum=$(md5sum ${defaultZipPath}/raspiblitz-export-temp.tar.gz | head -n1 | cut -d " " -f1) + md5checksum=$(md5sum ${defaultUploadPath}/raspiblitz-export-temp.tar.gz | head -n1 | cut -d " " -f1) echo "md5checksum=${md5checksum}" # get byte size - bytesize=$(wc -c ${defaultZipPath}/raspiblitz-export-temp.tar.gz | cut -d " " -f 1) + bytesize=$(wc -c ${defaultUploadPath}/raspiblitz-export-temp.tar.gz | cut -d " " -f 1) echo "bytesize=${bytesize}" # final renaming name="raspiblitz${blitzname}${datestamp}-${md5checksum}.tar.gz" - echo "exportpath='${defaultZipPath}'" + echo "exportpath='${defaultUploadPath}'" echo "filename='${name}'" - sudo mv ${defaultZipPath}/raspiblitz-export-temp.tar.gz ${defaultZipPath}/${name} - sudo chown bitcoin:bitcoin ${defaultZipPath}/${name} + sudo mv ${defaultUploadPath}/raspiblitz-export-temp.tar.gz ${defaultUploadPath}/${name} + sudo chown bitcoin:bitcoin ${defaultUploadPath}/${name} # delete temp files rm ~/.exclude.temp @@ -341,7 +337,7 @@ fi if [ "$1" = "export-gui" ]; then # cleaning old migration files from blitz - sudo rm ${defaultZipPath}/*.tar.gz 2>/dev/null + sudo rm ${defaultUploadPath}/*.tar.gz 2>/dev/null # stopping lnd / bitcoin echo "--> stopping services ..." @@ -351,7 +347,7 @@ if [ "$1" = "export-gui" ]; then # create new migration file clear echo "--> creating blitz migration file ... (please wait)" - source <(sudo /home/admin/config.scripts/blitz.migration.sh "export") + source <(sudo /home/admin/config.scripts/blitz.migration.sh export) if [ ${#filename} -eq 0 ]; then echo "# FAIL: was not able to create migration file" exit 0 @@ -381,7 +377,7 @@ if [ "$1" = "export-gui" ]; then read key echo "Shutting down ...." sleep 4 - /home/admin/XXshutdown.sh + /home/admin/config.scripts/blitz.shutdown.sh exit 0 fi @@ -391,71 +387,29 @@ fi if [ "$1" = "import" ]; then - # check second parameter for path and/or filename of import - importFile="${defaultZipPath}/raspiblitz-*.tar.gz" - if [ ${#2} -gt 0 ]; then - # check if and/or filename of import - containsPath=$(echo $2 | grep -c '/') - if [ ${containsPath} -gt 0 ]; then - startsOnPath=$(echo $2 | grep -c '^/') - if [ ${startsOnPath} -eq 0 ]; then - echo "# needs to be an absolut path: ${2}" - echo "error='invalid path'" - exit 1 - else - if [ -d "$2" ]; then - echo "# using path from parameter to search for import" - endsOnPath=$(echo $2 | grep -c '/$') - if [ ${endsOnPath} -eq 1 ]; then - importFile="${2}raspiblitz-*.tar.gz" - else - importFile="${2}/raspiblitz-*.tar.gz" - fi - else - echo "# using path+file from parameter for import" - importFile=$2 - fi - fi - else - # is just filename - to use with default path - echo "# using file from parameter for import" - importFile="${defaultZipPath}/${2}" - fi - fi - - # checking if file exists and unique - echo "# checking for file with: ${importFile}" - countZips=$(sudo ls ${importFile} 2>/dev/null | grep -c '.tar.gz') - if [ ${countZips} -eq 0 ]; then - echo "# can just find file when ends on .tar.gz and exists" - echo "scpUploadUnix=\"${scpUploadUnix}\"" - echo "scpUploadWin=\"${scpUploadWin}\"" - echo "error='file not found'" + # BACKGROUND: + # the migration import is only called during setup phase - assume a prepared but clean HDD + + # 2nd PARAMETER: file to import (expect that the file was valid checked from calling script) + importFile=$2 + if [ "${importFile}" == "" ]; then + echo "error='filename missing'" exit 1 - elif [ ${countZips} -eq 1 ]; then - importFile=$(sudo ls ${importFile}) - else - echo "# Multiple files found. Not sure which to use." - echo "# Please use absolut-path+file as second parameter." - echo "error='file not unique'" + fi + fileExists=$(sudo ls ${importFile} 2>/dev/null | grep -c "${importFile}") + if [ "${fileExists}" != "1" ]; then + echo "error='filename not found'" exit 1 fi echo "importFile='${importFile}'" - echo "# Validating Checksum (can take some time) .." - md5checksum=$(md5sum ${importFile} | head -n1 | cut -d " " -f1) - isCorrect=$(echo ${importFile} | grep -c ${md5checksum}) - if [ ${isCorrect} -eq 1 ]; then - echo "# OK -> checksum looks good: ${md5checksum}" - else - echo "# FAIL -> Checksum not correct: ${md5checksum}" - echo "# Maybe transfer/upload failed?" - echo "error='bad checksum'" - exit 1 - fi - echo "# Importing (overwrite) (can take some time) .." sudo tar -xf ${importFile} -C / + if [ "$?" != "0" ]; then + echo "error='non zero exit state of unzipping migration file'" + echo "# reboot system ... HDD will offer fresh formating" + exit 1 + fi # copy bitcoin/litecoin data backups back to orgplaces (if part of backup) if [ -d "/mnt/hdd/backup_bitcoin" ]; then @@ -475,197 +429,18 @@ if [ "$1" = "import" ]; then sudo chown bitcoin:bitcoin -R /mnt/storage/litecoin 2>/dev/null fi - echo "# OK done - you may now want to:" - echo "# make sure that HDD is not registered in /etc/fstab & reboot" - echo "# to kickstart recovering system based in imported data" - - exit 0 -fi - -if [ "$1" = "import-gui" ]; then - - # get info about HDD - echo "# Gathering HDD/SSD info ..." - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) - - # make sure HDD/SSD is not mounted - # because importing migration just works during early setup - if [ ${isMounted} -eq 1 ]; then - echo "FAIL --> cannot import migration data when HDD/SSD is mounted" + # check migration + raspiblitzConfExists=$(sudo ls /mnt/hdd/raspiblitz.conf | grep -c "raspiblitz.conf") + if [ "${raspiblitzConfExists}" != "1" ]; then + echo "error='no raspiblitz.conf after unzip migration file'" + echo "# reboot system ... HDD will offer fresh formating" exit 1 fi - # make sure a HDD/SSD is connected - if [ ${#hddCandidate} -eq 0 ]; then - echo "FAIL --> there is no HDD/SSD connected to migrate data to" - exit 1 - fi - - # check if HDD/SSD is big enough - if [ ${hddGigaBytes} -lt 120 ]; then - echo "FAIL --> connected HDD/SSD is too small" - exit 1 - fi - - # ask format for new HDD/SSD - OPTIONS=() - # check if HDD/SSD contains Bitcoin Blockchain - if [ "${hddBlocksBitcoin}" == "1" ]; then - OPTIONS+=(KEEP "Dont format & use Blockchain") - fi - OPTIONS+=(EXT4 "Ext4 & 1 Partition (default)") - OPTIONS+=(BTRFS "BTRFS & 3 Partitions (experimental)") - - useBlockchain=0 - hddFormat=None - CHOICE=$(whiptail --clear --title "Formatting ${hddCandidate}" --menu "" 10 52 3 "${OPTIONS[@]}" 2>&1 >/dev/tty) - clear - case $CHOICE in - EXT4) - hddFormat=ext4 - echo "EXT4 FORMAT -->" - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh format ext4 ${hddPartitionCandidate}) - if [ ${#error} -gt 0 ]; then - echo "FAIL --> ${error}" - exit 1 - fi - ;; - BTRFS) - hddFormat=btrfs - echo "BTRFS FORMAT" - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh format btrfs ${hddCandidate}) - if [ ${#error} -gt 0 ]; then - echo "FAIL --> ${error}" - exit 1 - fi - ;; - KEEP) - echo "Keep HDD & Blockchain" - useBlockchain=1 - ;; - *) - echo "CANCEL" - exit 0 - ;; - esac - - if [ ${useBlockchain} -eq 1 ]; then - if [ ${isBTRFS} -eq 1 ]; then - hddFormat=btrfs - else - hddFormat=ext4 - fi - fi - - # now temp mount the HDD/SSD - if [ "$hddFormat" == "btrfs" ]; then - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddCandidate}) - else - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddPartitionCandidate}) - fi - if [ ${#error} -gt 0 ]; then - echo "FAIL: Was not able to temp mount the HDD/SSD --> ${error}" - exit 1 - fi - - # make sure all directories betare propper linked - sudo /home/admin/config.scripts/blitz.datadrive.sh link - - # make sure that temp directory exists and can be written by admin - sudo mkdir -p ${defaultZipPath} - sudo chmod 777 -R ${defaultZipPath} - - clear - echo - echo "*****************************" - echo "* UPLOAD THE MIGRATION FILE *" - echo "*****************************" - echo "If you have a migration file on your laptop you can now" - echo "upload it and restore on the new HDD/SSD." - echo - echo "ON YOUR LAPTOP open a new terminal and change into" - echo "the directory where your migration file is and" - echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" - echo "scp -r ./raspiblitz-*.tar.gz admin@${localip}:${defaultZipPath}" - echo "" - echo "Use password 'raspiblitz' to authenticate file transfer." - echo "PRESS ENTER when upload is done." - read key - - countZips=$(sudo ls ${defaultZipPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz-') - - # in case no upload found - if [ ${countZips} -eq 0 ]; then - echo - echo "FAIL: Was not able to detect uploaded file in ${defaultZipPath}" - echo "error='no file found'" - sleep 3 - exit 1 - fi - - # in case of multiple files - if [ ${countZips} -gt 1 ]; then - echo - echo "# FAIL: Multiple possible files detected in ${defaultZipPath}" - echo "error='multiple files'" - sleep 3 - exit 1 - fi - - # restore upload - echo - echo "OK: Upload found in ${defaultZipPath} - restoring data ... (please wait)" - source <(sudo /home/admin/config.scripts/blitz.migration.sh "import") - if [ ${#error} -gt 0 ]; then - echo - echo "# FAIL: Was not able to restore data" - echo "error='${error}'" - sleep 3 - exit 1 - fi - - # check & load config - source /mnt/hdd/raspiblitz.conf - if [ ${#network} -eq 0 ]; then - echo - echo "FAIL: No raspiblitz.conf found afer migration restore" - echo "error='migration contains no raspiblitz.conf'" - sleep 3 - exit 1 - fi - - echo - echo "OK: Migration data was imported" - echo "PRESS ENTER" - read key - - # Copy from other computer is only option for Bitcoin - if [ "${network}" == "bitcoin" ] && [ ${useBlockchain} -eq 0 ]; then - OPTIONS=(SYNC "Re-Sync & Validate Blockchain" \ - COPY "Copy over LAN from other Computer" - ) - CHOICE=$(whiptail --clear --title "How to get Blockchain?" --menu "" 9 52 2 "${OPTIONS[@]}" 2>&1 >/dev/tty) - clear - case $CHOICE in - COPY) - echo "Copy Blockchain Data -->" - /home/admin/50copyHDD.sh stop-after-script - ;; - esac - fi - - # if there is no blockchain yet - fallback to syncing - if [ $(sudo ls /mnt/hdd/bitcoin/ 2>/dev/null | grep -c blocks) -eq 0 ]; then - echo "Setting Blockchain Data to resync ..." - sudo -u bitcoin mkdir /mnt/hdd/${network}/blocks 2>/dev/null - sudo -u bitcoin mkdir /mnt/hdd/${network}/chainstate 2>/dev/null - sudo -u bitcoin touch /mnt/hdd/${network}/blocks/.selfsync - fi - - echo "--> Now rebooting and kicking your node in to recovery/update mode ..." - sudo shutdown -r now + # correcting all user rights on data will be done by provisioning process + echo "# OK import done - provisioning process needed" exit 0 fi echo "error='unkown command'" -exit 1 +exit 1 \ No newline at end of file diff --git a/home.admin/config.scripts/blitz.mnemonic.py b/home.admin/config.scripts/blitz.mnemonic.py new file mode 100755 index 000000000..57529659f --- /dev/null +++ b/home.admin/config.scripts/blitz.mnemonic.py @@ -0,0 +1,63 @@ +#!/usr/bin/python3 + +import sys +from mnemonic import Mnemonic + +# display config script info +if len(sys.argv) <= 1 or sys.argv[1] == "-h" or sys.argv[1] == "help": + print("tool for seed words") + print("blitz.mnemonic.py generate") + print("blitz.mnemonic.py test \"[SEEDWORDS-SPACE-SEPERATED]\"") + sys.exit(1) + +def dump(obj): + for attr in dir(obj): + print("obj.%s = %r" % (attr, getattr(obj, attr))) + +####################### +# GENERATE SEED WORDS +####################### +def generate(): + + mnemo = Mnemonic("english") + seedwords = mnemo.generate(strength=256) + + print("seedwords='" + seedwords + "'") + + # add a 6x4 formatted version to the output + wordlist = list(seedwords.split(" ")) + seed_words_6x4 = "" + for i in range(0, len(wordlist)): + if i % 6 == 0 and i != 0: + seed_words_6x4 = seed_words_6x4 + "\n" + single_word = str(i + 1) + ":" + wordlist[i] + while len(single_word) < 12: + single_word = single_word + " " + seed_words_6x4 = seed_words_6x4 + single_word + print("seedwords6x4='" + seed_words_6x4 + "'") + + +####################### +# TEST SEED WORDS +####################### +def test(words): + + mnemo = Mnemonic("english") + if mnemo.check(words): + print("valid=1") + else: + print("valid=0") + +def main(): + if sys.argv[1] == "generate": + generate() + + elif sys.argv[1] == "test": + test(sys.argv[2]) + + else: + # UNKNOWN PARAMETER + print("error='unknown parameter'") + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/home.admin/config.scripts/blitz.notify.sh b/home.admin/config.scripts/blitz.notify.sh index d474641a5..9eb1616de 100755 --- a/home.admin/config.scripts/blitz.notify.sh +++ b/home.admin/config.scripts/blitz.notify.sh @@ -144,15 +144,15 @@ if [ "$1" = "send" ]; then # now parse settings from config and use to send the message if [ "${notifyMethod}" = "ext" ]; then - /usr/bin/python3 /home/admin/XXsendNotification.py ext ${notifyExtCmd} "$2" + /usr/bin/python3 /home/admin/config.scripts/blitz.sendnotification.py ext ${notifyExtCmd} "$2" elif [ "${notifyMethod}" = "mail" ]; then if [ "${notifyMailEncrypt}" = "on" ]; then - /usr/bin/python3 /home/admin/XXsendNotification.py mail --from-address "${notifyMailFromAddress}" --from-name "${notifyMailFromName}" --cert "${notifyMailToCert}" --encrypt ${notifyMailTo} "${@:3}" "$2" + /usr/bin/python3 /home/admin/config.scripts/blitz.sendnotification.py mail --from-address "${notifyMailFromAddress}" --from-name "${notifyMailFromName}" --cert "${notifyMailToCert}" --encrypt ${notifyMailTo} "${@:3}" "$2" else - /usr/bin/python3 /home/admin/XXsendNotification.py mail --from-address "${notifyMailFromAddress}" --from-name "${notifyMailFromName}" "${notifyMailTo}" "${@:3}" "$2" + /usr/bin/python3 /home/admin/config.scripts/blitz.sendnotification.py mail --from-address "${notifyMailFromAddress}" --from-name "${notifyMailFromName}" "${notifyMailTo}" "${@:3}" "$2" fi elif [ "${notifyMethod}" = "slack" ]; then - /usr/bin/python3 /home/admin/XXsendNotification.py slack -h "$2" + /usr/bin/python3 /home/admin/config.scripts/blitz.sendnotification.py slack -h "$2" else echo "unknown notification method - check /mnt/hdd/raspiblitz.conf" fi diff --git a/home.admin/XXprepareRelease.sh b/home.admin/config.scripts/blitz.preparerelease.sh similarity index 100% rename from home.admin/XXprepareRelease.sh rename to home.admin/config.scripts/blitz.preparerelease.sh diff --git a/home.admin/XXsendNotification.py b/home.admin/config.scripts/blitz.sendnotification.py similarity index 100% rename from home.admin/XXsendNotification.py rename to home.admin/config.scripts/blitz.sendnotification.py diff --git a/home.admin/config.scripts/blitz.setpassword.sh b/home.admin/config.scripts/blitz.setpassword.sh index 9e7c6f14d..137f9867c 100755 --- a/home.admin/config.scripts/blitz.setpassword.sh +++ b/home.admin/config.scripts/blitz.setpassword.sh @@ -4,7 +4,7 @@ if [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo "small config script to set a passwords A,B,C & D" echo "blitz.setpassword.sh a [?newpassword] " -echo "blitz.setpassword.sh b [?newpassword] " + echo "blitz.setpassword.sh b [?newpassword] " echo "blitz.setpassword.sh c [?oldpassword] [?newpassword] " echo "or just as a password enter dialog (result as file)" echo "blitz.setpassword.sh [x] [text] [result-file] [?empty-allowed]" @@ -64,14 +64,11 @@ if [ ${#abcd} -eq 0 ]; then abcd='d'; ;; *) - exit 1 + exit 0 ;; esac fi -echo "Changing Password ${abcd} ..." -echo "" - ############################ # PASSWORD A if [ "${abcd}" = "a" ]; then @@ -89,7 +86,7 @@ if [ "${abcd}" = "a" ]; then echo "CANCEL not possible" sleep 2 else - exit 1 + exit 0 fi fi @@ -100,7 +97,7 @@ if [ "${abcd}" = "a" ]; then echo "CANCEL not possible" sleep 2 else - exit 1 + exit 0 fi fi @@ -108,14 +105,14 @@ if [ "${abcd}" = "a" ]; then if [ "${password1}" != "${password2}" ]; then dialog --backtitle "RaspiBlitz - Setup" --msgbox "FAIL -> Passwords dont Match\nPlease try again ..." 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh a - exit 1 + exit 0 fi # password zero if [ ${#password1} -eq 0 ]; then dialog --backtitle "RaspiBlitz - Setup" --msgbox "FAIL -> Password cannot be empty\nPlease try again ..." 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh a - exit 1 + exit 0 fi # check that password does not contain bad characters @@ -123,14 +120,14 @@ if [ "${abcd}" = "a" ]; then if [ ${#clearedResult} != ${#password1} ] || [ ${#clearedResult} -eq 0 ]; then dialog --backtitle "RaspiBlitz - Setup" --msgbox "FAIL -> Contains bad characters (spaces, special chars)\nPlease try again ..." 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh a - exit 1 + exit 0 fi # password longer than 8 if [ ${#password1} -lt 8 ]; then dialog --backtitle "RaspiBlitz - Setup" --msgbox "FAIL -> Password length under 8\nPlease try again ..." 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh a - exit 1 + exit 0 fi # use entred password now as parameter @@ -165,7 +162,7 @@ elif [ "${abcd}" = "b" ]; then echo "CANCEL not possible" sleep 2 else - exit 1 + exit 0 fi fi @@ -176,7 +173,7 @@ elif [ "${abcd}" = "b" ]; then echo "CANCEL not possible" sleep 2 else - exit 1 + exit 0 fi fi @@ -184,14 +181,14 @@ elif [ "${abcd}" = "b" ]; then if [ "${password1}" != "${password2}" ]; then dialog --backtitle "RaspiBlitz - Setup" --msgbox "FAIL -> Passwords dont Match\nPlease try again ..." 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh b - exit 1 + exit 0 fi # password zero if [ ${#password1} -eq 0 ]; then dialog --backtitle "RaspiBlitz - Setup" --msgbox "FAIL -> Password cannot be empty\nPlease try again ..." 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh b - exit 1 + exit 0 fi # check that password does not contain bad characters @@ -199,14 +196,14 @@ elif [ "${abcd}" = "b" ]; then if [ ${#clearedResult} != ${#password1} ] || [ ${#clearedResult} -eq 0 ]; then dialog --backtitle "RaspiBlitz - Setup" --msgbox "FAIL -> Contains bad characters (spaces, special chars)\nPlease try again ..." 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh b - exit 1 + exit 0 fi # password longer than 8 if [ ${#password1} -lt 8 ]; then dialog --backtitle "RaspiBlitz - Setup" --msgbox "FAIL -> Password length under 8\nPlease try again ..." 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh b - exit 1 + exit 0 fi # use entred password now as parameter @@ -333,7 +330,7 @@ elif [ "${abcd}" = "c" ]; then if [ ${#newPassword} -lt 8 ]; then dialog --backtitle "RaspiBlitz - Setup" --msgbox "FAIL -> Password length under 8" 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh c ${oldPassword} - exit 1 + exit 0 fi # ask user to retype new password c @@ -368,7 +365,7 @@ elif [ "${abcd}" = "c" ]; then dialog --backtitle "RaspiBlitz - Setup" --msgbox "FAIL -> Was not able to change password\n\n${err}\n${errMore}" 10 52 clear echo "# FAIL: Was not able to change password" - exit 1 + exit 0 fi # old manual way @@ -415,7 +412,7 @@ elif [ "${abcd}" = "x" ]; then if [ "${password1}" != "${password2}" ]; then dialog --backtitle "RaspiBlitz" --msgbox "FAIL -> Passwords dont Match\nPlease try again ..." 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh x "$2" "$3" "$4" - exit 1 + exit 0 fi if [ ${emptyAllowed} -eq 0 ]; then @@ -424,7 +421,7 @@ elif [ "${abcd}" = "x" ]; then if [ ${#password1} -eq 0 ]; then dialog --backtitle "RaspiBlitz" --msgbox "FAIL -> Password cannot be empty\nPlease try again ..." 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh x "$2" "$3" "$4" - exit 1 + exit 0 fi # check that password does not contain bad characters @@ -432,14 +429,14 @@ elif [ "${abcd}" = "x" ]; then if [ ${#clearedResult} != ${#password1} ] || [ ${#clearedResult} -eq 0 ]; then dialog --backtitle "RaspiBlitz" --msgbox "FAIL -> Contains bad characters (spaces, special chars)\nPlease try again ..." 6 62 sudo /home/admin/config.scripts/blitz.setpassword.sh x "$2" "$3" "$4" - exit 1 + exit 0 fi # password longer than 8 if [ ${#password1} -lt 8 ]; then dialog --backtitle "RaspiBlitz" --msgbox "FAIL -> Password length under 8\nPlease try again ..." 6 52 sudo /home/admin/config.scripts/blitz.setpassword.sh x "$2" "$3" "$4" - exit 1 + exit 0 fi fi @@ -450,13 +447,13 @@ elif [ "${abcd}" = "x" ]; then # everything else else echo "FAIL: there is no password '${abcd}' (reminder: use lower case)" - exit 1 + exit 0 fi # when started with menu ... reboot when done if [ "${reboot}" == "1" ]; then echo "Now rebooting to activate changes ..." - sudo /home/admin/XXshutdown.sh reboot + sudo /home/admin/config.scripts/blitz.shutdown.sh reboot else echo "..." fi diff --git a/home.admin/XXshutdown.sh b/home.admin/config.scripts/blitz.shutdown.sh similarity index 91% rename from home.admin/XXshutdown.sh rename to home.admin/config.scripts/blitz.shutdown.sh index 9c172e081..7202e3b96 100755 --- a/home.admin/XXshutdown.sh +++ b/home.admin/config.scripts/blitz.shutdown.sh @@ -1,5 +1,5 @@ #!/bin/bash -# for reboot call: sudo /home/admin/XXshutdown.sh reboot +# for reboot call: sudo /home/admin/config.scripts/blitz.shutdown.sh reboot # use this script instead of dirct shutdown command to: # 1) give UI the info that a reboot/shutdown is now happening @@ -38,8 +38,9 @@ echo "stop electrs - please wait .." sudo systemctl stop electrs 2>/dev/null # stopping lnd -echo "stop lnd - please wait .." +echo "stop lightning - please wait .." sudo systemctl stop lnd 2>/dev/null +sudo systemctl stop lightningd 2>/dev/null # stopping bitcoin (thru cli) echo "stop ${network}d (1) - please wait .." diff --git a/home.admin/config.scripts/blitz.statusscan.sh b/home.admin/config.scripts/blitz.statusscan.sh index bb1534c7d..789299e30 100755 --- a/home.admin/config.scripts/blitz.statusscan.sh +++ b/home.admin/config.scripts/blitz.statusscan.sh @@ -1,7 +1,16 @@ #!/bin/bash source /home/admin/raspiblitz.info -source /mnt/hdd/raspiblitz.conf +source /mnt/hdd/raspiblitz.conf 2>/dev/null + +# LNTYPE is lnd | cln +if [ $# -gt 0 ];then + LNTYPE=$1 +else + LNTYPE=lnd +fi + +source <(/home/admin/config.scripts/network.aliases.sh getvars $LNTYPE ${chain}net) # command info if [ "$1" = "-h" ] || [ "$1" = "-help" ]; then @@ -17,7 +26,7 @@ sudo mkdir /mnt/hdd/temp 2>/dev/null sudo chmod 777 -R /mnt/hdd/temp 2>/dev/null # localIP -localip=$(ip addr | grep 'state UP' -A2 | egrep -v 'docker0|veth' | egrep -i '(*[eth|ens|enp|eno|wlan|wlp][0-9]$)' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') +localip=$(hostname -I | awk '{print $1}') echo "localIP='${localip}'" # temp - no measurement in a VM @@ -45,7 +54,7 @@ echo "bitcoinActive=${bitcoinRunning}" if [ ${bitcoinRunning} -eq 1 ]; then # get blockchain info - sudo -u bitcoin ${network}-cli -datadir=/home/bitcoin/.${network} getblockchaininfo 1>/mnt/hdd/temp/.bitcoind.out 2>/mnt/hdd/temp/.bitcoind.error + $bitcoincli_alias getblockchaininfo 1>/mnt/hdd/temp/.bitcoind.out 2>/mnt/hdd/temp/.bitcoind.error # check if error on request blockchaininfo=$(cat /mnt/hdd/temp/.bitcoind.out 2>/dev/null) bitcoinError=$(cat /mnt/hdd/temp/.bitcoind.error 2>/dev/null) @@ -57,6 +66,13 @@ if [ ${bitcoinRunning} -eq 1 ]; then echo "bitcoinErrorFull='${bitcoinErrorFull}'" else + ################################### + # Get data from blockchain network + ################################### + + source <(sudo -u bitcoin /home/admin/config.scripts/network.monitor.sh peer-status) + echo "blockchainPeers=${peers}" + ############################## # Get data from blockchaininfo ############################## @@ -120,15 +136,15 @@ startcountLightning=$(cat /home/admin/systemd.lightning.log 2>/dev/null | grep - echo "startcountLightning=${startcountLightning}" # is LND running -lndRunning=$(systemctl status lnd.service 2>/dev/null | grep -c running) +lndRunning=$(systemctl status ${netprefix}lnd.service 2>/dev/null | grep -c running) echo "lndActive=${lndRunning}" if [ ${lndRunning} -eq 1 ]; then # get LND info lndRPCReady=1 - lndinfo=$(sudo -u bitcoin lncli --chain=${network} --network=${chain}net getinfo 2>/mnt/hdd/temp/.lnd.error) - + lndinfo=$($lncli_alias getinfo 2>/mnt/hdd/temp/.lnd.error) + # check if error on request lndErrorFull=$(cat /mnt/hdd/temp/.lnd.error 2>/dev/null) lndErrorShort='' @@ -252,6 +268,22 @@ if [ ${lndRunning} -eq 1 ]; then fi +# is CLN running +clnRunning=$(systemctl status ${netprefix}lightningd.service 2>/dev/null | grep -c running) +echo "clnActive=${clnRunning}" +if [ ${clnRunning} -eq 1 ]; then + clnInfo=$(sudo -u bitcoin lightning-cli getinfo) + clnBlockHeight=$(echo "${clnInfo}" | jq -r '.blockheight' | tr -cd '[[:digit:]]') + scanProgress=$(echo "scale=2; $clnBlockHeight*100/$total" | bc) + echo "scanProgress=${scanProgress}" + clnBlockHeightPlusOne=$(expr $clnBlockHeight + 1) + if [ "${total}" == "${clnBlockHeight}" ] || [ "${total}" == "${clnBlockHeightPlusOne}" ]; then + echo "syncedToChain=1" + else + echo "syncedToChain=0" + fi +fi + # touchscreen statistics if [ "${touchscreen}" == "1" ]; then echo "blitzTUIActive=1" @@ -265,6 +297,9 @@ else 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 diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh new file mode 100644 index 000000000..ae85780ad --- /dev/null +++ b/home.admin/config.scripts/blitz.upload.sh @@ -0,0 +1,143 @@ +#!/bin/bash + +# command info +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then + echo "# use to prepare & check scp or web file upload to RaspiBlitz" + echo "# blitz.upload.sh prepare-upload" + echo "# blitz.upload.sh check-upload ?[scb|lnd-rescue|migration]" + exit 0 +fi + +# get local ip +source <(/home/admin/config.scripts/internet.sh status local) + +# set upload path +if [ -d "/mnt/hdd/temp" ]; then + # HDD with temp directory is connected - the use it + defaultUploadPath="/mnt/hdd/temp/upload" + defaultUploadUser="bitcoin" +else + # fallback if no HDD is connected + defaultUploadPath="/home/bitcoin/temp/upload" + defaultUploadUser="bitcoin" +fi + + +# 1st PRAMETER action +action="$1" + +if [ "${action}" == "prepare-upload" ]; then + + # make sure that temp directory exists, is clear and can be written by ${defaultUploadUser} + sudo mkdir -p ${defaultUploadPath} 2>/dev/null + sudo rm ${defaultUploadPath}/* 2>/dev/null + sudo chown -R ${defaultUploadUser}:${defaultUploadUser} ${defaultUploadPath} 2>/dev/null + + echo "localip='${localip}'" + echo "defaultUploadPath='${defaultUploadPath}'" + echo "defaultUploadUser='${defaultUploadUser}'" + exit 0 +fi + +if [ "${action}" == "check-upload" ]; then + + # 2nd PARAMETER is type of upload (optional) + type=$2 + echo "type='${type}'" + + # check if there to less or to many files in upload directory + countFiles=$(ls ${defaultUploadPath} | wc -l 2>/dev/null) + if [ ${countFiles} -lt 1 ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='not-found'" + exit 1 + fi + if [ ${countFiles} -gt 1 ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='multiple'" + exit 1 + fi + + # get the file uploaded (full path) + filename=$(sudo ls ${defaultUploadPath}/*.*) + echo "# filename(${filename})" + + # check of size >0 + byteSize=$(ls -l ${filename} | awk '{print $5}') + echo "# byteSize(${byteSize})" + if [ "${byteSize}" == "" ] || [ "${byteSize}" == "0" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='invalid byte size: ${byteSize}'" + exit 1 + fi + + # SCB check if file looks valid + if [ "${type}" == "scb" ]; then + + # general filename check + typeCount=$(sudo ls ${defaultUploadPath}/*.backup 2>/dev/null | grep -c '.backup') + if [ "${typeCount}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='not *.backup'" + exit 1 + fi + fi + + # LND-RESCUE check if file looks valid + if [ "${type}" == "lnd-rescue" ]; then + + # general filename check + typeCount=$(sudo ls ${defaultUploadPath}/lnd-rescue-*.tar.gz 2>/dev/null | grep -c 'lnd-rescue') + if [ "${typeCount}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='not lnd-rescue-*.tar.gz'" + exit 1 + fi + + # checksum test + md5checksum=$(md5sum ${filename} | head -n1 | cut -d " " -f1) + echo "# filename(${md5checksum})" + isCorrect=$(echo ${filename} | grep -c ${md5checksum}) + if [ "${isCorrect}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='incorrect checksum'" + exit 1 + fi + fi + + # MIGRATION check if file looks valid + if [ "${type}" == "migration" ]; then + + # general filename check + typeCount=$(sudo ls ${defaultUploadPath}/raspiblitz-*.tar.gz 2>/dev/null | grep -c 'raspiblitz') + if [ "${typeCount}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='not raspiblitz-*.tar.gz'" + exit 1 + fi + + # checksum test + md5checksum=$(md5sum ${filename} | head -n1 | cut -d " " -f1) + echo "# filename(${md5checksum})" + isCorrect=$(echo ${filename} | grep -c ${md5checksum}) + if [ "${isCorrect}" != "1" ]; then + sudo rm ${defaultUploadPath}/* 2>/dev/null + echo "error='invalid'" + echo "errorDetail='incorrect checksum'" + exit 1 + fi + fi + + # ok looks good - return filename & more info + echo "filename=${filename}" + echo "bytesize=${byteSize}" + exit 0 +fi + +echo "error='unkown parameter'" +exit 1 \ No newline at end of file diff --git a/home.admin/config.scripts/blitz.ups.sh b/home.admin/config.scripts/blitz.ups.sh index db6b9cdfe..12dc0c039 100755 --- a/home.admin/config.scripts/blitz.ups.sh +++ b/home.admin/config.scripts/blitz.ups.sh @@ -1,7 +1,7 @@ #!/bin/bash source /home/admin/raspiblitz.info -source /mnt/hdd/raspiblitz.conf +source /mnt/hdd/raspiblitz.conf 2>/dev/null # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then @@ -44,7 +44,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then # some APC UPS were not running stable below 90% Battery - so start shutdown at 95% remaining sudo sed -i "s/^BATTERYLEVEL.*/BATTERYLEVEL 95/g" /etc/apcupsd/apcupsd.conf sudo sed -i "s/^ISCONFIGURED=.*/ISCONFIGURED=yes/g" /etc/default/apcupsd - sudo sed -i "s/^SHUTDOWN=.*/SHUTDOWN=\/home\/admin\/XXshutdown.sh/g" /etc/apcupsd/apccontrol + sudo sed -i "s/^SHUTDOWN=.*/SHUTDOWN=\/home\/admin\/config.scripts\/blitz.shutdown.sh/g" /etc/apcupsd/apccontrol sudo sed -i "s/^WALL=.*/#WALL=wall/g" /etc/apcupsd/apccontrol sudo systemctl enable apcupsd sudo systemctl start apcupsd diff --git a/home.admin/config.scripts/blitz.web.api.sh b/home.admin/config.scripts/blitz.web.api.sh new file mode 100755 index 000000000..e9345ac74 --- /dev/null +++ b/home.admin/config.scripts/blitz.web.api.sh @@ -0,0 +1,190 @@ +#!/usr/bin/env bash + +# main repo: https://github.com/fusion44/blitz_api + +# restart the systemd `blitzapi` when credentials of lnd or bitcoind are changeing and it will +# excute the `update-config` automatically before restarting + +# TODO: On sd card install there might be no Bitcoin & Lightning confs - make sure backend runs without + +# command info +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "-help" ]; then + echo "Manage RaspiBlitz Web API" + echo "blitz.web.api.sh on [?GITHUBUSER] [?REPO] [?BRANCH]" + echo "blitz.web.api.sh update-config" + echo "blitz.web.api.sh update-code" + echo "blitz.web.api.sh off" + exit 1 +fi + +DEFAULT_GITHUB_USER="fusion44" +DEFAULT_GITHUB_REPO="blitz_api" +DEFAULT_GITHUB_BRANCH="main" + +################### +# ON / INSTALL +################### +if [ "$1" = "1" ] || [ "$1" = "on" ]; then + + if [ "$2" != "" ]; then + DEFAULT_GITHUB_USER="$2" + fi + + if [ "$3" != "" ]; then + DEFAULT_GITHUB_REPO="$3" + fi + + if [ "$4" != "" ]; then + DEFAULT_GITHUB_BRANCH="$4" + fi + + echo "# INSTALL Web API ..." + sudo apt install -y redis + sudo rm -r /home/admin/blitz_api 2>/dev/null + cd /home/admin + # git clone https://github.com/fusion44/blitz_api.git /home/admin/blitz_api + git clone https://github.com/${DEFAULT_GITHUB_USER}/${DEFAULT_GITHUB_REPO}.git /home/admin/blitz_api + cd blitz_api + git checkout ${DEFAULT_GITHUB_BRANCH} + pip install -r requirements.txt + + # TODO: check if that manual install is still needed in a future version + pip install sse_starlette + + # build the config and set unique secret (its OK to be a new secret every install/upadte) + /home/admin/config.scripts/blitz.web.api.sh update-config + secret=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 64 ; echo '') + sed -i "s/^secret=.*/secret=${secret}/g" ./.env + + # prepare systemd service + echo " +[Unit] +Description=BlitzBackendAPI +Wants=network.target +After=network.target + +[Service] +WorkingDirectory=/home/admin/blitz_api +# before every start update the config with latest credentials/settings +ExecStartPre=-/home/admin/config.scripts/blitz.web.api.sh update-config +ExecStart=sudo -admin /usr/bin/python -m uvicorn main:app --reload --port 11111 --host=0.0.0.0 --root-path /api +User=root +Group=root +Type=simple +Restart=always +StandardOutput=journal +StandardError=journal + +# Hardening measures +PrivateTmp=true +ProtectSystem=full +NoNewPrivileges=true +PrivateDevices=true + +[Install] +WantedBy=multi-user.target +" | sudo tee /etc/systemd/system/blitzapi.service + + sudo systemctl enable blitzapi + sudo systemctl start blitzapi + + # TODO: remove after experimental step + sudo ufw allow 11111 comment 'WebAPI Develop' + + # install info + echo "# the API should new be available under http://[LOCALHOST]/api and port 11111 for testing" + echo "# check for systemd: sudo systemctl status blitzapi" + echo "# check for logs: sudo journalctl -f -u blitzapi" + + exit 0 +fi + +################### +# UPDATE CONFIG +################### +if [ "$1" = "update-config" ]; then + + # prepare configs data + source /mnt/hdd/raspiblitz.conf 2>/dev/null + if [ "${network}" = "" ]; then + network="bitcoin" + chain="main" + fi + + cd /home/admin/blitz_api + dateStr=$(date) + echo "# Update Web API CONFIG (${dateStr})" + RPCUSER=$(sudo cat /mnt/hdd/${network}/${network}.conf | grep rpcuser | cut -c 9-) + RPCPASS=$(sudo cat /mnt/hdd/${network}/${network}.conf | grep rpcpassword | cut -c 13-) + if [ "${RPCUSER}" == "" ]; then + RPCUSER="raspibolt" + fi + if [ "${RPCPASS}" == "" ]; then + RPCPASS="passwordB" + fi + sed -i "s/^network=.*/network=mainnet/g" ./.env + sed -i "s/^bitcoind_ip_mainnet=.*/bitcoind_ip_mainnet=127.0.0.1/g" ./.env + sed -i "s/^bitcoind_ip_testnet=.*/bitcoind_ip_testnet=127.0.0.1/g" ./.env + sed -i "s/^bitcoind_user=.*/bitcoind_user=${RPCUSER}/g" ./.env + sed -i "s/^bitcoind_pw=.*/bitcoind_pw=${RPCPASS}/g" ./.env + + # configure LND + if [ "${lightning}" == "lnd" ]; then + + echo "# CONFIG Web API Lightning --> LND" + tlsCert=$(sudo xxd -ps -u -c 1000 /mnt/hdd/lnd/tls.cert) + adminMacaroon=$(sudo xxd -ps -u -c 1000 /mnt/hdd/lnd/data/chain/bitcoin/mainnet/admin.macaroon) + sed -i "s/^ln_node=.*/ln_node=lnd/g" ./.env + sed -i "s/^lnd_grpc_ip=.*/lnd_grpc_ip=127.0.0.1/g" ./.env + sed -i "s/^lnd_macaroon=.*/lnd_macaroon=${adminMacaroon}/g" ./.env + sed -i "s/^lnd_cert=.*/lnd_cert=${tlsCert}/g" ./.env + + # configure CLN + elif [ "${lightning}" == "cln" ]; then + + echo "# CONFIG Web API Lightning --> CLN" + sed -i "s/^ln_node=.*/ln_node=cln/g" ./.env + + # TODO: ADD C-Lightning config as soon as available + echo "# MISSING CLN CONFIG YET" + + else + echo "# CONFIG Web API Lightning --> OFF" + sed -i "s/^ln_node=.*/ln_node=/g" ./.env + fi + + echo "# '.env' config updates - blitzapi maybe needs to be restarted" + exit 0 + +fi + +################### +# UPDATE CODE +################### +if [ "$1" = "update-code" ]; then + + echo "# Update Web API CODE" + sudo systemctl stop blitzapi + cd /home/admin/blitz_api + git fetch + git pull + pip install -r requirements.txt + sudo systemctl start blitzapi + echo "# blitzapi updates and restarted" + exit 0 + +fi + +################### +# OFF / UNINSTALL +################### +if [ "$1" = "0" ] || [ "$1" = "off" ]; then + + echo "# UNINSTALL Web API" + sudo systemctl stop blitzapi + sudo systemctl disable blitzapi + sudo rm /etc/systemd/system/blitzapi.service + sudo rm -r /home/admin/blitz_api + exit 0 + +fi diff --git a/home.admin/config.scripts/blitz.web.sh b/home.admin/config.scripts/blitz.web.sh index 6d3f46458..fc42418d6 100755 --- a/home.admin/config.scripts/blitz.web.sh +++ b/home.admin/config.scripts/blitz.web.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash +# TODO: later on this script will be run on build sdcard - make sure that the self-signed tls cert get created fresh on every new RaspiBlitz + source /mnt/hdd/raspiblitz.conf # command info @@ -8,98 +10,9 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "-help" ]; printf "blitz.web.sh check \t\tprint operational nginx listen status (lsof)\n" printf "blitz.web.sh on \t\tturn on\n" printf "blitz.web.sh off \t\tturn off\n" - printf "blitz.web.sh listen localhost \tset port 443 to localhost only\n" - printf "blitz.web.sh listen any \tset port 443 to any\n" exit 1 fi -# using ${APOST} is a workaround to be able to use sed with ' -APOST=\' # close tag for linters: ' - - -################### -# FUNCTIONS -################### -function set_nginx_blitzweb_listen() { - # first parameter to function should be either "localhost" or "any" - listen_to=${1} - - if [ -f "/etc/nginx/sites-available/blitzweb.conf" ]; then - if ! grep -Eq '^\s*#?\s*listen 127.0.0.1:443 ssl default_server;$' /etc/nginx/sites-available/blitzweb.conf; then - echo "Error: missing expected line for: lo:v4 https" - exit 1 - else - if grep -Eq '^\s*#\s*listen 127.0.0.1:443 ssl default_server;$' /etc/nginx/sites-available/blitzweb.conf; then - #echo "found: lo:v4 https (disabled line)" - if [ ${listen_to} = "localhost" ]; then - sudo sed -i -E 's/#\s*(listen 127.0.0.1:443 ssl default_server;)/\1/g' /etc/nginx/sites-available/blitzweb.conf - fi - else - #echo "found: lo:v4 https (enabled line)" - if [ ${listen_to} = "any" ]; then - sudo sed -i -E 's/(listen 127.0.0.1:443 ssl default_server;)/#\1/g' /etc/nginx/sites-available/blitzweb.conf - fi - fi - - fi - - if ! grep -Eq '^\s*#?\s*listen \[::1\]:443 ssl default_server;$' /etc/nginx/sites-available/blitzweb.conf; then - echo "Error: missing expected line for: lo:v6 https" - exit 1 - else - if grep -Eq '^\s*#\s*listen \[::1\]:443 ssl default_server;$' /etc/nginx/sites-available/blitzweb.conf; then - #echo "found: lo:v6 https (disabled line)" - if [ ${listen_to} = "localhost" ]; then - sudo sed -i -E 's/#\s*(listen \[::1\]:443 ssl default_server;)/\1/g' /etc/nginx/sites-available/blitzweb.conf - fi - else - #echo "found: lo:v6 https (enabled line)" - if [ ${listen_to} = "any" ]; then - sudo sed -i -E 's/(listen \[::1\]:443 ssl default_server;)/#\1/g' /etc/nginx/sites-available/blitzweb.conf - fi - fi - - fi - - if ! grep -Eq '^\s*#?\s*listen 443 ssl default_server;$' /etc/nginx/sites-available/blitzweb.conf; then - echo "Error: missing expected line for: any:v4 https" - exit 1 - else - if grep -Eq '^\s*#\s*listen 443 ssl default_server;$' /etc/nginx/sites-available/blitzweb.conf; then - #echo "found: any:v4 https (disabled line)" - if [ ${listen_to} = "any" ]; then - sudo sed -i -E 's/#\s*(listen 443 ssl default_server;)/\1/g' /etc/nginx/sites-available/blitzweb.conf - fi - else - #echo "found: any:v4 https (enabled line)" - if [ ${listen_to} = "localhost" ]; then - sudo sed -i -E 's/(listen 443 ssl default_server;)/#\1/g' /etc/nginx/sites-available/blitzweb.conf - fi - fi - - fi - - if ! grep -Eq '^\s*#?\s*listen \[::\]:443 ssl default_server;$' /etc/nginx/sites-available/blitzweb.conf; then - echo "Error: missing expected line for: any:v6 https" - exit 1 - else - if grep -Eq '^\s*#\s*listen \[::\]:443 ssl default_server;$' /etc/nginx/sites-available/blitzweb.conf; then - #echo "found: any:v6 https (disabled line)" - if [ ${listen_to} = "any" ]; then - sudo sed -i -E 's/#\s*(listen \[::\]:443 ssl default_server;)/\1/g' /etc/nginx/sites-available/blitzweb.conf - fi - else - #echo "found: any:v6 https (enabled line)" - if [ ${listen_to} = "localhost" ]; then - sudo sed -i -E 's/(listen \[::\]:443 ssl default_server;)/#\1/g' /etc/nginx/sites-available/blitzweb.conf - fi - fi - fi - fi -} - - - ################### # CHECK ################### @@ -145,6 +58,7 @@ EOF sudo sed -i -E '/^.*server_names_hash_bucket_size [0-9]*;$/a \\tserver_names_hash_bucket_size 128;' /etc/nginx/nginx.conf fi + echo "# Checking dhparam.pem ..." if [ ! -f /etc/ssl/certs/dhparam.pem ]; then # check if there is a user generated dhparam.pem on the HDD to use @@ -162,6 +76,8 @@ EOF sudo cp /mnt/hdd/app-data/nginx/dhparam.pem /etc/ssl/certs/dhparam.pem fi + else + echo "# skip - dhparam.pem exists" fi sudo cp /home/admin/assets/nginx/snippets/* /etc/nginx/snippets/ @@ -171,7 +87,10 @@ EOF sudo rm -f /var/www/html/index.nginx-debian.html if ! [ -f /etc/nginx/sites-available/public.conf ]; then + echo "# copy /etc/nginx/sites-available/public.conf" sudo cp /home/admin/assets/nginx/sites-available/public.conf /etc/nginx/sites-available/public.conf + else + echo "# exists /etc/nginx/sites-available/public.conf" fi if ! [ -d /var/www/letsencrypt/.well-known/acme-challenge ]; then @@ -183,43 +102,52 @@ EOF # copy webroot if ! [ -d /var/www/public ]; then + echo "# copy /var/www/public" sudo cp -a /home/admin/assets/nginx/www_public/ /var/www/public sudo chown www-data:www-data /var/www/public + else + echo "# exists /var/www/public" fi sudo ln -sf /etc/nginx/sites-available/public.conf /etc/nginx/sites-enabled/public.conf ### RaspiBlitz Webserver on HTTPS 443 - # copy webroot - if ! [ -d /var/www/blitzweb ]; then - sudo cp -a /home/admin/assets/nginx/www_blitzweb/ /var/www/blitzweb - sudo chown www-data:www-data /var/www/blitzweb + # copy compiled webUI (TODO: do later) + if ! [ -d /var/www/public/ui ]; then + echo "# copy precompiled webui TODO: implement" + sudo cp -a /home/admin/blitz_web_compiled /var/www/public/ui + sudo chown www-data:www-data /var/www/public/ui + else + echo "# exists /var/www/public/ui" fi - # make sure jinja2 is installed and install j2cli - sudo apt-get install -y python3-jinja2 - sudo -H python3 -m pip install j2cli + if ! [ -f /mnt/hdd/app-data/nginx/tls.cert ];then - # use LND cert by default - sudo ln -sf /mnt/hdd/lnd/tls.cert /mnt/hdd/app-data/nginx/tls.cert - sudo ln -sf /mnt/hdd/lnd/tls.key /mnt/hdd/app-data/nginx/tls.key - sudo ln -sf /mnt/hdd/lnd/tls.cert /mnt/hdd/app-data/nginx/tor_tls.cert - sudo ln -sf /mnt/hdd/lnd/tls.key /mnt/hdd/app-data/nginx/tor_tls.key - - # config - sudo cp /home/admin/assets/blitzweb.conf /etc/nginx/sites-available/blitzweb.conf - sudo ln -sf /etc/nginx/sites-available/blitzweb.conf /etc/nginx/sites-enabled/ - - if ! [ -f /etc/nginx/.htpasswd ]; then - PASSWORD_B=$(sudo cat /mnt/hdd/${network}/${network}.conf | grep rpcpassword | cut -c 13-) - echo "${PASSWORD_B}" | sudo htpasswd -c -i /etc/nginx/.htpasswd admin - sudo chown www-data:www-data /etc/nginx/.htpasswd - sudo chmod 640 /etc/nginx/.htpasswd + if [ -f /mnt/hdd/lnd/tls.cert ]; then + # use LND cert by default + echo "# use LND cert for: /mnt/hdd/app-data/nginx/tls.cert" + sudo ln -sf /mnt/hdd/lnd/tls.cert /mnt/hdd/app-data/nginx/tls.cert + sudo ln -sf /mnt/hdd/lnd/tls.key /mnt/hdd/app-data/nginx/tls.key + sudo ln -sf /mnt/hdd/lnd/tls.cert /mnt/hdd/app-data/nginx/tor_tls.cert + sudo ln -sf /mnt/hdd/lnd/tls.key /mnt/hdd/app-data/nginx/tor_tls.key + else + echo "# exists /mnt/hdd/app-data/nginx/tls.cert" + # create a self-signed cert if the LND cert is not present + /home/admin/config.scripts/internet.selfsignedcert.sh + + sudo ln -sf /mnt/hdd/app-data/selfsignedcert/selfsigned.cert \ + /mnt/hdd/app-data/nginx/tls.cert + sudo ln -sf /mnt/hdd/app-data/selfsignedcert/selfsigned.key \ + /mnt/hdd/app-data/nginx/tls.key + sudo ln -sf /mnt/hdd/app-data/selfsignedcert/selfsigned.cert \ + /mnt/hdd/app-data/nginx/tor_tls.cert + sudo ln -sf /mnt/hdd/app-data/selfsignedcert/selfsigned.key \ + /mnt/hdd/app-data/nginx/tor_tls.key + fi else - sudo chown www-data:www-data /etc/nginx/.htpasswd - sudo chmod 640 /etc/nginx/.htpasswd + echo "# exists /mnt/hdd/app-data/nginx/tls.cert" fi # restart NGINX @@ -236,19 +164,6 @@ elif [ "$1" = "0" ] || [ "$1" = "off" ]; then sudo systemctl stop nginx sudo systemctl disable nginx >/dev/null - -################### -# LISTEN -################### -elif [ "$1" = "listen" ]; then - - if [ "$2" = "localhost" ] || [ "$2" = "any" ]; then - echo "Setting NGINX to listen on: ${2}" - set_nginx_blitzweb_listen "${2}" - else - echo "# FAIL: parameter not known - run with -h for help" - fi - else echo "# FAIL: parameter not known - run with -h for help" fi diff --git a/home.admin/config.scripts/blitz.web.ui.sh b/home.admin/config.scripts/blitz.web.ui.sh new file mode 100755 index 000000000..ecda65cef --- /dev/null +++ b/home.admin/config.scripts/blitz.web.ui.sh @@ -0,0 +1,96 @@ +#!/usr/bin/env bash + +# TODO: Later use for default install (when no github parameters are given) a precompiled version +# that comes with the repo so that the user does not need to install node +# use fro that then: yarn build:production & yarn licenses generate-disclaimer + +# TODO: Put WebUI into / base directory of nginx and let the index.html of the webUI handle +# the Tor detection or build it directly into the WebUI + +# command info +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "-help" ]; then + echo "Manage RaspiBlitz Web UI" + echo "blitz.web.ui.sh on [?GITHUBUSER] [?REPO] [?BRANCH]" + echo "blitz.web.ui.sh update" + echo "blitz.web.ui.sh off" + exit 1 +fi + +DEFAULT_GITHUB_USER="cstenglein" +DEFAULT_GITHUB_REPO="raspiblitz-web" +DEFAULT_GITHUB_BRANCH="master" + +################### +# ON / INSTALL +################### +if [ "$1" = "1" ] || [ "$1" = "on" ]; then + + if [ "$2" != "" ]; then + DEFAULT_GITHUB_USER="$2" + fi + + if [ "$3" != "" ]; then + DEFAULT_GITHUB_REPO="$3" + fi + + if [ "$4" != "" ]; then + DEFAULT_GITHUB_BRANCH="$4" + fi + + echo "# INSTALL WebUI" + sudo rm -r /home/admin/blitz_web 2>/dev/null + cd /home/admin + # git clone https://github.com/cstenglein/raspiblitz-web.git /home/admin/blitz_web + git clone https://github.com/${DEFAULT_GITHUB_USER}/${DEFAULT_GITHUB_REPO}.git /home/admin/blitz_web + cd blitz_web + git checkout ${DEFAULT_GITHUB_BRANCH} + + echo "# Compile WebUI" + /home/admin/config.scripts/bonus.nodejs.sh on + source <(/home/admin/config.scripts/bonus.nodejs.sh info) + sudo npm install --global yarn + ${NODEPATH}/yarn install + ${NODEPATH}/yarn build + + sudo rm -r /var/www/public/* 2>/dev/null + sudo cp -r /home/admin/blitz_web/build/* /var/www/public + sudo chown www-data:www-data -R /var/www/public + + exit 1 +fi + +################### +# UPDATE +################### +if [ "$1" = "update" ]; then + + echo "# Update Web API" + cd /home/admin/blitz_web + git fetch + git pull + source <(/home/admin/config.scripts/bonus.nodejs.sh info) + ${NODEPATH}/yarn install + ${NODEPATH}/yarn build + sudo rm -r /var/www/public/* 2>/dev/null + sudo cp -r /home/admin/blitz_web/build/* /var/www/public + sudo chown www-data:www-data -R /var/www/public + echo "# blitzapi updates and restarted" + exit 0 + +fi + +################### +# OFF / UNINSTALL +################### +if [ "$1" = "0" ] || [ "$1" = "off" ]; then + + echo "# UNINSTALL WebUI" + sudo rm -r /home/admin/blitz_web 2>/dev/null + sudo rm -r /var/www/public/* 2>/dev/null + exit 0 +fi + + + + + diff --git a/home.admin/config.scripts/bonus.btc-rpc-explorer.sh b/home.admin/config.scripts/bonus.btc-rpc-explorer.sh index 1af94f7f3..67cbf8593 100755 --- a/home.admin/config.scripts/bonus.btc-rpc-explorer.sh +++ b/home.admin/config.scripts/bonus.btc-rpc-explorer.sh @@ -31,7 +31,7 @@ This can take multiple hours. fi # get network info - localip=$(ip addr | grep 'state UP' -A2 | egrep -v 'docker0|veth' | grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + 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/btc-rpc-explorer/hostname 2>/dev/null) fingerprint=$(openssl x509 -in /mnt/hdd/app-data/nginx/tls.cert -fingerprint -noout | cut -d"=" -f2) @@ -207,6 +207,12 @@ User=btcrpcexplorer Restart=on-failure RestartSec=600 +# Hardening measures +PrivateTmp=true +ProtectSystem=full +NoNewPrivileges=true +PrivateDevices=true + [Install] WantedBy=multi-user.target EOF diff --git a/home.admin/config.scripts/bonus.btcpayserver.sh b/home.admin/config.scripts/bonus.btcpayserver.sh index 13b686d20..b0653e847 100755 --- a/home.admin/config.scripts/bonus.btcpayserver.sh +++ b/home.admin/config.scripts/bonus.btcpayserver.sh @@ -27,7 +27,7 @@ if [ "$1" = "status" ]; then isInstalled=$(sudo ls /etc/systemd/system/btcpayserver.service 2>/dev/null | grep -c 'btcpayserver.service') echo "installed=${isInstalled}" - localIP=$(ip addr | grep 'state UP' -A2 | egrep -v 'docker0|veth' | grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + localIP=$(hostname -I | awk '{print $1}') echo "localIP='${localIP}'" echo "httpsPort='23001'" echo "publicIP='${publicIP}'" @@ -379,6 +379,7 @@ Type=simple PIDFile=/run/nbxplorer/nbxplorer.pid Restart=on-failure +# Hardening measures PrivateTmp=true ProtectSystem=full NoNewPrivileges=true @@ -461,6 +462,12 @@ Type=simple PIDFile=/run/btcpayserver/btcpayserver.pid Restart=on-failure +# Hardening measures +PrivateTmp=true +ProtectSystem=full +NoNewPrivileges=true +PrivateDevices=true + [Install] WantedBy=multi-user.target " | sudo tee /etc/systemd/system/btcpayserver.service diff --git a/home.admin/config.scripts/bonus.circuitbreaker.sh b/home.admin/config.scripts/bonus.circuitbreaker.sh index cb779c32c..0535d6487 100755 --- a/home.admin/config.scripts/bonus.circuitbreaker.sh +++ b/home.admin/config.scripts/bonus.circuitbreaker.sh @@ -101,11 +101,16 @@ ExecStart=/home/circuitbreaker/go/bin/circuitbreaker --network=${chain}net User=circuitbreaker Group=circuitbreaker Type=simple -KillMode=process TimeoutSec=60 Restart=always RestartSec=60 +# Hardening measures +PrivateTmp=true +ProtectSystem=full +NoNewPrivileges=true +PrivateDevices=true + [Install] WantedBy=multi-user.target " | sudo tee -a /etc/systemd/system/circuitbreaker.service diff --git a/home.admin/config.scripts/bonus.cryptoadvance-specter.sh b/home.admin/config.scripts/bonus.cryptoadvance-specter.sh index 2fb2313d4..33bd84480 100755 --- a/home.admin/config.scripts/bonus.cryptoadvance-specter.sh +++ b/home.admin/config.scripts/bonus.cryptoadvance-specter.sh @@ -1,7 +1,7 @@ #!/bin/bash # https://github.com/cryptoadvance/specter-desktop -pinnedVersion="1.3.0" +pinnedVersion="1.4.2" # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then @@ -22,7 +22,7 @@ if [ "$1" = "status" ]; then echo "configured=1" # get network info - localip=$(ip addr | grep 'state UP' -A2 | egrep -v 'docker0|veth' | grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + localip=$(hostname -I | awk '{print $1}') toraddress=$(sudo cat /mnt/hdd/tor/cryptoadvance-specter/hostname 2>/dev/null) fingerprint=$(openssl x509 -in /home/specter/.specter/cert.pem -fingerprint -noout | cut -d"=" -f2) echo "localip='${localip}'" @@ -289,6 +289,12 @@ RestartSec=30 StandardOutput=null StandardError=journal +# Hardening measures +PrivateTmp=true +ProtectSystem=full +NoNewPrivileges=true +PrivateDevices=true + [Install] WantedBy=multi-user.target EOF diff --git a/home.admin/config.scripts/bonus.electrs.sh b/home.admin/config.scripts/bonus.electrs.sh index 02b0157f2..bd4f52add 100755 --- a/home.admin/config.scripts/bonus.electrs.sh +++ b/home.admin/config.scripts/bonus.electrs.sh @@ -137,7 +137,7 @@ if [ "$1" = "menu" ]; then The electrum system service is not running. Please check the following debug info. " 8 48 - /home/admin/XXdebugLogs.sh + /home/admin/config.scripts/blitz.debug.sh echo "Press ENTER to get back to main menu." read key exit 0 @@ -403,11 +403,16 @@ ExecStart=/home/electrs/electrs/target/release/electrs --index-batch-size=10 --e User=electrs Group=electrs Type=simple -KillMode=process TimeoutSec=60 Restart=always RestartSec=60 +# Hardening measures +PrivateTmp=true +ProtectSystem=full +NoNewPrivileges=true +PrivateDevices=true + [Install] WantedBy=multi-user.target " | sudo tee -a /etc/systemd/system/electrs.service diff --git a/home.admin/config.scripts/bonus.faraday.sh b/home.admin/config.scripts/bonus.faraday.sh index 41898a79d..44017292e 100755 --- a/home.admin/config.scripts/bonus.faraday.sh +++ b/home.admin/config.scripts/bonus.faraday.sh @@ -221,6 +221,12 @@ RestartSec=30 StandardOutput=null StandardError=journal +# Hardening measures +PrivateTmp=true +ProtectSystem=full +NoNewPrivileges=true +PrivateDevices=true + [Install] WantedBy=multi-user.target " | sudo tee -a /etc/systemd/system/faraday.service diff --git a/home.admin/config.scripts/bonus.kindle-display.sh b/home.admin/config.scripts/bonus.kindle-display.sh index 2115a4b04..2d0c78f67 100755 --- a/home.admin/config.scripts/bonus.kindle-display.sh +++ b/home.admin/config.scripts/bonus.kindle-display.sh @@ -127,6 +127,12 @@ Restart=on-failure StartLimitIntervalSec=600 StartLimitBurst=2 +# Hardening measures +PrivateTmp=true +ProtectSystem=full +NoNewPrivileges=true +PrivateDevices=true + [Install] WantedBy=multi-user.target EOF diff --git a/home.admin/config.scripts/bonus.lit.sh b/home.admin/config.scripts/bonus.lit.sh index 8315916ee..e441d6d62 100644 --- a/home.admin/config.scripts/bonus.lit.sh +++ b/home.admin/config.scripts/bonus.lit.sh @@ -29,7 +29,7 @@ fi if [ "$1" = "menu" ]; then # get network info - localip=$(ip addr | grep 'state UP' -A2 | egrep -v 'docker0' | grep 'eth0\|wlan0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + localip=$(hostname -I | awk '{print $1}') toraddress=$(sudo cat /mnt/hdd/tor/lit/hostname 2>/dev/null) fingerprint=$(sudo openssl x509 -in /home/lit/.lit/tls.cert -fingerprint -noout | cut -d"=" -f2) @@ -286,11 +286,16 @@ ExecStart=/usr/local/bin/litd User=lit Group=lit Type=simple -KillMode=process TimeoutSec=60 Restart=always RestartSec=60 +# Hardening measures +PrivateTmp=true +ProtectSystem=full +NoNewPrivileges=true +PrivateDevices=true + [Install] WantedBy=multi-user.target " | sudo tee -a /etc/systemd/system/litd.service @@ -377,4 +382,4 @@ fi echo "FAIL - Unknown Parameter $1" echo "may need reboot to run normal again" exit 1 - \ No newline at end of file + diff --git a/home.admin/config.scripts/bonus.lnbits.sh b/home.admin/config.scripts/bonus.lnbits.sh index 637dc1dee..c5fc76a4f 100755 --- a/home.admin/config.scripts/bonus.lnbits.sh +++ b/home.admin/config.scripts/bonus.lnbits.sh @@ -85,7 +85,7 @@ if [ "$1" = "status" ]; then if [ "${LNBits}" = "on" ]; then echo "installed=1" - localIP=$(ip addr | grep 'state UP' -A2 | egrep -v 'docker0|veth' | grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + localIP=$(hostname -I | awk '{print $1}') echo "localIP='${localIP}'" echo "httpPort='5000'" echo "httpsPort='5001'" @@ -328,6 +328,12 @@ RestartSec=30 StandardOutput=null StandardError=journal +# Hardening measures +PrivateTmp=true +ProtectSystem=full +NoNewPrivileges=true +PrivateDevices=true + [Install] WantedBy=multi-user.target EOF diff --git a/home.admin/config.scripts/bonus.lndconnect.sh b/home.admin/config.scripts/bonus.lndconnect.sh index 10063cfb2..a1f2896db 100755 --- a/home.admin/config.scripts/bonus.lndconnect.sh +++ b/home.admin/config.scripts/bonus.lndconnect.sh @@ -135,7 +135,7 @@ fi # get the local IP as default host if [ ${#host} -eq 0 ]; then - host=$(ip addr | grep 'state UP' -A2 | egrep -v 'docker0|veth' | grep 'eth0\|wlan0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + host=$(hostname -I | awk '{print $1}') fi # change host to dynDNS if set diff --git a/home.admin/config.scripts/bonus.loop.sh b/home.admin/config.scripts/bonus.loop.sh index c8b860b48..df93baefa 100755 --- a/home.admin/config.scripts/bonus.loop.sh +++ b/home.admin/config.scripts/bonus.loop.sh @@ -116,11 +116,16 @@ ExecStart=/home/loop/go/bin/loopd --network=${chain}net ${proxy} User=loop Group=loop Type=simple -KillMode=process TimeoutSec=60 Restart=always RestartSec=60 +# Hardening measures +PrivateTmp=true +ProtectSystem=full +NoNewPrivileges=true +PrivateDevices=true + [Install] WantedBy=multi-user.target " | sudo tee -a /etc/systemd/system/loopd.service diff --git a/home.admin/config.scripts/bonus.mempool.sh b/home.admin/config.scripts/bonus.mempool.sh index b57fee6e1..d9bf32854 100755 --- a/home.admin/config.scripts/bonus.mempool.sh +++ b/home.admin/config.scripts/bonus.mempool.sh @@ -32,7 +32,7 @@ This can take multiple hours. fi # get network info - localip=$(ip addr | grep 'state UP' -A2 | egrep -v 'docker0' | grep 'eth0\|wlan0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + localip=$(hostname -I | awk '{print $1}') toraddress=$(sudo cat /mnt/hdd/tor/mempool/hostname 2>/dev/null) fingerprint=$(openssl x509 -in /mnt/hdd/app-data/nginx/tls.cert -fingerprint -noout | cut -d"=" -f2) @@ -255,6 +255,12 @@ User=mempool Restart=on-failure RestartSec=600 +# Hardening measures +PrivateTmp=true +ProtectSystem=full +NoNewPrivileges=true +PrivateDevices=true + [Install] WantedBy=multi-user.target EOF diff --git a/home.admin/config.scripts/bonus.nodejs.sh b/home.admin/config.scripts/bonus.nodejs.sh index 2dd0cb9c4..0b6410c98 100755 --- a/home.admin/config.scripts/bonus.nodejs.sh +++ b/home.admin/config.scripts/bonus.nodejs.sh @@ -9,10 +9,36 @@ CHECKSUM_linux_x64="ed01043751f86bb534d8c70b16ab64c956af88fd35a9506b7e4a68f5b824 # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo "config script to install NodeJs $VERSION" - echo "bonus.nodejs.sh [on|off]" + echo "bonus.nodejs.sh [on|off|info]" exit 1 fi + # determine nodeJS VERSION and DISTRO +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-armv7l" + CHECKSUM="${CHECKSUM_linux_armv7l}" +elif [ ${isAARCH64} -eq 1 ] ; then + DISTRO="linux-arm64" + CHECKSUM="${CHECKSUM_linux_arm64}" +elif [ ${isX86_64} -eq 1 ] ; then + DISTRO="linux-x64" + CHECKSUM="${CHECKSUM_linux_x64}" +elif [ ${#DISTRO} -eq 0 ]; then + echo "# FAIL: Was not able to determine architecture" + exit 1 +fi + +# info +if [ "$1" = "info" ]; then + echo "NODEVERSION='${VERSION}'" + echo "NODEDISTRO='${DISTRO}'" + echo "NODEPATH='/usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin'" + exit 0 +fi + # switch on if [ "$1" = "1" ] || [ "$1" = "on" ]; then # check if nodeJS was installed @@ -20,34 +46,15 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then if ! [ ${nodeJSInstalled} -eq 0 ]; then echo "nodeJS is already installed" else - # determine nodeJS VERSION and DISTRO - echo "Detect CPU architecture ..." - 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-armv7l" - CHECKSUM="${CHECKSUM_linux_armv7l}" - elif [ ${isAARCH64} -eq 1 ] ; then - DISTRO="linux-arm64" - CHECKSUM="${CHECKSUM_linux_arm64}" - elif [ ${isX86_64} -eq 1 ] ; then - DISTRO="linux-x64" - CHECKSUM="${CHECKSUM_linux_x64}" - elif [ ${#DISTRO} -eq 0 ]; then - echo "FAIL: Was not able to determine architecture" - exit 1 - fi + + # install latest nodejs + # https://github.com/nodejs/help/wiki/Installation + echo "*** Install NodeJS $VERSION-$DISTRO ***" echo "VERSION: ${VERSION}" echo "DISTRO: ${DISTRO}" echo "CHECKSUM: ${CHECKSUM}" echo "" - - # install latest nodejs - # https://github.com/nodejs/help/wiki/Installation - echo "*** Install NodeJS $VERSION-$DISTRO ***" - + # download cd /home/admin/download wget https://nodejs.org/dist/$VERSION/node-$VERSION-$DISTRO.tar.xz @@ -69,7 +76,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then sudo ln -sf /usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin/npm /usr/bin/npm sudo ln -sf /usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin/npx /usr/bin/npx # add to PATH permanently - sudo bash -c "echo 'PATH=\$PATH:/usr/local/lib/nodejs/node-\$VERSION-\$DISTRO/bin/' >> /etc/profile" + sudo bash -c "echo 'PATH=\$PATH:/usr/local/lib/nodejs/node-${VERSION}-${DISTRO}/bin/' >> /etc/profile" echo "" # check if nodeJS was installed diff --git a/home.admin/config.scripts/bonus.pool.sh b/home.admin/config.scripts/bonus.pool.sh index 3bf452cd6..a0df6b1d1 100644 --- a/home.admin/config.scripts/bonus.pool.sh +++ b/home.admin/config.scripts/bonus.pool.sh @@ -114,11 +114,16 @@ ExecStart=$proxy /home/pool/go/bin/poold --network=${chain}net --debuglevel=trac User=pool Group=pool Type=simple -KillMode=process TimeoutSec=60 Restart=always RestartSec=60 +# Hardening measures +PrivateTmp=true +ProtectSystem=full +NoNewPrivileges=true +PrivateDevices=true + [Install] WantedBy=multi-user.target " | sudo tee /etc/systemd/system/poold.service diff --git a/home.admin/config.scripts/bonus.rtl.sh b/home.admin/config.scripts/bonus.rtl.sh index 77f5de2fb..ba4637942 100755 --- a/home.admin/config.scripts/bonus.rtl.sh +++ b/home.admin/config.scripts/bonus.rtl.sh @@ -1,37 +1,89 @@ #!/bin/bash -RTLVERSION="v0.10.1" - -# command info -if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then - echo "# config script to switch the RideTheLightning WebGUI on, off or update" - echo "# bonus.rtl.sh [on|off|update|menu|config]" - echo "# installs the version $RTLVERSION by default" - exit 1 -fi +RTLVERSION="v0.11.0" # 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 + echo "# config script to switch the RideTheLightning WebGUI on, off or update" + echo + echo "# bonus.rtl.sh [on|off|menu] " + echo "# sets up lnd on ${chain}net by default" + echo "# able to run intances for lnd and cln parallel" + echo "# lnd mainnet and testnet can run parallel" + echo "# cln can only have one network active at a time" + echo + echo "# bonus.rtl.sh [update|config]" + echo "# installs the version $RTLVERSION by default" + exit 1 +fi + +echo "# Running: 'bonus.rtl.sh $*'" + if [ ${#network} -eq 0 ]; then echo "FAIL - missing /mnt/hdd/raspiblitz.conf" exit 1 fi +# LNTYPE is lnd | cln +if [ $# -gt 1 ];then + LNTYPE=$2 +else + LNTYPE=lnd +fi +if [ ${LNTYPE} != lnd ]&&[ ${LNTYPE} != cln ];then + echo "# ${LNTYPE} is not a supported LNTYPE" + exit 1 +fi + +# CHAIN is signet | testnet | mainnet +if [ $# -gt 2 ];then + CHAIN=$3 +else + CHAIN=${chain}net +fi +if [ ${CHAIN} != testnet ]&&[ ${CHAIN} != mainnet ]&&[ ${CHAIN} != signet ];then + echo "# ${CHAIN} is not a supported CHAIN" + exit 1 +fi + +# prefix for parallel services +if [ ${CHAIN} = testnet ];then + netprefix="t" + portprefix=1 +elif [ ${CHAIN} = signet ];then + netprefix="s" + portprefix=3 +elif [ ${CHAIN} = mainnet ];then + netprefix="" + portprefix="" +fi + +if [ ${LNTYPE} = cln ]; then + RTLHTTP=${portprefix}7000 + typeprefix=c +elif [ ${LNTYPE} = lnd ];then + RTLHTTP=${portprefix}3000 + typeprefix="" +fi + # show info menu if [ "$1" = "menu" ]; then # get network info - localip=$(ip addr | grep 'state UP' -A2 | egrep -v 'docker0|veth' | grep 'eth0\|wlan0\|enp0' | tail -n1 | awk '{print $2}' | cut -f1 -d'/') + localip=$(hostname -I | awk '{print $1}') toraddress=$(sudo cat /mnt/hdd/tor/RTL/hostname 2>/dev/null) fingerprint=$(openssl x509 -in /mnt/hdd/app-data/nginx/tls.cert -fingerprint -noout | cut -d"=" -f2) if [ "${runBehindTor}" = "on" ] && [ ${#toraddress} -gt 0 ]; then # Info with TOR /home/admin/config.scripts/blitz.display.sh qr "${toraddress}" - whiptail --title " Ride The Lightning (RTL) " --msgbox "Open in your local web browser: -http://${localip}:3000\n -https://${localip}:3001 with Fingerprint: + whiptail --title "Ride The Lightning (RTL - $LNTYPE - $CHAIN)" --msgbox "Open in your local web browser: +http://${localip}:${RTLHTTP}\n +https://${localip}:$((RTLHTTP+1)) with Fingerprint: ${fingerprint}\n Use your Password B to login.\n Hidden Service address for TOR Browser (QRcode on LCD):\n${toraddress} @@ -39,9 +91,9 @@ Hidden Service address for TOR Browser (QRcode on LCD):\n${toraddress} /home/admin/config.scripts/blitz.display.sh hide else # Info without TOR - whiptail --title " Ride The Lightning (RTL) " --msgbox "Open in your local web browser & accept self-signed cert: -http://${localip}:3000\n -https://${localip}:3001 with Fingerprint: + whiptail --title "Ride The Lightning (RTL - $LNTYPE - $CHAIN)" --msgbox "Open in your local web browser & accept self-signed cert: +http://${localip}:${RTLHTTP}\n +https://${localip}:$((RTLHTTP+1)) with Fingerprint: ${fingerprint}\n Use your Password B to login.\n Activate TOR to access the web interface from outside your local network. @@ -52,155 +104,152 @@ Activate TOR to access the web interface from outside your local network. fi # add default value to raspi config if needed -if ! grep -Eq "^rtlWebinterface=" /mnt/hdd/raspiblitz.conf; then - echo "rtlWebinterface=off" >> /mnt/hdd/raspiblitz.conf +if ! grep -Eq "^${netprefix}${typeprefix}rtlWebinterface=" /mnt/hdd/raspiblitz.conf; then + echo "${netprefix}${typeprefix}rtlWebinterface=off" >> /mnt/hdd/raspiblitz.conf fi # stop services echo "# making sure services are not running" -sudo systemctl stop RTL 2>/dev/null +sudo systemctl stop ${netprefix}${typeprefix}RTL 2>/dev/null function configRTL() { - SWAPSERVERPORT=8443 - if [ "$(grep -Ec "(loop=|lit=)" < /mnt/hdd/raspiblitz.conf)" -gt 0 ];then - if [ $lit = on ];then - echo "# Add the rtl user to the lit group" - sudo /usr/sbin/usermod --append --groups lit rtl - echo "# Symlink the lit-loop.macaroon" - sudo rm -rf "/home/rtl/.loop" # delete symlink - sudo ln -s "/home/lit/.loop/" "/home/rtl/.loop" # create symlink - SWAPSERVERPORT=8443 - elif [ $loop = on ];then - echo "# Add the rtl user to the loop group" - sudo /usr/sbin/usermod --append --groups loop rtl - echo "# Symlink the loop.macaroon" - sudo rm -rf "/home/rtl/.loop" # delete symlink - sudo ln -s "/home/loop/.loop/" "/home/rtl/.loop" # create symlink - SWAPSERVERPORT=8081 + + if [ $LNTYPE = lnd ];then + echo "# Make sure rtl is member of lndadmin" + sudo /usr/sbin/usermod --append --groups lndadmin rtl + SWAPSERVERPORT=8443 + if [ "$(grep -Ec "(loop=|lit=)" < /mnt/hdd/raspiblitz.conf)" -gt 0 ];then + if [ $lit = on ];then + echo "# Add the rtl user to the lit group" + sudo /usr/sbin/usermod --append --groups lit rtl + echo "# Symlink the lit-loop.macaroon" + sudo rm -rf "/home/rtl/.loop" # delete symlink + sudo ln -s "/home/lit/.loop/" "/home/rtl/.loop" # create symlink + SWAPSERVERPORT=8443 + elif [ $loop = on ];then + echo "# Add the rtl user to the loop group" + sudo /usr/sbin/usermod --append --groups loop rtl + echo "# Symlink the loop.macaroon" + sudo rm -rf "/home/rtl/.loop" # delete symlink + sudo ln -s "/home/loop/.loop/" "/home/rtl/.loop" # create symlink + SWAPSERVERPORT=8081 + fi + echo "# Make the loop macaroon group readable" + sudo chmod 640 /home/rtl/.loop/mainnet/macaroons.db + else + echo "# No Loop or LiT is installed" fi - echo "# Make the loop macaroon group readable" - sudo chmod 640 /home/rtl/.loop/mainnet/macaroons.db - else - echo "# No Loop or LiT is installed" fi # prepare RTL-Config.json file - echo "# RTL.conf" + echo "# ${netprefix}RTL/RTL.conf" # change of config: https://github.com/Ride-The-Lightning/RTL/tree/v0.6.4 sudo cp /home/rtl/RTL/sample-RTL-Config.json /home/admin/RTL-Config.json sudo chown admin:admin /home/admin/RTL-Config.json sudo chmod 600 /home/admin/RTL-Config.json || exit 1 PASSWORD_B=$(sudo cat /mnt/hdd/${network}/${network}.conf | grep rpcpassword | cut -c 13-) # modify sample-RTL-Config.json and save in RTL-Config.json - sudo node > /home/admin/RTL-Config.json < /home/admin/RTL-Config.json </dev/null | grep -c 'RTL.service') + isInstalled=$(sudo ls /etc/systemd/system/${netprefix}${typeprefix}RTL.service 2>/dev/null | grep -c "${netprefix}${typeprefix}RTL.service") if ! [ ${isInstalled} -eq 0 ]; then - echo "# RTL already installed." + echo "# OK, the ${netprefix}${typeprefix}RTL.service is already installed." else # check and install NodeJS /home/admin/config.scripts/bonus.nodejs.sh on # create rtl user - sudo adduser --disabled-password --gecos "" rtl || exit 1 - - echo "# Make sure rtl is member of lndadmin" - sudo /usr/sbin/usermod --append --groups lndadmin rtl - - echo "# Make sure symlink to central app-data directory exists" - if ! [[ -L "/home/rtl/.lnd" ]]; then - sudo rm -rf "/home/rtl/.lnd" # not a symlink.. delete it silently - sudo ln -s "/mnt/hdd/app-data/lnd/" "/home/rtl/.lnd" # and create symlink + if [ $(compgen -u | grep -c rtl) -eq 0 ];then + sudo adduser --disabled-password --gecos "" rtl || exit 1 fi - # download source code and set to tag release - echo "# Get the RTL Source Code" - rm -rf /home/admin/RTL 2>/dev/null - sudo -u rtl rm -rf /home/rtl/RTL 2>/dev/null - sudo -u rtl git clone https://github.com/ShahanaFarooqui/RTL.git /home/rtl/RTL - cd /home/rtl/RTL - # check https://github.com/Ride-The-Lightning/RTL/releases/ - sudo -u rtl git reset --hard $RTLVERSION - # from https://github.com/Ride-The-Lightning/RTL/commits/master - # git checkout 917feebfa4fb583360c140e817c266649307ef72 - if [ -d "/home/rtl/RTL" ]; then - echo "# OK - RTL code copy looks good" + if [ -f /home/rtl/RTL/rtl.js ];then + echo "# OK - the RTL code is already present" else - echo "# FAIL - code copy did not run correctly" - echo "# ABORT - RTL install" - exit 1 - fi - echo "" - - # install - echo "# Run: npm install" - export NG_CLI_ANALYTICS=false - sudo -u rtl npm install --only=prod - if ! [ $? -eq 0 ]; then - echo "# FAIL - npm install did not run correctly, aborting" + + echo "# Make sure symlink to central app-data directory exists" + if ! [[ -L "/home/rtl/.lnd" ]]; then + sudo rm -rf "/home/rtl/.lnd" # not a symlink.. delete it silently + sudo ln -s "/mnt/hdd/app-data/lnd/" "/home/rtl/.lnd" # and create symlink + fi + + # download source code and set to tag release + echo "# Get the RTL Source Code" + rm -rf /home/admin/RTL 2>/dev/null + sudo -u rtl rm -rf /home/rtl/RTL 2>/dev/null + sudo -u rtl git clone https://github.com/ShahanaFarooqui/RTL.git /home/rtl/RTL + cd /home/rtl/RTL + # check https://github.com/Ride-The-Lightning/RTL/releases/ + sudo -u rtl git reset --hard $RTLVERSION + # from https://github.com/Ride-The-Lightning/RTL/commits/master + # git checkout 917feebfa4fb583360c140e817c266649307ef72 + if [ -d "/home/rtl/RTL" ]; then + echo "# OK - RTL code copy looks good" + else + echo "# FAIL - code copy did not run correctly" + echo "# ABORT - RTL install" exit 1 - else - echo "# OK - RTL install looks good" - echo + fi + echo + + # install + echo "# Run: npm install" + export NG_CLI_ANALYTICS=false + sudo -u rtl npm install --only=prod + if ! [ $? -eq 0 ]; then + echo "# FAIL - npm install did not run correctly, aborting" + exit 1 + else + echo "# OK - RTL install looks good" + echo + fi fi - # setup nginx symlinks - if ! [ -f /etc/nginx/sites-available/rtl_ssl.conf ]; then - sudo cp /home/admin/assets/nginx/sites-available/rtl_ssl.conf /etc/nginx/sites-available/rtl_ssl.conf - fi - if ! [ -f /etc/nginx/sites-available/rtl_tor.conf ]; then - sudo cp /home/admin/assets/nginx/sites-available/rtl_tor.conf /etc/nginx/sites-available/rtl_tor.conf - fi - if ! [ -f /etc/nginx/sites-available/rtl_tor_ssl.conf ]; then - sudo cp /home/admin/assets/nginx/sites-available/rtl_tor_ssl.conf /etc/nginx/sites-available/rtl_tor_ssl.conf - fi - sudo ln -sf /etc/nginx/sites-available/rtl_ssl.conf /etc/nginx/sites-enabled/ - sudo ln -sf /etc/nginx/sites-available/rtl_tor.conf /etc/nginx/sites-enabled/ - sudo ln -sf /etc/nginx/sites-available/rtl_tor_ssl.conf /etc/nginx/sites-enabled/ - sudo nginx -t - sudo systemctl reload nginx - echo "# Updating Firewall" - sudo ufw allow 3000 comment 'RTL HTTP' - sudo ufw allow 3001 comment 'RTL HTTPS' + sudo ufw allow ${RTLHTTP} comment "${netprefix}${typeprefix}RTL HTTP" + sudo ufw allow $((RTLHTTP+1)) comment "${netprefix}${typeprefix}RTL HTTPS" echo + if [ $LNTYPE = lnd ];then echo "# Install service" echo "# Install RTL systemd for ${network} on ${chain}" - cat > /home/admin/RTL.service <

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 V`L2W!_)|b|Pvul)%cNfi{$H^}yx;%; delta 16707 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� zRknN$5p3oA7>s(DR9PqW)fj(3&(pKA+5!j+z8_lMby2FpWV?`Ea7td7z$HrCLDkM> zFhWWA;_?vvl*P^i*<3`~M9Am8Oqdln!k)B{BaQ`$`VDP@ zn^U=Y44DLUw$-7i4~1r|W)w#I6_tGQCFC{g!KVhMY@{d^%$1ot0e8Y^QmzpPQ^53M zA4YwTqbm;xPRRwPKUG4S`-*89;9Wo^1Li;17 zM%_wl2)DJD=c7<{lt0Ra!6&SeCXC`RUf_}GIv_JFX&V1bvwu9f*KpZ=M$qosigddDc2FWE+s5%@d1xI<;{`GAlAi zIAbef+7cbX2SfA}ZRC_pNy$HkVBvCAJ&1dh$;vai+>mzwyM~8XbM<3oq+l>_BWHiI zUsiuN-1dTQj(5YB2#;yw2z)oLJZK4f(o*5KH2LlvWVU<)bxWI1TU3a>9!q%gEt36c?x_YWRPYJ&paKpt?us zznsCnpg&DaDSnSdATdF&OZ*EI?4QZ%>E&y1cRpNT&H2NqG)`XQ$zYn0Dy_47NNMTs zwumS)^>@FI!Q|I=!o=D!VB-*wKfB`u#T~HB`lBh#I|*JCb7&!k-YdLJ0SWeCeFXWv zFyy1(qBI%6?a~TqV*g0T_9q6izo;JgsKJ0e;658-`MWFlbniA^$X{X*43|~_1)0qF zR?5F!*@R6v=u1PtF}}1?a5mw9XMxE%4FC=$hYXCoAkZ%lNyQvo4@Vu4O4_V)fx38fly zj@qBETSxm4C*H<3_bGuXc&*$r2~7N@3HFlI`=Ed=OgQJH0f$UeQ!_dM47%04CmeD? z$H=JocvBO0z3jDK_&Is>3W1$Lx~hEgPGsdIX23~B3q65^-W%WAg=|`arMR-i?J)97bwo=L+BOLW{=CYpC|vgJ*t^)UAR4;)m<`}BZw{f#t9c$X zO{AADu_VasK8mFjRFpkjX7&S>g%z-Y>3}VrOfXBau(Ebx5lPRA+V{AqG4-fEG$GTd zxo$E#RG^8s`Ma|+$N@mkBG;Erw6_DyOf*8w6ts_!cSHMU@w8HRJ03DKG0pF9eCML? zsE2%il*kp(Qc$o<-Caw(NGn<74?I|->^LdH`IJ~YTNT!7ZO(;v!MIpU?X8Mi8tW4} z=$Ejc0+XQ%U`1kM;Kcxd{AHIy;m&D0g|#{WRzo{PR78G4TLOD^08V7(3kC0gY(q8Ucc8ZloY }c_bsWtt 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 From 11bf41d3620a3f3163e248737005c3206df57ded Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 20 Sep 2021 21:20:20 +0200 Subject: [PATCH 1141/1295] #2264 remove DropBox Backup from menu --- CHANGES.md | 2 +- home.admin/00settingsMenuBasics.sh | 21 --------------------- home.admin/config.scripts/dropbox.upload.sh | 3 +++ 3 files changed, 4 insertions(+), 22 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 78cad5609..7ff51a39c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -18,13 +18,13 @@ - Update: BTC-RPC-Explorer v3.2.0 [details](https://github.com/janoside/btc-rpc-explorer/blob/master/CHANGELOG.md#v320) - Update: stacking-sats-kraken 0.4.4 [details](https://github.com/dennisreimann/stacking-sats-kraken/blob/master/README.md) - Update: BTCPayServer 1.2.3 [details](https://github.com/btcpayserver/btcpayserver/releases/tag/v1.2.3) - - Update: LND v0.13.1 [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.13.1-beta) - Update: RTL 0.11.2 [details](https://github.com/Ride-The-Lightning/RTL/releases/tag/v0.11.2) - Update: Lightning Terminal v0.5.0-alpha [details](https://github.com/lightninglabs/lightning-terminal/releases/tag/v0.5.0-alpha) - Update: Pool CLI v0.5.1-alpha [details](https://github.com/lightninglabs/pool/releases/tag/v0.5.1-alpha) - Update: Balance of Satoshis 10.7.8 (BOS) + keep data on reinstall [details](https://github.com/alexbosworth/balanceofsatoshis/blob/master/CHANGELOG.md#version-8010) - Update: Circuitbreaker v0.3.0 [details](https://github.com/lightningequipment/circuitbreaker/blob/master/README.md) +- Remove: DropBox Backup (its recommended to change to Nextcloud Backup) ## What's new in Version 1.7.0 of RaspiBlitz? diff --git a/home.admin/00settingsMenuBasics.sh b/home.admin/00settingsMenuBasics.sh index 4d31211b2..9693dfc4d 100755 --- a/home.admin/00settingsMenuBasics.sh +++ b/home.admin/00settingsMenuBasics.sh @@ -31,10 +31,6 @@ if [ "${lightning}" == "cln" ] || [ "${cln}" == "on" ]; then clnNode="on" fi -echo "# map dropboxbackup to on/off" -DropboxBackup="off" -if [ ${#dropboxBackupTarget} -gt 0 ]; then DropboxBackup="on"; fi - echo "map nextcloudbackup to on/off" NextcloudBackup="off" if [ $nextcloudBackupServer ] && [ $nextcloudBackupUser ] && [ $nextcloudBackupPassword ]; then NextcloudBackup="on"; fi @@ -136,7 +132,6 @@ if [ "${lndNode}" == "on" ]; then OPTIONS+=(c '-LND Circuitbreaker (firewall)' ${circuitbreaker}) OPTIONS+=(u '-LND Auto-Unlock' ${autoUnlock}) OPTIONS+=(x '-LND StaticChannelBackup on Nextcloud' ${NextcloudBackup}) - OPTIONS+=(d '-LND StaticChannelBackup DropBox' ${DropboxBackup}) OPTIONS+=(e '-LND StaticChannelBackup USB Drive' ${LocalBackup}) OPTIONS+=(l '-LND UPnP (AutoNAT)' ${autoNatDiscovery}) fi @@ -323,22 +318,6 @@ else echo "Circuitbreaker Setting unchanged." fi -# LND DropBox process choice -choice="off"; check=$(echo "${CHOICES}" | grep -c "d") -if [ ${check} -eq 1 ]; then choice="on"; fi -if [ "${DropboxBackup}" != "${choice}" ] && [ "${lndNode}" == "on" ]; then - echo "DropBox Setting changed .." - anychange=1 - sudo -u admin /home/admin/config.scripts/dropbox.upload.sh ${choice} - if [ "${choice}" = "on" ]; then - # doing initial upload so that user can see result - source /mnt/hdd/raspiblitz.conf - sudo /home/admin/config.scripts/dropbox.upload.sh upload ${dropboxBackupTarget} /mnt/hdd/lnd/data/chain/${network}/${chain}net/channel.backup - fi -else - echo "Dropbox backup setting unchanged." -fi - # Nextcloud process choice choice="off"; check=$(echo "${CHOICES}" | grep -c "x") if [ ${check} -eq 1 ]; then choice="on"; fi diff --git a/home.admin/config.scripts/dropbox.upload.sh b/home.admin/config.scripts/dropbox.upload.sh index 94747f3bd..cd4d3a416 100755 --- a/home.admin/config.scripts/dropbox.upload.sh +++ b/home.admin/config.scripts/dropbox.upload.sh @@ -1,5 +1,8 @@ #!/bin/bash +# DEPRECATED: https://github.com/rootzoll/raspiblitz/issues/2264#issuecomment-872655605 +# script will stay on v1.7.1 ... but should be removed after that + # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo "# script to upload a file to DropBox (without third party libs)" From 7f04d808131c2654ed4a2c27ac6d4bb548b0ef69 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 20 Sep 2021 21:26:36 +0200 Subject: [PATCH 1142/1295] #2290 add note about TEST & SIGNET to CHANGES --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index 7ff51a39c..c5ae541a2 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -9,6 +9,7 @@ - New: Suez - channel visualization for LND and CLN [details](https://github.com/prusnak/suez) - New: LND Static Channel Backup to Nextcloud - New: Allow SphinxApp to connect over Tor +- New: Parallel TESTNET & SIGNET servcies - Update: Bitcoin Core v22.0 [details](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-22.0.md) - Update: Specter Desktop 1.6.0 [details](https://github.com/cryptoadvance/specter-desktop/blob/master/README.md) - Update: JoinMarket v0.9.1 [details](https://github.com/JoinMarket-Org/joinmarket-clientserver/#joinmarket-clientserver) From 6c2873ec90192be329aa1186f797e0b974bc2e93 Mon Sep 17 00:00:00 2001 From: openoms Date: Tue, 21 Sep 2021 10:16:51 +0100 Subject: [PATCH 1143/1295] electrs: use v0.8.12 until #2548 is resolved move index-batch-size=10 to config --- CHANGES.md | 2 +- home.admin/config.scripts/bonus.electrs.sh | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index c5ae541a2..505dd712a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -14,7 +14,7 @@ - Update: Specter Desktop 1.6.0 [details](https://github.com/cryptoadvance/specter-desktop/blob/master/README.md) - Update: JoinMarket v0.9.1 [details](https://github.com/JoinMarket-Org/joinmarket-clientserver/#joinmarket-clientserver) - Update: JoininBox v0.6.0 [details](https://github.com/openoms/joininbox/tree/master#joininbox) -- Update: Electrum Server in Rust (electrs) v0.9.0-rc1 [details](https://github.com/romanz/electrs/blob/v0.9.0-rc1/RELEASE-NOTES.md) +- Update: Electrum Server in Rust (electrs) v0.8.12 [details](https://github.com/romanz/electrs/blob/v0.8.12/RELEASE-NOTES.md) - Update: Mempool 2.2.2 [details](https://github.com/mempool/mempool) - Update: BTC-RPC-Explorer v3.2.0 [details](https://github.com/janoside/btc-rpc-explorer/blob/master/CHANGELOG.md#v320) - Update: stacking-sats-kraken 0.4.4 [details](https://github.com/dennisreimann/stacking-sats-kraken/blob/master/README.md) diff --git a/home.admin/config.scripts/bonus.electrs.sh b/home.admin/config.scripts/bonus.electrs.sh index 614c6447f..f38a2b648 100755 --- a/home.admin/config.scripts/bonus.electrs.sh +++ b/home.admin/config.scripts/bonus.electrs.sh @@ -1,7 +1,7 @@ #!/bin/bash # https://github.com/romanz/electrs/blob/master/doc/usage.md -ELECTRSVERSION="v0.9.0-rc1" +ELECTRSVERSION="v0.8.12" # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then @@ -306,6 +306,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then verbose = 2 timestamp = true jsonrpc_import = true +index-batch-size=10 db_dir = \"/mnt/hdd/app-storage/electrs/db\" auth = \"$RPC_USER:$PASSWORD_B\" # allow BTC-RPC-explorer show tx-s for addresses with a history of more than 100 @@ -398,7 +399,7 @@ After=bitcoind.service [Service] WorkingDirectory=/home/electrs/electrs -ExecStart=/home/electrs/electrs/target/release/electrs --index-batch-size=10 --electrum-rpc-addr=\"0.0.0.0:50001\" +ExecStart=/home/electrs/electrs/target/release/electrs --electrum-rpc-addr=\"0.0.0.0:50001\" User=electrs Group=electrs Type=simple From c0d588dff658173d0dbc86fdcfca772609ab725a Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 21 Sep 2021 12:25:24 +0200 Subject: [PATCH 1144/1295] fix dotnet call --- home.admin/config.scripts/bonus.btcpayserver.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/bonus.btcpayserver.sh b/home.admin/config.scripts/bonus.btcpayserver.sh index 1e2673482..3de29b81c 100755 --- a/home.admin/config.scripts/bonus.btcpayserver.sh +++ b/home.admin/config.scripts/bonus.btcpayserver.sh @@ -522,7 +522,7 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then sudo systemctl disable nbxplorer sudo rm /etc/systemd/system/nbxplorer.service # clear dotnet cache - dotnet nuget locals all --clear + /home/btcpay/dotnet/dotnet nuget locals all --clear sudo rm -rf /tmp/NuGetScratch # remove dotnet sudo rm -rf /usr/share/dotnet From 9a246c05e25756c910926eb71700f96910b5c186 Mon Sep 17 00:00:00 2001 From: openoms Date: Tue, 21 Sep 2021 11:30:13 +0100 Subject: [PATCH 1145/1295] electrs: remove wait_duration_secs setting as discussed in: https://github.com/romanz/electrs/issues/495#issuecomment-923845230 and #2548 --- home.admin/config.scripts/bonus.electrs.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/home.admin/config.scripts/bonus.electrs.sh b/home.admin/config.scripts/bonus.electrs.sh index f38a2b648..c932b9359 100755 --- a/home.admin/config.scripts/bonus.electrs.sh +++ b/home.admin/config.scripts/bonus.electrs.sh @@ -311,8 +311,6 @@ db_dir = \"/mnt/hdd/app-storage/electrs/db\" auth = \"$RPC_USER:$PASSWORD_B\" # allow BTC-RPC-explorer show tx-s for addresses with a history of more than 100 txid_limit = 1000 -# https://github.com/Stadicus/RaspiBolt/issues/646 -wait_duration_secs = 20 server_banner = \"Welcome to electrs $ELECTRSVERSION - the Electrum Rust Server on your RaspiBlitz\" " | sudo tee /home/electrs/.electrs/config.toml sudo chmod 600 /home/electrs/.electrs/config.toml From 462361d34d00391c7d4dcadbd9260285ae59f4a2 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 21 Sep 2021 14:21:00 +0200 Subject: [PATCH 1146/1295] Update thunderhub v0.12.25 --- CHANGES.md | 1 + home.admin/config.scripts/bonus.thunderhub.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 505dd712a..0aa5f7db4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -22,6 +22,7 @@ - Update: LND v0.13.1 [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.13.1-beta) - Update: RTL 0.11.2 [details](https://github.com/Ride-The-Lightning/RTL/releases/tag/v0.11.2) - Update: Lightning Terminal v0.5.0-alpha [details](https://github.com/lightninglabs/lightning-terminal/releases/tag/v0.5.0-alpha) +- Update: Thunderhub v0.12.25 [details](https://github.com/apotdevin/thunderhub/releases/tag/v0.12.25) - Update: Pool CLI v0.5.1-alpha [details](https://github.com/lightninglabs/pool/releases/tag/v0.5.1-alpha) - Update: Balance of Satoshis 10.7.8 (BOS) + keep data on reinstall [details](https://github.com/alexbosworth/balanceofsatoshis/blob/master/CHANGELOG.md#version-8010) - Update: Circuitbreaker v0.3.0 [details](https://github.com/lightningequipment/circuitbreaker/blob/master/README.md) diff --git a/home.admin/config.scripts/bonus.thunderhub.sh b/home.admin/config.scripts/bonus.thunderhub.sh index 276bc3dc7..5b0552af0 100755 --- a/home.admin/config.scripts/bonus.thunderhub.sh +++ b/home.admin/config.scripts/bonus.thunderhub.sh @@ -1,6 +1,6 @@ #!/bin/bash -THUBVERSION="v0.12.13" +THUBVERSION="v0.12.25" # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then From 2cd16db544afdb1c3a2579cc36deb6a78965aff4 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 21 Sep 2021 15:42:59 +0200 Subject: [PATCH 1147/1295] fix specter configs path --- home.admin/config.scripts/bonus.specter.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/home.admin/config.scripts/bonus.specter.sh b/home.admin/config.scripts/bonus.specter.sh index e6b1b9fee..7ec67818b 100755 --- a/home.admin/config.scripts/bonus.specter.sh +++ b/home.admin/config.scripts/bonus.specter.sh @@ -155,7 +155,8 @@ EOF "fullpath": "/home/specter/.specter/nodes/raspiblitz_${chain}net.json" } EOF - sudo mv /home/admin/raspiblitz_${chain}net.json.json /home/specter/.specter/nodes/raspiblitz_${chain}net.json + sudo mkdir /home/specter/.specter/nodes + sudo mv /home/admin/raspiblitz_${chain}net.json /home/specter/.specter/nodes/raspiblitz_${chain}net.json sudo chown -R specter:specter /home/specter/.specter } From 487d3ef7607fc87d7fda059b89cf6814ab289e31 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 21 Sep 2021 16:51:08 +0200 Subject: [PATCH 1148/1295] fix specter config json --- home.admin/config.scripts/bonus.specter.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/bonus.specter.sh b/home.admin/config.scripts/bonus.specter.sh index 7ec67818b..ad6dfe5fb 100755 --- a/home.admin/config.scripts/bonus.specter.sh +++ b/home.admin/config.scripts/bonus.specter.sh @@ -123,7 +123,7 @@ function configure_specter { "only_tor": ${torOnly}, "tor_control_port": "${tor_control_port}", "tor_status": false, - "hwi_bridge_url": "/hwi/api/", + "hwi_bridge_url": "/hwi/api/" } EOF sudo mv /home/admin/config.json /home/specter/.specter/config.json From 8b1811f1e2b0cc8b1b88fd522aef2fb7101152cd Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 21 Sep 2021 17:51:27 +0200 Subject: [PATCH 1149/1295] add more debug for chantools PGP check --- home.admin/config.scripts/bonus.chantools.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.admin/config.scripts/bonus.chantools.sh b/home.admin/config.scripts/bonus.chantools.sh index 03b5012ad..148bc1d22 100644 --- a/home.admin/config.scripts/bonus.chantools.sh +++ b/home.admin/config.scripts/bonus.chantools.sh @@ -102,7 +102,9 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then fi gpg --import ./pgp_keys.asc sleep 3 + echo "# running: gpg --verify manifest-v${pinnedVersion}.txt.asc" verifyResult=$(gpg --verify manifest-v${pinnedVersion}.txt.asc 2>&1) + echo "# verifyResult(${verifyResult})" goodSignature=$(echo ${verifyResult} | grep 'Good signature' -c) echo "# goodSignature(${goodSignature})" correctKey=$(echo ${verifyResult} | tr -d " \t\n\r" | grep "${GPGcheck}" -c) From 780bc9450ad92096b052c02de50a89555ee2f970 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 21 Sep 2021 17:54:41 +0200 Subject: [PATCH 1150/1295] update chantools 0.9.3 --- CHANGES.md | 1 + home.admin/config.scripts/bonus.chantools.sh | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 0aa5f7db4..bf096a674 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -25,6 +25,7 @@ - Update: Thunderhub v0.12.25 [details](https://github.com/apotdevin/thunderhub/releases/tag/v0.12.25) - Update: Pool CLI v0.5.1-alpha [details](https://github.com/lightninglabs/pool/releases/tag/v0.5.1-alpha) - Update: Balance of Satoshis 10.7.8 (BOS) + keep data on reinstall [details](https://github.com/alexbosworth/balanceofsatoshis/blob/master/CHANGELOG.md#version-8010) +- Update: Channel Tools (chantools) v0.9.3 [details](https://github.com/guggero/chantools/blob/master/README.md) - Update: Circuitbreaker v0.3.0 [details](https://github.com/lightningequipment/circuitbreaker/blob/master/README.md) - Remove: DropBox Backup (its recommended to change to Nextcloud Backup) diff --git a/home.admin/config.scripts/bonus.chantools.sh b/home.admin/config.scripts/bonus.chantools.sh index 148bc1d22..248e7fd6b 100644 --- a/home.admin/config.scripts/bonus.chantools.sh +++ b/home.admin/config.scripts/bonus.chantools.sh @@ -5,7 +5,9 @@ # see https://github.com/guggero/chantools/releases lndVersion=$(lncli -v | cut -d " " -f 3 | cut -d"." -f2) -if [ $lndVersion -eq 12 ]; then +if [ $lndVersion -eq 13 ]; then + pinnedVersion="0.9.3" +elif [ $lndVersion -eq 12 ]; then pinnedVersion="0.8.2" elif [ $lndVersion -eq 11 ]; then pinnedVersion="0.7.1" From c0847a4255f91ccd0df5ad95b822602bdc70923e Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 21 Sep 2021 17:55:21 +0200 Subject: [PATCH 1151/1295] exit when lnd is not installed --- home.admin/config.scripts/bonus.chantools.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/config.scripts/bonus.chantools.sh b/home.admin/config.scripts/bonus.chantools.sh index 248e7fd6b..4ff14a7f6 100644 --- a/home.admin/config.scripts/bonus.chantools.sh +++ b/home.admin/config.scripts/bonus.chantools.sh @@ -14,6 +14,7 @@ elif [ $lndVersion -eq 11 ]; then else echo "# LND not installed or a version not tested with chantools" lncli -v + exit 1 fi # command info From 3734b8be4bed154814fd3d7ed3644131398a35c4 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 21 Sep 2021 18:02:49 +0200 Subject: [PATCH 1152/1295] adapt signature check --- home.admin/config.scripts/bonus.chantools.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/home.admin/config.scripts/bonus.chantools.sh b/home.admin/config.scripts/bonus.chantools.sh index 4ff14a7f6..41f5ac3be 100644 --- a/home.admin/config.scripts/bonus.chantools.sh +++ b/home.admin/config.scripts/bonus.chantools.sh @@ -85,7 +85,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then sudo -u admin wget -N https://github.com/guggero/chantools/releases/download/v${pinnedVersion}/${binaryName} # check binary was not manipulated (checksum test) - sudo -u admin wget -N https://github.com/guggero/chantools/releases/download/v${pinnedVersion}/manifest-v${pinnedVersion}.txt.asc + sudo -u admin wget -N https://github.com/guggero/chantools/releases/download/v${pinnedVersion}/manifest-v${pinnedVersion}.txt.sig sudo -u admin wget --no-check-certificate -N -O "${downloadDir}/pgp_keys.asc" ${PGPpkeys} binaryChecksum=$(sha256sum ${binaryName} | cut -d " " -f1) if [ "${binaryChecksum}" != "${SHA256}" ]; then @@ -105,8 +105,8 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then fi gpg --import ./pgp_keys.asc sleep 3 - echo "# running: gpg --verify manifest-v${pinnedVersion}.txt.asc" - verifyResult=$(gpg --verify manifest-v${pinnedVersion}.txt.asc 2>&1) + echo "# running: gpg --verify manifest-v${pinnedVersion}.txt.sig" + verifyResult=$(gpg --verify manifest-v${pinnedVersion}.txt.sig 2>&1) echo "# verifyResult(${verifyResult})" goodSignature=$(echo ${verifyResult} | grep 'Good signature' -c) echo "# goodSignature(${goodSignature})" From 9d97c17ef2138f5fd5d2a9cceaff8fcc5e35dc4b Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 21 Sep 2021 18:56:48 +0200 Subject: [PATCH 1153/1295] move change of service after loop --- home.admin/_bootstrap.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index db623e7dd..a1db6a844 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -665,13 +665,6 @@ if [ ${isMounted} -eq 0 ]; then sed -i "s/^message=.*/message='Setup Done'/g" ${infoFile} fi - # make sure for future starts that blockchain service gets started after bootstrap - # so deamon reloas needed ... system will go into reboot after last loop - # needs to be after wait loop because otherwise the "restart" on COPY OVER LAN will not work - echo "# Updating service ${network}d.service ..." >> $logFile - sudo sed -i "s/^Wants=.*/Wants=bootstrap.service/g" /etc/systemd/system/${network}d.service - sudo sed -i "s/^After=.*/After=bootstrap.service/g" /etc/systemd/system/${network}d.service - source ${infoFile} echo "WAIT LOOP: FINAL SETUP .. see controlFinalDialog.sh" >> $logFile until [ "${state}" == "ready" ] @@ -694,6 +687,13 @@ if [ ${isMounted} -eq 0 ]; then ######################################## # AFTER FINAL SETUP TASKS + # make sure for future starts that blockchain service gets started after bootstrap + # so deamon reloas needed ... system will go into reboot after last loop + # needs to be after wait loop because otherwise the "restart" on COPY OVER LAN will not work + echo "# Updating service ${network}d.service ..." >> $logFile + sudo sed -i "s/^Wants=.*/Wants=bootstrap.service/g" /etc/systemd/system/${network}d.service + sudo sed -i "s/^After=.*/After=bootstrap.service/g" /etc/systemd/system/${network}d.service + # delete setup data from RAM sudo rm ${setupFile} From 0f54b81d65d80f917831b28e5e1d8445cb51dfe4 Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Tue, 21 Sep 2021 18:38:21 +0100 Subject: [PATCH 1154/1295] electrs update and fix status (#2562) --- home.admin/config.scripts/bonus.electrs.sh | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/home.admin/config.scripts/bonus.electrs.sh b/home.admin/config.scripts/bonus.electrs.sh index c932b9359..344e61b4f 100755 --- a/home.admin/config.scripts/bonus.electrs.sh +++ b/home.admin/config.scripts/bonus.electrs.sh @@ -1,7 +1,9 @@ #!/bin/bash -# https://github.com/romanz/electrs/blob/master/doc/usage.md -ELECTRSVERSION="v0.8.12" +# https://github.com/romanz/electrs/releases +#ELECTRSVERSION="v0.9.0-rc1" +# https://github.com/romanz/electrs/commits/master +ELECTRSVERSION="3041e89cd2fb377541b929d852ef6298c2d4e60a" # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then @@ -39,7 +41,7 @@ if [ "$1" = "status" ]; then if [ ${serviceRunning} -eq 1 ]; then # Experimental try to get sync Info - syncedToBlock=$(sudo journalctl -u electrs --no-pager -n2000 | grep "new headers from height" | tail -n 1 | cut -d " " -f 16 | sed 's/[^0-9]*//g') + syncedToBlock=$(sudo journalctl -u electrs --no-pager -n2000 | grep "height=" | tail -n1| cut -d= -f3) blockchainHeight=$(sudo -u bitcoin ${network}-cli getblockchaininfo 2>/dev/null | jq -r '.headers' | sed 's/[^0-9]*//g') lastBlockchainHeight=$(($blockchainHeight -1)) syncProgress=0 @@ -91,7 +93,7 @@ if [ "$1" = "status" ]; then # no answer on that port echo "publicTCPPortAnswering=0" fi - echo "portHTTP='50002'" + echo "portSSL='50002'" localPortRunning=$(sudo netstat -an | grep -c '0.0.0.0:50002') echo "localHTTPPortActive=${localPortRunning}" publicPortRunning=$(nc -z -w6 ${publicip} 50002 2>/dev/null; echo $?) @@ -104,13 +106,13 @@ if [ "$1" = "status" ]; then fi # add TOR info if [ "${runBehindTor}" == "on" ]; then - echo "TORrunning=1" + echo "TorRunning=1" if [ "$2" = "showAddress" ]; then TORaddress=$(sudo cat /mnt/hdd/tor/electrs/hostname) echo "TORaddress='${TORaddress}'" fi else - echo "TORrunning=0" + echo "TorRunning=0" fi # check Nginx nginxTest=$(sudo nginx -t 2>&1 | grep -c "test is successful") @@ -193,12 +195,12 @@ Check 'sudo nginx -t' for a detailed error message. echo echo "On Network Settings > Server menu:" echo "- deactivate automatic server selection" - echo "- as manual server set '${localip}' & '${portHTTP}'" + echo "- as manual server set '${localip}' & '${portSSL}'" echo "- laptop and RaspiBlitz need to be within same local network" echo echo "To start directly from laptop terminal use:" - echo "electrum --oneserver --server ${localip}:${portHTTP}:s" - if [ ${TORrunning} -eq 1 ]; then + echo "electrum --oneserver --server ${localip}:${portSSL}:s" + if [ ${TorRunning} -eq 1 ]; then echo echo "The Tor Hidden Service address for electrs is (see LCD for QR code):" echo "${TORaddress}" From 5cb99777826529cea02df5e2fcb47d1bb15f49c6 Mon Sep 17 00:00:00 2001 From: openoms Date: Tue, 21 Sep 2021 19:57:45 +0100 Subject: [PATCH 1155/1295] specter: fix config, add parallel networks #2563 --- home.admin/config.scripts/bonus.specter.sh | 72 ++++++++++++++++------ 1 file changed, 52 insertions(+), 20 deletions(-) diff --git a/home.admin/config.scripts/bonus.specter.sh b/home.admin/config.scripts/bonus.specter.sh index e6b1b9fee..83c240155 100755 --- a/home.admin/config.scripts/bonus.specter.sh +++ b/home.admin/config.scripts/bonus.specter.sh @@ -6,13 +6,18 @@ pinnedVersion="1.6.0" # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo "config script to switch Specter Desktop on, off, configure or update" - echo "bonus.specter.sh [status|on|off|config|update]" + echo "bonus.specter.sh [status|on|off|config|update] " echo "installing the version $pinnedVersion by default" exit 1 fi source /mnt/hdd/raspiblitz.conf -echo "# bonus.specter.sh $1" +echo "# bonus.specter.sh $1 $2" + +if [ $# -gt 1 ];then + CHAIN=$2 + chain=${CHAIN::-3} +fi # get status key/values if [ "$1" = "status" ]; then @@ -115,34 +120,56 @@ function configure_specter { "auth": { "method": "rpcpasswordaspin", "password_min_chars": 6, - "rate_limit": "10", - "registration_link_timeout": "1" + "rate_limit": 10, + "registration_link_timeout": 1 }, "active_node_alias": "raspiblitz_${chain}net", "proxy_url": "${proxy}", - "only_tor": ${torOnly}, + "only_tor": "${torOnly}", "tor_control_port": "${tor_control_port}", - "tor_status": false, - "hwi_bridge_url": "/hwi/api/", + "tor_status": true, + "hwi_bridge_url": "/hwi/api/" } EOF + sudo mkdir -p /home/specter/.specter/nodes sudo mv /home/admin/config.json /home/specter/.specter/config.json - sudo chown -R specter:specter /home/specter/.specter + sudo chown -RL specter:specter /home/specter/ echo "# Adding the raspiblitz_${chain}net node to Specter" RPCUSER=$(sudo cat /mnt/hdd/${network}/${network}.conf | grep rpcuser | cut -c 9-) PASSWORD_B=$(sudo cat /mnt/hdd/${network}/${network}.conf | grep rpcpassword | cut -c 13-) - if [ ${chain} = "main" ];then - portprefix="" - elif [ ${chain} = "test" ];then - portprefix=1 - elif [ ${chain} = "sig" ];then - portprefix=3 - fi - PORT="${portprefix}8332" - cat > /home/admin/raspiblitz_${chain}net.json < /home/admin/default.json < /home/admin/raspiblitz_${chain}net.json < Date: Tue, 21 Sep 2021 20:59:13 +0200 Subject: [PATCH 1156/1295] change order --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index bf096a674..7e6c72d4f 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,7 @@ - New: Allow SphinxApp to connect over Tor - New: Parallel TESTNET & SIGNET servcies - Update: Bitcoin Core v22.0 [details](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-22.0.md) +- Update: LND v0.13.1 [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.13.1-beta) - Update: Specter Desktop 1.6.0 [details](https://github.com/cryptoadvance/specter-desktop/blob/master/README.md) - Update: JoinMarket v0.9.1 [details](https://github.com/JoinMarket-Org/joinmarket-clientserver/#joinmarket-clientserver) - Update: JoininBox v0.6.0 [details](https://github.com/openoms/joininbox/tree/master#joininbox) @@ -19,7 +20,6 @@ - Update: BTC-RPC-Explorer v3.2.0 [details](https://github.com/janoside/btc-rpc-explorer/blob/master/CHANGELOG.md#v320) - Update: stacking-sats-kraken 0.4.4 [details](https://github.com/dennisreimann/stacking-sats-kraken/blob/master/README.md) - Update: BTCPayServer 1.2.3 [details](https://github.com/btcpayserver/btcpayserver/releases/tag/v1.2.3) -- Update: LND v0.13.1 [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.13.1-beta) - Update: RTL 0.11.2 [details](https://github.com/Ride-The-Lightning/RTL/releases/tag/v0.11.2) - Update: Lightning Terminal v0.5.0-alpha [details](https://github.com/lightninglabs/lightning-terminal/releases/tag/v0.5.0-alpha) - Update: Thunderhub v0.12.25 [details](https://github.com/apotdevin/thunderhub/releases/tag/v0.12.25) From 27d476a2dcbefb192380961afd5d32f56363b86c Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 21 Sep 2021 21:36:06 +0200 Subject: [PATCH 1157/1295] #1126 add refactored setup process to changes --- CHANGES.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 7e6c72d4f..c5bb62e5c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -6,10 +6,11 @@ - New: C-lightningREST v0.5.1 [details](https://github.com/Ride-The-Lightning/c-lightning-REST/releases/tag/v0.5.1) - New: CLN plugin: Sparko [details](https://github.com/fiatjaf/sparko) - New: CLN plugin: CLBOSS The C-Lightning Node Manager [details](https://github.com/ZmnSCPxj/clboss#clboss-the-c-lightning-node-manager) +- New: Refactored Setup-Process [details](https://github.com/rootzoll/raspiblitz/issues/1126#issuecomment-829757665) - New: Suez - channel visualization for LND and CLN [details](https://github.com/prusnak/suez) - New: LND Static Channel Backup to Nextcloud - New: Allow SphinxApp to connect over Tor -- New: Parallel TESTNET & SIGNET servcies +- New: Parallel TESTNET & SIGNET servcies - Update: Bitcoin Core v22.0 [details](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-22.0.md) - Update: LND v0.13.1 [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.13.1-beta) - Update: Specter Desktop 1.6.0 [details](https://github.com/cryptoadvance/specter-desktop/blob/master/README.md) From a58d5ff4d5226f6d67c476bc2d40050b0caea44f Mon Sep 17 00:00:00 2001 From: openoms Date: Wed, 22 Sep 2021 14:37:00 +0100 Subject: [PATCH 1158/1295] typo fix --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index c5bb62e5c..b89a3f674 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -10,7 +10,7 @@ - New: Suez - channel visualization for LND and CLN [details](https://github.com/prusnak/suez) - New: LND Static Channel Backup to Nextcloud - New: Allow SphinxApp to connect over Tor -- New: Parallel TESTNET & SIGNET servcies +- New: Parallel TESTNET & SIGNET services - Update: Bitcoin Core v22.0 [details](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-22.0.md) - Update: LND v0.13.1 [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.13.1-beta) - Update: Specter Desktop 1.6.0 [details](https://github.com/cryptoadvance/specter-desktop/blob/master/README.md) From 716d027737feeccc5fbfed5719b1901a6c218a53 Mon Sep 17 00:00:00 2001 From: openoms Date: Wed, 22 Sep 2021 14:37:45 +0100 Subject: [PATCH 1159/1295] cln.install refactor and fix typos --- home.admin/config.scripts/cln.install.sh | 64 ++++++++++++------------ 1 file changed, 31 insertions(+), 33 deletions(-) diff --git a/home.admin/config.scripts/cln.install.sh b/home.admin/config.scripts/cln.install.sh index c5f9d03c5..578a6ac84 100644 --- a/home.admin/config.scripts/cln.install.sh +++ b/home.admin/config.scripts/cln.install.sh @@ -23,7 +23,7 @@ if [ $# -eq 0 ]||[ "$1" = "-h" ]||[ "$1" = "--help" ];then echo "usage:" echo "cln.install.sh on " echo "cln.install.sh off " - echo "cln.install.sh [update |experimental|testPR ]" + echo "cln.install.sh [update |testPR ]" echo "cln.install.sh display-seed " echo exit 1 @@ -61,8 +61,7 @@ if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = experimental ]||[ "$1" = testPR ]; exit 1 fi - if [ ! -f /usr/local/bin/lightningd ]||[ "$1" = update ]||[ "$1" = experimental ]||[ "$1" = testPR ];then - + if [ ! -f /usr/local/bin/lightningd ]||[ "$1" = update ]||[ "$1" = testPR ];then ######################## # Install dependencies # @@ -84,7 +83,7 @@ if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = experimental ]||[ "$1" = testPR ]; #################################### cd /home/bitcoin || exit 1 - if [ "$1" = "update" ] || [ "$1" = "testPR" ] || [ "$1" = "experimental" ]; then + if [ "$1" = "update" ]||[ "$1" = "testPR" ]||[ "$1" = "experimental" ];then echo echo "# Deleting the old source code" sudo rm -rf lightning @@ -94,37 +93,35 @@ if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = experimental ]||[ "$1" = testPR ]; echo sudo -u bitcoin git clone https://github.com/ElementsProject/lightning.git cd lightning || exit 1 + echo - if [ "$1" = "testPR" ]; then + if [ "$1" = "update" ]; then + if [ $# -gt 1 ];then + CLVERSION=$2 + echo "# Installing the version $CLVERSION" + else + echo "# Updating to the latest commit in:" + echo "# https://github.com/ElementsProject/lightning" + fi + + elif [ "$1" = "testPR" ]; then PRnumber=$2 || exit 1 - echo echo "# Using the PR:" echo "# https://github.com/ElementsProject/lightning/pull/$PRnumber" sudo -u bitcoin git fetch origin pull/$PRnumber/head:pr$PRnumber || exit 1 sudo -u bitcoin git checkout pr$PRnumber || exit 1 - echo "# Building with EXPERIMENTAL_FEATURES enabled" - echo - sudo -u bitcoin ./configure --enable-experimental-features - elif [ "$1" = "experimental" ]; then - echo - echo "# Updating to the latest commit in:" - echo "# https://github.com/ElementsProject/lightning" - echo - echo "# Building with EXPERIMENTAL_FEATURES enabled" - sudo -u bitcoin ./configure --enable-experimental-features + else - if [ "$1" = "update" ]; then - CLVERSION=$2 - echo "# Updating to the version $CLVERSION" - fi + echo "# Installing the version $CLVERSION" sudo -u bitcoin git reset --hard $CLVERSION - sudo -u bitcoin ./configure fi + echo "# Building with EXPERIMENTAL_FEATURES enabled" + echo + sudo -u bitcoin ./configure --enable-experimental-features + echo currentCLversion=$(cd /home/bitcoin/lightning 2>/dev/null; \ git describe --tags 2>/dev/null) - sudo -u bitcoin ./configure - echo echo "# Building from source C-lightning $currentCLversion" echo sudo -u bitcoin make @@ -136,6 +133,7 @@ if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = experimental ]||[ "$1" = testPR ]; sudo make install || exit 1 # clean up # cd .. && rm -rf lightning + else installedVersion=$(sudo -u bitcoin /usr/local/bin/lightningd --version) echo "# C-lightning ${installedVersion} is already installed" @@ -223,12 +221,12 @@ alias ${netprefix}clnconf=\"sudo\ echo "${netprefix}lightning-cli help" echo - # setting value in raspi blitz config + # setting value in the raspiblitz.conf sudo sed -i "s/^${netprefix}cln=.*/${netprefix}cln=on/g" /mnt/hdd/raspiblitz.conf - # if this is the first lighting mainnet turned on - make default + # if this is the first lightning mainnet turned on - make default if [ "${CHAIN}" == "mainnet" ] && [ "${lightning}" == "" ]; then - echo "# CLN is now default lighthning implementation" + echo "# CLN is now the default lightning implementation" sudo sed -i "s/^lightning=.*/lightning=cln/g" /mnt/hdd/raspiblitz.conf fi @@ -243,7 +241,7 @@ if [ "$1" = "display-seed" ]; then exit 1 fi - # get network and aliasses from second parameter (default mainnet) + # get network and aliases from second parameter (default mainnet) displayNetwork=$2 if [ "${displayNetwork}" == "" ]; then displayNetwork="mainnet" @@ -252,9 +250,9 @@ if [ "$1" = "display-seed" ]; then # check if seedword file exists seedwordFile="/home/bitcoin/.lightning/${CLNETWORK}/seedwords.info" - echo "# seewordFile(${seedwordFile})" + echo "# seedwordFile(${seedwordFile})" seedwordFileExists=$(ls ${seedwordFile} 2>/dev/null | grep -c "seedwords.info") - echo "# seewordFileExists(${seewordFileExists})" + echo "# seedwordFileExists(${seewordFileExists})" if [ "${seedwordFileExists}" == "1" ]; then source ${seedwordFile} #echo "# seedwords(${seedwords})" @@ -270,7 +268,7 @@ if [ "$1" = "display-seed" ]; then fi done else - hsmFile="/home/bitcoin/.lightning/${CLNETWORK}/hsm_secret" + # hsmFile="/home/bitcoin/.lightning/${CLNETWORK}/hsm_secret" whiptail --title "C-Lightning ${displayNetwork} Wallet Info" --msgbox "Your C-Lightning ${displayNetwork} wallet was already created before - there are no seed words available.\n\nTo secure your wallet secret you can manually backup the file: /home/bitcoin/.lightning/${CLNETWORK}/hsm_secret" 11 76 fi @@ -289,15 +287,15 @@ if [ "$1" = "off" ];then sudo rm -f /usr/local/bin/lightningd sudo rm -f /usr/local/bin/lightning-cli fi - # setting value in raspi blitz config + # setting value in the raspiblitz.conf sudo sed -i "s/^${netprefix}cln=.*/${netprefix}cln=off/g" /mnt/hdd/raspiblitz.conf # if cln mainnet was default - remove if [ "${CHAIN}" == "mainnet" ] && [ "${lightning}" == "cln" ]; then - echo "# CLN is REMOVED as default lightning implementation" + echo "# CLN is REMOVED as the default lightning implementation" sudo sed -i "s/^lightning=.*/lightning=/g" /mnt/hdd/raspiblitz.conf if [ "${lnd}" == "on" ]; then - echo "# LND is now new default lightning implementation" + echo "# LND is now the new default lightning implementation" sudo sed -i "s/^lightning=.*/lightning=lnd/g" /mnt/hdd/raspiblitz.conf fi fi From 90421b1c3b33860ec57a765e4718419828aeefcd Mon Sep 17 00:00:00 2001 From: openoms Date: Wed, 22 Sep 2021 15:27:08 +0100 Subject: [PATCH 1160/1295] specter: install with apt-get, pip and conf after --- home.admin/config.scripts/bonus.specter.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/home.admin/config.scripts/bonus.specter.sh b/home.admin/config.scripts/bonus.specter.sh index 83c240155..6a34490dc 100755 --- a/home.admin/config.scripts/bonus.specter.sh +++ b/home.admin/config.scripts/bonus.specter.sh @@ -208,7 +208,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then echo "# --> Installing prerequisites" sudo apt update - sudo apt install -y libusb-1.0.0-dev libudev-dev virtualenv libffi-dev + sudo apt-get install -y virtualenv libffi-dev libusb-1.0.0-dev libudev-dev sudo adduser --disabled-password --gecos "" specter @@ -225,15 +225,15 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then sudo ln -s /mnt/hdd/app-data/.specter /home/specter/ 2>/dev/null sudo chown -R specter:specter /home/specter/.specter - # activating Authentication here ... - configure_specter - echo "# --> creating a virtualenv" sudo -u specter virtualenv --python=python3 /home/specter/.env echo "# --> pip-installing specter" - sudo -u specter /home/specter/.env/bin/python3 -m pip install --upgrade cryptoadvance.specter==$pinnedVersion - + sudo -u specter /home/specter/.env/bin/python3 -m pip install --upgrade cryptoadvance.specter==$pinnedVersion || exit 1 + + # activating Authentication here ... + configure_specter + # Mandatory as the camera doesn't work without https echo "# --> Creating self-signed certificate" openssl req -x509 -newkey rsa:4096 -nodes -out /tmp/cert.pem -keyout /tmp/key.pem -days 365 -subj "/C=US/ST=Nooneknows/L=Springfield/O=Dis/CN=www.fakeurl.com" @@ -246,7 +246,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then echo "# --> Updating Firewall" sudo ufw allow 25441 comment 'specter' sudo ufw --force enable - echo "" + echo echo "# --> Installing udev-rules for hardware-wallets" From 8face7227353a7ce4446f80d96bb31ee293b3dcb Mon Sep 17 00:00:00 2001 From: openoms Date: Wed, 22 Sep 2021 16:06:37 +0100 Subject: [PATCH 1161/1295] cln: improve help outputs --- home.admin/config.scripts/cln.backup.sh | 26 ++++++++------- home.admin/config.scripts/cln.hsmtool.sh | 32 +++++++++---------- .../config.scripts/cln.install-service.sh | 12 +++++-- home.admin/config.scripts/cln.install.sh | 6 ++-- home.admin/config.scripts/cln.rest.sh | 7 ++-- home.admin/config.scripts/cln.setname.sh | 8 +++-- 6 files changed, 50 insertions(+), 41 deletions(-) diff --git a/home.admin/config.scripts/cln.backup.sh b/home.admin/config.scripts/cln.backup.sh index b681d37d6..ce3ea4cbc 100755 --- a/home.admin/config.scripts/cln.backup.sh +++ b/home.admin/config.scripts/cln.backup.sh @@ -2,18 +2,20 @@ # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then - echo "# ---------------------------------------------------" - echo "# CLN RESCUE FILE (tar.gz of complete cln directory)" - echo "# ---------------------------------------------------" - echo "# cln.backup.sh cln-export" - echo "# cln.backup.sh cln-export-gui" - echo "# cln.backup.sh cln-import [file]" - echo "# cln.backup.sh cln-import-gui [setup|production] [?resultfile]" - echo "# ---------------------------------------------------" - echo "# SEED WORDS" - echo "# ---------------------------------------------------" - echo "# cln.backup.sh seed-export-gui [lndseeddata]" - echo "# cln.backup.sh seed-import-gui [resultfile]" + echo + echo "---------------------------------------------------" + echo "CLN RESCUE FILE (tar.gz of complete cln directory)" + echo "---------------------------------------------------" + echo "cln.backup.sh cln-export" + echo "cln.backup.sh cln-export-gui" + echo "cln.backup.sh cln-import [file]" + echo "cln.backup.sh cln-import-gui [setup|production] [?resultfile]" + echo "---------------------------------------------------" + echo "SEED WORDS" + echo "---------------------------------------------------" + echo "cln.backup.sh seed-export-gui [lndseeddata]" + echo "cln.backup.sh seed-import-gui [resultfile]" + echo exit 1 fi diff --git a/home.admin/config.scripts/cln.hsmtool.sh b/home.admin/config.scripts/cln.hsmtool.sh index bad138490..d3ae4f57b 100644 --- a/home.admin/config.scripts/cln.hsmtool.sh +++ b/home.admin/config.scripts/cln.hsmtool.sh @@ -9,26 +9,26 @@ if [ $# -lt 1 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]||\ ! echo "$@" | grep -Eq "new|seed|unlock|lock|encrypt|decrypt|autounlock-on|autounlock-off|change-password" ;then echo - echo "# create new wallet or import seed" - echo "# unlock/lock, encrypt, decrypt, set autounlock or change password for the hsm_secret" + echo "Create new wallet or import seed" + echo "Unlock/lock, encrypt, decrypt, set autounlock or change password for the hsm_secret" echo - echo "# usage:" - echo "# Create new wallet" - echo "# cln.hsmtool.sh [new] [mainnet|testnet|signet] [?seedPassword]" - echo "# cln.hsmtool.sh [new-force] [mainnet|testnet|signet] [?seedPassword]" - echo "# There will be no seedPassword(passphrase) used by default" - echo "# new-force will delete any old wallet and will work without dialog" + echo "Usage:" + echo "Create new wallet:" + echo "cln.hsmtool.sh [new] [mainnet|testnet|signet] [?seedPassword]" + echo "cln.hsmtool.sh [new-force] [mainnet|testnet|signet] [?seedPassword]" + echo "There will be no seedPassword(passphrase) used by default" + echo "new-force will delete any old wallet and will work without dialog" echo - echo "# cln.hsmtool.sh [seed] [mainnet|testnet|signet] [\"space-separated-seed-words\"] [?seedPassword]" - echo "# cln.hsmtool.sh [seed-force] [mainnet|testnet|signet] [\"space-separated-seed-words\"] [?seedPassword]" - echo "# the new hsm_secret will be not encrypted if no NewPassword is given" - echo "# seed-force will delete any old wallet and will work without dialog" + echo "cln.hsmtool.sh [seed] [mainnet|testnet|signet] [\"space-separated-seed-words\"] [?seedPassword]" + echo "cln.hsmtool.sh [seed-force] [mainnet|testnet|signet] [\"space-separated-seed-words\"] [?seedPassword]" + echo "The new hsm_secret will be not encrypted if no NewPassword is given" + echo "seed-force will delete any old wallet and will work without dialog" echo - echo "# cln.hsmtool.sh [unlock|lock] " - echo "# cln.hsmtool.sh [encrypt|decrypt] " - echo "# cln.hsmtool.sh [autounlock-on|autounlock-off] " + echo "cln.hsmtool.sh [unlock|lock] " + echo "cln.hsmtool.sh [encrypt|decrypt] " + echo "cln.hsmtool.sh [autounlock-on|autounlock-off] " echo - echo "# cln.hsmtool.sh [change-password] " + echo "cln.hsmtool.sh [change-password] " echo exit 1 fi diff --git a/home.admin/config.scripts/cln.install-service.sh b/home.admin/config.scripts/cln.install-service.sh index 4afb03101..ddb367426 100644 --- a/home.admin/config.scripts/cln.install-service.sh +++ b/home.admin/config.scripts/cln.install-service.sh @@ -1,8 +1,14 @@ #!/bin/bash -# script to set up or update the CLN systemd service -# usage: -# /home/admin/config.scripts/cln.install-service.sh $CHAIN +# help +if [ "$1" = "-h" ]||[ "$1" = "--help" ];then + echo + echo "Script to set up or update the C-lightning systemd service" + echo "Usage:" + echo "/home/admin/config.scripts/cln.install-service.sh " + echo + exit 1 +fi # source <(/home/admin/config.scripts/network.aliases.sh getvars cln ) source <(/home/admin/config.scripts/network.aliases.sh getvars cln $1) diff --git a/home.admin/config.scripts/cln.install.sh b/home.admin/config.scripts/cln.install.sh index 578a6ac84..3c852279b 100644 --- a/home.admin/config.scripts/cln.install.sh +++ b/home.admin/config.scripts/cln.install.sh @@ -16,11 +16,11 @@ source /mnt/hdd/raspiblitz.conf if [ $# -eq 0 ]||[ "$1" = "-h" ]||[ "$1" = "--help" ];then echo echo "C-lightning install script" - echo "the default version is: $CLVERSION" - echo "setting up on ${chain}net unless otherwise specified" + echo "The default version is: $CLVERSION" + echo "Setting up on ${chain}net unless otherwise specified" echo "mainnet / testnet / signet instances can run parallel" echo - echo "usage:" + echo "Usage:" echo "cln.install.sh on " echo "cln.install.sh off " echo "cln.install.sh [update |testPR ]" diff --git a/home.admin/config.scripts/cln.rest.sh b/home.admin/config.scripts/cln.rest.sh index 399eb872f..ed8077f23 100644 --- a/home.admin/config.scripts/cln.rest.sh +++ b/home.admin/config.scripts/cln.rest.sh @@ -7,12 +7,11 @@ CLRESTVERSION="v0.5.1" if [ $# -eq 0 ]||[ "$1" = "-h" ]||[ "$1" = "--help" ];then echo echo "C-lightning-REST install script" - echo "the default version is: $CLRESTVERSION" - echo "setting up on ${chain}net unless otherwise specified" + echo "The default version is: $CLRESTVERSION" echo "mainnet | testnet | signet instances can run parallel" - echo "the same macaroon and certs will be used for the parallel networks" + echo "The same macaroon and certs will be used for the parallel networks" echo - echo "usage:" + echo "Usage:" echo "cln.rest.sh [on|off|connect] " echo exit 1 diff --git a/home.admin/config.scripts/cln.setname.sh b/home.admin/config.scripts/cln.setname.sh index f38a16913..7f55e3061 100644 --- a/home.admin/config.scripts/cln.setname.sh +++ b/home.admin/config.scripts/cln.setname.sh @@ -2,9 +2,11 @@ # command info if [ "$1" = "-h" ] || [ "$1" = "-help" ]; then - echo "small config script to set alias of the C-lightning node " - echo "cln.setname.sh [mainnet|testnet|signet] [?newName]" - exit 1 + echo + echo "Config script to set the alias of the C-lightning node" + echo "cln.setname.sh [mainnet|testnet|signet] [?newName]" + echo + exit 1 fi # 1. parameter [?newName] From 6cbbb7754fa9324e34b8c67855251876e508ad38 Mon Sep 17 00:00:00 2001 From: openoms Date: Wed, 22 Sep 2021 17:47:34 +0100 Subject: [PATCH 1162/1295] Lightning Terminal update v0.5.1-alpha --- CHANGES.md | 1 + home.admin/config.scripts/bonus.lit.sh | 11 +++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index b89a3f674..77c84ab3b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -21,6 +21,7 @@ - Update: BTC-RPC-Explorer v3.2.0 [details](https://github.com/janoside/btc-rpc-explorer/blob/master/CHANGELOG.md#v320) - Update: stacking-sats-kraken 0.4.4 [details](https://github.com/dennisreimann/stacking-sats-kraken/blob/master/README.md) - Update: BTCPayServer 1.2.3 [details](https://github.com/btcpayserver/btcpayserver/releases/tag/v1.2.3) +- Update: Lightning Terminal v0.5.1-alpha [details](https://github.com/lightninglabs/lightning-terminal/releases/tag/v0.5.1-alpha) - Update: RTL 0.11.2 [details](https://github.com/Ride-The-Lightning/RTL/releases/tag/v0.11.2) - Update: Lightning Terminal v0.5.0-alpha [details](https://github.com/lightninglabs/lightning-terminal/releases/tag/v0.5.0-alpha) - Update: Thunderhub v0.12.25 [details](https://github.com/apotdevin/thunderhub/releases/tag/v0.12.25) diff --git a/home.admin/config.scripts/bonus.lit.sh b/home.admin/config.scripts/bonus.lit.sh index bd86b745d..86446884e 100644 --- a/home.admin/config.scripts/bonus.lit.sh +++ b/home.admin/config.scripts/bonus.lit.sh @@ -1,7 +1,7 @@ #!/bin/bash # https://github.com/lightninglabs/lightning-terminal/releases -LITVERSION="0.5.0-alpha" +LITVERSION="0.5.1-alpha" # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then @@ -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="roasbeef" +PGPsigner="guggero" if [ $PGPsigner = guggero ];then PGPpkeys="https://keybase.io/guggero/pgp_keys.asc" @@ -93,8 +93,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then if [ ${isInstalled} -eq 0 ]; then # create dedicated user - sudo adduser --disabled-password --gecos "" lit || exit 1 - + sudo adduser --disabled-password --gecos "" lit # make sure symlink to central app-data directory exists sudo rm -rf /home/lit/.lnd # not a symlink.. delete it silently # create symlink @@ -188,7 +187,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then wget -N https://github.com/lightninglabs/lightning-terminal/releases/download/v${LITVERSION}/${binaryName} echo "# check binary was not manipulated (checksum test)" - wget -N https://github.com/lightninglabs/lightning-terminal/releases/download/v${LITVERSION}/manifest-${PGPsigner}-v${LITVERSION}.sig + wget -N https://github.com/lightninglabs/lightning-terminal/releases/download/v${LITVERSION}/manifest-v${LITVERSION}.sig wget --no-check-certificate ${PGPpkeys} binaryChecksum=$(sha256sum ${binaryName} | cut -d " " -f1) if [ "${binaryChecksum}" != "${SHA256}" ]; then @@ -209,7 +208,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then fi gpg --import ./pgp_keys.asc sleep 3 - verifyResult=$(gpg --verify manifest-${PGPsigner}-v${LITVERSION}.sig manifest-v${LITVERSION}.txt 2>&1) + verifyResult=$(gpg --verify manifest-v${LITVERSION}.sig manifest-v${LITVERSION}.txt 2>&1) goodSignature=$(echo ${verifyResult} | grep 'Good signature' -c) echo "goodSignature(${goodSignature})" correctKey=$(echo ${verifyResult} | tr -d " \t\n\r" | grep "${GPGcheck}" -c) From a2656ac0adbcb80fccf512b093bdc759316245c7 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 22 Sep 2021 19:56:15 +0200 Subject: [PATCH 1163/1295] try fix final reboot bug --- home.admin/00raspiblitz.sh | 3 ++- home.admin/_bootstrap.sh | 5 +++-- home.admin/config.scripts/bonus.rtl.sh | 1 + 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index ad10088dc..8cd4d7e4d 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -171,7 +171,8 @@ do # push to final setup gui dialogs #echo "# controlFinalDialog.sh" /home/admin/setup.scripts/controlFinalDialog.sh - continue + # exit for final setup reboot + exit 0 fi ##################################### diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index a1db6a844..165e46376 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -548,7 +548,7 @@ if [ ${isMounted} -eq 0 ]; then source ${setupFile} cat ${setupFile} >> ${logFile} - # make sure basic info id in raspiblitz.info + # 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} @@ -666,7 +666,7 @@ if [ ${isMounted} -eq 0 ]; then fi source ${infoFile} - echo "WAIT LOOP: FINAL SETUP .. see controlFinalDialog.sh" >> $logFile + echo "WAIT LOOP: FINAL SETUP .. see controlFinalDialog.sh network(${network})" >> $logFile until [ "${state}" == "ready" ] do @@ -693,6 +693,7 @@ if [ ${isMounted} -eq 0 ]; then echo "# Updating service ${network}d.service ..." >> $logFile sudo sed -i "s/^Wants=.*/Wants=bootstrap.service/g" /etc/systemd/system/${network}d.service sudo sed -i "s/^After=.*/After=bootstrap.service/g" /etc/systemd/system/${network}d.service + sudo systemctl daemon-reload # delete setup data from RAM sudo rm ${setupFile} diff --git a/home.admin/config.scripts/bonus.rtl.sh b/home.admin/config.scripts/bonus.rtl.sh index b1d001b4b..3c0aba537 100755 --- a/home.admin/config.scripts/bonus.rtl.sh +++ b/home.admin/config.scripts/bonus.rtl.sh @@ -1,4 +1,5 @@ #!/bin/bash +# https://github.com/Ride-The-Lightning/RTL RTLVERSION="v0.11.2" # check and load raspiblitz config From 880db21993bdf69f2d31a423a718a628fd75ac11 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 22 Sep 2021 20:42:22 +0200 Subject: [PATCH 1164/1295] add reboot info --- home.admin/00raspiblitz.sh | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 8cd4d7e4d..123ccbf78 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -172,9 +172,26 @@ do #echo "# controlFinalDialog.sh" /home/admin/setup.scripts/controlFinalDialog.sh # exit for final setup reboot - exit 0 + state="reboot" fi + # exit loop/script in case if system shutting down + if [ "${state}" == "reboot" ] || [ "${state}" == "shutdown" ]; then + clear + echo "***********************************************************" + echo "RaspiBlitz going to ${state}" + echo "***********************************************************" + if [ "${state}" == "reboot" ]; then + if [ "${message}" == "finalsetup" ]; then + echo "This is the final setup reboot - you will get disconnected." + fi + echo "SSH again into system with:" + echo "ssh admin@${localip}" + echo "***********************************************************" + fi + exit 0 + fi + ##################################### # INITIAL BLOCKCHAIN SYNC (SUBLOOP) ##################################### @@ -246,23 +263,6 @@ do fi - # exit loop/script in case if system shutting down - if [ "${state}" == "reboot" ] || [ "${state}" == "shutdown" ]; then - clear - echo "***********************************************************" - echo "RaspiBlitz going to ${state}" - echo "***********************************************************" - if [ "${state}" == "reboot" ]; then - if [ "${message}" == "finalsetup" ]; then - echo "This is the final setup reboot - you will get disconnected." - fi - echo "SSH again into system with:" - echo "ssh admin@${localip}" - echo "***********************************************************" - fi - exit 0 - fi - done echo "# menu loop received exit code ${exitMenuLoop} --> exit to terminal" From e83196d903ccc3e902ce193c75dc5f230b7ab825 Mon Sep 17 00:00:00 2001 From: openoms Date: Wed, 22 Sep 2021 20:57:14 +0100 Subject: [PATCH 1165/1295] rtl: fix check for npm 7 #2124 --- home.admin/config.scripts/bonus.nodejs.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/bonus.nodejs.sh b/home.admin/config.scripts/bonus.nodejs.sh index 0ff2e061d..fb570567c 100755 --- a/home.admin/config.scripts/bonus.nodejs.sh +++ b/home.admin/config.scripts/bonus.nodejs.sh @@ -92,7 +92,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then fi npm7installed=$(npm -v 2>/dev/null | grep -c "7.") - if ! [ ${npm7installed} -eq 0 ]; then + if [ ${npm7installed} -eq 0 ]; then # needed for RTL # https://github.blog/2021-02-02-npm-7-is-now-generally-available/ echo "# Update npm to v7" From 139deb5b20511fcb4f073df72348f6e5ab57790a Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 22 Sep 2021 22:05:58 +0200 Subject: [PATCH 1166/1295] add debug output --- home.admin/config.scripts/blitz.subscriptions.letsencrypt.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py b/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py index 880d32d6f..1a98a2bf2 100755 --- a/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py +++ b/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py @@ -303,6 +303,7 @@ def subscriptions_new(ip, dnsservice, domain, token, target): def subscriptions_cancel(s_id): + print("# subscriptions_cancel(${0})".format(s_id)) os.system("sudo chown admin:admin {0}".format(SUBSCRIPTIONS_FILE)) subs = toml.load(SUBSCRIPTIONS_FILE) new_list = [] @@ -316,6 +317,7 @@ def subscriptions_cancel(s_id): # run the ACME script to remove cert if removed_cert: + print("# /home/admin/config.scripts/bonus.letsencrypt.sh remove-cert {0} {1}".format(removed_cert['id'], removed_cert['target'])) acme_result = subprocess.Popen( ["/home/admin/config.scripts/bonus.letsencrypt.sh", "remove-cert", removed_cert['id'], removed_cert['target']], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, encoding='utf8') From 4e91c43aeafcd324d1ecce4a1688cb0ebe390475 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 22 Sep 2021 22:21:57 +0200 Subject: [PATCH 1167/1295] better error check --- home.admin/config.scripts/bonus.letsencrypt.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/home.admin/config.scripts/bonus.letsencrypt.sh b/home.admin/config.scripts/bonus.letsencrypt.sh index 6090bee2a..87e524c49 100755 --- a/home.admin/config.scripts/bonus.letsencrypt.sh +++ b/home.admin/config.scripts/bonus.letsencrypt.sh @@ -148,7 +148,7 @@ function refresh_certs_with_nginx() { echo "# FQDN(${FQDN})" # check if there is a LetsEncrypt Subscription for this domain details=$(/home/admin/config.scripts/blitz.subscriptions.letsencrypt.py subscription-detail $FQDN) - if [ ${#details} -gt 10 ]; then + if [ $(echo "${details}" | grep -c "error=") -eq 0 ] && [ ${#details} -gt 10 ]; then echo "# details(${details})" @@ -344,6 +344,8 @@ elif [ "$1" = "remove-cert" ]; then options="ip&tor" fi + echo "# bonus.letsencrypt.sh remove-cert ${FQDN} ${options}" + # remove cert from renewal $ACME_INSTALL_HOME/acme.sh --remove -d "${FQDN}" --ecc --home "${ACME_INSTALL_HOME}" --config-home "${ACME_CONFIG_HOME}" --cert-home "${ACME_CERT_HOME}" 2>&1 From bfaaf84131f1ee75330bd16abb4539f57c7e06d8 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 22 Sep 2021 22:57:21 +0200 Subject: [PATCH 1168/1295] dont clean apitoken --- home.admin/config.scripts/blitz.subscriptions.letsencrypt.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py b/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py index 1a98a2bf2..9fe570cea 100755 --- a/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py +++ b/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py @@ -135,13 +135,13 @@ def dynu_update(domain, token, ip): try: print(response.content) data = json.loads(response.content) - apitoken = data["access_token"]; + apitoken = data["access_token"] except Exception as e: raise BlitzError("failed parsing data", response.content, e) if len(apitoken) == 0: raise BlitzError("access_token not found", response.content) print("# apitoken({0})".format(apitoken)) - apitoken = re.sub("[^0-9a-zA-Z]", "", apitoken) + #apitoken = re.sub("[^0-9a-zA-Z]", "", apitoken) print("# cleaning API token:") print("# apitoken({0})".format(apitoken)) From 16a00e216a5333d4356b4a33cb88afef82696f15 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 22 Sep 2021 23:00:41 +0200 Subject: [PATCH 1169/1295] add debug output --- home.admin/config.scripts/blitz.subscriptions.letsencrypt.py | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py b/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py index 9fe570cea..9436b64d8 100755 --- a/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py +++ b/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py @@ -288,6 +288,7 @@ def subscriptions_new(ip, dnsservice, domain, token, target): # run the ACME script print("# Running letsencrypt ACME script ...") + print("# /home/admin/config.scripts/bonus.letsencrypt.sh issue-cert {0} {1} {2} {3} {4}".format(dnsservice, domain, token, target)) acme_result = subprocess.Popen( ["/home/admin/config.scripts/bonus.letsencrypt.sh", "issue-cert", dnsservice, domain, token, target], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, encoding='utf8') From a5fac810bb6976d7b7ba50fbad36f52989717487 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 22 Sep 2021 23:02:42 +0200 Subject: [PATCH 1170/1295] fix debug output --- home.admin/config.scripts/blitz.subscriptions.letsencrypt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py b/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py index 9436b64d8..ba0cdf866 100755 --- a/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py +++ b/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py @@ -288,7 +288,7 @@ def subscriptions_new(ip, dnsservice, domain, token, target): # run the ACME script print("# Running letsencrypt ACME script ...") - print("# /home/admin/config.scripts/bonus.letsencrypt.sh issue-cert {0} {1} {2} {3} {4}".format(dnsservice, domain, token, target)) + print("# /home/admin/config.scripts/bonus.letsencrypt.sh issue-cert {0} {1} {2} {3}".format(dnsservice, domain, token, target)) acme_result = subprocess.Popen( ["/home/admin/config.scripts/bonus.letsencrypt.sh", "issue-cert", dnsservice, domain, token, target], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, encoding='utf8') From ae9ddeb7681a7775ba75c627c62564be3da1cd00 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 22 Sep 2021 23:31:08 +0200 Subject: [PATCH 1171/1295] #2271 deactivate DYNU from the menu --- README.md | 2 +- home.admin/config.scripts/blitz.subscriptions.letsencrypt.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6168d35b2..06957624e 100644 --- a/README.md +++ b/README.md @@ -835,7 +835,7 @@ If you want a Webservice like BTCPay Server or LNbits available to the outside i Because you also need a domain name for that you will need to open a free account, the following are presently supported, would be good to add more with the help of the community: [DuckDNS.org](https://www.duckdns.org) -[DYNU.com](https://www.dynu.com) +[DYNU.com](https://www.dynu.com) (AT THE MOMENT NOT AVAILABLE) When you create a new LetsEncrypt subscription, you will be asked for your subdomain on DuckDNS and the Auth-Token of your DuckDNS account. Then RaspiBlitz tries to setup everything for you. If everything worked, you will find the subscription under `MAINMENU` > `SUBSCRIBE` > `LIST My Subscriptions`, where you can cancel it at any time if you wish. diff --git a/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py b/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py index ba0cdf866..d7c012477 100755 --- a/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py +++ b/home.admin/config.scripts/blitz.subscriptions.letsencrypt.py @@ -388,7 +388,7 @@ def menu_make_subscription(): # ask user for which RaspiBlitz service the bridge should be used choices = [] choices.append(("DUCKDNS", "Use duckdns.org")) - choices.append(("DYNU", "Use dynu.com")) + #choices.append(("DYNU", "Use dynu.com")) d = Dialog(dialog="dialog", autowidgetsize=True) d.set_background_title("LetsEncrypt Subscription") From c560d9960c3f5dd29a98852b0d7b9a9735b80aa9 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 23 Sep 2021 12:13:10 +0200 Subject: [PATCH 1172/1295] fix broken shell status output --- home.admin/00infoBlitz.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/00infoBlitz.sh b/home.admin/00infoBlitz.sh index 55b5f1f02..361568280 100755 --- a/home.admin/00infoBlitz.sh +++ b/home.admin/00infoBlitz.sh @@ -452,6 +452,7 @@ fi uptime=$(uptime --pretty) datetime=$(date -R) +stty sane sleep 1 clear From 4b982ddaf897d7323889d19782c86b718ec9f82a Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 23 Sep 2021 12:27:12 +0200 Subject: [PATCH 1173/1295] #2486 adapt log rotate --- home.admin/_provision_.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/home.admin/_provision_.sh b/home.admin/_provision_.sh index 4a1202ede..1b87f3006 100755 --- a/home.admin/_provision_.sh +++ b/home.admin/_provision_.sh @@ -107,6 +107,12 @@ fi echo "# Make sure the user bitcoin is in the debian-tor group" sudo usermod -a -G debian-tor bitcoin +echo "# Optimizing log files: rotate daily, keep 2 weeks & compress old days " >> ${logFile} +sudo sed -i "s/^weekly/daily/g" /etc/logrotate.conf >> ${logFile} 2>&1 +sudo sed -i "s/^rotate 4/rotate 14/g" /etc/logrotate.conf >> ${logFile} 2>&1 +sudo sed -i "s/^#compress/compress/g" /etc/logrotate.conf >> ${logFile} 2>&1 +sudo systemctl restart logrotate + # set hostname data echo "Setting lightning alias: ${hostname}" >> ${logFile} sudo sed -i "s/^alias=.*/alias=${hostname}/g" /home/admin/assets/lnd.${network}.conf >> ${logFile} 2>&1 From cfdeed6d37b1171073ab92fdf4d335cb7ac5afca Mon Sep 17 00:00:00 2001 From: blackcoffeexbt <87530449+blackcoffeexbt@users.noreply.github.com> Date: Thu, 23 Sep 2021 12:47:55 +0100 Subject: [PATCH 1174/1295] Added timeout to blitz.subscriptions.py -> NEW1 menu option subprocess call (#2571) If the sphinxrelay service is not available (removed port forwarding ot other cause) selecting NEW1 from the subscriptions menu hangs the script. This commit adds a 10 second timeout to the bonus.sphinxrelay.sh subprocess call to prevent this. --- home.admin/config.scripts/blitz.subscriptions.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/home.admin/config.scripts/blitz.subscriptions.py b/home.admin/config.scripts/blitz.subscriptions.py index f8d326ac2..37c524f9e 100755 --- a/home.admin/config.scripts/blitz.subscriptions.py +++ b/home.admin/config.scripts/blitz.subscriptions.py @@ -311,8 +311,12 @@ def main(): # check if Sphinx-Relay is installed sphinx_relay = False - status_data = subprocess.run(['/home/admin/config.scripts/bonus.sphinxrelay.sh', 'status'], - stdout=subprocess.PIPE).stdout.decode('utf-8').strip() + try: + status_data = subprocess.run(['/home/admin/config.scripts/bonus.sphinxrelay.sh', 'status'], + stdout=subprocess.PIPE, timeout=10).stdout.decode('utf-8').strip() + except Exception as e: + print(e) + if status_data.find("installed=1") > -1: sphinx_relay = True From 3be9755cab2f6b3b014a167055e015ec5c058f63 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 23 Sep 2021 13:59:55 +0200 Subject: [PATCH 1175/1295] #2546 add deprecatedrpc=addresses to bitcoin.conf --- home.admin/_provision_.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/home.admin/_provision_.sh b/home.admin/_provision_.sh index 1b87f3006..566f27970 100755 --- a/home.admin/_provision_.sh +++ b/home.admin/_provision_.sh @@ -113,6 +113,11 @@ sudo sed -i "s/^rotate 4/rotate 14/g" /etc/logrotate.conf >> ${logFile} 2>&1 sudo sed -i "s/^#compress/compress/g" /etc/logrotate.conf >> ${logFile} 2>&1 sudo systemctl restart logrotate +# make sure to have bitcoin core >=22 is backwards comp +# see https://github.com/rootzoll/raspiblitz/issues/2546 +sed -i '/^deprecatedrpc=.*/d' /mnt/hdd/bitcoin/bitcoin.conf 2>/dev/null +echo "deprecatedrpc=addresses" >> /mnt/hdd/bitcoin/bitcoin.conf 2>/dev/null + # set hostname data echo "Setting lightning alias: ${hostname}" >> ${logFile} sudo sed -i "s/^alias=.*/alias=${hostname}/g" /home/admin/assets/lnd.${network}.conf >> ${logFile} 2>&1 From 31380b118eee256722792beb6b00cfe3126499d0 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 23 Sep 2021 15:48:15 +0200 Subject: [PATCH 1176/1295] fix keyserver for getting PGP key --- build_sdcard.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_sdcard.sh b/build_sdcard.sh index 1d154e515..88ed6b497 100755 --- a/build_sdcard.sh +++ b/build_sdcard.sh @@ -854,7 +854,7 @@ sudo -u admin mkdir /home/admin/download cd /home/admin/download # receive signer key -if ! gpg --recv-key "71A3 B167 3540 5025 D447 E8F2 7481 0B01 2346 C9A6" +if ! gpg --keyserver hkp://keyserver.ubuntu.com --recv-key "71A3 B167 3540 5025 D447 E8F2 7481 0B01 2346 C9A6" then echo "!!! FAIL !!! Couldn't download Wladimir J. van der Laan's PGP pubkey" exit 1 From 9bec388fad6e383e5955736c105901c1450f5e55 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 23 Sep 2021 16:32:25 +0200 Subject: [PATCH 1177/1295] add rc2 version info --- home.admin/_version.info | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_version.info b/home.admin/_version.info index a39a0b9c4..28eab0a76 100644 --- a/home.admin/_version.info +++ b/home.admin/_version.info @@ -1,2 +1,2 @@ # RaspiBlitz Version - always [major].[main].[sub] (sub can be a string like '2rc1') -codeVersion="1.7.1rc1" +codeVersion="1.7.1rc2" From b7ed559c2ef566ff496e563d6f2ffca14bef1352 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 23 Sep 2021 16:55:16 +0200 Subject: [PATCH 1178/1295] add FAQ info --- FAQ.md | 1 + 1 file changed, 1 insertion(+) diff --git a/FAQ.md b/FAQ.md index 9c2b1df37..2f51152f2 100644 --- a/FAQ.md +++ b/FAQ.md @@ -520,6 +520,7 @@ The best way would be to build the SD card yourself. You use the script `build_s Work notes for the process of producing a new SD card image release: +* Make sure you have the "Versioning" final in your RaspiBlitz Source Code * Start [`Ubuntu LIVE`](http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso) from USB stick on the Build Computer (press F12 on startup) * Connect to a secure WiFi (hardware switch on) or LAN * Download the latest RaspiOS-64bit (zip & sig file) namend in the [build_sdcard.sh](./build_sdcard.sh) and note the SHA256 checksum From 92ff4231f61168fae1b5a5693cf87ed1730fefbf Mon Sep 17 00:00:00 2001 From: Stephan Oeste Date: Thu, 23 Sep 2021 20:54:02 +0200 Subject: [PATCH 1179/1295] Bisq changed to tor onion v3 (#2569) --- home.admin/00infoBlitz.sh | 6 +++--- home.admin/99connectMenu.sh | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/home.admin/00infoBlitz.sh b/home.admin/00infoBlitz.sh index 361568280..42ceade4f 100755 --- a/home.admin/00infoBlitz.sh +++ b/home.admin/00infoBlitz.sh @@ -464,9 +464,9 @@ ${color_yellow} ${color_amber}%s ${color_green} ${ln_alias} ${upsI ${color_yellow} ${color_gray}${network^} Fullnode${LNinfo} ${torInfo} ${color_yellow} ,/ ${color_yellow}%s ${color_yellow} ,'/ ${color_gray}%s -${color_yellow} ,' / ${color_gray}%s, ${templine} -${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}%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 diff --git a/home.admin/99connectMenu.sh b/home.admin/99connectMenu.sh index c073d85b9..4ae8b74ce 100644 --- a/home.admin/99connectMenu.sh +++ b/home.admin/99connectMenu.sh @@ -103,9 +103,9 @@ case $CHOICE in if [ $(grep -c Bisq < /etc/tor/torrc) -eq 0 ];then echo "# Creating the Hidden Service for Bisq" echo " -# Hidden Service for Bisq (bitcoin RPC v2) +# Hidden Service for Bisq (bitcoin RPC v3) HiddenServiceDir /mnt/hdd/tor/bisq -HiddenServiceVersion 2 +HiddenServiceVersion 3 HiddenServicePort 8333 127.0.0.1:8333" | sudo tee -a /etc/tor/torrc echo "# Restarting Tor" sudo systemctl restart tor From 4cc1d4308dd81872a2249726258e917f8ec581b3 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 23 Sep 2021 21:04:55 +0200 Subject: [PATCH 1180/1295] upload v1.7.1RC2 links --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 06957624e..f698fecec 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ *Build your own Lightning Node on a RaspberryPi with a nice Display.* -`Version 1.7.1rc1 with lnd 0.13.1 (or c-lightning 0.10.0) and bitcoin 0.21.1 (or litecoin 0.18.1)` +`Version 1.7.1rc2 with lnd 0.13.1 (or c-lightning 0.10.0) and bitcoin 22.0.0 (or litecoin 0.18.1)` ![RaspiBlitz](pictures/raspiblitz.jpg) @@ -110,22 +110,22 @@ In the end your RaspiBlitz should look like this: |Difficulty level|Easy|Medium| |Pros|Make Blitz accessible to everyone|You don't need to trust us, build from your own forked repository| |Cons|You have to trust the mantainer image binaries|You need to read the build_sdcard.sh parameters in order for the customization to suit your needs| -|Instructions|[Download image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.1rc1-2021-09-06.img.gz) and [Flash the sd card](README.md#write-the-sd-card-image-to-your-sd-card)|[Build your own sd card image](#build-the-sd-card-image)| +|Instructions|[Download 1.7.1RC2 image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.1rc2-2021-09-23.img.gz) and [Flash the sd card](README.md#write-the-sd-card-image-to-your-sd-card)|[Build your own sd card image](#build-the-sd-card-image)| |Verify what?|[Signature file - only for final release]() and [verify the Sig](FAQ.md#how-to-verify-the-sd-card-image-after-download) OR SHA-256 (below)|All of the code, don't trust, verify| If downloading the mantainer sd card image: * GPG 64-bit: 1C73 060C 7C17 6461 -* SHA-256: 195ef86314ae2bfafe953b1d8eefb0b0838ef3be893f6deea5893af2280f3fc8 +* SHA-256: 4c857203c927951248a15b71d3c3a64e34b033f7c55674ab8dacdcab7e38f778 Which verification method should I used: Hash or Signature? * Signed file prove to you that the SD card image was actually built by the lead developer of the RaspiBlitz project. (Safest) * Hash function checks file integrity. (Secure) The mantainer sd card image can also be downloaded via torrent: -* [assets/raspiblitz-v1.7.0-2021-04-25.img.gz.torrent](https://github.com/rootzoll/raspiblitz/raw/v1.7/home.admin/assets/raspiblitz-v1.7.0-2021-04-25.img.gz.torrent) +* [assets/raspiblitz-vXXX.img.gz.torrent](https://github.com/rootzoll/raspiblitz/raw/v1.7/home.admin/assets/raspiblitz-XXX.img.gz.torrent) Useful info: -* [What's new in Version 1.7 of RaspiBlitz?](CHANGES.md#whats-new-in-version-170-of-raspiblitz) +* [What's new in Version 1.7.1 of RaspiBlitz?](CHANGES.md#whats-new-in-version-171-of-raspiblitz) * [How to update my RaspiBlitz?](README.md#updating-raspiblitz-to-new-version) * [How to migrate to RaspiBlitz from Umbrel/myNode](#make-a-raspiblitz-out-of-your-umbrel-or-mynode) * [How to verify the SD card image after download?](FAQ.md#how-to-verify-the-sd-card-image-after-download) From dcc5be20ac9c131ef5b055dbb79624fbf195ce01 Mon Sep 17 00:00:00 2001 From: openoms Date: Fri, 24 Sep 2021 15:14:36 +0100 Subject: [PATCH 1181/1295] electrs update to v0.9.0-rc2 #2548 --- home.admin/config.scripts/bonus.electrs.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/config.scripts/bonus.electrs.sh b/home.admin/config.scripts/bonus.electrs.sh index 344e61b4f..436325afa 100755 --- a/home.admin/config.scripts/bonus.electrs.sh +++ b/home.admin/config.scripts/bonus.electrs.sh @@ -1,9 +1,9 @@ #!/bin/bash # https://github.com/romanz/electrs/releases -#ELECTRSVERSION="v0.9.0-rc1" +#ELECTRSVERSION="v0.9.0-rc2" # https://github.com/romanz/electrs/commits/master -ELECTRSVERSION="3041e89cd2fb377541b929d852ef6298c2d4e60a" +# ELECTRSVERSION="3041e89cd2fb377541b929d852ef6298c2d4e60a" # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then From bed30badf80c2ea226927fe0fac3ce09f9449037 Mon Sep 17 00:00:00 2001 From: openoms Date: Sat, 25 Sep 2021 18:02:46 +0100 Subject: [PATCH 1182/1295] reword payinvoice message --- home.admin/BBpayInvoice.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/BBpayInvoice.sh b/home.admin/BBpayInvoice.sh index 506142b81..170f4608f 100755 --- a/home.admin/BBpayInvoice.sh +++ b/home.admin/BBpayInvoice.sh @@ -116,8 +116,8 @@ fi clear echo "************************************************************" echo "Pay Invoice / Payment Request" -echo "This script is as an example how to use the lncli interface." -echo "Its not optimized for performance or error handling." +echo "This script is an example using lightning in the command line." +echo "It is not optimized for performance or error handling." echo "************************************************************" echo echo "COMMAND LINE: " From f9c095cb5afcb8f7177563926ca82a9d8c6af182 Mon Sep 17 00:00:00 2001 From: openoms Date: Sat, 25 Sep 2021 18:06:17 +0100 Subject: [PATCH 1183/1295] electrs: override defaults in the config #2548 --- home.admin/config.scripts/bonus.electrs.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/home.admin/config.scripts/bonus.electrs.sh b/home.admin/config.scripts/bonus.electrs.sh index 436325afa..e8507ca3f 100755 --- a/home.admin/config.scripts/bonus.electrs.sh +++ b/home.admin/config.scripts/bonus.electrs.sh @@ -308,7 +308,9 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then verbose = 2 timestamp = true jsonrpc_import = true -index-batch-size=10 +index-batch-size = 10 +wait_duration_secs = 10 +jsonrpc_timeout_secs = 15 db_dir = \"/mnt/hdd/app-storage/electrs/db\" auth = \"$RPC_USER:$PASSWORD_B\" # allow BTC-RPC-explorer show tx-s for addresses with a history of more than 100 From cac14efc46e99f255bc175b3df7ee5fba17a20df Mon Sep 17 00:00:00 2001 From: openoms Date: Sun, 26 Sep 2021 10:30:09 +0100 Subject: [PATCH 1184/1295] rename all cln / CLN to cl / CL except CLNETWORK --- CHANGES.md | 6 +- build_sdcard.sh | 6 +- home.admin/00infoBlitz.sh | 30 ++-- home.admin/00infoLCD.sh | 2 +- home.admin/00mainMenu.sh | 12 +- home.admin/00parallelChainsMenu.sh | 12 +- home.admin/00parallelMainnetServices.sh | 42 +++--- home.admin/00parallelTestnetServices.sh | 42 +++--- home.admin/00raspiblitz.sh | 8 +- home.admin/00settingsMenuBasics.sh | 96 ++++++------- home.admin/00settingsMenuServices.sh | 20 +-- home.admin/97addMobileWallet.sh | 14 +- home.admin/98repairMenu.sh | 8 +- home.admin/{99clnMenu.sh => 99clMenu.sh} | 40 +++--- .../{99clnRepairMenu.sh => 99clRepairMenu.sh} | 64 ++++----- home.admin/99systemMenu.sh | 16 +-- home.admin/99updateMenu.sh | 8 +- home.admin/BBcashoutWallet.sh | 14 +- home.admin/BBcloseAllChannels.sh | 16 +-- home.admin/BBconnectPeer.sh | 4 +- home.admin/BBcreateInvoice.sh | 12 +- home.admin/BBfundWallet.sh | 12 +- home.admin/BBopenChannel.sh | 14 +- home.admin/BBpayInvoice.sh | 8 +- home.admin/_commands.sh | 2 +- home.admin/_provision.setup.sh | 32 ++--- home.admin/_provision.update.sh | 6 +- home.admin/_provision_.sh | 42 +++--- home.admin/config.scripts/blitz.debug.sh | 10 +- .../config.scripts/blitz.setpassword.sh | 14 +- home.admin/config.scripts/blitz.statusscan.sh | 26 ++-- home.admin/config.scripts/blitz.web.api.sh | 10 +- home.admin/config.scripts/bonus.lnbits.sh | 4 +- home.admin/config.scripts/bonus.rtl.sh | 24 ++-- ...n-plugin.backup.sh => cl-plugin.backup.sh} | 20 +-- ...n-plugin.clboss.sh => cl-plugin.clboss.sh} | 26 ++-- ...n-plugin.sparko.sh => cl-plugin.sparko.sh} | 40 +++--- ...python.sh => cl-plugin.standard-python.sh} | 14 +- ...plugin.summary.sh => cl-plugin.summary.sh} | 16 +-- .../{cln.backup.sh => cl.backup.sh} | 132 +++++++++--------- .../{cln.hsmtool.sh => cl.hsmtool.sh} | 104 +++++++------- ...stall-service.sh => cl.install-service.sh} | 22 +-- .../{cln.install.sh => cl.install.sh} | 72 +++++----- .../{cln.rest.sh => cl.rest.sh} | 36 ++--- .../{cln.setname.sh => cl.setname.sh} | 22 +-- home.admin/config.scripts/lnd.install.sh | 8 +- home.admin/config.scripts/network.aliases.sh | 18 +-- .../setup.scripts/controlFinalDialog.sh | 2 +- .../setup.scripts/controlSetupDialog.sh | 4 +- .../dialogBlockchainLightning.sh | 6 +- .../dialogLightningWallet-cln.sh | 22 +-- .../setup.scripts/eventBlockchainSync.sh | 2 +- 52 files changed, 621 insertions(+), 621 deletions(-) rename home.admin/{99clnMenu.sh => 99clMenu.sh} (70%) rename home.admin/{99clnRepairMenu.sh => 99clRepairMenu.sh} (65%) rename home.admin/config.scripts/{cln-plugin.backup.sh => cl-plugin.backup.sh} (87%) rename home.admin/config.scripts/{cln-plugin.clboss.sh => cl-plugin.clboss.sh} (75%) rename home.admin/config.scripts/{cln-plugin.sparko.sh => cl-plugin.sparko.sh} (86%) rename home.admin/config.scripts/{cln-plugin.standard-python.sh => cl-plugin.standard-python.sh} (69%) rename home.admin/config.scripts/{cln-plugin.summary.sh => cl-plugin.summary.sh} (65%) rename home.admin/config.scripts/{cln.backup.sh => cl.backup.sh} (75%) mode change 100755 => 100644 rename home.admin/config.scripts/{cln.hsmtool.sh => cl.hsmtool.sh} (77%) rename home.admin/config.scripts/{cln.install-service.sh => cl.install-service.sh} (70%) rename home.admin/config.scripts/{cln.install.sh => cl.install.sh} (81%) rename home.admin/config.scripts/{cln.rest.sh => cl.rest.sh} (82%) rename home.admin/config.scripts/{cln.setname.sh => cl.setname.sh} (72%) diff --git a/CHANGES.md b/CHANGES.md index 77c84ab3b..e102997ce 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,10 +4,10 @@ - New: C-lightning v0.10.1 [details](https://github.com/ElementsProject/lightning/releases/tag/v0.10.1) - New: C-lightningREST v0.5.1 [details](https://github.com/Ride-The-Lightning/c-lightning-REST/releases/tag/v0.5.1) -- New: CLN plugin: Sparko [details](https://github.com/fiatjaf/sparko) -- New: CLN plugin: CLBOSS The C-Lightning Node Manager [details](https://github.com/ZmnSCPxj/clboss#clboss-the-c-lightning-node-manager) +- New: CL plugin: Sparko [details](https://github.com/fiatjaf/sparko) +- New: CL plugin: CLBOSS The C-Lightning Node Manager [details](https://github.com/ZmnSCPxj/clboss#clboss-the-c-lightning-node-manager) - New: Refactored Setup-Process [details](https://github.com/rootzoll/raspiblitz/issues/1126#issuecomment-829757665) -- New: Suez - channel visualization for LND and CLN [details](https://github.com/prusnak/suez) +- New: Suez - channel visualization for LND and CL [details](https://github.com/prusnak/suez) - New: LND Static Channel Backup to Nextcloud - New: Allow SphinxApp to connect over Tor - New: Parallel TESTNET & SIGNET services diff --git a/build_sdcard.sh b/build_sdcard.sh index 88ed6b497..75061797a 100755 --- a/build_sdcard.sh +++ b/build_sdcard.sh @@ -1076,9 +1076,9 @@ PGPpkeys="https://raw.githubusercontent.com/ElementsProject/lightning/master/con PGPcheck="D9200E6CD1ADB8F1" # prepare download dir -sudo rm -rf /home/admin/download/cln -sudo -u admin mkdir -p /home/admin/download/cln -cd /home/admin/download/cln || exit 1 +sudo rm -rf /home/admin/download/cl +sudo -u admin mkdir -p /home/admin/download/cl +cd /home/admin/download/cl || exit 1 sudo -u admin wget -O "pgp_keys.asc" ${PGPpkeys} gpg --import --import-options show-only ./pgp_keys.asc diff --git a/home.admin/00infoBlitz.sh b/home.admin/00infoBlitz.sh index 42ceade4f..ac81a2ae6 100755 --- a/home.admin/00infoBlitz.sh +++ b/home.admin/00infoBlitz.sh @@ -1,6 +1,6 @@ #!/bin/bash -# 00infoBlitz.sh +# 00infoBlitz.sh # load code software version source /home/admin/_version.info @@ -160,7 +160,7 @@ fi webinterfaceInfo="" runningRTL=$(systemctl status ${netprefix}${typeprefix}RTL.service 2>/dev/null | grep -c active) if [ ${runningRTL} -eq 1 ]; then - if [ "${lightning}" == "cln" ]; then + if [ "${lightning}" == "cl" ]; then RTLHTTP=${portprefix}7000 elif [ "${lightning}" == "lnd" ];then RTLHTTP=${portprefix}3000 @@ -232,12 +232,12 @@ else fi # LIGHTNING NETWORK -if [ "${lightning}" == "cln" ]; then +if [ "${lightning}" == "cl" ]; then ln_getInfo=$($lightningcli_alias getinfo 2>/dev/null) ln_baseInfo="-" ln_channelInfo="\n" ln_external="\n" - ln_alias="$(sudo cat "${CLNCONF}" | grep "^alias=*" | cut -f2 -d=)" + 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 @@ -245,7 +245,7 @@ if [ "${lightning}" == "cln" ]; then ln_alias=${hostname} fi ln_publicColor="" - ln_port=$(sudo cat "${CLNCONF}" | grep "^bind-addr=*" | cut -f2 -d':') + 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 @@ -288,17 +288,17 @@ if [ "${lightning}" == "cln" ]; then fi else ln_walletbalance=0 - cln_listfunds=$($lightningcli_alias listfunds 2>/dev/null) - for i in $(echo "$cln_listfunds" \ + 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 "$cln_listfunds" \ + 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 "$cln_listfunds" \ + 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 @@ -307,7 +307,7 @@ if [ "${lightning}" == "cln" ]; then 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 "$cln_listfunds" \ + 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 @@ -315,7 +315,7 @@ if [ "${lightning}" == "cln" ]; then ln_channelbalance=0 fi # ln_channelbalance_all: all funds in channels - for i in $(echo "$cln_listfunds" \ + 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 @@ -327,9 +327,9 @@ if [ "${lightning}" == "cln" ]; then # - **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 - cln_num_pending_channels="$(echo "${ln_getInfo}" | jq -r '.num_pending_channels')" 2>/dev/null - cln_num_inactive_channels="$(echo "${ln_getInfo}" | jq -r '.num_inactive_channels')" 2>/dev/null - ln_channels_total=$((ln_channels_online+cln_num_pending_channels+cln_num_inactive_channels)) + 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}" @@ -430,7 +430,7 @@ ${color_yellow} ${color_yellow}${ln_publicColor}${ln_external}${color_gray}" fi -if [ "${lightning}" == "cln" ];then +if [ "${lightning}" == "cl" ];then LNline="C-LIGHTNING ${color_green}${ln_version}\n ${ln_baseInfo}" elif [ "${lightning}" == "lnd" ];then LNline="LND ${color_green}${ln_version} ${ln_baseInfo}" diff --git a/home.admin/00infoLCD.sh b/home.admin/00infoLCD.sh index 545be8619..7289431a3 100755 --- a/home.admin/00infoLCD.sh +++ b/home.admin/00infoLCD.sh @@ -104,7 +104,7 @@ while : # 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" ] || [ "${CLNwalletLocked}" == "1" ]; then + if [ "${walletLocked}" == "1" ] || [ "${CLwalletLocked}" == "1" ]; then /home/admin/setup.scripts/eventInfoWait.sh "walletlocked" "" lcd sleep 3 continue diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index f22366d03..f96b2492e 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -148,8 +148,8 @@ if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then fi # if C-Lightning is active -if [ "${lightning}" == "cln" ] || [ "${cln}" == "on" ]; then - OPTIONS+=(CLN "C-lightning Wallet Options") +if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then + OPTIONS+=(CL "C-lightning Wallet Options") fi if [ "${testnet}" == "on" ]; then @@ -214,8 +214,8 @@ case $CHOICE in LND) /home/admin/99lndMenu.sh ;; - CLN) - /home/admin/99clnMenu.sh ${chain}net + CL) + /home/admin/99clMenu.sh ${chain}net ;; CONNECT) /home/admin/99connectMenu.sh @@ -231,7 +231,7 @@ case $CHOICE in /home/admin/config.scripts/bonus.rtl.sh menu lnd mainnet ;; CRTL) - /home/admin/config.scripts/bonus.rtl.sh menu cln mainnet + /home/admin/config.scripts/bonus.rtl.sh menu cl mainnet ;; BTCPAY) /home/admin/config.scripts/bonus.btcpayserver.sh menu @@ -246,7 +246,7 @@ case $CHOICE in /home/admin/config.scripts/bonus.lit.sh menu ;; SPARKO) - /home/admin/config.scripts/cln-plugin.sparko.sh menu mainnet + /home/admin/config.scripts/cl-plugin.sparko.sh menu mainnet ;; LNBITS) /home/admin/config.scripts/bonus.lnbits.sh menu diff --git a/home.admin/00parallelChainsMenu.sh b/home.admin/00parallelChainsMenu.sh index 5d42243e8..3a392ba38 100644 --- a/home.admin/00parallelChainsMenu.sh +++ b/home.admin/00parallelChainsMenu.sh @@ -20,7 +20,7 @@ plus="" if [ "${testnet}" == "on" ]; then OPTIONS+=(tSYS "TESTNET Monitoring & Configuration") if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then OPTIONS+=(tLND "TESTNET LND Wallet Options"); fi - if [ "${lightning}" == "cln" ] || [ "${cln}" == "on" ]; then OPTIONS+=(tCLN "TESTNET C-Lightning Wallet Options"); fi + if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then OPTIONS+=(tCL "TESTNET C-Lightning Wallet Options"); fi fi # just an optical splitter - ignored on select @@ -28,7 +28,7 @@ OPTIONS+=(--- "----------------------------------") if [ "${signet}" == "on" ]; then OPTIONS+=(sSYS "SIGNET Monitoring & Configuration") - if [ "${lightning}" == "cln" ] || [ "${cln}" == "on" ]; then OPTIONS+=(sCLN "SIGNET C-Lightning Wallet Options"); fi + if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then OPTIONS+=(sCL "SIGNET C-Lightning Wallet Options"); fi fi # DONT OFFER SERVICES FOR TESTNET RIGHT NOW @@ -63,10 +63,10 @@ case $CHOICE in sLND) /home/admin/99lndMenu.sh signet ;; - tCLN) - /home/admin/99clnMenu.sh testnet + tCL) + /home/admin/99clMenu.sh testnet ;; - sCLN) - /home/admin/99clnMenu.sh signet + sCL) + /home/admin/99clMenu.sh signet ;; esac \ No newline at end of file diff --git a/home.admin/00parallelMainnetServices.sh b/home.admin/00parallelMainnetServices.sh index 42ac9aa39..47e71f966 100644 --- a/home.admin/00parallelMainnetServices.sh +++ b/home.admin/00parallelMainnetServices.sh @@ -11,7 +11,7 @@ CHAIN=mainnet echo "services default values" if [ ${#rtlWebinterface} -eq 0 ]; then rtlWebinterface="off"; fi if [ ${#lnd} -eq 0 ]; then lnd="off"; fi -if [ ${#cln} -eq 0 ]; then cln="off"; fi +if [ ${#cl} -eq 0 ]; then cl="off"; fi if [ ${#crtlWebinterface} -eq 0 ]; then crtlWebinterface="off"; fi if [ ${#sparko} -eq 0 ]; then sparko="off"; fi @@ -21,9 +21,9 @@ echo "run dialog ..." OPTIONS=() OPTIONS+=(l "LND on $CHAIN" ${lnd}) OPTIONS+=(r "RTL for LND $CHAIN" ${rtlWebinterface}) -OPTIONS+=(c "C-lightning on $CHAIN" ${cln}) -OPTIONS+=(t "RTL for CLN on $CHAIN" ${crtlWebinterface}) -OPTIONS+=(s "Sparko for CLN on $CHAIN" ${sparko}) +OPTIONS+=(c "C-lightning on $CHAIN" ${cl}) +OPTIONS+=(t "RTL for CL on $CHAIN" ${crtlWebinterface}) +OPTIONS+=(s "Sparko for CL on $CHAIN" ${sparko}) CHOICES=$(dialog --title ' Additional Services ' \ --checklist ' use spacebar to activate/de-activate ' \ @@ -68,26 +68,26 @@ else echo "# LND on $CHAIN Setting unchanged." fi -# cln process choice +# cl process choice choice="off"; check=$(echo "${CHOICES}" | grep -c "c") if [ ${check} -eq 1 ]; then choice="on"; fi -if [ "${cln}" != "${choice}" ]; then - echo "# CLN on $CHAIN Setting changed .." +if [ "${cl}" != "${choice}" ]; then + echo "# CL on $CHAIN Setting changed .." anychange=1 - /home/admin/config.scripts/cln.install.sh ${choice} $CHAIN + /home/admin/config.scripts/cl.install.sh ${choice} $CHAIN errorOnInstall=$? if [ "${choice}" = "on" ]; then if [ ${errorOnInstall} -eq 0 ]; then - echo "# Successfully installed CLN on $CHAIN" + echo "# Successfully installed CL on $CHAIN" else - l1="# !!! FAIL on CLN on $CHAIN install !!!" + l1="# !!! FAIL on CL on $CHAIN install !!!" l2="# Try manual install on terminal after reboot with:" - l3="/home/admin/config.scripts/cln.install.sh on $CHAIN" + l3="/home/admin/config.scripts/cl.install.sh on $CHAIN" dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 fi fi else - echo "# CLN on $CHAIN Setting unchanged." + echo "# CL on $CHAIN Setting unchanged." fi # RTL process choice @@ -119,25 +119,25 @@ fi choice="off"; check=$(echo "${CHOICES}" | grep -c "t") if [ ${check} -eq 1 ]; then choice="on"; fi if [ "${crtlWebinterface}" != "${choice}" ]; then - echo "RTL for CLN $CHAIN Setting changed .." + echo "RTL for CL $CHAIN Setting changed .." anychange=1 - /home/admin/config.scripts/bonus.rtl.sh ${choice} cln $CHAIN + /home/admin/config.scripts/bonus.rtl.sh ${choice} cl $CHAIN errorOnInstall=$? if [ "${choice}" = "on" ]; then if [ ${errorOnInstall} -eq 0 ]; then sudo systemctl start cRTL echo "waiting 10 secs .." sleep 10 - /home/admin/config.scripts/bonus.rtl.sh menu cln $CHAIN + /home/admin/config.scripts/bonus.rtl.sh menu cl $CHAIN else - l1="!!! FAIL on RTL for CLN $CHAIN install !!!" + l1="!!! FAIL on RTL for CL $CHAIN install !!!" l2="Try manual install on terminal after reboot with:" - l3="/home/admin/config.scripts/bonus.rtl.sh on cln $CHAIN" + l3="/home/admin/config.scripts/bonus.rtl.sh on cl $CHAIN" dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 fi fi else - echo "RTL for CLN $CHAIN Setting unchanged." + echo "RTL for CL $CHAIN Setting unchanged." fi # sparko process choice @@ -146,15 +146,15 @@ if [ ${check} -eq 1 ]; then choice="on"; fi if [ "${sparko}" != "${choice}" ]; then echo "# Sparko on $CHAIN Setting changed .." anychange=1 - /home/admin/config.scripts/cln-plugin.sparko.sh ${choice} $CHAIN + /home/admin/config.scripts/cl-plugin.sparko.sh ${choice} $CHAIN errorOnInstall=$? if [ "${choice}" = "on" ]; then if [ ${errorOnInstall} -eq 0 ]; then - /home/admin/config.scripts/cln-plugin.sparko.sh menu $CHAIN + /home/admin/config.scripts/cl-plugin.sparko.sh menu $CHAIN else l1="# !!! FAIL on Sparko on $CHAIN install !!!" l2="# Try manual install on terminal after reboot with:" - l3="/home/admin/config.scripts/cln-plugin.sparko.sh on $CHAIN" + l3="/home/admin/config.scripts/cl-plugin.sparko.sh on $CHAIN" dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 fi fi diff --git a/home.admin/00parallelTestnetServices.sh b/home.admin/00parallelTestnetServices.sh index 1b3dc9cc8..f67ba54a1 100644 --- a/home.admin/00parallelTestnetServices.sh +++ b/home.admin/00parallelTestnetServices.sh @@ -12,7 +12,7 @@ echo "services default values" if [ ${#trtlWebinterface} -eq 0 ]; then trtlWebinterface="off"; fi if [ ${#tlnd} -eq 0 ]; then tlnd="off"; fi if [ ${#tcrtlWebinterface} -eq 0 ]; then tcrtlWebinterface="off"; fi -if [ ${#tcln} -eq 0 ]; then tcln="off"; fi +if [ ${#tcl} -eq 0 ]; then tcl="off"; fi if [ ${#tsparko} -eq 0 ]; then tsparko="off"; fi # show select dialog @@ -21,9 +21,9 @@ echo "run dialog ..." OPTIONS=() OPTIONS+=(l "LND on $CHAIN" ${tlnd}) OPTIONS+=(r "RTL for LND $CHAIN" ${trtlWebinterface}) -OPTIONS+=(c "C-lightning on $CHAIN" ${tcln}) -OPTIONS+=(t "RTL for CLN on $CHAIN" ${tcrtlWebinterface}) -OPTIONS+=(s "Sparko for CLN on $CHAIN" ${tsparko}) +OPTIONS+=(c "C-lightning on $CHAIN" ${tcl}) +OPTIONS+=(t "RTL for CL on $CHAIN" ${tcrtlWebinterface}) +OPTIONS+=(s "Sparko for CL on $CHAIN" ${tsparko}) CHOICES=$(dialog --title ' Additional Services ' \ --checklist ' use spacebar to activate/de-activate ' \ @@ -68,26 +68,26 @@ else echo "# LND on $CHAIN Setting unchanged." fi -# tcln process choice +# tcl process choice choice="off"; check=$(echo "${CHOICES}" | grep -c "c") if [ ${check} -eq 1 ]; then choice="on"; fi -if [ "${tcln}" != "${choice}" ]; then - echo "# CLN on $CHAIN Setting changed .." +if [ "${tcl}" != "${choice}" ]; then + echo "# CL on $CHAIN Setting changed .." anychange=1 - /home/admin/config.scripts/cln.install.sh ${choice} $CHAIN + /home/admin/config.scripts/cl.install.sh ${choice} $CHAIN errorOnInstall=$? if [ "${choice}" = "on" ]; then if [ ${errorOnInstall} -eq 0 ]; then - echo "# Successfully installed CLN on $CHAIN" + echo "# Successfully installed CL on $CHAIN" else - l1="# !!! FAIL on CLN on $CHAIN install !!!" + l1="# !!! FAIL on CL on $CHAIN install !!!" l2="# Try manual install on terminal after reboot with:" - l3="/home/admin/config.scripts/cln.install.sh on $CHAIN" + l3="/home/admin/config.scripts/cl.install.sh on $CHAIN" dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 fi fi else - echo "# CLN on $CHAIN Setting unchanged." + echo "# CL on $CHAIN Setting unchanged." fi # tRTL process choice @@ -119,25 +119,25 @@ fi choice="off"; check=$(echo "${CHOICES}" | grep -c "t") if [ ${check} -eq 1 ]; then choice="on"; fi if [ "${tcrtlWebinterface}" != "${choice}" ]; then - echo "RTL for CLN $CHAIN Setting changed .." + echo "RTL for CL $CHAIN Setting changed .." anychange=1 - /home/admin/config.scripts/bonus.rtl.sh ${choice} cln $CHAIN + /home/admin/config.scripts/bonus.rtl.sh ${choice} cl $CHAIN errorOnInstall=$? if [ "${choice}" = "on" ]; then if [ ${errorOnInstall} -eq 0 ]; then sudo systemctl start tcRTL echo "waiting 10 secs .." sleep 10 - /home/admin/config.scripts/bonus.rtl.sh menu cln $CHAIN + /home/admin/config.scripts/bonus.rtl.sh menu cl $CHAIN else - l1="!!! FAIL on RTL for CLN $CHAIN install !!!" + l1="!!! FAIL on RTL for CL $CHAIN install !!!" l2="Try manual install on terminal after reboot with:" - l3="/home/admin/config.scripts/bonus.rtl.sh on cln $CHAIN" + l3="/home/admin/config.scripts/bonus.rtl.sh on cl $CHAIN" dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 fi fi else - echo "RTL for CLN $CHAIN Setting unchanged." + echo "RTL for CL $CHAIN Setting unchanged." fi # tsparko process choice @@ -146,15 +146,15 @@ if [ ${check} -eq 1 ]; then choice="on"; fi if [ "${tsparko}" != "${choice}" ]; then echo "# Sparko on $CHAIN Setting changed .." anychange=1 - /home/admin/config.scripts/cln-plugin.sparko.sh ${choice} $CHAIN + /home/admin/config.scripts/cl-plugin.sparko.sh ${choice} $CHAIN errorOnInstall=$? if [ "${choice}" = "on" ]; then if [ ${errorOnInstall} -eq 0 ]; then - /home/admin/config.scripts/cln-plugin.sparko.sh menu $CHAIN + /home/admin/config.scripts/cl-plugin.sparko.sh menu $CHAIN else l1="# !!! FAIL on Sparko on $CHAIN install !!!" l2="# Try manual install on terminal after reboot with:" - l3="/home/admin/config.scripts/cln-plugin.sparko.sh on $CHAIN" + l3="/home/admin/config.scripts/cl-plugin.sparko.sh on $CHAIN" dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 fi fi diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 123ccbf78..dddf97e07 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -141,9 +141,9 @@ do /home/admin/config.scripts/lnd.unlock.sh fi - # CLN Wallet Unlock - if [ "${CLNwalletLocked}" == "1" ] && [ "${state}" == "ready" ] && [ "${setupPhase}" == "done" ]; then - /home/admin/config.scripts/cln.hsmtool.sh unlock + # CL Wallet Unlock + if [ "${CLwalletLocked}" == "1" ] && [ "${state}" == "ready" ] && [ "${setupPhase}" == "done" ]; then + /home/admin/config.scripts/cl.hsmtool.sh unlock sleep 5 fi @@ -306,7 +306,7 @@ if [ "${setupPhase}" == "done" ]; then if [ "${lightning}" == "lnd" ]; then echo "LND command line options: lncli -h" fi - if [ "${lightning}" == "cln" ]; then + if [ "${lightning}" == "cl" ]; then echo "C-Lightning command line options: lightning-cli help" fi else diff --git a/home.admin/00settingsMenuBasics.sh b/home.admin/00settingsMenuBasics.sh index 9693dfc4d..a3c9701d7 100755 --- a/home.admin/00settingsMenuBasics.sh +++ b/home.admin/00settingsMenuBasics.sh @@ -16,8 +16,8 @@ if [ ${#lcdrotate} -eq 0 ]; then lcdrotate=0; fi if [ ${#zerotier} -eq 0 ]; then zerotier="off"; fi if [ ${#circuitbreaker} -eq 0 ]; then circuitbreaker="off"; fi if [ ${#clboss} -eq 0 ]; then clboss="off"; fi -if [ ${#clnEncryptedHSM} -eq 0 ]; then clnEncryptedHSM="off"; fi -if [ ${#clnAutoUnlock} -eq 0 ]; then clnAutoUnlock="off"; fi +if [ ${#clEncryptedHSM} -eq 0 ]; then clEncryptedHSM="off"; fi +if [ ${#clAutoUnlock} -eq 0 ]; then clAutoUnlock="off"; fi echo "# map LND to on/off" lndNode="off" @@ -25,10 +25,10 @@ if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then lndNode="on" fi -echo "# map CLN to on/off" -clnNode="off" -if [ "${lightning}" == "cln" ] || [ "${cln}" == "on" ]; then - clnNode="on" +echo "# map CL to on/off" +clNode="off" +if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then + clNode="on" fi echo "map nextcloudbackup to on/off" @@ -90,16 +90,16 @@ if [ "${clboss}" == "on" ]; then clbossMenu='on' fi -echo "# map clnEncryptedHSM to on/off" -clnEncryptedHSMMenu='off' -if [ "${clnEncryptedHSM}" == "on" ]; then - clnEncryptedHSMMenu='on' +echo "# map clEncryptedHSM to on/off" +clEncryptedHSMMenu='off' +if [ "${clEncryptedHSM}" == "on" ]; then + clEncryptedHSMMenu='on' fi -echo "# map clnAutoUnlock to on/off" -clnAutoUnlockMenu='off' -if [ "${clnAutoUnlock}" == "on" ]; then - clnAutoUnlockMenu='on' +echo "# map clAutoUnlock to on/off" +clAutoUnlockMenu='off' +if [ "${clAutoUnlock}" == "on" ]; then + clAutoUnlockMenu='on' fi # show select dialog @@ -137,12 +137,12 @@ if [ "${lndNode}" == "on" ]; then fi # C-Lightning & options/PlugIns -OPTIONS+=(n 'CLN C-LIGHTNING NODE' ${clnNode}) -if [ "${clnNode}" == "on" ]; then - OPTIONS+=(o '-CLN CLBOSS Automatic Node Manager' ${clbossMenu}) - OPTIONS+=(h '-CLN Wallet Encryption' ${clnEncryptedHSMMenu}) - if [ "${clnEncryptedHSM}" == "on" ]; then - OPTIONS+=(q '-CLN Auto-Unlock' ${clnAutoUnlockMenu}) +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}) + if [ "${clEncryptedHSM}" == "on" ]; then + OPTIONS+=(q '-CL Auto-Unlock' ${clAutoUnlockMenu}) fi fi @@ -409,27 +409,27 @@ else echo "LND NODE setting unchanged." fi -# CLN choice +# CL choice choice="off"; check=$(echo "${CHOICES}" | grep -c "n") if [ ${check} -eq 1 ]; then choice="on"; fi -if [ "${clnNode}" != "${choice}" ]; then +if [ "${clNode}" != "${choice}" ]; then anychange=1 echo "# C-Lightning NODE Setting changed .." if [ "${choice}" = "on" ]; then echo "# turning ON" - /home/admin/config.scripts/cln.install.sh on mainnet - sudo /home/admin/config.scripts/cln.install.sh display-seed mainnet + /home/admin/config.scripts/cl.install.sh on mainnet + sudo /home/admin/config.scripts/cl.install.sh display-seed mainnet if [ "${testnet}" == "on" ]; then - /home/admin/config.scripts/cln.install.sh on testnet + /home/admin/config.scripts/cl.install.sh on testnet fi if [ "${signet}" == "on" ]; then - /home/admin/config.scripts/cln.install.sh on signet + /home/admin/config.scripts/cl.install.sh on signet fi else echo "# turning OFF" - /home/admin/config.scripts/cln.install.sh off mainnet - /home/admin/config.scripts/cln.install.sh off testnet - /home/admin/config.scripts/cln.install.sh off signet + /home/admin/config.scripts/cl.install.sh off mainnet + /home/admin/config.scripts/cl.install.sh off testnet + /home/admin/config.scripts/cl.install.sh off signet fi else echo "C-Lightning NODE setting unchanged." @@ -438,45 +438,45 @@ fi # CLBOSS process choice choice="off"; check=$(echo "${CHOICES}" | grep -c "o") if [ ${check} -eq 1 ]; then choice="on"; fi -if [ "${clboss}" != "${choice}" ] && [ "${clnNode}" == "on" ]; then +if [ "${clboss}" != "${choice}" ] && [ "${clNode}" == "on" ]; then echo "CLBOSS Setting changed .." anychange=1 - sudo /home/admin/config.scripts/cln-plugin.clboss.sh ${choice} + sudo /home/admin/config.scripts/cl-plugin.clboss.sh ${choice} needsReboot=0 else echo "CLBOSS Setting unchanged." fi -# clnEncryptedHSM process choice +# clEncryptedHSM process choice choice="off"; check=$(echo "${CHOICES}" | grep -c "h") if [ ${check} -eq 1 ]; then choice="on"; fi -if [ "${clnEncryptedHSM}" != "${choice}" ] && [ "${clnNode}" == "on" ]; then - echo "clnEncryptedHSM Setting changed .." +if [ "${clEncryptedHSM}" != "${choice}" ] && [ "${clNode}" == "on" ]; then + echo "clEncryptedHSM Setting changed .." anychange=1 if [ "${choice}" == "on" ]; then - /home/admin/config.scripts/cln.hsmtool.sh encrypt mainnet + /home/admin/config.scripts/cl.hsmtool.sh encrypt mainnet else - /home/admin/config.scripts/cln.hsmtool.sh decrypt mainnet + /home/admin/config.scripts/cl.hsmtool.sh decrypt mainnet fi needsReboot=0 else - echo "clnEncryptedHSM Setting unchanged." + echo "clEncryptedHSM Setting unchanged." fi -# clnAutoUnlock process choice +# clAutoUnlock process choice choice="off"; check=$(echo "${CHOICES}" | grep -c "q") if [ ${check} -eq 1 ]; then choice="on"; fi -if [ "${clnAutoUnlock}" != "${choice}" ] && [ "${clnNode}" == "on" ]; then - echo "clnAutoUnlock Setting changed .." +if [ "${clAutoUnlock}" != "${choice}" ] && [ "${clNode}" == "on" ]; then + echo "clAutoUnlock Setting changed .." anychange=1 if [ "${choice}" == "on" ]; then - /home/admin/config.scripts/cln.hsmtool.sh autounlock-on mainnet + /home/admin/config.scripts/cl.hsmtool.sh autounlock-on mainnet else - /home/admin/config.scripts/cln.hsmtool.sh autounlock-off mainnet + /home/admin/config.scripts/cl.hsmtool.sh autounlock-off mainnet fi needsReboot=0 else - echo "clnAutoUnlock Setting unchanged." + echo "clAutoUnlock Setting unchanged." fi # parallel testnet process choice @@ -492,16 +492,16 @@ if [ "${testnet}" != "${choice}" ]; then /home/admin/config.scripts/lnd.install.sh on testnet initwallet /home/admin/config.scripts/lnd.install.sh on signet initwallet fi - if [ "${lightning}" == "cln" ] || [ "${cln}" == "on" ]; then - /home/admin/config.scripts/cln.install.sh on testnet - /home/admin/config.scripts/cln.install.sh on signet + 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 else # just turn al 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/cln.install.sh off testnet - /home/admin/config.scripts/cln.install.sh off signet + /home/admin/config.scripts/cl.install.sh off testnet + /home/admin/config.scripts/cl.install.sh off signet /home/admin/config.scripts/bitcoin.install.sh off testnet /home/admin/config.scripts/bitcoin.install.sh off signet fi diff --git a/home.admin/00settingsMenuServices.sh b/home.admin/00settingsMenuServices.sh index 54a164152..da1bd4ea4 100755 --- a/home.admin/00settingsMenuServices.sh +++ b/home.admin/00settingsMenuServices.sh @@ -54,8 +54,8 @@ if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then OPTIONS+=(x 'LND Sphinx-Relay' ${sphinxrelay}) fi -# just available for CLN -if [ "${lightning}" == "cln" ] || [ "${cln}" == "on" ]; then +# just available for CL +if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then OPTIONS+=(c 'C-Lightning RTL Webinterface' ${crtlWebinterface}) OPTIONS+=(k 'C-Lightning Sparko WebWallet' ${sparko}) fi @@ -111,25 +111,25 @@ fi choice="off"; check=$(echo "${CHOICES}" | grep -c "c") if [ ${check} -eq 1 ]; then choice="on"; fi if [ "${crtlWebinterface}" != "${choice}" ]; then - echo "RTL-cln Webinterface Setting changed .." + echo "RTL-cl Webinterface Setting changed .." anychange=1 - /home/admin/config.scripts/bonus.rtl.sh ${choice} cln mainnet + /home/admin/config.scripts/bonus.rtl.sh ${choice} cl mainnet errorOnInstall=$? if [ "${choice}" = "on" ]; then if [ ${errorOnInstall} -eq 0 ]; then sudo systemctl start RTL echo "waiting 10 secs .." sleep 10 - /home/admin/config.scripts/bonus.rtl.sh menu cln mainnet + /home/admin/config.scripts/bonus.rtl.sh menu cl mainnet else l1="!!! FAIL on RTL C-Lightning install !!!" l2="Try manual install on terminal after reboot with:" - l3="/home/admin/config.scripts/bonus.rtl.sh on cln mainnet" + l3="/home/admin/config.scripts/bonus.rtl.sh on cl mainnet" dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 fi fi else - echo "RTL-cln Webinterface Setting unchanged." + echo "RTL-cl Webinterface Setting unchanged." fi # BTC-RPC-Explorer process choice @@ -480,15 +480,15 @@ if [ ${check} -eq 1 ]; then choice="on"; fi if [ "${sparko}" != "${choice}" ]; then echo "# Sparko on mainnet Setting changed .." anychange=1 - /home/admin/config.scripts/cln-plugin.sparko.sh ${choice} mainnet + /home/admin/config.scripts/cl-plugin.sparko.sh ${choice} mainnet errorOnInstall=$? if [ "${choice}" = "on" ]; then if [ ${errorOnInstall} -eq 0 ]; then - /home/admin/config.scripts/cln-plugin.sparko.sh menu mainnet + /home/admin/config.scripts/cl-plugin.sparko.sh menu mainnet else l1="# !!! FAIL on Sparko on mainnet install !!!" l2="# Try manual install on terminal after reboot with:" - l3="/home/admin/config.scripts/cln-plugin.sparko.sh on mainnet" + l3="/home/admin/config.scripts/cl-plugin.sparko.sh on mainnet" dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 fi fi diff --git a/home.admin/97addMobileWallet.sh b/home.admin/97addMobileWallet.sh index f63148cc7..8797c5094 100755 --- a/home.admin/97addMobileWallet.sh +++ b/home.admin/97addMobileWallet.sh @@ -6,7 +6,7 @@ source /mnt/hdd/raspiblitz.conf if [ "$1" = "-h" ] || [ "$1" = "-help" ];then echo "Usage:" - echo "97addMobileWallet.sh " + echo "97addMobileWallet.sh " echo "defaults from the configs are:" echo "ligthning=${lightning}" echo "chain=${chain}" @@ -153,9 +153,9 @@ if [ $lightning = "lnd" ]; then # add SEND MANY APP OPTIONS+=(SENDMANY_ANDROID "SendMany (Android)") -elif [ $lightning = "cln" ]; then +elif [ $lightning = "cl" ]; then - OPTIONS=(ZEUS_CLNREST "Zeus to C-lightningREST (Android or iOS)" \ + OPTIONS=(ZEUS_CLREST "Zeus to C-lightningREST (Android or iOS)" \ ZEUS_SPARK "Zeus to Sparko (Android or iOS)" \ SPARK "Spark Wallet to Sparko (Android - EXPERIMENTAL)" ) @@ -332,7 +332,7 @@ Or scan the qr code on the LCD with your mobile phone. exit 0; ;; -ZEUS_CLNREST) +ZEUS_CLREST) /home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/app_zeus.png whiptail --title "Install Zeus on your Android or iOS Phone" \ --yes-button "Continue" \ @@ -342,7 +342,7 @@ ZEUS_CLNREST) exit 0 fi /home/admin/config.scripts/blitz.display.sh hide - /home/admin/config.scripts/cln.rest.sh connect + /home/admin/config.scripts/cl.rest.sh connect exit 0; ;; ZEUS_SPARK) @@ -355,7 +355,7 @@ ZEUS_SPARK) exit 0 fi /home/admin/config.scripts/blitz.display.sh hide - /home/admin/config.scripts/cln-plugin.sparko.sh connect + /home/admin/config.scripts/cl-plugin.sparko.sh connect exit 0; ;; SPARK) @@ -374,7 +374,7 @@ Or scan the QR code on the LCD with your mobile phone. " 11 70 fi /home/admin/config.scripts/blitz.display.sh hide - /home/admin/config.scripts/cln-plugin.sparko.sh connect + /home/admin/config.scripts/cl-plugin.sparko.sh connect exit 0; ;; diff --git a/home.admin/98repairMenu.sh b/home.admin/98repairMenu.sh index 2bc5d185e..0336383c3 100755 --- a/home.admin/98repairMenu.sh +++ b/home.admin/98repairMenu.sh @@ -53,8 +53,8 @@ if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then OPTIONS+=(BACKUP-LND "Backup your LND data (Rescue-File)") OPTIONS+=(RESET-LND "Delete LND & start new node/wallet") fi -if [ "${lightning}" == "cln" ] || [ "${cln}" == "on" ]; then - OPTIONS+=(REPAIR-CLN "Repair/Backup C-Lightning") +if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then + OPTIONS+=(REPAIR-CL "Repair/Backup C-Lightning") fi OPTIONS+=(MIGRATION "Migrate Blitz Data to new Hardware") OPTIONS+=(COPY-SOURCE "Copy Blockchain Source Modus") @@ -82,8 +82,8 @@ case $CHOICE in read key /home/admin/config.scripts/blitz.shutdown.sh ;; - REPAIR-CLN) - sudo /home/admin/99clnRepairMenu.sh + REPAIR-CL) + sudo /home/admin/99clRepairMenu.sh echo echo "Press ENTER to return to main menu." read key diff --git a/home.admin/99clnMenu.sh b/home.admin/99clMenu.sh similarity index 70% rename from home.admin/99clnMenu.sh rename to home.admin/99clMenu.sh index 57a6faa3c..54e2f18cf 100644 --- a/home.admin/99clnMenu.sh +++ b/home.admin/99clMenu.sh @@ -5,7 +5,7 @@ echo "# get raspiblitz config" source /home/admin/raspiblitz.info source /mnt/hdd/raspiblitz.conf -source <(/home/admin/config.scripts/network.aliases.sh getvars cln $1) +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) @@ -25,16 +25,16 @@ OPTIONS=() OPTIONS+=(NAME "Change the name / alias of the node") ln_getInfo=$($lightningcli_alias getinfo 2>/dev/null) ln_channels_online="$(echo "${ln_getInfo}" | jq -r '.num_active_channels')" 2>/dev/null -cln_num_inactive_channels="$(echo "${ln_getInfo}" | jq -r '.num_inactive_channels')" 2>/dev/null -openChannels=$((ln_channels_online+cln_num_inactive_channels)) +cl_num_inactive_channels="$(echo "${ln_getInfo}" | jq -r '.num_inactive_channels')" 2>/dev/null +openChannels=$((ln_channels_online+cl_num_inactive_channels)) if [ ${#openChannels} -gt 0 ] && [ ${openChannels} -gt 0 ]; then OPTIONS+=(SUEZ "Visualize channels") OPTIONS+=(CLOSEALL "Close all open channels on $CHAIN") fi OPTIONS+=(CASHOUT "Withdraw all funds onchain ($CHAIN)") OPTIONS+=(SEED "Show Wallet Seed Words") - OPTIONS+=(CLNREPAIR "Repair options for C-lightning") -if [ "${lightning}" != "cln" ] && [ "${CHAIN}" == "mainnet" ]; then + OPTIONS+=(CLREPAIR "Repair options for C-lightning") +if [ "${lightning}" != "cl" ] && [ "${CHAIN}" == "mainnet" ]; then OPTIONS+=(SWITCHLN "Use C-lightning as default") fi @@ -53,33 +53,33 @@ CHOICE=$(dialog --clear \ case $CHOICE in SUMMARY) clear - /home/admin/config.scripts/cln-plugin.summary.sh $CHAIN + /home/admin/config.scripts/cl-plugin.summary.sh $CHAIN echo "Press ENTER to return to main menu." read key ;; PEERING) - /home/admin/BBconnectPeer.sh cln $CHAIN + /home/admin/BBconnectPeer.sh cl $CHAIN ;; FUNDING) - /home/admin/BBfundWallet.sh cln $CHAIN + /home/admin/BBfundWallet.sh cl $CHAIN ;; CASHOUT) - /home/admin/BBcashoutWallet.sh cln $CHAIN + /home/admin/BBcashoutWallet.sh cl $CHAIN ;; CHANNEL) - /home/admin/BBopenChannel.sh cln $CHAIN + /home/admin/BBopenChannel.sh cl $CHAIN ;; SEND) - /home/admin/BBpayInvoice.sh cln $CHAIN + /home/admin/BBpayInvoice.sh cl $CHAIN ;; RECEIVE) - /home/admin/BBcreateInvoice.sh cln $CHAIN + /home/admin/BBcreateInvoice.sh cl $CHAIN ;; SEED) - sudo /home/admin/config.scripts/cln.install.sh display-seed $CHAIN + sudo /home/admin/config.scripts/cl.install.sh display-seed $CHAIN ;; NAME) - sudo /home/admin/config.scripts/cln.setname.sh $CHAIN + sudo /home/admin/config.scripts/cl.setname.sh $CHAIN ;; SUEZ) clear @@ -87,7 +87,7 @@ case $CHOICE in /home/admin/config.scripts/bonus.suez.sh on fi cd /home/bitcoin/suez || exit 0 - command="sudo -u bitcoin /home/bitcoin/.local/bin/poetry run ./suez --client=c-lightning --client-args=--conf=${CLNCONF}" + command="sudo -u bitcoin /home/bitcoin/.local/bin/poetry run ./suez --client=c-lightning --client-args=--conf=${CLCONF}" echo "# Running the command:" echo "${command}" echo @@ -97,19 +97,19 @@ case $CHOICE in read key ;; CLOSEALL) - /home/admin/BBcloseAllChannels.sh cln $CHAIN + /home/admin/BBcloseAllChannels.sh cl $CHAIN echo "Press ENTER to return to main menu." read key ;; - CLNREPAIR) - /home/admin/99clnRepairMenu.sh $CHAIN + CLREPAIR) + /home/admin/99clRepairMenu.sh $CHAIN ;; SWITCHLN) clear echo # setting value in the raspiblitz.conf - sudo sed -i "s/^lightning=.*/lightning=cln/g" /mnt/hdd/raspiblitz.conf - echo "# OK - lightning=cln is set in /mnt/hdd/raspiblitz.conf" + sudo sed -i "s/^lightning=.*/lightning=cl/g" /mnt/hdd/raspiblitz.conf + echo "# OK - lightning=cl is set in /mnt/hdd/raspiblitz.conf" echo echo "Press ENTER to return to main menu." read key diff --git a/home.admin/99clnRepairMenu.sh b/home.admin/99clRepairMenu.sh similarity index 65% rename from home.admin/99clnRepairMenu.sh rename to home.admin/99clRepairMenu.sh index ed3e1588f..39e88fd22 100644 --- a/home.admin/99clnRepairMenu.sh +++ b/home.admin/99clRepairMenu.sh @@ -5,11 +5,11 @@ echo "# get raspiblitz config" source /home/admin/raspiblitz.info source /mnt/hdd/raspiblitz.conf -source <(/home/admin/config.scripts/network.aliases.sh getvars cln $1) +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) -NETclnEncryptedHSM="${netprefix}clnEncryptedHSM" +NETclEncryptedHSM="${netprefix}clEncryptedHSM" # BASIC MENU INFO WIDTH=64 @@ -18,12 +18,12 @@ TITLE="C-lightning repair options for $CHAIN" MENU="" OPTIONS=() -if [ "$(eval echo \$${netprefix}clnEncryptedHSM)" = "off" ];then +if [ "$(eval echo \$${netprefix}clEncryptedHSM)" = "off" ];then OPTIONS+=(ENCRYPT "Encrypt the hsm_secret") -elif [ "$(eval echo \$${netprefix}clnEncryptedHSM)" = "on" ];then +elif [ "$(eval echo \$${netprefix}clEncryptedHSM)" = "on" ];then OPTIONS+=(PASSWORD_C "Change the hsm_secret encryption password") OPTIONS+=(DECRYPT "Decrypt the hsm_secret") - if [ ! -f "/root/.${netprefix}cln.pw" ]; then + if [ ! -f "/root/.${netprefix}cl.pw" ]; then OPTIONS+=(AUTOUNLOCK-ON "Auto-decrypt the hsm_secret after boot") else OPTIONS+=(AUTOUNLOCK-OFF "Do not auto-decrypt the hsm_secret after boot") @@ -48,25 +48,25 @@ CHOICE=$(dialog --clear \ case $CHOICE in ENCRYPT) - /home/admin/config.scripts/cln.hsmtool.sh encrypt $CHAIN + /home/admin/config.scripts/cl.hsmtool.sh encrypt $CHAIN source /mnt/hdd/raspiblitz.conf ;; DECRYPT) - /home/admin/config.scripts/cln.hsmtool.sh decrypt $CHAIN + /home/admin/config.scripts/cl.hsmtool.sh decrypt $CHAIN source /mnt/hdd/raspiblitz.conf ;; PASSWORD_C) - /home/admin/config.scripts/cln.hsmtool.sh change-password $CHAIN + /home/admin/config.scripts/cl.hsmtool.sh change-password $CHAIN ;; AUTOUNLOCK-ON) - /home/admin/config.scripts/cln.hsmtool.sh autounlock-on $CHAIN + /home/admin/config.scripts/cl.hsmtool.sh autounlock-on $CHAIN ;; AUTOUNLOCK-OFF) - /home/admin/config.scripts/cln.hsmtool.sh autounlock-off $CHAIN + /home/admin/config.scripts/cl.hsmtool.sh autounlock-off $CHAIN ;; BACKUP) @@ -74,7 +74,7 @@ case $CHOICE in # run upload dialog and get result _temp="/var/cache/raspiblitz/temp/.temp.tmp" clear - /home/admin/config.scripts/cln.backup.sh cln-export-gui production $_temp + /home/admin/config.scripts/cl.backup.sh cl-export-gui production $_temp source $_temp 2>/dev/null sudo rm $_temp 2>/dev/null ;; @@ -84,11 +84,11 @@ case $CHOICE in ## from dialogLightningWallet.sh _temp="/var/cache/raspiblitz/temp/.temp.tmp" clear - /home/admin/config.scripts/cln.backup.sh cln-export-gui production $_temp + /home/admin/config.scripts/cl.backup.sh cl-export-gui production $_temp source $_temp 2>/dev/null sudo rm $_temp 2>/dev/null echo - echo "The rescue file is stored on the SDcard named cln-rescue.*.tar.gz just in case." + echo "The rescue file is stored on the SDcard named cl-rescue.*.tar.gz just in case." echo "The next step will overwrite the old C-lighthning $CHAIN wallet" echo "Press ENTER to continue or CTRL+C to abort" read key @@ -97,22 +97,22 @@ case $CHOICE in sudo rm /home/bitcoin/.lightning/${CLNETWORK}/*.* # make sure the new hsm_secret is treated as unencrypted and clear autounlock sudo sed -i \ - "s/^${netprefix}clnEncryptedHSM=.*/${netprefix}clnEncryptedHSM=off/g" \ + "s/^${netprefix}clEncryptedHSM=.*/${netprefix}clEncryptedHSM=off/g" \ /mnt/hdd/raspiblitz.conf sudo sed -i \ - "s/^${netprefix}clnAutoUnlock=.*/${netprefix}clnEncryptedHSM=off/g" \ + "s/^${netprefix}clAutoUnlock=.*/${netprefix}clEncryptedHSM=off/g" \ /mnt/hdd/raspiblitz.conf # new - /home/admin/config.scripts/cln.hsmtool.sh new $CHAIN + /home/admin/config.scripts/cl.hsmtool.sh new $CHAIN # set the lightningd service file on each active network - if [ "${cln}" == "on" ] || [ "${cln}" == "1" ]; then - /home/admin/config.scripts/cln.install-service.sh mainnet + if [ "${cl}" == "on" ] || [ "${cl}" == "1" ]; then + /home/admin/config.scripts/cl.install-service.sh mainnet fi - if [ "${tcln}" == "on" ] || [ "${tcln}" == "1" ]; then - /home/admin/config.scripts/cln.install-service.sh testnet + if [ "${tcl}" == "on" ] || [ "${tcl}" == "1" ]; then + /home/admin/config.scripts/cl.install-service.sh testnet fi - if [ "${scln}" == "on" ] || [ "${scln}" == "1" ]; then - /home/admin/config.scripts/cln.install-service.sh signet + if [ "${scl}" == "on" ] || [ "${scl}" == "1" ]; then + /home/admin/config.scripts/cl.install-service.sh signet fi ;; @@ -121,11 +121,11 @@ case $CHOICE in ## from dialogLightningWallet.sh _temp="/var/cache/raspiblitz/temp/.temp.tmp" clear - /home/admin/config.scripts/cln.backup.sh cln-export-gui production $_temp + /home/admin/config.scripts/cl.backup.sh cl-export-gui production $_temp source $_temp 2>/dev/null sudo rm $_temp 2>/dev/null echo - echo "The rescue file is stored on the SDcard named cln-rescue.*.tar.gz just in case." + echo "The rescue file is stored on the SDcard named cl-rescue.*.tar.gz just in case." echo "The next step will overwrite the old C-lighthning $CHAIN wallet" echo "Press ENTER to continue or CTRL+C to abort" read key @@ -135,7 +135,7 @@ case $CHOICE in # import file _temp="/var/cache/raspiblitz/temp/.temp.tmp" clear - /home/admin/config.scripts/cln.backup.sh cln-import-gui production $_temp + /home/admin/config.scripts/cl.backup.sh cl-import-gui production $_temp source $_temp 2>/dev/null sudo rm $_temp 2>/dev/null ;; @@ -145,11 +145,11 @@ case $CHOICE in ## from dialogLightningWallet.sh _temp="/var/cache/raspiblitz/temp/.temp.tmp" clear - /home/admin/config.scripts/cln.backup.sh cln-export-gui production $_temp + /home/admin/config.scripts/cl.backup.sh cl-export-gui production $_temp source $_temp 2>/dev/null sudo rm $_temp 2>/dev/null echo - echo "The rescue file is stored on the SDcard named cln-rescue.*.tar.gz just in case." + echo "The rescue file is stored on the SDcard named cl-rescue.*.tar.gz just in case." echo "The next step will overwrite the old C-lighthning $CHAIN wallet" echo "Press ENTER to continue or CTRL+C to abort" read key @@ -159,14 +159,14 @@ case $CHOICE in sudo rm /home/bitcoin/.lightning/${CLNETWORK}/*.* # import seed _temp="/var/cache/raspiblitz/.temp.tmp" - /home/admin/config.scripts/cln.backup.sh seed-import-gui $_temp - /home/admin/config.scripts/cln.hsmtool.sh seed "$CHAIN" "$(cat $_temp)" + /home/admin/config.scripts/cl.backup.sh seed-import-gui $_temp + /home/admin/config.scripts/cl.hsmtool.sh seed "$CHAIN" "$(cat $_temp)" source $_temp 2>/dev/null sudo rm $_temp 2>/dev/null # regenerate config - /home/admin/config.scripts/cln.hsmtool.sh autounlock-off - /home/admin/config.scripts/cln.hsmtool.sh decrypt - /home/admin/config.scripts/cln.install.sh on $CHAIN + /home/admin/config.scripts/cl.hsmtool.sh autounlock-off + /home/admin/config.scripts/cl.hsmtool.sh decrypt + /home/admin/config.scripts/cl.install.sh on $CHAIN ;; esac diff --git a/home.admin/99systemMenu.sh b/home.admin/99systemMenu.sh index 7407e13e5..8e6479b20 100644 --- a/home.admin/99systemMenu.sh +++ b/home.admin/99systemMenu.sh @@ -5,8 +5,8 @@ echo "get raspiblitz config" source /home/admin/raspiblitz.info source /mnt/hdd/raspiblitz.conf -# source <(/home/admin/config.scripts/network.aliases.sh getvars ) -source <(/home/admin/config.scripts/network.aliases.sh getvars cln $1) +# source <(/home/admin/config.scripts/network.aliases.sh getvars ) +source <(/home/admin/config.scripts/network.aliases.sh getvars cl $1) # BASIC MENU INFO WIDTH=64 @@ -23,9 +23,9 @@ if grep "^${netprefix}lnd=on" /mnt/hdd/raspiblitz.conf;then OPTIONS+=(LNDCONF "Edit the lnd.conf for ${CHAIN}") fi -if grep "^${netprefix}cln=on" /mnt/hdd/raspiblitz.conf;then - OPTIONS+=(CLNLOG "Monitor the CLN log for ${CHAIN}") - OPTIONS+=(CLNCONF "Edit the CLN config for ${CHAIN}") +if grep "^${netprefix}cl=on" /mnt/hdd/raspiblitz.conf;then + OPTIONS+=(CLLOG "Monitor the CL log for ${CHAIN}") + OPTIONS+=(CLCONF "Edit the CL config for ${CHAIN}") fi if [ "${runBehindTor}" == "on" ] && [ "${netprefix}" == "" ]; then @@ -110,7 +110,7 @@ case $CHOICE in else echo "# No change made" fi;; - CLNLOG) + CLLOG) clear echo echo "Will follow the /home/bitcoin/.lightning/${CLNETWORK}/cl.log" @@ -121,8 +121,8 @@ case $CHOICE in echo "###############################################################################" read key sudo tail -n 30 -f /home/bitcoin/.lightning/${CLNETWORK}/cl.log;; - CLNCONF) - if /home/admin/config.scripts/blitz.setconf.sh "${CLNCONF}" "root" + CLCONF) + if /home/admin/config.scripts/blitz.setconf.sh "${CLCONF}" "root" then whiptail \ --title "Restart" --yes-button "Restart" --no-button "Not now" \ diff --git a/home.admin/99updateMenu.sh b/home.admin/99updateMenu.sh index 98dec0064..589a94460 100755 --- a/home.admin/99updateMenu.sh +++ b/home.admin/99updateMenu.sh @@ -42,8 +42,8 @@ Do you want to download Lightning Data Backup now? sleep 2 if [ "${lightning}" == "lnd" ]; then /home/admin/config.scripts/lnd.backup.sh lnd-export-gui - elif [ "${lightning}" == "cln" ]; then - /home/admin/config.scripts/cln.backup.sh cln-export-gui + elif [ "${lightning}" == "cl" ]; then + /home/admin/config.scripts/cl.backup.sh cl-export-gui else echo "TODO: Implement Data Backup for '${lightning}'" fi @@ -59,8 +59,8 @@ Do you want to download Lightning Data Backup now? sleep 2 if [ "${lightning}" == "lnd" ]; then /home/admin/config.scripts/lnd.backup.sh lnd-export - elif [ "${lightning}" == "cln" ]; then - /home/admin/config.scripts/cln.backup.sh cln-export + elif [ "${lightning}" == "cl" ]; then + /home/admin/config.scripts/cl.backup.sh cl-export else echo "TODO: Implement Data Backup for '${lightning}'" sleep 3 diff --git a/home.admin/BBcashoutWallet.sh b/home.admin/BBcashoutWallet.sh index b99a5aca0..55b137832 100755 --- a/home.admin/BBcashoutWallet.sh +++ b/home.admin/BBcashoutWallet.sh @@ -18,11 +18,11 @@ fi source <(/home/admin/config.scripts/network.aliases.sh getvars $1 $2) # check if user has money in lightning channels - info about close all -if [ $LNTYPE = cln ];then +if [ $LNTYPE = cl ];then ln_getInfo=$($lightningcli_alias getinfo 2>/dev/null) ln_channels_online="$(echo "${ln_getInfo}" | jq -r '.num_active_channels')" 2>/dev/null - cln_num_inactive_channels="$(echo "${ln_getInfo}" | jq -r '.num_inactive_channels')" 2>/dev/null - openChannels=$((ln_channels_online+cln_num_inactive_channels)) + cl_num_inactive_channels="$(echo "${ln_getInfo}" | jq -r '.num_inactive_channels')" 2>/dev/null + openChannels=$((ln_channels_online+cl_num_inactive_channels)) elif [ $LNTYPE = lnd ];then openChannels=$($lncli_alias listchannels 2>/dev/null | jq '.[] | length') fi @@ -47,10 +47,10 @@ if [ ${openChannels} -gt 0 ]; then fi # check if money is waiting to get confirmed -if [ $LNTYPE = cln ];then +if [ $LNTYPE = cl ];then ln_walletbalance_wait=0 - cln_listfunds=$($lightningcli_alias listfunds 2>/dev/null) - for i in $(echo "$cln_listfunds" \ + cl_listfunds=$($lightningcli_alias listfunds 2>/dev/null) + 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 @@ -91,7 +91,7 @@ echo "Sweep all possible Funds" echo "******************************" # execute command -if [ ${LNTYPE} = "cln" ];then +if [ ${LNTYPE} = "cl" ];then # withdraw destination satoshi [feerate] [minconf] [utxos] command="$lightningcli_alias withdraw ${address} all slow" elif [ ${LNTYPE} = "lnd" ];then diff --git a/home.admin/BBcloseAllChannels.sh b/home.admin/BBcloseAllChannels.sh index 7f23b223e..3437ec416 100755 --- a/home.admin/BBcloseAllChannels.sh +++ b/home.admin/BBcloseAllChannels.sh @@ -11,19 +11,19 @@ fi source <(/home/admin/config.scripts/network.aliases.sh getvars $1 $2) -if [ $LNTYPE = cln ];then +if [ $LNTYPE = cl ];then # https://lightning.readthedocs.io/lightning-close.7.html peerlist=$($lightningcli_alias listpeers|grep '"id":'|awk '{print $2}'|cut -d, -f1) # to display - function cln_closeall_command { + function cl_closeall_command { for i in $peerlist; do # close id [unilateraltimeout] [destination] [fee_negotiation_step] [*wrong_funding*] echo "$lightningcli_alias close $i 30;" done } - command=$(cln_closeall_command) + command=$(cl_closeall_command) # to run - function cln_closeall { + function cl_closeall { for i in $peerlist; do # close id [unilateraltimeout] [destination] [fee_negotiation_step] [*wrong_funding*] echo "# Attempting a mutual close one-by-one with a 30 seconds timeout" @@ -42,7 +42,7 @@ fi clear echo echo "# Precheck" # PRECHECK) check if chain is in sync -if [ $LNTYPE = cln ];then +if [ $LNTYPE = cl ];then BLOCKHEIGHT=$($bitcoincli_alias getblockchaininfo|grep blocks|awk '{print $2}'|cut -d, -f1) CLHEIGHT=$($lightningcli_alias getinfo | jq .blockheight) if [ $BLOCKHEIGHT -eq $CLHEIGHT ];then @@ -54,7 +54,7 @@ elif [ $LNTYPE = lnd ];then chainOutSync=$($lncli_alias getinfo | grep '"synced_to_chain": false' -c) fi if [ ${chainOutSync} -eq 1 ]; then - if [ $LNTYPE = cln ];then + if [ $LNTYPE = cl ];then echo "# FAIL PRECHECK - '${netprefix}lightning-cli getinfo' blockheight is different from '${netprefix}bitcoind getblockchaininfo' - wait until chain is sync " elif [ $LNTYPE = lnd ];then echo "# FAIL PRECHECK - ${netprefix}lncli getinfo shows 'synced_to_chain': false - wait until chain is sync " @@ -78,8 +78,8 @@ echo "# RESULT:" # execute command if [ ${#command} -gt 0 ]; then - if [ $LNTYPE = cln ];then - cln_closeall + if [ $LNTYPE = cl ];then + cl_closeall elif [ $LNTYPE = lnd ];then ${command} fi diff --git a/home.admin/BBconnectPeer.sh b/home.admin/BBconnectPeer.sh index 79011d06e..75edfb964 100755 --- a/home.admin/BBconnectPeer.sh +++ b/home.admin/BBconnectPeer.sh @@ -41,7 +41,7 @@ pubkey=$(echo "${_input}"|cut -d@ -f1) # address=$(echo "${_input}"|cut -d@ -f2|cut -d: -f1) # port=$(echo "${_input}"|cut -d: -f2) # build command -if [ $LNTYPE = cln ];then +if [ $LNTYPE = cl ];then # connect id [host port] command="$lightningcli_alias connect ${_input}" elif [ $LNTYPE = lnd ];then @@ -104,7 +104,7 @@ else echo "$result" # check if the node is now in peer list - if [ $LNTYPE = cln ];then + if [ $LNTYPE = cl ];then isPeer=$($lightningcli_alias listpeers 2>/dev/null| grep "${pubkey}" -c) elif [ $LNTYPE = lnd ];then isPeer=$($lncli_alias listpeers 2>/dev/null| grep "${pubkey}" -c) diff --git a/home.admin/BBcreateInvoice.sh b/home.admin/BBcreateInvoice.sh index b70866869..66374a50c 100755 --- a/home.admin/BBcreateInvoice.sh +++ b/home.admin/BBcreateInvoice.sh @@ -21,7 +21,7 @@ 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 -if [ $LNTYPE = cln ];then +if [ $LNTYPE = cl ];then lncommand="${netprefix}lightning-cli" BLOCKHEIGHT=$($bitcoincli_alias getblockchaininfo|grep blocks|awk '{print $2}'|cut -d, -f1) CLHEIGHT=$($lightningcli_alias getinfo | jq .blockheight) @@ -49,7 +49,7 @@ done # check number of connected peers echo "check for open channels" -if [ $LNTYPE = cln ];then +if [ $LNTYPE = cl ];then openChannels=$($lightningcli_alias listpeers | grep -c "CHANNELD_NORMAL") elif [ $LNTYPE = lnd ];then openChannels=$($lncli_alias listchannels 2>/dev/null | grep chan_id -c) @@ -81,7 +81,7 @@ fi # TODO let user enter a description # build command -if [ $LNTYPE = cln ];then +if [ $LNTYPE = cl ];then label=$(date +%s) # seconds since 1970-01-01 00:00:00 UTC # invoice msatoshi label description [expiry] [fallbacks] [preimage] [exposeprivatechannels] [cltv] command="$lightningcli_alias invoice ${amount}sat $label ''" @@ -115,7 +115,7 @@ if [ ${#error} -gt 0 ]; then echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo "${error}" else - if [ $LNTYPE = cln ];then + if [ $LNTYPE = cl ];then payReq=$(echo "$result" | grep bolt11 | cut -d '"' -f4) elif [ $LNTYPE = lnd ];then rhash=$(echo "$result" | grep r_hash | cut -d '"' -f4) @@ -139,7 +139,7 @@ else echo "${payReq}" echo echo "Monitoring the Incoming Payment with:" - if [ $LNTYPE = cln ];then + if [ $LNTYPE = cl ];then echo "$lightningcli_alias waitinvoice $label" elif [ $LNTYPE = lnd ];then echo "$lncli_alias lookupinvoice ${rhash}" @@ -148,7 +148,7 @@ else while : do - if [ $LNTYPE = cln ];then + if [ $LNTYPE = cl ];then result=$($lightningcli_alias waitinvoice $label) wasPayed=$(echo $result | grep -c 'paid') elif [ $LNTYPE = lnd ];then diff --git a/home.admin/BBfundWallet.sh b/home.admin/BBfundWallet.sh index a55b3bd90..81cb922d9 100755 --- a/home.admin/BBfundWallet.sh +++ b/home.admin/BBfundWallet.sh @@ -14,7 +14,7 @@ fi source <(/home/admin/config.scripts/network.aliases.sh getvars $1 $2) # PRECHECK) check if chain is in sync -if [ $LNTYPE = cln ];then +if [ $LNTYPE = cl ];then BLOCKHEIGHT=$($bitcoincli_alias getblockchaininfo|grep blocks|awk '{print $2}'|cut -d, -f1) CLHEIGHT=$($lightningcli_alias getinfo | jq .blockheight) if [ $BLOCKHEIGHT -eq $CLHEIGHT ];then @@ -26,7 +26,7 @@ elif [ $LNTYPE = lnd ];then chainOutSync=$($lncli_alias getinfo | grep '"synced_to_chain": false' -c) fi if [ ${chainOutSync} -eq 1 ]; then - if [ $LNTYPE = cln ];then + if [ $LNTYPE = cl ];then echo "# FAIL PRECHECK - lncli getinfo shows 'synced_to_chain': false - wait until chain is sync " else echo "# FAIL PRECHECK - 'lightning-cli getinfo' blockheight is different from 'bitcoind getblockchaininfo' - wait until chain is sync " @@ -40,7 +40,7 @@ else fi # execute command -if [ $LNTYPE = cln ];then +if [ $LNTYPE = cl ];then command="$lightningcli_alias newaddr bech32" elif [ $LNTYPE = lnd ];then command="$lncli_alias newaddress p2wkh" @@ -61,7 +61,7 @@ if [ ${#result} -eq 0 ]; then fi # parse address from result -if [ $LNTYPE = cln ];then +if [ $LNTYPE = cl ];then address=$( echo "$result" | grep "bech32" | cut -d '"' -f4) elif [ $LNTYPE = lnd ];then address=$( echo "$result" | grep "address" | cut -d '"' -f4) @@ -100,10 +100,10 @@ fi /home/admin/config.scripts/blitz.display.sh hide # follow up info -if [ $LNTYPE = cln ];then +if [ $LNTYPE = cl ];then string="Wait for confirmations." elif [ $LNTYPE = lnd ];then - string="Wait for confirmations. \n\nYou can use info on LCD to check if funds have arrived. \n\nIf you want your lighting node to open channels automatically, activate the 'Autopilot' under 'Activate/Deactivate Services'" + string="Wait for confirmations. \n\nYou can use info on LCD to check if funds have arrived. \n\nIf you want your lightning node to open channels automatically, activate the 'Autopilot' under 'Activate/Deactivate Services'" fi whiptail --backtitle "Fund your onchain wallet" \ --title "What's next?" \ diff --git a/home.admin/BBopenChannel.sh b/home.admin/BBopenChannel.sh index 37273356f..a050b6a27 100755 --- a/home.admin/BBopenChannel.sh +++ b/home.admin/BBopenChannel.sh @@ -18,7 +18,7 @@ source <(/home/admin/config.scripts/network.aliases.sh getvars $1 $2) echo echo "# Precheck" # PRECHECK) check if chain is in sync -if [ $LNTYPE = cln ];then +if [ $LNTYPE = cl ];then BLOCKHEIGHT=$($bitcoincli_alias getblockchaininfo|grep blocks|awk '{print $2}'|cut -d, -f1) CLHEIGHT=$($lightningcli_alias getinfo | jq .blockheight) if [ $BLOCKHEIGHT -eq $CLHEIGHT ];then @@ -30,7 +30,7 @@ elif [ $LNTYPE = lnd ];then chainOutSync=$($lncli_alias getinfo | grep '"synced_to_chain": false' -c) fi if [ ${chainOutSync} -eq 1 ]; then - if [ $LNTYPE = cln ];then + if [ $LNTYPE = cl ];then echo "# FAIL PRECHECK - 'lightning-cli getinfo' blockheight is different from 'bitcoind getblockchaininfo' - wait until chain is sync " elif [ $LNTYPE = lnd ];then echo "# FAIL PRECHECK - lncli getinfo shows 'synced_to_chain': false - wait until chain is sync " @@ -44,7 +44,7 @@ else fi # check available funding -if [ $LNTYPE = cln ];then +if [ $LNTYPE = cl ];then for i in $($lightningcli_alias \ listfunds|jq .outputs[]|jq 'select(.status=="confirmed")'|grep value|awk '{print $2}'|cut -d, -f1);do confirmedBalance=$((confirmedBalance+i)) @@ -63,7 +63,7 @@ if [ ${confirmedBalance} -eq 0 ]; then fi # check number of connected peers -if [ $LNTYPE = cln ];then +if [ $LNTYPE = cl ];then numConnectedPeers=$($lightningcli_alias listpeers | grep -c '"id":') elif [ $LNTYPE = lnd ];then numConnectedPeers=$($lncli_alias listpeers | grep pub_key -c) @@ -81,7 +81,7 @@ fi # let user pick a peer to open a channels with OPTIONS=() -if [ $LNTYPE = cln ];then +if [ $LNTYPE = cl ];then while IFS= read -r grepLine do pubKey=$(echo ${grepLine} | cut -d '"' -f4) @@ -160,7 +160,7 @@ if [ ${#conf_target} -eq 0 ]; then fi # build command -if [ $LNTYPE = cln ];then +if [ $LNTYPE = cl ];then # fundchannel id amount [feerate] [announce] [minconf] [utxos] [push_msat] [close_to] feerate=$($bitcoincli_alias estimatesmartfee $conf_target |grep feerate|awk '{print $2}'|cut -c 5-7|bc) command="$lightningcli_alias fundchannel ${pubKey} ${amount} $feerate" @@ -197,7 +197,7 @@ else echo "${result}" echo echo "What's next? --> You need to wait 3 confirmations for the channel to be ready." - if [ $LNTYPE = cln ];then + if [ $LNTYPE = cl ];then fundingTX=$(echo "${result}" | grep 'txid' | cut -d '"' -f4) elif [ $LNTYPE = lnd ];then fundingTX=$(echo "${result}" | grep 'funding_txid' | cut -d '"' -f4) diff --git a/home.admin/BBpayInvoice.sh b/home.admin/BBpayInvoice.sh index 170f4608f..51616bc64 100755 --- a/home.admin/BBpayInvoice.sh +++ b/home.admin/BBpayInvoice.sh @@ -21,7 +21,7 @@ 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 -if [ $LNTYPE = cln ];then +if [ $LNTYPE = cl ];then lncommand="${netprefix}lightning-cli" BLOCKHEIGHT=$($bitcoincli_alias getblockchaininfo|grep blocks|awk '{print $2}'|cut -d, -f1) CLHEIGHT=$($lightningcli_alias getinfo | jq .blockheight) @@ -49,7 +49,7 @@ done # check number of connected peers echo "check for open channels" -if [ $LNTYPE = cln ];then +if [ $LNTYPE = cl ];then openChannels=$($lightningcli_alias listpeers | grep -c "CHANNELD_NORMAL") elif [ $LNTYPE = lnd ];then openChannels=$($lncli_alias listchannels 2>/dev/null | grep chan_id -c) @@ -105,7 +105,7 @@ fi # TODO: maybe try/show the decoded info first by using https://api.lightning.community/#decodepayreq # build command -if [ $LNTYPE = cln ];then +if [ $LNTYPE = cl ];then # pay bolt11 [msatoshi] [label] [riskfactor] [maxfeepercent] [retry_for] [maxdelay] [exemptfee] command="$lightningcli_alias pay ${invoice}" elif [ $LNTYPE = lnd ];then @@ -132,7 +132,7 @@ error=$(cat ${_error}) #echo "result(${result})" #echo "error(${error})" -if [ $LNTYPE = cln ];then +if [ $LNTYPE = cl ];then resultIsError=$(echo "${result}" | grep -c '"code":') elif [ $LNTYPE = lnd ];then resultIsError=$(echo "${result}" | grep -c "payment_error") diff --git a/home.admin/_commands.sh b/home.admin/_commands.sh index 119ce297f..23b28e633 100755 --- a/home.admin/_commands.sh +++ b/home.admin/_commands.sh @@ -175,7 +175,7 @@ function status() { while : do # show the same info as on LCD screen - # 00infoBlitz.sh + # 00infoBlitz.sh /home/admin/00infoBlitz.sh $1 $2 # wait 6 seconds for user exiting loop #echo diff --git a/home.admin/_provision.setup.sh b/home.admin/_provision.setup.sh index 51060511c..2b0d1c3c8 100755 --- a/home.admin/_provision.setup.sh +++ b/home.admin/_provision.setup.sh @@ -349,26 +349,26 @@ if [ "${lightning}" == "lnd" ]; then fi -if [ "${lightning}" == "cln" ]; then +if [ "${lightning}" == "cl" ]; then ################################### # c-lightning echo "############## c-lightning" >> ${logFile} sudo sed -i "s/^message=.*/message='C-Lightning Install'/g" ${infoFile} - sudo /home/admin/config.scripts/cln.install.sh on mainnet >> ${logFile} + sudo /home/admin/config.scripts/cl.install.sh on mainnet >> ${logFile} sudo sed -i "s/^message=.*/message='C-Lightning Setup'/g" ${infoFile} # OLD WALLET FROM CLIGHTNING RESCUE - if [ "${clnrescue}" != "" ]; then + if [ "${clrescue}" != "" ]; then - echo "Restore CLN data from uploaded rescue file ${clnrescue} ..." >> ${logFile} - source <(sudo /home/admin/config.scripts/cln.backup.sh cln-import ${clnrescue}) + echo "Restore CL data from uploaded rescue file ${clrescue} ..." >> ${logFile} + source <(sudo /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: cln import backup failed'/g" ${infoFile} + sed -i "s/^message=.*/message='setup: cl import backup failed'/g" ${infoFile} echo "FAIL see ${logFile}" - echo "FAIL: setup: cln import backup failed" >> ${logFile} + echo "FAIL: setup: cl import backup failed" >> ${logFile} echo "${error}" >> ${logFile} exit 16 fi @@ -376,31 +376,31 @@ if [ "${lightning}" == "cln" ]; then # OLD WALLET FROM SEEDWORDS elif [ "${seedWords}" != "" ]; then - echo "Restore CLN wallet from seedWords ..." >> ${logFile} - source <(sudo /home/admin/config.scripts/cln.hsmtool.sh seed-force mainnet "${seedWords}" "${seedPassword}") + echo "Restore CL wallet from seedWords ..." >> ${logFile} + source <(sudo /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") 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 cln wallet created - seed maybe wrong" >> ${logFile} + echo "FAIL: setup: no cl wallet created - seed maybe wrong" >> ${logFile} exit 17 fi # NEW WALLET else - echo "Generate new CLN wallet ..." >> ${logFile} + echo "Generate new CL wallet ..." >> ${logFile} # generate new wallet - source <(sudo /home/admin/config.scripts/cln.hsmtool.sh new-force mainnet) + source <(sudo /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 cln seedwords'/g" ${infoFile} - echo "FAIL: setup: no cln seedwords" >> ${logFile} + sed -i "s/^message=.*/message='setup: no cl seedwords'/g" ${infoFile} + echo "FAIL: setup: no cl seedwords" >> ${logFile} exit 18 fi @@ -408,8 +408,8 @@ if [ "${lightning}" == "cln" ]; then 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 cln wallet created'/g" ${infoFile} - echo "FAIL: setup: no cln wallet created" >> ${logFile} + sed -i "s/^message=.*/message='setup: no cl wallet created'/g" ${infoFile} + echo "FAIL: setup: no cl wallet created" >> ${logFile} exit 19 fi diff --git a/home.admin/_provision.update.sh b/home.admin/_provision.update.sh index 85672baf7..5c46120cd 100755 --- a/home.admin/_provision.update.sh +++ b/home.admin/_provision.update.sh @@ -248,16 +248,16 @@ if [ "${lightning}" == "lnd" ]; then sudo systemctl start lnd >> ${logFile} -elif [ "${lightning}" == "cln" ]; then +elif [ "${lightning}" == "cl" ]; then echo "Install C-lightning on update" >> ${logFile} sudo sed -i "s/^message=.*/message='C-Lightning Install'/g" ${infoFile} - sudo /home/admin/config.scripts/cln.install.sh on mainnet >> ${logFile} + sudo /home/admin/config.scripts/cl.install.sh on mainnet >> ${logFile} sudo sed -i "s/^message=.*/message='C-Lightning Setup'/g" ${infoFile} elif [ "${lightning}" == "none" ]; then - echo "No Lightnig" >> ${logFile} + echo "No Lightning" >> ${logFile} else diff --git a/home.admin/_provision_.sh b/home.admin/_provision_.sh index 566f27970..5f0205d0c 100755 --- a/home.admin/_provision_.sh +++ b/home.admin/_provision_.sh @@ -332,37 +332,37 @@ if [ "${tlnd}" == "on" ]; then sudo systemctl start tlnd >> ${logFile} 2>&1 else echo "Provisioning LND Testnet - not active" >> ${logFile} -fi +fiCL -# LND Signet +# LND SignetCL if [ "${slnd}" == "on" ]; then echo "Provisioning LND Signet - run config script" >> ${logFile} - sudo /home/admin/config.scripts/lnd.install.sh on signet >> ${logFile} 2>&1 + sudo /home/admin/coCLg.scripts/lnd.install.sh on signet >> ${logFile} 2>&1 sudo systemctl start slnd >> ${logFile} 2>&1 else - echo "Provisioning LND Signet - not active" >> ${logFile} + CLcho "Provisioning LND Signet - not active" >> ${logFile} fi - +CL # CLN Mainnet (when not main instance) -if [ "${cln}" == "on" ] && [ "${lightning}" != "cln" ]; then - echo "Provisioning CLN Mainnet - run config script" >> ${logFile} - sudo /home/admin/config.scripts/cln.install.sh on mainnet >> ${logFile} 2>&1 +if [ "${cl}" == "on" ] && [ "${lightning}" != "cl" ]; then + echo "Provisioning CL Mainnet - run config script" >> ${logFile} + sudo /home/admin/config.scripts/cl.install.sh on mainnet >> ${logFile} 2>&1 else - echo "Provisioning CLN Mainnet - not active as secondary option" >> ${logFile} + CLcho "Provisioning CLN Mainnet - not active as secondary option" >> ${logFile} fi - +CL # CLN Testnet -if [ "${tcln}" == "on" ]; then - echo "Provisioning CLN Testnet - run config script" >> ${logFile} - sudo /home/admin/config.scripts/cln.install.sh on testnet >> ${logFile} 2>&1 +if [ "${tcl}" == "on" ]; then + echo "Provisioning CL Testnet - run config script" >> ${logFile} + sudo /home/admin/config.scripts/cl.install.sh on testnet >> ${logFile} 2>&1 else echo "Provisioning CLN Testnet - not active" >> ${logFile} fi # CLN Signet -if [ "${scln}" == "on" ]; then +if [ "${scl}" == "on" ]; then echo "Provisioning CLN Signet - run config script" >> ${logFile} - sudo /home/admin/config.scripts/cln.install.sh on signet >> ${logFile} 2>&1 + sudo /home/admin/config.scripts/cl.install.sh on signet >> ${logFile} 2>&1 else echo "Provisioning CLN Signet - not active" >> ${logFile} fi @@ -410,13 +410,13 @@ if [ "${#dynDomain}" -gt 0 ]; then sudo /home/admin/config.scripts/internet.dyndomain.sh on ${dynDomain} ${dynUpdateUrl} >> ${logFile} 2>&1 else echo "Provisioning DYNAMIC DOMAIN - keep default" >> ${logFile} -fi +fiCL -# RTL (LND) +# RTL (LND)CL if [ "${rtlWebinterface}" = "on" ]; then echo "Provisioning RTL LND - run config script" >> ${logFile} sudo sed -i "s/^message=.*/message='Setup RTL (takes time)'/g" ${infoFile} - sudo -u admin /home/admin/config.scripts/bonus.rtl.sh on lnd mainnet >> ${logFile} 2>&1 + sudo -u admin /home/admCLconfig.scripts/bonus.rtl.sh on lnd mainnet >> ${logFile} 2>&1 else echo "Provisioning RTL LND - keep default" >> ${logFile} fi @@ -425,7 +425,7 @@ fi if [ "${crtlWebinterface}" = "on" ]; then echo "Provisioning RTL CLN - run config script" >> ${logFile} sudo sed -i "s/^message=.*/message='Setup RTL (takes time)'/g" ${infoFile} - sudo -u admin /home/admin/config.scripts/bonus.rtl.sh on cln mainnet >> ${logFile} 2>&1 + sudo -u admin /home/admCLconfig.scripts/bonus.rtl.sh on cl mainnet >> ${logFile} 2>&1 else echo "Provisioning RTL CLN - keep default" >> ${logFile} fi @@ -434,7 +434,7 @@ fi if [ "${sparko}" = "on" ]; then echo "Provisioning Sparko - run config script" >> ${logFile} sudo sed -i "s/^message=.*/message='Setup SPARKO (takes time)'/g" ${infoFile} - sudo -u admin /home/admin/config.scripts/cln-plugin.sparko.sh on mainnet >> ${logFile} 2>&1 + sudo -u admin /home/admin/config.scripts/cl-plugin.sparko.sh on mainnet >> ${logFile} 2>&1 else echo "Provisioning RTL CLN - keep default" >> ${logFile} fi @@ -802,7 +802,7 @@ if [ "${lightning}" == "lnd" ];then else echo "No /mnt/hdd/passwordc.flag" >> ${logFile} fi -elif [ "${lightning}" == "cln" ];then +elif [ "${lightning}" == "cl" ];then sudo systemctl start lightningd fi diff --git a/home.admin/config.scripts/blitz.debug.sh b/home.admin/config.scripts/blitz.debug.sh index 3aafdbef4..e5e2131a0 100755 --- a/home.admin/config.scripts/blitz.debug.sh +++ b/home.admin/config.scripts/blitz.debug.sh @@ -83,7 +83,7 @@ fi echo echo "*** C-LIGHTNING (MAINNET) SYSTEMD STATUS ***" -if [ "${lightning}" == "cln" ] || [ "${cln}" == "on" ] || [ "${cln}" == "1" ]; then +if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ] || [ "${cl}" == "1" ]; then sudo systemctl status lightningd -n2 --no-pager echo echo "*** LAST 30 C-LIGHTNING (MAINNET) INFO LOGS ***" @@ -127,7 +127,7 @@ fi echo echo "*** C-LIGHTNING (TESTNET) SYSTEMD STATUS ***" -if [ "${tcln}" == "on" ] || [ "${tcln}" == "1" ]; then +if [ "${tcl}" == "on" ] || [ "${tcl}" == "1" ]; then sudo systemctl status tlightningd -n2 --no-pager echo echo "*** LAST 30 C-LIGHTNING (TESTNET) INFO LOGS ***" @@ -171,7 +171,7 @@ fi echo echo "*** C-LIGHTNING (SIGNET) SYSTEMD STATUS ***" -if [ "${scln}" == "on" ] || [ "${scln}" == "1" ]; then +if [ "${scl}" == "on" ] || [ "${scl}" == "1" ]; then sudo systemctl status slightningd -n2 --no-pager echo echo "*** LAST 30 C-LIGHTNING (SIGNET) INFO LOGS ***" @@ -236,11 +236,11 @@ fi if [ "${crtlWebinterface}" == "on" ]; then echo - echo "*** CLN-RTL ***" + echo "*** CL-RTL ***" sudo systemctl status cRTL -n10 --no-pager echo else - echo "- CLN-RTL is OFF by config" + echo "- CL-RTL is OFF by config" fi if [ "${ElectRS}" == "on" ]; then diff --git a/home.admin/config.scripts/blitz.setpassword.sh b/home.admin/config.scripts/blitz.setpassword.sh index b440080e7..b7317aa32 100755 --- a/home.admin/config.scripts/blitz.setpassword.sh +++ b/home.admin/config.scripts/blitz.setpassword.sh @@ -47,8 +47,8 @@ if [ ${#abcd} -eq 0 ]; then if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then OPTIONS+=(C "LND Lightning Wallet Password") fi - if [ "${cln}" == "on" ] && [ "${clnEncryptedHSM}" == "on" ]; then - OPTIONS+=(CLN "C-Lightning Wallet Password") + if [ "${cl}" == "on" ] && [ "${clEncryptedHSM}" == "on" ]; then + OPTIONS+=(CL "C-Lightning Wallet Password") fi CHOICE=$(dialog --clear \ --backtitle "RaspiBlitz" \ @@ -71,8 +71,8 @@ if [ ${#abcd} -eq 0 ]; then D) abcd='d'; ;; - CLN) - abcd='cln'; + CL) + abcd='cl'; ;; *) exit 0 @@ -442,9 +442,9 @@ elif [ "${abcd}" = "x" ]; then # store result is file echo "${password1}" > ${resultFile} -elif [ "${abcd}" = "cln" ]; then - /home/admin/config.scripts/cln.hsmtool.sh change-password mainnet - # do not reboot for cln password +elif [ "${abcd}" = "cl" ]; then + /home/admin/config.scripts/cl.hsmtool.sh change-password mainnet + # do not reboot for cl password reboot=0 # everything else diff --git a/home.admin/config.scripts/blitz.statusscan.sh b/home.admin/config.scripts/blitz.statusscan.sh index f1370c766..74ab0ddc6 100755 --- a/home.admin/config.scripts/blitz.statusscan.sh +++ b/home.admin/config.scripts/blitz.statusscan.sh @@ -3,7 +3,7 @@ source /home/admin/raspiblitz.info source /mnt/hdd/raspiblitz.conf 2>/dev/null -# LNTYPE is lnd | cln +# LNTYPE is lnd | cl if [ $# -gt 0 ];then LNTYPE=$1 else @@ -276,26 +276,26 @@ if [ ${lndRunning} -eq 1 ] && [ "${LNTYPE}" == "lnd" ]; then fi -# is CLN running -clnRunning=$(systemctl status ${netprefix}lightningd.service 2>/dev/null | grep -c running) -echo "clnActive=${clnRunning}" -echo "CLNwalletLocked=0" +# is CL running +clRunning=$(systemctl status ${netprefix}lightningd.service 2>/dev/null | grep -c running) +echo "clActive=${clRunning}" +echo "CLwalletLocked=0" -if [ "${clnRunning}" != "1" ] && [ "${LNTYPE}" == "cln" ]; then +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 "CLNwalletLocked=1" + echo "CLwalletLocked=1" fi fi -if [ "${clnRunning}" == "1" ] && [ "${LNTYPE}" == "cln" ]; then - clnInfo=$($lightningcli_alias getinfo 2>&1) - clnBlockHeight=$(echo "${clnInfo}" | jq -r '.blockheight' | tr -cd '[[:digit:]]') - scanProgress=$(echo "scale=2; $clnBlockHeight*100/$total" | bc) +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}" - clnBlockHeightPlusOne=$(expr $clnBlockHeight + 1) - if [ "${total}" == "${clnBlockHeight}" ] || [ "${total}" == "${clnBlockHeightPlusOne}" ]; then + clBlockHeightPlusOne=$(expr $clBlockHeight + 1) + if [ "${total}" == "${clBlockHeight}" ] || [ "${total}" == "${clBlockHeightPlusOne}" ]; then echo "syncedToChain=1" else echo "syncedToChain=0" diff --git a/home.admin/config.scripts/blitz.web.api.sh b/home.admin/config.scripts/blitz.web.api.sh index 9320415e0..e5c6f99ae 100755 --- a/home.admin/config.scripts/blitz.web.api.sh +++ b/home.admin/config.scripts/blitz.web.api.sh @@ -137,14 +137,14 @@ if [ "$1" = "update-config" ]; then sed -i "s/^lnd_macaroon=.*/lnd_macaroon=${adminMacaroon}/g" ./.env sed -i "s/^lnd_cert=.*/lnd_cert=${tlsCert}/g" ./.env - # configure CLN - elif [ "${lightning}" == "cln" ]; then + # configure CL + elif [ "${lightning}" == "cl" ]; then - echo "# CONFIG Web API Lightning --> CLN" - sed -i "s/^ln_node=.*/ln_node=cln/g" ./.env + echo "# CONFIG Web API Lightning --> CL" + sed -i "s/^ln_node=.*/ln_node=cl/g" ./.env # TODO: ADD C-Lightning config as soon as available - echo "# MISSING CLN CONFIG YET" + echo "# MISSING CL CONFIG YET" else echo "# CONFIG Web API Lightning --> OFF" diff --git a/home.admin/config.scripts/bonus.lnbits.sh b/home.admin/config.scripts/bonus.lnbits.sh index 290fef91b..9efaa032b 100755 --- a/home.admin/config.scripts/bonus.lnbits.sh +++ b/home.admin/config.scripts/bonus.lnbits.sh @@ -315,8 +315,8 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then [Unit] Description=lnbits -Wants=lnd.service -After=lnd.service +Wants=bitcoind.service +After=bitcoind.service [Service] WorkingDirectory=/home/lnbits/lnbits diff --git a/home.admin/config.scripts/bonus.rtl.sh b/home.admin/config.scripts/bonus.rtl.sh index 3c0aba537..0c1979b8b 100755 --- a/home.admin/config.scripts/bonus.rtl.sh +++ b/home.admin/config.scripts/bonus.rtl.sh @@ -10,11 +10,11 @@ source /mnt/hdd/raspiblitz.conf # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo "# config script for RideTheLightning $RTLVERSION WebInterface" - echo "# able to run intances for lnd and cln parallel" + echo "# able to run intances for lnd and cl parallel" echo "# mainnet and testnet instances can run parallel" - echo "# bonus.rtl.sh [on|off|menu] " + echo "# bonus.rtl.sh [on|off|menu] " echo "# bonus.rtl.sh connect-services" - echo "# bonus.rtl.sh prestart " + echo "# bonus.rtl.sh prestart " exit 1 fi @@ -22,7 +22,7 @@ echo "# Running: 'bonus.rtl.sh $*'" source <(/home/admin/config.scripts/network.aliases.sh getvars $2 $3) -# LNTYPE is lnd | cln +# LNTYPE is lnd | cl echo "# LNTYPE(${LNTYPE})" # CHAIN is signet | testnet | mainnet echo "# CHAIN(${CHAIN})" @@ -32,7 +32,7 @@ echo "# portprefix(${portprefix})" echo "# typeprefix(${typeprefix})" # prefix for parallel lightning impl -if [ "${LNTYPE}" == "cln" ]; then +if [ "${LNTYPE}" == "cl" ]; then RTLHTTP=${portprefix}7000 elif [ "${LNTYPE}" == "lnd" ]; then RTLHTTP=${portprefix}3000 @@ -216,15 +216,15 @@ WantedBy=multi-user.target sudo sed -i "s/^Wants=.*/Wants=${netprefix}lnd.service/g" /etc/systemd/system/${systemdService}.service sudo sed -i "s/^After=.*/After=${netprefix}lnd.service/g" /etc/systemd/system/${systemdService}.service fi - +CL # adapt systemd service template for CLN - if [ "${LNTYPE}" == "cln" ]; then + if [ "${LNTYPE}" == "cl" ]; thenCL echo "# modifying ${systemdService}.service for CLN" 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 - /home/admin/config.scripts/cln.rest.sh on ${CHAIN} + /home/admin/config.scripts/cl.rest.sh on ${CHAIN} fi # Note about RTL config file @@ -383,14 +383,14 @@ if [ "$1" = "prestart" ]; then # C-Lightning changes of config # https://github.com/Ride-The-Lightning/RTL/blob/master/docs/C-Lightning-setup.md - if [ "${LNTYPE}" == "cln" ]; then + if [ "${LNCLE}" == "cl" ]; then echo "# CLN Config" cat /home/rtl/${systemdService}/RTL-Config.json | \ jq ".port = \"${RTLHTTP}\"" | \ jq ".multiPass = \"${RPCPASSWORD}\"" | \ jq ".nodes[0].lnNode = \"${hostname}\"" | \ jq ".nodes[0].lnImplementation = \"CLT\"" | \ - jq ".nodes[0].Authentication.macaroonPath = \"/home/bitcoin/c-lightning-REST/certs\"" | \ + jq ".nodes[0].Authentication.macaroonPath = \"CLme/bitcoin/c-lightning-REST/certs\"" | \ jq ".nodes[0].Authentication.configPath = \"${CLNCONF}\"" | \ jq ".nodes[0].Authentication.swapMacaroonPath = \"/home/rtl/.loop/${CHAIN}/\"" | \ jq ".nodes[0].Authentication.boltzMacaroonPath = \"/home/rtl/.boltz-lnd/macaroons/\"" | \ @@ -452,8 +452,8 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then echo "# Removing the binaries" echo "# Delete user and home directory" sudo userdel -rf rtl - if [ $LNTYPE = cln ];then - /home/admin/config.scripts/cln.rest.sh off ${CHAIN} + if [ $LNTYPE = cl ];then + /home/admin/config.scripts/cl.rest.sh off ${CHAIN} fi fi diff --git a/home.admin/config.scripts/cln-plugin.backup.sh b/home.admin/config.scripts/cl-plugin.backup.sh similarity index 87% rename from home.admin/config.scripts/cln-plugin.backup.sh rename to home.admin/config.scripts/cl-plugin.backup.sh index 4a0cf4822..9798bcd59 100644 --- a/home.admin/config.scripts/cln-plugin.backup.sh +++ b/home.admin/config.scripts/cl-plugin.backup.sh @@ -6,9 +6,9 @@ function help(){ echo "Replicates the lightningd.sqlite3 database on the SDcard" echo echo "Usage:" - echo "cln-plugin.backup.sh [on|off] [testnet|mainnet|signet]" - echo "cln-plugin.backup.sh [restore] [testnet|mainnet|signet] [force]" - echo "cln-plugin.backup.sh [backup-compact] [testnet|mainnet|signet]" + echo "cl-plugin.backup.sh [on|off] [testnet|mainnet|signet]" + echo "cl-plugin.backup.sh [restore] [testnet|mainnet|signet] [force]" + echo "cl-plugin.backup.sh [backup-compact] [testnet|mainnet|signet]" echo echo "https://github.com/lightningd/plugins/tree/master/backup" echo @@ -20,14 +20,14 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then help fi -source <(/home/admin/config.scripts/network.aliases.sh getvars cln $2) +source <(/home/admin/config.scripts/network.aliases.sh getvars cl $2) plugin="backup" -plugindir="/home/bitcoin/cln-plugins-available/plugins" +plugindir="/home/bitcoin/cl-plugins-available/plugins" function install() { if [ ! -f "${plugindir}/${plugin}/${plugin}.py" ]; then - cd /home/bitcoin/cln-plugins-available || exit 1 + cd /home/bitcoin/cl-plugins-available || exit 1 sudo -u bitcoin git clone https://github.com/lightningd/plugins.git fi @@ -40,9 +40,9 @@ function install() { fi sudo chmod +x ${plugindir}/${plugin}/${plugin}.py # symlink to the default plugin dir - if [ ! -L /home/bitcoin/${netprefix}cln-plugins-enabled/backup.py ];then + if [ ! -L /home/bitcoin/${netprefix}cl-plugins-enabled/backup.py ];then sudo ln -s ${plugindir}/backup/backup.py \ - /home/bitcoin/${netprefix}cln-plugins-enabled/ + /home/bitcoin/${netprefix}cl-plugins-enabled/ fi else echo "# The ${plugin} plugin is already loaded" @@ -83,7 +83,7 @@ if [ $1 = on ];then elif [ $1 = off ];then echo "# Removing the backup plugin" - sudo rm -f /home/bitcoin/${netprefix}cln-plugins-enabled/backup.py + sudo rm -f /home/bitcoin/${netprefix}cl-plugins-enabled/backup.py echo "# Backup the existing old backup on the SDcard" now=$(date +"%Y_%m_%d_%H%M%S") sudo mv /home/bitcoin/${netprefix}lightningd.sqlite3.backup \ @@ -137,7 +137,7 @@ elif [ $1 = backup-compact ];then else echo "# No /home/bitcoin/.lightning/${CLNETWORK}/lightningd.sqlite3 is present" - echo "# Run 'config.scripts/cln-plugin.backup.sh on ${CLNETWORK}' first" + echo "# Run 'config.scripts/cl-plugin.backup.sh on ${CLNETWORK}' first" fi else diff --git a/home.admin/config.scripts/cln-plugin.clboss.sh b/home.admin/config.scripts/cl-plugin.clboss.sh similarity index 75% rename from home.admin/config.scripts/cln-plugin.clboss.sh rename to home.admin/config.scripts/cl-plugin.clboss.sh index bc4ca438e..cdef2c1e3 100644 --- a/home.admin/config.scripts/cln-plugin.clboss.sh +++ b/home.admin/config.scripts/cl-plugin.clboss.sh @@ -10,13 +10,13 @@ if [ $# -lt 1 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then echo "Install or remove the CLBOSS C-lightning plugin" echo "version: v${CLBOSSVERSION}" echo "Usage:" - echo "cln-plugin.clboss.sh [on|off] [testnet|mainnet|signet]" + echo "cl-plugin.clboss.sh [on|off] [testnet|mainnet|signet]" echo exit 1 fi -# source <(/home/admin/config.scripts/network.aliases.sh getvars cln ) -source <(/home/admin/config.scripts/network.aliases.sh getvars cln $2) +# source <(/home/admin/config.scripts/network.aliases.sh getvars cl ) +source <(/home/admin/config.scripts/network.aliases.sh getvars cl $2) # add default value to raspi config if needed configEntry="${netprefix}clboss" @@ -30,21 +30,21 @@ fi if [ $1 = on ];then - if [ ! -f /home/bitcoin/cln-plugins-available/clboss-${CLBOSSVERSION}.tar.gz ];then + if [ ! -f /home/bitcoin/cl-plugins-available/clboss-${CLBOSSVERSION}.tar.gz ];then # download tarball sudo -u bitcoin wget \ https://github.com/ZmnSCPxj/clboss/releases/download/v${CLBOSSVERSION}/clboss-${CLBOSSVERSION}.tar.gz \ - -O /home/bitcoin/cln-plugins-available/clboss-${CLBOSSVERSION}.tar.gz || exit 1 + -O /home/bitcoin/cl-plugins-available/clboss-${CLBOSSVERSION}.tar.gz || exit 1 fi - if [ ! -f /home/bitcoin/cln-plugins-available/clboss-${CLBOSSVERSION}/clboss ];then + if [ ! -f /home/bitcoin/cl-plugins-available/clboss-${CLBOSSVERSION}/clboss ];then # dependencies sudo apt install -y build-essential pkg-config libev-dev \ libcurl4-gnutls-dev libsqlite3-dev dnsutils # install - cd /home/bitcoin/cln-plugins-available/ || exit 1 + cd /home/bitcoin/cl-plugins-available/ || exit 1 sudo -u bitcoin tar -xvf clboss-${CLBOSSVERSION}.tar.gz cd clboss-${CLBOSSVERSION} || exit 1 sudo -u bitcoin ./configure && sudo -u bitcoin make @@ -52,9 +52,9 @@ if [ $1 = on ];then fi # symlink to enable - if [ ! -L /home/bitcoin/${netprefix}cln-plugins-enabled/clboss ];then - sudo ln -s /home/bitcoin/cln-plugins-available/clboss-${CLBOSSVERSION}/clboss \ - /home/bitcoin/${netprefix}cln-plugins-enabled + if [ ! -L /home/bitcoin/${netprefix}cl-plugins-enabled/clboss ];then + sudo ln -s /home/bitcoin/cl-plugins-available/clboss-${CLBOSSVERSION}/clboss \ + /home/bitcoin/${netprefix}cl-plugins-enabled fi # setting value in raspiblitz.conf @@ -69,14 +69,14 @@ if [ $1 = on ];then echo "# clboss was installed for $CHAIN" echo "# Monitor with:" echo "sudo tail -n 100 -f /home/bitcoin/.lightning/${CLNETWORK}/cl.log | grep clboss" - echo "${netprefix}cln clboss-status" + echo "${netprefix}cl clboss-status" echo "https://github.com/ZmnSCPxj/clboss#operating" fi if [ $1 = off ];then # delete symlink - sudo rm -rf /home/bitcoin/${netprefix}cln-plugins-enabled/clboss + sudo rm -rf /home/bitcoin/${netprefix}cl-plugins-enabled/clboss echo "# Restart the ${netprefix}lightningd.service to deactivate clboss" sudo systemctl restart ${netprefix}lightningd @@ -84,7 +84,7 @@ if [ $1 = off ];then # purge if [ "$(echo "$@" | grep -c purge)" -gt 0 ];then echo "# Delete plugin" - sudo rm -rf /home/bitcoin/cln-plugins-available/clboss* + sudo rm -rf /home/bitcoin/cl-plugins-available/clboss* sudo rm -f /usr/local/bin/clboss fi diff --git a/home.admin/config.scripts/cln-plugin.sparko.sh b/home.admin/config.scripts/cl-plugin.sparko.sh similarity index 86% rename from home.admin/config.scripts/cln-plugin.sparko.sh rename to home.admin/config.scripts/cl-plugin.sparko.sh index 74a6b35c6..63f6df884 100644 --- a/home.admin/config.scripts/cln-plugin.sparko.sh +++ b/home.admin/config.scripts/cl-plugin.sparko.sh @@ -2,7 +2,7 @@ # explanation on paths https://github.com/ElementsProject/lightning/issues/4223 # built-in path dir: /usr/local/libexec/c-lightning/plugins/ -# added --plugin-dir=/home/bitcoin/${netprefix}cln-plugins-enabled +# added --plugin-dir=/home/bitcoin/${netprefix}cl-plugins-enabled SPARKOVERSION="v2.7" @@ -12,13 +12,13 @@ if [ $# -lt 1 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then echo "Install, remove, connect or get info about the Sparko plugin for C-lightning" echo "version: $SPARKOVERSION" echo "Usage:" - echo "cln-plugin.sparko.sh [on|off|menu|connect] [testnet|mainnet|signet]" + echo "cl-plugin.sparko.sh [on|off|menu|connect] [testnet|mainnet|signet]" echo exit 1 fi -# source <(/home/admin/config.scripts/network.aliases.sh getvars cln ) -source <(/home/admin/config.scripts/network.aliases.sh getvars cln $2) +# source <(/home/admin/config.scripts/network.aliases.sh getvars cl ) +source <(/home/admin/config.scripts/network.aliases.sh getvars cl $2) # show info menu if [ "$1" = "menu" ]; then @@ -63,7 +63,7 @@ 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 ${CLNCONF} | 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" @@ -118,18 +118,18 @@ if [ $1 = on ];then DISTRO="linux_amd64" fi - if [ ! -f /home/bitcoin/cln-plugins-available/sparko ];then - sudo -u bitcoin mkdir /home/bitcoin/cln-plugins-available + if [ ! -f /home/bitcoin/cl-plugins-available/sparko ];then + sudo -u bitcoin mkdir /home/bitcoin/cl-plugins-available # download binary sudo -u bitcoin wget https://github.com/fiatjaf/sparko/releases/download/${SPARKOVERSION}/sparko_${DISTRO}\ - -O /home/bitcoin/cln-plugins-available/sparko || exit 1 + -O /home/bitcoin/cl-plugins-available/sparko || exit 1 # make executable - sudo chmod +x /home/bitcoin/cln-plugins-available/sparko + sudo chmod +x /home/bitcoin/cl-plugins-available/sparko fi - if [ ! -L /home/bitcoin/${netprefix}cln-plugins-enabled/sparko ];then - sudo ln -s /home/bitcoin/cln-plugins-available/sparko \ - /home/bitcoin/${netprefix}cln-plugins-enabled + if [ ! -L /home/bitcoin/${netprefix}cl-plugins-enabled/sparko ];then + sudo ln -s /home/bitcoin/cl-plugins-available/sparko \ + /home/bitcoin/${netprefix}cl-plugins-enabled fi if [ ! -f /home/bitcoin/.lightning/sparko-tls/key.pem ];then @@ -146,8 +146,8 @@ if [ $1 = on ];then ########## # Config # ########## - if ! grep -Eq "^sparko" ${CLNCONF};then - echo "# Editing ${CLNCONF}" + if ! grep -Eq "^sparko" ${CLCONF};then + echo "# Editing ${CLCONF}" echo "# See: https://github.com/fiatjaf/sparko#how-to-use" PASSWORD_B=$(sudo cat /mnt/hdd/bitcoin/bitcoin.conf | grep rpcpassword | cut -c 13-) # Spark wallet only allows alphanumeric characters @@ -161,9 +161,9 @@ sparko-port=${portprefix}9000 sparko-tls-path=/home/bitcoin/.lightning/sparko-tls sparko-login=blitz:$PASSWORD_B sparko-keys=${masterkeythatcandoeverything}; ${secretaccesskeythatcanreadstuff}: getinfo, listchannels, listnodes; ${verysecretkeythatcanpayinvoices}: pay; ${keythatcanlistentoallevents}: stream -" | sudo tee -a ${CLNCONF} +" | sudo tee -a ${CLCONF} else - echo "# Sparko is already configured in ${CLNCONF}" + echo "# Sparko is already configured in ${CLCONF}" fi echo "# Allowing port ${portprefix}9000 through the firewall" @@ -190,10 +190,10 @@ fi if [ $1 = off ];then # delete symlink - sudo rm -rf /home/bitcoin/${netprefix}cln-plugins-enabled/sparko + sudo rm -rf /home/bitcoin/${netprefix}cl-plugins-enabled/sparko - echo "# Editing ${CLNCONF}" - sudo sed -i "/^sparko/d" ${CLNCONF} + echo "# Editing ${CLCONF}" + sudo sed -i "/^sparko/d" ${CLCONF} echo "# Restart the ${netprefix}lightningd.service to deactivate Sparko" sudo systemctl restart ${netprefix}lightningd @@ -206,7 +206,7 @@ if [ $1 = off ];then # purge if [ "$(echo "$@" | grep -c purge)" -gt 0 ];then echo "# Delete plugin" - sudo rm -rf /home/bitcoin/cln-plugins-available/sparko + 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 diff --git a/home.admin/config.scripts/cln-plugin.standard-python.sh b/home.admin/config.scripts/cl-plugin.standard-python.sh similarity index 69% rename from home.admin/config.scripts/cln-plugin.standard-python.sh rename to home.admin/config.scripts/cl-plugin.standard-python.sh index 14a386777..7a4b9195a 100644 --- a/home.admin/config.scripts/cln-plugin.standard-python.sh +++ b/home.admin/config.scripts/cl-plugin.standard-python.sh @@ -5,7 +5,7 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then echo echo "Install and show the output of the chosen plugin for C-lightning" echo "Usage:" - echo "cln-plugin.standard-python.sh on [plugin-name] [testnet|mainnet|signet] [runonce]" + echo "cl-plugin.standard-python.sh on [plugin-name] [testnet|mainnet|signet] [runonce]" echo echo "tested plugins:" echo "summary | helpme | feeadjuster" @@ -18,19 +18,19 @@ fi if [ $1 = on ];then - source <(/home/admin/config.scripts/network.aliases.sh getvars cln $2) + source <(/home/admin/config.scripts/network.aliases.sh getvars cl $2) plugin=$2 - if [ ! -f "/home/bitcoin/cln-plugins-available/plugins/${plugin}/${plugin}.py" ]; then - cd /home/bitcoin/cln-plugins-available || exit 1 + if [ ! -f "/home/bitcoin/cl-plugins-available/plugins/${plugin}/${plugin}.py" ]; then + cd /home/bitcoin/cl-plugins-available || exit 1 sudo -u bitcoin git clone https://github.com/lightningd/plugins.git fi if [ $($lightningcli_alias | grep -c "${plugin}") -eq 0 ];then echo "# Starting the ${plugin} plugin" - sudo -u bitcoin pip install -r /home/bitcoin/cln-plugins-available/plugins/${plugin}/requirements.txt - $lightningcli_alias plugin start /home/bitcoin/cln-plugins-available/plugins/${plugin}/${plugin}.py + sudo -u bitcoin pip install -r /home/bitcoin/cl-plugins-available/plugins/${plugin}/requirements.txt + $lightningcli_alias plugin start /home/bitcoin/cl-plugins-available/plugins/${plugin}/${plugin}.py fi echo @@ -48,7 +48,7 @@ if [ $1 = on ];then echo if [ "$(echo "$@" | grep -c "runonce")" -gt 0 ];then - $lightningcli_alias plugin stop /home/bitcoin/cln-plugins-available/plugins/${plugin}/${plugin}.py + $lightningcli_alias plugin stop /home/bitcoin/cl-plugins-available/plugins/${plugin}/${plugin}.py fi fi \ No newline at end of file diff --git a/home.admin/config.scripts/cln-plugin.summary.sh b/home.admin/config.scripts/cl-plugin.summary.sh similarity index 65% rename from home.admin/config.scripts/cln-plugin.summary.sh rename to home.admin/config.scripts/cl-plugin.summary.sh index 946d58363..cde53ddd0 100644 --- a/home.admin/config.scripts/cln-plugin.summary.sh +++ b/home.admin/config.scripts/cl-plugin.summary.sh @@ -5,16 +5,16 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then echo echo "Install and show the output if the summary plugin for C-lightning" echo "Usage:" - echo "cln-plugin.summary.sh [testnet|mainnet|signet] [runonce]" + echo "cl-plugin.summary.sh [testnet|mainnet|signet] [runonce]" echo exit 1 fi -source <(/home/admin/config.scripts/network.aliases.sh getvars cln $1) +source <(/home/admin/config.scripts/network.aliases.sh getvars cl $1) -if [ ! -f "/home/bitcoin/cln-plugins-available/plugins/summary/summary.py" ]; then - sudo -u bitcoin mkdir /home/bitcoin/cln-plugins-available - cd /home/bitcoin/cln-plugins-available || exit 1 +if [ ! -f "/home/bitcoin/cl-plugins-available/plugins/summary/summary.py" ]; then + sudo -u bitcoin mkdir /home/bitcoin/cl-plugins-available + cd /home/bitcoin/cl-plugins-available || exit 1 sudo -u bitcoin git clone https://github.com/lightningd/plugins.git fi if [ $($lightningcli_alias | grep -c "summary") -eq 0 ];then @@ -22,8 +22,8 @@ if [ $($lightningcli_alias | grep -c "summary") -eq 0 ];then # https://github.com/ElementsProject/lightning/tree/master/contrib/pylightning sudo -u bitcoin pip install pylightning 1>/dev/null # https://github.com/lightningd/plugins#dynamic-plugin-initialization - sudo -u bitcoin pip install -r /home/bitcoin/cln-plugins-available/plugins/summary/requirements.txt 1>/dev/null - $lightningcli_alias plugin start -H /home/bitcoin/cln-plugins-available/plugins/summary/summary.py 1>/dev/null + sudo -u bitcoin pip install -r /home/bitcoin/cl-plugins-available/plugins/summary/requirements.txt 1>/dev/null + $lightningcli_alias plugin start -H /home/bitcoin/cl-plugins-available/plugins/summary/summary.py 1>/dev/null fi echo @@ -41,5 +41,5 @@ $lightningcli_alias -H summary echo if [ "$(echo "$@" | grep -c "runonce")" -gt 0 ];then - $lightningcli_alias plugin stop -H /home/bitcoin/cln-plugins-available/plugins/summary/summary.py + $lightningcli_alias plugin stop -H /home/bitcoin/cl-plugins-available/plugins/summary/summary.py fi \ No newline at end of file diff --git a/home.admin/config.scripts/cln.backup.sh b/home.admin/config.scripts/cl.backup.sh old mode 100755 new mode 100644 similarity index 75% rename from home.admin/config.scripts/cln.backup.sh rename to home.admin/config.scripts/cl.backup.sh index ce3ea4cbc..5027c31d2 --- a/home.admin/config.scripts/cln.backup.sh +++ b/home.admin/config.scripts/cl.backup.sh @@ -4,17 +4,17 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo echo "---------------------------------------------------" - echo "CLN RESCUE FILE (tar.gz of complete cln directory)" + echo "CL RESCUE FILE (tar.gz of complete cl directory)" echo "---------------------------------------------------" - echo "cln.backup.sh cln-export" - echo "cln.backup.sh cln-export-gui" - echo "cln.backup.sh cln-import [file]" - echo "cln.backup.sh cln-import-gui [setup|production] [?resultfile]" + echo "cl.backup.sh cl-export" + echo "cl.backup.sh cl-export-gui" + echo "cl.backup.sh cl-import [file]" + echo "cl.backup.sh cl-import-gui [setup|production] [?resultfile]" echo "---------------------------------------------------" echo "SEED WORDS" echo "---------------------------------------------------" - echo "cln.backup.sh seed-export-gui [lndseeddata]" - echo "cln.backup.sh seed-import-gui [resultfile]" + echo "cl.backup.sh seed-export-gui [lndseeddata]" + echo "cl.backup.sh seed-import-gui [resultfile]" echo exit 1 fi @@ -23,48 +23,48 @@ fi mode="$1" ################################ -# CLN RESCUE FILE - EXPORT +# CL RESCUE FILE - EXPORT ################################ -if [ ${mode} = "cln-export" ]; then +if [ ${mode} = "cl-export" ]; then - echo "# *** CLN.RESCUE --> BACKUP" + echo "# *** CL.RESCUE --> BACKUP" downloadPath="/home/admin" fileowner="admin" # stop - echo "# Stopping cln..." + echo "# Stopping cl..." sudo systemctl stop lightningd 1>/dev/null - if grep -Eq "^tcln=on" /mnt/hdd/raspiblitz.conf; then - echo "# stopping tcln..." + if grep -Eq "^tcl=on" /mnt/hdd/raspiblitz.conf; then + echo "# stopping tcl..." sudo systemctl stop tlightningd 1>/dev/null fi - if grep -Eq "^scln=on" /mnt/hdd/raspiblitz.conf; then - echo "# stopping scln..." + if grep -Eq "^scl=on" /mnt/hdd/raspiblitz.conf; then + echo "# stopping scl..." sudo systemctl stop slightningd 1>/dev/null fi sleep 5 echo "# OK" echo - # add cln version info into lnd dir (to detect needed updates later) - clnVersion=$(sudo -u bitcoin lightning-cli --version | cut -d '-' -f1 | cut -d 'v' -f2) + # add cl version info into lnd dir (to detect needed updates later) + clVersion=$(sudo -u bitcoin lightning-cli --version | cut -d '-' -f1 | cut -d 'v' -f2) sudo rm /mnt/hdd/app-data/.lightning/version.info 2>/dev/null - echo "${clnVersion}" > /home/admin/cln.version.info - sudo mv /home/admin/cln.version.info /mnt/hdd/app-data/.lightning/version.info + echo "${clVersion}" > /home/admin/cl.version.info + sudo mv /home/admin/cl.version.info /mnt/hdd/app-data/.lightning/version.info sudo chown bitcoin:bitcoin /mnt/hdd/app-data/.lightning/version.info # zip it - sudo tar -zcvf ${downloadPath}/cln-rescue.tar.gz /mnt/hdd/app-data/.lightning 1>&2 - sudo chown ${fileowner}:${fileowner} ${downloadPath}/cln-rescue.tar.gz 1>&2 + sudo tar -zcvf ${downloadPath}/cl-rescue.tar.gz /mnt/hdd/app-data/.lightning 1>&2 + sudo chown ${fileowner}:${fileowner} ${downloadPath}/cl-rescue.tar.gz 1>&2 # delete old backups - rm ${downloadPath}/cln-rescue-*.tar.gz 2>/dev/null 1>/dev/null + rm ${downloadPath}/cl-rescue-*.tar.gz 2>/dev/null 1>/dev/null # name with md5 checksum - md5checksum=$(md5sum ${downloadPath}/cln-rescue.tar.gz | head -n1 | cut -d " " -f1) - mv ${downloadPath}/cln-rescue.tar.gz ${downloadPath}/cln-rescue-${md5checksum}.tar.gz 1>&2 - byteSize=$(ls -l ${downloadPath}/cln-rescue-${md5checksum}.tar.gz | awk '{print $5}') + md5checksum=$(md5sum ${downloadPath}/cl-rescue.tar.gz | head -n1 | cut -d " " -f1) + mv ${downloadPath}/cl-rescue.tar.gz ${downloadPath}/cl-rescue-${md5checksum}.tar.gz 1>&2 + byteSize=$(ls -l ${downloadPath}/cl-rescue-${md5checksum}.tar.gz | awk '{print $5}') # check file size if [ ${byteSize} -lt 100 ]; then @@ -73,17 +73,17 @@ if [ ${mode} = "cln-export" ]; then fi # output result data - echo "# cln service is stopped for security" - echo "filename='${downloadPath}/cln-rescue-${md5checksum}.tar.gz'" + echo "# cl service is stopped for security" + echo "filename='${downloadPath}/cl-rescue-${md5checksum}.tar.gz'" echo "fileowner='${fileowner}'" echo "size=${byteSize}" exit 0 fi -if [ ${mode} = "cln-export-gui" ]; then +if [ ${mode} = "cl-export-gui" ]; then # create lnd rescue file - source <(/home/admin/config.scripts/cln.backup.sh cln-export) + source <(/home/admin/config.scripts/cl.backup.sh cl-export) if [ "${error}" != "" ]; then echo "error='${error}'" exit 1 @@ -115,10 +115,10 @@ if [ ${mode} = "cln-export-gui" ]; then fi ################################ -# CLN RESCUE FILE - IMPORT +# CL RESCUE FILE - IMPORT ################################ -if [ ${mode} = "cln-import" ]; then +if [ ${mode} = "cl-import" ]; then # 2nd PARAMETER: file to import (expect that the file was valid checked from calling script) filename=$2 @@ -133,24 +133,24 @@ if [ ${mode} = "cln-import" ]; then fi # stop - echo "# stopping cln..." + echo "# stopping cl..." sudo systemctl stop lightningd 1>/dev/null - if grep -Eq "^tcln=on" /mnt/hdd/raspiblitz.conf; then - echo "# stopping tcln..." + if grep -Eq "^tcl=on" /mnt/hdd/raspiblitz.conf; then + echo "# stopping tcl..." sudo systemctl stop tlightningd 1>/dev/null fi - if grep -Eq "^scln=on" /mnt/hdd/raspiblitz.conf; then - echo "# stopping scln..." + if grep -Eq "^scl=on" /mnt/hdd/raspiblitz.conf; then + echo "# stopping scl..." sudo systemctl stop slightningd 1>/dev/null fi sleep 5 # clean DIR - echo "# cleaning old CLN data ..." + echo "# cleaning old CL data ..." sudo rm -r /mnt/hdd/app-data/.lightning/* 1>/dev/null 2>/dev/null # unpack zip - echo "# restoring CLN data from ${filename} ..." + echo "# restoring CL data from ${filename} ..." sudo tar -xf ${filename} -C / 1>/dev/null sudo chown -R bitcoin:bitcoin /mnt/hdd/app-data/.lightning 1>/dev/null @@ -160,7 +160,7 @@ if [ ${mode} = "cln-import" ]; then fi -if [ ${mode} = "cln-import-gui" ]; then +if [ ${mode} = "cl-import-gui" ]; then # get by second parameter if this call if happening during setup or production scenario=$2 @@ -195,22 +195,22 @@ if [ ${mode} = "cln-import-gui" ]; then echo "**************************" echo "* UPLOAD THE RESCUE FILE *" echo "**************************" - echo "If you have a cln-rescue backup file on your laptop you can now" + echo "If you have a cl-rescue backup file on your laptop you can now" echo "upload it and restore your latest C-Lightning state." echo echo "CAUTION: Dont restore outdated states - risk of loosing funds!" echo echo "To make upload open a new terminal on your laptop," - echo "change into the directory where your cln-rescue file is and" + echo "change into the directory where your cl-rescue file is and" echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" - echo "scp -r ./cln-rescue-*.tar.gz ${defaultUploadUser}@${localip}:${defaultUploadPath}/" + echo "scp -r ./cl-rescue-*.tar.gz ${defaultUploadUser}@${localip}:${defaultUploadPath}/" echo "" echo "Use ${passwordInfo} to authenticate file transfer." echo "PRESS ENTER when upload is done" read key # check upload (will return filename or error) - source <(sudo /home/admin/config.scripts/blitz.upload.sh check-upload cln-rescue) + source <(sudo /home/admin/config.scripts/blitz.upload.sh check-upload cl-rescue) if [ "${filename}" != "" ]; then echo "OK - File found: ${filename}" echo "PRESS ENTER to continue." @@ -222,7 +222,7 @@ if [ ${mode} = "cln-import-gui" ]; then read keyRetry elif [ "${error}" == "multiple" ]; then echo "!! WARNING !!" - echo "There are multiple cln-rescue files in directory ${defaultUploadPath}" + echo "There are multiple cl-rescue files in directory ${defaultUploadPath}" echo "Make sure you upload only one tar.gz-file and start again." echo "PRESS ENTER to continue & retry ... or 'x'+ ENTER to cancel" read keyRetry @@ -247,9 +247,9 @@ if [ ${mode} = "cln-import-gui" ]; then # in setup scenario the final import is happening during provison if [ "${scenario}" == "setup" ]; then - # just add clnrescue filename to give file + # just add clrescue filename to give file echo "# result in: ${RESULTFILE} (remember to make clean delete once processed)" - echo "clnrescue='${filename}'" >> $RESULTFILE + echo "clrescue='${filename}'" >> $RESULTFILE exit 0 fi @@ -269,17 +269,17 @@ if [ ${mode} = "cln-import-gui" ]; then echo # run import process - echo "OK deleting old CLN data & restoring imported rescue file ..." - source <(sudo /home/admin/config.scripts/cln.backup.sh cln-import ${filename}) + echo "OK deleting old CL data & restoring imported rescue file ..." + source <(sudo /home/admin/config.scripts/cl.backup.sh cl-import ${filename}) - # TODO: check if update of CLN is needed (see detailes in cln-import) for edge case + # TODO: check if update of CL is needed (see detailes in cl-import) for edge case # turn off auto-unlock if activated because password c might now change - /home/admin/config.scripts/cln.hsmtool.sh autounlock-off + /home/admin/config.scripts/cl.hsmtool.sh autounlock-off # detect if the imported hsm_secret is encrypted # use the variables for the default network - source <(/home/admin/config.scripts/network.aliases.sh getvars cln) + source <(/home/admin/config.scripts/network.aliases.sh getvars cl) hsmSecretPath="/home/bitcoin/.lightning/${CLNETWORK}/hsm_secret" # check if encrypted trap 'rm -f "$output"' EXIT @@ -290,33 +290,33 @@ if [ ${mode} = "cln-import-gui" ]; then echo "# The hsm_secret is not encrypted" echo "# Record in raspiblitz.conf" sudo sed -i \ - "s/^${netprefix}clnEncryptedHSM=.*/${netprefix}clnEncryptedHSM=off/g" \ + "s/^${netprefix}clEncryptedHSM=.*/${netprefix}clEncryptedHSM=off/g" \ /mnt/hdd/raspiblitz.conf else cat $output - echo "# Starting cln.hsmtool.sh unlock" - /home/admin/config.scripts/cln.hsmtool.sh unlock # there are mutiple wallets possible, need to check for non-default ones too + echo "# Starting cl.hsmtool.sh unlock" + /home/admin/config.scripts/cl.hsmtool.sh unlock # there are mutiple wallets possible, need to check for non-default ones too fi # set the lightningd service file on each active network - # init backup plugin, restart cln - if [ "${cln}" == "on" ] || [ "${cln}" == "1" ]; then - /home/admin/config.scripts/cln.install-service.sh mainnet - /home/admin/config.scripts/cln-plugin.backup.sh on mainnet + # init backup plugin, restart cl + if [ "${cl}" == "on" ] || [ "${cl}" == "1" ]; then + /home/admin/config.scripts/cl.install-service.sh mainnet + /home/admin/config.scripts/cl-plugin.backup.sh on mainnet fi - if [ "${tcln}" == "on" ] || [ "${tcln}" == "1" ]; then - /home/admin/config.scripts/cln.install-service.sh testnet - /home/admin/config.scripts/cln-plugin.backup.sh on testnet + if [ "${tcl}" == "on" ] || [ "${tcl}" == "1" ]; then + /home/admin/config.scripts/cl.install-service.sh testnet + /home/admin/config.scripts/cl-plugin.backup.sh on testnet fi - if [ "${scln}" == "on" ] || [ "${scln}" == "1" ]; then - /home/admin/config.scripts/cln.install-service.sh signet - /home/admin/config.scripts/cln-plugin.backup.sh on signet + if [ "${scl}" == "on" ] || [ "${scl}" == "1" ]; then + /home/admin/config.scripts/cl.install-service.sh signet + /home/admin/config.scripts/cl-plugin.backup.sh on signet fi # give final info echo echo "# DONE - lightningd is now starting" - echo "# Check that CLN is starting up correctly and your old channels & funds are restored." + echo "# Check that CL is starting up correctly and your old channels & funds are restored." echo "# Take into account that some channels might have been force closed in the meanwhile." echo exit 0 @@ -432,7 +432,7 @@ wordone wordtweo wordthree ... fi done - # dont ask for password D (seed password) because raspiblitz never had that option for cln + # dont ask for password D (seed password) because raspiblitz never had that option for cl passwordD="" # writing result file data diff --git a/home.admin/config.scripts/cln.hsmtool.sh b/home.admin/config.scripts/cl.hsmtool.sh similarity index 77% rename from home.admin/config.scripts/cln.hsmtool.sh rename to home.admin/config.scripts/cl.hsmtool.sh index d3ae4f57b..ca8376369 100644 --- a/home.admin/config.scripts/cln.hsmtool.sh +++ b/home.admin/config.scripts/cl.hsmtool.sh @@ -1,9 +1,9 @@ #!/bin/bash -# keeps the password in memory between restarts: /dev/shm/.${netprefix}cln.pw +# keeps the password in memory between restarts: /dev/shm/.${netprefix}cl.pw # see the reasoning: https://github.com/ElementsProject/lightning#hd-wallet-encryption # does not store the password on disk unless auto-unlock is enabled -# autounlock password is in /root/.${netprefix}cln.pw +# autounlock password is in /root/.${netprefix}cl.pw # command info if [ $# -lt 1 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]||\ @@ -14,44 +14,44 @@ if [ $# -lt 1 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]||\ echo echo "Usage:" echo "Create new wallet:" - echo "cln.hsmtool.sh [new] [mainnet|testnet|signet] [?seedPassword]" - echo "cln.hsmtool.sh [new-force] [mainnet|testnet|signet] [?seedPassword]" + echo "cl.hsmtool.sh [new] [mainnet|testnet|signet] [?seedPassword]" + echo "cl.hsmtool.sh [new-force] [mainnet|testnet|signet] [?seedPassword]" echo "There will be no seedPassword(passphrase) used by default" echo "new-force will delete any old wallet and will work without dialog" echo - echo "cln.hsmtool.sh [seed] [mainnet|testnet|signet] [\"space-separated-seed-words\"] [?seedPassword]" - echo "cln.hsmtool.sh [seed-force] [mainnet|testnet|signet] [\"space-separated-seed-words\"] [?seedPassword]" + echo "cl.hsmtool.sh [seed] [mainnet|testnet|signet] [\"space-separated-seed-words\"] [?seedPassword]" + echo "cl.hsmtool.sh [seed-force] [mainnet|testnet|signet] [\"space-separated-seed-words\"] [?seedPassword]" echo "The new hsm_secret will be not encrypted if no NewPassword is given" echo "seed-force will delete any old wallet and will work without dialog" echo - echo "cln.hsmtool.sh [unlock|lock] " - echo "cln.hsmtool.sh [encrypt|decrypt] " - echo "cln.hsmtool.sh [autounlock-on|autounlock-off] " + echo "cl.hsmtool.sh [unlock|lock] " + echo "cl.hsmtool.sh [encrypt|decrypt] " + echo "cl.hsmtool.sh [autounlock-on|autounlock-off] " echo - echo "cln.hsmtool.sh [change-password] " + echo "cl.hsmtool.sh [change-password] " echo exit 1 fi source /mnt/hdd/raspiblitz.conf -source <(/home/admin/config.scripts/network.aliases.sh getvars cln $2) +source <(/home/admin/config.scripts/network.aliases.sh getvars cl $2) hsmSecretPath="/home/bitcoin/.lightning/${CLNETWORK}/hsm_secret" # password file is on the disk if encrypted and auto-unlock is enabled -passwordFile=/dev/shm/.${netprefix}cln.pw -if grep -Eq "${netprefix}clnEncryptedHSM=on" /mnt/hdd/raspiblitz.conf;then - if grep -Eq "${netprefix}clnAutoUnlock=on" /mnt/hdd/raspiblitz.conf;then - passwordFile=/root/${netprefix}cln.pw +passwordFile=/dev/shm/.${netprefix}cl.pw +if grep -Eq "${netprefix}clEncryptedHSM=on" /mnt/hdd/raspiblitz.conf;then + if grep -Eq "${netprefix}clAutoUnlock=on" /mnt/hdd/raspiblitz.conf;then + passwordFile=/root/${netprefix}cl.pw fi fi # add default value to raspi config if needed -if ! grep -Eq "^${netprefix}clnEncryptedHSM=" /mnt/hdd/raspiblitz.conf; then - echo "${netprefix}clnEncryptedHSM=off" >> /mnt/hdd/raspiblitz.conf +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}clnAutoUnlock=" /mnt/hdd/raspiblitz.conf; then - echo "${netprefix}clnAutoUnlock=off" >> /mnt/hdd/raspiblitz.conf +if ! grep -Eq "^${netprefix}clAutoUnlock=" /mnt/hdd/raspiblitz.conf; then + echo "${netprefix}clAutoUnlock=off" >> /mnt/hdd/raspiblitz.conf fi ############# @@ -100,11 +100,11 @@ function shredPasswordFile() { echo echo "# Shredding the passwordFile" echo - if [ -f /dev/shm/.${netprefix}cln.pw ];then - sudo shred -uvz /dev/shm/.${netprefix}cln.pw + if [ -f /dev/shm/.${netprefix}cl.pw ];then + sudo shred -uvz /dev/shm/.${netprefix}cl.pw fi - if [ -f /root/${netprefix}cln.pw ];then - sudo shred -uvz /root/${netprefix}cln.pw + if [ -f /root/${netprefix}cl.pw ];then + sudo shred -uvz /root/${netprefix}cl.pw fi } @@ -123,7 +123,7 @@ function encryptHSMsecret() { sudo -u bitcoin lightning-hsmtool encrypt $hsmSecretPath || exit 1 # setting value in raspiblitz.conf sudo sed -i \ - "s/^${netprefix}clnEncryptedHSM=.*/${netprefix}clnEncryptedHSM=on/g" \ + "s/^${netprefix}clEncryptedHSM=.*/${netprefix}clEncryptedHSM=on/g" \ /mnt/hdd/raspiblitz.conf echo "# Encrypted the hsm_secret for C-lightning $CHAIN" } @@ -142,7 +142,7 @@ function decryptHSMsecret() { else # setting value in raspiblitz.conf sudo sed -i \ - "s/^${netprefix}clnEncryptedHSM=.*/${netprefix}clnEncryptedHSM=on/g" \ + "s/^${netprefix}clEncryptedHSM=.*/${netprefix}clEncryptedHSM=on/g" \ /mnt/hdd/raspiblitz.conf if [ -f $passwordFile ];then echo "# Getting the password from $passwordFile" @@ -154,7 +154,7 @@ function decryptHSMsecret() { echo "# Decrypted successfully" else # unlock manually - /home/admin/config.scripts/cln.hsmtool.sh unlock + /home/admin/config.scripts/cl.hsmtool.sh unlock # attempt to decrypt again sudo cat $passwordFile | sudo -u bitcoin lightning-hsmtool decrypt \ "$hsmSecretPath" || echo "# Couldn't decrypt"; exit 1 @@ -163,7 +163,7 @@ function decryptHSMsecret() { shredPasswordFile # setting value in raspiblitz config sudo sed -i \ - "s/^${netprefix}clnEncryptedHSM=.*/${netprefix}clnEncryptedHSM=off/g" \ + "s/^${netprefix}clEncryptedHSM=.*/${netprefix}clEncryptedHSM=off/g" \ /mnt/hdd/raspiblitz.conf echo "# Decrypted the hsm_secret for C-lightning $CHAIN" } @@ -198,15 +198,15 @@ if [ "$1" = "new" ] || [ "$1" = "new-force" ] || [ "$1" = "seed" ] || [ "$1" = " seedPassword="$3" # get 24 words source <(python /home/admin/config.scripts/blitz.mnemonic.py generate) - #TODO seedwords to cln.backup.sh seed-export-gui - /home/admin/config.scripts/cln.backup.sh seed-export-gui "${seedwords6x4}" + #TODO seedwords to cl.backup.sh seed-export-gui + /home/admin/config.scripts/cl.backup.sh seed-export-gui "${seedwords6x4}" elif [ "$1" = "new-force" ]; then # get 24 words source <(python /home/admin/config.scripts/blitz.mnemonic.py generate) echo "seedwords='${seedwords}'" echo "seedwords6x4='${seedwords6x4}'" elif [ "$1" = "seed" ] || [ "$1" = "seed-force" ]; then - #TODO get seedwords from cln.backup.sh seed-import-gui [$RESULTFILE] + #TODO get seedwords from cl.backup.sh seed-import-gui [$RESULTFILE] seedwords="$3" seedpassword="$4" fi @@ -216,7 +216,7 @@ if [ "$1" = "new" ] || [ "$1" = "new-force" ] || [ "$1" = "seed" ] || [ "$1" = " sudo chown bitcoin:bitcoin /home/bitcoin/.lightning/${CLNETWORK}/seedwords.info sudo chmod 600 /home/bitcoin/.lightning/${CLNETWORK}/seedwords.info echo " -# This file was placed by cln.hsmtool.sh . +# This file was placed by cl.hsmtool.sh . # Contains the seed words from which the hsm_secret in the same directory was generated seedwords='${seedwords}' seedwords6x4='${seedwords6x4}' @@ -234,7 +234,7 @@ seedwords6x4='${seedwords6x4}' fi echo "# Re-init the backup plugin with the new wallet" - /home/admin/config.scripts/cln-plugin.backup.sh on $CHAIN + /home/admin/config.scripts/cl-plugin.backup.sh on $CHAIN exit 0 @@ -243,10 +243,10 @@ elif [ "$1" = "unlock" ]; then attempt=0 justUnlocked=0 while [ $($lightningcli_alias getinfo 2>&1 | grep -c '"id":') -eq 0 ];do - clnError=$(sudo journalctl -n5 -u ${netprefix}lightningd) + clError=$(sudo journalctl -n5 -u ${netprefix}lightningd) # getpassword - if [ $(echo "${clnError}" | \ + if [ $(echo "${clError}" | \ grep -c 'encrypted-hsm: Could not read pass from stdin.') -gt 0 ];then if [ ${justUnlocked} -eq 0 ];then if [ -f $passwordFile ];then @@ -263,19 +263,19 @@ elif [ "$1" = "unlock" ]; then fi # configure --encrypted-hsm - elif [ $(echo "${clnError}" | \ + elif [ $(echo "${clError}" | \ grep -c 'hsm_secret is encrypted, you need to pass the --encrypted-hsm startup option.') -gt 0 ];then echo "# The hsm_secret is encrypted, but unlock is not configured" passwordToFile # setting value in raspiblitz config sudo sed -i \ - "s/^${netprefix}clnEncryptedHSM=.*/${netprefix}clnEncryptedHSM=on/g" \ + "s/^${netprefix}clEncryptedHSM=.*/${netprefix}clEncryptedHSM=on/g" \ /mnt/hdd/raspiblitz.conf - /home/admin/config.scripts/cln.install-service.sh $CHAIN + /home/admin/config.scripts/cl.install-service.sh $CHAIN # get new password - elif [ $(echo "${clnError}" | \ + elif [ $(echo "${clError}" | \ grep -c 'Wrong password for encrypted hsm_secret.') -gt 0 ];then echo "# Wrong password" sudo rm -f $passwordFile @@ -322,7 +322,7 @@ elif [ "$1" = "encrypt" ]; then sudo -u bitcoin shred /home/bitcoin/.lightning/${CLNETWORK}/seedwords.info fi echo " -# This file is placed by cln.hsmtool.sh . +# This file is placed by cl.hsmtool.sh . # The seed words from which the hsm_secret in the same directory was generated # were $deletedWhen. # The words cannot be generated from the hsm_secret (one way function). @@ -337,29 +337,29 @@ elif [ "$1" = "decrypt" ]; then decryptHSMsecret elif [ "$1" = "autounlock-on" ]; then - if grep -Eq "${netprefix}clnEncryptedHSM=on" /mnt/hdd/raspiblitz.conf;then - echo "# Moving the password from $passwordFile to /root/.${netprefix}cln.pw" - sudo -u bitcoin mv /dev/shm/.${netprefix}cln.pw /root/.${netprefix}cln.pw + if grep -Eq "${netprefix}clEncryptedHSM=on" /mnt/hdd/raspiblitz.conf;then + echo "# Moving the password from $passwordFile to /root/.${netprefix}cl.pw" + sudo -u bitcoin mv /dev/shm/.${netprefix}cl.pw /root/.${netprefix}cl.pw else - passwordFile=/root/.${netprefix}cln.pw + passwordFile=/root/.${netprefix}cl.pw passwordToFile fi # setting value in raspiblitz config sudo sed -i \ - "s/^${netprefix}clnAutoUnlock=.*/${netprefix}clnAutoUnlock=on/g" \ + "s/^${netprefix}clAutoUnlock=.*/${netprefix}clAutoUnlock=on/g" \ /mnt/hdd/raspiblitz.conf echo "# Autounlock is on for C-lightning $CHAIN" elif [ "$1" = "autounlock-off" ]; then - if [ -f /root/${netprefix}cln.pw ];then - sudo cp /root/.${netprefix}cln.pw /dev/shm/.${netprefix}cln.pw - sudo shred -uzv /root/.${netprefix}cln.pw - sudo chmod 600 /dev/shm/.${netprefix}cln.pw - sudo chown bitcoin:bitcoin /dev/shm/.${netprefix}cln.pw + if [ -f /root/${netprefix}cl.pw ];then + sudo cp /root/.${netprefix}cl.pw /dev/shm/.${netprefix}cl.pw + sudo shred -uzv /root/.${netprefix}cl.pw + sudo chmod 600 /dev/shm/.${netprefix}cl.pw + sudo chown bitcoin:bitcoin /dev/shm/.${netprefix}cl.pw fi # setting value in raspiblitz config sudo sed -i \ - "s/^${netprefix}clnAutoUnlock=.*/${netprefix}clnAutoUnlock=off/g" \ + "s/^${netprefix}clAutoUnlock=.*/${netprefix}clAutoUnlock=off/g" \ /mnt/hdd/raspiblitz.conf echo "# Autounlock is off for C-lightning $CHAIN" @@ -369,7 +369,7 @@ elif [ "$1" = "change-password" ]; then if ! encryptHSMsecret "$walletPassword"; then echo "# Warning: the hsm_secret is left unencrypted." echo "# To fix run:" - echo "/home/admin/config.scripts/cln.hsmtool encrypt $2" + echo "/home/admin/config.scripts/cl.hsmtool encrypt $2" exit 1 fi exit 0 @@ -389,4 +389,4 @@ else fi # set the lightningd service file after all choices unless exited before -/home/admin/config.scripts/cln.install-service.sh $CHAIN +/home/admin/config.scripts/cl.install-service.sh $CHAIN diff --git a/home.admin/config.scripts/cln.install-service.sh b/home.admin/config.scripts/cl.install-service.sh similarity index 70% rename from home.admin/config.scripts/cln.install-service.sh rename to home.admin/config.scripts/cl.install-service.sh index ddb367426..75f2c8f85 100644 --- a/home.admin/config.scripts/cln.install-service.sh +++ b/home.admin/config.scripts/cl.install-service.sh @@ -5,26 +5,26 @@ if [ "$1" = "-h" ]||[ "$1" = "--help" ];then echo echo "Script to set up or update the C-lightning systemd service" echo "Usage:" - echo "/home/admin/config.scripts/cln.install-service.sh " + echo "/home/admin/config.scripts/cl.install-service.sh " echo exit 1 fi -# source <(/home/admin/config.scripts/network.aliases.sh getvars cln ) -source <(/home/admin/config.scripts/network.aliases.sh getvars cln $1) +# source <(/home/admin/config.scripts/network.aliases.sh getvars cl ) +source <(/home/admin/config.scripts/network.aliases.sh getvars cl $1) -if [ $(sudo -u bitcoin cat ${CLNCONF} | grep -c "^sparko") -gt 0 ];then - if [ ! -f /home/bitcoin/${netprefix}cln-plugins-enabled/sparko ];then +if [ $(sudo -u bitcoin cat ${CLCONF} | grep -c "^sparko") -gt 0 ];then + if [ ! -f /home/bitcoin/${netprefix}cl-plugins-enabled/sparko ];then echo "# The Sparko plugin is not present but in config" - /home/admin/config.scripts/cln-plugin.sparko.sh on $CHAIN + /home/admin/config.scripts/cl-plugin.sparko.sh on $CHAIN fi fi -if grep -Eq "${netprefix}clnEncryptedHSM=on" /mnt/hdd/raspiblitz.conf;then - if grep -Eq "${netprefix}clnAutoUnlock=on" /mnt/hdd/raspiblitz.conf;then - passwordFile=/root/.${netprefix}cln.pw +if grep -Eq "${netprefix}clEncryptedHSM=on" /mnt/hdd/raspiblitz.conf;then + if grep -Eq "${netprefix}clAutoUnlock=on" /mnt/hdd/raspiblitz.conf;then + passwordFile=/root/.${netprefix}cl.pw else - passwordFile=/dev/shm/.${netprefix}cln.pw + passwordFile=/dev/shm/.${netprefix}cl.pw fi passwordInput="(cat $passwordFile;echo;cat $passwordFile) | " encryptedHSMoption="--encrypted-hsm" @@ -45,7 +45,7 @@ User=bitcoin Group=bitcoin Type=simple ExecStart=/bin/sh -c '${passwordInput}/usr/local/bin/lightningd\ - --conf=${CLNCONF} ${encryptedHSMoption}' + --conf=${CLCONF} ${encryptedHSMoption}' Restart=always TimeoutSec=120 RestartSec=30 diff --git a/home.admin/config.scripts/cln.install.sh b/home.admin/config.scripts/cl.install.sh similarity index 81% rename from home.admin/config.scripts/cln.install.sh rename to home.admin/config.scripts/cl.install.sh index 3c852279b..c95190db6 100644 --- a/home.admin/config.scripts/cln.install.sh +++ b/home.admin/config.scripts/cl.install.sh @@ -21,10 +21,10 @@ if [ $# -eq 0 ]||[ "$1" = "-h" ]||[ "$1" = "--help" ];then echo "mainnet / testnet / signet instances can run parallel" echo echo "Usage:" - echo "cln.install.sh on " - echo "cln.install.sh off " - echo "cln.install.sh [update |testPR ]" - echo "cln.install.sh display-seed " + echo "cl.install.sh on " + echo "cl.install.sh off " + echo "cl.install.sh [update |testPR ]" + echo "cl.install.sh display-seed " echo exit 1 fi @@ -32,31 +32,31 @@ fi # Tor TORGROUP="debian-tor" -source <(/home/admin/config.scripts/network.aliases.sh getvars cln $2) +source <(/home/admin/config.scripts/network.aliases.sh getvars cl $2) -echo "# Running: 'cln.install.sh $*'" +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=cln" | sudo tee -a /mnt/hdd/raspiblitz.conf + echo "lightning=cl" | sudo tee -a /mnt/hdd/raspiblitz.conf fi # add default value to raspi config if needed -if ! grep -Eq "^${netprefix}cln=" /mnt/hdd/raspiblitz.conf; then - echo "${netprefix}cln=off" | sudo tee -a /mnt/hdd/raspiblitz.conf +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" = experimental ]||[ "$1" = testPR ];then if [ "${CHAIN}" == "testnet" ] && [ "${testnet}" != "on" ]; then - echo "# before activating testnet on cln, first activate testnet on bitcoind" + echo "# before activating testnet on cl, first activate testnet on bitcoind" echo "err='missing bitcoin testnet'" exit 1 fi if [ "${CHAIN}" == "signet" ] && [ "${signet}" != "on" ]; then - echo "# before activating signet on cln, first activate signet on bitcoind" + echo "# before activating signet on cl, first activate signet on bitcoind" echo "err='missing bitcoin signet'" exit 1 fi @@ -146,11 +146,11 @@ if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = experimental ]||[ "$1" = testPR ]; echo "# Make sure bitcoin is in the ${TORGROUP} group" sudo usermod -a -G ${TORGROUP} bitcoin - echo "# Add plugin-dir: /home/bitcoin/${netprefix}cln-plugins-enabled" - echo "# Add plugin-dir: /home/bitcoin/cln-plugins-available" + echo "# Add plugin-dir: /home/bitcoin/${netprefix}cl-plugins-enabled" + echo "# Add plugin-dir: /home/bitcoin/cl-plugins-available" # note that the disk is mounted with noexec - sudo -u bitcoin mkdir /home/bitcoin/${netprefix}cln-plugins-enabled 2>/dev/null - sudo -u bitcoin mkdir /home/bitcoin/cln-plugins-available 2>/dev/null + sudo -u bitcoin mkdir /home/bitcoin/${netprefix}cl-plugins-enabled 2>/dev/null + sudo -u bitcoin mkdir /home/bitcoin/cl-plugins-available 2>/dev/null echo "# Store the lightning data in /mnt/hdd/app-data/.lightning" echo "# Symlink to /home/bitcoin/" @@ -162,24 +162,24 @@ if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = experimental ]||[ "$1" = testPR ]; sudo -u bitcoin mkdir /home/bitcoin/.lightning/${CLNETWORK} fi - if ! sudo ls ${CLNCONF};then - echo "# Create ${CLNCONF}" + if ! sudo ls ${CLCONF};then + echo "# Create ${CLCONF}" echo "# lightningd configuration for ${network} ${CHAIN} network=${CLNETWORK} announce-addr=127.0.0.1:${portprefix}9736 log-file=cl.log log-level=info -plugin-dir=/home/bitcoin/${netprefix}cln-plugins-enabled +plugin-dir=/home/bitcoin/${netprefix}cl-plugins-enabled # Tor settings proxy=127.0.0.1:9050 bind-addr=127.0.0.1:${portprefix}9736 addr=statictor:127.0.0.1:9051/torport=${portprefix}9736 always-use-proxy=true -" | sudo tee ${CLNCONF} +" | sudo tee ${CLCONF} else - echo "# The file ${CLNCONF} is already present" + echo "# The file ${CLCONF} is already present" fi sudo chown -R bitcoin:bitcoin /mnt/hdd/app-data/.lightning sudo chown -R bitcoin:bitcoin /home/bitcoin/ @@ -187,24 +187,24 @@ always-use-proxy=true ################# # Backup plugin # ################# - /home/admin/config.scripts/cln-plugin.backup.sh on $CHAIN + /home/admin/config.scripts/cl-plugin.backup.sh on $CHAIN ################### # Systemd service # ################### - /home/admin/config.scripts/cln.install-service.sh $CHAIN + /home/admin/config.scripts/cl.install-service.sh $CHAIN echo echo "# Adding aliases" echo "\ alias ${netprefix}lightning-cli=\"sudo -u bitcoin /usr/local/bin/lightning-cli\ - --conf=${CLNCONF}\" -alias ${netprefix}cln=\"sudo -u bitcoin /usr/local/bin/lightning-cli\ - --conf=${CLNCONF}\" -alias ${netprefix}clnlog=\"sudo\ + --conf=${CLCONF}\" +alias ${netprefix}cl=\"sudo -u bitcoin /usr/local/bin/lightning-cli\ + --conf=${CLCONF}\" +alias ${netprefix}cllog=\"sudo\ tail -n 30 -f /home/bitcoin/.lightning/${CLNETWORK}/cl.log\" -alias ${netprefix}clnconf=\"sudo\ - nano ${CLNCONF}\" +alias ${netprefix}clconf=\"sudo\ + nano ${CLCONF}\" " | sudo tee -a /home/admin/_aliases sudo chown admin:admin /home/admin/_aliases @@ -222,12 +222,12 @@ alias ${netprefix}clnconf=\"sudo\ echo # setting value in the raspiblitz.conf - sudo sed -i "s/^${netprefix}cln=.*/${netprefix}cln=on/g" /mnt/hdd/raspiblitz.conf + sudo sed -i "s/^${netprefix}cl=.*/${netprefix}cl=on/g" /mnt/hdd/raspiblitz.conf # if this is the first lightning mainnet turned on - make default if [ "${CHAIN}" == "mainnet" ] && [ "${lightning}" == "" ]; then - echo "# CLN is now the default lightning implementation" - sudo sed -i "s/^lightning=.*/lightning=cln/g" /mnt/hdd/raspiblitz.conf + echo "# CL is now the default lightning implementation" + sudo sed -i "s/^lightning=.*/lightning=cl/g" /mnt/hdd/raspiblitz.conf fi exit 0 @@ -246,7 +246,7 @@ if [ "$1" = "display-seed" ]; then if [ "${displayNetwork}" == "" ]; then displayNetwork="mainnet" fi - source <(/home/admin/config.scripts/network.aliases.sh getvars cln $displayNetwork) + source <(/home/admin/config.scripts/network.aliases.sh getvars cl $displayNetwork) # check if seedword file exists seedwordFile="/home/bitcoin/.lightning/${CLNETWORK}/seedwords.info" @@ -288,11 +288,11 @@ if [ "$1" = "off" ];then sudo rm -f /usr/local/bin/lightning-cli fi # setting value in the raspiblitz.conf - sudo sed -i "s/^${netprefix}cln=.*/${netprefix}cln=off/g" /mnt/hdd/raspiblitz.conf + sudo sed -i "s/^${netprefix}cl=.*/${netprefix}cl=off/g" /mnt/hdd/raspiblitz.conf - # if cln mainnet was default - remove - if [ "${CHAIN}" == "mainnet" ] && [ "${lightning}" == "cln" ]; then - echo "# CLN is REMOVED as the default lightning implementation" + # 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 if [ "${lnd}" == "on" ]; then echo "# LND is now the new default lightning implementation" diff --git a/home.admin/config.scripts/cln.rest.sh b/home.admin/config.scripts/cl.rest.sh similarity index 82% rename from home.admin/config.scripts/cln.rest.sh rename to home.admin/config.scripts/cl.rest.sh index ed8077f23..593e43f64 100644 --- a/home.admin/config.scripts/cln.rest.sh +++ b/home.admin/config.scripts/cl.rest.sh @@ -12,23 +12,23 @@ if [ $# -eq 0 ]||[ "$1" = "-h" ]||[ "$1" = "--help" ];then echo "The same macaroon and certs will be used for the parallel networks" echo echo "Usage:" - echo "cln.rest.sh [on|off|connect] " + echo "cl.rest.sh [on|off|connect] " echo exit 1 fi -source <(/home/admin/config.scripts/network.aliases.sh getvars cln $2) +source <(/home/admin/config.scripts/network.aliases.sh getvars cl $2) -echo "# Running 'cln.rest.sh $*'" +echo "# Running 'cl.rest.sh $*'" if [ $1 = connect ];then echo "# Allowing port ${portprefix}6100 through the firewall" - sudo ufw allow "${portprefix}6100" comment "${netprefix}clnrest" + 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}clnrest 443 ${portprefix}6100 + /home/admin/config.scripts/internet.hiddenservice.sh ${netprefix}clrest 443 ${portprefix}6100 - toraddress=$(sudo cat /mnt/hdd/tor/${netprefix}clnrest/hostname) + toraddress=$(sudo cat /mnt/hdd/tor/${netprefix}clrest/hostname) hex_macaroon=$(xxd -plain /home/bitcoin/c-lightning-REST/certs/access.macaroon | tr -d '\n') url="https://${localip}:${portprefix}6100/" #string="${url}?${hex_macaroon}" @@ -75,8 +75,8 @@ fi if [ $1 = on ];then echo "# Setting up c-lightning-REST for $CHAIN" - sudo systemctl stop ${netprefix}clnrest - sudo systemctl disable ${netprefix}clnrest + sudo systemctl stop ${netprefix}clrest + sudo systemctl disable ${netprefix}clrest if [ ! -f /home/bitcoin/c-lightning-REST/cl-rest.js ];then cd /home/bitcoin || exit 1 @@ -101,7 +101,7 @@ if [ $1 = on ];then echo " # systemd unit for c-lightning-REST for ${CHAIN} -# /etc/systemd/system/${netprefix}clnrest.service +# /etc/systemd/system/${netprefix}clrest.service [Unit] Description=c-lightning-REST daemon for ${CHAIN} Wants=${netprefix}lightningd.service @@ -123,30 +123,30 @@ PrivateDevices=true [Install] WantedBy=multi-user.target -" | sudo tee /etc/systemd/system/${netprefix}clnrest.service +" | sudo tee /etc/systemd/system/${netprefix}clrest.service - sudo systemctl enable ${netprefix}clnrest + sudo systemctl enable ${netprefix}clrest source /home/admin/raspiblitz.info if [ "${state}" == "ready" ]; then - echo "# OK - the clnrest.service is enabled, system is ready so starting service" - sudo systemctl start ${netprefix}clnrest + echo "# OK - the clrest.service is enabled, system is ready so starting service" + sudo systemctl start ${netprefix}clrest else - echo "# OK - the clnrest.service is enabled, to start manually use: 'sudo systemctl start clnrest'" + echo "# OK - the clrest.service is enabled, to start manually use: 'sudo systemctl start clrest'" fi echo echo "# Monitor with:" - echo "sudo journalctl -f -u clnrest" + echo "sudo journalctl -f -u clrest" echo fi if [ $1 = off ];then echo "# Removing c-lightning-REST for ${CHAIN}" - sudo systemctl stop ${netprefix}clnrest - sudo systemctl disable ${netprefix}clnrest + sudo systemctl stop ${netprefix}clrest + sudo systemctl disable ${netprefix}clrest 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}clnrest + /home/admin/config.scripts/internet.hiddenservice.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 diff --git a/home.admin/config.scripts/cln.setname.sh b/home.admin/config.scripts/cl.setname.sh similarity index 72% rename from home.admin/config.scripts/cln.setname.sh rename to home.admin/config.scripts/cl.setname.sh index 7f55e3061..ef0dd5796 100644 --- a/home.admin/config.scripts/cln.setname.sh +++ b/home.admin/config.scripts/cl.setname.sh @@ -4,7 +4,7 @@ if [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo echo "Config script to set the alias of the C-lightning node" - echo "cln.setname.sh [mainnet|testnet|signet] [?newName]" + echo "cl.setname.sh [mainnet|testnet|signet] [?newName]" echo exit 1 fi @@ -13,13 +13,13 @@ fi newName=$2 # use default values from the raspiblitz.conf -source <(/home/admin/config.scripts/network.aliases.sh getvars cln $1) +source <(/home/admin/config.scripts/network.aliases.sh getvars cl $1) # run interactive if 'turn on' && no further parameters if [ ${#newName} -eq 0 ]; then sudo rm ./.tmp - dialog --backtitle "Set CLN Name/Alias" --inputbox "ENTER the new Name/Alias for the C-lightning node: + dialog --backtitle "Set CL Name/Alias" --inputbox "ENTER the new Name/Alias for the C-lightning node: (free to choose, one word up to 32 basic characters) " 8 56 2>./.tmp newName=$( cat ./.tmp | tr -dc '[:alnum:]\n\r' ) @@ -32,8 +32,8 @@ fi # config file blitzConfig="/mnt/hdd/raspiblitz.conf" -# cln conf file -clnConfig="${CLNCONF}" +# cl conf file +clConfig="${CLCONF}" # check if raspiblitz config file exists if [ ! -f ${blitzConfig} ]; then @@ -41,16 +41,16 @@ if [ ! -f ${blitzConfig} ]; then exit 1 fi -# check if cln config file exists -if sudo ls ${clnConfig}; then - echo "FAIL - missing ${clnConfig}" +# check if cl config file exists +if sudo ls ${clConfig}; then + echo "FAIL - missing ${clConfig}" exit 1 fi # make sure entry line for 'alias' exists -entryExists=$(cat ${clnConfig} | grep -c "alias=") +entryExists=$(cat ${clConfig} | grep -c "alias=") if [ ${entryExists} -eq 0 ]; then - echo "alias=" >> ${clnConfig} + echo "alias=" >> ${clConfig} fi # stop services @@ -58,7 +58,7 @@ echo "making sure services are not running" sudo systemctl stop ${netprefix}lightningd 2>/dev/null # config: change name -sudo sed -i "s/^alias=.*/alias=${newName}/g" ${clnConfig} +sudo sed -i "s/^alias=.*/alias=${newName}/g" ${clConfig} source /home/admin/raspiblitz.info if [ "${state}" == "ready" ]; then diff --git a/home.admin/config.scripts/lnd.install.sh b/home.admin/config.scripts/lnd.install.sh index 0cd37a36f..c6d1b29a5 100644 --- a/home.admin/config.scripts/lnd.install.sh +++ b/home.admin/config.scripts/lnd.install.sh @@ -216,7 +216,7 @@ alias ${netprefix}lncli=\"sudo -u bitcoin /usr/local/bin/lncli\ # setting value in raspi blitz config sudo sed -i "s/^${netprefix}lnd=.*/${netprefix}lnd=on/g" /mnt/hdd/raspiblitz.conf - # if this is the first lighting mainnet turned on - make default + # if this is the first lightning mainnet turned on - make default if [ "${CHAIN}" == "mainnet" ] && [ "${lightning}" == "" ]; then echo "# LND is now default lighthning implementation" sudo sed -i "s/^lightning=.*/lightning=lnd/g" /mnt/hdd/raspiblitz.conf @@ -289,9 +289,9 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then if [ "${CHAIN}" == "mainnet" ] && [ "${lightning}" == "lnd" ]; then echo "# LND is REMOVED as default lightning implementation" sudo sed -i "s/^lightning=.*/lightning=/g" /mnt/hdd/raspiblitz.conf - if [ "${cln}" == "on" ]; then - echo "# CLN is now new default lightning implementation" - sudo sed -i "s/^lightning=.*/lightning=cln/g" /mnt/hdd/raspiblitz.conf + if [ "${cl}" == "on" ]; then + echo "# CL is now the new default lightning implementation" + sudo sed -i "s/^lightning=.*/lightning=cl/g" /mnt/hdd/raspiblitz.conf fi fi diff --git a/home.admin/config.scripts/network.aliases.sh b/home.admin/config.scripts/network.aliases.sh index e12897ff3..94752bd27 100644 --- a/home.admin/config.scripts/network.aliases.sh +++ b/home.admin/config.scripts/network.aliases.sh @@ -3,12 +3,12 @@ # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then echo "# Usage:" - echo "# source <(/home/admin/config.scripts/network.aliases.sh getvars )" + echo "# source <(/home/admin/config.scripts/network.aliases.sh getvars )" echo "# if no values given uses the default values from the raspiblitz.conf" echo echo "# chain is: main | test ; from raspiblitz.conf or raspiblitz.info or defaults to main" echo - echo "# LNTYPE is: lnd | cln ; default: lnd" + echo "# LNTYPE is: lnd | cl ; default: lnd" echo "# typeprefix is: "" | c" echo echo "# CHAIN is: mainnet | testnet | signet" @@ -23,7 +23,7 @@ source /mnt/hdd/raspiblitz.conf 2>/dev/null if [ $1 = getvars ];then - # LNTYPE is: lnd | cln + # LNTYPE is: lnd | cl if [ $# -gt 1 ];then LNTYPE=$2 else @@ -72,7 +72,7 @@ if [ $1 = getvars ];then echo "portprefix=${portprefix}" echo "L2rpcportmod=${L2rpcportmod}" - if [ "${LNTYPE}" == "cln" ];then + if [ "${LNTYPE}" == "cl" ];then # CLNETWORK is: bitcoin / signet / testnet if [ "${chain}" == "main" ];then CLNETWORK=${network} @@ -81,13 +81,13 @@ if [ $1 = getvars ];then fi echo "CLNETWORK=${CLNETWORK}" - # CLNCONF is the path to the config + # CLCONF is the path to the config if [ "${CLNETWORK}" == "bitcoin" ]; then - CLNCONF="/home/bitcoin/.lightning/config" + CLCONF="/home/bitcoin/.lightning/config" else - CLNCONF="/home/bitcoin/.lightning/${CLNETWORK}/config" + CLCONF="/home/bitcoin/.lightning/${CLNETWORK}/config" fi - echo "CLNCONF=${CLNCONF}" + echo "CLCONF=${CLCONF}" typeprefix=c fi @@ -102,7 +102,7 @@ if [ $1 = getvars ];then echo "lncli_alias=\"sudo -u bitcoin /usr/local/bin/lncli -n=${chain}net --rpcserver localhost:1${L2rpcportmod}009\"" # sudo -u bitcoin ${network}-cli -datadir=/home/bitcoin/.${network} echo "bitcoincli_alias=\"/usr/local/bin/${network}-cli -datadir=/home/bitcoin/.${network} -rpcport=${L1rpcportmod}8332\"" - echo "lightningcli_alias=\"sudo -u bitcoin /usr/local/bin/lightning-cli --conf=${CLNCONF}\"" + echo "lightningcli_alias=\"sudo -u bitcoin /usr/local/bin/lightning-cli --conf=${CLCONF}\"" fi diff --git a/home.admin/setup.scripts/controlFinalDialog.sh b/home.admin/setup.scripts/controlFinalDialog.sh index 6a8fbc638..9be6640e9 100755 --- a/home.admin/setup.scripts/controlFinalDialog.sh +++ b/home.admin/setup.scripts/controlFinalDialog.sh @@ -13,7 +13,7 @@ source ${SETUPFILE} # SHOW SEED WORDS AFTER SETUP if [ "${lightning}" == "lnd" ]; then walletName="LND" -elif [ "${lightning}" == "cln" ]; then +elif [ "${lightning}" == "cl" ]; then walletName="C-lightning" fi if [ "${setupPhase}" == "setup" ] && [ "${seedwords6x4NEW}" != "" ]; then diff --git a/home.admin/setup.scripts/controlSetupDialog.sh b/home.admin/setup.scripts/controlSetupDialog.sh index 262297dc9..dc22f062a 100755 --- a/home.admin/setup.scripts/controlSetupDialog.sh +++ b/home.admin/setup.scripts/controlSetupDialog.sh @@ -262,10 +262,10 @@ if [ "${setupPhase}" == "setup" ]; then /home/admin/setup.scripts/dialogLightningWallet-lnd.sh dialogResult=$? - elif [ "${lightning}" == "cln" ]; then + elif [ "${lightning}" == "cl" ]; then echo "# Starting lightning wallet dialog for C-LIGHTNING ..." - /home/admin/setup.scripts/dialogLightningWallet-cln.sh + /home/admin/setup.scripts/dialogLightningWallet-cl.sh dialogResult=$? else diff --git a/home.admin/setup.scripts/dialogBlockchainLightning.sh b/home.admin/setup.scripts/dialogBlockchainLightning.sh index dece24760..962c6e45a 100644 --- a/home.admin/setup.scripts/dialogBlockchainLightning.sh +++ b/home.admin/setup.scripts/dialogBlockchainLightning.sh @@ -55,7 +55,7 @@ if [ "${network}" == "bitcoin" ]; then # choose lightning client OPTIONS=() OPTIONS+=(LND "LND - Lightning Network Daemon (DEFAULT)") - OPTIONS+=(CLN "C-lightning by Blockstream (fewer apps)") + OPTIONS+=(CL "C-lightning by Blockstream (fewer apps)") OPTIONS+=(NONE "Run without Lightning") CHOICE=$(dialog --clear \ --backtitle "RaspiBlitz ${codeVersion} - Setup" \ @@ -69,8 +69,8 @@ if [ "${network}" == "bitcoin" ]; then LND) lightning="lnd" ;; - CLN) - lightning="cln" + CL) + lightning="cl" ;; NONE) lightning="none" diff --git a/home.admin/setup.scripts/dialogLightningWallet-cln.sh b/home.admin/setup.scripts/dialogLightningWallet-cln.sh index 39dd33d18..0ae1939a6 100644 --- a/home.admin/setup.scripts/dialogLightningWallet-cln.sh +++ b/home.admin/setup.scripts/dialogLightningWallet-cln.sh @@ -23,7 +23,7 @@ if [ "${CHOICE}" == "NEW" ]; then sudo sed -i '/^setPasswordB=/d' $SETUPFILE sudo sed -i '/^setPasswordC=/d' $SETUPFILE - # mark all passwords to be set - passwordc wallet encryption not for cln + # mark all passwords to be set - passwordc wallet encryption not for cl echo "setPasswordA=1" >> $SETUPFILE echo "setPasswordB=1" >> $SETUPFILE echo "setPasswordC=0" >> $SETUPFILE @@ -36,11 +36,11 @@ elif [ "${CHOICE}" == "OLD" ]; then # get more details what kind of old lightning wallet user has OPTIONS=() - OPTIONS+=(CLNRESCUE "CLN tar.gz-Backupfile (BEST)") + OPTIONS+=(CLRESCUE "CL tar.gz-Backupfile (BEST)") OPTIONS+=(ONLYSEED "Only Seed Word List (FALLBACK)") - CHOICESUB=$(dialog --backtitle "RaspiBlitz" --clear --title "RECOVER CLN DATA & WALLET" --menu "Data you have to recover from?" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) + CHOICESUB=$(dialog --backtitle "RaspiBlitz" --clear --title "RECOVER CL DATA & WALLET" --menu "Data you have to recover from?" 11 60 6 "${OPTIONS[@]}" 2>&1 >/dev/tty) - if [ "${CHOICESUB}" == "CLNRESCUE" ]; then + if [ "${CHOICESUB}" == "CLRESCUE" ]; then # just activate LND rescue upload uploadRESCUE=1 @@ -94,27 +94,27 @@ else exit 1 fi -# UPLOAD CLN RESCUE FILE dialog (if activated by dialogs above) +# UPLOAD CL RESCUE FILE dialog (if activated by dialogs above) if [ ${uploadRESCUE} -eq 1 ]; then # run upload dialog and get result _temp="/var/cache/raspiblitz/temp/.temp.tmp" clear - /home/admin/config.scripts/cln.backup.sh cln-import-gui setup $_temp + /home/admin/config.scripts/cl.backup.sh cl-import-gui setup $_temp source $_temp 2>/dev/null sudo rm $_temp 2>/dev/null # if user canceled upload - if [ "${clnrescue}" == "" ]; then - # signal cancel to the calling script by exit code (3 = exit on clnrescue) + if [ "${clrescue}" == "" ]; then + # signal cancel to the calling script by exit code (3 = exit on clrescue) exit 3 fi # clear setup state from all fomer possible choices (previous loop) - sudo sed -i '/^clnrescue=/d' $SETUPFILE + sudo sed -i '/^clrescue=/d' $SETUPFILE # store result in setup state - echo "clnrescue='${clnrescue}'" >> $SETUPFILE + echo "clrescue='${clrescue}'" >> $SETUPFILE fi # INPUT LIGHTNING SEED dialog (if activated by dialogs above) @@ -122,7 +122,7 @@ if [ ${enterSEED} -eq 1 ]; then # start seed input and get results _temp="/var/cache/raspiblitz/.temp.tmp" - /home/admin/config.scripts/cln.backup.sh seed-import-gui $_temp + /home/admin/config.scripts/cl.backup.sh seed-import-gui $_temp source $_temp 2>/dev/null sudo rm $_temp 2>/dev/null diff --git a/home.admin/setup.scripts/eventBlockchainSync.sh b/home.admin/setup.scripts/eventBlockchainSync.sh index 0865f5af9..3679abdfb 100644 --- a/home.admin/setup.scripts/eventBlockchainSync.sh +++ b/home.admin/setup.scripts/eventBlockchainSync.sh @@ -65,7 +65,7 @@ do # setting info string infoStr=" Blockchain Progress : ${syncProgress}\n" - if [ "${lightning}" == "lnd" ] || [ "${lightning}" == "cln" ]; then + if [ "${lightning}" == "lnd" ] || [ "${lightning}" == "cl" ]; then infoStr="${infoStr} Lightning Progress : ${scanProgress}\n ${actionString}" else # if lightning is deactivated (leave line clear) From a801da84c19a23d45bf48e61912733bc83e4f7f3 Mon Sep 17 00:00:00 2001 From: openoms Date: Sun, 26 Sep 2021 23:27:26 +0100 Subject: [PATCH 1185/1295] uncomment ELECTRSVERSION= --- home.admin/config.scripts/bonus.electrs.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/bonus.electrs.sh b/home.admin/config.scripts/bonus.electrs.sh index e8507ca3f..00fe00850 100755 --- a/home.admin/config.scripts/bonus.electrs.sh +++ b/home.admin/config.scripts/bonus.electrs.sh @@ -1,7 +1,7 @@ #!/bin/bash # https://github.com/romanz/electrs/releases -#ELECTRSVERSION="v0.9.0-rc2" +ELECTRSVERSION="v0.9.0-rc2" # https://github.com/romanz/electrs/commits/master # ELECTRSVERSION="3041e89cd2fb377541b929d852ef6298c2d4e60a" From 04ebfd7c879b9f02b922a69232e85d97f55bff98 Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 27 Sep 2021 00:47:47 +0100 Subject: [PATCH 1186/1295] cln-plugin.standard-pyhton - fix 3rd parameter --- home.admin/config.scripts/cln-plugin.standard-python.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/cln-plugin.standard-python.sh b/home.admin/config.scripts/cln-plugin.standard-python.sh index 14a386777..be5ffe690 100644 --- a/home.admin/config.scripts/cln-plugin.standard-python.sh +++ b/home.admin/config.scripts/cln-plugin.standard-python.sh @@ -18,7 +18,7 @@ fi if [ $1 = on ];then - source <(/home/admin/config.scripts/network.aliases.sh getvars cln $2) + source <(/home/admin/config.scripts/network.aliases.sh getvars cln $3) plugin=$2 From 56309541fe63ff3a0e3b2779f6413aff6b313a98 Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 27 Sep 2021 10:39:36 +0100 Subject: [PATCH 1187/1295] replace CLN with CL in outputs --- home.admin/_provision_.sh | 20 ++++++++++---------- home.admin/config.scripts/bonus.rtl.sh | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/home.admin/_provision_.sh b/home.admin/_provision_.sh index 5f0205d0c..bfefd9b3b 100755 --- a/home.admin/_provision_.sh +++ b/home.admin/_provision_.sh @@ -343,28 +343,28 @@ else CLcho "Provisioning LND Signet - not active" >> ${logFile} fi CL -# CLN Mainnet (when not main instance) +# CL Mainnet (when not main instance) if [ "${cl}" == "on" ] && [ "${lightning}" != "cl" ]; then echo "Provisioning CL Mainnet - run config script" >> ${logFile} sudo /home/admin/config.scripts/cl.install.sh on mainnet >> ${logFile} 2>&1 else - CLcho "Provisioning CLN Mainnet - not active as secondary option" >> ${logFile} + CLcho "Provisioning CL Mainnet - not active as secondary option" >> ${logFile} fi CL -# CLN Testnet +# CL Testnet if [ "${tcl}" == "on" ]; then echo "Provisioning CL Testnet - run config script" >> ${logFile} sudo /home/admin/config.scripts/cl.install.sh on testnet >> ${logFile} 2>&1 else - echo "Provisioning CLN Testnet - not active" >> ${logFile} + echo "Provisioning CL Testnet - not active" >> ${logFile} fi -# CLN Signet +# CL Signet if [ "${scl}" == "on" ]; then - echo "Provisioning CLN Signet - run config script" >> ${logFile} + echo "Provisioning CL Signet - run config script" >> ${logFile} sudo /home/admin/config.scripts/cl.install.sh on signet >> ${logFile} 2>&1 else - echo "Provisioning CLN Signet - not active" >> ${logFile} + echo "Provisioning CL Signet - not active" >> ${logFile} fi # TOR @@ -423,11 +423,11 @@ fi # RTL (CLN) if [ "${crtlWebinterface}" = "on" ]; then - echo "Provisioning RTL CLN - run config script" >> ${logFile} + echo "Provisioning RTL CL - run config script" >> ${logFile} sudo sed -i "s/^message=.*/message='Setup RTL (takes time)'/g" ${infoFile} sudo -u admin /home/admCLconfig.scripts/bonus.rtl.sh on cl mainnet >> ${logFile} 2>&1 else - echo "Provisioning RTL CLN - keep default" >> ${logFile} + echo "Provisioning RTL CL - keep default" >> ${logFile} fi # SPARKO @@ -436,7 +436,7 @@ if [ "${sparko}" = "on" ]; then sudo sed -i "s/^message=.*/message='Setup SPARKO (takes time)'/g" ${infoFile} sudo -u admin /home/admin/config.scripts/cl-plugin.sparko.sh on mainnet >> ${logFile} 2>&1 else - echo "Provisioning RTL CLN - keep default" >> ${logFile} + echo "Provisioning RTL CL - keep default" >> ${logFile} fi #LOOP - install only if LiT won't be installed diff --git a/home.admin/config.scripts/bonus.rtl.sh b/home.admin/config.scripts/bonus.rtl.sh index 0c1979b8b..2592645e1 100755 --- a/home.admin/config.scripts/bonus.rtl.sh +++ b/home.admin/config.scripts/bonus.rtl.sh @@ -384,7 +384,7 @@ if [ "$1" = "prestart" ]; then # C-Lightning changes of config # https://github.com/Ride-The-Lightning/RTL/blob/master/docs/C-Lightning-setup.md if [ "${LNCLE}" == "cl" ]; then - echo "# CLN Config" + echo "# CL Config" cat /home/rtl/${systemdService}/RTL-Config.json | \ jq ".port = \"${RTLHTTP}\"" | \ jq ".multiPass = \"${RPCPASSWORD}\"" | \ From d84a9c23874d0db0553d12667473b5ac6a149903 Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 27 Sep 2021 10:40:48 +0100 Subject: [PATCH 1188/1295] add quotes --- home.admin/config.scripts/cl-plugin.sparko.sh | 8 ++++---- home.admin/config.scripts/cl-plugin.standard-python.sh | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/home.admin/config.scripts/cl-plugin.sparko.sh b/home.admin/config.scripts/cl-plugin.sparko.sh index 63f6df884..7114cf7a7 100644 --- a/home.admin/config.scripts/cl-plugin.sparko.sh +++ b/home.admin/config.scripts/cl-plugin.sparko.sh @@ -12,7 +12,7 @@ if [ $# -lt 1 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then echo "Install, remove, connect or get info about the Sparko plugin for C-lightning" echo "version: $SPARKOVERSION" echo "Usage:" - echo "cl-plugin.sparko.sh [on|off|menu|connect] [testnet|mainnet|signet]" + echo "cl-plugin.sparko.sh [on|off|menu|connect] [testnet|mainnet|signet] [norestart]" echo exit 1 fi @@ -104,7 +104,7 @@ if [ $1 = connect ];then exit 0 fi -if [ $1 = on ];then +if [ "$1" = "on" ];then echo "# Detect CPU architecture ..." isARM=$(uname -m | grep -c 'arm') isAARCH64=$(uname -m | grep -c 'aarch64') @@ -176,7 +176,7 @@ sparko-keys=${masterkeythatcandoeverything}; ${secretaccesskeythatcanreadstuff}: sudo sed -i "s/^${netprefix}sparko=.*/${netprefix}sparko=on/g" /mnt/hdd/raspiblitz.conf source /home/admin/raspiblitz.info - if [ "${state}" == "ready" ]; then + if [ "${state}" == "ready" ] && [ "$3" != "norestart" ]; then echo "# Restart the ${netprefix}lightningd.service to activate Sparko" sudo systemctl restart ${netprefix}lightningd fi @@ -188,7 +188,7 @@ sparko-keys=${masterkeythatcandoeverything}; ${secretaccesskeythatcanreadstuff}: fi -if [ $1 = off ];then +if [ "$1" = "off" ];then # delete symlink sudo rm -rf /home/bitcoin/${netprefix}cl-plugins-enabled/sparko diff --git a/home.admin/config.scripts/cl-plugin.standard-python.sh b/home.admin/config.scripts/cl-plugin.standard-python.sh index f474c2fca..b3a465048 100644 --- a/home.admin/config.scripts/cl-plugin.standard-python.sh +++ b/home.admin/config.scripts/cl-plugin.standard-python.sh @@ -16,7 +16,7 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then exit 1 fi -if [ $1 = on ];then +if [ "$1" = "on" ];then source <(/home/admin/config.scripts/network.aliases.sh getvars cl $3) From 37b2fb3e2d0c4b196891f8d63f34dd436bc525d5 Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 27 Sep 2021 10:46:30 +0100 Subject: [PATCH 1189/1295] replace CLN with CL --- home.admin/_provision_.sh | 2 +- home.admin/config.scripts/bonus.rtl.sh | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/home.admin/_provision_.sh b/home.admin/_provision_.sh index bfefd9b3b..180010ffc 100755 --- a/home.admin/_provision_.sh +++ b/home.admin/_provision_.sh @@ -421,7 +421,7 @@ else echo "Provisioning RTL LND - keep default" >> ${logFile} fi -# RTL (CLN) +# 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} diff --git a/home.admin/config.scripts/bonus.rtl.sh b/home.admin/config.scripts/bonus.rtl.sh index 2592645e1..f607d3afd 100755 --- a/home.admin/config.scripts/bonus.rtl.sh +++ b/home.admin/config.scripts/bonus.rtl.sh @@ -217,9 +217,9 @@ WantedBy=multi-user.target sudo sed -i "s/^After=.*/After=${netprefix}lnd.service/g" /etc/systemd/system/${systemdService}.service fi CL - # adapt systemd service template for CLN + # adapt systemd service template for CL if [ "${LNTYPE}" == "cl" ]; thenCL - echo "# modifying ${systemdService}.service for CLN" + echo "# modifying ${systemdService}.service for CL" 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 @@ -391,7 +391,7 @@ if [ "$1" = "prestart" ]; then jq ".nodes[0].lnNode = \"${hostname}\"" | \ jq ".nodes[0].lnImplementation = \"CLT\"" | \ jq ".nodes[0].Authentication.macaroonPath = \"CLme/bitcoin/c-lightning-REST/certs\"" | \ - jq ".nodes[0].Authentication.configPath = \"${CLNCONF}\"" | \ + jq ".nodes[0].Authentication.configPath = \"${CLCONF}\"" | \ jq ".nodes[0].Authentication.swapMacaroonPath = \"/home/rtl/.loop/${CHAIN}/\"" | \ jq ".nodes[0].Authentication.boltzMacaroonPath = \"/home/rtl/.boltz-lnd/macaroons/\"" | \ jq ".nodes[0].Settings.userPersona = \"OPERATOR\"" | \ From 486d2b4e3c6b024ca68035b5f6ba9385c8580311 Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 27 Sep 2021 11:11:30 +0100 Subject: [PATCH 1190/1295] add cl-plugin: feeadjuster --- .../config.scripts/cl-plugin.feeadjuster.sh | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 home.admin/config.scripts/cl-plugin.feeadjuster.sh diff --git a/home.admin/config.scripts/cl-plugin.feeadjuster.sh b/home.admin/config.scripts/cl-plugin.feeadjuster.sh new file mode 100644 index 000000000..7919f99dd --- /dev/null +++ b/home.admin/config.scripts/cl-plugin.feeadjuster.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +# command info +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then + echo + echo "Install the feeadjuster plugin for C-lightning" + echo "Usage:" + echo "cl-plugin.feeadjuster.sh [on|off] " + echo + 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 + + plugin="feeadjuster" + if [ ! -f "/home/bitcoin/cl-plugins-available/plugins/${plugin}/${plugin}.py" ]; then + cd /home/bitcoin/cl-plugins-available || exit 1 + sudo -u bitcoin git clone https://github.com/lightningd/plugins.git + sudo -u bitcoin pip install -r /home/bitcoin/cl-plugins-available/plugins/${plugin}/requirements.txt + fi + if [ ! -L /home/bitcoin/${netprefix}cl-plugins-enabled/${plugin}.py ];then + sudo ln -s /home/bitcoin/cl-plugins-available/plugins/${plugin}/${plugin}.py \ + /home/bitcoin/${netprefix}cl-plugins-enabled + sudo chmod +x /home/bitcoin/cl-plugins-available/plugins/${plugin}/${plugin}.py + fi + + # setting value in raspi blitz config + sudo sed -i "s/^${netprefix}feeadjuster=.*/${netprefix}feeadjuster=on/g" /mnt/hdd/raspiblitz.conf + + source /home/admin/raspiblitz.info + if [ "${state}" == "ready" ] && [ "$3" != "norestart" ]; then + echo "# Start ${netprefix}${plugin}" + $lightningcli_alias plugin start /home/bitcoin/cl-plugins-enabled/${plugin}.py + fi + +fi + +if [ "$1" = "off" ];then + + echo "Stop the ${plugin}" + $lightningcli_alias plugin stop home/bitcoin/${netprefix}cl-plugins-enabled/${plugin}.py + + echo "# delete symlink" + sudo rm -rf /home/bitcoin/${netprefix}cl-plugins-enabled/${plugin}.py + + echo "# Edit ${CLCONF}" + 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 + + echo "# The ${plugin} was uninstalled" +fi \ No newline at end of file From af3db7f534f8e6afcf4029a3df32e271be523dad Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 27 Sep 2021 11:12:06 +0100 Subject: [PATCH 1191/1295] add cl.check.sh #2433 --- home.admin/config.scripts/cl.check.sh | 40 +++++++++++++++++++ .../config.scripts/cl.install-service.sh | 14 +++++-- 2 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 home.admin/config.scripts/cl.check.sh diff --git a/home.admin/config.scripts/cl.check.sh b/home.admin/config.scripts/cl.check.sh new file mode 100644 index 000000000..2c9c97fed --- /dev/null +++ b/home.admin/config.scripts/cl.check.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# command info +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "-help" ]; then + echo "# script to check CL states" + echo "# cl.check.sh basic-setup" + echo "# cl.check.sh prestart [mainnet|testnet|signet]" + exit 1 +fi + +# load variables +source /mnt/hdd/raspiblitz.conf + +source <(/home/admin/config.scripts/network.aliases.sh getvars cl $2) + +###################################################################### +# PRESTART +# is executed by systemd cl services everytime before cl is started +# so it tries to make sure the config is in valid shape +###################################################################### + +if [ $(grep -c "^sparko" < ${CLCONF}) -gt 0 ];then + if [ ! -f /home/bitcoin/${netprefix}cl-plugins-enabled/sparko ]\ + || [ "$(eval echo \$${netprefix}sparko)" != "on" ]; 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 + fi +fi + +if [ $(grep -c "^feeadjuster" < ${CLCONF}) -gt 0 ];then + if [ ! -f /home/bitcoin/${netprefix}cl-plugins-enabled/feeadjuster.py ]\ + || [ "$(eval echo \$${netprefix}feeadjuster)" != "on" ]; 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 + fi +fi \ No newline at end of file diff --git a/home.admin/config.scripts/cl.install-service.sh b/home.admin/config.scripts/cl.install-service.sh index 75f2c8f85..8487a4edd 100644 --- a/home.admin/config.scripts/cl.install-service.sh +++ b/home.admin/config.scripts/cl.install-service.sh @@ -16,7 +16,14 @@ source <(/home/admin/config.scripts/network.aliases.sh getvars cl $1) if [ $(sudo -u bitcoin cat ${CLCONF} | grep -c "^sparko") -gt 0 ];then if [ ! -f /home/bitcoin/${netprefix}cl-plugins-enabled/sparko ];then echo "# The Sparko plugin is not present but in config" - /home/admin/config.scripts/cl-plugin.sparko.sh on $CHAIN + /home/admin/config.scripts/cl-plugin.sparko.sh on $CHAIN norestart + fi +fi + +if [ $(sudo -u bitcoin cat ${CLCONF} | grep -c "^feeadjuster") -gt 0 ];then + if [ ! -f /home/bitcoin/${netprefix}cl-plugins-enabled/feeadjuster.py ];then + echo "# The feeadjuster plugin is not present but in config" + /home/admin/config.scripts/cl-plugin.feeadjuster.sh on $CHAIN norestart fi fi @@ -41,11 +48,12 @@ echo " Description=c-lightning daemon on $CHAIN [Service] +ExecStartPre=-/home/admin/config.scripts/cl.check.sh prestart $CHAIN +ExecStart=/bin/sh -c '${passwordInput}/usr/local/bin/lightningd\ + --conf=${CLCONF} ${encryptedHSMoption}' User=bitcoin Group=bitcoin Type=simple -ExecStart=/bin/sh -c '${passwordInput}/usr/local/bin/lightningd\ - --conf=${CLCONF} ${encryptedHSMoption}' Restart=always TimeoutSec=120 RestartSec=30 From 09da8bdd26004470f1eba35a799f17430fc94b2c Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 27 Sep 2021 19:24:02 +0100 Subject: [PATCH 1192/1295] bootstrap: check for outdated variables and reboot related #2575 --- home.admin/_bootstrap.sh | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 165e46376..9b594355c 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -46,6 +46,32 @@ displayClass="lcd" displayType="" fundRecovery=0 +############################################## +# check raspiblitz.conf for outdated variables +############################################## + +# change all cln to cl +# https://github.com/rootzoll/raspiblitz/pull/2575#issuecomment-927261596 +if [ $(grep -c cln < /mnt/hdd/raspiblitz.conf) -gt 0 ];then + sudo sed -i 's/cln/cl/g' /mnt/hdd/raspiblitz.conf + sudo sed -i 's/cln/cl/g' _aliases + + sudo sed -i 's/cln/cl/g' /home/bitcoin/.lightning/config + sudo sed -i 's/cln/cl/g' /home/bitcoin/.lightning/testnet/config + sudo sed -i 's/cln/cl/g' /home/bitcoin/.lightning/signet/config + + sudo -u bitcoin mv /home/bitcoin/cln-plugins-available /home/bitcoin/cl-plugins-available + sudo -u bitcoin mv /home/bitcoin/cln-plugins-enabled /home/bitcoin/cl-plugins-enabled + sudo -u bitcoin mv /home/bitcoin/tcln-plugins-enabled /home/bitcoin/tcl-plugins-enabled + sudo -u bitcoin mv /home/bitcoin/scln-plugins-enabled /home/bitcoin/scl-plugins-enabled + + sudo sed -i 's/cln/cl/g' /etc/systemd/system/lightningd.service + sudo sed -i 's/cln/cl/g' /etc/systemd/system/tlightningd.service + sudo sed -i 's/cln/cl/g' /etc/systemd/system/slightningd.service + + sudo /home/admin/config.scripts/blitz.shutdown.sh reboot +fi + ################################ # INIT raspiblitz.info ################################ From 55390c9a537d7e20c5c1f9926834acaa587c6cf0 Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 27 Sep 2021 22:45:47 +0100 Subject: [PATCH 1193/1295] rtl: remove typos. Fixing: #2580 --- home.admin/config.scripts/bonus.rtl.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/home.admin/config.scripts/bonus.rtl.sh b/home.admin/config.scripts/bonus.rtl.sh index f607d3afd..243e831a2 100755 --- a/home.admin/config.scripts/bonus.rtl.sh +++ b/home.admin/config.scripts/bonus.rtl.sh @@ -216,9 +216,8 @@ WantedBy=multi-user.target sudo sed -i "s/^Wants=.*/Wants=${netprefix}lnd.service/g" /etc/systemd/system/${systemdService}.service sudo sed -i "s/^After=.*/After=${netprefix}lnd.service/g" /etc/systemd/system/${systemdService}.service fi -CL - # adapt systemd service template for CL - if [ "${LNTYPE}" == "cl" ]; thenCL + # adapt systemd service template for + if [ "${LNTYPE}" == "cl" ]; then echo "# modifying ${systemdService}.service for CL" 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 From 6b34ce9e3aa34078b82e26300e647c7babce49cd Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 27 Sep 2021 23:34:49 +0100 Subject: [PATCH 1194/1295] CL: add update options for C-lightning --- home.admin/99updateMenu.sh | 76 ++++++++++++++ home.admin/_provision_.sh | 18 ++++ home.admin/config.scripts/cl.install.sh | 17 +++- home.admin/config.scripts/cl.update.sh | 126 ++++++++++++++++++++++++ 4 files changed, 233 insertions(+), 4 deletions(-) create mode 100644 home.admin/config.scripts/cl.update.sh diff --git a/home.admin/99updateMenu.sh b/home.admin/99updateMenu.sh index 589a94460..296dddbae 100755 --- a/home.admin/99updateMenu.sh +++ b/home.admin/99updateMenu.sh @@ -287,6 +287,75 @@ Do you really want to update LND now? esac } +cl() +{ + + # get cl info + source <(sudo -u admin /home/admin/config.scripts/cl.update.sh info) + + # C-lightning Update Options + OPTIONS=() + if [ ${clUpdateInstalled} -eq 0 ]; then + OPTIONS+=(VERIFIED "Optional C-lightning update to ${clUpdateVersion}") + fi + OPTIONS+=(RECKLESS "Experimental C-lightning update to ${clLatestVersion}") + + CHOICE=$(whiptail --clear --title "Update C-lightning Options" --menu "" 9 60 2 "${OPTIONS[@]}" 2>&1 >/dev/tty) + + clear + case $CHOICE in + VERIFIED) + if [ ${clUpdateInstalled} -eq 1 ]; then + whiptail --title "ALREADY INSTALLED" --msgbox "The C-lightning version ${clUpdateVersion} is already installed." 8 30 + exit 0 + fi + whiptail --title "OPTIONAL C-lightning UPDATE" --yes-button "Cancel" --no-button "Update" --yesno "BEWARE on updating to C-lightning v${clUpdateVersion}: + +${clUpdateComment} + +Do you really want to update C-lightning now? + " 16 58 + if [ $? -eq 0 ]; then + echo "# cancel update" + exit 0 + fi + error="" + warn="" + source <(sudo -u admin /home/admin/config.scripts/cl.update.sh verified) + if [ ${#error} -gt 0 ]; then + whiptail --title "ERROR" --msgbox "${error}" 8 30 + else + echo "# C-lightning was updated successfully" + exit 0 + fi + ;; + RECKLESS) + whiptail --title "RECKLESS C-lightning UPDATE to ${clLatestVersion}" --yes-button "Cancel" --no-button "Update" --yesno "Using the 'RECKLESS' C-lightning update will simply +grab the latest C-lightning release published on the C-lightning GitHub page (also release candidates). + +There will be no security checks on signature, etc. + +This update mode is only recommended for testing and +development nodes with no serious funding. + +Do you really want to update C-lightning now? + " 16 58 + if [ $? -eq 0 ]; then + echo "# cancel update" + exit 0 + fi + error="" + source <(sudo -u admin /home/admin/config.scripts/cl.update.sh reckless) + if [ ${#error} -gt 0 ]; then + whiptail --title "ERROR" --msgbox "${error}" 8 30 + else + echo "# C-lightning was updated successfully" + exit 0 + fi + ;; + esac +} + bitcoinUpdate() { # get bitcoin info source <(sudo -u admin /home/admin/config.scripts/bitcoin.update.sh info) @@ -383,6 +452,10 @@ if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then OPTIONS+=(LND "Interim LND Update Options") fi +if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then + OPTIONS+=(CL "Interim C-lightning Update Options") +fi + if [ "${bos}" == "on" ]; then OPTIONS+=(BOS "Update Balance of Satoshis") fi @@ -433,6 +506,9 @@ case $CHOICE in LND) lnd ;; + CL) + cl + ;; BITCOIN) bitcoinUpdate ;; diff --git a/home.admin/_provision_.sh b/home.admin/_provision_.sh index 180010ffc..8a0f80d32 100755 --- a/home.admin/_provision_.sh +++ b/home.admin/_provision_.sh @@ -299,6 +299,24 @@ else echo "Provisioning LND interims update - keep default" >> ${logFile} fi +# CL INTERIMS UPDATE +if [ ${#clInterimsUpdate} -gt 0 ]; then + sudo sed -i "s/^message=.*/message='Provisioning CL update'/g" ${infoFile} + if [ "${clInterimsUpdate}" == "reckless" ]; then + # recklessly update CL to latest release on GitHub (just for test & dev nodes) + echo "Provisioning CL reckless interims update" >> ${logFile} + sudo /home/admin/config.scripts/cl.update.sh reckless >> ${logFile} + else + # 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 CL version is most more up to date + echo "Provisioning CL verified interims update" >> ${logFile} + sudo /home/admin/config.scripts/cl.update.sh verified ${clInterimsUpdate} >> ${logFile} + fi +else + echo "Provisioning CL interims update - keep default" >> ${logFile} +fi + # Bitcoin Testnet if [ "${testnet}" == "on" ]; then echo "Provisioning ${network} Testnet - run config script" >> ${logFile} diff --git a/home.admin/config.scripts/cl.install.sh b/home.admin/config.scripts/cl.install.sh index c95190db6..462ba4940 100644 --- a/home.admin/config.scripts/cl.install.sh +++ b/home.admin/config.scripts/cl.install.sh @@ -32,7 +32,11 @@ fi # Tor TORGROUP="debian-tor" -source <(/home/admin/config.scripts/network.aliases.sh getvars cl $2) +if [ "$1" = update ]||[ "$1" = testPR ];then + source <(/home/admin/config.scripts/network.aliases.sh getvars cl mainnet) +else + source <(/home/admin/config.scripts/network.aliases.sh getvars cl $2) +fi echo "# Running: 'cl.install.sh $*'" echo "# Using the settings for: ${network} ${CHAIN}" @@ -47,7 +51,7 @@ if ! grep -Eq "^${netprefix}cl=" /mnt/hdd/raspiblitz.conf; then fi source /mnt/hdd/raspiblitz.conf -if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = experimental ]||[ "$1" = testPR ];then +if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = testPR ];then if [ "${CHAIN}" == "testnet" ] && [ "${testnet}" != "on" ]; then echo "# before activating testnet on cl, first activate testnet on bitcoind" @@ -61,12 +65,13 @@ if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = experimental ]||[ "$1" = testPR ]; exit 1 fi - if [ ! -f /usr/local/bin/lightningd ]||[ "$1" = update ]||[ "$1" = testPR ];then + if [ ! -f /usr/local/bin/lightningd ]||[ "$1" = "update" ]||[ "$1" = "testPR" ];then ######################## # Install dependencies # ######################## - + + # https://lightning.readthedocs.io/INSTALL.html#to-build-on-ubuntu echo "# apt update" echo sudo apt-get update @@ -116,6 +121,10 @@ if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = experimental ]||[ "$1" = testPR ]; sudo -u bitcoin git reset --hard $CLVERSION fi + echo "Installing additional dependencies" + sudo apt-get install -y valgrind python3-pip libpq-dev + sudo pip3 install -r requirements.txt + echo "# Building with EXPERIMENTAL_FEATURES enabled" echo sudo -u bitcoin ./configure --enable-experimental-features diff --git a/home.admin/config.scripts/cl.update.sh b/home.admin/config.scripts/cl.update.sh new file mode 100644 index 000000000..9643339a4 --- /dev/null +++ b/home.admin/config.scripts/cl.update.sh @@ -0,0 +1,126 @@ +#!/bin/bash + +# command info +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then + echo "Interim optional C-lightning updates between RaspiBlitz releases." + echo "cl.update.sh [info|verified|reckless]" + echo "info -> get actual state and possible actions" + echo "verified -> only do recommended updates by RaspiBlitz team" + echo " binary will be checked by signature and checksum" + echo "reckless -> if you just want to update to the latest release" + echo " published on C-lightning GitHub releases (RC or final) without any" + echo " testing or security checks." + exit 1 +fi + +# 1. parameter [info|verified|reckless] +mode="$1" + +# RECOMMENDED UPDATE BY RASPIBLITZ TEAM +# comment will be shown as "BEWARE Info" when option is choosen (can be multiple lines) +clUpdateVersion="v0.10.1" # example: v0.10.1 .. keep empty if no newer version as sd card build is available +clUpdateComment="Please keep in mind that downgrading afterwards is not tested. Also not all additional apps are fully tested with the this update - but it looked good on first tests." + +# GATHER DATA + +# installed C-lightning version +clInstalledVersion=$(sudo -u bitcoin lightning-cli --version) +clInstalledVersionMajor=$(echo "${clInstalledVersion}" | cut -d "-" -f1 | cut -d "." -f1) +clInstalledVersionMain=$(echo "${clInstalledVersion}" | cut -d "-" -f1 | cut -d "." -f2) +clInstalledVersionMinor=$(echo "${clInstalledVersion}" | cut -d "-" -f1 | cut -d "." -f3) + +# test if the installed version already the verified/recommended update version +clUpdateInstalled=$(echo "${clInstalledVersion}" | grep -c "${clUpdateVersion}") + +# get latest release from C-lightning GitHub releases +gitHubLatestReleaseJSON="$(curl -s https://api.github.com/repos/ElementsProject/lightning/releases | jq '.[0]')" +clLatestVersion=$(echo "${gitHubLatestReleaseJSON}" | jq -r '.tag_name') + +# INFO +if [ "${mode}" = "info" ]; then + + echo "# basic data" + echo "clInstalledVersion='${clInstalledVersion}'" + echo "clInstalledVersionMajor='${clInstalledVersionMajor}'" + echo "clInstalledVersionMain='${clInstalledVersionMain}'" + echo "clInstalledVersionMinor='${clInstalledVersionMinor}'" + + echo "# the verified/recommended update option" + echo "clUpdateInstalled='${clUpdateInstalled}'" + echo "clUpdateVersion='${clUpdateVersion}'" + echo "clUpdateComment='${clUpdateComment}'" + + echo "# reckless update option (latest C-lightning release from GitHub)" + echo "clLatestVersion='${clLatestVersion}'" + + exit 1 +fi + +# verified +if [ "${mode}" = "verified" ]; then + + echo "# cl.update.sh verified" + + # check for optional second parameter: forced update version + # --> only does the verified update if its the given version + # this is needed for recovery/update. + fixedUpdateVersion="$2" + if [ ${#fixedUpdateVersion} -gt 0 ]; then + echo "# checking for fixed version update: askedFor(${fixedUpdateVersion}) available(${clUpdateVersion})" + if [ "${fixedUpdateVersion}" != "${clUpdateVersion}" ]; then + echo "warn='required update version does not match'" + echo "# this is normal when the recovery script of a new RaspiBlitz version checks for an old update - just ignore" + sed -i '/^clInterimsUpdate=*/d' /mnt/hdd/raspiblitz.conf + exit 1 + else + echo "# OK - update version is matching" + fi + fi + + + if [ ${#clUpdateVersion} -gt 0 ];then + /home/admin/config.scripts/cl.install.sh update ${clUpdateVersion} + else + /home/admin/config.scripts/cl.install.sh on + fi + + # note: install will be done the same as reckless further down + clInterimsUpdateNew="${clUpdateVersion}" + +fi + +# RECKLESS +# this mode is just for people running test and development nodes - its not recommended +# for production nodes. In a update/recovery scenario it will not install a fixed version +# it will always pick the latest release from the github +if [ "${mode}" = "reckless" ]; then + + echo "# cl.update.sh reckless" + + /home/admin/config.scripts/cl.install.sh update ${clLatestVersion} + + # prepare install + clInterimsUpdateNew="reckless" +fi + +# JOINED INSTALL (verified & RECKLESS) +if [ "${mode}" = "verified" ] || [ "${mode}" = "reckless" ]; then + + echo "# flag update in raspiblitz config" + source /mnt/hdd/raspiblitz.conf + if [ ${#clInterimsUpdate} -eq 0 ]; then + echo "clInterimsUpdate='${clInterimsUpdateNew}'" >> /mnt/hdd/raspiblitz.conf + else + sudo sed -i "s/^clInterimsUpdate=.*/clInterimsUpdate='${clInterimsUpdateNew}'/g" /mnt/hdd/raspiblitz.conf + fi + + echo "# OK C-lightning is installed" + echo "# NOTE: RaspiBlitz may need to reboot now" + exit 1 + +else + + echo "error='parameter not known'" + exit 1 + +fi From ce6af54dc7a41d405bfe3c540de928df1d28b1c7 Mon Sep 17 00:00:00 2001 From: openoms Date: Tue, 28 Sep 2021 10:40:00 +0100 Subject: [PATCH 1195/1295] cl.install: git reset when version is given --- home.admin/config.scripts/cl.install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/config.scripts/cl.install.sh b/home.admin/config.scripts/cl.install.sh index 462ba4940..103db9e29 100644 --- a/home.admin/config.scripts/cl.install.sh +++ b/home.admin/config.scripts/cl.install.sh @@ -104,6 +104,7 @@ if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = testPR ];then if [ $# -gt 1 ];then CLVERSION=$2 echo "# Installing the version $CLVERSION" + sudo -u bitcoin git reset --hard $CLVERSION else echo "# Updating to the latest commit in:" echo "# https://github.com/ElementsProject/lightning" From 0d7ac3168ad0cc44c774675e17c613b6e3a45d36 Mon Sep 17 00:00:00 2001 From: openoms Date: Tue, 28 Sep 2021 10:41:33 +0100 Subject: [PATCH 1196/1295] suez update to latest master --- home.admin/config.scripts/bonus.suez.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/home.admin/config.scripts/bonus.suez.sh b/home.admin/config.scripts/bonus.suez.sh index c12259273..8b82594c6 100644 --- a/home.admin/config.scripts/bonus.suez.sh +++ b/home.admin/config.scripts/bonus.suez.sh @@ -1,7 +1,7 @@ #!/bin/bash # https://github.com/prusnak/suez/commits/master -SUEZVERSION="bbf366572ad6dc2d8644de85c0946c7fc386d141" +SUEZVERSION="c19cedb715317a843d09a1347dcfaef4013f589b" # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then @@ -85,7 +85,8 @@ if [ "$1" = "update" ]; then | sudo -u bitcoin python - # download source code sudo -u bitcoin git clone https://github.com/prusnak/suez.git - cd suez || exit 1 + cd suez || exit 1 + sudo -u bitcoin git pull sudo -u bitcoin /home/bitcoin/.local/bin/poetry install echo "# Updated to the latest in https://github.com/prusnak/suez/commits/master" exit 0 From d5a7afc9685aa48c944927fdfbb94ff6dc6b25ce Mon Sep 17 00:00:00 2001 From: openoms Date: Tue, 28 Sep 2021 17:15:42 +0100 Subject: [PATCH 1197/1295] tor: reload instead of restart --- home.admin/99connectMenu.sh | 10 +++++----- home.admin/99systemMenu.sh | 6 +++--- home.admin/config.scripts/bonus.joinmarket.sh | 4 ++-- home.admin/config.scripts/internet.hiddenservice.sh | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/home.admin/99connectMenu.sh b/home.admin/99connectMenu.sh index 4ae8b74ce..cce5fe81b 100644 --- a/home.admin/99connectMenu.sh +++ b/home.admin/99connectMenu.sh @@ -76,7 +76,7 @@ case $CHOICE in if [ $(grep -c "peerbloomfilters=1" < /mnt/hdd/bitcoin/bitcoin.conf) -gt 0 ]&&\ [ $(grep -c Bisq < /etc/tor/torrc) -gt 0 ];then OPTIONS+=(SHOWBISQ "Show the Hidden Service to connect Bisq") - OPTIONS+=(REMOVEBISQ "Remove the Hidden Service for bisq") + OPTIONS+=(REMOVEBISQ "Remove the Hidden Service for Bisq") fi CHOICE=$(dialog --clear \ --backtitle "" \ @@ -103,12 +103,12 @@ case $CHOICE in if [ $(grep -c Bisq < /etc/tor/torrc) -eq 0 ];then echo "# Creating the Hidden Service for Bisq" echo " -# Hidden Service for Bisq (bitcoin RPC v3) +# Hidden Service for Bisq (bitcoin P2P v3) HiddenServiceDir /mnt/hdd/tor/bisq HiddenServiceVersion 3 HiddenServicePort 8333 127.0.0.1:8333" | sudo tee -a /etc/tor/torrc - echo "# Restarting Tor" - sudo systemctl restart tor + echo "# Reloading Tor" + sudo systemctl reload tor@default sleep 10 TOR_ADDRESS=$(sudo cat /mnt/hdd/tor/bisq/hostname) if [ -z "$TOR_ADDRESS" ]; then @@ -135,7 +135,7 @@ HiddenServicePort 8333 127.0.0.1:8333" | sudo tee -a /etc/tor/torrc REMOVEBISQ) sudo sed -i '/Bisq/{N;N;N;d}' /etc/tor/torrc echo "# Restarting Tor" - sudo systemctl restart tor;; + sudo systemctl reload tor@default;; SHOWBISQ) clear TOR_ADDRESS=$(sudo cat /mnt/hdd/tor/bisq/hostname) diff --git a/home.admin/99systemMenu.sh b/home.admin/99systemMenu.sh index 8e6479b20..62a272f16 100644 --- a/home.admin/99systemMenu.sh +++ b/home.admin/99systemMenu.sh @@ -143,12 +143,12 @@ case $CHOICE in if /home/admin/config.scripts/blitz.setconf.sh "/etc/tor/torrc" "debian-tor" then whiptail \ - --title "Restart" --yes-button "Restart" --no-button "Not now" \ - --yesno "To apply the new settings Tor needs to restart. + --title "Reload" --yes-button "Reload" --no-button "Not now" \ + --yesno "To apply the new settings need to reload Tor. Do you want to restart Tor now?" 10 55 if [ $? -eq 0 ]; then echo "# Restarting tor" - sudo systemctl restart tor@default + sudo systemctl reload tor@default else echo "# Continue without restarting." fi diff --git a/home.admin/config.scripts/bonus.joinmarket.sh b/home.admin/config.scripts/bonus.joinmarket.sh index 70a45fc53..7970a2929 100755 --- a/home.admin/config.scripts/bonus.joinmarket.sh +++ b/home.admin/config.scripts/bonus.joinmarket.sh @@ -146,11 +146,11 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then sudo sed -i "s:^CookieAuthFile*:#CookieAuthFile:g" /etc/tor/torrc if ! grep -Eq "^CookieAuthentication 1" /etc/tor/torrc; then echo "CookieAuthentication 1" | sudo tee -a /etc/tor/torrc - sudo systemctl restart tor@default + sudo systemctl reload tor@default fi if ! grep -Eq "^AllowOutboundLocalhost 1" /etc/tor/torsocks.conf; then echo "AllowOutboundLocalhost 1" | sudo tee -a /etc/tor/torsocks.conf - sudo systemctl restart tor@default + sudo systemctl reload tor@default fi # joinin.conf settings diff --git a/home.admin/config.scripts/internet.hiddenservice.sh b/home.admin/config.scripts/internet.hiddenservice.sh index 13971cd20..5cc4c11af 100755 --- a/home.admin/config.scripts/internet.hiddenservice.sh +++ b/home.admin/config.scripts/internet.hiddenservice.sh @@ -96,7 +96,7 @@ HiddenServicePort $toPort 127.0.0.1:$fromPort" | sudo tee -a /etc/tor/torrc fi fi - # restart tor + # reload tor echo echo "Reloading Tor to activate the Hidden Service..." sudo chmod 644 /etc/tor/torrc From 8f8353383bfc3c79f7a5522a1d8a8fea3ad0b539 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 28 Sep 2021 21:17:04 +0200 Subject: [PATCH 1198/1295] parted -a optimal for EXT4 --- home.admin/config.scripts/blitz.datadrive.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index 0b5dd3805..5980b6c60 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -580,7 +580,7 @@ if [ "$1" = "format" ]; then echo "error='partition cleaning failed'" exit 1 fi - sudo parted -s /dev/${hdd} mklabel gpt 1>/dev/null 1>&2 + sudo parted -s -a optimal -- /dev/${hdd} mklabel gpt 1>/dev/null 1>&2 sleep 2 sync fi From cf3962c1ad3110052e1932b9c7fde53487b23c23 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 29 Sep 2021 11:54:01 +0200 Subject: [PATCH 1199/1295] parted -a optimal --- home.admin/config.scripts/blitz.datadrive.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index 5980b6c60..938340818 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -82,12 +82,12 @@ if [ "$1" = "status" ]; then # will then be used to offer formatting and permanent mounting hdd="" sizeDataPartition=0 - OSPartition=$(sudo df /usr | grep dev | cut -d " " -f 1 | sed "s#/dev/##g") + OSPartition=$(sudo df /usr 2>/dev/null | grep dev | cut -d " " -f 1 | sed "s#/dev/##g") # detect boot partition on UEFI systems - bootPartition=$(sudo df /boot/efi | grep dev | cut -d " " -f 1 | sed "s#/dev/##g") + bootPartition=$(sudo df /boot/efi 2>/dev/null | grep dev | cut -d " " -f 1 | sed "s#/dev/##g") if [ ${#bootPartition} -eq 0 ]; then # for non UEFI - bootPartition=$(sudo df /boot | grep dev | cut -d " " -f 1 | sed "s#/dev/##g") + bootPartition=$(sudo df /boot 2>/dev/null | grep dev | cut -d " " -f 1 | sed "s#/dev/##g") fi lsblk -o NAME,SIZE -b | grep -P "[s|vn][dv][a-z][0-9]?" > .lsblk.tmp while read line; do @@ -595,7 +595,7 @@ if [ "$1" = "format" ]; then if [ $ext4IsPartition -eq 0 ]; then # write new EXT4 partition >&2 echo "# Creating the one big partition" - sudo parted /dev/${hdd} mkpart primary ext4 0% 100% 1>&2 + sudo parted -a optimal /dev/${hdd} mkpart primary ext4 0% 100% 1>&2 sleep 6 sync # loop until the partition gets available From 48a5588cb5b2458b8afb091b53356fb496a2d1ff Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 29 Sep 2021 13:07:24 +0200 Subject: [PATCH 1200/1295] react to error --- home.admin/00raspiblitz.sh | 23 +++++++++++++++++------ home.admin/_bootstrap.sh | 11 +++++++++-- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index dddf97e07..074d07c21 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -242,18 +242,29 @@ do echo "***********************************************************" exit 1 fi - +error # for all critical errors (admin info & exit) - if [ "${state}" == "errorHDD" ]; then - echo "***********************************************************" - echo "SETUP ERROR - please report to development team" - echo "***********************************************************" - echo "state(${state}) message(${message})" + if [ "${state}" == "error" ] || [ "${state}" == "errorHDD" ]; then + clear + echo "###########################################################" + echo "# /home/admin/raspiblitz.log" + cat /home/admin/raspiblitz.log if [ "${state}" == "errorHDD" ]; then + # print some debug detail info on HDD/SSD error + echo "###########################################################" + echo "# blitz.datadrive.sh status" + sudo /home/admin/config.scripts/blitz.datadrive.sh status + fi + if [ "${message}" == "_provision.setup.sh fail" ]; then # print some debug detail info on HDD/SSD error echo "# blitz.datadrive.sh status" sudo /home/admin/config.scripts/blitz.datadrive.sh status fi + echo "***********************************************************" + echo "ERROR - please report to development team" + echo "***********************************************************" + echo "state(${state}) message(${message})" + echo "https://github.com/rootzoll/raspiblitz#support" echo "command to shutdown --> off" exit 1 else diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 9b594355c..5682e1a98 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -543,8 +543,8 @@ if [ ${isMounted} -eq 0 ]; then echo "the provision process was started but did not finish yet" > /home/admin/provision.flag # make HDD is still temp mounted + source <(/home/admin/config.scripts/blitz.datadrive.sh status) echo "Temp mounting (2) data drive ($hddCandidate)" >> $logFile - source <(/home/admin/config.scripts/internet.sh status) if [ "${hddFormat}" != "btrfs" ]; then source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddPartitionCandidate}) else @@ -552,6 +552,13 @@ if [ ${isMounted} -eq 0 ]; then fi echo "Temp mounting (2) result: ${isMounted}" >> $logFile + # check that HDD was temp mounted + if [ "${isMounted}" != "1"]; then + sed -i "s/^state=.*/state=errorHDD/g" ${infoFile} + sed -i "s/^message=.*/message='Was not able to mount HDD (2)'/g" ${infoFile} + exit 1 + fi + # make sure all links between directories/drives are correct echo "Refreshing links between directories/drives .." >> $logFile sudo /home/admin/config.scripts/blitz.datadrive.sh link @@ -572,7 +579,7 @@ if [ ${isMounted} -eq 0 ]; then cat ${configFile} >> ${logFile} echo "# Sourcing ${setupFile} " >> ${logFile} source ${setupFile} - cat ${setupFile} >> ${logFile} + sed -e '/^password/d' ${setupFile} >> ${logFile} # make sure basic info is in raspiblitz.info echo "# Update ${infoFile} " >> ${logFile} From 54c6bd3304812986e7efa136c734d4c240745676 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 29 Sep 2021 14:01:23 +0200 Subject: [PATCH 1201/1295] remove text --- home.admin/00raspiblitz.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 074d07c21..1878a3c98 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -242,7 +242,7 @@ do echo "***********************************************************" exit 1 fi -error + # for all critical errors (admin info & exit) if [ "${state}" == "error" ] || [ "${state}" == "errorHDD" ]; then clear From b6d73d6cb5db93f30f82386fd4195b03c29f40d3 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 29 Sep 2021 14:11:50 +0200 Subject: [PATCH 1202/1295] fix syntax errors --- home.admin/_bootstrap.sh | 2 +- home.admin/_provision_.sh | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 5682e1a98..2dd8fed05 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -653,7 +653,7 @@ if [ ${isMounted} -eq 0 ]; then # finalize provisioning echo "Calling _bootstrap.provision.sh for general system provisioning (${setupPhase}) .." >> $logFile sed -i "s/^message=.*/message='Provision Basics'/g" ${infoFile} - sudo /home/admin/_provision_.sh + /home/admin/_provision_.sh errorState=$? if [ "$errorState" != "0" ]; then echo "EXIT _provision_.sh BECAUSE OF ERROR STATE ($errorState)" >> $logFile diff --git a/home.admin/_provision_.sh b/home.admin/_provision_.sh index 8a0f80d32..1880e80e2 100755 --- a/home.admin/_provision_.sh +++ b/home.admin/_provision_.sh @@ -350,7 +350,7 @@ if [ "${tlnd}" == "on" ]; then sudo systemctl start tlnd >> ${logFile} 2>&1 else echo "Provisioning LND Testnet - not active" >> ${logFile} -fiCL +fi # LND SignetCL if [ "${slnd}" == "on" ]; then @@ -358,17 +358,17 @@ if [ "${slnd}" == "on" ]; then sudo /home/admin/coCLg.scripts/lnd.install.sh on signet >> ${logFile} 2>&1 sudo systemctl start slnd >> ${logFile} 2>&1 else - CLcho "Provisioning LND Signet - not active" >> ${logFile} + echo "Provisioning LND Signet - not active" >> ${logFile} fi -CL + # CL Mainnet (when not main instance) if [ "${cl}" == "on" ] && [ "${lightning}" != "cl" ]; then echo "Provisioning CL Mainnet - run config script" >> ${logFile} sudo /home/admin/config.scripts/cl.install.sh on mainnet >> ${logFile} 2>&1 else - CLcho "Provisioning CL Mainnet - not active as secondary option" >> ${logFile} + echo "Provisioning CL Mainnet - not active as secondary option" >> ${logFile} fi -CL + # CL Testnet if [ "${tcl}" == "on" ]; then echo "Provisioning CL Testnet - run config script" >> ${logFile} @@ -828,3 +828,4 @@ echo "DONE - Give raspi some cool off time after hard building .... 5 secs sleep sleep 5 echo "END Provisioning" >> ${logFile} +exit 0 From d66cb69d721df1b93e1c2a106cc80ce0a82d5708 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 29 Sep 2021 14:12:04 +0200 Subject: [PATCH 1203/1295] fix error state --- home.admin/_bootstrap.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 2dd8fed05..18d784b08 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -606,7 +606,7 @@ if [ ${isMounted} -eq 0 ]; then if [ "${setupPhase}" == "setup" ]; then echo "Calling _provision.setup.sh for basic setup tasks .." >> $logFile sed -i "s/^message=.*/message='Provision Setup'/g" ${infoFile} - sudo /home/admin/_provision.setup.sh + /home/admin/_provision.setup.sh errorState=$? sudo cat /home/admin/raspiblitz.provision-setup.log if [ "$errorState" != "0" ]; then @@ -622,9 +622,9 @@ if [ ${isMounted} -eq 0 ]; then if [ "${setupPhase}" == "migration" ]; then echo "Calling _provision.migration.sh for possible migrations .." >> $logFile sed -i "s/^message=.*/message='Provision migration'/g" ${infoFile} - sudo /home/admin/_provision.migration.sh + /home/admin/_provision.migration.sh errorState=$? - sudo cat /home/admin/raspiblitz.provision-migration.log + 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 @@ -638,9 +638,9 @@ if [ ${isMounted} -eq 0 ]; then if [ "${setupPhase}" == "update" ] || [ "${setupPhase}" == "recovery" ] || [ "${setupPhase}" == "migration" ]; then echo "Calling _provision.update.sh .." >> $logFile sed -i "s/^message=.*/message='Provision Update/Recovery/Migration'/g" ${infoFile} - sudo /home/admin/_provision.update.sh + /home/admin/_provision.update.sh errorState=$? - sudo cat /home/admin/raspiblitz.provision-update.log + 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 From 06d0e05c2018ec6d9367122741959f6c5f7f0836 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 29 Sep 2021 15:28:52 +0200 Subject: [PATCH 1204/1295] fix syntax error from CL change --- home.admin/_provision_.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_provision_.sh b/home.admin/_provision_.sh index 1880e80e2..a0688ba85 100755 --- a/home.admin/_provision_.sh +++ b/home.admin/_provision_.sh @@ -428,7 +428,7 @@ if [ "${#dynDomain}" -gt 0 ]; then sudo /home/admin/config.scripts/internet.dyndomain.sh on ${dynDomain} ${dynUpdateUrl} >> ${logFile} 2>&1 else echo "Provisioning DYNAMIC DOMAIN - keep default" >> ${logFile} -fiCL +fi # RTL (LND)CL if [ "${rtlWebinterface}" = "on" ]; then From 85daa3e92fdf8f8e1e6a99ca8e654d7cafd2f397 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 29 Sep 2021 16:18:30 +0200 Subject: [PATCH 1205/1295] reboot info --- home.admin/00raspiblitz.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 1878a3c98..2bb074678 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -177,6 +177,7 @@ do # exit loop/script in case if system shutting down if [ "${state}" == "reboot" ] || [ "${state}" == "shutdown" ]; then + dialog --pause " Prepare Reboot ..." 8 58 6 clear echo "***********************************************************" echo "RaspiBlitz going to ${state}" @@ -187,6 +188,7 @@ do fi echo "SSH again into system with:" echo "ssh admin@${localip}" + echo "Use your password A" echo "***********************************************************" fi exit 0 From 03b9da27c4781573a6f0af1a133ac4967905d8ee Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 29 Sep 2021 23:34:34 +0200 Subject: [PATCH 1206/1295] cat raspiblitz.provision-setup.log on setup error --- home.admin/00raspiblitz.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 2bb074678..1594dfe85 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -258,9 +258,8 @@ do sudo /home/admin/config.scripts/blitz.datadrive.sh status fi if [ "${message}" == "_provision.setup.sh fail" ]; then - # print some debug detail info on HDD/SSD error - echo "# blitz.datadrive.sh status" - sudo /home/admin/config.scripts/blitz.datadrive.sh status + echo "# /home/admin/raspiblitz.provision-setup.log" + cat /home/admin/raspiblitz.provision-setup.log fi echo "***********************************************************" echo "ERROR - please report to development team" From a0e24d0e9324681eaaf915c91da7d3a9601fd7d1 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 30 Sep 2021 10:52:20 +0200 Subject: [PATCH 1207/1295] remove -a optimal from parted for now --- home.admin/config.scripts/blitz.datadrive.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index 938340818..10dd84b42 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -580,7 +580,7 @@ if [ "$1" = "format" ]; then echo "error='partition cleaning failed'" exit 1 fi - sudo parted -s -a optimal -- /dev/${hdd} mklabel gpt 1>/dev/null 1>&2 + sudo parted -s /dev/${hdd} mklabel gpt 1>/dev/null 1>&2 sleep 2 sync fi @@ -595,7 +595,7 @@ if [ "$1" = "format" ]; then if [ $ext4IsPartition -eq 0 ]; then # write new EXT4 partition >&2 echo "# Creating the one big partition" - sudo parted -a optimal /dev/${hdd} mkpart primary ext4 0% 100% 1>&2 + sudo parted /dev/${hdd} mkpart primary ext4 0% 100% 1>&2 sleep 6 sync # loop until the partition gets available From 8a0d6b5c2aeef02ef5384fb372c2b02ec65d653c Mon Sep 17 00:00:00 2001 From: openoms Date: Thu, 30 Sep 2021 09:56:52 +0100 Subject: [PATCH 1208/1295] provision: fix CL entries --- home.admin/_provision_.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/home.admin/_provision_.sh b/home.admin/_provision_.sh index a0688ba85..7626f6bed 100755 --- a/home.admin/_provision_.sh +++ b/home.admin/_provision_.sh @@ -352,10 +352,10 @@ else echo "Provisioning LND Testnet - not active" >> ${logFile} fi -# LND SignetCL +# LND Signet if [ "${slnd}" == "on" ]; then echo "Provisioning LND Signet - run config script" >> ${logFile} - sudo /home/admin/coCLg.scripts/lnd.install.sh on signet >> ${logFile} 2>&1 + sudo /home/admin/config.scripts/lnd.install.sh on signet >> ${logFile} 2>&1 sudo systemctl start slnd >> ${logFile} 2>&1 else echo "Provisioning LND Signet - not active" >> ${logFile} @@ -430,11 +430,11 @@ else echo "Provisioning DYNAMIC DOMAIN - keep default" >> ${logFile} fi -# RTL (LND)CL +# 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} - sudo -u admin /home/admCLconfig.scripts/bonus.rtl.sh on lnd mainnet >> ${logFile} 2>&1 + sudo -u admin /home/admin/config.scripts/bonus.rtl.sh on lnd mainnet >> ${logFile} 2>&1 else echo "Provisioning RTL LND - keep default" >> ${logFile} fi @@ -443,7 +443,7 @@ fi if [ "${crtlWebinterface}" = "on" ]; then echo "Provisioning RTL CL - run config script" >> ${logFile} sudo sed -i "s/^message=.*/message='Setup RTL (takes time)'/g" ${infoFile} - sudo -u admin /home/admCLconfig.scripts/bonus.rtl.sh on cl mainnet >> ${logFile} 2>&1 + sudo -u admin /home/admin/config.scripts/bonus.rtl.sh on cl mainnet >> ${logFile} 2>&1 else echo "Provisioning RTL CL - keep default" >> ${logFile} fi From 9e753af79300303ffef9bdc848a75fc746277662 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 30 Sep 2021 11:17:58 +0200 Subject: [PATCH 1209/1295] change time of prepare reboot info --- README.md | 84 ++++++++++++------ home.admin/00raspiblitz.sh | 2 +- .../assets/RaspiBlitzRecoverySheet.docx | Bin 43770 -> 21145 bytes home.admin/assets/RaspiBlitzRecoverySheet.pdf | Bin 236691 -> 54807 bytes home.admin/config.scripts/blitz.shutdown.sh | 1 + pictures/lcd0-welcome.png | Bin 17781 -> 11272 bytes pictures/ssh0-askchain.png | Bin 0 -> 24685 bytes pictures/ssh0-formathdd.png | Bin 0 -> 20121 bytes pictures/ssh0-welcome2.png | Bin 25444 -> 22888 bytes pictures/ssh1-layer1.png | Bin 0 -> 19910 bytes pictures/ssh1-layer2.png | Bin 0 -> 19692 bytes pictures/ssh1-name.png | Bin 17748 -> 11367 bytes pictures/ssh1-oldnew.png | Bin 0 -> 16917 bytes pictures/ssh2-passwords.png | Bin 32385 -> 27326 bytes pictures/ssh4-scripts.png | Bin 29846 -> 10106 bytes 15 files changed, 61 insertions(+), 26 deletions(-) create mode 100644 pictures/ssh0-askchain.png create mode 100644 pictures/ssh0-formathdd.png create mode 100644 pictures/ssh1-layer1.png create mode 100644 pictures/ssh1-layer2.png create mode 100644 pictures/ssh1-oldnew.png diff --git a/README.md b/README.md index f698fecec..5f453aa93 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@ ![RaspiBlitz](pictures/raspilogo_tile_400px.png) -*Build your own Lightning Node on a RaspberryPi with a nice Display.* +*Build your own Lightning & Bitcoin Fullnode on a RaspberryPi with a nice Display.* -`Version 1.7.1rc2 with lnd 0.13.1 (or c-lightning 0.10.0) and bitcoin 22.0.0 (or litecoin 0.18.1)` +`Version 1.7.1rc2 with lnd 0.13.1 & c-lightning 0.10.0 and bitcoin 22.0.0 (or litecoin 0.18.1)` ![RaspiBlitz](pictures/raspiblitz.jpg) -**The RaspiBlitz is a do-it-yourself Lightning Node based on LND running together with a Bitcoin-Fullnode on a RaspberryPi (1TB SSD) and a nice display for easy setup & monitoring.** +**The RaspiBlitz is a do-it-yourself Lightning Node (LND and/or c-lightning) running together with a Bitcoin-Fullnode on a RaspberryPi (1TB SSD) and a nice display for easy setup & monitoring.** RaspiBlitz is mainly targeted for learning how to run your own node decentralized from home - because: Not your Node, Not your Rules. Discover & develop the growing ecosystem of the Lightning Network by becoming a full part of it. Build it as part of a [workshop](WORKSHOP.md) or as a weekend project yourself. @@ -32,6 +32,9 @@ There are further Services that can be switched on: * **Sphinx Chat Relay Server** [details](https://github.com/stakwork/sphinx-relay/blob/master/README.md) * **Telegraf metrics** [details](https://github.com/rootzoll/raspiblitz/issues/1369) * **Chantools** (Fund Rescue) [details](https://github.com/guggero/chantools/blob/master/README.md) +* **Suez** (Channel Visualization for LND & CL) [details](https://github.com/prusnak/suez#suez) +* **CL plugin: Sparko** (WalletUI & HTTP-RPC bridge) [details](https://github.com/fiatjaf/sparko#the-sparko-plugin) +* **CL plugin: CLBOSS** (Automated Node Manager) [details](https://github.com/ZmnSCPxj/clboss#clboss-the-c-lightning-node-manager) You can connect the following Wallet-Apps to your RaspiBlitz: @@ -40,7 +43,7 @@ You can connect the following Wallet-Apps to your RaspiBlitz: * **SendMany** (Android) [details](https://github.com/fusion44/sendmany/blob/master/README.md) * **Sphinx Chat App** (Android & iOS) [details](https://sphinx.chat) -Also many more features like Touchscreen, Channels Autopilot, DynDNS, SSH-Tunneling, UPS Support, ... +Also many more features like Touchscreen, Channels Autopilot, Backup, DynDNS, SSH-Tunneling, UPS Support, ... ## DeepDive Video (July 2020) @@ -48,7 +51,7 @@ Also many more features like Touchscreen, Channels Autopilot, DynDNS, SSH-Tunnel ## Time Estimate to Set Up a RaspiBlitz -The RaspiBlitz is optimized for being setup during a workshop at a hackday or conference (see [detailed workshop tutorial](WORKSHOP.md)). When it comes fully assembled with an up-to-date synced blockchain, it's possible to have it ready in about 2 to 3 hours - most of it is waiting time. +The RaspiBlitz is optimized for being setup during a workshop at a hackday or conference (see [detailed workshop tutorial](WORKSHOP.md)). When it comes fully assembled with an up-to-date synced blockchain, it's possible to have it ready in about 2 to 3 hours. If you start at home ordering the parts from Amazon (see shopping list below) then it's a weekend project with a lot of downloading and syncing time where you can do other stuff while checking on the progress from time to time. @@ -60,9 +63,9 @@ All parts together cost around 180-250 USD - based on shops and location. ### Buy a ready-2-go RaspiBlitz (Germany, EU and International) -If you like to support the RaspiBlitz project you can order a ready-2-go RaspiBlitz or an all-you-need-hardware set for yourself or for your RaspiBlitz workshop from [raspiblitz.com](https://raspiblitz.com) +If you like to support the RaspiBlitz project you can order a plug&play RaspiBlitz from [raspiblitz.com](https://raspiblitz.com) -Find a list of other shops selling a Ready-2-Go RaspiBlitz in your area on [raspiblitz.org](https://raspiblitz.org/). +Find a list of other shops selling a plug&play RaspiBlitz in your area on [raspiblitz.org](https://raspiblitz.org). ### Amazon Shopping List (buy parts & build it yourself) @@ -148,7 +151,7 @@ Insert the SD card and connect the power plug. * [Can I directly connect the RaspiBlitz with my laptop?](FAQ.md#can-i-directly-connect-the-raspiblitz-to-my-laptop) * [I connected my HDD, but it still says 'Connect HDD' on the display?](FAQ.md#i-connected-my-hdd-but-it-still-says-connect-hdd-on-the-display) -When everything boots up correctly, you should see the local IP address of your RaspiBlitz on the LCD panel. +When everything boots up correctly (one reboot is normal), you should finally see the local IP address of your RaspiBlitz on the LCD panel. - [How do I find the IP address when running without a display?](FAQ.md#how-do-i-find-the-ip-address-when-running-without-a-display) @@ -158,7 +161,9 @@ Now open up a terminal ([OSX](https://www.youtube.com/watch?v=5XgBd6rjuDQ)/[Win1 `ssh admin@[YOURIP]` → use password: `raspiblitz` -**Now follow the dialogue in your terminal. This can take some time (prepare some coffee) - but in the end you should have a running Lightning node on your RaspberryPi that you can start to learn and hack on.** +**Now follow the dialogue in your terminal.** + +*Further down you will find more [detailed documentation of the setup process](#setup-process-detailed-documentation).* * [I cannot connect per SSH to my RaspiBlitz. What to do?](FAQ.md#i-cannot-connect-per-ssh-to-my-raspiblitz-what-to-do) @@ -172,7 +177,7 @@ If you run into a problem or you have still a question, follow the steps below t 2. If you have a hardware problem, please check that your hardware parts are exactly the parts recommended in the shopping list above. Different screens or even SSD-casings can cause problems. -3. Please determine if your problem/question is about RaspiBlitz or for example with LND. For example if you can't route a payment or get an error when opening a channel that is an LND question/problem and is best answered by the LND dev community: https://dev.lightning.community +3. Please determine if your problem/question is about RaspiBlitz or for example with LND or c-lightning. For example if you can't route a payment or get an error when opening a channel that is an LND/c-lightning question/problem and is best answered by the [LND dev community](https://dev.lightning.community) or the [c-lightning documentation](https://lightning.readthedocs.io/) 4. Go to the GitHub issues of the RaspiBlitz: https://github.com/rootzoll/raspiblitz/issues Do a search there. Also check closed issues by removing 'is:open' from the filter/search-box. @@ -202,48 +207,77 @@ There are plenty off rooms you can find Raspiblitz users that can help you: ## Setup Process (Detailed Documentation) -*The goal is, that all information needed during setup is provided from the interaction with the RaspiBlitz itself during the setup. Documentation in this chapter is for background, comments for educators and to mention edge cases.* +*The following documentation will provide more detailed background information on the setup process.* If you are looking for a tutorial on how to organize a workshop to build the RaspiBlitz, [see here](WORKSHOP.md). -### Init +### Basic Setup -In the beginning you can choose how to setup your RaspiBlitz, by running on Bitcoin or Litecoin with Lightning. This is also the point where you can import a Migration file from an older RaspiBlitz - read about Migration [further down](README.md#import-a-migration-file). The default choice here is Bitcoin. + Everytime you start with a fresh sd card image you will get offerered different options. For example this is also the point where you can import a Migration file from an older RaspiBlitz - read about Migration [further down](README.md#import-a-migration-file). But because you are setting up a brand new RaspiBlitz you will choose here `FRESHSETUP`. ![SSH0](pictures/ssh0-welcome2.png) +Then you will be asked what todo with the connected harddrive/ssd. + +If there is already a blockchain on your hardrive/ssd - you will be asked if you want to use this pre-synced/validated data or if its OK to delete it. If there is no blockchain data - this question will be skipped. + +![SSH0](pictures/ssh0-askchain.png) + +Finally you have to agree that all (other) data will get deleted on the harddrive/ssd (except the blockchain if you choosed that before). This might take some seconds. + +![SSH0](pictures/ssh0-formathdd.png) + First thing to setup is giving your RaspiBlitz a name: ![SSH1](pictures/ssh1-name.png) This name is given to the RaspiBlitz as a public alias of the lightning node for everybody to see. -Then the user is requested to think of and write down 4 passwords: +If your starting not with pre-synced blockchain then you can choose if you want to run a Bitcoin or a Litecoin Fullnode as the Baselayer. The default choice here is Bitcoin. + +![SSH1](pictures/ssh1-layer1.png) + +Then you can choose which Lightning implementation you want to run on top of your Fullnode. RaspiBlitz started with `LND` from Lightning Labs which is used by most other RaspberryPi lightning nodes and works with most additional apps. But you can now also choose `CL` for c-lightning by Blockstream which is a good choice for already more experienced node operators & lightning developers that want to use the highly customizable plug-in structure that c-lightning offers. + +Its also possible to use both in parallel on your RaspiBlitz later on - just pick one to start with or choose `NONE` is your only interested in running a Fullnode without Lightning. + +![SSH1](pictures/ssh1-layer2.png) + +*In the following we show the setup with LND - which is very similar to the steps with c-lightning.* + +If you choosed one of the lightning implementations you will now be asked if you want to start a `NEW` wallet/lightning node if you had an `OLD` lightning wallet/node that you want to re-create by using different options of backups. + +Because you are setting up a new node simply choose `NEW` here. + +![SSH1](pictures/ssh1-oldnew.png) + +Finally you have to set 3 passwords called A, B & C ... please choose here single strings (without spaces and special characters) that are at least 8 chars long. ![SSH2](pictures/ssh2-passwords.png) -You can use this [RaspiBlitz Password Sheet (PDF)](https://github.com/rootzoll/raspiblitz/raw/v1.4/home.admin/assets/RaspiBlitzRecoverySheet.pdf) to write those passwords down for save storage and also use it later on for your Seed Words. +You can use this [RaspiBlitz Password Sheet (PDF)](https://github.com/rootzoll/raspiblitz/raw/v1.7/home.admin/assets/RaspiBlitzRecoverySheet.pdf) to write those passwords down for save storage and also use it later on for your Seed Words. -*The password A,B,C & D idea is directly based on the [RaspiBolt Guide Preparations](https://stadicus.github.io/RaspiBolt/raspibolt_10_preparations.html#write-down-your-passwords) - check out for more background.* +*The password A,B,C idea is based on the [RaspiBolt Guide Preparations](https://stadicus.github.io/RaspiBolt/raspibolt_10_preparations.html#write-down-your-passwords) - check out for more background.* -Then the user is asked to enter the Password A: - -![SSH3a](pictures/ssh3a-password.png) - -This is the new password which has to be used for every SSH login after this screen with the user admin. It's also set for the existing user: root, bitcoin & pi. +First Password A is requested - this is the new password which has to be used for every SSH login for now. It's also set for the existing users: admin, root, bitcoin & pi. *The bitcoin and lightning services will later run in the background (as daemon) and use the separate user “bitcoin” for security reasons. This user does not have admin rights and cannot change the system configuration.* -Then the user is asked to enter the Password B - this is internally used for the bitcoin RPC interface. But also as login for additional apps like the RTL-WebGUI or the Blockexplorer: +Then enter the Password B - this is internally used for the bitcoin RPC interface. But also as login for additional apps like the RTL-WebGUI or the Blockexplorer: -![SSH3b](pictures/ssh3b-password.png) +And finally enter the Password C - this is used to encrypt/lock the lightning wallet on the harddrive/ssd and is used by LND. Everytime a lightning node is started/rebooted LND needs load the wallet into memory to work with and ask you for the Password C to "unlock" the wallet. -*The other passwords C & D will be needed later on. They will be used during the lightning wallet setup.* +*In the early RaspiBlitz versions there was also an additional Pasword D, that is no longer in use.* -After this the setup process will need some time and the user will see a lot of console outputs - just wait until it's finished: +After this the setup process will need some time to set everything up - just wait until it's finished - this can take from 10 to 30 minutes: ![SSH4](pictures/ssh4-scripts.png) +### Final Setup + + + + ### Getting the Blockchain *If you have a HDD/SSD with a prepared blockchain (e.g. a ready2go-set or you are at a workshop) you have the option to trust that data and skip to the [next chapter](#setup-lightning). If you started with an empty HDD - you will see the following screens:* diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 1594dfe85..1df795b82 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -177,7 +177,7 @@ do # exit loop/script in case if system shutting down if [ "${state}" == "reboot" ] || [ "${state}" == "shutdown" ]; then - dialog --pause " Prepare Reboot ..." 8 58 6 + dialog --pause " Prepare Reboot ..." 8 58 4 clear echo "***********************************************************" echo "RaspiBlitz going to ${state}" diff --git a/home.admin/assets/RaspiBlitzRecoverySheet.docx b/home.admin/assets/RaspiBlitzRecoverySheet.docx index 0f36242eeeca538d23389d0b890c76d34e53a271..346ea934fa5b5400fcceb169e2fb53c3a35115f2 100644 GIT binary patch literal 21145 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∾8x$XCW8cHY@&s4XKDByGO|Z z#(CpL?%{17E-3{_yv7)t+2tT}NgGgMC&E{Ve=B*a+)-!;O%{c+r2CO1QV#3+Mx;Ho zW62I1!8B+;A{(rs*Y9tw3p(X~I?xdXHA#fSgv>0C-UlZfK~(o;aN|E|Oa~>|25#!% zsQd7_dG3&k-smH6dy$`Xj$L|s#d|QcaA`YsIG#4nZ(M10ZJJvy4`#nhceu&w$qYGq zOlK$9a+kEb$-cemtk2K++_?%M>{C6mO~isAHc;j#u?Y9gW$I*U`d*5==irXo<==VC&HOWuVP;=LK*^QwzDv{} zWu*@$xoV7$avpDMjcd%_Rr(!Ja68zY1zbDsVGe25LHc{6gua@!{r{e2w0r$1K=u-7 zc>O^<(>`^J**lFq1J-*HuV+IBhBtuYT?FUeBtal^jX1jHG>K!MvCH&>$(9ZCpMPjO zQos2lfOBv5UvkrIuo`ObG_n7BT|@ZV$+X)ZC*0r*b8`fKn4n)(OeivQd867Ug2|tG zM@BYHFBHWrE=JF#L9#Jv@RNViU-@god8Zj06)&j{IDX8mQWbYNs(D_4K%|VKKm=xc z=+re;nRG((Gl|c>Dn#jNGx<`C88y_5LpHA<=lkEn6=FFpTRAKM@HzFLNHor0`uH!= z`7i$bKk3fD6uK*M`tJ(>utPb%uAvU(=3E#cRhwXhGX5}B$jg<^>!D<2$mp{z*J)%^mnE3AVMeSh(}CV2Qp{(sa(4^Dz&HE<#~Kd5#L$aEzC|v)T>~ zULhK})AmVLIJabLgN=e#*&MFwV3HgrSTkRR460BMd9?1t_4EqBG5&g!mkR-8rrAb0 z!wXmUvGI+TJA7Nk6h`3FWR|FAo$~$#(_pp~R!|u8hHl70N0Ssi6Nt2`sKLPWjZEI@z^yWXD0Nd42ja1oX<#aY;6C!H}=c|iEyzv6ZO z;g@HE+V8Y~xuxiTJivqb3;TZ|{x8Z!vD1>EjIbd&y{;5(*G4V~MDo)Hv3Ya#j!y(M_NjeOh?A~+rC8iZlii^2ZPhUM&=?Y8-BZ1_=1&dw9X z(Q38!=5?&{-3n^Bj4r#A%8GKFp z+6=OY*%IP^qDlKmeDJY>tKJm`$}-t1RN%}uCa56KtHm3jg``;?k zrTTdEIvdI+`UxN88kdLE6G3)w@!dUUW84dxzB}lV)wx_!ry}P&syRCN0N^4*wvE*B^;~zFSam94P z_~%Kn<9*p>mR0}>NGkFQJ9=zJOElm21sMl27)>7GB@`d9R|BGfi;+5a(xUHnF0;7N zdSX2?q`FaC5~CgIXYz`JHCLmgZ>Twf5qYF3eR zO1VVTBwglN482=qnmv@=b|S9v!x@ea%zUpe%<2sL<(r|#Fnd)K5}KzKYKQ%&`Wh`< zJxoip;j5AL$-5su{Lsl>>ysJ?fBIP5Ppq6c?02b3U<*3d?gWb4Of;R_ z>&qPofk*4zF1W4jzL?=#vS8@aHdvRNzFKzawXXm;-iY?mVFUKlSIZA9P{wys5M8*LF@DhTgRt!BB{SgiU zcS7d?9#9emVDgS0Qag}8E*u6UX%@`z<>y~DG3CuaU*mC13Cn?~$Cl9S1N?)V4AB`+s!Ut8r zJ*1a?!wFAH!gK!K!U}wynFttj)g{(Q+ac@8SE==|UT3TG z-$BCms=jF#LuH;LuXD~*QJ9Agt_;s_)vhV-?vf3~OZKYI#dCmAnXV0O)kg<LE6<~qOhfN8JtR@LJEabRn8xov%c^VHaH0@&<8X8h+hfmC0k7}eBIAYFi zK(KmJ$&h!_W`L=OF2njC7uG-LuMp!-5rIsbYb1&0zkFeB)bKf$yRvx~tCK|+J~7&w zU7COrTt-{tEvH}#Gf*bpj+C=u4vjezzTAp30LO*4#RixsJ_R()Ln6R#v%P10q*P+ATw+E6s7C)lJ=cGQ8Axx%TA;5xf?<`sq%m^bl~ ziePq0@bL|ny*g%-&8}AY^Sh{?ZrR*}l1fZb&6=v0o3=Zpe!m3g%AcQ=xqDc=KShJ! zK_*`H^VmB+o7{uA23)FJQXY@BH{Lt=%Vv+I<&5l~;lONdeCv*T2D&}|YE$rUcPXM< z?oVZ2V9#0Y>y6nYxLVoNTe#)fzH$oiTgC+SJB|b%mJPmg#6(d@l%09tNq%N_tNZ<` zxP0B|OQ|+|flWzEtC15>wbtqlwBMSJ&M@S@XoDp#dZd05?Wtpn;o`BSw{e@G-!dQZ zN1q&Op8}KIe&#YNCu7JM?g>KYBBa2E+-a|MKg30(XZ>8b`yBqmYzFr=;CTGkcwEhw z+HRFQ?l;Ik!D8)8+x+Zr*p9~f{}n9$N4R4CCtNvuxN|3Net*TuFLB3jE|k((#}^q? z5?eRNDkg{58;xQmv^6bRi^E$ zw3us1$6pk!-BRJr!>hlX(DgZVH@GIRjX;^ zb=16-l_uqJJ8lv3OxmT4=)_P5rL3f38!W@H?u14C+k<)$xr5cb3IXlCmG$kUC{V6) zq=zGKT3&YFcGE}aw_6uaV5KCau!2=PGD+|EwOnOiSl6N{&8noK(-yss5kf`6WA?D* z0#+kl#%hW{i|b_gS0@fJKpLC%L)jaeE+sFOPKTyC5iv#!8SjP6G!uz&jJA=-Ntfka^O;t?;_;^zH8i9h4nsJ#; zRVr$BI1T2esT>}nUp5IennEIaAJ;N5)dLujOQ2QM;35=uSx-fS@ekrawy&D<3kJJA z^BR8lH8ZFEl^mO_61hZS#Na}}cH6rpS(g8Ib7k2N`Z@GTPDtjY)2efDsAY1{au(MML%QBHeex4mP7@sB*B1Ts;eH5@0iY8$Pjn%xsJ(|} z9njo|*zw)GALeq3gAfHwcMw5`0#^L%%fVQ0*nUE~AIHKHWkV zH(9|NjnuN-aw?-W==cYG=cZL4dau<);}2;-_cD{4!5Spc9^VU?AC&#px6Ki0i6A)a ztrxHKd-a*kKesWiG|MkvdE3JR&;fUGlhQt_8ygbS74c}LK*<=TB|qgKf`5qZmu}PT zcde*gNJGH`!9U!pv}h1zC!yfkVzbg^r~vBB-Tx%k2u=L)(k;&q0kk$ON`3AtB5JMC z|Iuh>{1OTVl;XxIEiX5E+3j!mSvDf8uul`FYOzw+V4Y{6fCWLIA;5L1#`^rUH!@U@ zYt@636_Ihl0+*c3io%2slVwo=IeZwJ4~ay zlS~g2pxm%@D%!^7_vV$R8fw7u$(~V_tz>?c5d*sH8CCs`3-DOLs`+^Rt!r_Hey|dV zK+-tEFe&s-=R$^10R4Fte5Rq5AG%?EMAt3$xC~K(;^hJ7!8~VJwq=z9xNu|3WN83@C{Civp~3 z|Niz=*Aj56X37!m8RM_mdi3&JZiwX?3H(ZUb9fRg%8iOlWFvKBWAC=j+iQooTlL!)BLQzbTj zN{-#-93iI)%Kpdn!YLp3=ID;!STkhbpY3({e``7F0Jj>E2aR$X66=@PuzBKrn^N?N z3QJ$yY8Z~fEbW|Jrv)k9Ne7g8{{y7Fp~UGfE1uuc-v?th4tEMbR9}kS|f+7 zKW!U!q7((-=ODMxh8{Ed_~ew*sBr!cMPb0b%k$}=c&8*Dnd&wb8_uOlBx#n>y=2kJ zAfuw`h$TK3as4CFuUK2~5ecgUl0Z^D$iYP1485uL$MQn5u@yCGDkI1E=_|ON9Tbyx z4lgWV-C7WKHexbHX>bwqi@GsTINhgy{pb#=Uv?Zc4UAaz5qbf~!z8bTUVI%7RRsqp zDO4du?`Neqg=4aY7E=eY-J36f;D~FjlmU$VH#h5rVg8-YOhl?JklA_(Yw0P;^F^@; z(|VZivvp7gS_0P!(L(A#F{j&Q#w8pQXfe-&U^?=%=A&qkP*%fa0TTyzWKHmF966R> z-0&IM?IW@)y1z!p9fg$jq9pXM&5$9~{d0b+TPWdzZ`?ea5%biVa1YI3zc=i32bMi6 zwXwlx&070|{UPK1^Id-PvR8kY-x|S?es5Ua!Yw>)w9$&4$$VXq&sH(a<3|IPihZwQ4JxQbGH0dK`;3~<`P+>JnT^cEnSbqxU zB|%aX{NK6JXK?Be(p9;E93rOhl2ox?yz2WTV7KnVZyg`pQ%12M9aW2boI!O z(~q3E?$*P3N3Y7ovsm(H>(X2mUdfFYhp`+gU1-0h(yr4b`nI{Ksc4E*w3)g>`A=zW z9k)A*!)@%@;^eyiS{IPAF;QgJ|p`50;`%7w{rO=X|(Us~`YKg-iFRu+K5#(AqXZTjAg2 zIqxtwi_GCnXd7bi4pg2(#DQO_8D=#CXcue;91G=j_|JiMZu9igN4FdXg>@8M$%{j0 z&NnR}x%XhQakTDOqgq0x-0~V;{1Ac8mN{Y9QEE5Kl@FYwm`-R?$ODcw8GAusn%eUc zIXeF|H?a#tk7V2qYIwKEZ$t&E$!NbPmZ0eCdyOzGi#D!R%e)`BDC0-|@}@W7sSkiX z_@46$OJjabV?qR1_&AA6OxqOHQnA>O?FB=qXW99Nl(uL9Sr_!bxT%kTTx$%_t9Lpn# z3sjYL##yJos~l3wyc@(I-iQkhXxwC^m55?Hqg*!t^Qe50p4judXH|1viiJS6HtdeU z{2)Ksr+lm3!n=~%(tNH^A)$McKQ+syh90nS_tqq%*8W_%F)>&hCx@Vat^~nTp1U3M zCkSYzEp98pr)@!(`UALtD9-Ay&xBj{2=SguxPZ|FIhfTZ>sdwS#<$+dnmVOV271K4 z2(d=fOzz?q$Z$QBucOH{WxofhGKxn=RX=x=aOPF5Hd16fJh&zH8v^ zYUqnS1hUm;qcX%oc zQ%u1>(PK(X@a20M{zuRh?6F`nV|b|ML)cGygsSeIKrmI$85BMc3TST2AzgFxF>hfU z){0P2o;NsA#NoBR67n+Yz?-;<^L05k@WgME!|9D_1FD5x})UO3O6#e!N z>~R3NCDN4?wP4r58+?=Lw(kPGSNpGR5K)k(^ca4gG~Kw{k`4N0VfEWU$@-Q=wvVTc zv{@}n5va~~zZ1mSFXT9A7oTYBrSdtV7hwastjt8ws$C$U$~$%t^Ur{kEPoMS0$V!h zQhQ~FBZKahpjqkeUt^Cys*t*N{7CLb!v{RpRRqly7;^myULFf!$vcIyst`6kT^BQR zJ_w!%^<|hFghf)YOnSKVj0S%Q2?M-Nif2VSCa|<-HoO-`Ne1Ph%xuBVPu1QTXey*u z!0pWlr9KUla0-i}F8jZVQ5!2#NGaP4`h#N=j(rOtL7To3GsPbXbL@gMh`K}yziy!C zG_-A{5L7?~q;judPMd!I7Wj1QWWK%TQHs$=L{Ljl-R<1ZN+X}IVBD>?BK!`rns^KQFh&lSr-C zAGz%mAWgNvb41>}=Ips@jEgr=!oLw4;!;Gk8*sCfbY8O-C-053NNohyBso2h9zWTf zrhv~cSe`Y&Sr|DDrM7FVxwXRwUC{cO z#kIZy3- zWuG!!&Nd!CUY3nn{Q?p2tCLZ(LC(YM19#|%nlT$BSOBQm3!-pVF>tnY7FiKdj&@jI zB#6Jn+PNZO>-zo@A*7~Zv&zS^?XSvJs18}ZuEJYU!YL(lVW$k!7kfeCrQWc1_h4H3 zw6fUX3#nZR0zQFnlPq}}o#NP^?$T_LP|#?v(8DGbow4mW3j}Ls)>-7-6XdkL4HxSZ#Wh3LWngA=xgctArg&Z_GL#MN*#-ahkVM|jzzOs8@eC_XAIf-B zK^RB(?wy6nXf61=5aW;O@jcPx!oE_gmWS6mT&q6 z7@sm6WxMmh-y{9j-yOD-liR!Gq}26cEv(2&qB4?1ZTdJSS5JiZNI8b0QtG36<@*`r zA9dbT43uiB#3QuS*E_>1%>L|u3hzRGPR6pAsXYEa$gc=Ni+znX2xl$>LEoVbEcwSJ$oZa z7@?A$D6Md(pUSLeMlm}06IU!Djxad=5ws0K zdE7k_nWj;NXPUG~ynUJIu{3}mX5J)xL#fC+m_BjX(`BHiSe?)ziPO<7>s>hWB|Ylw zQkko7I&?((YRPUTq?;;}p@E5wW-@pzz8l#%cIJ^vf3XqBe>sH$(k!2Pqz>xs#l-VH zhl2cj8~u;*qg+CT?i&Ti9?V^lcpRD`XeHC0`xJ%`O+Dv@;-U?)@VVkBg-1B3XMFQ~ z=ee^B@tvzpQ8l4`=iK1C9;l65dCw)mW&>oMfDo{cPV-c zxM+8RYd0*`34_*W!Vc>RKXRWn?4g&)T%ZgN)!dNtciAKfF-JNyvm8?*7dM zK61BiSoJ0QCa+SrIRoRBZL=I_aH(PE`{TlO%fxoi%c-7qGFzJc`u;#RBMMNW=7M$6 z;VE2Rs4yAm?6eeA%-Y2~U?G+XF6n{_;jbGaT&&hKjNf^&4hKh?(*s=VwbeuqhMVk|JeP7wDm0;O_IoXKNE#M)A>##ETrlJBpRLAx03kv z83{l;FL%xbU4^>bV_d}Ii&5_D-|3Ray-#oW13$bJX5uWuL1zLmfB$gh1zYRYeK zNmkE_cSab-H9zQ4=$DZAb{=z^<=piQL@DXe0^_qhLMUJPp}aU+%}xpJ^&G#dousi& z48Aq$%NB9eW4^tdsmyITBXRP0xe6XCBlX(Jb3%jrzB-L-`rfVFwj~B{Y|p(&O_`7E z9``$?0~N6dXSEscPi?$6SqC}J1qYeH0B`Ea$3k@>LqzQdB09@-Te#?YMI`Y;jS*JMi+0A^ zAAP!|nMk?;iuK28_Ce__ z>*p%mNCRA4m@mUD2^?@_-H593V;gE?_xEsgNC3Yl-{UcHxv^AMj%3(#u6V+I-A3xh z2xa!dT#+VsAsX1FF=FR1u62J>2dR;cqjbp&N>dsfKkZ^isl4%$;BOdW?={(yaD(w) z$8HRgU5Q;C=~&$L^=dpl84bWuWn-{)gH7(vzt$jq4tC@w6%dniJcP1@m24e$a8Ni| z`26+T=R}5y?`!dL@W0$RHxOKdrn$D3EqddAweOwgUKwbIWzNXnMO}JnIxY3NY@>cI z2RK$>@}@NXG+9i9T~G2?!$1ffJ$;=70WG(p_ z(L%tEK1{SisWo2if=Q@`tREmZ4bI=$ofyJSXPL5_4Bz~a1OsdfS0e{>eS>n zT7Vk%GbD2P%i(ta!4Qamj)3cj)|-@Q@)Uh{f*`*qt$XfWEU%7zI*!}EL=e7kZFK4~ zhHe z*^H$cYhi_5p7zR&U~RpmU-2)Q$c zzuBy}f=t+@(|fHt(wNN(eRn101QB|-WuUbwm+qLhKEM<`QC*qK0Bf=7{QZP%%!Omh zBq&c{&H7w$a)2dk)&CL8aoV@4s5TcAzPvRDFe92^ZFqARU;yQhOz1gs714G0QQh`u zQ_`(UIM=$pNph70uy*v}*y$G6NNW=1g;C?HtcHY0o%PP^QP8j3E@$S_dLLBn59$9< z^(vIyFNkbPgnvDvSo#pqU`ylvu}a^g@GKkAAYio00Znv|<584Q@j@oSDB_R3ZUQ)c zoOZ4|TL9fhzC!})o9G|TDx7qdAe}5%A0Ry-V>`CaiADi(eTtdApRb?9TK{DJ30neB zApTIWCTN-+SKs=7RdVLxP_}ItA6wbdVC-Ajw`7SBvI|+WH?ox?VGvnjL>Nq#P?6=e zj%8ZldFDEfdG6nNX1W+j@|^uj z9p+m;}!x-L@fpQjM*52iA?>(ucRLBNx0YKVe zk)znEDafde&tuv`(THnlR5*cubUiV3hKMwMy&N>i8Thq4_FfqH)5|k1FrnCv0{bTh zK-=iI?2kNY^5bcsnwVMSlqGK>C!7qG90sXZ1uU=rQl3+Bd@AL8@T7F2!Gs5}x0;Ql z@VEoT1hetB#%!cTSwr8_qD142rDtEan!+IvAWN@vyFavRLQ{xw?f`7yq_Ci9rhuUQ zBZGQiVd8SIylaspXKGdqOT9t(tBd7LYD!MU`^e%4&*D_yfK6vcbDJfhvrS%ZYoG&7 zzOr}j6fdA}!|Xegy2`AlX2Z<65d`|~AAT|&+s z-u!zFQxiQih~3upKK)6@$gnX>^h`EA3Bcg#+)#Q^JDcI>>g^o5Ddh_ZoiB#f4+b3K zm;0Xidpv;oj1O_R03`r3On^2(z+6$TtIp5nb^7muo zY!W7>QWBmg?7iWbWQCg<(0+Ol-HIL7Pn1}Lx&f||md;wgO_T;K*y*j!RxLGJfUQ zXVRjVIG;=9nh($YR1fxkS-oNiCZm_wG;#aQfa$)B+9X zl_93+u<2-GY_?jEW3cXZ7mMX52_t_YNmVyk87s0uT$|5pE*)OrC?(Lv5~QOqEQsp4 zITUeC2ynyaqaKC4!$2rG-y(y8HKggHQ9I&EkX|h}?1#ql<>U))#S%3Y&nx)~C-lb| zP>xfPBaHrb|WexKTV^PcRvUMv^`!W3;S`sC)O=(dAP7^mngc5%HDE07WrRk6SltB~A4ra0#eEZ)W9y6&9dYL$`!`s(bP78bm6}Jm z32e{rJHJ))BE7IVg&xFkjPenpvZ*4D4sND#bD^|>lU+v@eFvv=_-ljz%O-(3`CjR=F3mRK{EOUE_ywSc+RRRVSNvThU zy92U{9`i!T&o=Q8m+1N`1N!6;t$|&jq;uW^;s;52i%YdjcSFYA`1T`rpZ2c(;Xly| zq0nXoTrqbDHkw*_cNe2pLovr|!Et@t+oXmP{DeZ$N{%hM%b zZM8;gd%=fs;jxh}uWXT@e4~L?$9>YgAI3`Np#y3qiD*!GoqbF~Y>S$|U7g4!`A7Zt zq@-(UR{9Dgk%NiJMG)PI&m9LH&*M_+X-Bx#M0VE(zlNj z&TxAJm>L6cmm0pO3s+k+#hpH7RDsS*UYNiWUOUN z?#U5wi}S2qrO5nnW<86llg4>)cH((MB2EWF^`03FlHhep@SGPL-5atEFkgIm>;QX( zu4GePUSL_FrZh5eSY-*E+Wn2TH6&<+w2KRMqK76!&qXz8Ol_ zXJ%*Ge(GTR?yij7Ls<+ik8`Ki{-G z=w4MXj?<8GDa?#6*q!o_4fss0&EiyC*#yTPA)7n77|frX06;VE|I5IL{U6At%OSEE zI)^*!ka(I#9F&uv+9sP5%zK1v5+e=O|2MLEXez(0f{QQ0c{8nyyj}0PTOL|8OXJ#{ zagJX#bQ%`ueVbZ^!PuDE>{s!85J`O1<76_kb?ptsiKS~)KswTNV;kCmN(ry_NZQR% zii{GOV8q)?W|x=VQxn6f5{wllFPBjJqrpQfj}- z-)hK^aM}KpGcy!qh*TU5A=^~;4<}pBciv3YzE3UeDe8?>!mO$Y2gU9w@g|sXfXd%R~p+)J5kvv=#Bix-(pC&I4K8KK`mDuQS5DyU`rO6 zh}qA(YqX}M*_*x@Q#A#JaCQ=MN`y5!VsTYKG$qa^Af=+`5^KIg@1S{`>9iz02lF5q z^L7Ey(_Z01XBAs|43?yL+bffzb0riFs4a*}&iPbQHo~vYKQ!t?>!wVVnY8i=($_UV z;J1#0$+%o|o2ymP;ho5YAm_2o}eovj#*FM>gpK5jJcRnrz zZpEX1{4})F?f98WCzoF!`m6m!5Z38_{0NA{(#BKK9%l|ir>2x!GM#5oA#BnK{ z`{&Gv(<=Cm_`_TOxGbnns~nNbrv>oM}S_vOdKLqlR%lYC7JpXhfK2?6m zjvto~Zgd{)01pm4V%bki;IoD&CHDR!aT-QHErCC(Pf7>~{QfSE5XI9H__Ow;#HE|R pOB_x3(-Qc<`;&L(JDkMdjA(sr5?nYP006|j*oXlDd)>pUe*u=k^4$Oc literal 43770 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 L-F>rpKhFLGz*dhp diff --git a/home.admin/assets/RaspiBlitzRecoverySheet.pdf b/home.admin/assets/RaspiBlitzRecoverySheet.pdf index 823afe60e22d7b2145ff645d863cf284cb6c873d..b053360a8fecd22b1246583a8339625194c7943f 100644 GIT binary patch literal 54807 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 D#%6V- literal 236691 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

cnmC-2+Rc>I&*8_f`y-?1 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Ƴ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 C;(3e! diff --git a/home.admin/config.scripts/blitz.shutdown.sh b/home.admin/config.scripts/blitz.shutdown.sh index 4e40c18e1..2109de952 100755 --- a/home.admin/config.scripts/blitz.shutdown.sh +++ b/home.admin/config.scripts/blitz.shutdown.sh @@ -32,6 +32,7 @@ fi # do shutdown/reboot echo "-----------------------------------------------" +sleep 3 # stopping electRS (if installed) echo "stop electrs - please wait .." diff --git a/pictures/lcd0-welcome.png b/pictures/lcd0-welcome.png index a96e3434bf8902bdbab1ca99da376fe57dcaac6c..7b3a66debc101b27c69edea3a56b4dee4e091617 100644 GIT binary patch literal 11272 zcmdUVWmKHO(k9N}8r(fFf#5-cCos4L24}E9@WF%IV8Ja|Ab1j-;1Jv`2?QrN1b4T6 z$-Vcx_w0T@_Uw;6yK~MvQ`245UDe%hS3T7op{^>AhfRfzgoK0#QIOL_LPC}Y=w1*8 z@EsWwj|mh!w~>`qhseq@sKXttZ0szNkT~MaO-+dvz#M%rn5k*sFxO*jxQAwV_&ZHg z|ADrChQYSsw!WN%_lAax6oiYY+8s!F8trwqQf^XCdgK-pVP9&SH&(K;Gsy^{WCu?1 zpu)GLZOIAxnYj7)NX}+(X$>q?RCAQLQbS`+B(plCX{Hxa^2pQtQai37Z@lmx{DnASaGY=&N zOE8gHq$)114*?~GyEYjM8EXe^+eLK2v*9UF2ibjBTO0rN{r!FcF0M>BE^apS{r!F7 z3GhXeQ$mf}iDQrS5#P{FZ^9u07*8EbD8x!d1&I@&K}g79Hb`gyg$z7Yz=MQ@nt(t8 z1{{ePc;s?W{#A=CpM&}@8maezQCdqD0s(%t%;A=n4ldS?t}eZ?20&92Hrh~EsEV?v zxuZQd%)-&klH1eX=|KcZ+*1@F?JZql44(FO4lbge&zb&mhywIOF%J{NUlv!}=S)x) zbp}~SxFv%S_fzhtOcK}(3=HCM3oB7gxtISG2mU>0vUYWK66N9X@bKXF;OBOPzvkf; z5fR~e%E!aU_XOa0;^O7t3iEv8;KKZmM*h`~oTZC7+{Ve(#?gV{pmu z{_FD(JuN+L{@s&<%RkKm4CHyJ;o;?e%JW}s1ES&&rK0LKo|blcayItB@Bn>C0BVW< z<^Nx5{@vq$NJ9TD$gwC{?;@*@AY~;ZTj^B@H3B4wWq)Stq>AGNQfe1%8RBCK2wtX$G77{>!!X!_x?y3L+0srCJ^#8Y5l~Qoplg+6H zRC2dNAM~yyq8R6y|6W~1V=kOV3Miu<1q!FJt$g*09njN^nF0O|@8kbrc~Z;B4;-26 zv)$t`zq9J>wDNCPocB!!Q6pHX9d~UWr&y<0j@cB?-+oP#@O^uCu-G1ayfAi0JO~e= z5Oe(#=bo0F4QMDBDJ3f#Z1W>G^p;xKA(K+@jrOlMRI~6*5tqU=L0g?)oH_3RQ;KQP z-k$B)T)0#@EyU-kv11|wtJ4Qm=#{^NHtbbc#A-ov%zpH*fv+3ez zxLiFI!6YeK<6F}A=&r~--u$}*#eIpZ_QRyAi=s&0UydrZJ`3a$EKx<${zM9Ne*Mt- z0^)NZ&^Z>cFqHqFE$@olC^oH|-bVs-wJrmB2G187jX+m{G8^I4BNCL;;DDg{2{nT+ zg}}I2fRHa~wCqass;$zt%Ui##(!3u1V87S6&3%3TColG@kW06yJb@3tFw2DU1y1ux z1p9}lj?ITJ7cb$eH|MSQf^`diO_U<={Dzenu>lCx=1kr1w}Z_`16=FJqmr>n#u2&9 zaa1Bd)7%$)J&u>c=+~95izILRX`H)=E*ETky-t7Ws+gPSP5WK%4&#gMn4T^8`}4m& z`O{Thlz4x;?=Or)2JYK9oqnA?U1e7{?_LYO-fJpvxWBvJ^>XMc%J!R4e*cs)PW#qX zbZyeuyYypOa#F<&XPO$T+q~yW^t#FYm9Aa#e)Dn6WheceDZ^}e>)niUhR~DR5eD?t zALS;J#~YIO)0tlDY3n(`_}GnK`wv-WS|Dt0P7Eodl{7y15*Mb&tBGne?0cI<*$x#U zAN=pUT)H3WCgl|}P5Ry6p6d{V)DQ6uzL%%->N0enwzN7P78a(qtB`(ibf8tWUDiZ( zcVp2NPGog^Iw>r?;8WeOnxLdyZrn0dnBnl|-l1t%$Yu2T`2}nBRgkO1$#+?dR=l@d ztT4A?ZMxxCqn!kjb~?shmM(|g)1`wkrklUrp3Np4E9cHD zjWi>;m7{44YVB;U&i5ThB=3Ec-U-}|i0#`=7W(YtR&@D}^3!yyrE?UDG#C8J$OK=g~?!gQ4M7&S=G%dB=Vb4&W%84}!WI9T&b?#Xdi) z_}noAf>T!a>E8e=c&ORy*e+d(r)Atv@^UrtxEq;z=IY4sx~{LLC_9dv;OMbd;ncUq zgPorRQMa_?9zP!GNVYaVdnxi~to~IoPHU>+QLlj@D7C`9=r(9C@0G5RV8uR0awT2N zeYhuf&Affx{E+YY{A^1U8uuxf(4?BgWml%>a)ecu+XQcC7=duC zXKpc6MwXxE1x2CDF}P-2)2j9MtolyGqwHz)!g(kTxxUGW$VR65pFgXyQt&yXIN^y| zz1LZmkOY@F(Jr^&UK`WqN$8hHgFM3-j^AuzB=0>BhItuHYi4DUSzH#oQeO;)U^@jcfwPSN7@@Rz+RWfz7 z_{C!IgniXoih+I*YiDWQ?-?4maSf~Tma~Ca!oB8W)v+?8CMh$Pd2$mU7$gQ$DT?gL zjz^4a)gtk@hwzMbUf*q^gws+ec{*bly~9(C31e^js;|T$I0VNz?qPPpdwG_rMnV<) zqAT5NMrzrg5}1W=mKu829kYGUcuVzbs-XOa&S;R=vlfXeCBNLy=RGpA+-E*ndkO*{ENM+lcmPhD<1 zS+wP~g1gd*@n87o(9`JYjb&u%U@)%>Z7UG`hfg>C|Q z{kZlkGO8Gq@p;>WSR=Zr*kG6OWfa`7#@iVJTLLr8L6e(ha(9ci)$!K*TSp~zY5T5V zB4M;njjh;4QE6)~I(^|er(hA_Ey9y90?W)%z&e66;|D(#eRu<%#i0~sEYJCdBf{i& z>arOu;eEbmucK%A$UunB>O%B<&PC1k5@U&YVvmBbo27W4OiB04h8C;5)Xw*h!QBZ( ztt8=A(Sj2dYA_GnAPzSo>+`*NysmIl+GNhWm(f+<#KEr|UOF%#dU0X3(^k|bg1vO! zB`{C-pAh!xj1)$n(GSmeYoL#C^Ri4~W|t{Uf9Aouu^Dg)`EUFY6*F(XBqs>`6uj_Z z>}8G>|7lm*O&0G;%7)!pa3I>c@3*^wC_De{U7pp&L`$IM;|R0w3Lzrny%Uv$bwt&6 zYGMWpP8#y3sMRKY+t!tAt@4V!-O_F4n{RZhW+rD7*jyoevK$sA>?_i`axxD;>i=2u zDKU@!88k|~n=-wzNSus@mb{g&1D9uFFpB4!by#5NTk9!~j^Q4Xv?Wj$K{l=|2jY*z zIf0ttzbDbo%c&!c}D?-?cqpc-R8Z`P(Hpfc$M+z3+ zd?~eS?eOI_@4-dY>xr-UwtaH-Ycz}N43aI$D(vIGS&&+iynPiy&#jtj(v%9P@7`?U z-q*i+*TebfWsZC--9)eZu;3(=o`Js__ngW_RvRGzvN#;qQkyO+&af|&<9*K|x*8`7 zmag&%`pCyJOc=w+d#B(ahftmK9C9+Zl)=E&+q}RH%W}e#6=Wl>Z=WZe$ST^wz0E{l zj5((6aFcC5oiG^9s>;5QhsaMi6Xz#FIQz1WpPm1R^*>C~Qmsr8bwG_d)cu^D(%f>H z928YI)a|F`{*nNC{-?+X9Goiw%wQyHxanNI^LpCr50w&jj>f)MCzbYtT^Na0&MYPS zFMlZ+IrsbA9QNvT8#J6Dqk{XN8XEff?HUjGYM1Pb-ku&!gTeCP^1N7y8AHFzHH-!7 z5LrwFO#_j0ezsEwmV03;Z2L*w9Pt<5Ig+2g%adJU-BnD8bn&b-)3*Dt)-V@`@KGnn zn~THCG<(E2uI~r$JrUHvrG*un(V?f7#&0(Z$ho*weQzKat=x@&a&JVy>Lpg9LinD2 zb?O!QkX|px+hA9|Chr-WB1*Q73I=Bpr$ni^nDrD!1C;Q-Mg;z7^#tfl++7^=xL`+Ts-;Yyk?h}!QnJ0$slj_ zs`4%6gjC$HG!&apOumGxtUk9?Ey41rvw-+=X=0Ia1u>xd8cNM;)6+RzPU|#W@i~B1 z@1#aC{7aL`LUb8D$7?(STHi}eI-jo{6B#dUGR>HPPBBBv_7cysJi6);W;0dG5_ z%{P!K?{Xn*mh(=mp8!<6e|3%)pC`#}N#A|09qqepN&Yp4q(V*aCn@sjeBpa17BZ2P zm7%jyWBI>u=nhm5QNOS5r;mOS^DO#bAwP#(kpZz+UbS9{i}GjqPc8tz5r#(w^zm}S z71;skpaQ_8lFjv3YyaEj0HjcB=p)Pw$U#?~svE*7Bg`VaC9^g_y zKwl*WmBuRoQRW;0aDyxMlK?h=M^GPdT@KMJbO7IQ#sW-7@Bcf2F8znNKiQGc2EZ$e zm}sOsI?tsa0L|h0H2g`Ka&N;&|cB7Ku*_3KfghdAn2 z^&EUK4G5bjE8T=V(AC5bLoQ$J`7YX)x43_Pp+dZ^cov~8{pol}Gb7IH&&ROzxw&Sh z;{+vc$XBegmNWh1tuN(l>GB_sbd9~b5ByfqamYyNVotJBYb9?_#;iI*u-31(%VYDI zZ6h22AVD3Hp9I&fvQO-4Oz_PmHFQ<6Bvgo|;nJErs*xISY&q4r#9}U-a+@?7o~ksr zM+yz+Jn9#kchzzM0woGp#dIe1{@QGk`ETEIBOqvBfWlc=sH*O+wlmgJO@4=L zHgA3YGUNdS+&U({ZniZ}IpKO}HJ>9Z=vI)4jDfO~sUE^sQAa*}{rsJc2 zD{+5w+~$Hw=V@w63&c02-y3;`mc*^%Yc77s)2DeIuRkh%Q(0TUbNQ>hcsUNI!}aZU z#mP^ljD_1hkJ{+GGpxv?qomZ~ilxpWU_(>h|J@?1SfmAE_-+T5XL6DvjvF?C=U4vH zF<9Hifv9Fn%+q+xIb#s#uB`N8k@OKJ1lzFzfn@8kH!z4odhbUFByYZpAN4U?0Un|@ zk>BG(V*ASw=pQuXC8+dFoV~>xLg<>k8vyW-pDsXYfuu;i-?$LOg%GAWsA0w{E8~zoUNk^)3=M zfhPvF0uQ0KQKM@m0VBc>c8Vh=FA}_^Ub2@5Cy1JLY@N5OXve7C1HjFjA8*2H?4h@j zocQ%Q?^PXX|Mb%P-&977v2zUEl&{ZzYYT=XNT3Y&!1HBcBFzBSv;v@tfKiisjkPI6 z${~#IZL!<9`S3ijDiNL@yR&r!a&~{C!QJXni9(ZBzbHHvr5_^xcRmm3Dm{i)OkasW zv-2~6aY`>&=d$8Xw24aGF zrA+%Ym7Z8iuH2w9myo}9Rwr1kopl%_VG-sb1Cwn7Fv)%t^B2KSY*AfB+MBHr*?=Ql zDuKRQ67;q=+-xv=YMs_-p_$_MZx)V$*>Pg9I%&@lmD?pLBRnbc-fJjg;-)In$}V7z z;}qc==Sl(~$htqB_fF;dPbD5f_AJ)~R%t|K903_K958Su0{>gxn_mMyKqTc8%~J4Z z=XXmJ>q|ZgQP<+(u(a_fwNo8_Ch&gN;j>vsN30P#jwSj|X7;&f;)I1N8CKtGhJ|M9 zwJIem^*xam(+{u-vIQrgo%(`%bE4ZN=A|#4@V=OQZ_wOY)b%KNb=3tJx*bV;&0pfD zksP-9&Hz)=5PJ|J8Ly2QINnDT6+n%APwU6M3cMK=e$T&^H>{_-TffYAD&a)!3?BCxtvvP8IFypAHfqYLX;2|3}Br=p@dN^ROV4Ji2IPF?95mNxdRssoz~ zdgKkD>z|M$B0BvGH>F3dwSdN- z-nLAJKByOl?nUNzo+8~kCf}BgOw1wQpj6fD_h_cb}tQ8#CkUxIf`8O(~Exg z?61{hajbr2GVKE|*(Xz&pkA>X69&tErX8kMBa_(c&)=R@2rmI)wfTW1uU)7A?9>!A zQh&i#u{2ni_fC&(>R?ymc!>Wj@J|cdPMyiDPOhJENvA8uuXZKZwG%Ae*H>KJG!^mr zu~KhRm{;o;{I2!x=PnLccAZH5rx4T*)(`@AvED4fp1AaW{MC2-BNd6DA@#A%?{0mJ zVM!rm{If+_?&;G2C@w+oC!|D)$*YF;KzqmWS|2Ae?!A2cwK)^tD$L`z*Xz!Z@v1>? zTXwet>9^;}X7e9OWazXGN=)ZWfEBeTJCf=Do?0jvj z>2;-pn5Ti50G?e{c>c~uN2t4_kPRknN@d%imq-h zT+B3Qx6Y^gmpKbi)oPbj89(sKqwWi;Qrmkpi{(;cv2>_Rm%~TJ^QdC` zOsmE>t+MOAO{@j_D+DfNABB}1jD>H`KCB1}!$||JfxPNshQMc46H8wFvZ?`2UQJAP z%kVv)l2F}8os9=GnyvDss1hy3#N)M)@liE)9SQ$>UItIH!m&vzE`k1#S%@YrnkIYi zmbO*{cAy1eo2UgJUaJr_4m50#6Qea=jgK{MA|J@4vW1qMOrWFGdp=}qu64;DmE|e+ zFv-{5v~ z$0|_3U^juZ7K8Xn5h?74Ytls|xX};T6oP=-Lv_&O_XrBgl%*aL%f@BybDnu1*SYxa4<3q>6*ym*$B^DBB zdX}+{kBN$n4m2mKldFUXh#Ri9z6_hkKDT;Ee4$Rq$Dq&H6e1RkduWb|Hal6F zmTr*mL&ozr)1NxRr^6p;GR&!on!jcueMK97FY5N0F@<^dq5|nM1PVHJn}UVu9WgS< zeXOY22a*7Ma?L&WK{W%>c#kWKsfk^FxHIekDZ#mBV0#k!srr#_|2*fW9{(t~qCYIO zHxAd}hOm~#eQ$1>usy50Kg7B-$U@rxJ=$8`8wdL$k2->-EszO9ZaDTU+Ed2mI1;O5 zMjyJbXd;19Hsms^_RWVqR)Dj1Pu%kPrS-;E{?!MuW%-PQJ zY%s+w+VUc7(I)~eL8{qL>gKgL+EmrL>nslH9r{}DcN!W7$CBq~9kRYa&z zGbi#u?S3Mq82rdJ={P6~_cJW9UO_Y^R>iZ2^fx4-r3BUyJ%XnkXXs#sfO3a}6UEUu z)&w!3wwYWkkI2U#5w}k^%)8G{14q!v$O>3!gez^B+v#x_&cb@p zD0=I>BzZwNoR}kMN#MF5Yv?_1r~dfG-c%Zqe0UIAJpWCYfZzS~f`LDK=i3k$-0Jqo zKT@WKSnb0B+p}ZV<>tUyAIcCQ9QYK3TE(x;#V* zqKFWZB{T-nZpSw>c(Rq(BhIe^EDhTugPk@>RF_wK^T`Q#x1507!|Z`$$xBm(;Z?$} z{_p7#^dO1;2nk(!Un_!#74mG4a_cSX%yJlx=!T4OgBk<(4IP@upkPo?9~q9iz5-(8 zoGdB!+!HoE=TY)pA#}>eo-CeGLg&V?`)pArqU@nasML{AM0WQqz4FMBXBe&76%ZtHP9u_(wS-ezfYwvIH2@}jh9vLj&ZIu;O%4DL%dskdv0W~jJwhv^zT`kD(jftnO7$RP=a(`nW- zTazH}p@#LeeW{F}aGJ3{<%D@=stydty6&%oQk!X(#EgJ_i$gW79f#|BAhTxJDP5@d zIm$HuteO#>?}>)eMbpkrXOp+#?<-OihJ%$nQFQSjlo_}ST9$b!wWjrOvgUXNQi*eL zNrJyfyHW$C-c_(0ng}2BkVRNE=zPYOM=A18H*J621r;FHdh_ue*;(Si{Egr*()5YsapE{fUX#;b*W2vljlZ?%TS~3r`;-z94bYw7P6?XW>*&crcn0DLkJl#i7_D|1Pv+ zIDUqW)3$|@WX4;-2<6u*QssYQPy=oh`ksubWNqc3!m=9pY6G#g=ToVMC?b><*+XXY zDQp#*|Egb>?1o9YE=^mw=34cx53d1dRKCCbY0J5H(v8BgJ3fEO+neIhPPY?th|H>Z z@p4zfNy@8Mt|+M*;OtE`COK4X2FNcIze4-067%Vj#lZdBghG zWtyq<)o0=I4(6=>^{8whPmdtM28Jcn%Dx{@gdz3sGwR64piUTZ)? zL#q0v)G9@_*8o-mHUF1LwsV}R!7BENr&m}w&3Y?+^if5(U1~)OZlY{xRX~P;*NUrh z^ga5H9tn9xDy@hrR1MNBD+y~Cm_=t-eosh&KCf0Z_Tm70LP{}2O6TEZwV;60P}P0s z9j#bxew?|*FgLyXhY<8jyfH|UOWo|Jj#u%bjBy~8N;Zpu$3(NsQ(HoIQ%|oUG_p*2 z^+-rN!K|Vyj80y(CEtS`T87=BIV z-FqzN8A0zPEb5n@UyNJcPID67B78^Wy4y9)zA&^~Mrd~K;j}U|;76qvHQOQZ=&kZV zr+f3WwD`BUgFM*WFldv41ZlXDFtdD&ou<&!kEPA_b2a*n<^l?OsW0k@4&N-}Zc;1HA&zdVxNiuz}JXI!>cK^%AyL9&2(3AU*H`GtV z39B>xiHqD!p&tpms-0#&0Lw6HH4>x9X-#pA<5Xvoip9Rp=0g&PR{Im}Iq5VP_jCP7 z`hw4U4nAbQ8P&x2rPaHQ1AwF-?UAesNEjg>$?{)>kTSIs4o#qYx&_)a;OCmt3*>_s z-F9b^J9UCah$<%Zp6sCd-Cb_%(pfr)D+K-#BxDg5(s*3~O?&6GR5z8XG$;9!xH!d? zkVTpigwZ}&L%4ruwhTJjONF1?Ua!et<}J%i-&D9);(uzT7eN%PWM-@DZtWH&E)v}Y zk{?pFbi#i!Hq(b;(Sji}s!V8~qoqDe$b*H1-xV%HgV97lILd==ut2Bakp^8t!lUdZ z5xLF~l*&hpdNO8@FlgH%9~-*Pw0NK2i0N0rD@dcz`wL1G8oCsyT5pyYi9-avLLuX> zFwv+i^D}C=#j{-$JaVPHV;KgU2lvFek~?4;O(dTDk(+Ta2xTk*VJ(2mlXlp31mjS? zs&GL|wLE*&Iw91MQw0rx!s6KS`*yfG)!5@+FX5yyV3n(@#*iH0GFIUz8FDg8U%u!L z<-3F#DeC1F;*6!|6!|34iYV$O~h|{~a0T7zcYQ+t}07^L-|j zm_?Xl(YAOwAW_5Fc?%fejSF1tDFZOAAH)zhlz_ZQSb;s!;6g-%;3e8dcdLShbBX8N zV{X&(<9*RAV88w)#qcVdS@@9zJ0fdH=V+PvCi;e#sB;y&oV*(no4kQ&cy`(wOP?JJ z=~F6y@3qc`FWRdTF8TeEoslY~Oe!53+iV!oHxn`(X6GgSiWd%MRd7&mo8*Y5CaWO# zm3Cu~vn8AeU0YmgeR)hCuJY6C=kcQ<`ja+rHVB>MZlvh(zx% zb#0r3J3mIZ)g^CLqZ5_3U-j_))CV;PxxVK;Dt)n5IT`m{Th%Y z6XBe)uSr+A#15R1M> zfQInRw}3O)LIG$afojgj08;~y@g01jJc$Ejf5`!QJ2&kW1YjC?A+-wSHfuBnZnrc_ z0W|q=iQ+?wm>Y$u7fv*G3V4ojbbxNOwtA%rFu{okMN*>PmyrW0Wo}?IpLoIlB>`Yc ziUQKehFz{LK;GFc5TLo!^^$?KagHIHS+|RJ#VmYj;-RsmNThZLuPEypAlv>Q76zEs zHFMVM=fd1-;&i_Od;+#;axue=UfRz9EkB0>4eIxCnE-UUAfS!ayf|kj(9}8TyG*XB|#lS7rf00xPC?S)R0P5R-LIetw04>s`0rmJ*K1DuU0)hYr zCCh0wKD0&&(1K%0pThx>WI2H8zZV!V9^fxF`MQ`mwsBHo(eThF;8i$Ks%S_;bq9d? z?&Aaoqog)-;0Z9txxl>s|52VqyCd|*1~{w&ztJopK>?;aKPCX&JI<*4a7W7m8JI{i zeTe15Eh#r(q&~@(;XW9P0vHSanlQit7`p`+s}*KQ39QvPbbv?Cnl)Ji81ivoeHP+3 z@IA=l06f*-6*(WyLOucKGRm}Y%LiGqhalu*vi3`0IcdrR*Skbl2h;&sFz_Y~$#8vo e_gA5|dt`BrACAH)!(~Xo2l7Hyu1v->=zjpWD2S^nUt(d3-p|I%n^**4}5IweG#vea%M=HN`sw)C4#vP^HULL!9Gu5-mgeRh%3P28EG*2;`vy7L z30%E2!^1ymnzwbf54LwQbeVTEWPCL?{`r9PXJ-(ZAEc-KRu1pZyB{x(F1*JJz4?5sAUnP+z--WVsR6Mux#)S~fA5w#Z<_wbfl&VjLDPz|T((_eiksAswKt z@2;=&oc0B0wLKhL#z z?d;($#l-YS(f|Bi+G+h3@E=W1Zdb#?4v_cH9o{EAe7yhjY;0G_KUc*y0B@}w^`8NN z)=q9%9nwOALXv;m|37#Bqw&9b8vLiHfQZ0<_x!IrS3M(9Yf-+Ys5FJ_Na76GJVMAE# zeCA>~G&0QV8bQ5ZUf|iPmk;ePNZFV5$W%Hy&~g&Vs7_7(Lh9=%^2Izcay@$`IcWA0 zY*Z$o(IA(gV$#~|0R`vxsRwXkMrG)yiN3J~p}@RsqX3Xzz(m~0dGf`Zyw-U>1NlI( z7B6a-T1w;1d$r~!d78{0qt|#hHh<=VeOUKKEcN|o5p+6lKmHwhyBPCNAMrzSF8*6Q_x8TG89WdbOF!<~RHsHi;_x~YY}2}OE1_x0*gktuT4i;CyQKLLDlk0irU z-|BjLqK2%7?Sa{!{+;iiy98;7O<%_&Tv&OH!N-*088)}nsJ>5njoJzlkG2J7gEuMC z#Pg#uS`~rko{&cu$8Jq)ZJ)+QPA9rQGM8kY7RZ4f?I4h0AdgkHrsG!5`;~`Uio{zY z_-&&Z9dDX2wqn%wHy5>fWpvi_(&xrI*GcFfj%2jeQ$_kZX?!zDUU(q@Y5SCzZzpiF z{Dj&+KWcR9q3fW&DteK%zd`@}IKjr>@B)7Uop4vUVUwO%p>l7?&U9xJZHs3a>V(nFz}TYcYbIWU@!SlDp&7 zYs<`&h|_Gi(rFK_T`t|iyDsUsKTZ!ce3R>qvea%qc;UMfN{z`>-}OyI@9aNP!0Y=c z)uuO)3KJKy3g>C+y8W2h!!nL`9^>*7In|QuKiQ_&`$6&74-G3DBh3e{anA$S2<}Mv zJj)DtI2C(0_juN9U5Wd{1cIJ^fd69{5xvdLwM7*MUPY}bwdm`yT0r`($*%GH-wR|l zYrRn`Mqe;W(X{9J+0$z?!>jHK&2OkNaFxkp5Xv5U^pP0T`;_(qURc*bdZ!8|;jwGA z|MX6~1e>}(b8h*_SK|RGMndW2%+aqjK&wKuIX<(_MO%*nj#z$O5~2t!RvOu}kcDYt zqPqc1u!1@{t1krDvIM2gBYk0Ier7jM3>#by`*w}ok&=WAY%u^#laz1`%N=BgsQ;`@ zW0;MV-R2sFY&5ivc<|Hp*xyfR#>4M=mVihstJV!Jzx2&W*^W4_v+Y@#1{IQL5o*Qo z(P{8Nzz}MS#d`J$|M9jOYE{nGhGC%G;p@F*9T(jwKT~?2IG)Dmb7!z60OY8Edo^dt zeS0-V+oM+k(ZAgyppdLL3kdfLEYxfDleG-+`A|R!mo67~yQik#u-9bATxf`Nxzh`| zX$<2?wTc3_?=i1Y#pJQ~RN{0M3sEHf-M?-# zoN#8D8}9mc!HKqR9AB-ruU2E3E4RW+S}k(|8HaPvn{zqS6NSiE-(`3>!m1zw@aYsp z&4NU}6WgW_^e(yKh1XckWRE1ubdk&oGmfAP^$P{7MZc|wnlzuSoYLCQ`fADph0PJ_ zHLvrF+Zw^iO^JeM^!sB%Vz}w{fH4&_^rkz==uDyMb^lt^uc?6qS|s)#r-!x0c8Q{l zG=NjIhI_2H?X=H|yIGWsQBj`S!{1%aZqq|#6Tt?g=)>wCS9`BjU)=XFCRs>SKyM)_ zJMPH5myCyRPXo#bCBsb(b}b0wx)5xk2@m})FH_Cu>A|9F->^~TzMrZ0H?Z6i#Vbs| zeH$o~r6(c`i1z1b{RORen6GiRn-Cg`<0yS=+K1YrS5V7LyCwEP9is1k#)GU*j@geI z=O!^JTNcx^KV0%JT0%$yHAHoXtceSWGo8X1#~dAf^5iQ9FEmI5e{r~c6nG~+6(ux! zluGt4>=`j~L8Ygx#pJC1fjV+u2j08y#p~`rnH`v-zhk(qTe-0$q3u!+j5G-uZ7$YH zs%TZFN)%Mvb<)|KA&;~F5U2^lU<~Rh=9k*+n%$}#hIjNGL9kl=V}AWYr!bzzF3&D{ zHN&^HBdaV~Gp=JipQ037;y=)Gf8Wu6t$KLpDtxvBY~`3Xm=^ub?m%`s-ZOSGPdoel zUVj5}q|`*arlkio45GhGH-?WbHck;cycgLVXlqq{zXZ|FriYETIoCRHI8uF%^{S?O zkb9d#qxCgq&Kygd^!ZaQtMu|fyry$s3S$Znj7pm9qQ0vB7m#nDKhSFO_p;sQmd^0` zUJHx!_}Qn-gYHzJMm`lX-B05`z=$OF$VUqD!BJ&pd*KAr(c{|4lemA_}A|GmOUwd z`)p^WA<@C|{>g^fq&c`?V4h4B47m_FBz^m_Gm@LyD>q%Pcd8c$@URGD=_b#u_Aw$zC-U^=kJR7~P>K;%_$P49I z(l#-1Z0QpzTng%uc8%}J5HIf>MmzlSA=oh4NQwQp^s(I6)j3|+1F4b_>f@QeUPTX7 zZ&WjYueC#cuKl!)7rF%!GrC9 z@*+$wC3+;g`Np*4%}FCFAhKpO6>@#id1_#u8r)os@50!cE-k zLvMlw#K~Nvjrb)00i7Xuw(gI95jjzsFkZscb}=5=TVlOlq@D7YsL79Fb}>di)Xqj1--9lEuJ)IG_{~SN?w4M6r~rrYm*e)h$YtE3ti+0Vi)W7Fm$EH3 zBDo5~w`eW_E1^DC#NGE3roEJF*s-BD_53*MGE0KbC3~we$V)o)6126?-v24hXsd;h zg!yhy6jSqC^?5gWI8xw+sAO#fMnda=G{!XTcEb+1a(&({zQaR3VwgfbBO_l=@j|`p zq??aoABY#IXD*g~qP&#`#8vA}gGtF^E~Bn-7G7v9p?h!5>{S#7VjnWQct8J+F_eNk=n<(NhI_FxVZg_FqjVSN9ZxmGV4{GPou)> zO@32Ac@?xa8D(#6;dTrhDKgAYWtACum7p$W^NyTU&LJ@!Fz&e)U$0|OmBKO$6ACDx zOm+>S+tz!}Nw0J72AB<6iAzI%htXy478Zb{`@ac}&Xb>1DRkHh3&UMPufuk9bait` z#BY>r#ZsFtl`NEH2iyNn1F%hKb8j>L>( z-*S!YueBcFOoq%}(@e_ZEPoh+{ivHm-i zCbD@%+_-~_M}CQjUUBm;YUDY+eWggvq0N9d12i$BTQm2|Zof~xuyx$_%l)>17}i(| z-)vc`;5_5zkL})U*u}K(xpfA9nw@B3s7L+DUyfG?zPHJ?vZ?E7rw8}pzB9*mYOax= zpYMZ)+ptd**(N?W!)#JI7eOrqC#+y)dh%`|8D><#diMogaC#W`#A3nJ6iWOv8*Tl5 zSsAxI0PxCpm&{@N%_9fN()8g9?X7d#7Z)Qm_9c^J`8yL<&P`w{`v8;tDvuRn@NntG zRKaGVFwmsX0~}>P*ZA~X-zPbZVMpK#;c(M^>zMCTeY;gD?kAKmjmPPt-u!iH5Kl)# z${JJqDNY@lor)H~hm5Ux#c^`K0^!$mRJL13HZ4XwmTR1uOLrIOixF|~w_UBzKhfou z#^rhp3{Lm@o@=z_91R8#p>z_bDBgJ0OM26*sJ9+3eRnu&%@^@n{9*EjM_sQcbrQD{!Y1^hcYWc?gUMvt z@BPoq{kZI8h9~D6-N0)yWv2aanqb*MP8S!0B_RER>6FzcETtl5#@Xi%k2u(NTVczq zNFBX4qs&Jy`)c<}M}sX#xuv|_D>(G73$^8`kt8HJn40E#(uuDN$2#rPOE^V^L2Kd8 zltre5LY5awoFv7F-flzPR+INjZ*|FIq_aw!sQn*oRmfMMU6M<9{ACk#bV`gdrLDr= zpVCMUmsiV5Kt>Kzk;mV((MWpryC^fe2f(NqLe5&PhkzDBzMpu=e=fPWRe^=a^9+?dA2Q zqUu&P8VoQq>O9D_bS~W$sTtKxT?woh|7_ZpY4Ym)E%d_>OKduYdk!@rUWgIHY+!$g zZ{!1%H}gm>j8%e^0(5Ak&|g*7pWdQBV75@I!#latc5!w)L7z##!6uh3?F%rUQMEE= z&soBVzHch@`z%3BfF6gsw6$5osX@Ym45MZR%RT^1t0I~s0X)_}v`GR$cZq?wDArLSxI0^*SKHB} zqj?~blD@$b9P0$8%06Y}a}@_>;)mtdZ`CxCeTk<5G6l?VnWEELjRY4Lo8?)JIKT%j zG5PFdntRNJlx({?&r`>mIn(uBQ&_tL)WMj%xD-Ka$Gn5}IggU6Oo~K3fT5aA1aXbK z3ZJ?MGN7X6=2Aqdp4o{J*ze63{809$Z2{rjUxyN3UAeMRadkfEfL5rF{=xl3DL{s> z-k@$z{?MYuQ*#$WJ~IA>lO=Dd^LREx82|g*O{H#}0v_WF?-KmaeWX9+qkP0aVj%-I-m@qGD_nM*Yedp9+ABa;0fU$$Ey4Qs~o zrlqXc#y!(H;Wqoc3dyCgboFI@1;A$`5DmTq;&RQisPvqF9Z%zYsw zp7||1=u?xp8C=31K9FPtZoYU!KG9Yp5-^?hPHcK>MPHTIQW=3fLoCYQw!CfkYtzv> zKcz@nKb8KjXwsj(@Zn-(R?n1&`SzS6^4O@Y;)tx?jTHH_Oq@ONOISAvqzc1KTz~Q0 zXghcO)C8_|F=4sF{G>Urh;zoz7AN%9Nli4HtO?7|W9Ij)Dw-pGqMwXy0x)MkSZ7ltor?!$CPBZxZ}-7zZZ6f2 z6N)=wB6+e4rgKo%&yaon$)$=Ja|PQa1PMGp^tvPP=XQ-1=G>~(&m@5Kst24&)RL>UJx-r1Y~#EUd?hQ-g#G^W=tzy1bD0XYvLPof6Uqv~>JiAE{^L z7`%sb@Pa17FF02rkGhq99YXGd#*R(|THUnjlo;_s)PqR*PZ6`;Vk_q;PeyCEcxoCN zX0tL+BFNs5FVKh+ezd)?ee1(y^^SE}W#gf@LZ+5(n42hIA{9!*G<~P^E93`pYMp!P zJ(oq%B2-zKJy69}!#%=MWo6^Xsqgnzi9)(5Cv<|LJR`VX&|c5dsQ*m{dgh5{4V{Ty z4Wo`Ht8A4`V1Q#DR2wS29pL~>7e}4f584BZCJ((iU(3TOBwr`wE~SN-G3c3@Sz4AD z4n87qC4Vjjw|CD zA12OUrOp}Az%R`3VcLpSbPddG)oRl+EhlkgTEqdhW-#EOkALS9bn3-yr>~P)X$E}3 zcWa@bMy(oESeNd@)zJSU5HWA${dIIBURF$Oe^v%>Kv3&gSb?i9c-+? z?=GH5>F)RH`%HXldwGG{t&B`cCybtMS$xR5E`b-Ki-nYvA)fLNPJfa&^d+B_bBte< zlmqoI=4}>a&}uD}1<%})xW;TY9$2Wn`CdaXr|m5(P%GY`FtDrT^}dDPuh|%1h?U~m zy}3D_+G6w(%P3^C>!*>SxV6edjupc137S3o+swo_6_=&jL!yS+h+SUjxe< zWQ0S0mBwjI0o&M?0!7yMBX8&fr#_!m(K?jf=L%3$Uyx}94P?mN8JH46n4)P#6koVL zk~k6)YO>e9u=;f5iRt104yf#1sf|5FdN+Gi6wetv+hB5}xPGItopjAvLa47kcscVL z9yDM|C>$_eP+V76w-eo^< zwBJG&(4UwVhTP{#+nSw_$!av zd_c`s?#h0hgk>$ZoXfVpn9Qt^iKYXOvv#KW->213Tzy22Z#J0{1rj`13BvoRdrhno zUAI<;Ifo9(mhJ<%EWlvD9E)7V6J%5DmT<_*ye(_1XoVE_8B|gy_a2@UezTw5_Uw&{ zyTA1qV)Nrh30cLFw_)C|6e2kUoex}1++L;DeSyAwXF_*2c+sUkkPaf*B?*2BNqYX7 zIq>tFCa;HM@xdc2gymbV6+DM&8#1sLSww z{b_OjEF*2;5uwTeJV}eq!M&p^)M3pn@8?YLqZarwA95f9o+8x98`$C+P1GFI+1H#S zn?F!7Ik};Uv$Z;7fUQ0ZeZubZeu$0_$P$X4gf`Ulwcco27ML_GD3CnmhU9jgL9SOH z9p~pXA9-Dy<-bmn{i5tanx%py1_XfY$t~ZZcpWfZlLjALi(p*Xd z8yQ6zWsZJY5%bw@+&B(t>`pOlddhvfINQ57tZ(6oo|CJSI=NZL92k%vv6l++KH6|_ zI^dFOt6?>?i%AHyId>-~Un*=oS_kZ93nE?_>jn_F zJUeVpn+z1eMT_^O(twBRWEnc0l1;LR%rGn>S&@XhL&>*Ej8(w1jSALt z{LH)a5@qTtJJGiHFEHhrlZo8ap7V6KF`Hh;%ZN;ez1+!?0N0!VVawK%Lr0uCWB(4P zDGDP)FI_ujZ;-B@)6|zV3;R-3<2zQj1T%O`I(?pW1Q;J1?S#t zK5KE`DM;;gtm@;I5bfHKP5?o;Hp+S-OOcb~^>E4ekxGlq?R@V@ZI3lOUp`|cqvm7E zr74YEsVrxmUkPq(V||~i+fHBjDdOPDTn{@ReGFt8p$|qB(E1bzJ~(sV_LI9Ktpz<( z7S~BWimi{oNqv0LZ?`b!VPt(m3hNvzr%jy#07j$%Hx6=X6@6H7SUO z#!6=74^ryNr<=A7%j#!?wm3zKzGcj6+FNq_2NZUAn)})SM&{TjV*(DIZ_F@XtFi@^ z))ZC?3!Xf*1(_PwY30W(W|{p+$zO3!+H6JY+Mkvx7#g>|kTB#O*W&=ymc34RL6}cM zR=53A0t#E)TB^la2_^7tH(LJGcWqI)#py)Z3+?VbcB+K)rX&=aBUAxlI?!FY9n~F3 z^yv+ZcS5`H@LaOYd*vx1gW9%R#>$*W{ZM2@RlO%hmwuLLD2`&o6!yNKKAtH^)W2YJ zIHNx&tyywSq182^>LgPqKiOw*$Ll#A(MGXMp*mDxa_Go`Am`hVcl1kllH3Az0P`dZrw$ufMxfbxTH$t56fGsSC3TNxkPa(xS}ify3iA;o$H zh*Uv~2f5*hTN(tdZvggJY;L|zLK6qp4$}=tXi@F! zdSyI1J2Ef|!3mfVs_XM+^z%c)k_b=wr@tvI`5zTECl{f)n14^LyA z*R~7z;`IoNqtIFy-EXuAn17VF^~N8j^Un zEyVC_$d9z?p>wIkj8#e33zB~7H^%hBQw~G)8?%5<_NhS8oMi-89Ldg(P|h@&C4{;e zQHLzebR|zHA3xgBD|tIQ9@o*;oBZC;bXsIr@a5A=3QQ*w&ZFlntLz_$O$2ICCZ*f^qV5f9p1L#7#(gcj%e@q-ui z3b5vtkeYt?whN^-(T?=}By>|n7w2`-2TItCnymd;;>}>L1?2P^Vj}59!r$#qh@lzO z+!meAs*@}r|0?T41Y6g6tsAcJ)8B|iC9Ck3X(V)67pYy5Rj>|!JM^)IMtsG%HMwwj zaR!ylHN+Kq^x#YLyMunBwAx6?BW=HFeHvL7CIf)`Z4Z;WyMdgCQnRAT641e|iD84mn4D) zP@RdP^vRPbL;Z5L4fW_j4!C3feg!Xtk^1$!HBN0oc0IAx!mZSNfl2*?a+HT=O-Aa; zSL#T5J$M~Ahnc>edRuzM9SG9%HP_^0Pt?i>gfTP=eTY7lt^-TKr?XS&6BU}~5Rvo_ zYh(1!ZK8#xQF@*Pz?PKPlp<^}-boyGd7R){{LlV&Dv(#yvRN{C24eB>J}v0+Mp@Lk z&fpP;QI#z7E}-EA8a#u=r1~Vc1C>{r1-1o~m>&8qd5`@Fol%GxVvn5GcB-L_6iCC| zf1Sk9!{d49@8%6w8)FiG*I?zQw~9n3FrCh%SJ(Ay%5v=$mENX}L>FBP9KXy=Knpm# z>ap5=6RvBS>gse>%C+LolTNAO*=nix?o*vn&TzE)vS3N=iF7kQWN%C^(v+Q?nJ$)9W`n7MyiaK{K{`VdAi6YQ}q<)vsJmX@nf!k>iD8V*sK zrVxecZD)E3&PmDE**B`5NDMrch$8EAA^s5M@G>n&xpB6?I>cXXk-ML2>mfPp4QxuyXeWTSGO9#o zvld_$=ljlm2KCf1r$%8}R|mslm$@4$ggmk&cUmX|s}(gJz3`uyDC+6i)N?bMUgGzf z0W*Eu8VB#e*F*0%o+Kqp%-WRX9VVH+0=+MGfjXf&)PVQ7S{0IFn)+W*!^6DA#Xz}h zCM`gedh=YeOau=KHe5`O{>2O}kX#U36g!&)TlsABX3Z;Wxo_M@HjTIL@q9Aw^Y#Cx z?d$xxI$d^a%uH|iA`}NN;1(a*$_EZ0!la!ThnqJE5O7=_rqt5Ba&Pd57y59O?4%?8hGr!TFn{>Tti zA5OeraeZq0)FOL(XS>w!eTJ)zsNDY6cQL{o$~18y8v6Kg$3;2F*D0RcXWuRqhSu1s z^7S1`C^)CNB#0F)XU176TvoafE#?PqKHKO`K*DO7FSCatOuZq3MJJF%ZDg7wbHqsk z#&28WHrJQ9vNmT|sEp_7(M|SEPO6T{&WO&4fYKgCD|VoFIA(S{F*AAoGG;&+&yuhi zJ}pL#{5JMkz#%uj7nZp>k!%z=WY2}g&zXNWPitmJwSL*R9FYdoiE63Bs$ekK#QAu+ z(4|OTF=p!7szKF8Rzl4|tv=(I;CE%1Ev=iNIr zZ<3$eDiX&OmQiopO)qzT@VNNJ7gg0}uUt*VK38cFlc+ApwLI*oRXVS8-(K%1xU>I( z=f|Gty@27k*abMeeR)-RAT77G5Z&an2Om$~tC+^Qu|+eK+3pOjD|0&@a!^-63#(5S zh03Z2Pteo&mJd2y_q%t?$_9|<&uWA<(5Q`f-#W^@&6H8cz-(@BUp%oY$J?#(SPmyx@OoIm ztE7^v%|%d?PhINNTYbU1=03hiJ&c;Yk^c9;rf46SVmBALTOR< zjvwb4xU1&R!~m&MdMiSBx6;V4irrp|7&nA$+Rf)}jjK$;e?y6Z-09`{G}JuCUjm%H zl{^S300Dy;0n?ID@|5}tJp+S}(wm#q%Dp#*3~L`3osca?CWR3}s>+Me%h#XpkKZ}rxs$XwV@AIx^zIkH9GT%5Z+~w^qr4o1@uc@JZFCs zPGe2^`BRB*{dp#n!=;fw(4mH&0FwVhY1N&m+PMgXL2Ve7f0hN$-qY`@5O4N1CsonF< z@fgpYvpi&hI24ddKd56c z_^_ zzXbKBO4o5{d}VUj{=jzkV{Ihe_=lq;eb|Jhvh`qN+B>C0;kcLg4S4|ftdws zFL-rfQz!IuWovFpn`BJw%jU1G`CyXo z0cCzk5(t;3?_lIu5npEC$5f2M^k~OqKJVtv9KDZ6$>_DW4Ek3{7n?W2+->@ zGohu(iWUPiR8OZkKwXng`a-M43fbJF%XzVW!UQ@Z!MkMc3n z>TfURlPaAm@l?zc$1BlAr3If9ut;V$I+$dV^ZS=f6U#cH72s2D>t4P6*~(+W zTUz%6R#|;TO{+NCbn+f@4*pj`MZL|}*2;gQwrjhjP|(_49~^(=?l<8A^^}m6z_l8D zE+zWCalu#V%v0RPwlwT$&|7qIy=1n(p*FBSM19JvXp3B(=RigLvw=hZb=9wFWxqGQ zUY!(WFe-0s611R8PN}2L6aApi6DZ*9nOrxxHxgzZC%3dzdb5{p(J~55w`O@H2r5!i=ssdre?#m4$}CJHYlTV;=S`x^FSq(#pNP&frOHfz6SI;L&FF&=9{zyp)Zp^L~t} zi+9J0`tQ4h3_}FCsz}}Ut?+zfh0N2GKhRpr{L{80TNAo(6cHqSqMYsIplI4~ys^*? z5Nh;jKGLWj=ZNc=fUm&g{k@z8X6H=y!F$FP-kcmd#!aRqYU??1JX8U4?J`&wA6QpA z&xX69wI3cDNqTKmgA|mSAYc$9309rN!flhU6%piwwX^6ikN6~0g!@IDA|=Tuy!nfc z;7JO?9;2D8wPq49pNNmSikm-?kh1kRNHh1_LM;V{&wce%RL3PEq57H$CW&4kZN1`> zb3fG#Nrf7M9UW8M;=5;h_C;>wim2A1WC}J?|KEw}{C)JS8@CZd2V(m)lC1CCVyk2&gq7)Lf*}~!=;4|k4TQ@5fy07W0lItl{rwqhGs5qUe zXH~5}(8oeT!X=}vhI46RA{2iJE?Fmvcrw1Z!0SG@uDk9{rF1*neUB)Q#3y_Q(%DVB zcU$ET$V88uBpgPl2nsBTWy)wCl}v56SF@(*Jv3ufkI_?u8P38BpGyg2TI~SACNt+9 zcx&Q{sAhojs!t1p35)Q*q>T9yfm(anY_q>VG&maZuEKt>MnVjlfZmI`5Orq&oi}~^)|Hs7QUhdopQ?FI+#wH zx}r6=D`3;*c%9HIMEkP>OZzo5GsLDc|I&sivCfZ>$oU^qa2wW`K!3m`#|rnlG1i0d z@HJl&nQ-vXSi15BJm2GraO86Lr;RoCHq7MbM6s4@20fWs7!lPyOx*sZGIwlqarRS- ztm~$}FtC#7OR6#+fn-KqTJm%EHkNsmAtiNbiOW-LN|0xBVYuf? zM*Q(*!x)0&mLWJ=@hwS=1K`k85nzhc6Wyk6=YYpOcz{OF2yncaO{!u{#XP zC=6U!U2hgyuv94d%ef}<#BRoKAnB|wE}If*VpBj23vY<7XlLKBjBcu3-`ImoJNT5a zibLFcpEzF5!3_vD&sMqrwC9TZ#egMz6OGaKR$kimU>9r1x7M3fGM6tWL>pU|Rq}e+ z`TXznn^*oxeE#n#w<1E^F~0~gW(b5bEa8Ox9m7wZpk&et*NIC8J2tC>op`{(E2_)o za=jV*PMiB*kz9#m_ZUL+x)rUjR>W^C_3eN|QR+%mQVAmcOhKRU&rOole_84eCE=Fe{d$o_8` z@xQ59wx=$WwL%=V^L=T<7*!N8e0)j|4f+C#)vMeRiEiK*MwX~qPbV*8sfOK~^EG6CD-Cgg6KfRy( zc%J`Xk6pdyikZ1)W@patd49$Kd0DY%XvAo6aB$Bg#6Nt5gM&W=zF4SFfHMuIG4w!! z&rDcYUP4%yQr_Oi*v!%h4vsd$Kv(yLI3sPho}R95cRvFin!U?MfB)c*y56wn9?IV4 z{^st~$T&^SMZ)Kch)S(+844{`7J^QKw(10iCKET=O+Y2c?MMN|}2rtmo{s^aE1vf<{A}9tw#UZ%si0b~#KM6^X0xs|AQ~M{S zMQ~FHJwyR?g6BAt8gHITfXM=$RS+OeYPAJROFu)cj>3?S{G@=8o^*mvAH+VwA&E=s z^D-)TF+MgwJ44q{*RZ=84$a1YyAD3w)`KqOc@WaIP8S9)4QdIo*OPD5EJTE_zF_MI z%3@%6U=a~IE8)Mwf89#fd>NAYu747>75|~VxtZhU;o%??1LJ)M21W|?!^6Y(Q{XSs z)O-@eHgqevG)zq=^>OO}pgmQL)Fg~$WZ-~Cg+qmdhnm450Y~t_ml*iM!68O|gF^xS zeF1zwq$2#g3V)c2_&>*3k2eY_3QI@;|0){T8yQ(UnA$kEwu6?UP5GFwp1zHfBOevjV?qD( z=f8RyLCpS7N!AX3Uki9amd7hBY|N}I|C2ZHDERR#NZt%$WU2na%nE28pbUO?ZZ`0r z`~ROS|EI+N^`zSWdGaj}*Z+R%pHy}*vKO|o0*Z9x|35wR_u>D2@$Z9Rmd7{$ zUoG)pGygdYv@<^%nB{-^j2|t&9>Wq2P7qGwgOCygelH0n5x?U6Vvs8)lSKws2niSc zf}U1Q=s8|Vs(y=T36)#Jc_?yS2m;Jrc%|Lpl8@M(@QCUJ3sB$QPg*s^rbGm;Fr(A_T(Wy(2+* z8V>jPQ4&T_S{y4Ljx%~e3IF&>MKB@x?}*aJT>LXyJ+TULne^Y>lol-!|KQx70Bx93F5zZ#rRwy{r7IfPhJD zBc0`XEobD#U2J59Wr>bu&t$dGcK_}B(%Ad5sRg;LjZeQI$?xdlM>sWI9=2vL{U*FB zGh*;?JNJrKF3B2}W}Dg)-HmFO33pKKq?x-1*KHzuc3#Q%qpEE*=c%j5%@K=JTCA~~ zc^$>)8XCpRdY1|DP1%kHlxAHlZGQ^NgGwA>^7aOfuuP|)KFgMls^3U{-qRh9VZz^7 z+y!5%zlpqEg-akYBDNpCd(eoN^PRd>F9Vm9N07^LO5@n3UQxy&U*m+nsL&EWFX*OfWu&usL-~t1HVAr}uISIo7+F*$ zt7f#hPWhF_op=RNu$$`3tG6wCH0$5ucX}QV#t|gi8{Kp|Ku>sW?C!22c^-<;v`L;M z(&mK`(q@6oS*?cg!A?^_(+8%jrG*n|K1N01*!RF7k$xN`s@etJZe~}smUHnB5x#pa zQBQ1w9iom`N}W>>GxM#JQE$2Z>`uD1%LVBUS`o2gl)EsapK#2_)|-%jzvexl**V{5 z>L;(3DD_Hu%}`V;fi`onOWUg)sh~!wo~IfWWQWTyI(7Bn(hyZ)NyqT*R!ob#qm9-J zJzFd(0c_uNE1ooVbKFj8Bc z?wYFG-+8Wm#0|BlNocpW>z;gjt?4@T?BjHC#ORG-=_rLm6E3$Y6|(Hr((Q5S?l$kM zvSPJT6{hbrRhmpYa(u#Ew{>+k3G*&M4rHdh?)wYUG-P2`GiGogT2XZig-8{4mkrB@NP zPKIj%ZBgl6{tb>d&XE^Ob&~2P-VY6y@76zL*1yas*E66q8@DfeCnm<_zKP#sE4tpx zT&o?Do3@I$VihBQ)TaRA;b@8;uC#i!Qsfuf<5ecnlrLKtHI|dnnvr<baV0MozHUXu3)e8ubXQL+PB=m*^W(?o)XBL-UUc6?_R(4&Jff4jSoQi$Y_48^zlD zMroMidt=1a%Zw!zHd$Y5STPYX#7fOAc&WsqIq&8-RKDZ#*dyv`N4;ysM(B7#K%>19 zu<~OqT%N~x*Wqv0|$okgQeZ= zt)zzKYxN)k`l4U10mN7V#yl1n#2%Ng?OD zbi1C#Z>t|Ld(>Gc=o^13;Fz@6RlbkwtFZW)uP01rIisyr#PJY@cE3-t1I2U@t$!VP z&=)Nwk#mfOW3$!4-80;4qv&mP6=FcO<8hN|aBsuH<2|U_)mP(9ujs}2c@4>UxAo3V za;{2S`Q$hzRkSEync-)-(N!ClxpsP|a8{tpRV-u8QQD-A`kb47UPh_R9!e0F!9cv! zgeUcDj#mUOQwF6kz(adrA+})cUexN82pk&e=NGB(&;qMP7YP-fk*tF!H^nKD;5`DE z;xSLMEw0Jl^e-g6a`L{H4g6Ha5y&#-rqOeCisLiPZ1r2-uQ!=PBe3dVGuW3GO{IL| z?$}`Ju!zso2)ANdWgLr~=8VEq{s;KMKOcNHD}QwRbu6BDhHb7WCXt0d)?)(;GpJzO zn@eV#baa6QhCiW#^-lT6;H4Tn0Vu=NgiQy`?67BUf_Dj~dzTvar{gL;rni4FPN=7D zR_EjO{)FUNjkeA3KkuOVdnrDq8Cf z7lmJMtYDG71}R@{^rcWct>2M<5BOeja~|QF+>kkNb0BdynC%y;D&&8Xk^Eg$z3sa6 zvLx2PJF}oNa<(Wduly+Y)A{kSh!yP{F9VVK89nmGVpWQZ%;po2gSX<&lOJ<@@BOr9 zF4Ww$8DA6_6}OkUPHq4CM8Rm&rLh9IBR!o zzuZAd%A6;#zS?r^p{0vJ*obE5Th?}MjgLGC-e+wse7F>jR8V3hxuIYnabC#N?8`Ev z3a;097g&6cgC*s2QX5Z~eBc4sSM-29x*YcN~%qz!{GW3rs~XlAgq(b1us@DZwtFG5sFWo-g+aV3ZD`HWTywO+gT zXy6f6*G$6pWm1|XQfqO#H%HeIP1N(69BhnR!!B<)mX*B`lrtL)3w7S`c;C}>gi6dc zP|9q8GITRmL3zVLiwos`jiiuZVitK@CJfy?YBkmEz65GytE#YuXY%p>xsr8-(odv$ zd64R@=wQY)q&{!5nQ1cvU(gn)3Y;IkXkyeiy6)7fyL44A5(zQE`y|C@<)k!BtHb3u zpAi$OS0d3Y``Ka9ng8_lA6t;phh73$+$B}eIYj>2V$KL@GMf;dq)?>R7n{=+c_&-u zE60Jw`h=lKxw!C^JM_wAV;~OgB#?!dje%=og?Xb_8ea8Qo<-wF*OGCZ&G7<_0uw$cr~bSV7`+0!BfZRKw6eQ&>|g8e1*ITzG8|a+Umajng2>wHtMSZ#P1aX}pV7eZ zkYLHbRf-k?>R8&%q4n2-75@yFiwK8=(SP%!4+7Fg5hk^NE!S{3V97#SWTXFQ0^9x#cYHXA7Y&F>c@kd78f-irKVF^3Bx0Ol#q=dNG>EMavZ%@710`Bz~i zRC%8_aA696^GhuS(yI8bSyF#1{Pa0$14XsV$q~}9;r|peh7_5mD9mtZXvwdgXA$K0 z=5G(kJf1guZ{k4p_k_84>L>ccjv#_wDVBy;7jrHt^|!~pW^Mdd({Hc#suo_z9t;XR zL}e$t(d+T(A;02i$drnO?G!cbC!E&1o~(|k>L`03G(9xh#L*HgcwT7v>_TRLa9Sww z2L=W%2jHV8NE@@I6@E9YcpWRAoE6br>$J1F5+)Ec92u#W>#*JzLE&{NG+wAhQkNxX z=>@_Fd-a^fCyMs)yBxnd-|EBtjm_3rUhJZtvb;QHgZss~)$Ebsby3rOq{ASeY7ZkL zV^oUQHC^)NQ$Nr3c$3u;Ie`k;=VifoEYKz;&uX|Z5+jYw52crw*2h)zZc=PHi%YkV z+oP_vjTG;5ZQ0E#rUnS|U=pwDe#3?Kg6XDOe;k{zw)Cvq~wBeBto->JQ{92 zl8E-_vkr1+7t28`u=W6)?{uKO(%}w9=@#J4T7PPcv_?fo=TPw-cT-2Eq_8MvNk?c{ z*NE)bpUC#~_HtZ1?a$UA1X6h4D)8SP3KQ|Ul@t4{K$_uEx{LMNl&Y7P^_|)`XID*n zgSZ>e0!~n#R-^v>;8SHf^gf1Bol0Hypj_fR4ZHifrBH_Dba{@X+e&AMJy7lL2_5f( z)XRQx^Zq{xrmtkM_< zw}C{xLt;~}0CL`?CD4YXv1!*i?fTSRB`|DG;sejbZxEG4M_}6tw+I4WuA<$OyW>T#2UYbPTH# z-aB((P#UFXO8*yc>u@SJJaD9`s`VJIMm@*kM2HKId3&L zukd5WO$4H5Oix5al#9p#_yDFXiW)}0Opy^_fum4hL=G0U z9<&Uzz(i2cH!MF5`Aq6Osb@Z_%fL&Hk#*_|D}2FutNQ6vZeQ4pO;f|i`9c00%f4xS zfBgdLcDCq2CM*>)S}RA4L7olLH9TA_Ns)=YHz^+JI=jX8`@OrfS&x+(O= zm6e7tDftA}4hN2tfZ&>t2N1_p&orQ$!<()?+q%DnOvSa*3Uz6#9UftTG+2UV6NM*&D;Ju=XJA}dxB{}w4P+O_rkFrH7kp(UE+>n^%G9<{?92J%m*n^sp@eMjf7|&=5RVf{Kcr^- z=x&(muYo$6;C=C7#oRl|O0W(@9wY0YM4osGawPn4$x}p;1^-)JD0_0}e9DAk3oyiH zooB4f%`sf(t*YjfSOo-{Dg@_G>&*_ipF*DgZ2yWWg8Uj)B-Aw(xU51)IZLb7_XHa8 zHtNUyNQS1(leXK=UnDf{7l8)B^2PGV>niW&&>zlcY{qWuHJJNmrnem8c8@3pHxMw% z!XP?E@2A4}&eb@v&ilC+Hecn7(c&kml06?siNbch0BKA$=-qkk9Jda7?h}lA%0N4Q znJ%^Zng3|nJK(EY8&TnBLQ#3@2xAq?o1pp{kbUx$=bF?h2%DRc$97XQ{qC#NC(PEm zL75{fD>`ZI+vyK+5U;C}u`ieh%-?S`Z*Iug%%Q_x!|@m2hWVHMsg+nY-1PQkX20av z6V4fUhI-M|j2vC-fmZ4c8o!?m3M`Q2xAK5uCU_LNAp6Y-OU_&ZUr(|&LVF!vuwsk% z%=wUWlj3rd;;%Fd`K(}JEh}V*J|%xosI2!Y6l$t8QD!1{M(Md*(lu&fPFSEP+YoE8 z-XTnmiH2+Jc^ZC(Ca>WZm)(i@V}JXjV#%u+$`c^HRD1K?oeo0!LD^p*6FO?GLP8Y(o4S%e+ZnL*y}jx zhbzZydfJq%<1Mhz)OKy%F^s`r)^~a9a(|`qWtS?p(;^xl=H*+4R*_OYK)b zH#JLii}aba5Mlg$AzO#U8@!7rqH|mVOl>TDd(fMQ^dRPsgA|@2VlQlQ!~>p^HOQRS zpGoTG6Mh>BBr}$0v}}PnoF0};uJv&YI&SnrLJ#K^;8olVyiS*(6!?97855z2zLs`vmSe%Tqb%3c6e5C8+F>#KQRe`{_?=cov^vSu1{8Z=T_um0NN?=Q1;*1CG`$ z7qYQ1q=zq4FR;9pPq4+uOMe5AdaFCl#?OOIRDL$Lyhog-RUAwru9ZNb| zMtK!6TKhdf4g~M{tKPH1Nve`mtoeEMyj~p3A+-IGn33(-K(Fj`v+hp-$f8_4cxfL! zErfah&qg%)oCTloBI95CyuuOxh9DR4l&@#)=erkx_>_jDwux(FsoQ1eywLC~gXKpE zhCGVFjNI>jFMUpNe(MlOd&8t7kj%M#exuFSHD@~;7;OEMaUdVV&C%az;9Y|7bOI>b zKQ-q3T>P7?Opp6w1)_kI#6Jxw2589RNsfO}5P!g_4Q2<4zWOV=VAMdduDkKLL= z8bM@oA~NcKl5h<>6`=@xE*<|@b5h}?B7_BpV*e}j_)!9qyJ!6iq(lJ06EV>)|9=wF z^-)5G@hQ^$Ew39$Q)d`__$NWZj}o*ineO{v32F$WBZkSaN}yzZ^xRMfeq8j)Zj$XG*OB7R$v+r0dCgPhL@D?)|*?gXaRP0y8j6 z)k!*o?I!ZoGmaIMlyK$B)h3lr61l8?+yaYB$tmQ8bSgc&RCy9|Z0)w6T9tK@2cYym ze){N|31n;n4f`s3%I!Gjwz0iN0}uHE@_30I@E!N`_sb|LNv??XzX81i zbn{WahEjZEE0y*vAcWUKdH0{MX4cl_HY;+JkJVwe8EijQiggn=;`hEi61zHV!&+-a zXOZSRM5UXAX-DsGp^8YENBs_(jEtujO#!UGXdSOBk+8Wh z`_(I}{?wuVJ%_wg)pi+=H9Q77HLw1krpxOL!CpZo(4+)b)jAl-@S}ip+?^bXll!Sh zPXQ~|Z9(wiAw<&*n{}RdHQ{WPcA1J$UEKoAyqKo@YpLt=JqD8`CwyiNGMLN5-9=t? z{|`<@>Fd+2jAcNw_5kI*`A#Df38+P>Je2~&#b%%My9(W4h;{vuXvYgIY{h!#z3CiU zQxa4x2dDqk*Sv$hJ#H^x>3`&ZxOIruZg4v@><)jKD}tciwALj`dSlSZZVz`GR; zp6y>5?T!>L3j>JuA9xSy6buDpdQ<(Uedfm(Cyg~UnNg@(h z>@tH0m+^+v#{swTaTS1Wp6lhFwf%CIEb7^u%cVV9b{ZO8La;7R+j(Dum)JNMk!YT z(}JV){FTn0mkJEk<8*Uq8y>M4^85f$2WXljSu#eKhfAeE?l~yQ3C4PQX~3_FA{U{= z4Om|RxyC(`sQv0ut~CMXZD}uaT{j>E3s;LYYlfLxFG$ItK*%QN-J>x4C>>|8HC2{f zZaMYQx^9oF#p9?uf;toM0t{z}VU?`m1jNCh-@>4jxFqYzwxI%XWmfEp%ICwwA8VEa z84Pdss#IY&Qzj|VI^K6)ROx-Y3f6gG`lS?857cEhAiiWLUpXNFQU&GnF8}UREz~KOg zH^k7=(lP-CsfL^Q$RP3<;&R-ydekZ9;3?zh6p1XR6fWb#o4bnz#DgsYZ4U*ya=`!d zk^~liT=OUzK@VHmDUR~4YtgDdt!64eYHC_~(#&kL(DXUzGt})RcQU9G;_d@IW&Q&b zF}P5xuJefm&3N)^-rS%hk&l7nX9afaanFl6)eu`DOq!GZxjOVHB)5-Vm@w@GPkBAa zuf=cPLuOHJ-=2Mc6nG+S;*8yCCQn7&0Fys2nN}2Et^TZoK&Klp{NGTE2FrU9Mvvzx zidi?^IlpFqG#kl)nZ#FM6`MP3;zQCvsRb9|TH38GtA;1wqbUVMt@!~{=t09paxTSb zqn&UIn(q(`emmeIQa}2#w$e=zUnzmWwi(1NcFg=Vm*vh(6zhz2ddv&8XQmnU#?kWQLh1E`}W$^CVzKuRMD$Ggh0PwO>%E^(!I=>1U|jqv%6!6DEF!l_BsG zrAz~iNo`ZjJr5CP`qAbJR9boPV@g{hzxgPw5luTPI9TeZ2iH{(BkyoeUthj1J5++0 z`fY-6wgsRh6<`|B8DIz_@#(68ZOe2e+gE916Mum;t7h$`q+Ou_8>-I1Xr*Ok(aP;n z$$Paa(i#vA-k=|`zm6>XTDya*c7I3#?wk)UFxCbnr~*#nf~TQD78TKbSv1RLBd0%x z(^Qxg)mD5mazJ-E-mA^z&Td>uqQKvK(pMh{<1&u&Mc<&?GQjtq?R1YBx+ zzzgmN4bktwIGFsGx}4Q*eo7^>#`764$pD0|O#(DL2g5jOzcvPR!ll+U_~v$$@9#v1 zSmiPztdf@910a_djwlziqXnXuhreq&Fs^&ESl=#pEw#(StF`fux5iI((b7*7(=p zh*MjgOTL}f?$h4vkoYQ$d3R#6f`i5zS#tMXHnO+QZ`W`J4TFo9!dz{nON7$ulGeXk zT+ga_?^kCzG?gZ_Ztv_@2DJD)>#6M&kL^{j&Bc9vq3eZ&nMb;0JeXV%#pz}Rsn)e4 z6g4-+g`^^a*O}%p$>8D`^-9t0<2c0HI%j81QarOjNd6fl-|6^4xP*NAUqd`z^3^v! z5&7 >?8c>M+`dg)U0Yde!Q<<2>*2jgDeigxEhQ^a+UFdLw%4{3Kb7sV?TrZR@LV zejcWq^T|AnZx#{!ooh)PnbVOjsT=;?Rmec+QBb_@v3> z37fFj?Y^1Xxb9gy)!cf2f@*gqQwoT3ynKG&vZXvb;lU@ZCKEk~6YJ1qNL1o#_uHB-ksC^MQ!IB@E5yraqUZ_RM3sCN`UY4f(zHT|*7czAz}@@DX9<0T!XL8X4nU80K2ADG+WO=eT zfTF}l(-V57lAwP-e-ol-LpEht+q=(qVPR5RMoh!vbw*B;%uR7!6%a3D4E$u?%7~2s zKlvxlYOnl4NkKY55GVH&N!kc&G}e9AsiWr1P!YLr^#_^9MvmNy9i%kQawn$fe7|vp zWb!ODrECpn3Cnrkh}LU%V|p2{y-&s4%hgurgrRO`!CkKI?snjdTAO)L=&Nx7)pEV6gK3%mj#{<w`9b%mEcNg(GkfX7%4EQc^!)|Gh>S5$w7rBJww*BMlH5|pjxc&A7 zB(;~;y?GijH;*%s?Yx8HRKwEpl~u1m79=l0DhEN103*1R4ebL9j>B6>3Q6AcAvp8e zyndsiEvMe&2thE?q2vNv7b%WhRC6(*t3e}CO6xo@4I#8~2)aETMMcIeZB4ZHI{skjHiBb}Q zILi^BuHQocYE5xUJA|I!IdrZej7RAT|2V_&&mn>#9~Xs48dmTSEFr!wu}6(A$}WJZ zs<@CaeuY7wg1HfrU8K5>eK5N6h2gSogYZsMnMo%de3S$qMUrwS6Vt|^e|cY@g5EaG zqWzn*ehz->sQN=Md8JJI_v~D9F3Y>uJFYRNWSPDuR{0mSq>AayLzIWIGeQHs4^UEj z|Laro%2R4!^IU^$X?3S~74&y%g8TsXm7hZ+AF)Rwnw7ky7BRXX#4DR(4hkm@>rw)2*Hy!A; z-&kk|5_vdi)sP?l)J{pf{Ko^TqPIediPwdDx>FR|Y(>d@hAjpk3c1KTevv?zo#LBk z=N29OjgU92-D%ljS3Z!1-Zs^adR~vM^20S&k65yWg~GxCmBwF2fiTegY4IEYEb!Cu zzg^nMb+~eL9qv%f-f+QqY#8PGm_RNCyxy$=#klLBYj7Ug-iVgUh^tk;3l93sSronP zt6&zxrL!j{3^w{&hH`_j!2nTETXD#vWyvR+ z_MsCU!{S-^#B9euc>S|%3%-)D<6^G`0_ZvzRYse8m_jcK&o7;(Q;_4PE)zu~!RLdf zl^OWUP=5Y7|G}-+cnG~*o42mja!y8SB4EU2Q^4*)l!UiGl&4gbjISla7*Q7$SN)xsR$7wA0 zrd7^?##ResHG<(*#J@N%7bDxbK}_lWdfZ%fJ*3w*pgk>;bMb4iOsPUnV=5zRP~~9J zcqOOinoMS|kHyldHf9+6lA)+RJ&KKg4?5@JtNGh_KkM?6rot@4#bW^Pgnv>KQO9B= zAtTOkYX=z3dX2+a@87-)HfLLIPp6{&LW{`_?(4lA2RE)@W-}pG9#1WAc`T;+pfHn) zB35sumx^BfekrV8^70u7bu#_1>EW)ZRCIBqP(BcH*yb0{9`K1jm>!trVJN+T{RXr` z<+Td0sH~ddw-5~Zlq@%SWcFJVDY=7$-2xOVBeu2Iec7gLzJff9y5t?93X{J(RxPcn z95x055u=`S75j|1dt125&rkkDNcq|R%Gx!HTPVwKt$SXXA&a9VnQi<=&Dma9r z%pG_#(MS{8U0f=cJjU62mPmtqa=&v}8HVwNmdp^5pHHWKdGR)PLhmk=u%Qiu$k6zr z^BIoK=I^u;(`q4GoDWX^VS`orQP21%Tk$gNgAo>7H^?di-iML%r3WrhB^P+8`THMm zcO{UE&f6Aa>J3qoHkv~FNiDZ>K0m$PP{pdOM|$lycRowwAg!S1Xzn2YDyuT6A9}dx z7eBFD>;<1By1W0i5{`f-S!XI^JY^suMS9N!l(n7Q>D*RZ=Foyn&>q?4fR%NFO)dIs zfJ%C2(vvO1E$pe>aR9|2>(wa(ujs9<*M%C@6xUICk92v`l%Z;+jwIeYG?X&>%B^-< z!kLPtCHQQYq1GzrSVr~q!mWox`Ew14!n+Zt4_Fj|PpM@uM9<}C;}E~rXof`&^$M%S z;VoINo%9Mw8$c*`=6>6*e04Q?BMolYqZoEdS#iM~Cp2rR^>zKYdxgotOnU5#T{WMC zanidO2=j zT@JhW%(lfbiQkG_y$-6ti*s(acGCmKBbCiHSo&@XmcCYPG~L?9qI^+qwxbWm(QWk0 zL>n&xqW8I+LILCM@;oy4Ii@LIMsmtm(%=&Ow$&F_CNwq5OKy@I&3d1N+B(o2tCO6k zCFXYDLD^IIJ!}7j6juW*rdxgnKm|m9%Ik+?kH5qeMHS~I8nB_hN#=9Uh5j}O6AN?*GM+O)T(u8=F=7 z>*i>4BAOzzbiVv%oV6`)-&}g=^YNW!I-R)FTNu=$I4+o&Q_=|(P7vHav_9NF5<|d3 z(zF11rx!tkzq*tbkn^hQq_na^tGzAMOEFtkdE}{DANPbhHvp*Y#)&%)obm;E)}MLe z0me(zb9`C7Q@5VivA;w~%U|-PB3rFnBU(&v zk~KKFgw4^k?QK*=@TrU$kUu{OxVyPf&6_`x|BQg8$Y15*85+T@QUFi{vc<#h&7a{L zXA0bUO@gv}cP50#w?vIXZd){iCiomdY9+HpIsz5Hk%F9MdH3FOQtTvs`doqFkk9(Y zO$)q+{yjOzgB4!b&R~s)@xx^?7R+E}t3PkSrs?!8g(6?v@$#Dm&u3V`prI0RjQVX| zk3LYJZ)HVLI#gKlo_sujf53&5wJ9|887a(1Ab8lO;Y_6>1|eu_N%Rlcy#m8Q)eQPzCJS$1#M&ie;UcWILw3`Ks8#)h-dVy#)-5yR7QTU`CD^_oCkQ&)OiSjWh{s12BfckPc(q=5Cy+GoR$}_+Lap*)1vhAGmyQ6dP@ zVxKP@*Gf!aIWGl~trv5f5R4Ajfhd-bxhQafGmq7nJ6zBdd0)#Pmo^^$&pw?;JKf{y zE8*;KDvQ^>?;ClRME-`ED1ClE(uRuH#Oj-otdxI)OW}f=Nbkd%S0Vz#iZ)%uN_YwR z8{#Enw@(j=k@%&3$x;r8P#>>_7E89m&G@UjfKw6Y-l z#w&~ya3e|RAi}a@T)?~F$h5?xp7%fbAcwjD4H!0Eg1!)!46udM#UH}9i%(+ao7-8m zx?7T0Cy&tG!*?L^tCt|6b7~g5Ms}zTauYy!ZF59i{-os^Yj*xhC}9B|99&i`m{e;m zkMNXt`xJBGUu3y8Vb0ob2SAt|zJfGdd7mGs2guhZX%RKDLT%4E8auAOW)*}Q^Q82j ztq|etJ4A{%tmJ+CV^yEM^>F#|M{=1X`T(}%m*#jbH>iC(SM;T5h4V^Rn5vFp+r$^? zBgaWdn48?elV`-g`h~;!hd-+mrTqF@>i44a8|J$%o!`UWw3c7nz9CO;sCRwAc;_)- z1B;?FA9=C6?Wa&XKZ$5oLl%{9tT)}wPs>*YzTjzm%LNcz6|N{CQtL-kk`fU)^mfVp zoVNF^$p)JSS%DpwbBouG7kKWtVS_7P=!_q>rCSfg8O#ZocZKKEMbL{N_m5#tA7Tm0 zJv2?5(|N$jTrs&xY0`$|0lf}lX$%JfY)YQ3M?e5dwK(kq5Xs`@S^A1I+KndJ&Z0f~ z!^c&V!7iAUZMnnbA)McNs?`(%V6dvZ;3ZP;N#*YKP=R|0o^05Jx>Wg zgQq_~v7@Wv1%x0Bhkr^Orx}zs0C5+k@KlI4kDeE>JUG2Q&m5=b?t6F=QrgztiE<&s zP&|GLL zq_(tvYiq}=3osYxJ5DDJ!g@ZL+&eF~2l!s3Tg}v7^&HiGyVX|;!KR8r%R;ooq;anX z;ya>Qaw*J!7e65|$U={+G>n_CdkoX{D-Utj9qWLSn4atPScC*kVH-U=;F<4$ziPLz z(G7C;4ITXY6lWFSdKHt1ZSGs{AJLV2ZGrzr+_p638X76}G!P8^SUmixE;VHSC=HkK zXDexm`zir0*74o&$d+3eVT-oMQHO7hM*exHc5J_p60v`OZesW)54TJYaO$-3nr4uOHdb)BQP(TIW4t z93mUH690joQlnlaGCg?WMCPKDOhIJZ`;)v3RxtL0l9(4e_Po*oq3f5fYP%IAhAHfY zx&{W(wM|^T5M;7H)88uuqNHgLd1LzDnUx{U+9y^2AT%h))a$#l;e zguwX4V+9%$xQzQdkPfrt5ucvHLDiygKkQ=DAu7%{VV=8&U>pNqbHT!zVED zPMf4b!;`mTyxJ6PjgxV1hYk>AEX8NQmSC^>deKKz!t4#eb8z(*0XWA=>^YCE3v;^l zDLH2{uhoU?=(FWH_S=Cp!|s?jGrdbjPPNp9-??wxh@w}9|Weh zuH!;=rvJ+_hbr72$1Rs#w&ouUkpRFE6YJ9^Q~%KnxlBI4X-<`zNVKe;vakHT>G_+# zbO%vFSeH8glYh88FsTrMqG?Wvr{1d3{#n+1e#ioBN7e*u?|*w@<*6UD?>09|`)@Tg z2LY_a5A8Naia+a}V8|-~^`Op+_WRGr^=k`2F)ZAkm3jPEGG`>Pn;;}#1wZhQzbiEh zAU%qL-PUrkY7G4T)JWxV1M{7NFURiH~QkKflz%U5CKAaP8d z)#p4{tKW@)Nfd8+dYcO`-)c*_J8q}Tk3gIDQMiLoe+%0K%m@tNO}3BM%-A2n_*ek8 zuYZK?k2f>IV9DglC>8s6fbQFGva(u_0H8Pf@pu!78_d16+mpfAhuaN-;R*{? zp^Wzz!1uchAuwxDRL6lpV^ZI69_Df~?wib=LwyHlw644;fJj__jA0E@`3pR-hV z>AiZft`9q&u+PrWpG^=zAZMNm>l)$R)Uw{&1660Tg#*HNWcIF5G6qzjy{whw7zeDg-^=sn*} zNu}M8y^PrZ!==Q~neNtxaDoaSw_p%6rOEu=D^M*m)7eeDwmVspp&O+iI8ms@8*N>$ zDX$9AZRIo{6$kJZey7j}d1J+!KF95;bxA2n!`&=}i{rK4vAbVw2G`V*Wbw;-NahXz zNOyy^RuVbze`;A|ji}uS097RI=A9fp;2LS693b%%94|>8u32{Q@KBK&?m7h2wTfH9L4(7<0+V~xTIER z?NhKfYdRPpq?C9&INF^l06sE?{Pr;4btQybscUmoQ7$?-7^7s&>i1*kR61Kpu~=Rm zGRE_{S8kW5ZAJ@qAa>M0vPy|G!JAV+%QI{3=-oyk@7rLq{nAL_vC!o=^m&L<9t+NRd!fI0{k%NDz=NT{!d-x|9S6 z(h&nlZz>%OCET4OjQ_s>Z+GPB%Stk`zrFU}YtA+21=@^>RjOQ9{Q#k>{@ z;IVaUK-EpY9%77Nb#q9&+#gXGf(Sd?TA$nO);`}7#?6+VUT)ol4Eze5R%1bni3<~; zk3Nn8VKzJ{4U1OAS37)5?zQT3Vb`~wrcew>pY3d8TM!U@>00$wZHLeMLBDJpW+eC2;19cTz~04%LV{iQg7NL_jk zsCFh-lE+WmAEF~6 z(zf8`AjG5TXx9P`Sl{a$4?tVdY#w%>3d8LhJKsihP_;KcnSkD!`D9W3i6NxcCLa6K z=GOo|Fv|Hp391CuL1$SjSbTMrd{GlD<=+bn4mA+^C@;S9CCjDgTr{zjckrmSA35^huuAb`%r3$(6o ziCfZ7&Q);!26X?^u~(srOGPaiyt&p9v~jFWP#VTQF(uoX+V1Q=SBG`&&H%dky}I-R zs%h{2NzW4DrYUr_((ahu@Zo{X)bm+Z`v_-bk?YT%kx$k1zdTz^Z^N?mWTz?8V3_!e zXDzC_>@_C%&hf&~{2R^6Yg~$0GLL!T=npXY#h%5`leW7u3^B%`t%tVy(e*FOvG>|u zsmyj3x{&b*E~4%c5kzwl#{se=+=HcFgq&fL*TF3XH}k#1*bGbRETOe&W^G;v4^T2H zP_%vO*^U5Y=^|p%qP}0ID+L6vxChU)w9zgo%$?Cud&`~!l@!;WF#*R5L~cP|h&*5$ z*}x4gXQZInTS67QbZl;T$@j!%J+CXj@|m6YZN5=%!7_#LJ7r3GF0-FsrU!qn0lY54nv&#NImT{?vzW@qT{{V$$nY)r*NLt>OI|Mr=TWY;S$@TLZpYE2>OoJ zLbG@D#Vqo&urQ3$NZ5bvcbmfZHjt7qdN$-?u;Hb`W{}V1+rz12QtpEG4i#J0!#JIr zP~qUVbBvIu{|x*Fw7DR@b4GFtzqbiuSJ{2Rlr(g-o51=|0G1L$6cT1@UE-uONt`ID z{>0c`;98^{cK!^n2YQxAri<9F0va{;NmdXhm3y>=vSC^?SyRcts<<^=2g5)$C};X1 z3lrlFm`cY{5kz9b8E1~~hv=^`=M1Fe3twfq*7Hzo7wi-H%G-8a zV8)N@*SD-Fs8+{Yj$CM=N~%yM@bFV7KS8<@mv3)=TqC(^_W{bnD}>Eix#|h^D$GmG zbE$j^FTRl07b2^516EDDZ<6n6VT*2P#NRRv;`43cFTY?nlKuOM^AgZM9sns-vN+=k z8;<5u1PnDTj-V+Avur<7mSK#Z>SWqgw1yRFD($L!#5@WqV$!!MOj^+sW=zZ z6uDisr+((vqQ^xS1|&-U*5jEA_coY0??IjHGv>}_kTJN@DJ&@V5lZt0fwLgbB=i7H z9WawZXFj%0eP(w`8i(Jnk3#7aC~GJQZo>CsjTmQry$f9FSC^cuDH1+52YTAoQb~#E z)WIZP#~O`YPE+M;IN>GJ4XOB4Lc+PP8f#sa5qJ|T(=!dY36p*Ra6Vbl_g?@CfSJme zJCz3C_g7UaOQT@+C!l966ks{=2`?>5XV0I!_4mC$I0$qwoS^}> zfR^RdBtD=82>y#}lGy$Qfqzl+ku!&$${Ny~)Y%C@ZSEl@aq=q~mjKi_=bp`UT0?-k zV#e{|3EGO`1aKgBT0`ixHU(;@_TJAYhsq-dz{ju5(p6NsIscw}6D>W=3u$4*fse5uih+1f9r#fqXCpN`+?| z`5im0G2WPQY-QWdFqL9HH>O!Bx(TJc%%ppkFXkdy+>*ge2HpB<8A2~kzFZ&= z@DaxEzZ3>QY)F52i^pJKN|?ic_S0G|+!N{U%Hv7bk)#M3zoxT1Qk?BuFKzhF%*@(! zgMRdgb*my}X&retJ`LjPhAzWc3jG?pi(|jF?Vms8P%9S|q%PzsB(o*s6t5g^F$#{Cs1X_-5vCH?MEYb+C2?8~8%xyJzcMFVMs)YZ_vCax zv~3W`>3xqw9q+-2^JS7is?t67hVASjqE}d5)!}Y9crCmndvZ*@!63(d>L?ZSK)6iv zn#}V(6D-GGykWkB-t7?(7r%2o_xCv=^>)`o91Qz`m?Kn)-Bs(K#m*l$=&?8LM-BxZfxU~Bi9-pS$L}X) z3~}r?4JDH&{FCgDcat~W%YDu-I#HeVOxafe)O=t7^s!632+IE`eX+eZWeqq^l$Zkm zXF-`gmLd1`lP6hXnDx+`PY5tPU??VzHj%&pwM$|VN}93qU(O-#B8s#k93627YfWMw zeKn$i%nSN4f??ZBN3^+qy0CLxe}^BHliB-(pMq7wLY`M6A>k=vwVpw7hw>${k*J44 zPNXU&dCeG*Xfueg9_}6EY`A@ zvr`i)RS5&{dL7!65;Yp!95p667_&h99Hz|`<&X)7fJm&Y zA(G+T1b{xhP9ze^0J3)eoy8oGT@a5?m4_$^{x;HAG)b*LRa@gitVMoeJpyz1bBhjCye^uuvv#_<;g`RKRi7sw21ePF z8XlDk<{FhP5V~`+JsRhxJR4SoU%sh^E5DNRx;gSp#H_2`!j%_D$T1`d1}%iXLftwB z?Z`X#pKa&QN*8Bo%F_)H8qa+mpC`rwZK}Ko*d&9_LQ?ex0C)v!DR&zD_!MwoXafYu z(4(4A1PVE~u%Pu}@Y-i?OMuH5@|&phE*8Q7NS@5mIJ5bq{sQj&m7sf&?)(MCy_&ocSZfKx=&r|Lugq{PL2IWLiTh`C$$!o$>EwS8z;dRC}os;8`b@bk> zOxfe_Nrvw%1X!xptpji<3+~v;HZjzIYgLrhBG&ON8}VTUc?XRMFeTCfHF)#N$6!D` zZuSG`hBs~pyhMehMu0OK+eweJ?`T_975_TrzgoPxHx)z));%`Y3FhB6w>rk7SiepEHhptpz!!`!L0GGyAM z;a=}(MfJ{@O)F!W?c7n>Mrkis-oD+hM8XyBu5mj`EGn7%oxgR^^_>TSdSxVYn*p^yvh|qb_#j@95+D%1}Tv@(FT%C4L*Q*s!-Uv(ejAk(aB|^@Dm}= zFEtr+O(ol`~b9zJi&vYIVoZFGSNG7}I_RGLS6HpOan}-ClbN5ByDyI$Cr?ZOyaZK(;-5@D5{U zohJzSTykhot%)y6b2#c3z`n6H(<*Og6&kD&dOU)2FsyO?Ml+d1$Dz6V#sO8CPAIZ2 z8y>+g`Fp$)-=}1GUku%}hx@fuqJjqJfgnGo8xP_F)U-OrpRV5Nx3Y_u?Ri!5tvq}V ze_(~HnlODzg7d7_?J)HWB19h)#NE6qm2&xEpgO$d*E5W{+5Jw5YP-My{GL<}b}v!; zpK^Eltwr(v(c>AFtd#NZ65cDuwSbgA`?FJtnRQ_0kA~`rfin&bJ0r;=Y~fr!=rvAX z`g;4$Z-9x(ey%IFV9)~~4!Z%$WG>!F&tT+bI_68$E`3*#qN;;t8$(yBq~`m`<20L> zb^Bd$_OlW|hM{dBGglU@rc5olw~ejXQN+8KTb_hI=jPR?d&8was=mPP`muv-M2Mtm zNi0UlO;7^NiEyYhWZozPza79!8l9pGSs1+Y#S^*Jn{zOt_tR&h%t*U$lgB_#H z&hwUsKil^!2x8#>kk*Wfl9#2OS;2Pb9izZ_4R##Ir_$92$dj%uJZXnC#TFxYX zk^d5zZz=qoAzYYw0MO#|0QtlKV=67ZL_58t(X1QH>n=n00dkhjbwLkl@m@dq`YT0$ z?0b>`c10!Xof_U5CTAU(+3F&@q>;b3Ssul(@=JL8DN{|kGDf)R9~Xu1^jIP>0BbI5 zO;hh>X1n@)3m)mR;lnk&YP_#pB~>u8HMIYJ>Yp0d0HN-l_?^Ig$XbzHQ%5MX+hA2@ zk6bx;&j`Wif9O;;0&ki4z8s#D-gnv1yd-4kXvwOQr+B))q>CM)8nA2IlwaCj{0+*x zI4qGQi#>8Lxakh1aSqr{;6#uV_9iqL_#d3Vh6kbhq@D|rgTft~-L zWD5bsXtx*iF&iECcy$SeIAVc|zfFz_gnH#wIFIU0x1`AQER#J|=J4A#&B1I{%y^5- zWJBkVX8^r3JR@ZZYXFh~l_Ci{p*JlsXz?`0CSRrF!}7>0Qfe%smU$06+g2R`(tPW6 zuXbfBfH_><&b-@1Fv-0+Jle~~t8;5iBNZJcLew=TSkn^K+?s?7L0mk5{>r1~f{}pc zZnTo-*AWqi9ox=`Z6!H=X3ugspo}MdgEKcGtADNNQ$F(9YR4apBy*$p{eLV)Vy11V zn+2s1)0R$~@#SR%zg$+)tUQ>s4?$HLx@P7)x=rE$FMf05I}Uo5Z-$jVZ0by4jd$Da zNm@~GJCrgsEom&ey}~3U|LdkV-QfAJQ*P!p#+J7og7>;wnOh>CY+Ae+?u)*ESKbTB5Ca}k>QmG>6V%4>pkViv;oV*@Kmt=GXdXr@m z$s#tjNVbeg>QMu0|7CDXnosoY{X8$P+uJY9n)vlU6p<>XfTXOeQvJy@%cZh)*4%@m zM>Dp}{(!M`Xw`LRHPNEc%lE2gvo24TQ8EZeU?nVObwX8M={_M_EnUV+ZTA_XZ^hq1 z_v+wQh7(XMB3y&S0U8>Lwa`S@VdaLBlzB|!IU|1uXc0lw^T8FIyP7_d*BCQtGE+2z zf4ZRj!nCTs`|_<17HS3f+9b__E<;gjzUW}H+=u^UV&(kDMQ^HQa$sXQ$i+Nk{(wBhC8KaG4dd3WdEj5d=h z|D;pkC=Tp;%9Lk-PSCM296+}wRgcmCJLAB{s;o4(7z84voq2kgF?R(2w1_++B0`rS zapA-WafU%02rtmfp`PeTynOhj`VzaLWwjC!JzZnP>AoPU&KgM~so$cu*kcYp~ z*!L@L5iYc(6WD=60PkD*6rgr@@UKz3u z@bIeieS#HDRM4rrq@FGG_KQ9Z^pRX96Izh6@ceU|Ysk^72PYK?+ zRc8AF7b(>9e(KwjI_PA8CuE4>JC#D^bHI-Br-O#d07(Oe37zId8)^gf|MWPIe8F!Z z3*>M1gpHF)6imUu*L>MG^sg(YUAgfBXsE+|#QW2R^8gK}I3o!?y*MubH7*^0^Ynz> w1x^_CS$nUOKIdHo>V&(gPN!iOp%f&gG+8_Jleg!W$kFqfs(SZ6Dcgkp2QdcjDgXcg literal 0 HcmV?d00001 diff --git a/pictures/ssh0-formathdd.png b/pictures/ssh0-formathdd.png new file mode 100644 index 0000000000000000000000000000000000000000..7fa78a12ec1bbbeda1bfd8065d8a845f8fa08a13 GIT binary patch literal 20121 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 Ic|738-zoqmkpKVy literal 0 HcmV?d00001 diff --git a/pictures/ssh0-welcome2.png b/pictures/ssh0-welcome2.png index add63d76c5d7a35298a05324d4fbcf2fb5f485e7..61c389ea44cbdecd8938243b70046e7b4c12b16f 100644 GIT binary patch literal 22888 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 V4O1yeCW4+`4mQq*Dc1gJ{{iSX<_-V= literal 0 HcmV?d00001 diff --git a/pictures/ssh1-layer2.png b/pictures/ssh1-layer2.png new file mode 100644 index 0000000000000000000000000000000000000000..7ff50c2d698331c0110c6f0b87251458e38ccc1d GIT binary patch literal 19692 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 literal 17748 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 diff --git a/pictures/ssh1-oldnew.png b/pictures/ssh1-oldnew.png new file mode 100644 index 0000000000000000000000000000000000000000..30ad63db18ba61299f8a88548a9aa61c1623962f GIT binary patch literal 16917 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 H!>9iP>0+1$ literal 0 HcmV?d00001 diff --git a/pictures/ssh2-passwords.png b/pictures/ssh2-passwords.png index ca71b95091366e43aa20941bad88cf91383878b3..f526c06666a5dcee4c344dedb08f191cd5edba1d 100644 GIT binary patch literal 27326 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 E1I#co0RR91 diff --git a/pictures/ssh4-scripts.png b/pictures/ssh4-scripts.png index 585df104f14abd571a564e2c82f3a17693c0c469..d7d0a912a532c6d25ee253607b29d6fd1973c35e 100644 GIT binary patch literal 10106 zcmb_?by(F+^EV*f(jetQ8V}telF}jF-F4tlQX(Q9(v5(KN_R@bp;PHbK)M7eI%}*^y==eHug@|NJuPiEzQh`o^i1BnVXxL^$oMLV!L~5hKEOMngtEC z_tOuy54ZQdOGq;^TA?6Zxu?~MRG`sO?84L^H5FD|*Rr*qots5Qs7H3>_7?NQ z3zGKa1cNNx_qRwe3-_lQSoiK(qQsXPnP?(e)FaJ8WF_U1XL%*};Fx}R;n}F>bV$Wm zSnlXm1{x^&*{3*cQ9P5p ziX_y*50gHxq^Fh?6_{C>S@pFeVY`O!G$Y5m`Lo6lMxkDrB5+BVFe|A7(cds|Qc^q$ zxo;7vii_({KuO`HMfQk{v6H6#BBoGicm}hR?6$kTo%j0o_OK8aSE>gWH<#h|_BQb+ z_@I7Q^59+ot;l@u?){TSYPsw9^trTx0{DJz>27W9;$i0sZwU#(1FWX(we;Y6D#{|3 zuFg<%D_09^sE@PT-4G-(9}z%0Tf@!ieVmu^8gtV+(JTPfA#;r zTK+BZKSt{Pdn7N{{}}lnE&qF@wuiO5w5u}^377b{XZ{xZpN)SH6yv;``F~jAA7=jR zEwHl$wixHXd?taduQ9rUgv3yzAoEnq2YEjmqlWa`Ss1}g{`gEK1e0x?g8v*kHWLs2s?we8!j% zdX&P4^r1Q#ACl++t!dYU4%!r@C9zBSR9K$^`u!Lj4-8Iv^OD5CK11^rpr7S!QxPKH zXTd{et(o8}M7@uEKTQz7L))^sTXwqv6ZEixa9Np2aI*AE4SwZN{ZFmWBnMB<7~+SKHM7!9QS8HF`CD@4AU8<1~YU+v0V)xS!YV1{eIt z*wpV9FCu+Amg*dFzfEn74R#cWx)h3Wvlst?>&?Zn&DW0_jY{b=QjYfa+>=FWqhF-h zB!MJqRCGM5uX6E?9$R&n*@!q9G6PyPcD4Ip-X8^lLNAE51A)P43tm3$Fw1Z0Oe7EbO=i^E|4e%TtWIuKNN5yc?uN4 z9AJ|Mx)TCFhMMU-1p3Jm#!Ioksv5X+*K6RxhiTg3K=OT{UgWzH9^hZ>JNN%rSrc7K zCx##(8B*5alD=54X~Z@e?IEE|7;(OPjLR7f7$!D4Dtr)Ol=~wxT5xH$!8T^_#We)%Li41&^K)c z(sS_Il!8-Hj9@9!Irj1v3uwa%O4o4b`F{O!olg5oN66#HO&*p(74IajelS$8yu!)& z@@r{+uW7ezbEmjmU|DA^)zC%Qku?BF-;9^W=l0vH46CJ;i=%bU@!h06owd!K%_JB^ zQDV#5LeK>*%<(9D8TqV+Zsy+J6s6nd_zt~9zBiQPcQ8veioac{9{79LG?P?EFHbw~ zetkEQQd()<+yGn6s0>V*S`ekovLGe&%Wsn zGo~6@*bJqarx>{_c#J*8m|X`VKK#DZZvN&nEL7pw-pL@8S5FJZbCK3K)Omu&{4#z! z)$#Yl&+SP>%h{BnKm_L~9}g~_#KMvM#q4OH4Yc*bqWSR8+pU>O%i-_+iOvr+QmaQq z23vrWHj|#KRu=UXMy+8jPpXOzfB14Tz`lRf^<`RRIi08H!z>IzQz~Vy z%tXPo;2x!|c@G00msY@IYlPp_|2R|_3?4RcEVb4#_SAlGICxqf^t)JFhJ`!n`-teF zQ?h{0azAsf6PbyRxyRLZ(fmzc*a3+zLuO*KRBy}!+ZX41_O6nqz7jU7X+oDqVw3x> zt(PD4ZL>Z1@*2b@2P(d5Dy8R1hZ#5?WqU8ddg@#%BexH7g8p1?evO=%b*dhAq9#ae zfVVacrSl>NLU_JYiL8Y)?9KdmABk2rc8Nvud5jv$QDhk_+-sJeXGZI{$L-g(q^UuB zec09}yz{XDS52h}-f{Fz*HoWTM$mGYf4YYJk=nxbLG$Ps4Hb`7xQgKI&FQ=qOK^i& zqEPgJsm#&3?}g81a=0&2Dwo9mO$uC>N}KO~z6qmgkvaB0YU+_gcskUymU zSzMqN zPZ9i5B28{E^AJ3NipZBfB#_lV*N1{YrSe&esKooU2kT( z&eR4&aZ<1ZjfA49_y-m|r;Rt?%F|XxqHXLB68D6me=Pf9CC`Re`Kjt$Cs@zvMFL)OV< z{EM2jVz|6NceieL>f(ynZO7g{b(!WF@tY{9<=X$QxPmCIQSEWFEJ&kRx8MkGPeAHz zHTp487`149*$p&yY);DxsgnLgsE+Tl&`bOAhCzb*Ss2>-l8u?zUfb>Oa`E9*+c;YB zJz)m9=x{9_795T|$FfEyqxZj6#2aTR>n#_yT24oJzn#3#{Mm`aS@V33x@ZL6pRFCa z5itSbiuD1Zc(ziIiTOtr@#kcOu*Q&(iArn0`7FYz^>Q<74l1*euJgt#Jq*A7aC9Ai#?P^l(g z2jS2q=#)VA^yYMQzQf5yk%Qg_i!u#?;tPID`=Nu49XN5ztCFdBvXb7hW$cy)EJD2+ zYbTEgNH}x|Q^?Np{06F!Ng!klI>?Er(Z}6ry)F3SKh=xB>Md^$CW;9x`B*xRkC$3= zwH6lkoXolpJ}%8-QS05PxS<%_HQdf1?jzTy@HTX+>@g@Eci5QizJHrAK>n8RT-|{3 z73B&2dzv3i#CGI1iIq+oPSKY6%8M5tl^&?-mO`P~bsG%o-Z*%nUhT*jGsx#y#7r}l zSiRAK$5EzfTRDCs_#b%D<#e$by(biyXM0CNl+hnnrHrrp(>4<}xLV`c)8aT8?`k2&mNV zepW%g8n?%UZ%+nT%p;f6eGdFKbJ!eu12@h*!hNTv*c;v8<5LCV{o1(}3DvzyJ^JYW zcVCUno-(%Smjzo`MD&8a+%{JHe8vmM(>P-#g*#W4+_>hflc2XzEMx<1efywNrrXoI za-t&eLg_)LFZyYRltoq;cizej$+|bZBc0IA_=lOua%*{uThog^@{!5kBao0mh89oX zGQCyp!3peCDBh?W%}>z>$hi0@#NMx0y5?w~U6kjSx7bcCN_iBH^J70zFs8<4r>=0n zC@_>0bEU4}%PY4{pic`cckD}x z`076et7O{F!BUJCr8{b${0^Z~4S-I<6h>K61A2XqI-WDue#E|Zyq&O!{ zJ~K%}*iz=O{`f57O2;Cw2j+!bdMR^jgEG5GCr45g( zeEI*yh>mVh-vj&oR_9izIeA5_+k5$E#9IsYr$2A^U4tB#?_CeO23jur!mTgrgxI^U zF%DklXOUXyueja!mV+0*!bkCS#x9C#!0POW=pcSXHoKntVl4|Bb>D}qTl?U5Od_NS z#J`p)>It;y4#dQ!5^kYQrH<&5o0u`Llt+7;U^UDrtd+#4w)-06KC$r$>>(v`g$WhC z6_fOtPWq*PZ1pOP&%46Yc$ri-*k#ol#e0tX_8Rv zn5f(bi)b!-MPn1a#|I3p6>h6B_1G>fB-lBY#c0Cp(M+$s372-owz51*)C7~7JQmkI zs3@~DZ&`>54(9J?^-IU5{v?%omxJoAVFxQ0)Htqzz3*x2I>R%jXj0b0QFxU_+WUOX z++*(ccW$l8vBs8>5kk225p(Z+XKtn?S^7%Lhn2pQ-@lgY5erYY&RKrUO!nBbqny!? zvG$JrU_0T)$r79>T%XU-v-ACupgsJQezAfjEUE(?OO(dxk!@(SWZT$`raS8x!DO3%2;nYn@g;1~x@xDuR$7P=8PK6D;mN=~ zv|Lx{1+`z3N6llwVAaEwO5EYZu#ol|-w!I})A;ad{nRZSiK4e9#$Cv^LT1N3p^%c@ zhAPh%VN7@=cg?0<&|A~SJg2p?I+p@Qz%X2or8~@3T8?XJuBVOAP>eB)C z@~@1hsr?(NrY^gS_XnayWR9Ke?JM^;cPJK^%xRK~1{s{2n}2pVCp4jsmRm1-?_Zr9 z_a7+fZZSY{2#awXSz4+3VW>0W(LH zbHrw|yqA36Fc;z6W&ZmvKX<+jW_iuo-=RHjT@&9zUtqSOzcHRe{(%O_OmR&&O+3G8 z8&BEvMpJGA{KIV;^t;w~Jw|Zoxth53y1G*owCSU`#EYMHr$fA>X`>R?Lu_VEsR36% zE6-M}nv%&){b7zdzI*Cz0O>8=Trc0&dAgk$IhNM$9hO*+{605yL>mt?gSgGPi&A9IdReksOQes~x@jYFv- ziN#WI<>Q^ui9(mMoU@Fb9Q8^j+u;mrbbRU=Hf&2>z0q|^$CKbtlc?0SR83yL3A+BSj{?6YWe_5v* zPt`r%ziwXsJ@PI|gGb+HRpR&0=N>2h%$cF&CNo)qSKH?=a9T0LG`G_o3`KQ^P@{c9S00*6L&b*EqEUQ9f3svGF~< zk?-7X-b|w$Pa4K62#wkutg~R1J!I87yW#g4aOpfZH$UpWT#gZ3vP&k|K=9}NqI+C^(NH>KYWSzm$K6*^iqlM|?F6O| zF6Xj2KH>y(tD{d<&ZNCmctFACrif=PJ&IC%3yKJQdZxH)xRgBICSge(>dHc|%NO1J zkLuODyiHQB`!>cY>l;~XGz#QqxtVORo&dM^$wi|G*p0oL>f)moRHqF_{^h%sJqGp^7-RaQ}`*XF$`xbL_$w4gY9B&*RIyX67Uaj5!`PF6^>IIf?CNRj1x5GD~ zq-(G;T_0z^Tj+Wa$*Umc;m-|v~%QQ;WvM>!BuCd`RNEZZBK@yT)BG#oLPm^qWzJJmS@jvb% z2NesWNoednmISwty`cw>j5VA1^~T_pucl%gc{y4^bxZJAMjd42R~SL^wW7z--VeJ> z{PwNS7d%GI611-Mtc^r*KMC#PD3R+Ny{@iq|Dc?1p@)*-?Iy;`+>qC)IcnQ!SOAoSx=AbX+c_$F*9!#}1+r z(1ola6HAy!H4hVFc%Y#GC#wq;0e%s7&4%WKT(P#baEU3HuUxGtfjatd9b; zO20Z*OhFJ*&~;ud)bqU2Q!*P{K%f=7cD}}{6IE!13xb`;_!Kx~_CYpGvBcFT!QR&9 z=c|X2%-Hz`B6PbS#aMYiFZzDW|9Vl-yoWNqhKxaN79@8J->Sr$M#DL4SdZn^HG+jU z?$^ziBpfccwQ1XBjSg`W>xgk}WAohCF5ea7Xl@SNNq%y6sGO&idqCV~Dn$1AOxrSO z?~1!ZVdc~FI4+M(WznS-^wr(BwzXnuB08kQBsz#&~{&!(JGdvybMiYGOp!WoBLwW#5L-$ zMSR!*-<>M;Wa+{y=X%>2l32*2tjT?>eORxY@U^mF1hz|;PW{mA%LgpdfDIKLZ=7Mn zIfA!($g&tNE#Tavj=e7BK(DzQ4^H1=M^VhGbOd{PTv9Wk_;%J~@&lIrq&7Qy* z)8rw-RIA%yw1kAd`BVbHCq0TimX&X9NeYjLahQ&hEWGTmV>3`; zy6)PP2R!{Ojh2#c}L|@}i?xTqXqQ zbRsi9cNPa#Z|Qu$zdcW;GI`!viqDB8k2Y{B42x!uYdI1n+xSkHnA6kNfZusF7j*l( z^p?|waO(bQbqt}`A3YT>v9O~n-I+YAIqk`BR=ulu-|dX6MmXcJ+xYgJX$Gq(nZR5NV&F;^29uPvZ07xqN#$&z`&qn z^69V6(m~ONGvU+I*?#PBTz1nbWznsMPk*pJd)D9e6(2 zs^*o2-4vDiK+rd2R$Fg4fkh%rq3`sb%r%Inu5#F5X^hivt+2LC~#y0L0 zgKPP!M17h5Za#>25~|n!8;t$cbHcSk)2G6!xGBV5v=q@%^Kl7_TW~IDt^*=*b35@N z_0}NoE`P9CZO#2@D}Ia=jgsB*I&r4PVB+6=`0j4vKHi_7m7d~Bo6VA>F%{7Rf zUNb7sSeMa-8t)rq%gObt(n=JCl(jTGc3z*G$d)GOQpk~@?1Z(7X~^l9VeJ?zJ%CAs z+-l%+L@;z$o(uQfNLc$J;tz!8xl+xtT%Tl(AQJukN0^HHO@@yP%X4IVJi|leUl)kJ z7JP2|XG+>Em$yx9KK2MsWK4k^#`Muj}s0gYof_c{q;5 zQwl{9cW2jZAkcrRV0{Zn1|optyLB|OLG4i!V0xucl?Xsmy#+|0p)PXg5f~f^Xf`KB zK#qljS^!n0wiYwk2DAXJY5p7nNV!MgCO~*;z6fCd9^48@!OkQCBp(FS6XcvozbSya zCMlq`W|E$P%IAGhap1Qo{-_Fc`vi``3p+o^05ay8BtGqfzqqqdB2$ZwwC0;FxI=v{)V2_$z_53a9lKnZ$Rl!z2(^@zJ2cFKAvjoW4*iM6yXM6^UO;u<}7 zEd?vzVUe61X8(mEaE7&upBrQelck1&?Bflvb>-VXzq>4^etQG$0O}M#Bd?S!QwhF$ z2u!pMisBPJ@cpX*X1Dg2$TofP4;u$T{Z=FDo#yUzdG4y(UspJ&B3}0XcP>>x=P7u& zvU%%Rd26x?-csp#-Ve5c(BqV*8yHqaO7`DXcUpoOb1?bt?qb+DIQO%mFfxPc&Ix*o z4`l4_K1ar8Cm@ z4KTq)7v)T??Y}DE#K`(~=|`-Ucgyomk@r*T#-M=*(1WklBEUKT#skZ<_RS8sQxShh hGx`6&FRC2f&M0b$J=rk7xVwj?Agd}Vg0O literal 29846 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 Date: Thu, 30 Sep 2021 12:28:08 +0100 Subject: [PATCH 1210/1295] cl.rest: expose errors in journal --- home.admin/config.scripts/cl.rest.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.admin/config.scripts/cl.rest.sh b/home.admin/config.scripts/cl.rest.sh index 593e43f64..9a87ba268 100644 --- a/home.admin/config.scripts/cl.rest.sh +++ b/home.admin/config.scripts/cl.rest.sh @@ -120,6 +120,8 @@ PrivateTmp=true ProtectSystem=full NoNewPrivileges=true PrivateDevices=true +StandardOutput=null +StandardError=journal [Install] WantedBy=multi-user.target From 9c36abff7efba1ce939c73582fbd445b5a04b6ad Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 30 Sep 2021 18:24:22 +0200 Subject: [PATCH 1211/1295] longer delay on testing bitcoind --- home.admin/_provision.setup.sh | 44 +++++++++++++++++----------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/home.admin/_provision.setup.sh b/home.admin/_provision.setup.sh index 2b0d1c3c8..bb921b4c6 100755 --- a/home.admin/_provision.setup.sh +++ b/home.admin/_provision.setup.sh @@ -29,14 +29,14 @@ 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 -sudo sed -i "s/^message=.*/message='SSH Keys'/g" ${infoFile} +sed -i "s/^message=.*/message='SSH Keys'/g" ${infoFile} # link ssh directory from SD card to HDD -sudo /home/admin/config.scripts/blitz.ssh.sh backup +/home/admin/config.scripts/blitz.ssh.sh backup ################################### # Prepare Blockchain Service -sudo sed -i "s/^message=.*/message='Blockchain Setup'/g" ${infoFile} +sed -i "s/^message=.*/message='Blockchain Setup'/g" ${infoFile} if [ "${network}" == "" ]; then sed -i "s/^state=.*/state=error/g" ${infoFile} @@ -67,18 +67,18 @@ fi # copy configs files and directories echo "" echo "*** Prepare ${network} ***" >> ${logFile} -sudo mkdir /mnt/hdd/${network} >>${logFile} 2>&1 -sudo chown -R bitcoin:bitcoin /mnt/hdd/${network} >>${logFile} 2>&1 +mkdir /mnt/hdd/${network} >>${logFile} 2>&1 +chown -R bitcoin:bitcoin /mnt/hdd/${network} >>${logFile} 2>&1 sudo -u bitcoin mkdir /mnt/hdd/${network}/blocks >>${logFile} 2>&1 sudo -u bitcoin mkdir /mnt/hdd/${network}/chainstate >>${logFile} 2>&1 -sudo cp /home/admin/assets/${network}.conf /mnt/hdd/${network}/${network}.conf -sudo chown bitcoin:bitcoin /mnt/hdd/${network}/${network}.conf >>${logFile} 2>&1 -sudo mkdir /home/admin/.${network} >>${logFile} 2>&1 -sudo cp /home/admin/assets/${network}.conf /home/admin/.${network}/${network}.conf -sudo chown -R admin:admin /home/admin/.${network} >>${logFile} 2>&1 +cp /home/admin/assets/${network}.conf /mnt/hdd/${network}/${network}.conf +chown bitcoin:bitcoin /mnt/hdd/${network}/${network}.conf >>${logFile} 2>&1 +mkdir /home/admin/.${network} >>${logFile} 2>&1 +cp /home/admin/assets/${network}.conf /home/admin/.${network}/${network}.conf +chown -R admin:admin /home/admin/.${network} >>${logFile} 2>&1 # make sure all directories are linked -sudo /home/admin/config.scripts/blitz.datadrive.sh link >> ${logFile} +/home/admin/config.scripts/blitz.datadrive.sh link >> ${logFile} # test bitcoin config confExists=$(sudo ls /mnt/hdd/${network}/${network}.conf | grep -c "${network}.conf") @@ -86,7 +86,7 @@ echo "File Exists: /mnt/hdd/${network}/${network}.conf --> ${confExists}" >> ${l # set password B as RPC password echo "SETTING PASSWORD B" >> ${logFile} -sudo /home/admin/config.scripts/blitz.setpassword.sh b "${passwordB}" >> ${logFile} +/home/admin/config.scripts/blitz.setpassword.sh b "${passwordB}" >> ${logFile} # optimize RAM for blockchain validation (bitcoin only) if [ "${network}" == "bitcoin" ] && [ "${hddBlocksBitcoin}" == "0" ]; then @@ -96,38 +96,38 @@ if [ "${network}" == "bitcoin" ] && [ "${hddBlocksBitcoin}" == "0" ]; then # RP4 4GB if [ ${kbSizeRAM} -gt 3500000 ]; then echo "Detected RAM >=4GB --> optimizing ${network}.conf" >> ${logFile} - sudo sed -i "s/^dbcache=.*/dbcache=2560/g" /mnt/hdd/${network}/${network}.conf + sed -i "s/^dbcache=.*/dbcache=2560/g" /mnt/hdd/${network}/${network}.conf # RP4 2GB elif [ ${kbSizeRAM} -gt 1500000 ]; then echo "Detected RAM >=2GB --> optimizing ${network}.conf" >> ${logFile} - sudo sed -i "s/^dbcache=.*/dbcache=1536/g" /mnt/hdd/${network}/${network}.conf + sed -i "s/^dbcache=.*/dbcache=1536/g" /mnt/hdd/${network}/${network}.conf #RP3/4 1GB else echo "Detected RAM <=1GB --> optimizing ${network}.conf" >> ${logFile} - 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 fi fi # start network service echo "" echo "*** Start ${network} (SETUP) ***" >> ${logFile} -sudo sed -i "s/^message=.*/message='Blockchain Testrun'/g" ${infoFile} +sed -i "s/^message=.*/message='Blockchain Testrun'/g" ${infoFile} echo "- This can take a while .." >> ${logFile} -sudo cp /home/admin/assets/${network}d.service /etc/systemd/system/${network}d.service -sudo systemctl enable ${network}d.service -sudo systemctl start ${network}d.service +cp /home/admin/assets/${network}d.service /etc/systemd/system/${network}d.service +systemctl enable ${network}d.service +systemctl start ${network}d.service # check if bitcoin has started bitcoinRunning=0 loopcount=0 while [ ${bitcoinRunning} -eq 0 ] do - >&2 echo "# (${loopcount}/200) checking if ${network}d is running ... " >> ${logFile} + >&2 echo "# (${loopcount}/50) checking if ${network}d is running ... " >> ${logFile} bitcoinRunning=$(sudo -u bitcoin ${network}-cli getblockchaininfo 2>/dev/null | grep "initialblockdownload" -c) - sleep 2 + sleep 8 sync loopcount=$(($loopcount +1)) - if [ ${loopcount} -gt 200 ]; then + 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} From 588748f710796640549398d9e5ef5f21b481a4eb Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 30 Sep 2021 20:37:00 +0200 Subject: [PATCH 1212/1295] deactivate litecoin & add debug --- home.admin/_bootstrap.sh | 33 ++++++++++++------- home.admin/_provision.setup.sh | 3 +- .../dialogBlockchainLightning.sh | 6 ++-- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 18d784b08..2d49ad950 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -455,9 +455,14 @@ if [ ${isMounted} -eq 0 ]; then echo "hddBlocksLitecoin=${hddBlocksLitecoin}" >> ${infoFile} echo "hddGotMigrationData=${hddGotMigrationData}" >> ${infoFile} echo "" - echo "HDD is there but not AutoMounted yet - Waiting for user Setup/Update" >> $logFile + # add some debug info to logfile + echo "# df " >> ${logFile} + df >> ${logFile} + echo "# lsblk -o NAME,FSTYPE,LABEL " >> ${logFile} + lsblk -o NAME,FSTYPE,LABEL >> ${logFile} + # determine correct setup phase infoMessage="Please Login for Setup" setupPhase="setup" @@ -468,7 +473,7 @@ if [ ${isMounted} -eq 0 ]; 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 - sudo /home/admin/config.scripts/blitz.ssh.sh restore >> $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 @@ -494,14 +499,14 @@ if [ ${isMounted} -eq 0 ]; then # until SSH or WEBUI setup data is available ############################################# - echo "## WAIT LOOP: USER SETUP/UPDATE/MIGRATION" >> $logFile + echo "## WAIT LOOP: USER SETUP/UPDATE/MIGRATION" >> ${logFile} until [ "${state}" == "waitprovision" ] do # 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 + 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 @@ -537,20 +542,20 @@ if [ ${isMounted} -eq 0 ]; then # refresh data from info file source ${infoFile} - echo "# PROVISION PROCESS with setupPhase(${setupPhase})" >> $logFile + echo "# PROVISION PROCESS with setupPhase(${setupPhase})" >> ${logFile} # mark system on sd card as in setup process echo "the provision process was started but did not finish yet" > /home/admin/provision.flag - # make HDD is still temp mounted + # make sure HDD is mounted (could be freshly formatted by user on last loop) source <(/home/admin/config.scripts/blitz.datadrive.sh status) - echo "Temp mounting (2) data drive ($hddCandidate)" >> $logFile + echo "Temp mounting (2) data drive ($hddCandidate)" >> ${logFile} if [ "${hddFormat}" != "btrfs" ]; then source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddPartitionCandidate}) else source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddCandidate}) fi - echo "Temp mounting (2) result: ${isMounted}" >> $logFile + echo "Temp mounting (2) result: ${isMounted}" >> ${logFile} # check that HDD was temp mounted if [ "${isMounted}" != "1"]; then @@ -560,7 +565,7 @@ if [ ${isMounted} -eq 0 ]; then fi # make sure all links between directories/drives are correct - echo "Refreshing links between directories/drives .." >> $logFile + echo "Refreshing links between directories/drives .." >> ${logFile} sudo /home/admin/config.scripts/blitz.datadrive.sh link # copy over the raspiblitz.conf created from setup to HDD @@ -580,7 +585,13 @@ if [ ${isMounted} -eq 0 ]; then echo "# Sourcing ${setupFile} " >> ${logFile} source ${setupFile} sed -e '/^password/d' ${setupFile} >> ${logFile} - + + # add some debug info to logfile + echo "# df " >> ${logFile} + df >> ${logFile} + 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} @@ -599,7 +610,7 @@ if [ ${isMounted} -eq 0 ]; then exit 1 fi - echo "SETTING PASSWORD A" >> ${logFile} + echo "# setting PASSWORD A" >> ${logFile} sudo /home/admin/config.scripts/blitz.setpassword.sh a "${passwordA}" >> ${logFile} # if setup - run provision setup first diff --git a/home.admin/_provision.setup.sh b/home.admin/_provision.setup.sh index bb921b4c6..29de75ca0 100755 --- a/home.admin/_provision.setup.sh +++ b/home.admin/_provision.setup.sh @@ -85,13 +85,14 @@ confExists=$(sudo ls /mnt/hdd/${network}/${network}.conf | grep -c "${network}.c echo "File Exists: /mnt/hdd/${network}/${network}.conf --> ${confExists}" >> ${logFile} # set password B as RPC password -echo "SETTING PASSWORD B" >> ${logFile} +echo "# setting PASSWORD B" >> ${logFile} /home/admin/config.scripts/blitz.setpassword.sh b "${passwordB}" >> ${logFile} # optimize RAM for blockchain validation (bitcoin only) if [ "${network}" == "bitcoin" ] && [ "${hddBlocksBitcoin}" == "0" ]; then echo "*** Optimizing RAM for Sync ***" >> ${logFile} kbSizeRAM=$(cat /proc/meminfo | grep "MemTotal" | sed 's/[^0-9]*//g') + echo "kbSizeRAM(${kbSizeRAM})" >> ${logFile} echo "dont forget to reduce dbcache once IBD is done" > "/mnt/hdd/${network}/blocks/selfsync.flag" # RP4 4GB if [ ${kbSizeRAM} -gt 3500000 ]; then diff --git a/home.admin/setup.scripts/dialogBlockchainLightning.sh b/home.admin/setup.scripts/dialogBlockchainLightning.sh index 962c6e45a..f952e9925 100644 --- a/home.admin/setup.scripts/dialogBlockchainLightning.sh +++ b/home.admin/setup.scripts/dialogBlockchainLightning.sh @@ -11,9 +11,11 @@ source $SETUPFILE ################################# -# SELECT BLOCKCHAIN +# SELECT BLOCKCHAIN --> SKIPPED (litecoin deactivated, reactivate selection when other bitcoin implementations) # when not already set by setupfile - +if [ "${network}" == "" ]; then + network="bitcoin" +fi if [ "${network}" == "" ]; then OPTIONS=() From aaed8c8501156667f3ba3d808600ec48ea502d9e Mon Sep 17 00:00:00 2001 From: openoms Date: Thu, 30 Sep 2021 20:25:28 +0100 Subject: [PATCH 1213/1295] electrs update to v0.9.0 #2548 --- home.admin/config.scripts/bonus.electrs.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/bonus.electrs.sh b/home.admin/config.scripts/bonus.electrs.sh index 00fe00850..311c029be 100755 --- a/home.admin/config.scripts/bonus.electrs.sh +++ b/home.admin/config.scripts/bonus.electrs.sh @@ -1,7 +1,7 @@ #!/bin/bash # https://github.com/romanz/electrs/releases -ELECTRSVERSION="v0.9.0-rc2" +ELECTRSVERSION="v0.9.0" # https://github.com/romanz/electrs/commits/master # ELECTRSVERSION="3041e89cd2fb377541b929d852ef6298c2d4e60a" From c0f1afbab792bb7132308e4d8b523cb1a984bfbf Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 30 Sep 2021 21:32:53 +0200 Subject: [PATCH 1214/1295] more debug outputs --- home.admin/_background.sh | 2 -- home.admin/_bootstrap.sh | 6 ++++-- home.admin/_provision.setup.sh | 10 ---------- home.admin/config.scripts/blitz.datadrive.sh | 4 ++-- 4 files changed, 6 insertions(+), 16 deletions(-) diff --git a/home.admin/_background.sh b/home.admin/_background.sh index fc75419bb..552c377b9 100755 --- a/home.admin/_background.sh +++ b/home.admin/_background.sh @@ -1,7 +1,5 @@ #!/bin/bash -# TODO: check & update localip in raspiblitz info for display (only write on change) - # This script runs on after start in background # as a service and gets restarted on failure # it runs ALMOST every seconds diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 2d49ad950..384d37dca 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -442,9 +442,9 @@ if [ ${isMounted} -eq 0 ]; then # temp mount the HDD echo "Temp mounting (1) data drive ($hddCandidate)" >> $logFile if [ "${hddFormat}" != "btrfs" ]; then - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddPartitionCandidate}) + source <(/home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddPartitionCandidate}) else - source <(sudo /home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddCandidate}) + source <(/home/admin/config.scripts/blitz.datadrive.sh tempmount ${hddCandidate}) fi echo "Temp mounting (1) result: ${isMounted}" >> $logFile @@ -462,6 +462,8 @@ if [ ${isMounted} -eq 0 ]; then df >> ${logFile} echo "# lsblk -o NAME,FSTYPE,LABEL " >> ${logFile} lsblk -o NAME,FSTYPE,LABEL >> ${logFile} + echo "# /home/admin/config.scripts/blitz.datadrive.sh status" + /home/admin/config.scripts/blitz.datadrive.sh status >> ${logFile} # determine correct setup phase infoMessage="Please Login for Setup" diff --git a/home.admin/_provision.setup.sh b/home.admin/_provision.setup.sh index 29de75ca0..3de937619 100755 --- a/home.admin/_provision.setup.sh +++ b/home.admin/_provision.setup.sh @@ -54,16 +54,6 @@ if [ "${chain}" == "" ]; then exit 2 fi -# make sure choosen blockchain service is installed -if [ "${network}" != "bitcoin" ]; then - # TODO also ... check if /home/admin/selfsync.flag is needed on other chains - sed -i "s/^state=.*/state=error/g" ${infoFile} - sed -i "s/^message=.*/message='TODO: install ${network}'/g" ${infoFile} - echo "FAIL see ${logFile}" - echo "TODO: make sure ${network} is installed!" >> ${logFile} - exit 3 -fi - # copy configs files and directories echo "" echo "*** Prepare ${network} ***" >> ${logFile} diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index 10dd84b42..81d088400 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -121,7 +121,7 @@ if [ "$1" = "status" ]; then if [ $testpartitioncount -gt 0 ]; then # if a partition was found - make sure to skip the OS and boot partitions - if [ "$testpartition" != "$OSPartition" ] && [ "$testpartition" != "$bootPartition" ]; then + if [ "${testpartition}" != "${OSPartition}" ] && [ "${testpartition}" != "${bootPartition}" ]; then # make sure to use the biggest if [ ${testsize} -gt ${sizeDataPartition} ]; then sizeDataPartition=${testsize} @@ -1794,7 +1794,7 @@ if [ "$1" = "uasp-fix" ]; then echo "# Already UASP deactivated for ${hddAdapterUSB}" echo "neededReboot=0" fi - else + else echo "# Skipping UASP deactivation ... cmdlineExists(${cmdlineExists}) hddAdapterUSB(${hddAdapterUSB}) hddAdapterUSAP(${hddAdapterUSAP})" echo "neededReboot=0" fi From cbd2d69425705b75354dc8c64225e81f9fbcfdac Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 30 Sep 2021 23:38:35 +0200 Subject: [PATCH 1215/1295] Update README --- CHANGES.md | 1 + README.md | 274 ++++++++++++++--------------------- pictures/SSH5-sync.png | Bin 0 -> 13446 bytes pictures/settings.png | Bin 79520 -> 39444 bytes pictures/ssh2-layer2old.png | Bin 0 -> 22208 bytes pictures/ssh4-blockchain.png | Bin 0 -> 25967 bytes pictures/ssh4-copy.png | Bin 0 -> 23639 bytes pictures/ssh4-done.png | Bin 0 -> 19566 bytes pictures/ssh4-seed.png | Bin 0 -> 26802 bytes pictures/ssh5-mainmenu.png | Bin 0 -> 45991 bytes pictures/ssh5-reboot.png | Bin 0 -> 21447 bytes pictures/ssh5-unlock.png | Bin 0 -> 8197 bytes 12 files changed, 107 insertions(+), 168 deletions(-) create mode 100644 pictures/SSH5-sync.png create mode 100644 pictures/ssh2-layer2old.png create mode 100644 pictures/ssh4-blockchain.png create mode 100644 pictures/ssh4-copy.png create mode 100644 pictures/ssh4-done.png create mode 100644 pictures/ssh4-seed.png create mode 100644 pictures/ssh5-mainmenu.png create mode 100644 pictures/ssh5-reboot.png create mode 100644 pictures/ssh5-unlock.png diff --git a/CHANGES.md b/CHANGES.md index e102997ce..8054393ae 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -30,6 +30,7 @@ - Update: Channel Tools (chantools) v0.9.3 [details](https://github.com/guggero/chantools/blob/master/README.md) - Update: Circuitbreaker v0.3.0 [details](https://github.com/lightningequipment/circuitbreaker/blob/master/README.md) - Remove: DropBox Backup (its recommended to change to Nextcloud Backup) +- Remove: Litecoin (fork recommended) [details](https://github.com/rootzoll/raspiblitz/issues/2542) ## What's new in Version 1.7.0 of RaspiBlitz? diff --git a/README.md b/README.md index 5f453aa93..c94ec1271 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ *Build your own Lightning & Bitcoin Fullnode on a RaspberryPi with a nice Display.* -`Version 1.7.1rc2 with lnd 0.13.1 & c-lightning 0.10.0 and bitcoin 22.0.0 (or litecoin 0.18.1)` +`Version 1.7.1rc2 with lnd 0.13.1 & c-lightning 0.10.0 and bitcoin 22.0.0` ![RaspiBlitz](pictures/raspiblitz.jpg) @@ -233,11 +233,7 @@ First thing to setup is giving your RaspiBlitz a name: This name is given to the RaspiBlitz as a public alias of the lightning node for everybody to see. -If your starting not with pre-synced blockchain then you can choose if you want to run a Bitcoin or a Litecoin Fullnode as the Baselayer. The default choice here is Bitcoin. - -![SSH1](pictures/ssh1-layer1.png) - -Then you can choose which Lightning implementation you want to run on top of your Fullnode. RaspiBlitz started with `LND` from Lightning Labs which is used by most other RaspberryPi lightning nodes and works with most additional apps. But you can now also choose `CL` for c-lightning by Blockstream which is a good choice for already more experienced node operators & lightning developers that want to use the highly customizable plug-in structure that c-lightning offers. +Then you can choose which Lightning implementation you want to run on top of your Bitcoin Fullnode. RaspiBlitz started with `LND` from Lightning Labs which is used by most other RaspberryPi lightning nodes and works with most additional apps. But you can now also choose `CL` for c-lightning by Blockstream which is a good choice for already more experienced node operators & lightning developers that want to use the highly customizable plug-in structure that c-lightning offers. Its also possible to use both in parallel on your RaspiBlitz later on - just pick one to start with or choose `NONE` is your only interested in running a Fullnode without Lightning. @@ -245,17 +241,35 @@ Its also possible to use both in parallel on your RaspiBlitz later on - just pic *In the following we show the setup with LND - which is very similar to the steps with c-lightning.* -If you choosed one of the lightning implementations you will now be asked if you want to start a `NEW` wallet/lightning node if you had an `OLD` lightning wallet/node that you want to re-create by using different options of backups. - -Because you are setting up a new node simply choose `NEW` here. +If you choosed one of the lightning implementations you will now be asked if you want to start a `NEW` wallet/lightning node or if you had an `OLD` lightning wallet/node that you want to re-create. ![SSH1](pictures/ssh1-oldnew.png) -Finally you have to set 3 passwords called A, B & C ... please choose here single strings (without spaces and special characters) that are at least 8 chars long. +Normally you just chose `NEW` here .. but to recover an old wallet you have the following options if you choose `OLD`: + +![SSH1](pictures/ssh2-layer2old.png) + +##### LNDRESCUE LND tar.gz-Backupfile (BEST) + +Choose this option if you have made a complete backup of the LND or c-lightning data and have a tar.gz file starting with the word 'lnd-rescue' or 'cl-rescue' available. It will recover all your on-chain funds and open channels you had. But you have to make sure that the rescue backup you have is really the latest version - otherwise you might lose channel funds. + +*If you have tar.gz file that starts with 'raspiblitz', that's a migration file. That also includes your old LND/c-lightning wallet, but you import that file at the beginning of the setup process with 'FROMBACKUP - Upload Migration Backup' instead choosing FRESHSETUP* + +##### SEED+SCB Words Seed & channel.backup file (OK) + +Next best option is, if you have the channel.backup file and the word list seed. This is the best chance to recover the on-chain funds you had in open channels. But all channels you had open before will be closed during this procedure. + +##### ONLY SEED Only Seed Word List (Fallback) + +If you just have the word list (RaspiBlitz 1.1 and older) you can at least try to recover your on-chain funds. Recovery of channel funds is not very likely in this scenario. + +But normally you are setting up a new node - so simply choose `NEW` in the menu. ![SSH2](pictures/ssh2-passwords.png) -You can use this [RaspiBlitz Password Sheet (PDF)](https://github.com/rootzoll/raspiblitz/raw/v1.7/home.admin/assets/RaspiBlitzRecoverySheet.pdf) to write those passwords down for save storage and also use it later on for your Seed Words. +Finally you have to set 3 passwords called A, B & C ... please choose here single strings (without spaces and special characters) that are at least 8 chars long. + +You can use this [RaspiBlitz Recovery Sheet (PDF)](https://github.com/rootzoll/raspiblitz/raw/v1.7/home.admin/assets/RaspiBlitzRecoverySheet.pdf) to write those passwords down for save storage and also use it later on for your Seed Words. *The password A,B,C idea is based on the [RaspiBolt Guide Preparations](https://stadicus.github.io/RaspiBolt/raspibolt_10_preparations.html#write-down-your-passwords) - check out for more background.* @@ -275,134 +289,61 @@ After this the setup process will need some time to set everything up - just wai ### Final Setup +Once the basic setup ran thru you lightning node & wallet was created and you get presented the important backup seed words which you need to write down on paper and store them in a secure location. You will need to confirm that you wrote the seed words down before you can continue. +![SSH4](pictures/ssh4-seed.png) +WRITE YOUR PERSONAL WORDS DOWN before you continue - you will need them to recover funds in case of failing hardware etc. If you just want to try/experiment with the RaspiBlitz, at least take a photo with your smartphone just in case. If you plan to keep your RaspiBlitz running, store this word list offline or in a password safe. -### Getting the Blockchain +You can use this [RaspiBlitz Recovery Sheet (PDF)](https://github.com/rootzoll/raspiblitz/raw/v1.7/home.admin/assets/RaspiBlitzRecoverySheet.pdf) to write down those seed words for save storage. -*If you have a HDD/SSD with a prepared blockchain (e.g. a ready2go-set or you are at a workshop) you have the option to trust that data and skip to the [next chapter](#setup-lightning). If you started with an empty HDD - you will see the following screens:* +If you dont had a full copy of the blockchain pre-synced/validated on your harddrive/ssd then you will now be asked how you want to get your copy of the blockchain .. there are two basic options here: -If you connected a fresh Hard Drive or SSD to the RaspiBlitz, it might now ask you if it's OK to format it. - -format-HDD - -*Your HDD/SSD will get formatted with the linux standard file system EXT4. If you want to try out the experimental new [BTRFS](FAQ.md#why-use-btrfs-on-raspiblitz) that RaspiBlitz supports since v1.4 - you need to start the setup with an additional 32GB USB thumb drive connected to the second USB3 port of the RaspberryPi. Then you will unlock this new secret feature.* - -After formatting you need to get a copy of the blockchain; the RaspiBlitz offers the following options: - -blockchain-options - -The options - and when to choose which - will be explained here shortly: +![SSH4](pictures/ssh4-blockchain.png) #### 1. SYNC - Selfvalidate all Blocks -With the new RaspberryPi 4 (with SSD & min 2GB RAM) this is the best way to go. It will take around 2-3 days to sync & validate directly with the bitcoin network. With this option, you have done it the original `don't trust, verify` way. +With the new RaspberryPi 4 (with SSD & min 2GB RAM) this is the best way to go. It will take around 3-6 days to sync & validate directly with the bitcoin network. With this option, you have done it the original `don't trust, verify` way. *For the old RaspberryPi 3 this is not recommended. A RaspberryPi 3 has a very low power CPU and syncing+validating the blockchain directly with the peer2peer network can take multiple weeks - that's why for a RP3 you should choose the COPY option .* #### 2. COPY - Copy from Laptop or another RaspiBlitz over Local Network -First you need to download & validate the blockchain on your own computer/laptop. Todo so install bitcoin-core (0.18.1 or higher) from [bitcoin.org](https://bitcoin.org/en/download) and keep it running until blockchain is synced (will need around 320 GB). +If you have a friend that is already running a synced RaspiBlitz or you have a laptop with enough free space on the harddrive that can download & validate the Blockchain much faster you can also choose the `COPY` option. You can then delete existing blockchain your RaspiBlitz already started syncing for you. -Then you can use the COPY option to copy the blockchain over to the RaspiBlitz. This will be done over the local network by SCP (SSH file transfer) - follow the instructions given in the dialogs. +![SSH4](pictures/ssh4-copy.png) -It's advised to keep a backup of the bitcoin-core & the blockchain data (e.g. on your laptop) in case you need to re-setup the RaspiBlitz. +To copy from another RaspiBlitz choose `BLITZ` and follow the instructions. Know that the other Blitz will be offline to the lightning network during the copy that will take multiple hours. + +To copy from your laptop/computer (`WINDOWNS`, `MACOS` & `LINUX` options) you first need to download & validate the blockchain on your own computer/laptop. Todo so install latest bitcoin-core (0.18.1 or higher) from [bitcoin.org](https://bitcoin.org/en/download) and keep it running until blockchain is synced (will need around 400 GB). Then under the `COPY` option choose the Operating System. The copy will be done over the local network by SCP (SSH file transfer) - follow the instructions given in the dialogs. It's advised to keep a backup of the bitcoin-core & the blockchain data (e.g. on your laptop) in case you need to re-setup the RaspiBlitz. More details: [I have the full blockchain on another computer. How do I copy it to the RaspiBlitz?](FAQ.md#i-have-the-full-blockchain-on-another-computer-how-do-i-copy-it-to-the-raspiblitz) -### Setup Lightning +If you dont have the Bitcoin Blockchain already on another laptop or RaspiBlitz simply choose `SELFSYNC`. -Lightning is installed and waiting for your setup if you see this screen. +And hooray :D Your RaspiBlitz is ready to go! Welcome new node operator. -![SSH7](pictures/ssh7-lndinit.png) +![SSH4](pictures/ssh4-done.png) -You can now decide if you want to setup a fresh new wallet or if you want to recover an old wallet from a RaspiBlitz you had before. +If you hit OK, the RaspiBlitz will go into a final reboot. -#### Setup a NEW Wallet +![SSH5](pictures/ssh5-reboot.png) -This is the default if you setup a RaspiBlitz the first time. +Just wait a bit and then the SSH command to login again. Dont forget to use this time your password A ... which is always for password for system login. -![SSH8](pictures/ssh8-wallet.png) +![SSH5](pictures/ssh5-unlock.png) -RaspiBlitz will ask you to set your wallet unlock password - use your chosen PASSWORD C here. Confirm by inputting it a second time. +If you run LND you will be asked to unlock your wallet - thats always your password C. BTW under `SETTINGS` in the main menu you can activate the Auto-Unlock if you prefer. -LND will now generate a fresh cipher seed (word list) for you. +![SSH5](pictures/ssh5-sync.png) -![SSH8](pictures/ssh8-walletb.png) - -WRITE YOUR PERSONAL WORDS DOWN before you continue - without it you limit your chances to recover funds in case of failing hardware etc. If you just want to try/experiment with the RaspiBlitz, at least take a photo with your smartphone just in case. If you plan to keep your RaspiBlitz running, store this word list offline or in a password safe. You can use the [RaspiBlitz Password Sheet (PDF)](https://github.com/rootzoll/raspiblitz/raw/v1.4/home.admin/assets/RaspiBlitzRecoverySheet.pdf) for this. - -#### Recover an OLD Wallet - -Choose this option if you had an old RaspiBlitz you want to recover. You have three options to do that: - -![SSH7](pictures/ssh7-lndrecover.png) - -The RaspiBlitz calling the LND wallet creation command for you: - -##### LNDRESCUE LND tar.gz-Backupfile (BEST) - -Choose this option if you have made a complete backup of the LND data and have a tar.gz file starting with the word 'lnd-rescue' available. It will recover all your on-chain funds and open channels you had. But you have to make sure that the LND backup you have is really the latest version - otherwise you might lose channel funds. - -*If you have tar.gz file that starts with 'raspiblitz', that's a migration file. That also includes your old LND wallet, but you import it earlier in the setup process .. see further below for details.* - -##### SEED+SCB Words Seed & channel.backup file (OK) - -Next best option is, if you have the channel.backup file and the word list seed. This is the best chance to recover the on-chain funds you had in open channels. But all channels you had open before will be closed during this procedure. - -##### ONLY SEED Only Seed Word List (Fallback) - -If you just have the word list (RaspiBlitz 1.1 and older) you can at least try to recover your on-chain funds. Recovery of channel funds is not very likely in this scenario. - -### Final LND Setup - -It will now make sure your wallet is initialized correctly and may ask you to unlock it with PASSWORD C. - -![SSH9c](pictures/ssh9c-unlock.png) - -*The LND wallet needs to get unlocked on every new start/reboot of the RaspiBlitz.* - -The RaspiBlitz will now do final setup configuration, such as installing tools, moving the SWAP file to the HDD, or activating the firewall. You will see some text moving across the screen until this screen: - -![SSH9b](pictures/ssh9b-reboot.png) - -The basic setup is done - hooray ... but it may still take some time before everything is ready and you can play around with your new RaspiBlitz. Press 'OK' to reboot. Your terminal session will get disconnected and the raspberry pi restarts. - -### First Start: Syncing & Scanning - -After the reboot is done, it will take a while for all services to start up - wait until you see on the LCD/display that LND wallet needs to get unlocked. Then SSH in again with the same command like in the beginning (check LCD/display) but this time (and every following login) use your PASSWORD A. - -After terminal login, LND will ask you (like on every start/reboot) to unlock the wallet again - use PASSWORD C: - -![SSH9c](pictures/ssh9c-unlock.png) - -On first start, you will have a longer waiting time (between 10 minutes and 2-3 days, depending on your initial setup) ... but that's OK, just leave the RaspiBlitz running until it's done. - -![SSH9d1](pictures/ssh9d-sync.png) - -*You can even close your terminal now and shutdown your laptop and ssh back in later on. You will see on the Blitz LCD/display that it is ready when the blue background screen is gone, and you see a status screen.* - -To understand what is taking so long .. it's two things: - -1. Blockchain Sync - -The blockchain on your HDD is not absolutely up-to-date. Depending on how you got it transferred to your RaspiBlitz it will be some hours, days, or even weeks behind. Now the RaspiBlitz needs to catch-up on the rest by directly syncing with the peer-2-peer network until it reaches almost 100%. Even if you see progress at 99.8%, there can still be waiting time - gaining 1% can take up to 4 hours (depending on network speed), so be patient here. - -2. Lightning Scanning - -Automatically if the Blockchain Sync is progressing LND will start to scan the blockchain and collect information. The Lightning scanning alone normally just takes around 1 hour until the waiting time is over. Can take much longer if you recover on old wallet from seed. - -* [Why is my "final sync" taking so long?](FAQ.md#why-is-my-final-sync-taking-so-long) - -Once all is done, you should see a status screen on the RaspiBlitz LCD/display like this: - -![SSH9dz](pictures/ssh9z-ready.png) +Remeber that now your RaspiBlitz might need a longer time to sync/validate the blockchain - this can be multiple days. In the beginnig you might see fast progress but its normal that this gets slower later on. Also your RaspberryPi CPU might get quite hot ... thats also OK during this inital sync time - the RaspberryPi has its own protection against overheating and will push thru. ### Main Menu -If you now login by SSH in your RaspiBlitz (or you are still logged in) you will see the Main Menu: +Once the Blockchain is synced you will enter the SSH Main Menu: -![SSH9e1](pictures/mainmenu.png) +![SSH5](pictures/ssh5-mainmenu.png) All options on the main menu will be explained below in the feature documentation. @@ -414,7 +355,7 @@ If you need an idea of what the most basic next steps to experience Lightning wo * Open a channel * Make a payment -If you would prefer to do this from a web browser with a dashboard UI, instead of an SSH terminal, go to `SERVICES`, activate the `RTL Webinterface`, and after the reboot you will see a new `RTL` option in the SSH main menu - it will give you all the information so that you can now open the RTL Webinterface in your browser. +If you would prefer to do this from a web browser with a dashboard UI, instead of an SSH terminal, go to `SERVICES`, activate the `RTL Webinterface`, and after install you will find a new menu option for RTL in the SSH main menu - it will give you all the information so that you can now open the RTL Webinterface in your browser. Have fun riding the lightning :D @@ -426,7 +367,7 @@ Have fun riding the lightning :D These are the features available through the RaspiBlitz SSH menus. They have the goal to offer some basic/fallback functionality & configurations. More complex or user-friendly tasks are best to be done with wallets, apps and scripts you connect to your Lightning Node via [APIs](#interface--apis) - because you have a full Bitcoin- and Lightning-Node on the RaspiBlitz. -So let's take a look at the SSH main in detail: +So let's take a look at the SSH main menu in detail: #### INFO: Raspiblitz Status Screen @@ -442,21 +383,21 @@ This is the screen that gets displayed on the LCD/display. It's useful to call i #### LIGHTNING (Basic Node Management) -Under `LIGHTNING` you find some basic steps to manage your Lightning node. Those are very simplified in the RaspiBlitz SSH menu for the reason of learning. For more advanced management of your Lightning node see additional apps under 'SERVICES'. +Under `LND/c-lightning Wallet options` you find some basic steps to manage your Lightning node. Those are very simplified in the RaspiBlitz SSH menu for the reason of learning. For more advanced management of your Lightning node see additional apps under `SERVICES`. ##### FUNDING: Fund your on-chain Wallet -Before you can open channels with other nodes you need to put some coins in your LND on-chain wallet. Use this option to generate an address to send funds to. +Before you can open channels with other nodes you need to put some coins in your on-chain wallet (managed by your lightning sofware). Use this option to generate an address to send funds to. -*Reminder: RaspiBlitz & LND is still experimental software. With funding your LND node you accept the risk of losing funds. So just play with small amounts - something in the area of 20 EUR/USD should be enough to make your first experiences. Also, it's a good privacy practice to [coinjoin your coins](https://bitcoin-only.com/privacy) before sending them to any Lightning Network wallet.* +*Reminder: RaspiBlitz is still experimental software. With funding your lightning node you accept the risk of losing funds. So just play with small amounts - something in the area of 20 EUR/USD should be enough to make your first experiences. Also, it's a good privacy practice to [coinjoin your coins](https://bitcoin-only.com/privacy) before sending them to any Lightning Network wallet.* -You can fund it multiple times - starting with small amounts first to test. LND will always generate a different address, but all funds you send will get into the same LND on-chain wallet. +You can fund it multiple times - starting with small amounts first to test. Your lightning node will always generate a different address, but all funds you send will get into the same LND on-chain wallet. ##### CONNECT: Connect to a Peer Before you can open a channel with another node on the network, you need to connect this node as a peer to your node. -Opening a channel with a peer is just optional. Having another node as peer helps your node to receive information about the network through the gossip protocol. It will help your node to find better routes through the network. +Opening a channel with a peer is just optional. Having another node as peer helps your node to receive information about the lightning network through the gossip protocol. It will help your node to find better routes through the network. ##### CHANNEL: Open a Channel with Peer @@ -482,20 +423,6 @@ Create an invoice to send to someone for a service to be paid through lightning. *This is just a very basic shell script. For more usability try the RTL Webinterface (under Services) or connect a (mobile) wallet with your RaspiBlitz.* -#### lnbalance: Detailed Wallet Balances - -bonus-lnbalance - -#### lnchannels: Lightning Channel List - -bonus-lnchannels - -#### lnfwdreport: Report on your earned fees for Forwarding Payments - -If you connected your node well within the Lightning Network you can become a "Routing Node". Other users might select your Node as part of a Lightning Payment and will pay you the fee you set on those channels. This menu point gives you a detailed report over the amount of days you set. - -Beware - earning fees as a routing node does not come automatic. It's a bit of hard work of building the right channels to be attractive for other people to route through. Check the internet for tutorials or use tools like "lndmanage" (see under RaspiBlitz SERVICES) to help you analyse and optimize your channel management. - ##### NAME: Change name of your Node Here you can change the alias name of your node as it is shown as part of the Lightning network. @@ -520,6 +447,23 @@ Here you will find basic settings for your RaspiBlitz: Activate/Deactivate settings with the space bar and then select 'OK' to activate changes. You can find more details about those options (top to down): +##### Touchscreen (experimental) + +Your RaspiBlitz has an LCD that is touchscreen capable. You can switch on this new feature that is still in development. + +![RTL](pictures/touchscreen.png) + +It will give you 4 buttons on the right side. + +- Info - to be defined later +- Node - shows the nodeid/uri as QR code (used to open channels from mobile wallets) +- Invoice - creates an Invoice-QR code that can be used for payments +- Off - Shutdown or Restart the RaspiBlitz + +##### LCD Rotate + +If you switch this on, you can rotate the LCD of your RaspiBlitz 180 degrees. This might make sense if you have a special case or wall mount. + ##### Run behind Tor You can run your Bitcoin- & Lightning-Node, as well as additional Apps, as a Tor hidden service - replacing your IP with an .onion-address @@ -539,24 +483,29 @@ But this can also come with the following side effects: To try it out, just switch on the service - you can deactivate it later on if it's not working for you. -##### Touchscreen (experimental) +##### Parallel Testnet/Signet -Your RaspiBlitz has an LCD that is touchscreen capable. You can switch on this new feature that is still in development. +It is very convenient to learn and test to play around in a "sandbox" environment. RaspiBlitz allows this through activating "Testnet & Signet" that run in parallel to the "Mainnet". -![RTL](pictures/touchscreen.png) +Once activated you will see an additional option in the SSH Main Menu that will give you more options to operate the Testnet & Signet. -It will give you 4 buttons on the right side. +You can get Bitcoin Testnet coins you can use Faucets from different places on the internet, here are a few links: +* https://coinfaucet.eu/en/btc-testnet/ +* https://testnet-faucet.mempool.co/ +* https://kuttler.eu/en/bitcoin/btc/faucet/ +* https://faucet.lightning.community/ -- Info - to be defined later -- Node - shows the nodeid/uri as QR code (used to open channels from mobile wallets) -- Invoice - creates an Invoice-QR code that can be used for payments -- Off - Shutdown or Restart the RaspiBlitz +You can read more about TESTNET and Bitcoin Faucets here: https://kuttler.eu/code/bitcoin-testnet-blockchain-size-in-2020/ -##### LCD Rotate +##### ZeroTier -If you switch this on, you can rotate the LCD of your RaspiBlitz 180 degrees. This might make sense if you have a special case or wall mount. +With ZeroTier you can add your RaspiBlitz to a software defined network - see for details: https://en.wikipedia.org/wiki/ZeroTier -##### Channels Autopilot +##### LND LIGHTNING LABS NODE + +This needs to switched on to see the sub-settings options for LND. If switched on it means the LND lightning node implementation is installed and running on your RaspiBlitz - it can run in parallel to c-lightning. If activated you will find an additional option in the SSH Main Menu that offers you more options to operate the LND node. Also under `SERVICES` some apps might just be available if LND is activated. + +##### LND Channel Autopilot The channels autopilot feature of LND allows to automatically uses around half of your on-chain funds (if available) to open new channels with other lightning nodes. Channels autopilot is very useful to get started transacting swiftly if you're a newbie as the channels are generated for you. @@ -564,32 +513,11 @@ It is very likely that after a while, once you will have a hang of the concept o Beware that presently toggling the Channels Autopilot setting will trigger a reboot of your Raspiblitz. It is not a problem per se, just a bit of waste of time [Improvement request #1953](https://github.com/rootzoll/raspiblitz/issues/1953) -##### Accept Keysend +##### LND Accept Keysend Keysend is a feature of LND that allows your node to accept payments without having created an invoice first. This needs to be activated, for example, if you want to use your nodes for experimental messaging over the Lightning Network (see RaspiBlitz MOBILE apps like SendMany). -##### Testnet - -It is very convenient to learn and test to play around in a "sandbox" environment. RaspiBlitz allows this through the "Testnet" setting. -You can freely switch from prod environemt (running on BITCOIN MAINNET) to test environment (running on BITCOIN TESTNET) and back using this setting. -The state of your environments is restored everytime you switch (blockchain, wallets, channels) which is very convenient and safe. -Note however that switching from one environment to the other requires an auto resynchronisation with the corresponding blockchain (MAINNET or TESTNET) and can take some time (e.x. If you switch for the first time to "Testnet" the initial sync of the TESTNET blockchain may take several hours; also if you switch back and forth environment the corresponding blockchain must catchup from where it left before switching. - -Of course it would be much more fun and less scary if everyone could afford to own 2 distinct RaspiBlitz, one for each environment, this way your production RaspiBlitz remains online all the time and you can recklessly play around on the other one. - -Once in "TESTNET" environment go ahead! Get hold of some Bitcoin Testnet Faucets (these are worthless bitcoins on testnet) and start playing around with them! -You can get Bitcoin Testnet Faucets from different places on the internet, here are a few links: -* https://coinfaucet.eu/en/btc-testnet/ -* https://testnet-faucet.mempool.co/ -* https://kuttler.eu/en/bitcoin/btc/faucet/ -* https://faucet.lightning.community/ - -You can read more about TESTNET and Bitcoin Faucets here: https://kuttler.eu/code/bitcoin-testnet-blockchain-size-in-2020/ -Have fun. - -IMPORTANT: Presently BTCPay Server service is NOT supported on TESTNET (RPC connection error messages). Until this [issue #1724](https://github.com/rootzoll/raspiblitz/issues/1724) is resolved you can [play around with BTCPay Server on TESTNET](https://testnet.demo.btcpayserver.org) - -##### Circuitbreaker (LND Firewall) +##### LND Circuitbreaker (Firewall for LND) Not everybody is acting friendly in the Lightning network. Circuitbreaker is a background service you cann activate that acts similar to a firewall to protect your now better. For details see: https://github.com/lightningequipment/circuitbreaker/blob/master/README.md @@ -603,17 +531,27 @@ It can be activated under "Services" -> "Auto-unlock LND". We recommend that it * [When using Auto-Unlock, how much security do I lose?](FAQ.md#when-using-auto-unlock-how-much-security-do-i-lose) -##### StaticChannelBackup on DropBox +##### LND StaticChannelBackup on Nextcloud -See [below on this README](README.md#backup-for-on-chain---channel-funds) for your Backup options to secure your funds against loss. Storing the encrypted Static Channel Backup file to your Dropbox account is an easy and secure way to do this. +See [below on this README](README.md#backup-for-on-chain---channel-funds) for your Backup options to secure your funds against loss. Storing the encrypted Static Channel Backup file to your Nextcloud account is an easy and secure way to do this. + +Nextcloud is an open-source project to host your own files: https://en.wikipedia.org/wiki/Nextcloud - in its basics its an open DropBox replacement ... but can do much much more. You can run it yourself or use a hosted Nextcloud server. Find free Nextcloud providers here to sign up: https://nextcloud.com/signup/ ##### StaticChannelBackup on USB Drive You can connect a small extra USB drive to your RaspiBlitz (choose a small one up to 32GB - don't use second HDD or SSD here, that would drain too much power from the RaspiBlitz). On that USB drive your latest StaticChannelBackup will be stored - just in case your HDD gets an error. -##### ZeroTier +##### C-LIGHTNING NODE -With ZeroTier you can add your RaspiBlitz to a software defined network - see for details: https://en.wikipedia.org/wiki/ZeroTier +This needs to switched on to see the sub-settings options for c-lightning. If switched on it means the c-lighting node implementation is installed and running on your RaspiBlitz - it can run in parallel to LND. If activated you will find an additional option in the SSH Main Menu that offers you more options to operate the c-lightning node. Also under `SERVICES` some apps might just be available if c-lightning is activated. + +##### CL CLBOSS Automatic Node Manager + +TODO + +##### CL Wallet Encryption + +TODO #### SERVICES: Activate/Deactivate Services @@ -994,7 +932,7 @@ As mentioned above you can export a Migration File from your RaspiBlitz with MAI A Migration file contains all the important data from your RaspiBlitz, like your LND data, Bitcoin Wallet, raspiblitz.config, Tor/SSH keys .. and also installed apps. You can use this to migrate your RaspiBlitz to new hardware. -If you want to import it again to a new RaspiBlitz (for example with an updated HDD/SSD), you can choose the `MIGRATION` option on the first setup dialog after the Hardware test (where you normally choose between Bitcoin & Litecoin). +If you want to import it again to a new RaspiBlitz (for example with an updated HDD/SSD), you can choose the `MIGRATION` option on the first setup dialog of a fresh sd card image. ![SSH0](pictures/ssh0-welcome2.png) diff --git a/pictures/SSH5-sync.png b/pictures/SSH5-sync.png new file mode 100644 index 0000000000000000000000000000000000000000..cbdf9c9f5d38a8d2ed6abb3f8706f0512cf9fe49 GIT binary patch literal 13446 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 literal 0 HcmV?d00001 diff --git a/pictures/settings.png b/pictures/settings.png index b0a07e74de8d5ee07d9910d04cb7ee463e7c0500..9c2764fd2dfa418167c2eea3615b91fa870b72cb 100644 GIT binary patch literal 39444 zcmZUb1y~hb*Y_2X?rxCo?nb&h4k>jI>245Ey1To(ySqWUk(L&au5a+ZpZ9&P@AbNl z%$eCUvvckL`mF`QN(z#QaCmTU-n>DSmJ(BW^X6?d@JWM#0?y!crUwIG1k6Q6m83;Q zNtEnuz~+{wZ{AQx8-MzQCPhy@WN7&5)6h5_4V=A;N>EUk$|s+Zu3?hFuEDH+lGr3& z-JdupKi{eKyvbGWZnQuMBe}0(94gy^{;18um(hOQJlR3+AX7+P;EvH1AETXykoWS& z&d6Rw8TQ>fV~D77U44}|MvZTlNX3OE-!8EUA3MT$AO@vF8WO)Lg@v_;s;PXl1Tl;o zOe1`aPNG8vE6qJUvs)$Madpqz=fb_GYqb)BJlZ%TBqYE3OjlCHY3l9$u6EiCl zD=Py~g2BPf+R@OJ!PGcW|3nMer|2!MGmH+iDuadc|sU=9v+zRL(;2nbOEUf&0%m1G% z|NF-Ox>M`F?qp{9?>qnN%Kv|-x`U~`sErlyN=L!}9hrY`{_l(b-pJ4N+VcPEiGRBJ z?^&Rq1>yLa{%6bt;drIlb>F-Zej_a=qUQScI2}3-L;QMhBgR2H1_q5Hh$JT`3rA#@ zZQpi)ZMC>C<6e>_C&S%6BZFt3VB%{=&iV(xEQk?|dO*CE}&)ZGmgc-?|1DQJN+uNQR4AokN!GL&V^NOiVXa;!97pG6`H zQ-n5*5|tAEpE4z44FiSN%a3z;Cp&@7@~qSMZkPC@WyuUCbBB1i!%VcX?}a$yA_WhL zFe#`E@wqUD#+JrS4`Nzq5*yv+o$jtztV|ASmT3wRWuusyzRf9~Y3f6ksIM2OcO-bR zWc!cZH`E_j-*DCFrBXEb+B{nz7puC26Sz+0#o_T=e8C5;+e?#X#-Z7S@DEex9H=hK zR1e0vKMv;_n{pWSMND@*eY^yV+x#JDzKV?>F}{v@h~f*M4){z>8v`o(MnPAil;wh$>jM7 zsPJYm37%Q^T*&{s%Da_xof6NyXj+c7xQTATKpiD0*-?U_ zwnUxIJDHg7ayKy`@*|9(*`NNYIeKwoJ=Zm4ULzJ+=odw)2F_*3aHo9h_vyxsFcr54 zAGKm_)+ep@l7uX!TfOqb0kOI&e(dK};RN~$8$~Jx9c|45xuy96^BHh;nYJn$`!Uzd zUZl|K@Ibk?RW5Y^BE=Wf`?LngDmU?@?d8!NfV>99O{gHTWe4lZO|uGn#rOqbIxWS-ydFL}%zWk=79|$C7JPH&;V}c+Ao1!^#$0R0UNau;ww|ut&_R zRar(?0ycxn3_oP#_);Dlp|_WOJ=<_3*mv2e7p8JIUM5RoApgtK?zr*nC2zr+%_P;z zr}`%Mxz46h>&q-Xt1D+TxZGQs`ml)oTRBKwwd79Dw*JctN48;d zzv)tqX^rQdJyV~K?#-G-2?B9LtLOc}b#T>-{1>yz8$xDjJPutly_QGn%C;$k0-xIS zI?HO^1V(G>mAX67{h7e{zysI_`k~!OoMEPUj@2+U%=}9}JEJa5?pR9iF^D05j`PRW zqE}?HO69W+tEq~|o#ku<>tvbTpCc~4oC|so-|hT-x!xeLY;pmwRp-LnLym&WUh2ge3>#ry#t5$Goau01Tj%G>(U)hP6iJo!pL0@7DNEvx!Yyyn&+iV~# z!MQ#%nohz#8?2+h7M1!`fZ@t}e98pLCNq ziJ%#s;pcbHW<~`Ova@_Ya&IhGYDmUlq@b~FG7Z^o9)Ea~);@`~xC-9w#DY}^_pVxn zo(>c<3ggyIv(Pq8KQC0Ik0rBFwd-=IYoLBs@+oIGZ;;#bTKHHpM-9@|H|LcbW2Z); zs{c~SLAHu_@stL3K5vz6ykn$37jUr-7Vz18EVzihBbkTXIaoxCe#hA2l1Y``@S-f} z>Vloj*P1_O+3<1RI)x@L)l8VB+WP85hzB*2(~|uNOWBI*g2+RjldY+O)ky_984MOn zcfJ*IKE3iH&CCjY@mf;GsLHY6BUDR1lCH$3~Nv9$t-f|F-8A|Yk2T;>tgooQ9P@w%|yK<4kt_B{eVK} zM-6R^FvZ6S>Zr5M$Y-+=gCbg=@%xnTOFo^|fd_G8WMxz;rOwgxY`I?=BIk?SCm^b> z8}Y86wQEy@kV>rA>aU;E&fw+u)r`=-tQ&oAUoe}bnXa(1S5-i%;Rq+?`xA72QIdT3 z$lO@`=NIT=U2Io+p=mvA%%7Z=p1Pw|lDAW=KD}wBL7Q@g=plK`U`mQIVq<-5by>!6 zvogAMUd!RjjB|C}x^uDR#*;^~Atz4NW_E76^qoc3or`}!sp)r?&1!wM+&y>vuS?-; zPTqzOPSwgg_Z`P;6>&iEj?x;1me<+qO= zEzjpwdyy>bbW-yc`C(22+9|ggdgDJsr`K%*`S1 z6XPk*v~y#;aPSw@Bx6F`gHCn(IB3xjj6s75+n8VmsARs%>L+U(tg`K$;Udp!(2gV) zqa}43haDQ`-d35ey6F5f7B7_jkDe84cg5w=E$%%o-tqMD6qpgLSWui=Y4tjNP-6`~ zMvEip6DJGCisNX)La+=a-&KlnuVf@`cV;bbQd7ejCsXu9`iErZhSa69D&>~s$Mn3v zjlMv*SHMopYWt(VD@k(aW4Jq*)zeUA(`mDN;&a78s8wBO+3}G#X-(_++AzQmBV|pX z-TmoPB|au&qPP%8b>{q@Zg1qJjGQLqsmD+9yP@L=_x-C5PR8^FB!SM_1w$W=@#*7n{EEi+tRW>Y zf*Vrf+7xV9a59*Qz!IQ2AsM5lBh-~DthxH2G?hOtc`Y<`^z{cr)WM&+t#%a44ZS}O zUNn|9w1%v9rq2gZ$5=N~IpPrq+Gb|UzO!?LUU&zO#Flr% z`+T9kI;v#JL{m+bB?iW}@6I_8O>c!IJDdJs%;V;H9lXhGVTe(^(n3IGGv=p0MxQ5t zln*P8MMW5hxu2q^$)HUi8-OT_fh4nY#Kb$CE$Kt69*#CBhC>dl*k$ZL3Xt)er_GMV zTU*mdF5YCnfA=E8@6k6>##FqMNDtn*aZqS>PMce#G|`Mds_J32vcyoN?UDPc>=*~E zwZOHJq-ej_wdTDjAZIP~Jf(}53IdHE9-SZ{ILuD)C5}x=VSfi{b*w77AQm?)1*|r+ z@%?DPXw0ZLl^RZWw3Tl3Iw*iIZC$TS17u`z+N8QpJ?vYoyV6vS%uFoK=y-6#fW}@1 z_$HpscNbnMJf*B|-{&GPDioR%CSY0r5roDJ3ULQ|{rGww{F#&g3* ziv|u-lp-g_?{bips1{nJDZ<9G2=i@@l}Oo{y~Z`}fgL$MfGRSLh# zN8=7_vMK)~l^5Yqlqh2I1KV8Bjc_?FwG!+rZRHiW>k~E_ptPa4jHIs%^!L@{L4w7XExd9K(mKFbj6|BV%1)<9cJ

O#qJD|MLI5h z^JarX9&s3nqq&Imc@zymBK*?1Kb}hE4}}=xFu^mpS8u(>>vmXNXtLU5H;_0DSFBnX zk>-7WP;=JtfaikIf6)WaG~{vCZq}>aU`a!jX6r{_+x2!{+*?gxe~kxP+4JMwM?NJ|>%P@;9WDpjmhArf43AUPElez| z5%a=y@DXv!X2DlS+k@3+htGN%mHG^tdQS1F~57$O@6-4dA%SRDB8f90C4Sjh&}G~FB*EDgp`$cDAv<_Ej? z53`{zIaJsGJTR}(*RY4IDG~d{{Fu81Ob=!6rz=f(y1~;@%}Pd>RlC5GG*|~e*6dz< ze%C7Ik9qG_-S*S_n@#M_A2$r$R1!h8;9*QnT|=A`=fu;s*3rvJA)9#IbRxI_q@$ny z$O(EbYwFhRR~kB07e0H*W|pf$FL#riYYPTG4D}ZHSi)q6SL6tZ5C?IC?r_q^PnPRrKZphlU9Z?Majn|=8*&qvAB~@e z5xT6hP`CEAJK6@9$Szdqm8ZU6zR7%fq*6x07Vx;n!1x7ts9#pIaIQtk#x#nA_VQO= zo^QI$Fx1x-_)akH!`jZKODo&K@rb5;Zojhwcb;xG5`Eu6<7LEoJ1cGX^klShDPk`? zv;$pcRjaRQ{n}+QB7;R?s6-?FKGXW`?n~rhx4&Q}1#WctXidZvBze6bZ}Vix=@m7x z!B{(?pNMb--0Rd~dIOOg;f|t2k*W;sFkE}eM~k*YEo2`z^XLpqjH-Xu}axtfg;>p3?LMuwkI zmzt}L@!QqG%;5ZBr5Fp4afDt()yC^=D{9CEs)wgRVU z8hF(c&MHYl@&0sPciRWaH4h$RNGDLqgfHcyL&-oBxqdRi55m9BK-Gx;o!3FDgAB1- zBF5PHXx}`UL{rhchgV9^y!7*EoyDg8a)QtKJbtiy$noiZoJhWxNLeeRFEFe>x$<^g z$VFK>+AdPCze%)`^66n4RA1M{E>-ATJkB(Hn5^Jd5w_;MBA-@c#HoxWBHj39ZiE&k z5xExa#gGhpuVbdaKVR`G^(q<|7=!1hGoR66s!aOIwu_MT^g5f3^$D1s3}rQ*;S5ys z za>QXx4hWLgFOdg%p$ZZ>t(M8b_`n?X`m~=uMDmlAUJ)A;%=GQYliz!IlR!e}s$2;$ z(P^GwK|-d_^U{FDY*F-yXK`z%s2$l-mb*d{b9aGaJ%8%ZqusIbsmrPjul7p>6_~gV zIyM7eo^A9^DYap%1#eRmzyIM@PfthkdHeYQ{yh62Dc7DbU~w5Mvo3NnP!Ezgm{;5$ z&jQ8cqPKy5XNk&!>9`G_pUpwD1D^d-ciqs$b?3|sRfKU90x~%ljt4=P zzyi~H;7os;t0-sgSe1m%Yy*slRl}vD?!L!yb)cT)r*FeXM+CKAE(2k>)qlsV;=t3N zklU9HSnuv$V#oP*mv4LD7D@6$E%pnwJ5HYF@~V^3tavcgxZ==gblyrsikD5++n@e z;=GCd(8_kB>wb`LKg!Su!-mAmKlUkU{a0Gg;cyYl+C|SY*1jO&Ryfx>bs&*@QF`TZNBA^aX5emSz{gQQYim=+^Q(>&(O|$bE8%Y2zH>OYM5; zBh1dXxG$SM-{;A9^vay4Y9@R^#q~=XxQ<=$YzXOXY;;YI${QkXIbw?k{nTklMB-c6 zSXxVHApp0Ns3>EqdLPH%hNhtiCOt^l9~X+Z0Lu#DIH+$Agj;#&Y6r?*?v0}t@L^+J z>0#;iyw*@ntENRPe&0u8Y!PSe5*D4)o4E?c-9T!4l8v7D?CEdqa+dcQ$WEPJ3nnV8 zY|qPXn-af;8iz@hj56_;!KeADs1PS5+|1Lt8#fe$N@lO$fK~J=dxSeaMA1;h%yC3} zLWDEaND?}!393sU{gp(*-z7hlDw7`H!>w?rZf53i{sn=)_8+tA41H87Ry7vvOJcD~ z|4~m-rjV-x*)>?`MPhMrC1q7#-2ZaJ3w&P_edeus?@|`C{`X?rG_UwD3#LyJfKr}i z>;-?JV8~ZwK&J=_|0(?EtFR}eT5#W>j4|y$rEdX+we?QS=ijgY=Vsq7hK>$yny0?Y z3iQ>EKr1ri$eIA2JWd}vMg~s*&1Mx{4D89HPfU$_E)Wo0Z4P{Q&ktv7rW2iPyy)H7 z@Qwwp!MnNts=z2c$WO{n1YAoDG~72~lVY|kr)?jhu!~(VU%99fUmD~!oSLq2Ec#h6iw_k|F#wzD6P-_NBbYzNFZdn@rdDDj_Z4IS_w$jmOM2>s;S03=rSwKzxXv3CeFpDe6P$>P;Xr4^@YAN5yC&^ z$cdMAbE{hTZ;Y5|ersjVm(wN0A}6D0w|5FGi}E&z$`)eq+?NcnC`3>am0QgJy!g>b7B zv;W?QdO|rIPFNr{j+ZJYa#Sk4@RAned`{fXyit(Ol9jAZy4|7s!A9`bi?ma8a$TXK zwXS@&R8>7BEcrCwFm%TzQ9jy#@(UT4!4Lg=WE`f_y#(r1JJtJ9w#p~+8$B+)lBC-k zfhE=J)qGzyF3MWwQvOM+tmf zPj7tlrLvar#>WN3>B@boYhL=vPUH;A$tMrZV(on4Jtkecch_I&IZCjHIwk3&U-*tJ ziZ?nU+J4I^9!#|qFiU&-?5H$9j#XM^7#g+`&3`0n&JBIMJioJ_pkc5Qz{a~=$r9O? zZ;8Pz92b6hwFlpYh2w_`1|4-0rNM}~S{a!O3V50ZRCfNt=f$ps|u>3iTp`#*#V<)tdRsk*f6?Gv+HpBOLgqhh-eoUJuLm<5Ls%C+|0gP8J-aXepO-nHb{&5KE*B zo$K|`a=-OlTGq| z9{qwx!Tq>μ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 literal 79520 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 HG3vhnEWUK^ literal 0 HcmV?d00001 diff --git a/pictures/ssh4-blockchain.png b/pictures/ssh4-blockchain.png new file mode 100644 index 0000000000000000000000000000000000000000..012e5b9481446ba23e18c60302cf2631535569ba GIT binary patch literal 25967 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 N6IoT63Td<8{|8=>3#9-6 literal 0 HcmV?d00001 diff --git a/pictures/ssh4-copy.png b/pictures/ssh4-copy.png new file mode 100644 index 0000000000000000000000000000000000000000..7f84ac15bd7d742a55d0131a41cd2b66e6e43207 GIT binary patch literal 23639 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 Wsi&*v_`L_6J>}`@=d#Wzp$P!$NSe|B literal 0 HcmV?d00001 diff --git a/pictures/ssh4-seed.png b/pictures/ssh4-seed.png new file mode 100644 index 0000000000000000000000000000000000000000..3fd88b59501e56467e1d2a5eec688e7a5a620799 GIT binary patch literal 26802 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 literal 0 HcmV?d00001 diff --git a/pictures/ssh5-mainmenu.png b/pictures/ssh5-mainmenu.png new file mode 100644 index 0000000000000000000000000000000000000000..1736d142f574cb44d4adc168c676bd1d659d188f GIT binary patch literal 45991 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 literal 0 HcmV?d00001 diff --git a/pictures/ssh5-reboot.png b/pictures/ssh5-reboot.png new file mode 100644 index 0000000000000000000000000000000000000000..6da45846efd03a400f82fdfe6c934cd9646c321b GIT binary patch literal 21447 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 literal 0 HcmV?d00001 diff --git a/pictures/ssh5-unlock.png b/pictures/ssh5-unlock.png new file mode 100644 index 0000000000000000000000000000000000000000..bbda25e00f4d15368ac325259e66fe9c8653db8a GIT binary patch literal 8197 zcmd6MbySpX*Do<5DJ??{Bi%!HH%NoDbdAK&3`pmUlyrxZ3JQp%fFK|Z3Wx|wN_R-d zxq05_jrE^T31_@2%iQY0|SFdT}??J0|QeAkYD2B z0N+!aFIs^Y(r`sZU3Eo8sIC{n5$@`Mfx(_^XKhWU#?9VmV`FXIH_XL>@8z$LLdEM_ zhYob~LkByCJNk-JvMem-!6ft8hMzEs^*S3}H*mAH%j0;|HU%oGRuILAfm-+^0mSe2@(T zMkOAe7tXtCj2~G2)MyU5V{)iD8=krpJ({SV3N-b&D_&ER2)8MXP&dU)59?+AApvKc zz__3W1zq@qwAb_5nN{V**7nx+eH|G12-L<0%;z3K90??GpmVEULJC&gTAC1?7$z7s zm^qTv_L(*zVGuDj*w64j^L>_2^c|-OrDDTVxS#Idba!+JUfkU5mJ$*w^bisjGTq$V zq#glZbVXIP*j)r}7%%Qw_?k|-qX9mR98A<5wX`re0T~wqGZu~k0whe}p#dHY4D6H` zjJv=u8Sp3-Vg0idQ>F;}pEAbFTSa*TMRj%H*TBxp!NJ|z8R0YgthFDgY7%Z};$xzv zDPf0j8lTyJ!A3{?Ed{4W(eW$p3?hf6)Bb zTYzU7d@0z!`b-A@@gGs3hv{V1mE;YPnA`bx-cx*I=!K0M)$}lTcYNBBBQcjxjIM|Z zM@5IzqoRL3n~G4qLvFs0V)VPaMvmRx(QOpJ8Y*kNbG`b;dv%ysvhHv;WLJE5duwDU zVKo12cz4o2rye1^!%z&xVuWHnQYtEYHt_o8voKs#7z?zkoIoC=RJ4KHxA*9AdSwTo zArRDpqa+7hR~S|thM7DGgv@#K}=(;$N~O@4!NZ7pGM4NZU!IN91v zBcd(h8}PX(ILb7ESdC@tUIH94K4--Q9=Bj7Y1a5U)L!)^}L(oYIFO?+c}A8^VJIE^=o zf5!qir32*uUiEO3z#uZlVdrfQbH*qURk&sI3~&fuD@ zFbE({?_z^KYaf;*d)@ScyN=2R7%nRd zu?!-DP9sMU@}K+PjIFXC!rCS-&o`?(3pd^7kV^?Gzx?OkoS5gqdRADp^K5#z+D>Ly zt}k{)t%CNW*C$@3F0htf=1cmE$lhFfPjMWJ4qRUzj^^^)eZE|^A*~;!wXs&^7@~PS zBX?9QifCD9J)AU0^vKNm&%bG$ePW4RxHIQ|#fueyg$B2WUZ3^utrAFXzfYwWev+2$ zR1gppOK~M>*`>-5YpiQU8tj?@fi`%aqn<^>(}Pi6%j|8Q!c zj$iQB2^u-u?`0T;&9Is^C}rfWW=vP9Yl1{~PeeWr2AQl@%50Z|dWUdcs>z}k*dhED(<5$8wi zc5PkOQa!GM?7sUwRJq?RpAMJJ)H&&lw>|Y&JPR7SZ|3~MHl@O!8*;LoY307u`{iWk z*No5lSPvw!vvs>+W{4?C%671ELjPelL^|;I$p_S)?W-k9V~ekJ0l$+!8{;Ixs$!`H z9h;nwIIxmIWc#N<9A2r!V7?C5_g__xKXXaBn~aG43O@PeSpUsPu$SIHPuOuT^d|Va z#z05<8y}X>+Kbqn)qOAc=?wu;N-%bAK zperHd`(yv?>#K|0w&Ur+ovuy1m|>Bbp;_>yh}UnmNaLnn$kQp=k@att#%-*?)CqCc zfl2M=BHC+*U9BuFa%@(6`pYF{Pn(a%9_Bg~22ZX8%y)#xIIfhar&c}a#eRD9RrO8y zCn(8E!PA}jb!EiTmG$rSRCB){4n*sMat8;4FjWCAi5I49@${0DlU$#ZV(|-vXSuF& zkPRgXC$se~#!po~_-${nM1Pe$Un|xc%;0ewFK}UbO<3~v%O8ChW-w_uMz|r774+AQ z>mv0Rx@oULo}0SSt1pcRt427H@lU;3uL3Hz!ZS@Akv*~O3i0n2-r2t1!$&<-RzF4L z`EkG<;;VV%uC+b)!v!4?-~IkGxBKOq0j%*i)8pSEYbDz`sDEU<=?7aUt|WCm@(uq}8`o z<=lRq&B8ueS<{f(nP14Kjlvv<-bxxowz*Us`s`Zx#JK4kdpFT>3GwmD5k9`FIybWR zwRkuV*6zH<#wZqP_fhGxm?O3mYDvht{+TE`04-5H5wu7|%7=`iG&1Q7N!isB{WU>D zm=ifFbr|oqVS~F)h8xq;A~DGAYNoRwv)HplBjTFXY0{O$p~UC)!qCyicc#`()!bP0 zr$=OdLF8T4P(}lPTv|kHZNSE>a#w>~c{E3}j0q0XqGOGiUSeW$4v#I*x;m~x;B=$2 zr(A~=#rPbx&}Fi(Gz&EPAXI8Qa$yGXvHnW>2#?e`X8YYB?@FTN4j-_7mi_Sk{@86C zUEU%X;(CF_lpz!fHvJWPbG7Z4cZjOy17@P~@_43bNckv!bvbYzIObE~!2>I`cGCMz zbrLej{IozWL}&aM;Hq}bMIRTL-s}~vF-gvcVMoZ$Y}W(}(efkXfA2KRxZjTGT5Oq} z-+Yelg}dX%jc?5A-v#?1-F~(B)-fFu+KY9m-q17cBa0q4%uXLmOE78XU3RYKd5`cP zbqYLJ-b;T_1u<)M-yUoTp$ZQK-JarjeLnr#OTIxEwXojR*(<>sHjKx{zE8ki6Lu!K zO37#4$v$Uf?ncRFDuveZ`W)^!wxv0U(x{?4JL(xF(rI76%k5NzH!uN>SGHjn6+9=o z-J>Mc7IJnvg{b+JaNH3ms~Kv zv{L%M3f52|G+$7B;3B>6Gw>F>Cc0g4L|q__sj&T$e?D2sx@3ZCV3^SE{&K+AD1Tyo ztAbAnAa4U70ei>4G<0)p)Nol*!X8gYgEu(J7s zgt`D8B`-1^DiT-7D-2y>2!NTbyO=DD;q|P)TW~FJN4ZTv}9K;?G7Nr&! zR;mb`CY6c|v98gcrJqd}1BOKHun<2ToLN}yeD@ZgJ<8zJf7U+BRo!YUb9FTS@?C%6 zqY;AfRVH3mKPImZiZrh~iw;-rCf-ZH)?P>6nLVGc!tNia`O~o`J|G95k%XC~G6{xM z(4QF^SE$Ff87WzrPxkNTG!G2S!iPz%_&Gpx zTDc7U=k=D;>wBqBFaB(1>RhKh&YWD5C zLnXv+Pm&I4?WYP*VkFGwGzzGh#$F0MUoW5WZ5!fI;*UZ15Z$o~1V0)u2dfc4O3Qk! zO%?=tyho+KYois`V@eU4_sXkKvUDM*3(=-uPB?G*&s4rfg~s58ogX}dc66i3iKash zydJ*W`+3^!43&(YAQSyy-oCPE6F@bOw^N$xN{wg1d^TQNtf`H4`MEu>^O0IW~LOQux_ud0F zv@3-cl{>4U_?JgaO51j_b>{>QUJ44)9ECGD%%m2clI<|65T&LiET3wnV~3QpauZ7HSydy3)d7C&vKVBl}s z$X*bFZDat^KL0RjIdXz%5SxCcNHy*)eTx3XomnpON`eGmlbrUWEau@BbE>x=uLC!= zY<2Mf(wl!5rb~2Uh=z1A*|Xr$Bvo1195fSJJvaR0&NkNDOGXh-8WY7P+2Y5mw7rzY zSF7j$c2`iNdz{Tk{g7a(b%3+d1Uq`QZl`6_ELqzK`xInQtfZl5D*p&)G=eqLfWwBK zD;O?=4v5FPN_@MU*mD{6DMa+V(tYHWP+k0Jj~nsP`)&F6whxxcdaZi-3>3@#~7lo*(;IpT58HF>SGe%z-! z&ERL7}|*gHF#=)%ingHutxIQ3^5TEx{?z#*}b?8L&QqGeCL;1xlXvkh7f z%XcF!Y(VdR&(|hA;KaXX-dS99b0=Ro=izN%fD5j9J!);)ixtvPPKvhaRRpXx?GwC7 zmFOfU?!t=Rd3mq87n~8_I}^02&4yEo@wo^fbLqyGa7s8|Mc*gydxUsDhlJYT5yeu1 zAHt<i=!JLvy@ks?ZMjk1Hlon zrtL0t>7^Fy zzJ1FHWzrB4MqH_&H9=pd)p)b9G|LIiFY!t=)K= z04$0F!$8gX^=CNi*C;y;Tv4zngD9l9_-%DU8N}1md(pFY8)TO6!HKiDQCZy(iTBuR zSXYV?M`%x5{PWcvWerlxo+*J*7&vHsLES*qhg6qMsDD3g4d0q1((z>+L8QD?Wp#U? z%!cjwQunCW=d|~E{Qk-5Ignwy143Bq(tGLW}EHpBxwPzE!fea;q$3j1MU{bXs7`&Tt2ESX!Dvl zAoqq1R4$+4X_xqH*MDy?V9xWW%FuBaQi4CS)=3$5X=BJC%zqTTzYmX=JdDO<&Dlkc z9v%9b)G6}8-HiFeyQ9?dq03&)D^@mwuqRfpd`Vdrvl~oUEc?3AshWrPhiUUJRtDnk z3bKf<5_g4(t`Jtu%za_gQgJ`G&DkO>m}ob4G2@>4B=R*9t{bD?ES9aYl+)RHRa!zN z_0i))+L74m5}jbH=Q&TLmh)mScDLFgNs7DGgZ-_b>L?PpZ46A(B%K@xKX8**L@jVV zWw6S?CRO=dRCbfsYxP0e0C?XjdlsNuM8U7CW7BtMCkq-j33|6_$f&5X$x4o;3K2 zubq5=0kIFB&&EXmTRQ6m=R%p_t&-K4Nm{3T0vEq*B!sQ?e4{c0GsPI6@%f`$OH&@_ zoHK>bc>9C$y@c9#P(go@|NS(*zHPPEXKji~KJ@5j%8&9^B;{ zvu#i94=QqMc)|3tRD0UGSj`e_SZ2AY-U=>B!qsYufBwF4^0Fzmb*b}v^5(eTp8Cd) z*h^~4?k}eS(SWHF5h&jPS(8{eB?Wh~f<;*U8<3RjL3AIROQtDlxG^dd+|$!Y9B>|T z_gHY-$l0j}r0eJi2X0T;Z?x%)9c&!fV0z1T%1T*Cu2o?QWawRdL0np0STy4cqWtPB z#^*TU6GRMk@A>gjXrkNWhLwYODzgp_g zI2uRN|5Wsmy&#F~V1x5L>-OSll$q+$vizB&pV46xX1X*OXg>M2C3xpFMuuMsh2JDx zU)9*dUe}Q2+ol+MubvRa_ACy;5cB@{%1m(Sg1Uj5y`lqyUSg8$Vjyuq!|;p*;h-g` z|G0`}#fE~dMvCxI#^)75Dl2Q9oLIpIS4E62m9UhoAjVBbPjJv@@-UaT>H3XN* z{-4G_P0h#av(^Px7GJV{>m96My9!s2u9t5kisThBmx=7t_I#W(-t`sw>swnSOXKtE_FlwE z+IU40iS&K^9lK&@v254MF@WrQ5NmRWlr>BhuS~z4J=|zch7Fz+C8gyU57p9y(0L9( zjM`(m&5Jj%5chYag7&2PsT44QaV(7GaB{kLk1wcCT)f%$cg5a3F1QqE$?CWLd(lPQ z0d&?!9Hg)-C$;x>xOiYGcLjHu)p~0>vB@?)!ff`Vb?2OYvtDc5)B^mS6E~(h!&7}) z@ccsaBR-+x{#*hXUcJRPsDeexajItJxBW@qV~y93)`A@T;W6n+K?jn=^jO5q-&NN~ z2rizPas1_ zDqnK+#X0H)l5u}GobXKV3k5@&;^VW$r4#*8f_u2iJ=MXCU%+_Gj;CW0;pM8SNe-U5 zuJ6>%`Z?)=MOsC(=qs(vEN10jIfNb(l*1|hMb9&Jx!&76f*eJ7)8UiiMRq?c?k=_m zW45&$NWiEGwD=bFjMge|X+S0kru`C_-#}i0Q(Z2mI^`(60kBiPO*?=-kWpfiRxks> zXpJ%BX<(_Rd;sk-Cf(971a5IDK=hwe-3kum3=E@yjD&IxmmW~J1`yt^WDYLn!D7@U z1yUB2oo|(ZTi^ey%2B1g01geKfjUpuM$v z>pO zyo)Ix!H#Z1e_U*VNNAbEU`E6HVwD5|>A)j)rRQrWCNYSOiC1Vxh2&epsKOnGbFy=C zLTU4)pB@WcU7YAp%5it8CPsX&M$EOpa@0oy$rhBHI9^3kb)FFAZHlEB*k`}9zgEu% z;IOj+&Gs5Iv;fc~L;&m;SFk$h1HF<5z#LFF@C2-d@BugpFLTn=0X$x0d)iLxbDM=J zW3Tcjn@bLTQh+oQZi%uS#LBEBJrSti5$JP=GR`zoK>a-+mnxgB11k10K=qEV6{txu zNr5{&;r}FcW7PWz!uJT_w-W}w1%KgD0Pt{TrK12m8Mk;|iKI~hcnojxM3|y)@t^?= n8BY`gZt+9|^8ZKmjvI_iDyve>$WOm+Q^M-X+DdN~tRwyxDPOxN literal 0 HcmV?d00001 From 979bcce963d39aa093cbe37ed8e377c8133c05c2 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 30 Sep 2021 23:41:16 +0200 Subject: [PATCH 1216/1295] fix image in readme --- README.md | 2 +- pictures/{SSH5-sync.png => ssh5-blocksync.png} | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename pictures/{SSH5-sync.png => ssh5-blocksync.png} (100%) diff --git a/README.md b/README.md index c94ec1271..020370aac 100644 --- a/README.md +++ b/README.md @@ -335,7 +335,7 @@ Just wait a bit and then the SSH command to login again. Dont forget to use this If you run LND you will be asked to unlock your wallet - thats always your password C. BTW under `SETTINGS` in the main menu you can activate the Auto-Unlock if you prefer. -![SSH5](pictures/ssh5-sync.png) +![SSH5](pictures/ssh5-blocksync.png) Remeber that now your RaspiBlitz might need a longer time to sync/validate the blockchain - this can be multiple days. In the beginnig you might see fast progress but its normal that this gets slower later on. Also your RaspberryPi CPU might get quite hot ... thats also OK during this inital sync time - the RaspberryPi has its own protection against overheating and will push thru. diff --git a/pictures/SSH5-sync.png b/pictures/ssh5-blocksync.png similarity index 100% rename from pictures/SSH5-sync.png rename to pictures/ssh5-blocksync.png From 225891651cbb10412e97394fe70f5b044110aa86 Mon Sep 17 00:00:00 2001 From: openoms Date: Fri, 1 Oct 2021 07:37:04 +0100 Subject: [PATCH 1217/1295] cl.update: fix version syntax --- home.admin/config.scripts/cl.update.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/config.scripts/cl.update.sh b/home.admin/config.scripts/cl.update.sh index 9643339a4..dfcdb72d8 100644 --- a/home.admin/config.scripts/cl.update.sh +++ b/home.admin/config.scripts/cl.update.sh @@ -18,7 +18,7 @@ mode="$1" # RECOMMENDED UPDATE BY RASPIBLITZ TEAM # comment will be shown as "BEWARE Info" when option is choosen (can be multiple lines) -clUpdateVersion="v0.10.1" # example: v0.10.1 .. keep empty if no newer version as sd card build is available +clUpdateVersion="0.10.1" # example: v0.10.1 .. keep empty if no newer version as sd card build is available clUpdateComment="Please keep in mind that downgrading afterwards is not tested. Also not all additional apps are fully tested with the this update - but it looked good on first tests." # GATHER DATA @@ -79,7 +79,7 @@ if [ "${mode}" = "verified" ]; then if [ ${#clUpdateVersion} -gt 0 ];then - /home/admin/config.scripts/cl.install.sh update ${clUpdateVersion} + /home/admin/config.scripts/cl.install.sh update v${clUpdateVersion} else /home/admin/config.scripts/cl.install.sh on fi From 488ffec0d3237cf2ddaa3443204deb60c251c911 Mon Sep 17 00:00:00 2001 From: openoms Date: Fri, 1 Oct 2021 07:41:44 +0100 Subject: [PATCH 1218/1295] cl.install: add logrotate --- home.admin/config.scripts/cl.install.sh | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/home.admin/config.scripts/cl.install.sh b/home.admin/config.scripts/cl.install.sh index 103db9e29..8a36a31a9 100644 --- a/home.admin/config.scripts/cl.install.sh +++ b/home.admin/config.scripts/cl.install.sh @@ -204,6 +204,29 @@ always-use-proxy=true ################### /home/admin/config.scripts/cl.install-service.sh $CHAIN + ############# + # logrotate # + ############# + echo "\ +/home/bitcoin/.lightning/${CLNETWORK}/cl.log +{ + rotate 5 + daily + copytruncate + missingok + olddir /home/bitcoin/.lightning/${CLNETWORK}/cl.log_old + notifempty + nocompress + sharedscripts + # We don't need to kill as we use copytruncate + #postrotate + # kill -HUP \`cat /run/lightningd/lightningd.pid\' + #endscript + su bitcoin bitcoin +}" | sudo tee /etc/logrotate.d/${netprefix}lightningd + # debug: + # sudo logrotate --debug /etc/logrotate.d/lightningd + echo echo "# Adding aliases" echo "\ From 1b53bd41e4934d25e5581be14f2bf971c6a000d6 Mon Sep 17 00:00:00 2001 From: openoms Date: Fri, 1 Oct 2021 08:53:46 +0100 Subject: [PATCH 1219/1295] cl.install: stop & add warning on update to master this will not stop the script when updating to a chosen release with "${clInterimsUpdate}" == "reckless" #2564 --- home.admin/config.scripts/cl.install.sh | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/home.admin/config.scripts/cl.install.sh b/home.admin/config.scripts/cl.install.sh index 8a36a31a9..3828d46f1 100644 --- a/home.admin/config.scripts/cl.install.sh +++ b/home.admin/config.scripts/cl.install.sh @@ -108,6 +108,9 @@ if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = testPR ];then else echo "# Updating to the latest commit in:" echo "# https://github.com/ElementsProject/lightning" + echo "# Make sure this is intended, there might be no way to downgrade your database" + echo "# Press ENTER to continue or CTRL+C to abort the update" + read -r key fi elif [ "$1" = "testPR" ]; then @@ -207,6 +210,8 @@ always-use-proxy=true ############# # logrotate # ############# + echo + echo "# Set logrotate for ${netprefix}lightningd" echo "\ /home/bitcoin/.lightning/${CLNETWORK}/cl.log { @@ -228,8 +233,9 @@ always-use-proxy=true # sudo logrotate --debug /etc/logrotate.d/lightningd echo - echo "# Adding aliases" - echo "\ + if ! grep -Eq "${netprefix}lightning-cli" /home/admin/_aliases; then + echo "# Adding aliases" + echo "\ alias ${netprefix}lightning-cli=\"sudo -u bitcoin /usr/local/bin/lightning-cli\ --conf=${CLCONF}\" alias ${netprefix}cl=\"sudo -u bitcoin /usr/local/bin/lightning-cli\ @@ -239,7 +245,8 @@ alias ${netprefix}cllog=\"sudo\ alias ${netprefix}clconf=\"sudo\ nano ${CLCONF}\" " | sudo tee -a /home/admin/_aliases - sudo chown admin:admin /home/admin/_aliases + sudo chown admin:admin /home/admin/_aliases + fi echo "# The installed C-lightning version is: $(sudo -u bitcoin /usr/local/bin/lightningd --version)" echo From 4149d5d4cf171abb1ff24067024eaa01b7edd74f Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Fri, 1 Oct 2021 09:23:45 +0100 Subject: [PATCH 1220/1295] add a C-lightning FAQ page (#2567) * add FAQ.cln.md * FAQ.cln: notes on offers & dual funded channels * change cln entries to cl * FAQ.cl: add more details * Title: C-lightning on the RaspiBlitz FAQ * FAQ.cl: add config options * FAQ.cln: add feeadjuster options * add offer example --- FAQ.cl.md | 668 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 668 insertions(+) create mode 100644 FAQ.cl.md diff --git a/FAQ.cl.md b/FAQ.cl.md new file mode 100644 index 000000000..695933077 --- /dev/null +++ b/FAQ.cl.md @@ -0,0 +1,668 @@ + +# C-lightning on the RaspiBlitz FAQ + +- [C-lightning official documentation](#c-lightning-official-documentation) +- [Commands and aliases](#commands-and-aliases) +- [Directories](#directories) +- [Config file](#config-file) + - [Default values](#default-values) + - [All possible config settings](#all-possible-config-settings) +- [Plug-ins](#plug-ins) + - [General info](#general-info) + - [Directories](#directories-1) + - [Implemented plugins](#implemented-plugins) + - [Add a custom plugin](#add-a-custom-plugin) + - [CLBOSS](#clboss) + - [Feeadjuster](#feeadjuster) + - [Dual funded channels](#dual-funded-channels) + - [Reading](#reading) + - [Setting up](#setting-up) + - [Open a dual funded channel](#open-a-dual-funded-channel) + - [Fundchannel syntax](#fundchannel-syntax) + - [Offers](#offers) + - [About the feature bits](#about-the-feature-bits) +- [Testnets](#testnets) +- [Backups](#backups) + - [Seed](#seed) + - [Channel database](#channel-database) + - [Recovery](#recovery) +- [Script file help list](#script-file-help-list) + +## C-lightning official documentation +* https://lightning.readthedocs.io/ +* the lightningd is built by deafult with + +## Commands and aliases + +* Check if the C-lightning daemon is running: + ``` + sudo systemctl status lightningd + ``` +* Follow it's system output for debugging: + ``` + sudo journalctl -fu lightningd + ``` +* The logs can be accessed in the menu `SYSTEM` - `CLLOG` +or with the alias: `cllog` +* The frequently used commands are shortened with alisases. Check them with the command `alias`: + ``` + alias cl='sudo -u bitcoin /usr/local/bin/lightning-cli --conf=/home/bitcoin/.lightning/config' + alias clconf='sudo nano /home/bitcoin/.lightning/config' + alias cllog='sudo tail -n 30 -f /home/bitcoin/.lightning/bitcoin/cl.log' + ``` +## Directories +* All data is stored on the disk in: +`/mnt/hdd/app-data/.lightningd` +* and symlinked to: +`/home/bitcoin/.lightningd` + +## Config file +* Edit in the menu `SYSTEM` - `CLNCONF` or use the alias `clconf` + +### Default values +* on the RaspiBlitz for mainnet + ``` + network=bitcoin + announce-addr=127.0.0.1:9736 + log-file=cl.log + log-level=info + plugin-dir=/home/bitcoin/cln-plugins-enabled + # Tor settings + proxy=127.0.0.1:9050 + bind-addr=127.0.0.1:9736 + addr=statictor:127.0.0.1:9051/torport=9736 + always-use-proxy=true + ``` +### All possible config settings + * can be shown by running: + `lightningd --help` + * Place the settings in the config file without the `--` and restart lightningd + ``` + Usage: lightningd + A bitcoin lightning daemon (default values shown for network: bitcoin). + --conf= Specify configuration file + --lightning-dir=

Set base directory: network-specific subdirectory is + under here (default: "/home/admin/.lightning") + --network Select the network parameters (bitcoin, testnet, + signet, regtest, litecoin or litecoin-testnet) + (default: bitcoin) + --mainnet Alias for --network=bitcoin + --testnet Alias for --network=testnet + --signet Alias for --network=signet + --allow-deprecated-apis Enable deprecated options, JSONRPC commands, fields, + etc. (default: true) + --rpc-file Set JSON-RPC socket (or /dev/tty) + (default: "lightning-rpc") + --plugin Add a plugin to be run (can be used multiple times) + --plugin-dir Add a directory to load plugins from (can be used + multiple times) + --clear-plugins Remove all plugins added before this option + --disable-plugin Disable a particular plugin by filename/name + --important-plugin Add an important plugin to be run (can be used multiple + times). Die if the plugin dies. + --always-use-proxy Use the proxy always (default: false) + --daemon Run in the background, suppress stdout/stderr + --wallet Location of the wallet database. + --large-channels|--wumbo Allow channels larger than 0.16777215 BTC + --experimental-dual-fund experimental: Advertise dual-funding and allow peers to + establish channels via v2 channel open protocol. + --experimental-onion-messages EXPERIMENTAL: enable send, receive and relay of onion + messages + --experimental-offers EXPERIMENTAL: enable send and receive of offers (also + sets experimental-onion-messages) + --experimental-shutdown-wrong-funding EXPERIMENTAL: allow shutdown with alternate txids + --help|-h Print this message. + --rgb RRGGBB hex color for node + --alias Up to 32-byte alias for node + --pid-file= Specify pid file + (default: "/home/admin/.lightning/lightningd-bitcoin.pid") + --ignore-fee-limits (DANGEROUS) allow peer to set any feerate + (default: false) + --watchtime-blocks Blocks before peer can unilaterally spend funds + (default: 144) + --max-locktime-blocks Maximum blocks funds may be locked for (default: 2016) + --funding-confirms Confirmations required for funding transaction + (default: 3) + --cltv-delta Number of blocks for cltv_expiry_delta (default: 34) + --cltv-final Number of blocks for final cltv_expiry (default: 18) + --commit-time= Time after changes before sending out COMMIT + (default: 10) + --fee-base Millisatoshi minimum to charge for HTLC (default: 1000) + --rescan Number of blocks to rescan from the current head, or + absolute blockheight if negative (default: 15) + --fee-per-satoshi Microsatoshi fee for every satoshi in HTLC + (default: 10) + --max-concurrent-htlcs Number of HTLCs one channel can handle concurrently. + Should be between 1 and 483 (default: 30) + --min-capacity-sat Minimum capacity in satoshis for accepting channels + (default: 10000) + --addr Set an IP address (v4 or v6) to listen on and announce + to the network for incoming connections + --bind-addr Set an IP address (v4 or v6) to listen on, but not + announce + --announce-addr Set an IP address (v4 or v6) or .onion v3 to announce, + but not listen on + --offline Start in offline-mode (do not automatically reconnect + and do not accept incoming connections) + --autolisten If true, listen on default port and announce if it + seems to be a public interface (default: true) + --proxy Set a socks v5 proxy IP address and port + --tor-service-password Set a Tor hidden service password + --experimental-accept-extra-tlv-types Comma separated list of extra TLV types to accept. + --disable-dns Disable DNS lookups of peers + --encrypted-hsm Set the password to encrypt hsm_secret with. If no + password is passed through command line, you will be + prompted to enter it. + --rpc-file-mode Set the file mode (permissions) for the JSON-RPC socket + (default: "0600") + --force-feerates Set testnet/regtest feerates in sats perkw, + opening/mutual_close/unlateral_close/delayed_to_us/htlc_resolution/penalty: + if fewer specified, last number applies to remainder + --subdaemon Arg specified as SUBDAEMON:PATH. Specifies an alternate + subdaemon binary. If the supplied path is relative the + subdaemon binary is found in the working directory. + This option may be specified multiple times. For + example, --subdaemon=hsmd:remote_signer would use a + hypothetical remote signing subdaemon. + --log-level log level (io, debug, info, unusual, broken) [:prefix] + (default: info) + --log-timestamps prefix log messages with timestamp (default: true) + --log-prefix log prefix (default: lightningd) + --log-file= log to file instead of stdout + --version|-V Print version and exit + --autocleaninvoice-cycle Perform cleanup of expired invoices every given + seconds, or do not autoclean if 0 + --autocleaninvoice-expired-by If expired invoice autoclean enabled, invoices that + have expired for at least this given seconds are + cleaned + --fetchinvoice-noconnect Don't try to connect directly to fetch an invoice. + --bitcoin-datadir -datadir arg for bitcoin-cli + --bitcoin-cli bitcoin-cli pathname + --bitcoin-rpcuser bitcoind RPC username + --bitcoin-rpcpassword bitcoind RPC password + --bitcoin-rpcconnect bitcoind RPC host to connect to + --bitcoin-rpcport bitcoind RPC host's port + --bitcoin-retry-timeout how long to keep retrying to contact bitcoind before + fatally exiting + --commit-fee Percentage of fee to request for their commitment + --funder-policy Policy to use for dual-funding requests. [match, + available, fixed] + --funder-policy-mod Percent to apply policy at (match/available); or amount + to fund (fixed) + --funder-min-their-funding Minimum funding peer must open with to activate our + policy + --funder-max-their-funding Maximum funding peer may open with to activate our + policy + --funder-per-channel-min Minimum funding we'll add to a channel. If we can't + meet this, we don't fund + --funder-per-channel-max Maximum funding we'll add to a channel. We cap all + contributions to this + --funder-reserve-tank Amount of funds we'll always leave available. + --funder-fuzz-percent Percent to fuzz the policy contribution by. Defaults to + 5%. Max is 100% + --funder-fund-probability Percent of requests to consider. Defaults to 100%. + Setting to 0% will disable dual-funding + --funder-lease-requests-only Only fund lease requests. Defaults to true if channel + lease rates are being advertised + --lease-fee-base-msat Channel lease rates, base fee for leased funds, in + satoshi. + --lease-fee-basis Channel lease rates, basis charged for leased funds + (per 10,000 satoshi.) + --lease-funding-weight Channel lease rates, weight we'll ask opening peer to + pay for in funding transaction + --channel-fee-max-base-msat Channel lease rates, maximum channel fee base we'll + charge for funds routed through a leased channel. + --channel-fee-max-proportional-thousandths Channel lease rates, maximum proportional fee (in + thousandths, or ppt) we'll charge for funds routed + through a leased channel. Note: 1ppt = 1,000ppm + --disable-mpp Disable multi-part payments. + ``` + +## Plug-ins + +### General info +* https://lightning.readthedocs.io/PLUGINS.html#a-day-in-the-life-of-a-plugin +* https://github.com/lightningd/plugins/ + +### Directories +* The plugins are installed to: +`/home/bitcoin/cl-plugins-available` +* and symlinked to: +`/home/bitcoin/cl-plugins-enabled` +* All plugins in the `/home/bitcoin/cl-plugins-enabled` directory are loaded automatically as set in the config file: `/home/bitcoin/.lightningd/config` + +### Implemented plugins +* summary +* sparko +* clboss + +### Add a custom plugin +* The easiest way is to place the plugin in the +`/home/bitcoin/cl-plugins-enabled` +directory and start with + ``` + lightnign-cli plugin start /home/bitcoin/cl-plugins-enabled/PLUGIN_NAME + ``` + or restart C-ligthning with: + ``` + sudo systemctl restart lightningd + ``` + to have it loaded automatically. + From that directory it will load auomatically after restarts. + To just load it run it once store in: + `/home/bitcoin/cl-plugins-available/` + +### CLBOSS +A plugin for automatic LN node management. +CLBOSS only requires to have funds deposited to the onchain wallet of C-lightning. +The recommended amount to start is ~ 10 million satoshis (0.1 BTC). + +It does automatically: + +* generate outbound capacity - opens channels +* generate inbound capacity - submarine swaps through the boltz.exchange API +* aware of onchain fees and mempool through c-lightning and makes transactions when fees are low +* manages rebalancing - performs probing +* closes bad channels (inactive or low traffic) - this function needs to activated manually + +Overall it is a tool which makes users able to send and receive lightning payments with minimal interaction, basically setting up a routing node by itself. + +The transactions made by CLBOSS does cost money and running it requires a fair amount of trust in the (fully open-source - MIT) code. +Neither the CLBOSS nor the RaspiBlitz developers can take resposibility for lost sats, use at your own discretion! + +* Activate it in the menu - `SETTINGS` - `-CL CLBOSS` +* Discussion: https://github.com/rootzoll/raspiblitz/issues/2490 +* Advanced usage +https://github.com/ZmnSCPxj/clboss#clboss-status +* Stopping CLBOSS will leave the node in the last state. No channels will be closed or funds removed when CLBOSS is uninstalled. + +### Feeadjuster + +* Install: + +* to set the default fees in the config add: + ``` + fee-base=BASEFEE_IN_MILLISATS + fee-per-satoshi=PPM_FEE_IN_SATS + ``` +* more options for the feeadjuster to be set in the c-lightning config can be seen in the [code](https://github.com/lightningd/plugins/blob/c16c564c2c5549b8f7236815490260c49e9e9bf4/feeadjuster/feeadjuster.py#L318): + ``` + plugin.add_option( + "feeadjuster-deactivate-fuzz", + False, + "Deactivate update threshold randomization and hysterisis.", + "flag" + ) + plugin.add_option( + "feeadjuster-deactivate-fee-update", + False, + "Deactivate automatic fee updates for forward events.", + "flag" + ) + plugin.add_option( + "feeadjuster-threshold", + "0.05", + "Relative channel balance delta at which to trigger an update. Default 0.05 means 5%. " + "Note: it's also fuzzed by 1.5%", + "string" + ) + plugin.add_option( + "feeadjuster-threshold-abs", + "0.001btc", + "Absolute channel balance delta at which to always trigger an update. " + "Note: it's also fuzzed by 1.5%", + "string" + ) + plugin.add_option( + "feeadjuster-enough-liquidity", + "0msat", + "Beyond this liquidity do not adjust fees. " + "This also modifies the fee curve to achieve having this amount of liquidity. " + "Default: '0msat' (turned off).", + "string" + ) + plugin.add_option( + "feeadjuster-adjustment-method", + "default", + "Adjustment method to calculate channel fee" + "Can be 'default', 'soft' for less difference or 'hard' for higher difference" + "string" + ) + plugin.add_option( + "feeadjuster-imbalance", + "0.5", + "Ratio at which channel imbalance the feeadjuster should start acting. " + "Default: 0.5 (always). Set higher or lower values to limit feeadjuster's " + "activity to more imbalanced channels. " + "E.g. 0.3 for '70/30'% or 0.6 for '40/60'%.", + "string" + ) + plugin.add_option( + "feeadjuster-feestrategy", + "global", + "Sets the per channel fee selection strategy. " + "Can be 'global' to use global config or default values, " + "or 'median' to use the median fees from peers of peer " + "Default: 'global'.", + "string" + ``` + +* start the feeadjuster + ``` + cl plugin start /home/bitcoin/cl-plugins-available/plugins/feeadjuster/feeadjuster.py + ``` +* stop (best to run only periodically) + ``` + cl plugin stop /home/bitcoin/cl-plugins-available/plugins/feeadjuster/feeadjuster.py + ``` +* Can use menu - `CL` - `SUEZ` to visualize the channel balances and fee settings +* check the list of base fees + ``` + cl listpeers | grep fee_base_msat + ``` +* check the list of proportional fees + ``` + cl listpeers | grep fee_proportional_millionths + ``` +* set the fees to the defaults + ``` + cl setchannelfee all + ``` + +### Dual funded channels +#### Reading +* https://medium.com/blockstream/c-lightning-opens-first-dual-funded-mainnet-lightning-channel-ada6b32a527c +* https://medium.com/blockstream/setting-up-liquidity-ads-in-c-lightning-54e4c59c091d +* https://twitter.com/niftynei/status/1389328732377255938 +* lightning-rfc PR: https://github.com/lightningnetwork/lightning-rfc/pull/851/files +* represented by the feature bits 28/29 + +#### Setting up +* activate the feature on your node: +Type: `clconf` or use the menu `SYSTEM` - `CLCONF`. +Add the line: + ``` + experimental-dual-fund + ``` + Save and restart C-lightning. + +* set up a liquidity ad: + ``` + lightning-cli funderupdate -k policy=match policy_mod=100 + ``` + or set in the config for example - see the meaning of each line in https://medium.com/blockstream/setting-up-liquidity-ads-in-c-lightning-54e4c59c091d : + + ``` + experimental-dual-fund + funder-policy=match + funder-policy-mod=100 + lease-fee-base-msat=500sat + lease-fee-basis=50 + channel-fee-max-base-msat=100sat + channel-fee-max-proportional-thousandths=2 + ``` +* check the settings used currently on your node: + ``` + lightning-cli funderupdate + ``` +* check your advertised settings (needs some minutes to appear): + ``` + lightning-cli listnodes $(lightning-cli getinfo | jq .id) + ``` + +#### Open a dual funded channel +* check if a node has onchain liquidity on offer: + ``` + lightning-cli listnodes nodeid + ``` + + Example: + ``` + lightning-cli listnodes 02cca6c5c966fcf61d121e3a70e03a1cd9eeeea024b26ea666ce974d43b242e636 + ``` +* list all nodes known in the graph with active offers: + ``` + lightning-cli listnodes | grep option_will_fund -B20 -A7 + ``` +* note the node `id` and `compact_lease` + +* connect to the node + ``` + lightning-cli connect nodeID@IP_or.onion + ``` +#### Fundchannel syntax +* the amount is the own funds in the wallet contributed +use equal amounts to have a balanced channel from start +the amounts can be specified in `sat` or `btc` + ``` + lightning-cli fundchannel -k id=NODE_ID amount=OWN_AMOUNTsat request_amt=PEER_CONTRIBUTION_AMOUNTsat compact_lease=COMPACT_LEASE + ``` + It can fail if the offer changed or there are not enough funds available on either side. + +* open a dual funded channel with a chosen utxo and miner feerate +list the utxo-s with `lightning-cli listfunds`, can list multiple +the feerate is in `perkb` by default, e.g. use 1000 for 1 sat/byte + ``` + lightning-cli fundchannel feerate=PERKB_FEERATE utxos='["TRANSACTION_ID:INDDEX_NUMBER"]' -kid=NODE_ID amount=OWN_AMOUNTsat request_amt=PEER_CONTRIBUTION_AMOUNTsat compact_lease=COMPACT_LEASE + ``` + +### Offers +* Details at bolt12.org +* Create an offer to receive payments: +https://lightning.readthedocs.io/lightning-offer.7.html + ``` + lightning-cli offer amount description [vendor] [label] [quantity_min] [quantity_max] [absolute_expiry] [recurrence] [recurrence_base] [recurrence_paywindow] [recurrence_limit] [single_use] + ``` +* Example: +Create a reusable offer which can be paid with any amount for LN tips using a fixed string. + ``` + lightning-cli offer any tip + ``` + +* Create an offer to send payments: +https://lightning.readthedocs.io/lightning-offerout.7.html + ``` + lightning-cli offerout amount description [vendor] [label] [absolute_expiry] [refund_for] + ``` +* Fetch an invoice to pay an offer: +https://lightning.readthedocs.io/lightning-fetchinvoice.7.html +Will need at least one peer which supports onion the messages. For example: + ``` + lightning-cli connect 024b9a1fa8e006f1e3937f65f66c408e6da8e1ca728ea43222a7381df1cc449605@128.199.202.168:9735 + ``` +* Then use the command to fetch the BOLT12 invoice: + ``` + lightning-cli fetchinvoice offer [msatoshi] [quantity] [recurrence_counter] [recurrence_start] [recurrence_label] [timeout] [payer_note] + ``` +* decode a BOLT12 invoice: + ``` + lightning-cli decode bolt12_invoice + ``` +* pay a a BOLT12 invoice: +Will need to pay through a peer which supports the onion messages which means you need at least one channel with such a node. + ``` + lightning-cli pay bolt12_invoice + ``` +* see if there is a new invoice is paid with: + ``` + lightning-cli listinvoices + ``` + The `pay_index` will increase as the offer gets reused. + +### About the feature bits +* https://bitcoin.stackexchange.com/questions/107484/how-can-i-decode-the-feature-string-of-a-lightning-node-with-bolt-9 +* Convert the hex number from `lightning-cli listpeers` to binary: https://www.binaryhexconverter.com/hex-to-binary-converter and count the position of the bits from the right. + + +## Testnets +* for testnet and signet there are prefixes `t` and `s` used for the aliases, daemons and their own plugin directory names. +* Testnet + ``` + # alias: + tcl | tclconf | tcllog + + # daemon service name: + tlightningd + + # config file: + /home/bitcoin/.lightningd/testnet/config + + # plugin directory: + /home/bitcoin/tcl-plugins-enabled + ``` +* Signet + ``` + # aliases: + scl | sclconf | scllog + + # daemon service name: + slightningd + + # config file: + /home/bitcoin/.lightningd/signet/config + + # plugin directory: + /home/bitcoin/scl-plugins-enabled + ``` + +## Backups +* https://lightning.readthedocs.io/FAQ.html#how-to-backup-my-wallet +* General details: https://lightning.readthedocs.io/BACKUP.html +### Seed +- +### Channel database +* + +### Recovery +* https://lightning.readthedocs.io/FAQ.html#database-corruption-channel-state-lost +* https://lightning.readthedocs.io/FAQ.html#loss + +## Script file help list + +``` +# generate a list of help texts on a RaspiBlitz: +cd /home/admin/config.scripts/ +ls cl*.sh > clScriptList.txt +sed -i "s#cl#./cl#g" clScriptList.txt +sed -i "s#.sh#.sh -h#g" clScriptList.txt +bash -x clScriptList.txt +rm clScriptList.txt +``` + +``` ++ ./cl.backup.sh -h + +--------------------------------------------------- +CL RESCUE FILE (tar.gz of complete cl directory) +--------------------------------------------------- +cl.backup.sh cl-export +cl.backup.sh cl-export-gui +cl.backup.sh cl-import [file] +cl.backup.sh cl-import-gui [setup|production] [?resultfile] +--------------------------------------------------- +SEED WORDS +--------------------------------------------------- +cl.backup.sh seed-export-gui [lndseeddata] +cl.backup.sh seed-import-gui [resultfile] + ++ ./cl.hsmtool.sh -h + +Create new wallet or import seed +Unlock/lock, encrypt, decrypt, set autounlock or change password for the hsm_secret + +Usage: +Create new wallet: +cl.hsmtool.sh [new] [mainnet|testnet|signet] [?seedPassword] +cl.hsmtool.sh [new-force] [mainnet|testnet|signet] [?seedPassword] +There will be no seedPassword(passphrase) used by default +new-force will delete any old wallet and will work without dialog + +cl.hsmtool.sh [seed] [mainnet|testnet|signet] ["space-separated-seed-words"] [?seedPassword] +cl.hsmtool.sh [seed-force] [mainnet|testnet|signet] ["space-separated-seed-words"] [?seedPassword] +The new hsm_secret will be not encrypted if no NewPassword is given +seed-force will delete any old wallet and will work without dialog + +cl.hsmtool.sh [unlock|lock] +cl.hsmtool.sh [encrypt|decrypt] +cl.hsmtool.sh [autounlock-on|autounlock-off] + +cl.hsmtool.sh [change-password] + ++ ./cl.install-service.sh -h + +Script to set up or update the C-lightning systemd service +Usage: +/home/admin/config.scripts/cl.install-service.sh + ++ ./cl.install.sh -h + +C-lightning install script +The default version is: v0.10.1 +Setting up on mainnet unless otherwise specified +mainnet / testnet / signet instances can run parallel + +Usage: +cl.install.sh on +cl.install.sh off +cl.install.sh [update |testPR ] +cl.install.sh display-seed + ++ ./cl-plugin.backup.sh -h + +Install the backup plugin for C-lightning +Replicates the lightningd.sqlite3 database on the SDcard + +Usage: +cl-plugin.backup.sh [on|off] [testnet|mainnet|signet] +cl-plugin.backup.sh [restore] [testnet|mainnet|signet] [force] +cl-plugin.backup.sh [backup-compact] [testnet|mainnet|signet] + +https://github.com/lightningd/plugins/tree/master/backup + ++ ./cl-plugin.clboss.sh -h + +Install or remove the CLBOSS C-lightning plugin +version: v0.10 +Usage: +cl-plugin.clboss.sh [on|off] [testnet|mainnet|signet] + ++ ./cl-plugin.sparko.sh -h + +Install, remove, connect or get info about the Sparko plugin for C-lightning +version: v2.7 +Usage: +cl-plugin.sparko.sh [on|off|menu|connect] [testnet|mainnet|signet] + ++ ./cl-plugin.standard-python.sh -h + +Install and show the output of the chosen plugin for C-lightning +Usage: +cl-plugin.standard-python.sh on [plugin-name] [testnet|mainnet|signet] [runonce] + +tested plugins: +summary | helpme | feeadjuster + +find more at: +https://github.com/lightningd/plugins + ++ ./cl-plugin.summary.sh -h + +Install and show the output if the summary plugin for C-lightning +Usage: +cl-plugin.summary.sh [testnet|mainnet|signet] [runonce] + ++ ./cl.rest.sh -h + +C-lightning-REST install script +The default version is: v0.5.1 +mainnet | testnet | signet instances can run parallel +The same macaroon and certs will be used for the parallel networks + +Usage: +cl.rest.sh [on|off|connect] + ++ ./cl.setname.sh -h + +Config script to set the alias of the C-lightning node +cl.setname.sh [mainnet|testnet|signet] [?newName] +``` \ No newline at end of file From 979c4af4ef51649c1bc41b7465afd7c4c4dd64d7 Mon Sep 17 00:00:00 2001 From: openoms Date: Fri, 1 Oct 2021 10:35:05 +0100 Subject: [PATCH 1221/1295] cl.install: mrkd fallback when building master --- home.admin/config.scripts/cl.install.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/home.admin/config.scripts/cl.install.sh b/home.admin/config.scripts/cl.install.sh index 3828d46f1..aa8b6a24e 100644 --- a/home.admin/config.scripts/cl.install.sh +++ b/home.admin/config.scripts/cl.install.sh @@ -127,7 +127,10 @@ if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = testPR ];then echo "Installing additional dependencies" sudo apt-get install -y valgrind python3-pip libpq-dev - sudo pip3 install -r requirements.txt + if ! sudo pip3 install -r requirements.txt; then + # just in case building the requirements fails + sudo pip3 install mrkd + fi echo "# Building with EXPERIMENTAL_FEATURES enabled" echo From fd4e7eeed4d66463670593fd54f1f7136b42cca5 Mon Sep 17 00:00:00 2001 From: openoms Date: Fri, 1 Oct 2021 10:35:27 +0100 Subject: [PATCH 1222/1295] joinamrket: include all IRC servers --- home.admin/config.scripts/bonus.joinmarket.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/home.admin/config.scripts/bonus.joinmarket.sh b/home.admin/config.scripts/bonus.joinmarket.sh index 7970a2929..f4b39c6c7 100755 --- a/home.admin/config.scripts/bonus.joinmarket.sh +++ b/home.admin/config.scripts/bonus.joinmarket.sh @@ -203,13 +203,19 @@ if [ ! -f "/home/joinmarket/.joinmarket/joinmarket.cfg" ] ; then echo "Using the bitcoind wallet: wallet.dat" #communicate with IRC servers via Tor JMcfgPath="/home/joinmarket/.joinmarket/joinmarket.cfg" + # hosts sed -i "s/^host = irc.darkscience.net/#host = irc.darkscience.net/g" \$JMcfgPath sed -i "s/^#host = dark.*/host = darkirc6tqgpnwd3blln3yfv5ckl47eg7llfxkmtovrv7c7iwohhb6ad.onion/g" \$JMcfgPath sed -i "s/^host = irc.hackint.org/#host = irc.hackint.org/g" \$JMcfgPath sed -i "s/^#host = ncwkrwxpq2ikcngxq3dy2xctuheniggtqeibvgofixpzvrwpa77tozqd.onion/host = ncwkrwxpq2ikcngxq3dy2xctuheniggtqeibvgofixpzvrwpa77tozqd.onion/g" \$JMcfgPath + sed -i "s/^host = agora.anarplex.net/#host = agora.anarplex.net/g" \$JMcfgPath + sed -i "s/^#host = vxecvd6lc4giwtasjhgbrr3eop6pzq6i5rveracktioneunalgqlwfad.onion/host = vxecvd6lc4giwtasjhgbrr3eop6pzq6i5rveracktioneunalgqlwfad.onion/g" \$JMcfgPath + # socks5 sed -i "s/^socks5 = false/#socks5 = false/g" \$JMcfgPath sed -i "s/^#socks5 = true/socks5 = true/g" \$JMcfgPath + # port sed -i "s/^#port = 6667/port = 6667/g" \$JMcfgPath + # usessl sed -i "s/^#usessl = false/usessl = false/g" \$JMcfgPath echo "# Edited the joinmarket.cfg to communicate over Tor only." fi From e548f2e9c72ed527447d6e06e03dc73b04ded667 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 1 Oct 2021 12:16:18 +0200 Subject: [PATCH 1223/1295] move LND & CL sub menus up in main menu --- home.admin/00mainMenu.sh | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index f96b2492e..d56479942 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -69,6 +69,16 @@ BACKTITLE="${localip} / ${hostname} / ${network} ${plus}" # Basic Options OPTIONS+=(INFO "RaspiBlitz Status Screen") +# if LND is active +if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then + OPTIONS+=(LND "LND Wallet Options") +fi + +# if C-Lightning is active +if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then + OPTIONS+=(CL "C-lightning Wallet Options") +fi + # Activated Apps/Services if [ "${rtlWebinterface}" == "on" ]; then OPTIONS+=(LRTL "LND RTL Webinterface") @@ -142,16 +152,6 @@ fi # OPTIONS+=(MAINNET "Mainnet Service Options") #fi -# if LND is active -if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then - OPTIONS+=(LND "LND Wallet Options") -fi - -# if C-Lightning is active -if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then - OPTIONS+=(CL "C-lightning Wallet Options") -fi - if [ "${testnet}" == "on" ]; then OPTIONS+=(TESTNETS "Testnet/Signet Options") fi From 58f21fa6f999ae31e788a9be9d714a2c7be22f05 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 1 Oct 2021 12:16:52 +0200 Subject: [PATCH 1224/1295] #2586 name it password C in c-lightning --- home.admin/config.scripts/cl.hsmtool.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/config.scripts/cl.hsmtool.sh b/home.admin/config.scripts/cl.hsmtool.sh index ca8376369..2e646143d 100644 --- a/home.admin/config.scripts/cl.hsmtool.sh +++ b/home.admin/config.scripts/cl.hsmtool.sh @@ -61,7 +61,7 @@ function passwordToFile() { if [ $# -gt 0 ];then text="$1" else - text="Type or paste the decryption password for the $CHAIN C-lightning wallet" + text="Type or paste the decryption passwordC for the $CHAIN C-lightning wallet" fi # write password into a file in memory # trap to delete on any exit @@ -113,7 +113,7 @@ function encryptHSMsecret() { if [ ${#walletPassword} -eq 0 ];then # ask for password in dialog if $walletPassword is not given in $3 sudo /home/admin/config.scripts/blitz.setpassword.sh x \ - "Enter the password to encrypt the C-lightning wallet file (hsm_secret)" \ + "Enter the password C to encrypt the C-lightning wallet file (hsm_secret)" \ "$passwordFile" sudo chown bitcoin:bitcoin $passwordFile sudo chmod 600 $passwordFile From 02f876d508fa0d976530a4578c2d9d2e03749d36 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 1 Oct 2021 12:17:06 +0200 Subject: [PATCH 1225/1295] add CLBOSS info to readme --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 020370aac..a623bcc22 100644 --- a/README.md +++ b/README.md @@ -545,9 +545,13 @@ You can connect a small extra USB drive to your RaspiBlitz (choose a small one u This needs to switched on to see the sub-settings options for c-lightning. If switched on it means the c-lighting node implementation is installed and running on your RaspiBlitz - it can run in parallel to LND. If activated you will find an additional option in the SSH Main Menu that offers you more options to operate the c-lightning node. Also under `SERVICES` some apps might just be available if c-lightning is activated. +For more details on this lightning node implementation go to the [c-lightning FAQ page](FAQ.cl.md). + ##### CL CLBOSS Automatic Node Manager -TODO +CLBOSS is an automated manager for C-Lightning routing payments nodes. CLBOSS is effectively a bunch of heuristics modules wired together to a regular clock to continuously monitor your node. + +Find more info at the [CLBOSS GitHub](https://github.com/ZmnSCPxj/clboss). ##### CL Wallet Encryption From 90d557679c0945e6931a347c85fb504923ea8ebe Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Fri, 1 Oct 2021 12:14:42 +0100 Subject: [PATCH 1226/1295] Spark Wallet integration (#2585) --- CHANGES.md | 1 + README.md | 1 + home.admin/00mainMenu.sh | 6 + home.admin/00parallelMainnetServices.sh | 24 ++++ home.admin/00parallelTestnetServices.sh | 24 +++- home.admin/00settingsMenuServices.sh | 24 ++++ home.admin/_provision_.sh | 13 +- home.admin/config.scripts/cl.spark.sh | 180 ++++++++++++++++++++++++ 8 files changed, 270 insertions(+), 3 deletions(-) create mode 100644 home.admin/config.scripts/cl.spark.sh diff --git a/CHANGES.md b/CHANGES.md index 8054393ae..cb6aa0294 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,6 +4,7 @@ - New: C-lightning v0.10.1 [details](https://github.com/ElementsProject/lightning/releases/tag/v0.10.1) - New: C-lightningREST v0.5.1 [details](https://github.com/Ride-The-Lightning/c-lightning-REST/releases/tag/v0.5.1) +- New: CL Spark Wallet v0.3.0rc with BOLT12 offers [details](https://github.com/shesek/spark-wallet/releases) - New: CL plugin: Sparko [details](https://github.com/fiatjaf/sparko) - New: CL plugin: CLBOSS The C-Lightning Node Manager [details](https://github.com/ZmnSCPxj/clboss#clboss-the-c-lightning-node-manager) - New: Refactored Setup-Process [details](https://github.com/rootzoll/raspiblitz/issues/1126#issuecomment-829757665) diff --git a/README.md b/README.md index a623bcc22..6b656eb3b 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ There are further Services that can be switched on: * **Telegraf metrics** [details](https://github.com/rootzoll/raspiblitz/issues/1369) * **Chantools** (Fund Rescue) [details](https://github.com/guggero/chantools/blob/master/README.md) * **Suez** (Channel Visualization for LND & CL) [details](https://github.com/prusnak/suez#suez) +* **CL Spark Wallet** (WalletUI with BOLT12 offers) [details](https://github.com/shesek/spark-wallet#progressive-web-app) * **CL plugin: Sparko** (WalletUI & HTTP-RPC bridge) [details](https://github.com/fiatjaf/sparko#the-sparko-plugin) * **CL plugin: CLBOSS** (Automated Node Manager) [details](https://github.com/ZmnSCPxj/clboss#clboss-the-c-lightning-node-manager) diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index d56479942..c961a173a 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -95,6 +95,9 @@ fi if [ "${sparko}" == "on" ]; then OPTIONS+=(SPARKO "Sparko Webwallet") fi +if [ "${spark}" == "on" ]; then + OPTIONS+=(SPARK "Spark Wallet") +fi if [ "${ElectRS}" == "on" ]; then OPTIONS+=(ELECTRS "Electrum Rust Server") fi @@ -248,6 +251,9 @@ case $CHOICE in SPARKO) /home/admin/config.scripts/cl-plugin.sparko.sh menu mainnet ;; + SPARK) + /home/admin/config.scripts/cl.spark.sh menu mainnet + ;; LNBITS) /home/admin/config.scripts/bonus.lnbits.sh menu ;; diff --git a/home.admin/00parallelMainnetServices.sh b/home.admin/00parallelMainnetServices.sh index 47e71f966..3a0483701 100644 --- a/home.admin/00parallelMainnetServices.sh +++ b/home.admin/00parallelMainnetServices.sh @@ -14,6 +14,7 @@ if [ ${#lnd} -eq 0 ]; then lnd="off"; fi if [ ${#cl} -eq 0 ]; then cl="off"; fi if [ ${#crtlWebinterface} -eq 0 ]; then crtlWebinterface="off"; fi if [ ${#sparko} -eq 0 ]; then sparko="off"; fi +if [ ${#spark} -eq 0 ]; then spark="off"; fi # show select dialog echo "run dialog ..." @@ -24,6 +25,7 @@ OPTIONS+=(r "RTL for LND $CHAIN" ${rtlWebinterface}) OPTIONS+=(c "C-lightning on $CHAIN" ${cl}) OPTIONS+=(t "RTL for CL on $CHAIN" ${crtlWebinterface}) OPTIONS+=(s "Sparko for CL on $CHAIN" ${sparko}) +OPTIONS+=(m "Spark for CL on $CHAIN" ${spark}) CHOICES=$(dialog --title ' Additional Services ' \ --checklist ' use spacebar to activate/de-activate ' \ @@ -162,6 +164,28 @@ else echo "# Sparko on $CHAIN Setting unchanged." fi +# spark process choice +choice="off"; check=$(echo "${CHOICES}" | grep -c "m") +if [ ${check} -eq 1 ]; then choice="on"; fi +if [ "${spark}" != "${choice}" ]; then + echo "# Spark Wallet on $CHAIN Setting changed .." + anychange=1 + /home/admin/config.scripts/cl.spark.sh ${choice} $CHAIN + errorOnInstall=$? + if [ "${choice}" = "on" ]; then + if [ ${errorOnInstall} -eq 0 ]; then + /home/admin/config.scripts/cl.spark.sh menu $CHAIN + else + l1="# !!! FAIL on Spark Wallet on $CHAIN install !!!" + l2="# Try manual install on terminal after reboot with:" + l3="/home/admin/config.scripts/cl.spark.sh on $CHAIN" + dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 + fi + fi +else + echo "# Spark Wallet on $CHAIN Setting unchanged." +fi + if [ ${anychange} -eq 0 ]; then dialog --msgbox "NOTHING CHANGED!\nUse Spacebar to check/uncheck services." 8 58 exit 0 diff --git a/home.admin/00parallelTestnetServices.sh b/home.admin/00parallelTestnetServices.sh index f67ba54a1..3c751286e 100644 --- a/home.admin/00parallelTestnetServices.sh +++ b/home.admin/00parallelTestnetServices.sh @@ -14,6 +14,7 @@ if [ ${#tlnd} -eq 0 ]; then tlnd="off"; fi if [ ${#tcrtlWebinterface} -eq 0 ]; then tcrtlWebinterface="off"; fi if [ ${#tcl} -eq 0 ]; then tcl="off"; fi if [ ${#tsparko} -eq 0 ]; then tsparko="off"; fi +if [ ${#tspark} -eq 0 ]; then tspark="off"; fi # show select dialog echo "run dialog ..." @@ -24,6 +25,7 @@ OPTIONS+=(r "RTL for LND $CHAIN" ${trtlWebinterface}) OPTIONS+=(c "C-lightning on $CHAIN" ${tcl}) OPTIONS+=(t "RTL for CL on $CHAIN" ${tcrtlWebinterface}) OPTIONS+=(s "Sparko for CL on $CHAIN" ${tsparko}) +OPTIONS+=(m "Spark Wallet fro CL on $CHAIN" ${tspark}) CHOICES=$(dialog --title ' Additional Services ' \ --checklist ' use spacebar to activate/de-activate ' \ @@ -162,7 +164,27 @@ else echo "# Sparko on $CHAIN Setting unchanged." fi - +# tspark process choice +choice="off"; check=$(echo "${CHOICES}" | grep -c "m") +if [ ${check} -eq 1 ]; then choice="on"; fi +if [ "${tspark}" != "${choice}" ]; then + echo "# Spark Wallet on $CHAIN Setting changed .." + anychange=1 + /home/admin/config.scripts/cl.spark.sh ${choice} $CHAIN + errorOnInstall=$? + if [ "${choice}" = "on" ]; then + if [ ${errorOnInstall} -eq 0 ]; then + /home/admin/config.scripts/cl.spark.sh menu $CHAIN + else + l1="# !!! FAIL on Spark Wallet on $CHAIN install !!!" + l2="# Try manual install on terminal after reboot with:" + l3="/home/admin/config.scripts/cl.spark.sh on $CHAIN" + dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 + fi + fi +else + echo "# Spark Wallet on $CHAIN Setting unchanged." +fi if [ ${anychange} -eq 0 ]; then dialog --msgbox "NOTHING CHANGED!\nUse Spacebar to check/uncheck services." 8 58 diff --git a/home.admin/00settingsMenuServices.sh b/home.admin/00settingsMenuServices.sh index da1bd4ea4..4b7889f37 100755 --- a/home.admin/00settingsMenuServices.sh +++ b/home.admin/00settingsMenuServices.sh @@ -25,6 +25,7 @@ if [ ${#lit} -eq 0 ]; then lit="off"; fi if [ ${#whitepaper} -eq 0 ]; then whitepaper="off"; fi if [ ${#chantools} -eq 0 ]; then chantools="off"; fi if [ ${#sparko} -eq 0 ]; then sparko="off"; fi +if [ ${#spark} -eq 0 ]; then spark="off"; fi # show select dialog echo "run dialog ..." @@ -58,6 +59,7 @@ fi if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then OPTIONS+=(c 'C-Lightning RTL Webinterface' ${crtlWebinterface}) OPTIONS+=(k 'C-Lightning Sparko WebWallet' ${sparko}) + OPTIONS+=(m 'C-Lightning Spark Wallet' ${spark}) fi CHOICES=$(dialog --title ' Additional Mainnet Services ' \ @@ -496,6 +498,28 @@ else echo "# Sparko on mainnet Setting unchanged." fi +# spark wallet process choice +choice="off"; check=$(echo "${CHOICES}" | grep -c "m") +if [ ${check} -eq 1 ]; then choice="on"; fi +if [ "${spark}" != "${choice}" ]; then + echo "# Spark Wallet on mainnet Setting changed .." + anychange=1 + /home/admin/config.scripts/cl.spark.sh ${choice} mainnet + errorOnInstall=$? + if [ "${choice}" = "on" ]; then + if [ ${errorOnInstall} -eq 0 ]; then + /home/admin/config.scripts/cl.spark.sh menu mainnet + else + l1="# !!! FAIL on Spark Wallet on mainnet install !!!" + l2="# Try manual install on terminal after reboot with:" + l3="/home/admin/config.scripts/cl.spark.sh on mainnet" + dialog --title 'FAIL' --msgbox "${l1}\n${l2}\n${l3}" 7 65 + fi + fi +else + echo "# Spark Wallet on mainnet Setting unchanged." +fi + if [ ${anychange} -eq 0 ]; then dialog --msgbox "NOTHING CHANGED!\nUse Spacebar to check/uncheck services." 8 58 exit 0 diff --git a/home.admin/_provision_.sh b/home.admin/_provision_.sh index 7626f6bed..3af4fe43e 100755 --- a/home.admin/_provision_.sh +++ b/home.admin/_provision_.sh @@ -451,10 +451,19 @@ fi # SPARKO if [ "${sparko}" = "on" ]; then echo "Provisioning Sparko - run config script" >> ${logFile} - sudo sed -i "s/^message=.*/message='Setup SPARKO (takes time)'/g" ${infoFile} + sudo sed -i "s/^message=.*/message='Setup SPARKO'/g" ${infoFile} sudo -u admin /home/admin/config.scripts/cl-plugin.sparko.sh on mainnet >> ${logFile} 2>&1 else - echo "Provisioning RTL CL - keep default" >> ${logFile} + echo "Provisioning Sparko - keep default" >> ${logFile} +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} + sudo -u admin /home/admin/config.scripts/cl.spark.sh on mainnet >> ${logFile} 2>&1 +else + echo "Provisioning Spark Wallet - keep default" >> ${logFile} fi #LOOP - install only if LiT won't be installed diff --git a/home.admin/config.scripts/cl.spark.sh b/home.admin/config.scripts/cl.spark.sh new file mode 100644 index 000000000..75c02e7db --- /dev/null +++ b/home.admin/config.scripts/cl.spark.sh @@ -0,0 +1,180 @@ +#!/bin/bash + +#https://github.com/shesek/spark-wallet/releases +SPARKVERSION="v0.3.0rc" + +# command info +if [ $# -lt 1 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then + echo + echo "Install, remove or get info about the Spark Wallet for C-lightning" + echo "version: $SPARKVERSION" + echo "Usage:" + echo "cl.spark.sh [on|off|menu] " + echo + exit 1 +fi + +# source <(/home/admin/config.scripts/network.aliases.sh getvars cl ) +source <(/home/admin/config.scripts/network.aliases.sh getvars cl $2) +systemdService="${netprefix}spark" + + +# show info menu +if [ "$1" = "menu" ]; then + + # get network info + 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}spark-wallet/hostname) + toraddresstext="Hidden Service address for the Tor Browser (QRcode on LCD):\n$toraddress" + if [ ${#toraddress} -eq 0 ];then + toraddresstext="Activate Tor to access the web interface from outside of the local network." + else + /home/admin/config.scripts/blitz.display.sh qr "${toraddress}" + fi + fingerprint=$(openssl x509 -in /home/bitcoin/.lightning/spark-tls/cert.pem -fingerprint -noout | cut -d"=" -f2) + + whiptail --title "\ +spark - $CHAIN" --msgbox "Open in your local web browser: +https://${localip}:${portprefix}8000\n +username: blitz +password: 'your Password B'\n +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 raspiblitz.conf if needed +configEntry="${netprefix}spark=" +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 + + # check and install NodeJS + /home/admin/config.scripts/bonus.nodejs.sh on + + # set up npm-global + sudo -u bitcoin mkdir /home/bitcoin/.npm-global + sudo -u bitcoin npm config set prefix '/home/bitcoin/.npm-global' + sudo bash -c "echo 'PATH=$PATH:/home/bitcoin/.npm-global/bin' >> /home/bitcoin/.bashrc" + + echo "# Create data folder on the disk" + echo "# make sure the data directory exists" + sudo mkdir -p /mnt/hdd/app-data/.spark-wallet + echo "# symlink" + sudo rm -rf /home/bitcoin/.spark-wallet # not a symlink.. delete it silently + sudo ln -s /mnt/hdd/app-data/.spark-wallet/ /home/bitcoin/.spark-wallet + sudo chown bitcoin:bitcoin -R /mnt/hdd/app-data/.spark-wallet + + cd /home/bitcoin || exit 1 + sudo -u bitcoin git clone https://github.com/shesek/spark-wallet + cd spark-wallet || exit 1 + sudo -u bitcoin git reset --hard ${SPARKVERSION} || exit 1 + sudo -u bitcoin npm run dist:npm || exit 1 + + if [ ! -f /home/bitcoin/.spark-wallet/tls/key.pem ];then + # create a self signed cert https://github.com/fiatjaf/spark#how-to-use + /home/admin/config.scripts/internet.selfsignedcert.sh + # spark looks for specific filenames + sudo -u bitcoin mkdir -p /home/bitcoin/.spark-wallet/tls/ + sudo ln -sf /mnt/hdd/app-data/selfsignedcert/selfsigned.key \ + /home/bitcoin/.spark-wallet/tls/key.pem + sudo ln -sf /mnt/hdd/app-data/selfsignedcert/selfsigned.cert \ + /home/bitcoin/.spark-wallet/tls/cert.pem + fi + + ########## + # Config # + ########## + if [ -f /home/bitcoin/.spark-wallet/${netprefix}config ];then + echo "# ${netprefix}spark config is already present" + else + PASSWORD_B=$(sudo cat /mnt/hdd/bitcoin/bitcoin.conf | grep rpcpassword | cut -c 13-) +echo "\ +login=blitz:${PASSWORD_B} +host=0.0.0.0 +proxy=socks5h://127.0.0.1:9050 +tls-path=/home/bitcoin/.lightning/spark-tls +onion +" | sudo -u bitcoin tee /home/bitcoin/.spark-wallet/${netprefix}config + fi + + ################# + # SYSTEMD SERVICE + ################# + # https://raw.githubusercontent.com/shesek/spark-wallet/master/scripts/spark-wallet.service + echo "# Create Systemd Service: ${systemdService}.service" + echo " +# Systemd unit for ${systemdService} + +[Unit] +Description=${systemdService} Lightning Wallet +Wants=${netprefix}lightningd.service +After=${netprefix}lightningd.service + +[Service] +WorkingDirectory=/home/bitcoin/spark-wallet +ExecStart=/home/bitcoin/spark-wallet/dist/cli.js\ + --ln-path /home/bitcoin/.lightning/${CLNETWORK} --port 8000\ + --config /home/bitcoin/.spark-wallet/config +User=bitcoin +Restart=on-failure +TimeoutSec=120 +RestartSec=30 +StandardOutput=null +StandardError=journal + +# Hardening measures +PrivateTmp=true +ProtectSystem=full +NoNewPrivileges=true +PrivateDevices=true + +[Install] +WantedBy=multi-user.target +" | sudo tee /etc/systemd/system/${systemdService}.service + sudo chown root:root /etc/systemd/system/${systemdService}.service + + echo "# Allowing port ${portprefix}8000 through the firewall" + sudo ufw allow "${portprefix}8000" comment "${netprefix}spark-wallet" + + /home/admin/config.scripts/internet.hiddenservice.sh ${netprefix}spark-wallet 443 ${portprefix}8000 + + # setting value in raspi blitz config + sudo sed -i "s/^${netprefix}spark=.*/${netprefix}spark=on/g" /mnt/hdd/raspiblitz.conf + + sudo systemctl enable ${systemdService} + sudo systemctl start ${systemdService} + echo "# OK - the ${systemdService}.service is now enabled & started" + echo "# Monitor with: sudo journalctl -f -u ${systemdService}" + exit 0 + +fi + +if [ $1 = off ];then + + sudo systemctl stop ${systemdService} 2>/dev/null + sudo systemctl disable ${systemdService} 2>/dev/null + + /home/admin/config.scripts/internet.hiddenservice.sh off ${netprefix}spark-wallet + + # purge + if [ "$(echo "$@" | grep -c purge)" -gt 0 ];then + echo "# Delete user and home directory" + /home/bitcoin/spark-wallet + fi + # setting value in raspi blitz config + sudo sed -i "s/^${netprefix}spark=.*/${netprefix}spark=off/g" /mnt/hdd/raspiblitz.conf + echo "# ${netprefix}spark was uninstalled" +fi \ No newline at end of file From afb4f201c75e9c5b0460850455d4cdf7e9327dd3 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 1 Oct 2021 13:20:57 +0200 Subject: [PATCH 1227/1295] update readme --- README.md | 148 +++++++++++++++++++++++++++++------------------------- 1 file changed, 79 insertions(+), 69 deletions(-) diff --git a/README.md b/README.md index 6b656eb3b..a11781ef8 100644 --- a/README.md +++ b/README.md @@ -556,11 +556,11 @@ Find more info at the [CLBOSS GitHub](https://github.com/ZmnSCPxj/clboss). ##### CL Wallet Encryption -TODO +You can protect your c-lightning wallet by encrypting it with your passwordC. On every restart/reboot you will need to decrypt/unlock with that password before c-lightning can use the wallet. This adds some physical security for example in case your node get stolen. #### SERVICES: Activate/Deactivate Services -The RaspiBlitz offers further Services, Apps and configuration (scroll down to see all options in the RaspiBlitz): +The RaspiBlitz offers further Services, Apps and configuration (scroll down to see all options in the RaspiBlitz) also some Apps & Services might just be available if you installed/activated LND or c-lightning: ![MainMenu-Services](pictures/services.png) @@ -582,40 +582,6 @@ Learn how you can use Electrum with your own Server over Tor: After install, you will see a new `ELECTRS` option in the SSH main menu - it will give you all the information you need to start using it. -##### RTL Webinterface - -The RTL Webinterface is an LND Control Dashboard you can run in your browser with a nice GUI - it offers much more control over your Lightning node than the RaspiBlitz SSH menus. It's recommended to give it a try. - -![RTL](pictures/RTL-dashboard.png) - -Get all the details on how to mannage your channels with RTL in this video: - -Video Tutorial
--watch--> https://www.youtube.com/watch?v=pESO_Pm0v10 - -Read an Intro-Tutorial to RTL: https://medium.com/@suheb.khan/how-to-ride-the-lightning-447af999dcd2 - -Feedback is welcome by the RTL programmer: https://github.com/ShahanaFarooqui/RTL - -After install, you will see a new `RTL` option in the SSH main menu - it will give you all the information you need to start using it. - -##### ThunderHub - -A Lightning Node Manager WebUI - similar to RTL. - -[Details on Service](https://www.thunderhub.io) - -After install, you will see a new `THUB` option in the SSH main menu - it will give you all the information you need to start using it. - -##### Lightning Terminal (LIT) with loop, pool & faraday - -Lightning Terminal (LiT) is a browser-based interface for managing channel liquidity. It bundles the former single tools called loop, pool & faraday with an easy to use browser interface. - -![LIT](pictures/lit.png) - -[Details on Service](https://github.com/lightninglabs/lightning-terminal#lightning-terminal-lit) - -After install, you will see a new `LIT` option in the SSH main menu - it will give you all the information you need to start using it. - ##### BTCPayServer [BTCPay Server](https://github.com/btcpayserver) is a self-hosted, open-source cryptocurrency payment processor. It's secure, private, censorship-resistant and free. @@ -626,24 +592,6 @@ Find all details on how to use the BTCPay Server on your RaspiBlitz in this grea After install, you will see a new `BTCPAY` option in the SSH main menu - it will give you all the information you need to start using it. -##### LNbits - -LNbits is a very simple server that sits on top of your Lightning Wallet. - -![LNBITS](pictures/lnbits.png) - -It can be used together with IP2Tor to provide: -- Lightning Paper Vouchers (Plugin: LNURLw) -- Merchant Onboarding (Plugin: TPOS) - -Video Tutorial
--watch--> https://www.youtube.com/watch?v=0Bt3tHULAnw - -You can also develop your own extensions on it. - -[Details on Service](https://github.com/arcbtc/lnbits/blob/master/README.md) - -After install, you will see a new `LNBITS` option in the SSH main menu - it will give you all the information you need to start using it. - ##### BTC-RPC-Explorer BTC-RPC-Explorer is a blockchain explorer website you can run on your own RaspiBlitz. See an example running on: https://btc-explorer.com @@ -664,11 +612,11 @@ The goal of Specter Desktop is to make a convenient and user-friendly GUI around After install, you will see a new `SPECTER` option in the SSH main menu - it will give you all the information you need to start using it. -##### Mempool Explorer +##### Mempool Space ![MEMPOOL](pictures/mempool.png) -Mempool is the fully featured visualizer, explorer, and API service running on mempool.space +Mempool Space is the fully featured visualizer, explorer, and API service running on mempool.space [Details on Service](https://github.com/mempool/mempool) @@ -686,6 +634,62 @@ For more details see [here](https://github.com/JoinMarket-Org/joinmarket-clients After install, you will see a new `JMARKET` option in the SSH main menu - it will give you all the information you need to start using it. +##### Download Bitcoin Whitepaper + +Extract the original Bitcoin Whitepaper as PDF directly from the blockchain of your node. + +##### RTL Webinterface + +The RTL Webinterface is available as an LND & c-lightning Control Dashboard you can run in your browser with a nice GUI - it offers much more control over your Lightning node than the RaspiBlitz SSH menus. It's recommended to give it a try. + +![RTL](pictures/RTL-dashboard.png) + +Get all the details on how to mannage your channels with RTL in this video: + +Video Tutorial
--watch--> https://www.youtube.com/watch?v=pESO_Pm0v10 + +Read an Intro-Tutorial to RTL: https://medium.com/@suheb.khan/how-to-ride-the-lightning-447af999dcd2 + +Feedback is welcome by the RTL programmer: https://github.com/ShahanaFarooqui/RTL + +After install, you will see a new `RTL` option in the SSH main menu - it will give you all the information you need to start using it. + +##### ThunderHub + +A Lightning Node Manager WebUI - similar to RTL, but just available for LND. + +[Details on Service](https://www.thunderhub.io) + +After install, you will see a new `THUB` option in the SSH main menu - it will give you all the information you need to start using it. + +##### Lightning Terminal (LIT) with loop, pool & faraday + +Lightning Terminal (LiT) is a browser-based interface for managing channel liquidity on LND. It bundles the former single tools called loop, pool & faraday with an easy to use browser interface. + +![LIT](pictures/lit.png) + +[Details on Service](https://github.com/lightninglabs/lightning-terminal#lightning-terminal-lit) + +After install, you will see a new `LIT` option in the SSH main menu - it will give you all the information you need to start using it. + +##### LNbits + +LNbits is a very simple server that sits on top of your Lightning Wallet. + +![LNBITS](pictures/lnbits.png) + +It can be used together with IP2Tor to provide: +- Lightning Paper Vouchers (Plugin: LNURLw) +- Merchant Onboarding (Plugin: TPOS) + +Video Tutorial
--watch--> https://www.youtube.com/watch?v=0Bt3tHULAnw + +You can also develop your own extensions on it. + +[Details on Service](https://github.com/arcbtc/lnbits/blob/master/README.md) + +After install, you will see a new `LNBITS` option in the SSH main menu - it will give you all the information you need to start using it. + ##### Balance of Satoshi Balance of Satoshi gives you enhanced commands for working with LND balances. @@ -694,29 +698,35 @@ Balance of Satoshi gives you enhanced commands for working with LND balances. After install, you will see a new `BOS` option in the SSH main menu - it will give you all the information you need to start using it. +##### PyBlock + +Dashboard Bitcoin information program (needs LND). + +![PYBLOCK](pictures/pyblock.png) + +https://github.com/curly60e/pyblock/blob/master/README.md + +##### Channel Tools (chantools) + +This tool provides helper functions that can be used to rescue funds locked in LND channels in case lnd itself cannot run properly anymore. Also some other usefull command line features. + +https://github.com/guggero/chantools + ##### Sphinx Relay Server -The Sphinx App allows chat over the Lightning Network and ties into the idea of [Podcasting 2.0](https://u.today/father-of-podcasting-integrates-bitcoin-lightning-into-his-app). To use the mobile app with your own RaspiBlitz you need to install the [Sphinx Relay Server](https://github.com/stakwork/sphinx-relay/blob/master/README.md). +The Sphinx App allows chat over the Lightning Network with LND and ties into the idea of [Podcasting 2.0](https://u.today/father-of-podcasting-integrates-bitcoin-lightning-into-his-app). To use the mobile app with your own RaspiBlitz you need to install the [Sphinx Relay Server](https://github.com/stakwork/sphinx-relay/blob/master/README.md). ![SPHINX](https://github.com/stakwork/sphinx-relay/raw/master/public/relay.jpg) After install, you will see a new `SPHINX` option in the SSH main menu - it will give you all the information you need to start using it. -##### PyBlock +##### C-Lightning RTL Webinterface -![PYBLOCK](pictures/pyblock.png) +The same RTL as above but running with c-lightning node. Can run parrallel to the LND version. See deatils above. -https://github.com/curly60e/pyblock/blob/master/README.md +##### C-Lightning Sparko Webwallet -##### Channel Tools (chantools) -This tool provides helper functions that can be used to rescue funds locked in lnd channels in case lnd itself cannot run properly anymore. - -https://github.com/curly60e/pyblock/blob/master/README.md - -##### Download Bitcoin Whitepaper - -Extract the original Bitcoin Whitepaper as PDF directly from the blockchain of your node. #### SYSTEM: Monitoring & Configuration @@ -1144,4 +1154,4 @@ Also get inspired for a deep-dive with the original "[RaspiBolt](https://stadicu Join me on twitter [@rootzoll](https://twitter.com/rootzoll), visit us at an upcoming [#lightninghackday](https://twitter.com/hashtag/LightningHackday?src=hash) or check by one of our bitcoin meetups in Berlin ... every 1st Thursday evening a month at the room77 bar - feel free to buy me a beer with lightning there :) -* [How can I get further help/support?](#support) +* [How can I get further help/support?](#support) \ No newline at end of file From 976bb6719d7315f6a00e0b36f52aefbdb64d4e26 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 1 Oct 2021 13:21:22 +0200 Subject: [PATCH 1228/1295] enlarge settings menu --- home.admin/00settingsMenuServices.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/00settingsMenuServices.sh b/home.admin/00settingsMenuServices.sh index 4b7889f37..5d490d31e 100755 --- a/home.admin/00settingsMenuServices.sh +++ b/home.admin/00settingsMenuServices.sh @@ -64,7 +64,7 @@ fi CHOICES=$(dialog --title ' Additional Mainnet Services ' \ --checklist ' use spacebar to activate/de-activate ' \ - 24 55 17 "${OPTIONS[@]}" 2>&1 >/dev/tty) + 25 55 18 "${OPTIONS[@]}" 2>&1 >/dev/tty) dialogcancel=$? echo "done dialog" From 27a0ec8574724527644b504b8bcf36fc80268c17 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 1 Oct 2021 13:22:32 +0200 Subject: [PATCH 1229/1295] update services image --- pictures/services.png | Bin 97478 -> 42786 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/pictures/services.png b/pictures/services.png index 69b6a62e8ce1ff4d6ad590eade9d69bae69bf18a..bc85d114fc9195fc3ad226c8f17f52e29fc3f600 100644 GIT binary patch literal 42786 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 #xi?g@M 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 Date: Fri, 1 Oct 2021 13:33:12 +0200 Subject: [PATCH 1230/1295] Update system image --- README.md | 10 ++++++++++ pictures/connect.png | Bin 78698 -> 31593 bytes pictures/system.png | Bin 82721 -> 34091 bytes 3 files changed, 10 insertions(+) diff --git a/README.md b/README.md index a11781ef8..59d660c5d 100644 --- a/README.md +++ b/README.md @@ -726,10 +726,20 @@ The same RTL as above but running with c-lightning node. Can run parrallel to th ##### C-Lightning Sparko Webwallet +WalletUI & HTTP-RPC bridge for c-lightning +https://github.com/fiatjaf/sparko#the-sparko-plugin + +##### C-Lightning Spark Webwallet + +WalletUI for c-lightning with BOLT12 offers + +https://github.com/shesek/spark-wallet#progressive-web-app #### SYSTEM: Monitoring & Configuration +Different options to monitor & edit system services. + ![SYSTEM](pictures/system.png) #### CONNECT: Connect Apps & Credentials diff --git a/pictures/connect.png b/pictures/connect.png index 2e655c406733d4746a3d4c4b7d691df2f9145877..923ca5c60c3860f6a8af0835c620c1624afd3da4 100644 GIT binary patch literal 31593 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%0D4(< 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 KrwON!k^ceAq&ims From 5f807d6c08236f3024ff5a44c801cbf0dce8689b Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 1 Oct 2021 13:40:17 +0200 Subject: [PATCH 1231/1295] fix options on mobily of both or on --- README.md | 8 ++++---- home.admin/97addMobileWallet.sh | 29 ++++++++++++----------------- 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 59d660c5d..2020c6c73 100644 --- a/README.md +++ b/README.md @@ -750,12 +750,12 @@ This feature should support connecting your RaspiBlitz to a mobile wallets or ot ##### MOBILE: Mobile Wallet Apps (Smartphone) -At the moment, the following mobile wallets are supported: +At the moment, the following mobile wallets are supported - some are just available if LND or c-lightning is activated: -* [Zeus (iOS/Android)](https://github.com/ZeusLN/zeus) +* [Zeus (iOS/Android)](https://github.com/ZeusLN/zeus) (LND & c-lightning) * [Fully Noded (iOS over Tor)](https://apps.apple.com/us/app/fully-noded/id1436425586) -* [SendMany (Android)](https://github.com/fusion44/sendmany/blob/master/README.md) -* [Sphinx Chat App (iOS/Android)](https://sphinx.chat/) +* [SendMany (Android)](https://github.com/fusion44/sendmany/blob/master/README.md) (only LND) +* [Sphinx Chat App (iOS/Android)](https://sphinx.chat/) (only LND) Mobile wallets work as a remote control app for your RaspiBlitz. First you need to install the apps on your phone - a QR code with the links to the app stores are displayed. Then you need to `pair` them with your RaspiBlitz - also via a QR code displayed on the LCD. If you run your RaspiBlitz without an LCD, there is the fallback option to display that QR code on the terminal as ASCII code (which might involve lowering your terminal's font size). diff --git a/home.admin/97addMobileWallet.sh b/home.admin/97addMobileWallet.sh index 8797c5094..479509475 100755 --- a/home.admin/97addMobileWallet.sh +++ b/home.admin/97addMobileWallet.sh @@ -141,25 +141,20 @@ checkIP2TOR() fi } -if [ $lightning = "lnd" ]; then - # Also Zap-Android deactivated for now - see: https://github.com/rootzoll/raspiblitz/issues/2198#issuecomment-822808428 - #OPTIONS=(ZAP_ANDROID "Zap Wallet (Android)" \ - # ZAP_IOS "Zap Wallet (iOS)" \ - OPTIONS=(ZEUS_IOS "Zeus Wallet (iOS)" \ - ZEUS_ANDROID "Zeus Wallet (Android)" \ - SPHINX "Sphinx Chat (Android or iOS)" - ) - - # add SEND MANY APP - OPTIONS+=(SENDMANY_ANDROID "SendMany (Android)") +OPTIONS=() -elif [ $lightning = "cl" ]; then - - OPTIONS=(ZEUS_CLREST "Zeus to C-lightningREST (Android or iOS)" \ - ZEUS_SPARK "Zeus to Sparko (Android or iOS)" \ - SPARK "Spark Wallet to Sparko (Android - EXPERIMENTAL)" - ) +if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then + # Zap deactivated for now - see: https://github.com/rootzoll/raspiblitz/issues/2198#issuecomment-822808428 + OPTIONS+=(ZEUS_IOS "Zeus Wallet (iOS)") + OPTIONS+=(ZEUS_ANDROID "Zeus Wallet (Android)") + OPTIONS+=(SPHINX "Sphinx Chat (Android or iOS)") + OPTIONS+=(SENDMANY_ANDROID "SendMany (Android)") +fi +if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then + OPTIONS+=(ZEUS_CLREST "Zeus to C-lightningREST (Android or iOS)") + OPTIONS+=(ZEUS_SPARK "Zeus to Sparko (Android or iOS)") + OPTIONS+=(SPARK "Spark Wallet to Sparko (Android - EXPERIMENTAL)" ) fi # Additional Options with Tor From 58d70aa58a4ea7abb6684df71e8362a73f4be715 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 1 Oct 2021 13:49:22 +0200 Subject: [PATCH 1232/1295] make window larger --- home.admin/97addMobileWallet.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/97addMobileWallet.sh b/home.admin/97addMobileWallet.sh index 479509475..533a95d57 100755 --- a/home.admin/97addMobileWallet.sh +++ b/home.admin/97addMobileWallet.sh @@ -162,7 +162,7 @@ if [ "${runBehindTor}" = "on" ]; then OPTIONS+=(FULLY_NODED "Fully Noded (iOS+Tor)") fi -CHOICE=$(whiptail --clear --title "Choose Mobile Wallet" --menu "" 14 62 8 "${OPTIONS[@]}" 2>&1 >/dev/tty) +CHOICE=$(whiptail --clear --title "Choose Mobile Wallet" --menu "" 14 75 8 "${OPTIONS[@]}" 2>&1 >/dev/tty) /home/admin/config.scripts/blitz.display.sh hide From 96dd5ef44277819e0531fa6afb33fbe5bf1a51ff Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 1 Oct 2021 13:52:30 +0200 Subject: [PATCH 1233/1295] rename wallet options --- home.admin/97addMobileWallet.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/home.admin/97addMobileWallet.sh b/home.admin/97addMobileWallet.sh index 533a95d57..a6f6034cb 100755 --- a/home.admin/97addMobileWallet.sh +++ b/home.admin/97addMobileWallet.sh @@ -145,10 +145,10 @@ OPTIONS=() if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then # Zap deactivated for now - see: https://github.com/rootzoll/raspiblitz/issues/2198#issuecomment-822808428 - OPTIONS+=(ZEUS_IOS "Zeus Wallet (iOS)") - OPTIONS+=(ZEUS_ANDROID "Zeus Wallet (Android)") - OPTIONS+=(SPHINX "Sphinx Chat (Android or iOS)") - OPTIONS+=(SENDMANY_ANDROID "SendMany (Android)") + OPTIONS+=(ZEUS_IOS "Zeus to LND (iOS)") + OPTIONS+=(ZEUS_ANDROID "Zeus to LND (Android)") + OPTIONS+=(SPHINX "Sphinx Chat to LND (Android/iOS)") + OPTIONS+=(SENDMANY_ANDROID "SendMany to LND (Android)") fi if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then From da0850266023443a02fe77377d6541a0febfdd46 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 1 Oct 2021 14:14:26 +0200 Subject: [PATCH 1234/1295] update main menu options --- README.md | 36 ++++++++++++++++++++++++------------ pictures/clrepair.png | Bin 0 -> 30366 bytes pictures/mobile.png | Bin 22366 -> 32510 bytes pictures/repairmenu.png | Bin 111307 -> 34637 bytes pictures/update.png | Bin 96885 -> 34480 bytes 5 files changed, 24 insertions(+), 12 deletions(-) create mode 100644 pictures/clrepair.png diff --git a/README.md b/README.md index 2020c6c73..b6a16db3a 100644 --- a/README.md +++ b/README.md @@ -750,6 +750,8 @@ This feature should support connecting your RaspiBlitz to a mobile wallets or ot ##### MOBILE: Mobile Wallet Apps (Smartphone) +![MOBILE](pictures/mobile.png) + At the moment, the following mobile wallets are supported - some are just available if LND or c-lightning is activated: * [Zeus (iOS/Android)](https://github.com/ZeusLN/zeus) (LND & c-lightning) @@ -759,6 +761,10 @@ At the moment, the following mobile wallets are supported - some are just availa Mobile wallets work as a remote control app for your RaspiBlitz. First you need to install the apps on your phone - a QR code with the links to the app stores are displayed. Then you need to `pair` them with your RaspiBlitz - also via a QR code displayed on the LCD. If you run your RaspiBlitz without an LCD, there is the fallback option to display that QR code on the terminal as ASCII code (which might involve lowering your terminal's font size). +##### Electrum Rust Server + +Information how to connect to Electrum Rust Server (if installed). + ##### BTCPAY: Get the connection string for the BTCPay Server To connect the payment processing BTCPay server to your Lightning node you find here the needed Connection string. @@ -864,6 +870,19 @@ This stops your RaspiBlitz and creates an LND-Rescue ZIP file that you can downl *NOTICE: If you start your RaspiBlitz after this backup again the backup is outdated and using it can risk losing your channel funds.* +##### RESET-LND: Delete LND & start a node/wallet + +*THIS WILL DELETE ALL YOUR LND DATA AND CHANNEL FUNDS. +Use this only if you have closed all channels and removed all funds.* + +Use this option if you want to start with a fresh LND node id & wallet. + +##### REPAIR-CL: Repair/Backup C-Lightning + +Multiple options to repair/backup your c-lightning node: + +![RepairMenu](pictures/clrepair.png) + ##### MIGRATION: Migrate Blitz Data to new Hardware This stops your RaspiBlitz and creates a Migration ZIP file you can download/export per SCP to your laptop. This contains all important data of your RaspiBlitz including LND, your Blitz configuration and also data from your installed apps. Can be used to migrate your RaspiBlitz to a new hardware - for example if you want to replace the HDD with a SSD. How to import a Migration File [see here](README.md#import-a-migration-file). @@ -880,13 +899,6 @@ Make sure both RaspiBlitzes are connected to the same local network. During setu Use this option if your blockchain data got corrupted. It will keep your LND data. You can even keep your channels open. Just keep in mind that your Lightning node will appear offline to the network until you have re-downloaded the blockchain. -##### RESET-LND: Delete LND data & start new node/wallet - -*THIS WILL DELETE ALL YOUR LND DATA AND CHANNEL FUNDS. -Use this only if you have closed all channels and removed all funds.* - -Use this option if you want to start with a fresh LND node id & wallet. - ##### RESET-HDD: Delete HDD data but keep blockchain *THIS WILL DELETE ALL YOUR LND DATA AND CHANNEL FUNDS. @@ -911,12 +923,12 @@ If you had the Bitcoin Transaction Index activated you can use this option to ma #### UPDATE: Check/Prepare RaspiBlitz Update -The `UPDATE` menu gives you options to update your RaspiBlitz - -![UpdateMenu](pictures/update.png) +The `UPDATE` menu gives you options to update your RaspiBlitz and some apps you might have installed. The options are explained in detail: +![UpdateMenu](pictures/update.png) + *Please note that the RaspiBlitz does not support Auto-Update, to ensure that there is no remote control of your node from a central server.* ##### RELEASE: Update RaspiBlitz to a new Version @@ -945,9 +957,9 @@ A safe way to restart the RaspiBlitz ... have you tried turning it off and on ag A safe way to shutdown the RaspiBlitz. -#### X: Console Terminal +#### EXIT: Console Terminal -Closes the SSH main menu and exits to the terminal - where the user can make use of the CLI clients `bitcoin-cli` & `lncli` directly. +The `EXIT` option next to `OK` closes the SSH main menu and exits to the terminal - where the user can make use of the CLI clients `bitcoin-cli` & `lncli` directly. With the command `raspiblitz`, it's possible to return to the main menu. diff --git a/pictures/clrepair.png b/pictures/clrepair.png new file mode 100644 index 0000000000000000000000000000000000000000..e637b9ddfa0ed78bf815d57a18deb7fc521fced7 GIT binary patch literal 30366 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 Jyfya!e*m=#O6LFo literal 0 HcmV?d00001 diff --git a/pictures/mobile.png b/pictures/mobile.png index e044785fc904b340b15a5e8ea39f8b74949c8859..7c1710323760a0bf625b14a758fbb59e490129a3 100644 GIT binary patch literal 32510 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

Hgx1)7P2B8Q?yY!~+fTnyE8wp>z_*P0y8Ood8 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 diff --git a/pictures/repairmenu.png b/pictures/repairmenu.png index e1e5f3ebe0c941791ca58cd06836e13d87442ea2..ccfb201c6a1057d3a278e50c6f55fabb180591c8 100644 GIT binary patch literal 34637 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 literal 111307 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

J6+v_SJ?)Ed)EB~p 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

bEv==lVd=umuA_vb$C=eDFp^j;vVDw|# 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 From ff783dae743ad60f164d7122b518280617bdc17b Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 1 Oct 2021 15:51:00 +0200 Subject: [PATCH 1235/1295] add chain to setup file --- home.admin/setup.scripts/dialogMigration.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/setup.scripts/dialogMigration.sh b/home.admin/setup.scripts/dialogMigration.sh index 87935d704..dfa7217b4 100755 --- a/home.admin/setup.scripts/dialogMigration.sh +++ b/home.admin/setup.scripts/dialogMigration.sh @@ -99,6 +99,7 @@ if [ "${migrationOS}" == "raspiblitz" ]; then # migration OS & Version were already set earlier in setup process - now add migration filename echo "migrationFile='${filename}'" >> $SETUPFILE + echo "chain='main'" >> $SETUPFILE exit 0 fi From 88eabb92e60ec949cbb59f7fb1016b625fe9d463 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 1 Oct 2021 17:09:49 +0200 Subject: [PATCH 1236/1295] excute migration file --- README.md | 18 ++++-------------- home.admin/_bootstrap.sh | 7 +++++++ pictures/migration1.png | Bin 13475 -> 51063 bytes 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index b6a16db3a..9dd0dbee6 100644 --- a/README.md +++ b/README.md @@ -965,29 +965,19 @@ With the command `raspiblitz`, it's possible to return to the main menu. ## Import a Migration File -As mentioned above you can export a Migration File from your RaspiBlitz with MAINMENU > REPAIR > MIGRATION and store it on your laptop. +As mentioned above you can export a Migration File from your RaspiBlitz with `MAINMENU > REPAIR > MIGRATION` and store it on your laptop. A Migration file contains all the important data from your RaspiBlitz, like your LND data, Bitcoin Wallet, raspiblitz.config, Tor/SSH keys .. and also installed apps. You can use this to migrate your RaspiBlitz to new hardware. -If you want to import it again to a new RaspiBlitz (for example with an updated HDD/SSD), you can choose the `MIGRATION` option on the first setup dialog of a fresh sd card image. +If you want to import it again to a new RaspiBlitz (for example with an updated HDD/SSD), you can choose the `FROMBACKUP` option on the first setup dialog of a fresh sd card image. ![SSH0](pictures/ssh0-welcome2.png) -If you start MIGRATION you will need to format your HDD/SSD in the next step. +If you start MIGRATION you might get asked to use a existing blockchain on the harddrive/ssd and deleting the rest or even formatting the complete drive. Once thats done you get instructions how to upload the migration file (use the password `raspiblitz` when asked on executing the upload command): ![MIGRATION1](pictures/migration1.png) -Normally you choose here the EXT4 format. But you also have the option to choose the BTRFS format which is an experimental feature under RaspiBlitz - see [FAQ for details on BTRFS](FAQ.md#why-use-btrfs-on-raspiblitz). - -Then you will be asked to upload the Migration Zip file to the RaspiBlitz. Follow the instructions shown to you. - -Then you need to get a copy of the blockchain data again for your RaspiBlitz. - -![MIGRATION2](pictures/migration2.png) - -You have the two options: [SYNC](README.md#1-sync---selfvalidate-all-blocks) and [COPY](README.md#2-copy---copy-from-laptop-or-another-raspiblitz-over-local-network), as mentioned in the normal setup. - -RaspiBlitz will reboot and start the normal recovery process to install all the services defined by the raspiblitz.config from your Migration File. +After this you will be asked to set a new PasswordA and your RaspiBlitz will go into recovery/provision process Then RaspiBlitz might give you the option again to self-sync or copy the blockchain from another computer/blitz and after a final reboot. Then the blockchain needs to sync up and you should be back to normal. diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 384d37dca..75801e426 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -601,6 +601,13 @@ if [ ${isMounted} -eq 0 ]; then 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 + sed -i "s/^message=.*/message='Unpacking Migration Data'/g" ${infoFile} + /home/admin/config.scripts/blitz.migration.sh import "${migrationFile}" >> ${logFile} + fi + ################################### # Set Password A (in all cases) diff --git a/pictures/migration1.png b/pictures/migration1.png index 9c3d31f14b782225ccb3f03488e114fea0785c8e..48189fa8dd222bf2f7091ac5db63e9a7da2c79d0 100644 GIT binary patch literal 51063 zcmZsD1ytPH+BP!4;I74?P~6?2xE3p}MFzLx?oI`Y6?Z9a#hn&+cZz#)|HF}c&$-{v zTC*mTWZRpa?Dvrnp`s*>ibRA21qFpFEAv_v3JN9_3JO{d3=iy4C5U$heh5J%BvfQ2 zB*;~q?9CxIW>8SCKAIXCVaYJQ`eAHrWb|W*fey*ZO*K3`TGhy}zrCmZNBhsrexu|h zJ-t-|j8$0mPN@R~ zXe{AmC2Apja@8Dq)~mVE76m52fl@w_dT@Rb6F3D-ReinIYcs|-9!8Iv6 z>p>x-45M7IfdADW%wVR+h=2f#%crLmc|wBVNJ0W(>Bpxh+TEw8Cq7Ya9{5oF zc_=nkgP025Rcj!gnr2$E=8B3?^uRV43OWn|1p>C9fe#Vzfr5hl6bgj^d}9Hh*O@SX zAB9QHg#CLPTJHHoF*ONUS>RjE)XB`u&e_u5<>8((8K`O+qORqlrKrGfYH!PI{LbFQ zjM?4R;kgKupgTXXX=~-u@<7#QdA+Auy-;e z=VoSQW~CHHA}1#obb4pbulic*uj0TjAxcXZ7YBY87B@FHW;YIIdnXGPHaIRAmKJVpMfw-I5XupQo0^tGL5a!@u75wA;|8wNO zE&ijV)_+TKbMySOiByOCNU6b3DHIP{=6Uk5CreCh^5UW}+e#c-vQ1uk zSXplRJ~x*Jl*f$y!lbLZJDvyGpZ-Qo4Fa>q)SmGMErL{jsgBUq0A{m4gQ+$NdM~lD`O5p zLA?+E?C^6l;<5fIQhk@w;{UEEP_z(Jr88e4CyYpQjrQ;H{}Bx+(4=sx)<@?56C5IF zvuY0@Y$|8CzW-AjREXGUJjCVy_EwZYGkZWd)e-vJ3C=%42?PZ>7zF=!WdDjYIWq>h zuTHvI?iI5;@`$^*sQu?ilG1f+{E}=*HI=;nHBM7c97)Ng-9kHgm-95>_ww0OT7u&M*1$QLr>-sTL9Gu|y+r1%;tEE|SzoUq@3&MRifwrq%+O}3g!O^ID}XcoMd;(Qy2N^5dZWZNIYlgkEnO^tI5)=}muFmL$@or&bIdP$5VN_Lx{r0B=cfTTZ zYfR?2Qn(oCmEcAqal3Z&64}T56Sj9}MTT1?8g6c1$PmA_9Qa;c59yC*s5$7{SSa&w&F{RY#63N`jQCs%jRIW2}Y zh(wO^-{zxNoCx`Ttv>D@w0LS!WJ;;7v5*LuwCIX$Kb{z2pAdpOI$%GYNw@SYSTTF) zKA%vlco&)1{Vn>5;IrO)-ZF#&YcVJ0?bIKRwS4Eler(_9to)ASJ;Df^A{KVTZ5Z4Z z;2l8{e(Z-<50UUv8YwUPDsHDg3>$bd7b2mkq#Odyx97F}au!d2;)qe8xYdwc##@7F zyF2XIr03YkWU4>o^w$Ih^TDiX5mO@vi^p0wvnlM}>Rlg9$h(|=3bLA#lPIqllJUCI z&t*!D*~=Z}hAiK|(rLO3)Ex!6eIw84huL~;vw!p1Vti~th<#$3X&bVOUeBv%1kHuZ zhF&%W@i~eT#Q)b3a&)j%I!mOAhcqb`&^RisasMVv3ZZcQlXJ-Vu%VkXvJbELQ zdOnJ>*u$+^{%6`lH&1Yla1)K##QjqJ+uafU`rUq91fdIcdM+ALU*19W9GgA{DWaM{ za5~7ACb$7Ndd@~T?89tI`O`0Jreh-GNpH^bwXes5iA5d8P! z1l7)?lTpg_PPZybD?hit^AT_!sLv%-!jsij6fKMgY%Krs?~|wxQU3c;u?`<_qF$sL zQ9;Nv+siN`5oR}GH+`$m>z7unAusQ(i)&`QR^+&$e%{tMuCg^~j6=Aa$yZGUx!BWH z&sRXQn&f3lp#Pj=cN%p&duqA2bVi@x!wc7Pt0Q&0H^4C2Ea^#qYeav0SijHd^y__p z1`Axv5=YLuPt;VR{reUy`Jmg8%7ycR-UaoO<1pI{ouvo9=5x-? zWc|W`w1lsOE^>gg9Q(MDDd?f9vduhPN1&~o;hErj)1xy=dMoD1|9%fI=J7tXN$XCXA5wkuZGQKa?lddjeGcUGlXZ;=ALvd%+%AO^g>>Q+ zn=z>eZptLz-w7s6o;cQ_aPa-q_J$7H@(!oP_2;f*;(jNnwk~1^>j}q(EhL>UBV98Z z-<1s=NnTtN2YYg{G1EUFks&*_dhxBiN&C@fLj3mgh9=?qFZDkk@8rW6D%`2rbI}~$ z8!?W(3Ur0!$mS#~KV-Han-u*XJyMM%W~<#ii%;B%=Fb;Ubz1iLTbAjtH-97qx{;H6 zmUz+N$*GNYpT2!X(l&Xv?JO6fU0va0R_SoNvr&59H~eb8UL?}0TD02gLXqEPmHVOL zoJi=_(yCbXC29wme?i(#kffUGbSYio)Bqs_cg6$0GZoLtkmpB7w6-)iF zOd|7AzTXHI0^aMuOr2WQagLGPf;i#E*I{ULXMuQ53*7sHS2!pIatU7p_doS~R6mPw ziDu$S+O0){6v}=+ud#eXy>e_xufv#kMLULX}fvn=SFz=xE(FPSrQlY2bh&1EW5y$X&3yS_gu%Vz+Kk-NcA}l|$ zrq9fiG$1m(tuq^p(i*U_;CNr|jf3^)$`bAjnxrnZ@xj^V?el=^3av!?ylWmGw7lc~ zk+~ADP+<;7ZnV4RaN3G)qD$%t8wb?sD zW)nNBVigKp+hvy^JQgPS zdNFMSRu>-*Yv?^Yg9qw5U$8T2d#fR)q7vn)Hj_OV5?Cv$jW->OcOu3jElNxt9x9wq zD9Ma&V7lA}tQ>{PZHzT`OYd); z0B8r%BB)#5_7q5>{jIaxy?Gp^_RG*WPS!zpaO4aJUB zKTNRwBGbZ@+)Q%&f{rxE^+d7u*oablN z>U{PR>ohsGY1Tk)8waE?-Y_HhPNe;~P{aIz(xLqh*8~o8^E`Z=T-Cq=4up}&*f@2a z0bRYt4xIwdBK?r}@KGBlYl%B~Uu+6~5{)jmaFpzNMwL=T`0j41+axB%ZVkodhR?a( zTJ_vtBWAz1E}xjVm{6Oxc|F1qC{$p2kprW^jK~a7NWxO_L;pLXZ@~ZP%bghSDUJ-UREug}!$y!aOv8LJ(}9 z;Vk%rlP{rim|?qOl8!Cz`}L={!%e$h!d?mGmF_!cWjXAIPaASW+r#g-K^Y@SCSg)H z(86I-pYiQKvK?c_>h|xBrc}{|e)uzK6kVjuG=N?&W49BFML+6${H~ZIt*?=ys1R4M z0qN$1q_K?4EL(xk2dmfOKOHyV@z&e5C>|~tWY@2>wqK^dnQZluqJNqtDOwGcC)E6c z|0THE{{(;gG-UPR9LM?#9*cQVRMD)2>v#wYaYXiD6wU=%h;MA2Icp&jlXbTI{5>Vv z8TM;mX9hnCMI+%DRoA|q7^}+T*}*B#T|O^yW?BK9y~UG% zzJ@NP{v2_G$(z_ECS=EMDNS`SUy(<9)ETK?T8qPVHtHMo-cmJBiq*7&{M&MVcmDYz z%#a6jx;n04(e#f%#@6>Bty_LFEr@`|yMPpMpXSCsF$sBVY1d7nXqDcq)L~9m-pxZ* z?bJGH(Ti-3)mD`(k=GBgZ1+OD_5F!DJ)WOA;LT!Gox)&2aCpB#BV>2&egcPI-DuJ+ zR>)`{&ey%Y&)eLeB^1WOD>wwLw#2|^Bu}NHkH*25$r#+<#%CEA^HN+9%^!PS0bIt# zYZR5;Mf}(YePXxe&lGQd*5aN{b@?0fVx z0-ygkHgJp(b>|!@{|S@T5X@`mAz=i&>E91>Dc)5<;=nOl=|K8y}P4mcE2=!CD8MQ)Iq~mRY-lrM?B*^ zN;H%z?%^1oZxAk=N~-AFUb)LDGVL3%8!|#Rm_l6`>k9Mex!M^x7swaY2l*Chon8E- zZEnHXE;2;_6!aO$>S~HUm#aRxaZKPFzROz}w7cg$Aly|+(fPGIcNV*6Ge60|XyZB4 zIULc@FK&vbQ^Wdc2=ObIF++CTcU!Fow9a+<;1$2P?D{4FTmG|663ghf%&@=<)iP& z9L8=;N!WV(9d-K&RpFfsd46Ajg)i4@_R4C&t;_5DGl6T>W&1r}>taU8ob>BAoe1Ey zUU7Ztf(W-|NHD~@9TsOgm2K9L>_zWb3!AU+&+sZ+ko3)rTADzAc#|6C#Nu?X?9Hho zH@M-1%1f}JSNiKOsEQ#DqNJoGZhrW1`VAVNqQlQ&$CtdnSY@j{m)RW*P8fa$^i@Do9nmA5f0%u= z>(N~wI>pfg;S<8L!>=2m1b1oVDde14Ga`OonwF^87PyS_*f!qxz%2>F1{^SF^xj%o}ykH|xx-?6ZGP;39WKCPBf zVuV6mD8$;s+t;YjI@QlLnh*Ydy8Hp3!7$KybMZdhL87dPctTFIVrpn!^&Sd=`iabl z{{hRQ;g~86V($V}!r$P!{u{?4L37XjnnFW+IvfFs{0}&7e*x1U^Z}f@Z1l5%|zHgKyMmu7~r%jznbdF1?{?n@+LG4nOe&5g^|sCvP3YzG-Q`TK0l$_9xKa z0|^GF*QL!%9D*i|BGs2xQ^mNOAtI9Ko;RC`MXw{UNGm(^=cn+&+p?c&zTXwz-F70g z%vRBBS5db--tJG9SST-_v{*zpyF%F5;XO{Lb?rYEWWJ!5&xjiN%J;d^?bt4PWyMRq z!bogyq5xe0=7;f5j?v0r_PUHOR$pd`1;JYpCosGnPIErr8LQ*{&hc9|^MT{{$wjl@ z)1!K;w})XhLW2Etsdi;Li=aix+j1K3ci=y+6$T@W6<4E;9}Z)*TY2*`)%)MSe%AOs z`FdW?SroY)FV~n2;N4ys@+Q!v2)HqS)2y3G_&0Kc36??*a^LTfR2rceaj}GKFhVv zkQ(nBC(rA(up*zkOP3X&tFhgQf&|tkmtEDW67-3mLZ0WDbZYr3IZ`n@Sz)BAFu%ev zsoX`Bk6(DM=ha(`kWNWGl-tZz$$8Dy+Z*!xJvK*@3R!Uu8L}Ee%v^;1VwdM3Q*M(V zg?&6dw~{SpTg>44zX<7~Fd1DQ%$|B!}9rYVsAh=<4JHTB@7hp1& z#8#6EC)C`{YWsBBN5%k+qgKmfx2Te$K1(}4mB?l)6==I$Vchjf{tIJGDA%{ClD8Hs zOSRrGZK44%AOUU?_IE!rgNec4EEDrTy_E09`0dhMF5Tohe?cPdRd2TxFG`3@A_>f1 zH6qhV7yx2h>1ReB#B1w0(tz_7i7g$2&=9{atO>I<`58f#QhK%QpNi9hVbX+@{)mXfkXemP8;PBLZE3N^Ixx{%nNK@X?#oxD!+!NYfwc z)I1yGF}W#E_Cfjie)z-#vxdQWy1^9RfXS+a`*gWrU(AtY70QhTG9HyNozp~x7Vny^ zG&QwUJNXnGipH&*;d7ZxUuV*T^gft13jb_0OJZtLAU~HvtAo@Im?2*-b{m0E6x%#y zE|nOzwT|EKa5hoZ6qYytjuaReP7_$#c62nERs#2G`iOY^rk*NNlQxF_hF54d@MRAi z^QK5OFMf;A`|0t{{$-(V`pNQ{m9^LB2O|Hcz5*B1I_X&eXs&PHkar=C3WgsM^{T+}~0{u~Tyc%707d?iQ z$Va=V#m_pVp*erPLS}L;{8@(H$jqVVlCs1W|2$rO-OIy;0^wY8n@+p4)sCPex_5rZ znEm4IgZ<{%m^Lq#qL1aV)44`Rf~VZa4i{Q|ny@$>QFX1U0$9K)iiV(}1_G8=!DCk+ z)=TMOIAC?Uq0C%9Z*4vK%%XtUwq5Zv*cFxAdX&H_RmPqvY&DDyLS;Np!Xj&#ms!g> zK38p#KtrrU&}=!8E1Q!){dBv}V#+<>ykSyfB;r(an367Kzu3T5sUL2(^hljlJ5hG5 zWdt1=9j)F+o8hgROtcDf1$TbbbleDsjJvi;c5s!M4BuOU+RaJNI@8&hxb924a3RLQ z(Ir`s9P={G{H@Y9n?Op!SzelXbF^bcb!mq=aY`Z!aO3z%#}YfTh^7u9Tc^KML-!_c zr@<$KOX8~X(zIJ{hS+FEJA=!oiq+q25mw|~)@a9mOlDa(dAYUmI{vucIcTFV}aI)0^8-wAlAz1 z7*cFzr~!-4w@b`JpX2mbYVp3m-=9V@6beBjP2vuNdfH00rx#EHlg9~NCN)aWn)F82 zIAn>yKVEO3x4EMFw~*M-bFBqI)iq18FH_C32M*pEF`B-&mpV4<1Ptl=3%H&C|lqum;z@cvwS4dD!8wWqd=+1w#n!VwAWsle$#lC zM3|t{(svZs=EXIa?LoW2m7gyy{z$=QsW9LVRV#>S?&ztxm@!9L&Vc*u&D?uqN2vUz zidE6i!$Cbr>0U~{XG1(zVzBvqmE#%<>8NDFUwt2MEM6*P6X#!7K*8uz``qppSW#f& zwHR%<*ysmM?W7FuO*r$tVhsDgI#zznKdwKRM=oCNV1^ zpA)t5X3fXJ@q>BDj2jq#l>Tk0N`M1PCSQ;dg0I$CjK&N`Y`{y+RS9eFhuin2&Ws}$ z999R3X6A2UZbK!FVG+<=5EymFa_=C-*ycX|`FI}heNA6rSTwVkoBm96;*YCj;vX&* zZgSmwOeX0#;|{czhA%zpa~Es=W14w->MqE3Ey99~r|p`_(f7F4!*~_1-NpH@SLeD8 zut7?tomWx;(fB8?eaKBy19yW=XrBH^d!b;OheCt=+KB}(U=en)K2g9kM)SEBk95or zXkC$+!a_=+qd$gP8@%6N)#zedKkg+kX=3LJ-6*kZYCXH;LYscAW76rGkTda+OH>J+MkxEQ^*)j43rW9v;0Rf2e-J;(90}1Ch-_M?_SH zMExN8X^ZkIRq;V`APrwG6f7E*T>vZ8gg*48PJ%PPLunsJ`RpYK$@N&)@6Kq(O(Ado z<2GlV{_?d_m!_1~X`BzGRiu4m)@m;sMEju{Gnr5QjwR8aba=yg+y7ML_Xk5=8lbUf2WrH z*GcWz(2j3+Bf|UMmrVB*zAGx_q+JIe&N|LhaT)9R-pj)EXNaUVv5nOepL>R(x?EV{ z$fm3Y22hxar-ucf>#jale!_mvvGBmTNj&!HIlwv$=v;`WcE8 z08?!-;+m_NI(@p66IT^3{*(LH@Mj9m6@13xjRwrA`P0E_Nt3*n7NxnzKd<;cda+y? z^!i6bKjYPV5?Es`VwZi*&dFIvi}eum!BVj&Vy{>{Kf^wK!-QhEouY!@6JLh5Egzd< zkKFk%|D|G{kU(Fm6G{Qe_Ib-|tij~8g3LLj7UyFl>ZWp zuK}XP#ib@g@{_@3!5(vg^R{7b;j6(f0!7Nlhb||pxN~Z1u$0d^>3`&07*TTKl%Zd( zBU`@{E?$}Ts!tZoxbg(66&$?J7>M|?Q+txFZ|8=B(rAber<3?|d^$c^P zj{v7BwQik_dV_;;XG^owrd+A-?%fN94jLH2D14SO*HqRGh#F^R?%h#S9I5*%bpHnm zSp8OSK6q}|hiZnfP|&zriBpkUfu=2^R)tY}!z!sqEN;`I2kb?AyTksuJdgdRTx8&qu!}(*(cko>{aVss*3;{A@&nv+0f zzpPMq=(;rJzaPLzzaSA(rmc{Xr1JK{G`a|YQ?W@BaF;fWi8dd)sa!B zYPP`X@$%`TH0c}L*FKM5E(S&1j`aFU%3FzWGRoT?=VMZP%O#`mgipOU6W*$8<7s*K zAJ6%Y>=$JC&IfoEESv(_0KdBcdyfE+=ERZ;c^1|vrSaeBWsoS3+zOSm`O3w=T65O7 zr0Pwx6N%mEjd6bW^ONLhg;i9&Q^4g?vEJkT4aqkaCym5L!c;urF`ak8CJDyj1?*XL{EG@PgQ!0PpSeH649)<6oo zcI|n2FSjlCnb=m(PxE`mV)b^m*-9uHlk)eo+`NwCV+GFC@7Bl48Q#AU^&1=ltY*p- z59e!hguE_Cftkj1SB!m~SG1T=1tke2_vNulzojh;e4ifNOtO9~y*0cW>13{i5`DTq zi)*sUq-FG08%Y<6fb&h^e@|a|A~7O(7CoL~H&+#suaLYx4FcrHZ_Go^z^Koc+*asf zoF?)WaYul8=E0z3yHJ;BJyUj5x)vK5nQhZ$owu9UVTL%6AL%n%@rkUf?<~S< z^#v-A*~CF{)rY$EjSCmRWp5gJ5UR8;SmLc_a64HQ8}PE8ar0YXzIo29PpL4_#5nkD z_F8S`WQhc87;SHR?(BG5THuLsx$3pjmE^#;OnQPZtuX z#QQ+%bN=S?1CAsz9wT{@Vy<#VIxC4@nI7Loc25l@%=K#CVx_4xS4xbgkIYMI{m z@Y=V4<$zc|z3`bwn9P;Mrq^$*!7`!vu#3+*9)&|EPQve^GSP%_Nlu+3T;iIIGLHmZ z+PQ)IO83&HTZiCv({5!SX-=!p-FP%1hx*+jqJfeMOR$r2)t&$-)1bw(=s-sc(bWoj zcGnV+UGA0yC0f-9~zquHBAxo0WJb1vnvdp!Nvu; z>8=2dnIqlxaI!g$?WpbX)*8hblxFVM{Qw|7>uU=^^O0}-M({#c-s zU zlbvI^-0UH@Z{8en^LtZ`+YIBweHIKH(kn&Qnhr3=D^X3KFb5=5Jdi`Wxn^gB$VKv| zq$vy;TB|A$wggu^9lk}crbj{#&o9U|$IJc32RS3o zH#xg&VPyFf5}_EuDvFw>yD>b=DkFmco#LYT{yfjmT(G4UdywtOV?LudmPG!Ridt$D z4hqg@dl{2;w21)Ouk?vkXRMq$fz;yf`3_KM1&UQa`LI?oDsxmiI-*Oakb>8 zco&m+3fv{}P_B>n9(hxh>xigCAZ`UVarb~;&><^UaDlMT?JKcj0OIe3fGNfzX+Z%1 zY4eK0d9v_Lq{hG(rWi)Z>3WYGx$yfv^=Nl{e61vyGib$8aw0hNkyg_b5^(`=RJ^#@ zwM_eZ+V9N)HGt-`Tx}0f&y&NgA0?9^S&e`=P_6N+i zupklethvST_lISw69ESDa&M)rt??LJZws;Ye5CZN$i?kve4Sa~*;a%Ozt{zUHhMAQ zPQD*DjK*uk!S>)39ks&!Kf?Upqnc_yJg#amnPcKX5PQ@=<1^;Hx0|`GS!UD~z#eGp z9suiK^64ku=d`aCTnITgDuBV}@CNeWY&O$@>ULbk@*3?#%ckEQ2xPC;FvX*$EiDxd z0oFRfKVn!cNiLB&P5Gg_h7F{sa=hF!b^4PwLtUC9eKZq*eR_&(#*Kt9vFV;~L$1j< z(?@gtNAbLOW^1uwIKY7=G$Xjx1Z@?l=ZQuW;YDva*!P>XTa7j{$Aal#PkN*~Qn;+c z@pnLGBFO0&xiKJH_TbHDrp3~-RYG=@pcPm-iqR{gx;ce^=suP9hg8{08HAycP=YXm zWfuJuaJvlf-f@39IfV~wkI)B;egjMrWMbD)XRc3!?({TxPyS1{7yC;^cOH$6hHbuk zRNYFmpd;4Au@MAef{HWPbPn+B^89YusDp{y)4@0j<6oW<)lPHO6seIkTG%u`9}Atq z1)+5A7Iegp8*bg6=jP#toHVEpEU z*m3rCGk`Q;Jun1_FVTli`RPbnyamyQV126mn#u;~I`id0&I5OGD%j3qV=zLx+K!Aw zM#TqnKxeQz#a>?z%1r2rFTm4Lq2)BRZ@Iuz{L1@=Y4l_oO~JzSg2!O79g(|=7vN0d zq2*-ZP?zB3K~yCq0;B?Wkq!3umroEOCUFBfnarY z^i0t;51jntzzm(sDO#fNSvvqz>}C;^S+ZaV?b-#Ru(#pis=H?NNM2q;XS3 z?w=`xy`LO0v4iDjr^Oj!-B*JuA=4rPz}gecjYWpscK0V!hp@Ltg-ybsX63}MVem$mA;zDtbTuXhSUuX4 zI$TQADvCsCRtca0*Ngas-IR#Je&ArgF)_lpo4}w^LG-RYIE*}chNbOZ6)~1R@X6za zd^@aI95mH*`qfBmfxbZ2NAI-|e0ALp*c6l5na<@o{Bc`OVQXMrw?^(wo_c`wD*2n@Erc4K#gTH&cQAZ^utIJ-A!(NB z5AcQ8ZDU4Hw>h)=iS4evL~AfsIxfy-zMk#ZnDIzl>A~l)6-S1!z}?r$KU(>2rcKlx z#_!SHN$`ABqJKA3#HVJ!dS+O30Iq+cOjuT)_!#%QvQvgPDeOsaC%3Sy_^e)QRr-dM zy0vt@ota6?Yj1e!kKnlRjNqFO)msW4erq8_?C_h~pV-JvMgPRog7A|t6nJ`{K;Lv6 zBYUHl<)iRO<**(;Dp3oAD%kiBn2pQG|KTZa76rTVuxctJov($tp*(yR_sd0(K!>)E z;>9wI%kB9OC*uI7My2E6MaixCH^?QXz{r2g+>7aF%w_uxT`nGkWu2d$YAFi4RCmi~~#hb6+>ZML5ZZwZL#0qrV0zH|ZU~?GlDr zkMIsjlOf~MzXq04HRu<9eYhR=wXPbw@+6i#x4+PhInJ4&}8`N9c_wF(edr?qlHT9BY&Gs~`(BQa^UH{@mu%_8I;k zd&#{tH?BB8eEb=-?tR-a185prdpMx0tZ9Aak?@&Iql&1w^D?-sHKTdIKS%FZjA*uQ zOsnIA_Dh?iIcK&^0Uj4ikNz}TCRATP+9vg8VvM+8budfd}WAPTKt}1 zZ+94qldiZ54S$47k<@YbGXk4dohLJS6m%HEoUXWHF=x>pNV5QB&R!aBS=|p_O5+`Rv&trMf?2P;L$9 z9m1oFNV#QeUV%sGI9uJnkbf2b`~)b}biSG+H6%0v%VA&noK=^AJc>+fwhCF-t)qwO zh*0>lbUvbPl?Rse=d(&~H{bU3xG$XeOxIz6{QbvmtY)kupg)-nD2=aXnL#F4w(sri zIs&x|z2epxE%kFcg3^TRAIv|sBN^?LIBoWGn)agTRK1I^O2ebB<=zFb76?BKe6c@6 zdzrb8$1Sl$a(&c0fW$I3QJ{=1fSL)wuwttd_Fxr+r-{*DqAE#3UUk1G&=k?e=>-h} zs?0|67Y#hEUvRRYM6^0@E9HH=_+nTv^G!D~b2mg2-jvLaRcti2(}LTJN)=`?!|$?a1J2u)$VFK`!<~ zqK%>Qvr z6K_tm0^Eu^AQr#8{zG~A>S;a6R(1!V&6u@VT(g5C%wAm1gwgwTQ-{0D!(yT)i}^AV z*Q=2uVbL6q4;?d#T=vdv#?k4I7be=nMUz91FJd%H=7w&TH93Hg{hFQ#j?CTStZN;5xvdn0%hVEo%I>+?dv}mV{GU z67JZfz`jY!{NpUggQX^(jz_Ew6tx0CW1?ujW|a)PG@3^jmw48c<4y~AUU4xYicP){ z`_Rrw?=5{N0f4_8Y+B`UfKMx^vBB^s*Afqkz!%CNN3OJ`_YRiO3f;mGm&nAi6lh8C z+KAzqj2Gdo%p$kH(4Jbe{to2W^i1qE{>y_@rF-JuIW&slO991bFZXgIiL~4Kw6KiAlLx(VWc>K1uLQ(q}M2ZwZPHrKyfcV5OOJD zsX?h26ftUcW_1QLohobv!vAS%sSE+u}7aD?mJy^(sR-N)nEk zcn1VA8Ej#r%a2x{hXxc1-fn+hoJ$HG4TS|QqIRR(|7hjT!!sraQIZ;t#c03tn_4(9X5{E%7^x z5vk25t#f=z&+m<|_boCS_^ei-L|A?E-uLoA`(?9<+z}wi?@7iKy)PB+oqP#)HOmBe zVpW2+S@HwV{45sBw|bZ$`^l(X;Zpd}mRB_#sob`zwvsIXXYTkG-MHt~2Xbh$tMHx2#pPErxUBbQo5|eou68FEeA*GRA7#43 z2+|cdC}}h3KPvo@*=dny=8rLrAL*R`4e$J20*QoMC<|THpTV8MU*L}Xl>uTUYmH-) zZ?8HFr*4u?@G9tA_Oet@>C$c9V({S#Yi-Of7dZ7c#8k7F15F&QMtT&=cn?KKT)|I5 z9>$ALAypy=FxiB;I~rfG;-P09J?qMqUGWt87h(Vbt0^8)uD0Wz)s>Id31g67!6xCw zDp_V2&x+qpNqNpjNhv;6?RjA}g$GWs_=m_^{jOX95Gh7})Fnv=8_38sRVvulU}!z&tSI z4VQcQTW{+2X}o#8+2wT!=#rvSv5?9Dwu(fq*j9{7{SZ`>XQK^odp4OsXBckH&m=Y| zV_nu~n%mSS!R&pUx_O+R>qrfrxlm-GeAB6k8yV|X)>N=28JRD^f_vzBAVqZ}wbCC9 zmmh{oisD9Mi%7@@z5O%fdntDR$!#7DPHhALeT*ne`S~M{#3-pCeLOWk_hchvGO!Cd z_^nQA1Vl`^vyMiqa4ecDdN!9N7$RxU@^%P;i1J_;(H4^vGAbpG91Mq-Cg7&Y5RipB zSu#fPVSO{CNYXN11uc-7GYLZwk4fh>s=FLP6vL=1n0$FqprVn)`}{h@A<7>j+RQ4J z1k)E~pj=LQ1UP^=O}fEmO$Y*97$8^h0Qsz#@3Ym5r>p~Amk|OpU5E`+#BzrSKd)ri zpQYGN*nwRhJgOAKa@3TrDV3UaG0~adcKF%@1JA*j>k)9sXgpQ&B9t_GUF=E1&c#D< z*R{im<8ZcmTIp?sY{MiG)}|#L^>H2XT}B1hEys>t;v2Y&`Rq`TrNbo|x*z>4-al`a z)@=Tk4iPY(uxp-OLJ;(7e}f&Y&luT7?`#h$jlT96VA*|UauqO*Y~zC3%t@LR!QPrQ zNe)N%QL$hhvuW+SXkVew#Hfg9TP=p%khibk5xhiLHO#tT3tKNgeAA{ z1+4{1nt!x+u&iqdj&V=B_C`u;Py6$YA`H>uNKaq#xFEil8t)Lwy}zPgjRPNJ%v_%>m7sqEBP{^o{h{GfpvKdz53K{kYO8fTZryT z{75pJ5Vq7qRpbMr?7zUF_-$93rJWoM)-7E1tcbZy*{YFq2o)TNo4ewx#qIEAm|V%Ji(4( zwQ@b>!U`DypEiz)r{JRQCB5@aFYA{Df55;9Te+Z8N zPX76_uPhYw7mluXT*g=pAIIVTsc>RZ!pKz@)yK+)qsDXp z*E9TFjM@M+`{uP=Exx|DTNWT-avGc9?#>OKUi7bra^~K9gBlT<;B92(NoxS1I~e#gE!LukN;s;Z28*TK63x+%$*ddIuYa{=z$#J2~2$ zGG_!(z_i+} z8$?%t(X0`#?<$M^95iwxz=nXebQZ>8Wao=xvrrcP`@s3$ojQi7b|UUmtC@anBlqTy zc@Mzm;HYEHl^ke&h zx7DA)4!Zz--Pv8gb`KULS5l*LIWmVo}3bIo@=S6$%L65;Dlo{LJz9!%i3vj7`$jQf+;mCvO2pCqU# zD>yjkWNG%+a^tpIZg#P{uPG79Pk{FySoQ9<^}zo0bs|{`p1VxI45s1<4Au&WiO(Py zgOXhR-B3zG@!Rq;gH;)1zK-wmB0=O~^taVUu1Oo@4lUcol|qKFXqLPb;le{}vcq9j zVb{$hVLUgUJcdCCpr$b1`yL9aFrBaPP9$IP4IU+Ov_B)C8>PF#Sa}ZfM4aibQnf}1 z?pqEx79>f#33o1-x(%zumm{Bj*C3Od%MB^^(+i>Tv5%P-?B4bF#^7b6p*Tk&6-)xu zkuAJ~!EsjK_0Qz*DBDY>UGcEEAoT?ey$B?N`~L0ZDc}G8UjQx{rw1JyI3U3Wh$LCo zT(BGU$v&W1IKd&?OF8&OZo`(5w_sjp*-RB{B+!-s+93T^wd+NP*BD?JO^{}Grw`0T z!mp4|WY&OT5f-l82kZ6t0xFH%^*!KNO(+@4KafRvT)jKr&1tsI$^hKg8TICJjek61 zgefwE74Q9fc$jouKf$9j$*21A;g1(1|JP4*DsQVR<3an*+<^&jRi|qy9?Vwec(QdG za&l6is0rE5bFMR$$FsOta=J_SMFJu*95P1jgEN=1&{s^2)WlSR3bRHGn4j}E| z>)WpyxNhVQqt)BxT_x_^G9?~&ItgQU*ecVzQZ3s+XMrns_B0$0tMf7bgzqFPyOof9 zhO>5NiH1>?>Qu2O;hV~-q>7{P#EC8vi_uDM(?LRClkV`b(T339!efORm8>0b5HyZQ zXNdS2Y?|83aQbz42io5On1J4`0D$e9%(QFU2FQV$8wzZvzmI3fa*AWpnGNPX$2skW zKk&{C#HJ$Ox0n(Uz3*ZX*g4;w*aNri0UY+HVeteOL=n+dt^LkojA_fb;VZ^q!Mvg`R*rHf(Sdi>UV2N!A0BF)7}?y zx+Pef8Gl?cF-jn*6!Oyw`n9WeN+O`7Hp83>S?e?v-n`P;H{Q4#J+IdMGz@2km{Z7pf6~t=x97DH{U1r0rFNEme{4P7PH z-g1@z1M0vf!;JmcX`)E*vbrQFAGtqoRUs$)Q-6Us*}TF{WhT4Eha#tnI8A?;-a0Gg zZf4LHW_2<&7>oS5cIFfw(8k?Ox`>Tjd+rj3PPol_|u*Byo_KLP?d_K6E>MHR>2jOkrj>i z*0zOLoWmS5*Sux1&#>yYJy~jYiT!OC59LYhDoi_DZSwvG49cQx>vpQk!~oij&oh@9}>-kv5;inOqsavaU*MNlX6kB>eh`LpKUi4i{+q;S}S(+9=3?TPQ{=7vS* z;7KKsEsYut?O+gBM)la?sU_nYHK2ftsqgJkYfJr5Qn%5{p2+g^8SCl7*NEZoCz22H!Hibu}xlYBm z)&uQ@OBvGzG}0$L%>>qCW{dzi{0OyCB5q{+Z}D+j-6Wx%uUh=q&eR0FtDe1dWollG z>?BL}uV{IZQ=7KUqHUS*=t}=N8uh?ar~n}(T*%(7Oj>kS=O*9;QyGW=`bqG&Z{WRE zZ4c(yvsE~yYo%GY0&>vpglxj84esB)_%-7fc{jxSn@V==&JSra<~k5nP&vf<=-3yP z(&&zlJ(>xl-Im(`?a7s^Ui~F@Y)*tWiPcbU^7BC~{4lYv!VKd)I_9B}(Lz0I4SnNB zx0N7wp}LQqxN-xkLR|il3&2}^1N!W-aTwP}NvLM~AbJthj}7DX@_dC;?5~iD0x=p& zSagjbB5Y@4H+11pZz#R|*RP{zQb~3Wg*XnyOJR7N1;zrE&vY7|ix9&z5=6TH)Ja5z zqJU=%S2MAl>-eZhQD&|W=)IzP@YgFAC~#aQ1iix2!Ly^{ z_)X|AGbQ-;R%*GS2gSZ_JXM)QmUt*Et?jN$L7gV9Zpoz{t2TuKI#NqC^zjeO8ob_N zBm?Y10P_;3M&heGHy;W*iteEyppvCU{#>fn3=dVnfsA0gFD@ZbC??$yeqS`}>)$LD zOY?;T;uwt!%mGCeI=aYgzd^5DVVX+>8&Y2Pnq8$8)F_+No zFUdKv0yVcENX5)h@WYEhXpFgjF0kZ&vqO2a7Q(2E%hbi+1|<;R^y}9D%?d(?h1Xx9 z;S3>&Qg!{)SBM4%eAe4Pg$(7i*`*PU7pitfaMm!uJr?VWwbb#1YL~kS3+A^Fc*@6^Fr>EKg ztxiZBw$=)paElE_!3rgwLa;3Z25!U}rF8v=>-8{YL2rGqwT9MZW+=gWRC3_uy)DY4 zHFiJb7S!W9gzjk>?GcGMk)_)Vh9zOagV*~=7&9DIvrd7T=uqRiDv9|!ksqB^WfZPm zLeUZ3MwYd=b0($e15Eop2@HGv=;~5v0zD*oI|)!#aJVjX_@I7O4e$x=z!jJy9x%>8 zt@(kZrV$)_jmFW8-uGK~_0_rKi@Qaif!)&qq-g9&b6!htrU+D}cs!va)3L0e1|o5H zwD993tE2RXPp2Dn(|`8!R{=s?zL06`Zy%0xa9B-7Yz7b4iDq9;92w_6Ym>(m&@WZ2 z_Eev3(Ld!*6hwXD6Uhm4RMCaBHORTFocJ8xzHHq4nL(#Na-4De+J*QBTTgoBp;Uh9 z4_F4w<$<=X1s*^U~@Mh zJZvd4v(WA|d|ZwXXAu*^DzwKH-H(49Hyb%5_6rh)>r;QWre+IOnrMAitjFZl9a8`c zzEGsa{*BHzOruBTZm-8qF3%B_N(0$*UC33WkVzo}V{YpeT5k*O`7JbyOk0xjRaQ#6BKQW!MScV zpS_1CaX4yC9K%3*eHUR0lUX~5#K?y=J+zs%T5Y84m53c1BO7KvR9=g}=5i4)h)03m zrF5=Wq3vWY;S)tE9ky~y3gv8@ti0c8Oh(L=#tl8fW0&%6Bpy2P2}YU2ZDf-d=rO5+JlECdgL>;R zu(D~WlEx6gK`d10XRYeSGPR>sXTvRCbh<`{x!`{cfjDRub7aVZOL~9To?3D9gxaMtmFlC1~S5Vt2Y>G1IovxcGdd)TwZ%?eA5hYn_eiVpU zD~l`TJQ*!PRpa8HxYvtQ&FYPx5+@~Evu!&^qT|w)X%oN}A;oOfnXFU66_AOW z@7i7yjuxo^XNpb|`l%g>EeyN#gI`$0>nyb}R+WTqL8HeJahV98^x4iTt~s68{Ni?L zU;T?C1XlQ&GBV(V>ylXXgLwij(3<9}jMp)BRJ^}=psALxAi8y7ir+YiFc;qF6nJ0g zHIku~wSA&6V$n75G(H1vQ8Y|=kv5C@mK1dzzX%bus=BiEE(wTTv_EtVVrBTO6?#kj zE2y3|*@!!o&tXw0p=r#tsn{v?R?!{tWMQA4c>`??Zz;d~bw4C5nFA~mqfd0Yg(R#> z=pMZ|m|H?7!G01W6gQc(om&S?(4HyerX*qBoDhCJFFRH?`@c;p3&IFnz-a8s3ts!m zRb1EuXTg_a^r~#)!W&}WP8&2|-S}4!yl9RfP&4CJO#1P0gu{rHIa@3FeYxJUlBpoY zpEk76545LFlTWS+e$zB*q0GWfQe-ltw%V{2SwVHCMlB1;D%S1=LhHzqMZ3~b3^Ups zb6epUK~cV4So-&DIRuo5UsrpxWT2wjo{EDR#N3^4NTtmR=|uh2M{51^7# z6-+o*lkONV(5j49NqYWTcR|6829s{)_cMA)oEnW#Rlf~uPIg_nSw$-d>rXk31~ZX! zSSA{bbaT{6VAcLN>MODctu3ZSaQx=M6MEhVo$X#&=H!V1)(V6UIqDK$Sr0t2CpYN7 zT;oxgP`XT?v2e8*;|`@UnJj067t8*icS!a~Lz<*n-J z6LpfhiA?2)w=47nR3V?=GcYi9=IkF0K$Vg?KZ+n1so}2i{pKyyA?oVUw^(GiXHS^Tn4${J{%F>FUcktI#xTr+p&o~?ba{`Pn1F4Q{ z2)(t-?t3f9NsC_EuXo))WV4&jC~WFq+8y3LBW%jAyiE+S9oe=4#E>I{1%YGTOP>PS z{lV_syE_r(rcsNFiM18kLV~8C8lTJewsFHl2fsUXoe<%wSG=B5Xk(ndQ0c7sLJ( z^5f&KC$A;W*3U#;m%=-fT$__h<&Up9U45m0NaOEX|LQZ&<}xQs(?I8glwET*IEP%j z)P$X9CED*tMyA|_s@}8=UT-`_U*d0MP5bV8Pno9i^`o05yibd<)KAL$gl*mTn#AWj zx-4N%cO^Kd=y+@M**Fz9E_0w2ylLbK%UGaU&$5b}=whn8RB0%`83ga%zj}(tK;m#P zm(3w?sfxP5)1id&Ho^hF9D&cZxDy&}furM`%mBicu<|&6oI*ZT=JxV;u3?&6+=y0P z=mcJwi%Enb&t2QJ+lk~;j`U=Avc=71Qx)@Glz_NW!107xYyHwwkOD(|=0hs1%BKCx z#Bp#3^pZ9;f!ZI10>ZX(-fF~E|1pDaYK{q$hr7Ix8eqbR3xbs!0iN>-0ar@7WQA#a zV;WJ<#}9blwGNN6Q>m3GHW?z>d0>`@k4(L>Jp6iT6>9c@bRPI+$$5`{lH;nk=R2Dt zmDf=j2%)Q>c(cH#%CDr#yXbfU;3st5qsc@bI{%Z&D0>T}&I8$H`zre)bwzhnm8+~f z;RGzJFLm1Cj69az-rPxOQ%yNM@OR|ielVI_3s&#xox@LEVG8QxK}lS>L5Ioc3oo(x zq`hUVs?9Cu66x2>$$g&}f^cHo&_PMg&Ci;PwQA!?Xy=SJ!TpKoVArSi^&)4CYb^AF zWq2p767e~=^ox|O=#TiJgx{(-KUA`P99lDC*NP<2xYwD(O7%v3MV0QJOWY=`&@j0E z8JNt!G_^7Ez!MP`sunA5t3H;cy%rE(k=+I@!-&{okUEx{DN@dlD!{^FN(noDc7mTq z6ZP0`g0`UF(aV#QUyW8U&L7eAmFEvQ0R-!7w@XGd#mDbpPh(N9efHbm-YRN?K>UlE zQ4WBSxLHxdDq;NCkabtR$F@I@;9Y7bdpzmzF%AF8(0@&g=FjMmnWpX0_}{iaPix&h zeH#90zzf#8c+IBILC)>%sH_WP#ud`zPDkGEhxOaaKa$m?k$KoJ&=Ze<&sYJp{U(q? zb4z1oDXQ|ZrGYxBBv1ql-Z4T5t&`~@eu(G`-$CP06(RKg=3HrWZz4bQ;>xGh^a^Z? zQ;)@v59s#0iG@Ud_-(z!%>`vBwJ?@_V(%k&&YgNDAv~2OdpzTNt?$kF?I#*^-o)?Y z{TiRUZb0*I^+8_7iWmIAD(3D~HdvFL@jcR4A*zZWDZyNW@UnPz>gp3Qbjh!M%I!PH z$lbymAYa$Q>S`uoe~#0yvK3-5aH_ZEG!~2Y)-BNxb*mcYjtijdp2u#`J%V>LmX;xu(!tUnE)Hj!J)2O8BuvAd_SW3=u1c8u{5{u%cqnC@ZK{ znHAIu7`dzVKDimpEMbOU8_80i^t@j#o+Cd7OKGGn`pR-e88+jkPy>(qf;o>9lufuu z3n`k^04U8QO+Cb%PPfRDMfJYt_8yFlOa)`mDgyS0^2i)YqksaRdZjB&wjJSwhmqj&>eVJ)mM|BRKa16>GCmJ; zYq9IySEs4%(;9}H_!pdC5G(7~eE5YN{UNTPr)%5W=pt_*D08*~tO8do1yAoiJE8F{ zz8U0AoleX<>T)(P2Mb+6twO_GVyRmjH3~l7*=)k$UoM6d%LoVFflmBelgF@YV9&|D z``-BqdfgS6=4f!nhn9K_0kR+;2vxg!yI@6StvJ7RovqN{?KHbN+j;T~byV@dJ38+9 z)b^#9>uV^hH`>$7t}H*7Macf$!2jfi@yhZO!p<4>d%+3CDpx~|^{!fo?*n#Yov4=1QQV(nMjAV0HH%IG@SA;=1zIynfm{*)+|rR&@F zsgoD9x_c|IEvjHUqT)==+QD|uhO&2k$6NwErvh&VcYPy9P6&i7+gRxJa&#b+SEhDEseA;CS z#d@zJHNkoyskPy0tRUO-ZT@_ZiDyI2^jmtt=?8)^{c6wP9cv@@FRL>vDFHQP=+k%a> z?PG87|5UmKsc^-hc+y%jv*@DS(TwIUn=FL!`6emN1T!LZ1lNrx>vjR zv!gPyq7pv?%n)y4TakI#u$)9vKeRIlIDFQlR!urvVLb#{B2z4)&2+zhIad_g$TaR( zTMC|?1}Ng26VxqJ_DPZJw@kx31LM?5TzgME3kAxYp<1hi=dLKimI!GksgqoXOmJp! z`LG<}YxGffrHq`2EcXX|b&qiB+5%e;xAH3;gE{ZHJZr4Vq?Hl|9?jAQh zDSUqb*I&Mg(LEZ|GZI^o&am>pOw71Q^pI(=^XJz;1bSRXAIRWc?go0GDbH7%l@;yjnMn<831kY^A8sB3=n0!1;+tdenr{9Z>)0H1WO^R20D??(}7;#cD;L}wA zVnGiFiW_s9L{LUPl;~Zm+XzPdIl*nrR$r{NuHpW-9vuDk!ru)ke>LuS3+*>ASvY$&lf}^2*S! z`2}I6t0ZbcWU$la5zXOP%q4?>Vcs`FUkD>gUC|)=!1VU65TwMEXMD0j7#-1+@~Vv5 zN4^FxBtqF?CJNW>mhBcn7_D5ruI<*QVSas9?r7Z&dGgCKp2|#>+xg`CFD_W# zAJ;w*RwbUCILWrm^hJ$X3ZQUgrEKmA;G>$6<@gKBay18?D&MCK?67{EzC1$j!1tAw zwLd@Klp(UZ)*Y~EDqK2nMINN73TM5-KcCz@r9v^eb|xcYhgBqEt4{A9^0^iCT>@1? z+vc1lp0G$lI{yh`#&kW z{Yd8X@a^9S$ZIa8e411Pe=mah~*Xg_p|WP)${B;rJ;Ies|5xi5+deY(J8(G`-GFFWO+t zjE5fa{y_&*rt-+T1L+y#tD+Hh2KO>)q#U_@N%(_IEi>~CSY*VUSzQerA{bdT7?Y+d z=IXAE1j@z}CkUJwS|azVtcUbaQUiY@P&;px#nZC zVytDho@W$cfPvk>FmfBWktL(yH)jYy=#y4`ZeZXN-sB`i;g|*_Yg>!fQu1Mesabc zP5oca`wy`h6r&rzVBy+jdV=_9S)M(4CnEot?jg84j=Mt{b$QjR*ItF;G=IaSKYM5L zxtA^>3&G&$hPX86f3<)%Ou+6&NFw09ITCfbC2Oqs$u7$zUE-j1L;qj%Jb)ae&z{-c z;^+x;|Is1-B_uSFw9VIMpEckv;=Ppoe}6fE2H$ys^L>`hM||zS+3%;n_7)Q=e(v3t zFp>AIPyWZ493PX_G{x!H`|nuFjGCHc+V^$}hBHJ*KAc=OZ+ey;+r{coA&1v}K2G})rJ@-$VJ?~s?W1VEed%qH2v`0rGw zdfm~7EMjs?wK(M6PenCjxh`~XVr(Kd_l3i&Jn`Ls zhv|vmk)k~lW~G+N)SJAHFW;nQVM)|7u4H((^xXJ=!V!|lUQ9)A=11XPA&J~aw$K2Xf(yp8&|Y}h=OydtOAz(RJj zJ!4aKb<0DtNjvcGKYNP;Pqq9@SNDs><(v8CS#*`1sp9#Gv)K_w#J*HAb`$rYFOz*q zM#o?MK?43i*KJw*1lc%L-OMPc{fl-G%QdTXn%~gBvv7??O+&Neq=ty`&>`{1xAyla z(*l1A7gaeUS|X2rsmh~wxOPhgq5eR8@XgsAAseIae+d3ygoUg{iTS`<5u`N}+MiVO zrJEX;)tQlA-I0o+5Pj*t9|SmhBw;#M3s}lcIMz>wK*%$^?lWW4f4?-qLo^1T7b`5O zyO;Ue?OT@3|NN~YOjOsGvp2!bAdCCoyX5sc0vP5gFdSkfAIv4;{^!L$!&9M(091s` z=RtdpTJVLKXuRx%c^})ZuukD;+|fldQEjrLGXt{gPsZz~r1kDZKK&k}Y7us|*?e3X zHk|-f%U-7ULSY5|;r2>>!nco!1lVfawKd(v9u@ML+|7Lq(Zl@Ol}2fy$h?T;+Ec?hMM)_(48{<7*`R#MARM*XE@Hv|c#% zA^&Vf$*0fD>>ly$Ow;nkx`S85JN&B&*%6(V?S?PIR}cN$BbKSw-9Lr@dKic$L2LDW zY>*jlvraqRM6-kykJTD3GGP<_FTC=9$uc8NhnPO3V!;ZaIhkiP`uz-;l|})YLFx(j zWo7hIfa-}tIJ1lRL|E)gV5MwalMx0m073qfA7nHSAX{O3xWLU$zue?x8>UEYR^x7@Sgzi_mUzS_=ff?M*7KE_9+bRJiaLf#XZ20CWGQK;S2`8Jt;s>C5 zZ&3Nq(C&fQ!3Hdt4bJBU1@mXi5aIltx=ke2FVb3nWC#Y>`8yUb_{q2pQVc4*o-(En zum7oALz^8e%~LQuZQo(wx%o#VdIYiLLKjwxCBEH}44)3C4qpT*y?fAf8qtg37YA-D zMWSZ_*^&c{E^12}yhY3u`-h@`vjwvyh}>eD4a7#hVUegvNjvr&tuiofEmJaYDv0YN zBD5V}e_P*!!&!dPf@qPio6vf+ffd1ctt)8ayI2Ue9wCvOsvCqxBim7z#VR0Z#u!Th zV1dzGmGM(ffJUQ+j@@|77lez8dpHCZJTw0$IeR+5Ot3Xvnj+Bl0;dQS9o?TP{4H+H ze?k|Bs0gi%?VqoXR;7d%YAuMKkaEqh7`2+-3f>+0I6HkRSh#vO8mOK8L>Ks3^J(qeKV(45Co-VRFk$y2*cWF<2tIs3NC)J?EYNl?TQs#OP_L$${lf?BhrN7?bgUcjsAl0tja#d2ZJXT(r%QjBE2{c~R z8-Pw6`^MEaVE0mcTW`t!l}f5WlBOiGbBiapH)`*@o6bYQ&szK-Z;AK+h8-9qSI$YY+ME|!I`OCyfV8zRjt6u*eB(N(_%?Eks`&wS+l3SmWyvw zs+;tMQRh~DiIu0~1wpvR(2K$6qD{4I5khfkMpByagSP#lLq<#DwK^*^1^ME)D zTo2&kum#z#i%oA|GQa%h$+R3~wba*3gtK?!x-`WpXYkh;_uw8sUrq2tb9vxv`Eqq( z_(RBeEbCndxPB7^b;G~^P{mae;t8 z)+Kc0Bjk;xmmb5*Ibr*z(f%N~8)_VgTI!Y1^!RK#ftP;iI2~tnfHjDwX|_X`Tk?q{ ziv)?JEYsD$6!p|9piudp0Lofb8khO&w9|H3Kvs|;q(q~WW)U2SEHN-hx`s#I<|fl? zxyTagXHEl;)+jK6y^=8cPGSV5XXGusH@%$DimFGSRQfrfS`F8iS>cHSkPkCt6#=S& zfbo%+Ra5ENp$D(GsWDbgd+Q?Bn^p#A2YZ@6677#^R*wTtq46TmwgnQ~MIw{U2!N65 zH+bed^EZd1Qv5RvE-*15{E5zyD_hzwqWmX!F%>MlxJd*sT3$oRHRY&h5g)z#!gfs2 zOc_bqt{Yb1yostf#JvY`dte-elMJ%Jj71~Mm4lB;$d~7rvnzSupcaocGA?ALsU zm{vgz_{3)_2ErR;m~V(fgi;Utr(Lc-y-HiwHB0MJqu;^K6U#dOT%pc%JBel4Y(GBBo;PgOPrl-G~7ZJTPt zkMoTvR|Uamy#B;*-@S<`c?J0nvm8sI+_R+O)2s@XLc5mbJ31ZV@{(qf8bR7TPedvj zRhU<08J;C(kivbWpCI3rryD(N%Pf7iFh3k{ae7UHI&|58nFB~T1I?HH6Il;0P@~J| zi-$wy6k^tnWp+<9c?Ww`ne%80De0N$R{$<6tV*#CH7pfDEa&TM1C|l)~9gL z7vbeTu53@X;54>1JrU<~tHf_)+R5$_N{a5sOgQ!Re21b`F1l2*L%+wRMF-Ps$qLKi&ppheeu^c)eG@#fVR}R;}%ug+SRYLk)zeb zA8#OgXNs)Jy*7ZXX$rSno6M7j?C~%>4tue!Gwd04!zU4VJ*=omFyr9H^1e08^jcG) zek1P`ESU$D)qp#dOB5?FCF2f86W%Kf4btTdecDXb9+%Z#PzLo;H=N(#i>g?0<75st zI?D%}8REjLSoSEqjPHtXd8g;C_;DnN3F__K7iKzlEDkyB*<7zIZ29}kOfR);CL+W4^XCtadle>xT?<7l$-#qBf*@0ZozAimm}$yM_CWr2{NODS(xnU* zgh9guaiOpuXk-56nhGkey@u_qN&+GLwCV4h& zKF6{}n4S~MAQ*XM%Z)uoIjxQ&$h3^Mv3JljsJ?obOwF$-B=Rjhm+$kLez)KIBH?qm zxh=g9usye#>9W~0V&K%bI(^0YnmGmVx#m2Y)^s;9pPos0FBllhP$^*`yCbG^tM~qT ze@-;}iKW5ntt+HGC)R0c=#^uCOu)kuRFj%WYj1_*0l4E?d1p-5)y=dP zdcUtsibOM9H=Z9W6OMnqaPGeOEuD5oZ$Y#X1iQdofF_|s)CMovF;0G*1EH-_G7 zgJP%6A*c7;8({R=+)B*WV?N2fjM%hFQeMMYwdLmy0-q{I^_e?gf7N&D7{k2Q&nj|q z`NPz1G8g?LIK>$}zMos7%7$-KUuxrDBSDf7!}vm&M{Ox<&IW{I!%O<>5_d z;1y;!=H7ip`}4mxoQFccfZV+^JMf*#|>!lzby8+ z9<3st?%|q4UnpH>s>eUvJFw6vT6l@}wVuE&w7tGF^fJsAA6EH{k;HCdaIxfKQF(tc zKMy@$KUGW@=#a7Vo1ksOv^jc*&GtHTK_bJE zM2(F<&hY&aBXxM+XRN1@QMQITxhAnC>g@Y4^-~FjS!1%$e=!$n0Co8hlWvVVx2CH0 zIUvQzZyh!YKKEZ#@NJ@rf-8=m3FjNQ2UKtt#^$pq6>rB=$piK3fnly!_=Yd%Ecb3~ zKwXyv09(^Bu_sd9TaORFAEjP}*tH9aZUvHsm%$A*R(AuNn8fXpS!@P6nfM34aWO)W zV+Z)uEW4Yv$zqLZ!bmyTN%YcruzO5bF>rEpj-uOf%tvCVYojsXJGxDEIkftTkx;J? z@V%p>1A4>hm*9{B{mCI%>POu!#8NSIcf4g7yq`&uN1eT9`w6G32#nIhNGlK6_8jXU zEnAT;1$9y1eS~-Me)K+)C%$VX^>Vu=iAVTJDj8GezjpokmMnH$p=I+&{KqfMb-Z<0 zcSE0a-~4%&@I`eN>a1cf6fXBlmorzUt0}Rb<5tlwml->?d7^OKg)lnE;&DWuS(C_s zX4L`YbhFDP!!Hm^Yd5Q1R6W`)EXCC6Du(xomgC7^0ewbB>r#{Ec!8KU7U>AMvD0+( zUTp4ayN11zMnuhfOWIKWH-xpgYB({ZF6o@+oHRyLMG5?-w>e4XG>%|WMzoxlW?BMH z3@r$;2|`4a?#dNFIjk~fd5okBp9f2#;reQyoJ(E{t>B<$zG#&kUpmqI$TF!<&v|IqH|K_*7pEogLKrYL-Z_%|132R@>&W0 z679iIp zw?YD1TJ{B@2Kt~;T+4LN_{AiS{&rT=qL)CCR0V_nGpem&Ux3+JCE#NO( z4DsyIxm;`l&Z4pXj4qr@_a<rHkzw? zprkwhmwRM(plAPd~0MI!C&5rDS92`nZx+&8~6i@mSGxgiNt z3dDJAZ-T~`WqdgM6f!;wKGDEbZt^@=g2jAB%Z*~H>`UPIx8n7l|2ELBv&=}L(Z1-$ zG60)%F=KEedvn14jiVSqnSMD1Xe#hy|h&;PxpL(w(^(xE!ZB%KB#f%{oz}U4PCI*2)oB`vxqTv=anvdW z)dQ<2C-aIR*9U*4m=0hkqk9PLEhMPt;D~NfjuDzrL_!IFBOY`c^F^F5QItdj>2eyq z)wFmZ0?&KSCqk^jLAYK6f%g>YC-H?MmDXDhZ0ZN3>t(pDUliJgSl+x|Vt>uVZ`ufV zwG#S1x||klrDnLS2pm@D$p7An%{Pi|pu<uJkG3a?Kl0T?OVb%9?7+;l1+;Etp2xdw!9j4ii5b^g~JQYNiFbR)cM?^0V-x9HZ ziCJtOuE|{+{;E(DL`Ji$d?nc=74`VTVCf-hXE-{JKuav z-as4Z8oCcg5^=tk6>j)FhHT(Yg5&K-{fhDRddz*&ieRo{PDg+KUH`ipdL?(3zh(ws zA;M{GtE}%8Bbj8pdY_AexwD7ou?epE%RkIdY|p=cCFa>r;%GZrIV@n(TyM_sW`TSV z-K=&mG4pG(dhX+UZ8v?4-jDXP-AORHDcl9Ui!-B5Ty|1on;;lh+lLri3P?cXN#QRo z=Ul*}Rl6r%uQh@`?OKtH&rIMwItkXF8M2T#I<+Bm4 z9i>4_m`q#8mq+GRMX~Hi`!RoNO~$lpS4w!}PQ>~i4_83d~k;{I^ecsH_b;tE# z2)$QVXKR`?R{O2Ljuv7!($Dyn(G|1E$JZ0T^^Q6%Uyfnw{MmaF_oC(TsZ)6FRcY(F z*p3c3ypKPYr+@2fJ@IR3t5y2(3kBb>jp!Q`FK|9^BETNb<=fs2rf9fY;Yw`Okp$v7 zyfuHbyI?b1EkzhBT2k(cOctnGcVoBhRO!usoR8s_Dh zVaXy}@MN*lsqNQb20*1WcP|IdAZ^@l3xl73t|SPyPDW1a_9Z@>TH`mu=d~};R=wO4uF0rumHYAu$ z;zMmf^UDF6mEpF(r$`co{GnNVP@e8{J#^x`3@9^(+SSgzBK!DE$pyJdmxBUQf=zM( zV*tGYpmJvI!p!yH^zp6MSxG*nsQtk6+Z7+wB38+s9alMU z-&J00iV)Q8w@Ki$3mn$1Kj(blA{`oKZ&O~IHKgdY-BSVQI5bY+d~-L?Vx9P=DL^j6 zFxi6BH%0C^gZfsow}bzsJx$1K^D7d5cyriUC;0w%ZRAt68>qQ+0i>as&&r74d+ECB zU*+^$$k2H9qkbx-!geOz#nXhX$G@;kbaviOtaK}W|sCB0$H?zheeYJ8>(DYDuuN$V*S zxSFNjOR@tI+l~~QSW%lKa!5x8D_1UTuNWn#2#rSsQ^OZJ-na?55lh^*QSeQqWPVBx z-Y_5QlY2=?;QzJe#$bi~w{EWODwVQ6V`U#Dj5PsdxV6nqvNSCh)X;h5pX+}r1QUpL zu*OwtG9yG_)9(7LZH6Q3w`L77{k63n!;2>#yojM^u8i zwcOaZhNFbTc`KJniPY2klXo z-*SC3J(bM5-N@1>_Va(Ptq2u{sVpI2kBIDjor(^1BFAFKS!-UgTFt(p%|Uf#h_(Cm zCS#FXj|Oe<-DmW_N9xZA{NRV#&p6yO@fl$qw&!qiN{Y`6PgZ|kf4TfPcDLT-FvvPg zN591w@OSkN`E;E^<|I1PrX{HQFE7)RQsyR^*LxT^lo{4-AKlWrnm7JZY5x3APqZJ* zFei>a3SzWL3wG|qBm4v4fF*V}XZc~~AIh5lGiWmCKenA^OXiE-I@^9W1TZEHn~vks zByErTX3|Pktv`40pFh9|^dy)qdaGYK?jCkfF3!6AQMX61IvuL8py+=_lLi;E5ig|{ zUIiE`8i`Q8K7t8N=2%u3BewPAe}*BC3+ANWpprB~0GDfp|8&-{Fl1<=sIGv9@}IZ- zv&#t7vfkg9iUzfZ;KfIih{0V^pSqiG>i6I0ix_4K8t5U; zV&SGG0X#I)|MQ~fzMd)^r>6&EB76DpeX9QwL_~B%#lYiW6CL^X-#-P9JUf)?>;#*$ zT4%x8|6FjOXER<3@0eJ9L>s1tsjfO`qUdGEC4ti!vWp{m2Lz2j^BNnA-SJI1x-S@s zhv#gc=;(g8f6wK=DagC;GkW&%L!XY6bf7BeQK+lgw*SEhLSSnuB$o7a8yvy|80aXY0iYK%TDB#SRBnX|lo+y>= zY~m4wJDs8}|F8he42F`8&704sKCRX)+G})PSvBky6b=AsS0I=8& z_+e=oJ={#UCR(&y_lP?JSCv4B=!MhGgu?mWfOY}%2#cO3wBjKK^-Uu2 z>xMqY-(L^~HS{03-}8;n`sVm{`nyM)`x#po_8WhG48ew$x5_v4pH0-;~o7JX-O#{!lO%IOY47yxg$gzliMuoIgFcwX2 z*v9QFrgumNUAR}p74|-*XGFlQUY+)(n70S=5tFY5>?tQxk(e@}F(x@f$Upa~FASn( z=bFc`(z^CtnXNKB=;9fHq`p27Z@7U%LVc$29k9*|L4!3MpvJ?HYd~9hFDDZmi^tIl z_^gRfZrZ+&?sBtLspV+^Q2yhF&0=XGG0puZUxi~wCou~^f#O9``Kzct-uU&2a8pyK zc9Q2O`<3&x!nHrXKZ=iOQj#*^!#|9yxJKIeCPI<|ce$Q5W1mC1a5~%0RYt|icT4&R zH9Mc12C5Wtd1yp&O={+%IOM!~!MV_MwHC5fyUaDM;cR_fZ+rvFxgpc)N!2azC{jt8 zg8m~lE=DnMPki;@=?Bf-=hGI1pxWK>#*C)yMvAooE%NR)ESm}M5Lz@)M)`R=alaan zE31Vxl->mAMCiZc`)3Zo2o=(T-OkL-{d?VdhMlhf%y47E~G#me36jxH+Ce;%_6za>eT@|knqc6Z`u zmBp~r%2}6QIM?K1eD6!E-9}(4Fz6+4s6w#3CtC!%NVNnmXgDu1ffE&-u@7AtrJvZ8 zP8=+Q1T@lY%Z_|&Q7YWIWGX117}|!_l_;fmq)x9))OghT# z`i7e2H@{LuVIcgoR>8vTC(2SM)sHAYuq*+GMGm;XIqyrgwqlgz$|1SOE&tz9NZ2#B#H*G}|8g1+A`=d_Otq{hRAI{_NuH#-nhf!-vsSFLiE9lW-;J&9& z6)CYbfA#=%$I7Kd6T!whsImIb+EPRbQ-$Zo52;N!YaMU}W+_cVNy;3x(Q9%{Qt08L zzMq*9i1HRR3D6PTH$_S-r$SFDa7z+Wp zpqyY>0Q&9-!QV;$=jBX|;5Q_OdBOYCGEW3N(plobBw$B4p!rGe`Q6`%3btlV;cq2Usv$o)Cv^?z1$FGR2r=tIl}3vEyv5@VB&KPr*A zz#TAS23|kuh!5bzm!x-@;uj+JsR4ywlGE`%=TxRUR;<128Y$g?pnd5^nZ9wZb4 z7OkY_h8>Yr7y8!s5C)pvkf!@>aLOIS^m*58%(w>Rf47HTZ(#OECFY1@0%heKOVq3T z!k<~QMNQ<$;wgaypvgALmVh%L$;)0IE)E6;5HX;?eoc$c)$UV^U0=xXvWvV4FdfVp zTCP4lmFS5t<+$4U033J=9I?a!M_{WERHnc4Zq7PRe@ROE?@?{*@do>>n2LnP!DiE0 zmT_=0<#%);8YjM)d$1nVjE`!VmiwtJTrAkgKS`{6f(8TFtj3CG6~D(O(;TwE;;>^- zyJ%lo`;7noY}^3gbS|{)X&UgUbD`?{85(DNxf>b)@6m$dNd;~$v7RZ@wZ~}#S8v{F zzc)1~lgc-X7vcS+N8;N}yxWrZxQPw}I?}^*c%dYvNFF;6JY&lx{Tng7Pjn%JUy&qRk)kN&nML4^MpTazEV{<{TGJQdeQb8Fo&_eY zfhVE+uwjp(Q8*CMmS?SbTUm~C(N>8SK#fk@piyV2G8zmuhHUk}YX0XNMHM8p1oVB~ zEYmm`iubN9cPG+?I*PN-!0KN7z1P@|CP}kZ()s>;I;6noks)}0_Cua&6c5-}m^U79 zJT<9tm-vU?b(;o}CDQEyoW=l%Z|TM=ZGj{ImSLhdP9ng+M_qv!wG}1JzzpnDbvvV( z0V;g`nTPEiZ>jz>O}r)r)rNog56MvSVJV-sC#9?Z1lX|>z;cOK60rc@ZvTf)3Xfgz z=PG=c{c=_2%`=;tE@Kw}`0*J4g5JyM>x0_m=Mwm=u4_s_Iz?JK1q7r^ zYCt-akW@mtOS(Zyxgrs< z)UR|@lxp-A5dBy>=1E_v9kjPcuGAviM2PXnueS53BOO#>&I~Xx|k=^%JZkAChlvG{rz$scM#B zHn%#&wgqernV_oj^OSmRuvVP!QbfG|K}Khsxo zuO_{T5aR6{RMi$LBdN6ohNUkDo(;ZDO{sNRc{K_ktN$k%Vq~c9Yj9e|0&T;s1bsoc z;t)>qaiItV12$&eVzj?O6VkXywSS!xv#?hih(co|6%Rc6qNO{UxSbpwp=2uNL`tTA?m!Y7%2Y&-LlqWi zk(aC+O7GZ12uX|LYAP+I26LGmcH1s@d;ICS8ek}6AD(fzK-o&txD1=jsJQj%j98|@ zQs>fvj4_3}$mR`t0Sti3vL!km)$6Lb72nmZMDXmhc)OYZRf0AzwM{|as`+pOI_$po zMBfEtTob$!3<-|u4U{(RnSEu<8n2ajcX;L)qNS?_zzO%`$BL)GT$KUR zp&9Q5k6AlGZ>dYL6xxB=NH+b1@M*90?46(4E%-SN2kM?Fbh7C$vyAF6;F-jF!TqfAEkGgYu!i zS>>3)Kjp=>aV@pSfDPaS@#K>gDB1I;316%vssM~S2qrApT=B)|a1siYDkNA8=hzJv z=H6BvjKnWMfj$FNYZrhhdfKrOy<`eh740TnoIm7_U9`-$+$(MZO;ujmH!Pw9Dwso9 zZg^z+U9{Dqk?Yz4P$%F2HFE2r*1yACW-t^7rA$RuCtthTX^Fc6m(1;DRr*7VJcM)u zl^4JkxBUL<;<5OS8GG-O8T8Sj`-3Y_!;D}bVC0U1%52$=%o-rVl;^9hCg=nVWeN^+ zeKGN)E0^J2>*i3nIjwI`A5#?_YynaK)WEpX8+S25TjJuMD`HRoZg}ts0B)Hv-!-+! zm#>yVlnSRNr2-PE4IqKD0uex?Na#*K;aAbUma$*7Iac85p}%L3LJ!(lvoF1vgPw$H zb9#}k07;5{X^$iB>Meee2cRJR(U9s}rnuab3{1MCo{T;vP%v+j&PQvDv?=sR9v z+T*VsU#zP0i+27(&q5{~28rhMh-ECv9$-J*m(%gL0JdW*aBl!F+qN?{d+u%7_hBS{ zD$d)o2Y)Y??-(#wbSm_pK`mnWpKCr6&Tj-MbOxBTrdt#RJP+!J00m6Jw2Qe~_N9Sn zn(DUbo6k7_U3EvHe-6x{JmCPSoR&xka82BWH*%SseOYT=~u&4QRcjr{$BB$DC2 zL^Evx#jJ^vAjOw{nRa#QUoQR5hkt?rVy{8LR?MZ3DRqkNrC>!rHCzIEuU6eJ9k#>~ zH|fvBD2n`|5-SZw?#M8WYS94M8{HLDrKd-}gBNgy37zU8zA1G=<936WEpReV^tElW zX1Y5%nPVY?APdOP2LO&(oAC)!aFit(*z|5F#1i0kvflT2>j1FsE#o5~1mPEkdI9Q& zq&bD(u%)o&cfI4HG{+_o^2Q$$;43kGjo$+D9-Vq4syhtS;9+3KXNcl#E-3V*OBY>= zEO1nfcUl|+T+Gnt<~1;I(BZb|ez2(DTgpqN#_(bwEtb1o*)eZv=yWhm=sqYCy$%mN z>U;?EPw8Bm8gHGcfB(N9A<1-@Z%n z3VW%X2{egqqL5zpYrxjh>$c-jrLat|hS(!OvT=N3eni5J_7I|+`(~4^J9~#E+cm*3 z?z@#YyB%G==98Bfs*+c(V}PmJavwXK(16maX1a{s6_jv#MUqP7IJia^PNm7o6uaxZ zGR7v?6KW&gs1ezZd<(rPa~eWfUkpfJm`dC8j#wPvT+$G=C4-s;dh4g`;t8?^TlKB4KCS<+Xow~An)5?WGqh}Ctb z@CU}K(_TiJnxT^dh$$+L;9DLXHZ~)LQxH66t@i&wA})-@aX;5q=A$)D!nN-sk7IkC z3*S*DmO5$@nv2X8sSQYzbcv8~C(&-LcYiGs{-f6%RHkBEgR7JjHt~EN;9hLH&GzpP zx{8i^;b`Wy8FRi)SO$w-o!z%VF?_N8fD3@g?0C3@6}m(WMH>X7*GapWXr9~ubH1i% zj>pQ#5)F5RM8aOtEm3_%`o2zLf(k*7O=h!}iB=~yIWFzZ9&b}TNa$j^Ftx5nqBOwT z1YUsw28vYEPsO~;`y&l>qGO>;`X5}U_de-;J-tz%anh?x3q4c{$0o6OF`@a>$wh3~ zuJeS~yVA*83V8x?&xBkac~-#4VIA-G^*DFp3sDj)pG*Hzs zmCKVAj_v^biOx%i8?)dLA(L3{@?rU7XeJt#rVW~T%ivj zkz0-~MTWNmL{AgpNK411b84G)HHGISuf_E}8?JyNScxjbc!vI3fl5$hh>E;Z#6Z^k;`$+Z>Pz$Ch+Rtqxm+N8SEVB_`IZ*t409tEoj$a8)mkp zFZhd25?CI*sbAGuW&2-WoYobqNnY{KG7bjO)ncfhf}8>8+4b@9RF)CnYEKt!0~|2PvK@?Q7jf=JCK$u=ENg~ zS_O#$R?yg>zFx9*zYBW}B$c1)c@HEmZwXrOH7@iXA zNE!X?KEA}ci8m=zm8TDYO#^^=+__q5p`;cZzfW_0wUVfo0VV)EGE8{lRf^YE17sgJ zk6IG5ZIa8jcWU~%1mc*KQqq7&BTYTyvGq8QHab8X4z=d<4|l$#j-VX2o!rWJqA4Cj zqbUWs*q?r;ee*kS4IkD&VzsorE4~K?XtwreTN)h>c^Iws*(iX4vdU3RkV+Z5kQcGG z!g@JiNq&1DPVhuRoj^n+B1?`W|2Y-E!*y8&ez}RZvUvrrw3Ko8 z5u%2>t=eM>=w3O9XA_~0U|=FnvdNMM(C?&!_9Zh2T7VH9C<#*oQ86-nPp7}P09<~$ zdji1XF#ET>CdeezLeo9;PnqrAT@?30W(Pu|RRI*Lhuh#NHJEN0vyTs!+FXymQ94Y0 zi9A{#76d&l+Mk(tGUchs7h!q4nmy7fV^z%*sOWi?CPyyEY0qy5g4G&OK2;~^7Xz?!ZZW@ zfLg4alj7ep_YXc!F3b`4)*ri4PUGpkg>UX-?~bt3zf`LxV+lgIA7$6F`^#m zh2@u>BLIIoB?h>==T>GfoL7=oY#1tCit>el$F3j88-TGN)hDMv=h1(}{loGE^2&F_ z+HU?X;FWh1XFLPy&7v|Z?b0?1oV%?Jx<+s2N70c;!QGcn8{3R57)__Ccb5j zgw_|F6OpKT04v*6c z%+}XuJ|7ZV#u3e?d}eZ=>#4EtN%D@80czh!JF73ChurlW0Oni+!lhcR<1C6bc%Lns zwq$ILCY=&{RR1369aCEnJfy;x#0+_=NJYx*wlninHT?x7MbZGf-~UwTsW4hWg#j^C zW0RcELbv^QIci*Je$B?U@bMQ7V5hUQG7ydvKh;ePU!VJ0z*7d=3p^S5lkB2_Xn-LM zC&UU%;VB`2eHJF|0A<7J5yd(_!Dz=sOvs22uRVXhb6-4v4qcy{|6D_t)jok!BGK6D zn*q?sea7)=`WBh+TSb3WVV6Nxka_@TN;y?u6j8}eqiTGnc>~FVr%rmMe!$jpm=gMy zDpG3)jLxWgYxs}PWn2F_Ef;Va)g9a_C7X92ON6S@9khZ%=l1cJ*$8t6FF&Ed;p|0i zkw|Vq^%0+qqEwt@S=vu6Z36j3Q2z9L$?KrbF=f`k2G!7*#oh}r*niG}d@^k8gi6>oi4pr};DL|1 z6Lbx9xY-#E2Jh)YO8Aywnd1e|^6~ktEUn2@i!gbQP?va`nlh&JzUY!Oa;#?4hUfYo zU*n4#@Z{HR@q(e`R>4l%Y0yTcOx<{pv9(0VmB!o;g9@mj!Ctc-h+$>sm!69r{+#do z2XF@vu=1ffiYXx%?_#}2QeP%1ec9Q##;kw5 ze}XLVElFfho!rOGgvwZtHQ3pvKRqOdd$6MZR}&JJ`OAw>VYTl;O!>e<#e9kWvBidhWugWU<4iI#yR3@BVN6K%4~l@R)AhYrD%xX+B>p-3`vgtXRY`v z!2o!+AiuBd|KN}gJ&SXPra5hNlXL$40i;{r1TFO6o4_>#udk=NE5dL6uvfwAPfYsj zuxx!Wr*NeyjlVp5_3wiXd@CijZu=Y!3YGa6%AsUK@oI_EZypgGozVI62dUf=?L(MT zpnsu2Ke;*6za%q(F(k;%7FrNmyTXbp>%ZM6f1|4`!XNg>&gi;*|JrEsN?vO6nf*XT zRnxz=zRx187Q}o8hCFB0Y8?I-_eRNp;suDxpZ3QwpH`n){_FU)kx;zmsE)y7sU!6q zD*dlhkT!WGgCzKDja;R`!FI3`{;!Mi{v|>6*l*IrWamF&>aV*qHFZn!idee5vT^^Z z^RHcz1_y}46~M9KOhNw*6DcWgF(P#B+r;*Vs(;-GcJx4mUt5>^aQ1Q>g=wPuFhN4mWZ2CWVHL zT}96zOL>5Cz@X*bK=^5--p1n^+<=L6JItHD*R;2i6t39}VTT@+eLp zU*BkFO0#PxLI|h%3K3gJN_hvRTfRIjDCh4vTdjoEcSxo%zvQ$f;d@(SCs|Bf zQV9Rvos=wk-FkB3m6}^cose@@(>1f29c&>nY2yrON^O#ICRAtHFJw9B5yMQR-42K8 z#pJNPA*gX0T6}czz%a;@kI?-Yr}D#wTxW7QvtYv0;DBwFUY}K2?T;bHAs1wYS7>6_ zcbXZDTOJa?+(R6eP`VJ9P8i)dKLb0bKP4Pu|BQ2s7}M*$Azf)iLNU&W9>ek>@6ueP zAC$_nF}cRu#ok3vFKB+?O%pqs^7SizI->fV=M~veUmHGCM#2Gd8}`Y2-YenFYW(ft zjui}3f(Dhs*sH~M3O{^#1nl!?s`j%dyIaB9(6JL6V?8Vvo;4F)^ap#C@xvtRdU(ZE z^ZrVSIs(2qSHt1!ilr=UcT@Y`UF2-M&QqFQ0CY4oWaT>Ze9u8 zeV|HJYdc#d)&?o6&^-3u+B({uR<;f=>lis}Nxd^sRH4R%?En#Ig|5}H?tJ|n{R)Zx zre6fvM{JI^TO8Y+Jy6NS`STtp5A8d}{V0xj0&`i_bzc%IgecK+dv&;3p7W6WoGB|= ze@`l2xg5#c?{Hj*utea6___MNBtauJVt>7e;@vs8N1d4u(DL}n_el1gNj^vpw02x+ z3{5!J2efi*r*?utTw0x1uxm8?Sk1(QYObWDYY*J~a~^N*2T|#UIiL8WTvYa?_Fz2+$TO2hD!281Nm)cd@z$iGxs%l)ldHrbT~V|&L>K{| zxmuPonm+ZCh}+m#?lM2p)|0;Cyj!cDyZ+m)sfMwLJit6#w$1$2OS0e;>QSL9e#2awsv*>RW_wA&e>B2)xsa%`8={0H(~IWe(^GDq3$j3 zU+pf0f<}C~ZvhN{S{MxLPaRK7`mD9N z&Tc;BwP6z?V|kx_A^MYhW*%dFa#`qCm{h*3^AHZj32IZ{)k1m~w$WUSBO}M8(Vq@) z7!cVxtoX?Uyb&$s#%}0@1M1%zFC}J$AMMw zv_pi3gq-SD(HrW6`)a7}*y9T>xM42}Vy?NvqB6KK7D!u7Ry300PAbOD zQ6~#sC$~wgtkG;|8`HMNq3JgsC-SitoEGj;FRBe+q_yBq2@QN7(jC}@$xNRQ;AGAH zZP45B#jvi|J65onpHeTLQ<`mubJi9Vo)!#DR>_!~wj_4qz8l_gm1PalE8V3dPdxkL z&D!p^b2K0rYbj!IpJjYFfk$a_J)N1&=pNjB43Eo5Gq)rf7^>UcS)-qwQ|=vY!0iF| zVHqlX0k;qbpy?`@?BAJT`QvxQiu8+S;Xu2Pft53-hHxF zo?P{KustxWG3p(JWgv0R8)Aoi^i~@os2NYuDTe3g+o4_PhjQet@YY|eEW+N9m7UII zVOBl2D!id>PlH|0rYF~f1vtw?l-Mxu&Wz$Up!E&S8UDch5`EnBsm ze$${Cg}F2S%DW~?pi^{Mzy&#r)J2PUZ!=}PDY<1em=z9Df!^ZTSqOl5dCv7wP7I^ByO7btr1AQEwOxr=2AEb?k4n_9KkcXT56(|R=5dM*E^?;uezF%{+2o!tl&VkUFd=xlfOVWzVFHVzE$R{myb7;Lcyx;%9(Lc|aqGy<6UJz{S$j9lD zCz$miQ!>-6`-7A=iD7(H}Z5Uw9Q};K`-9MRkFfb(=Ah5`D z{+0Taql}t&!}6}&C!;ozeVI+~*!v>@`oTlZ>Uho-tvChcun%MEIBP;N&=5O*>Lf;s&4PWcZrCgaxoMZ1t!qQ$RR(+@Iv zJu6xx$Fa6GokHUMD5{F2b!6KdCM*ZYo^vx;C0$idriL7AHLEj(O=xk|?)rr*T70*# z%)QIpik=hhb8d`ge0tO=q1WV0Z%tnmHA(SFw?s!HR@7AOSu<-zp$N%cV$M8xBi{E^ zHLFr)lpA7mv+vFKPF*@JI|fzwmA7bl&Vu^L&~7-I?$lJ7;3u0?tYD^0`BlKwGBjRK z8Hc%%bPcfBq`dXvA$qB&_^~5XKl5h2HtDzAxQ#CK*ZouRcsxPmcvX}e92!+fbe8dF zeBKDqXgBI>oQRrQ;1Ap!NHJQLswmnj>`3ZqS9yA}iIt4>yiARH^HG8FQ>cUCr4QzC zmq8SO8G7qT7L#=8=iduGp?!9lcA^A)_ewtRm8*;HUmTrWs4vWmKN~4*TaiFhyb2wG zHtn@#u`5~SesaCyOt#Hm{McPp_CxVXWE`*L4xAj)q@bwVuFJ~)#-nF}n9b?#tA{>q z=tsG!>^vK5rBwaxm;>Y~E+%*(w8`b+i#bS%!_cN5BN0CQqf{}+2GeEdu|b(Pj(b>% zsG>eM?b!CH%(xiMEf)iy27G9AjV9HE@AHx!P<8?w>|^h{b4J^%pm_1+Hj-qaC0KdPjM~sZn;a? z%Z7`}QVeDJ_t&ka?xEgv+l-sGyVTILZ)+20{*sDUUlo0MjThVwP)-W4mT0F9u;{+{ zjCcACkY|k5j2kWUORjeA`}{Z$_=3@nrb;h?R_JaL`%Y-T!~Pwi@tHI4G%B?gd(`xr5egOrGvleLZw7bE=doEkaQbL0_{46c(lHEOKA99}eC;YKe;vdW?83)DVnVnj{r*N6UiYfF?iAq(}(O8SElS^iMC|^YVBk z?S|h+RXO5;-+hL3uaK-`z9V~)2E#U^a~IBC9(KbiTSiRP24d3%e3!ed2i2|D@*Tp* zrcfFZy-}Tux7OYLZ5x^SePYLK&>7MZ@=JN2*9tf2H)uJrLI$+^90RF~YmSeus2_)i zQeU8jEJj6d@S}O4wPVZkk6|c3WmyjI(otn}5M>|CIG?7td&Dq=cmIPib}wbHUP^Xn z>|A)(?i$RKTKa-e#`x+v&yybqChn&a%B*sE{1>#eR{s0+j@~?x_#ByTf;`Deb+e5o zmF?MBpxS3Gsd^B9jdzVQC;DvYp((!Ub8KhY9BeJCgCcL@nQ%o-y=xo<`V_?0BPCFa ziRw$mUD4$JbrTjlt=Cf;2T5PjMyM)1FGJyOpL!o*IfC4>Gn5;S3Gdr#>|2I3jP)_}10UuKp!!oK z0YDjx=}3Rhzwf#K%Y;3R)1kE87Q3

cOGrZ}CreUOKVO5{;W8Z3lO(cMlS_-1$Xv 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 Date: Fri, 1 Oct 2021 19:39:44 +0100 Subject: [PATCH 1237/1295] joinmarket: refactor installation verify Joininboc commit with PGP install JoinMarket with the JoininBox script remove ssh loging with the joinmarket user show JoininBox in main menu --- home.admin/00mainMenu.sh | 4 +- home.admin/config.scripts/bonus.joinmarket.sh | 164 ++++++++---------- 2 files changed, 74 insertions(+), 94 deletions(-) diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index c961a173a..e7d9c850e 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -120,7 +120,7 @@ if [ "${specter}" == "on" ]; then OPTIONS+=(SPECTER "Specter Desktop") fi if [ "${joinmarket}" == "on" ]; then - OPTIONS+=(JMARKET "JoinMarket") + OPTIONS+=(JM "JoinMarket with JoininBox") fi if [ "${faraday}" == "on" ]; then OPTIONS+=(FARADAY "Faraday Channel Management") @@ -269,7 +269,7 @@ case $CHOICE in SPECTER) /home/admin/config.scripts/bonus.specter.sh menu ;; - JMARKET) + JM) sudo /home/admin/config.scripts/bonus.joinmarket.sh menu ;; FARADAY) diff --git a/home.admin/config.scripts/bonus.joinmarket.sh b/home.admin/config.scripts/bonus.joinmarket.sh index f4b39c6c7..8426cec86 100755 --- a/home.admin/config.scripts/bonus.joinmarket.sh +++ b/home.admin/config.scripts/bonus.joinmarket.sh @@ -5,14 +5,16 @@ # https://github.com/openoms/bitcoin-tutorials/tree/master/joinmarket # https://github.com/openoms/joininbox -JMVERSION="v0.9.1" JBVERSION="v0.6.0" +PGPsigner="openoms" +PGPpkeys="https://keybase.io/oms/pgp_keys.asc" +PGPcheck="13C688DB5B9C745DE4D2E4545BFB77609B081B65" # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo "JoinMarket install script to switch JoinMarket on or off" echo "sudo /home/admin/config.scrips/bonus.joinmarket.sh on|off" - echo "Installs JoinMarket $JMVERSION with JoininBox $JBVERSION" + echo "Installs JoininBox $JBVERSION" exit 1 fi @@ -33,12 +35,10 @@ fi if [ "$1" = "menu" ]; then whiptail --title " JoinMarket info " --msgbox " Type: 'jm' in the command line to switch to the dedicated user -and start the JoininBox menu. Notes on usage: +and start the JoininBox menu. +Notes on usage: https://github.com/openoms/bitcoin-tutorials/blob/master/joinmarket/README.md - -You can log in directly with the 'joinmarket' user via ssh. -The user password is the PASSWORD_B. -" 13 81 +" 11 81 exit 0 fi @@ -96,49 +96,52 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then echo "# specified to use wallet.dat in the recovered joinmarket.cfg" fi - # install joinmarket - cd /home/joinmarket - # PySide2 for armf: https://packages.debian.org/buster/python3-pyside2.qtcore - echo "# installing ARM specific dependencies to run the QT GUI" - sudo apt install -y python3-pyside2.qtcore python3-pyside2.qtgui \ - python3-pyside2.qtwidgets zlib1g-dev libjpeg-dev python3-pyqt5 libltdl-dev - # https://github.com/JoinMarket-Org/joinmarket-clientserver/issues/668#issuecomment-717815719 - sudo apt install -y build-essential automake pkg-config libffi-dev python3-dev libgmp-dev - sudo -u joinmarket pip install libtool asn1crypto cffi pycparser coincurve - echo "# installing JoinMarket" - sudo -u joinmarket git clone https://github.com/Joinmarket-Org/joinmarket-clientserver - cd joinmarket-clientserver || exit 1 - sudo -u joinmarket git reset --hard $JMVERSION - # make install.sh set up jmvenv with -- system-site-packages - # and import the PySide2 armf package from the system - sudo -u joinmarket sed -i \ - "s#^ virtualenv -p \"\${python}\" \"\${jm_source}/jmvenv\" || return 1#\ - virtualenv --system-site-packages -p \"\${python}\" \"\${jm_source}/jmvenv\" || return 1 ;\ - /home/joinmarket/joinmarket-clientserver/jmvenv/bin/python -c \'import PySide2\'\ - #g" install.sh - # do not stop at installing debian dependencies - sudo -u joinmarket sed -i \ - "s#^ if ! sudo apt-get install \${deb_deps\[@\]}; then#\ - if ! sudo apt-get install -y \${deb_deps\[@\]}; then#g" install.sh - # don't install PySide2 - using the system-site-package instead - sudo -u joinmarket sed -i "s#^PySide2.*##g" requirements/gui.txt - # don't install PyQt5 - using the system package instead - sudo -u joinmarket sed -i "s#^PyQt5.*##g" requirements/gui.txt - sudo -u joinmarket ./install.sh --with-qt - echo - echo "# installed JoinMarket $JMVERSION" - echo - echo "# adding the joininbox menu" + echo "# adding JoininBox" sudo rm -rf /home/joinmarket/joininbox sudo -u joinmarket git clone https://github.com/openoms/joininbox.git /home/joinmarket/joininbox # check the latest at: cd /home/joinmarket/joininbox || exit 1 # https://github.com/openoms/joininbox/releases/ sudo -u joinmarket git reset --hard $JBVERSION + + sudo -u joinmarket wget -O "pgp_keys.asc" ${PGPpkeys} + gpg --import --import-options show-only ./pgp_keys.asc + fingerprint=$(gpg "pgp_keys.asc" 2>/dev/null | grep "${PGPcheck}" -c) + if [ ${fingerprint} -lt 1 ]; then + echo + echo "# !!! WARNING --> the PGP fingerprint is not as expected for ${PGPsigner}" + echo "# Should contain PGP: ${PGPcheck}" + echo "# PRESS ENTER to TAKE THE RISK if you think all is OK" + read key + fi + gpg --import ./pgp_keys.asc + + verifyResult=$(git verify-commit $JBVERSION 2>&1) + + goodSignature=$(echo ${verifyResult} | grep 'Good signature' -c) + echo "# goodSignature(${goodSignature})" + correctKey=$(echo ${verifyResult} | tr -d " \t\n\r" | grep "${PGPcheck}" -c) + echo "# correctKey(${correctKey})" + if [ ${correctKey} -lt 1 ] || [ ${goodSignature} -lt 1 ]; then + echo + echo "# !!! BUILD FAILED --> PGP verification not OK / signature(${goodSignature}) verify(${correctKey})" + exit 1 + else + echo + echo "########################################################################" + echo "# OK --> the PGP signature of the checked out $JBVERSION commit is correct #" + echo "########################################################################" + echo + fi + + # copy the scripts in place sudo -u joinmarket cp /home/joinmarket/joininbox/scripts/* /home/joinmarket/ sudo -u joinmarket cp /home/joinmarket/joininbox/scripts/.* /home/joinmarket/ 2>/dev/null sudo chmod +x /home/joinmarket/*.sh + echo "# Set ssh access off with the joinmarket user" + sudo /home/joinmarket/set.ssh.sh off + # Tor config # add the joinmarket user to the Tor group usermod -a -G debian-tor joinmarket @@ -163,18 +166,29 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then if grep -Eq "^runBehindTor=on" /mnt/hdd/raspiblitz.conf; then sudo -u joinmarket sed -i "s/^runBehindTor=.*/runBehindTor=on/g" /home/joinmarket/joinin.conf fi - - echo "# setting the autostart script for joinmarket" + echo + echo "##########" + echo "# Extras #" + echo "##########" + echo + # install a command-line fuzzy finder (https://github.com/junegunn/fzf) + apt -y install fzf + bash -c "echo 'source /usr/share/doc/fzf/examples/key-bindings.bash' >> \ + /home/joinmarket/.bashrc" + + # install tmux + apt -y install tmux + + echo + echo "#############" + echo "# Autostart #" + echo "#############" echo " -# automatically start startup.sh for joinmarket unless -# when running in a tmux session -if [ -z \"\$TMUX\" ]; then - /home/joinmarket/startup.sh +if [ -f \"/home/joinmarket/joinmarket-clientserver/jmvenv/bin/activate\" ]; then + . /home/joinmarket/joinmarket-clientserver/jmvenv/bin/activate + /home/joinmarket/joinmarket-clientserver/jmvenv/bin/python -c \"import PySide2\" + cd /home/joinmarket/joinmarket-clientserver/scripts/ fi -# always activate jmvenv with PySide2 and cd to scripts' -. /home/joinmarket/joinmarket-clientserver/jmvenv/bin/activate -/home/joinmarket/joinmarket-clientserver/jmvenv/bin/python -c \"import PySide2\" -cd /home/joinmarket/joinmarket-clientserver/scripts/ # shortcut commands source /home/joinmarket/_commands.sh # automatically start main menu for joinmarket unless @@ -182,47 +196,13 @@ source /home/joinmarket/_commands.sh if [ -z \"\$TMUX\" ]; then /home/joinmarket/menu.sh fi -" | sudo -u joinmarket tee -a /home/joinmarket/.bashrc +" | sudo -u joinmarket tee -a /home/joinmarket/.bashrc + + echo "######################" + echo "# Install JoinMarket #" + echo "######################" + sudo -u joinmarket /home/joinmarket/install.joinmarket.sh install - cat > /home/admin/startup.sh < Date: Fri, 1 Oct 2021 23:17:36 +0200 Subject: [PATCH 1238/1295] make recovery --- home.admin/_bootstrap.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 75801e426..1c7f23d26 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -606,6 +606,8 @@ if [ ${isMounted} -eq 0 ]; then if [ "${migrationFile}" != "" ]; then 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} + setupPhase="recovery" fi ################################### @@ -638,7 +640,7 @@ if [ ${isMounted} -eq 0 ]; then fi fi - # if migration - run the migration provision first + # if migration from other nodes - run the migration provision first if [ "${setupPhase}" == "migration" ]; then echo "Calling _provision.migration.sh for possible migrations .." >> $logFile sed -i "s/^message=.*/message='Provision migration'/g" ${infoFile} From a7efe6cebc76668ea7882a9f830421924bf53f15 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 2 Oct 2021 01:32:14 +0200 Subject: [PATCH 1239/1295] patch raspiblitz state --- home.admin/00raspiblitz.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 1df795b82..0f287d6ca 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -129,6 +129,11 @@ do # load statusscan results source /var/cache/raspiblitz/raspiblitz.status + # detect wallet locked + if [ "${walletLocked}" == "1" ] || [ "${CLwalletLocked}" == "1" ]; then + state="walletlocked" + fi + ##################################### # ALWAYS: Handle System States ##################################### From cb1870cb7aa278945f15316c254e80f241614311 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 2 Oct 2021 01:41:51 +0200 Subject: [PATCH 1240/1295] add debug --- home.admin/00raspiblitz.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 0f287d6ca..70c1eccd6 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -104,14 +104,17 @@ do #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 + echo "cp" else # statusscan blocked and was killed - fallback to old results echo "statusscan blocked (${result}) - fallback to old results" From 7d23d2e2936d6d7b09bd44c7ee4a7a20643e333f Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 2 Oct 2021 01:46:15 +0200 Subject: [PATCH 1241/1295] fix unlock --- home.admin/00raspiblitz.sh | 5 ----- 1 file changed, 5 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 70c1eccd6..4d446a059 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -132,11 +132,6 @@ do # load statusscan results source /var/cache/raspiblitz/raspiblitz.status - # detect wallet locked - if [ "${walletLocked}" == "1" ] || [ "${CLwalletLocked}" == "1" ]; then - state="walletlocked" - fi - ##################################### # ALWAYS: Handle System States ##################################### From 5632ff668f409fbf87d0462f4dfd15839664ae65 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 2 Oct 2021 01:48:13 +0200 Subject: [PATCH 1242/1295] remove debug output --- home.admin/00raspiblitz.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 4d446a059..52a0d170c 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -104,17 +104,16 @@ do #echo "# blitz.statusscan.sh" firstStatusScanExists=$(ls /var/cache/raspiblitz/raspiblitz.status | grep -c "raspiblitz.status") - echo "firstStatusScanExists(${firstStatusScanExists})" + #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})" + #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 - echo "cp" else # statusscan blocked and was killed - fallback to old results echo "statusscan blocked (${result}) - fallback to old results" From 4c594ac9fabd6947320631d7477c2828b22e1933 Mon Sep 17 00:00:00 2001 From: openoms Date: Sat, 2 Oct 2021 14:14:04 +0100 Subject: [PATCH 1243/1295] fix spark choice in settings --- home.admin/00settingsMenuServices.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/00settingsMenuServices.sh b/home.admin/00settingsMenuServices.sh index 5d490d31e..b00855705 100755 --- a/home.admin/00settingsMenuServices.sh +++ b/home.admin/00settingsMenuServices.sh @@ -59,7 +59,7 @@ fi if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then OPTIONS+=(c 'C-Lightning RTL Webinterface' ${crtlWebinterface}) OPTIONS+=(k 'C-Lightning Sparko WebWallet' ${sparko}) - OPTIONS+=(m 'C-Lightning Spark Wallet' ${spark}) + OPTIONS+=(n 'C-Lightning Spark Wallet' ${spark}) fi CHOICES=$(dialog --title ' Additional Mainnet Services ' \ @@ -499,7 +499,7 @@ else fi # spark wallet process choice -choice="off"; check=$(echo "${CHOICES}" | grep -c "m") +choice="off"; check=$(echo "${CHOICES}" | grep -c "n") if [ ${check} -eq 1 ]; then choice="on"; fi if [ "${spark}" != "${choice}" ]; then echo "# Spark Wallet on mainnet Setting changed .." From 8585bd77cd03a5b911f8e9da006a959105a33442 Mon Sep 17 00:00:00 2001 From: openoms Date: Sat, 2 Oct 2021 16:23:20 +0100 Subject: [PATCH 1244/1295] joininbox update to v0.6.1 with joinmarket v0.9.2 --- home.admin/config.scripts/bonus.joinmarket.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/bonus.joinmarket.sh b/home.admin/config.scripts/bonus.joinmarket.sh index 8426cec86..a120995b6 100755 --- a/home.admin/config.scripts/bonus.joinmarket.sh +++ b/home.admin/config.scripts/bonus.joinmarket.sh @@ -5,7 +5,7 @@ # https://github.com/openoms/bitcoin-tutorials/tree/master/joinmarket # https://github.com/openoms/joininbox -JBVERSION="v0.6.0" +JBVERSION="v0.6.1" # with JoinMarket v0.9.2 PGPsigner="openoms" PGPpkeys="https://keybase.io/oms/pgp_keys.asc" PGPcheck="13C688DB5B9C745DE4D2E4545BFB77609B081B65" From cc8c0e2b503993044a7e636e9f59bc038ece1720 Mon Sep 17 00:00:00 2001 From: openoms Date: Sat, 2 Oct 2021 16:23:46 +0100 Subject: [PATCH 1245/1295] update CHANGES --- CHANGES.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index cb6aa0294..16e86a6dd 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -15,9 +15,9 @@ - Update: Bitcoin Core v22.0 [details](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-22.0.md) - Update: LND v0.13.1 [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.13.1-beta) - Update: Specter Desktop 1.6.0 [details](https://github.com/cryptoadvance/specter-desktop/blob/master/README.md) -- Update: JoinMarket v0.9.1 [details](https://github.com/JoinMarket-Org/joinmarket-clientserver/#joinmarket-clientserver) -- Update: JoininBox v0.6.0 [details](https://github.com/openoms/joininbox/tree/master#joininbox) -- Update: Electrum Server in Rust (electrs) v0.8.12 [details](https://github.com/romanz/electrs/blob/v0.8.12/RELEASE-NOTES.md) +- Update: JoinMarket v0.9.2 [details](https://github.com/JoinMarket-Org/joinmarket-clientserver/releases/tag/v0.9.2) +- Update: JoininBox v0.6.1 [details](https://github.com/openoms/joininbox/releases/tag/v0.6.1) +- Update: Electrum Server in Rust (electrs) v0.9.0 [details](https://github.com/romanz/electrs/blob/v0.9.0/RELEASE-NOTES.md) - Update: Mempool 2.2.2 [details](https://github.com/mempool/mempool) - Update: BTC-RPC-Explorer v3.2.0 [details](https://github.com/janoside/btc-rpc-explorer/blob/master/CHANGELOG.md#v320) - Update: stacking-sats-kraken 0.4.4 [details](https://github.com/dennisreimann/stacking-sats-kraken/blob/master/README.md) From 8b30b03dbb7d1e64c6c346e633d0d5bca1635948 Mon Sep 17 00:00:00 2001 From: fusion44 Date: Sun, 3 Oct 2021 12:21:19 +0200 Subject: [PATCH 1246/1295] Update BlitzAPI startup command (#2589) --- home.admin/config.scripts/blitz.web.api.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.web.api.sh b/home.admin/config.scripts/blitz.web.api.sh index e5c6f99ae..c31577dfb 100755 --- a/home.admin/config.scripts/blitz.web.api.sh +++ b/home.admin/config.scripts/blitz.web.api.sh @@ -64,7 +64,7 @@ After=network.target WorkingDirectory=/home/admin/blitz_api # before every start update the config with latest credentials/settings ExecStartPre=-/home/admin/config.scripts/blitz.web.api.sh update-config -ExecStart=sudo -u admin /usr/bin/python -m uvicorn main:app --reload --port 11111 --host=0.0.0.0 --root-path /api +ExecStart=sudo -u admin /usr/bin/python -m uvicorn app.main:app --port 11111 --host=0.0.0.0 --root-path /api User=root Group=root Type=simple From 06aa9902a57f301eadb31c45c2517b9005bdb416 Mon Sep 17 00:00:00 2001 From: MichaIng Date: Sun, 3 Oct 2021 12:24:27 +0200 Subject: [PATCH 1247/1295] Update Odroid_HC1_XU4.md (#2590) --- .../dietpi/Odroid_HC1_XU4.md | 63 +++---------------- 1 file changed, 10 insertions(+), 53 deletions(-) diff --git a/alternative.platforms/dietpi/Odroid_HC1_XU4.md b/alternative.platforms/dietpi/Odroid_HC1_XU4.md index dea739f7d..b2b87faa2 100644 --- a/alternative.platforms/dietpi/Odroid_HC1_XU4.md +++ b/alternative.platforms/dietpi/Odroid_HC1_XU4.md @@ -1,13 +1,13 @@ # ⚡️ RaspiBlitz-on-DietPi ⚡️ -# For the Odroid HC1 / HC2 / XU3 / XU4 +# For the Odroid HC1 / HC2 / XU3 / XU4 / MC1 ![](pictures/DroidBlitz.jpg) ## There are 3 options provided: * a trusted fully prebuilt SDcard image * Automated building process. -* Build your own SDcard from the image downloaded from [Dietpi.com](dietpi.com#download) +* Build your own SDcard from the image downloaded from [dietpi.com](https://dietpi.com/#download) --- ### Download the fully prebuilt RaspiBlitz-on-DietPi SDcard image @@ -30,15 +30,15 @@ The setup continues with the [RaspiBlitz Setup Process](https://github.com/rootz --- ### The automated building process: -1) Download the DietPi image for the Odroid HC1 / HC2 / XU3 / XU4: -https://dietpi.com/downloads/images/DietPi_OdroidXU4-ARMv7-Stretch.7z +1) Download the DietPi image for the Odroid HC1 / HC2 / XU3 / XU4 / MC1: +https://dietpi.com/downloads/images/DietPi_OdroidXU4-ARMv7-Buster.7z 2) Burn it to the SD card with [Etcher](https://www.balena.io/etcher/) -3) Right click and download the following two files: [DietPi.txt](https://raw.githubusercontent.com/rootzoll/raspiblitz/master/alternative.platforms/dietpi/boot/dietpi.txt), [Automation_Custom_Script.sh](https://raw.githubusercontent.com/rootzoll/raspiblitz/dev/alternative.platforms/dietpi/boot/Automation_Custom_Script.sh) +3) Right click and download the following two files: [dietpi.txt](https://raw.githubusercontent.com/rootzoll/raspiblitz/master/alternative.platforms/dietpi/boot/dietpi.txt), [Automation_Custom_Script.sh](https://raw.githubusercontent.com/rootzoll/raspiblitz/dev/alternative.platforms/dietpi/boot/Automation_Custom_Script.sh) 4) Copy them to the /boot directory of the DietPi SDcard - [DietPi.txt](https://raw.githubusercontent.com/rootzoll/raspiblitz/master/alternative.platforms/dietpi/boot/dietpi.txt): Overwrites the default dietpi.txt. Modified the settings to automate the DietPi setup. (see the details [here](https://github.com/rootzoll/raspiblitz/tree/dev/alternative.platforms/dietpi#excerpts-from-the-customized-dietpitxt)) + [dietpi.txt](https://raw.githubusercontent.com/rootzoll/raspiblitz/master/alternative.platforms/dietpi/boot/dietpi.txt): Overwrites the default dietpi.txt. Modified the settings to automate the DietPi setup. (see the details [here](https://github.com/rootzoll/raspiblitz/tree/dev/alternative.platforms/dietpi#excerpts-from-the-customized-dietpitxt)) [Automation_Custom_Script.sh](https://raw.githubusercontent.com/rootzoll/raspiblitz/dev/alternative.platforms/dietpi/boot/Automation_Custom_Script.sh): Runs after DietPi installation is completed. Contains the link to download and run the build_sdcard.sh from the dev branch of @rootzoll. (Optionally open the file with a text editor and uncomment (remove the `#` from the front of) the line with the branch you want to build the SDcard from.) @@ -53,14 +53,6 @@ https://dietpi.com/downloads/images/DietPi_OdroidXU4-ARMv7-Stretch.7z `tail -n1000 -f /tmp/DietPi-Update/dietpi-update.log` - follow the dietpi-update process `tail -n1000 -f /var/tmp/dietpi/logs/dietpi-automation_custom_script.log` follow the output of the build_sdcard.sh - Starting from a v6.14 DietPi image is causing a bootloop after the first restart. See the issue: https://github.com/MichaIng/DietPi/issues/2495. This will be sorted out once a new image version is uploaded for the Odroids to dietpi.com. - To get past it: - * Log in with root after the first restart (when the loop is ongoing - without any output to the HDMI screen) - * CTRL+C, run `dietpi-update` and update - * `reboot` once finished - * from then the Automation_Custom_Script.sh is carrying on - - 6) When the setup is finished log in as `admin`: `ssh admin@[IP-OF-RASPIBLITZ]` password: `raspiblitz` @@ -71,12 +63,8 @@ password: `raspiblitz` ### Build your own DietPi image: -Watch out this is an arduous process. -Updating from a v6.14 DietPi image is causing a bootloop after the first restart. See the issue: https://github.com/MichaIng/DietPi/issues/2495. -This will be sorted out once a new image version is uploaded for the Odroids to dietpi.com - -* For the Odroid HC1 / HC2 / XU3 / XU4 the start is this image: -https://dietpi.com/downloads/images/DietPi_OdroidXU4-ARMv7-Stretch.7z +* For the Odroid HC1 / HC2 / XU3 / XU4 / MC1 the start is this image: +https://dietpi.com/downloads/images/DietPi_OdroidXU4-ARMv7-Buster.7z * Burn it to the SD with [Etcher](https://www.balena.io/etcher/) * Insert the SD card, connect the HDD, the network cable and power supply to boot up the Odroid: @@ -84,50 +72,19 @@ https://dietpi.com/downloads/images/DietPi_OdroidXU4-ARMv7-Stretch.7z * In the desktop terminal on Linux / MacOS or Putty on Windows: `ssh root@[IP-OF-DIETPI]` password: `dietpi` -Getting started with DietPi: https://dietpi.com/phpbb/viewtopic.php?f=8&t=9#p9 +Getting started with DietPi: https://dietpi.com/docs/install/#4-first-logon-on-dietpi -* Ok > Cancel > Cancel -automatic apt update & apt upgrade and asks to reboot -![](pictures/dietpi_1st_reboot.png) - -* Log back in: -`ssh root@[IP-OF-DIETPI]` -password: `dietpi` -* after the update the ssh keys might change: -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -run (can be copied from the terminal output): -`ssh-keygen -f "/home/[your-linux-username]/.ssh/known_hosts" -R "dietpi.IP"` -`ssh root@[IP-OF-DIETPI]` -yes > -password: `dietpi` - -* At this point if the DietPi OS was not updated from 6.14 it does not manage to save settings going forward. -Exit the software installer (press Tab to jump to Exit) -![](pictures/dietpi-software_exit.png) - -* in the bash prompt run: -`dietpi-update` -Ok > Cancel the recovery point -update > Opt out of survey > Ok -Reboots - -* Log back in: -`ssh root@[IP-OF-DIETPI]` -password: `dietpi` * In the DietPi software menu install fail2ban and make OpenSSH server the default SSH server. Ok > Cancel > Cancel Search `fail2ban` > Space to select > Enter SSH server > switch from Dropbear to the OpenSSH-server Install > Ok -Opt out of survey > Ok Reboots again * Log back in: `ssh root@[IP-OF-DIETPI]` password: `dietpi` -Changing the SSH server will change the SSH keys again. To clear: +Changing the SSH server will change the SSH keys. To clear: `ssh-keygen -f "/home/[your-linux-username]/.ssh/known_hosts" -R "dietpi.IP"` From 0d007936575d64813bf77e8020823d0ea6e26dfe Mon Sep 17 00:00:00 2001 From: sgmoore Date: Sun, 3 Oct 2021 03:27:09 -0700 Subject: [PATCH 1248/1295] Update README.md - fix three typos (#2591) --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9dd0dbee6..de7a14ed2 100644 --- a/README.md +++ b/README.md @@ -113,11 +113,10 @@ In the end your RaspiBlitz should look like this: |Philosophy|Trust|Sovereignty| |Difficulty level|Easy|Medium| |Pros|Make Blitz accessible to everyone|You don't need to trust us, build from your own forked repository| -|Cons|You have to trust the mantainer image binaries|You need to read the build_sdcard.sh parameters in order for the customization to suit your needs| |Instructions|[Download 1.7.1RC2 image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.1rc2-2021-09-23.img.gz) and [Flash the sd card](README.md#write-the-sd-card-image-to-your-sd-card)|[Build your own sd card image](#build-the-sd-card-image)| |Verify what?|[Signature file - only for final release]() and [verify the Sig](FAQ.md#how-to-verify-the-sd-card-image-after-download) OR SHA-256 (below)|All of the code, don't trust, verify| -If downloading the mantainer sd card image: +If downloading the maintainer sd card image: * GPG 64-bit: 1C73 060C 7C17 6461 * SHA-256: 4c857203c927951248a15b71d3c3a64e34b033f7c55674ab8dacdcab7e38f778 @@ -125,7 +124,7 @@ Which verification method should I used: Hash or Signature? * Signed file prove to you that the SD card image was actually built by the lead developer of the RaspiBlitz project. (Safest) * Hash function checks file integrity. (Secure) -The mantainer sd card image can also be downloaded via torrent: +The maintainer sd card image can also be downloaded via torrent: * [assets/raspiblitz-vXXX.img.gz.torrent](https://github.com/rootzoll/raspiblitz/raw/v1.7/home.admin/assets/raspiblitz-XXX.img.gz.torrent) Useful info: From 8dbef6d1cd8727d8f37a2bf7c76e5530487ce8e4 Mon Sep 17 00:00:00 2001 From: sgmoore Date: Sun, 3 Oct 2021 03:28:47 -0700 Subject: [PATCH 1249/1295] Update README.md - fix three typos (#2592) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index de7a14ed2..ecd509693 100644 --- a/README.md +++ b/README.md @@ -519,7 +519,7 @@ Keysend is a feature of LND that allows your node to accept payments without hav ##### LND Circuitbreaker (Firewall for LND) -Not everybody is acting friendly in the Lightning network. Circuitbreaker is a background service you cann activate that acts similar to a firewall to protect your now better. For details see: https://github.com/lightningequipment/circuitbreaker/blob/master/README.md +Not everybody is acting friendly in the Lightning network. Circuitbreaker is a background service you can activate that acts similar to a firewall to protect your now better. For details see: https://github.com/lightningequipment/circuitbreaker/blob/master/README.md ##### LND Auto-Unlock From b891b5d74c0eda820d8cea8807f53eaac8d2c4d2 Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Sun, 3 Oct 2021 12:53:25 +0100 Subject: [PATCH 1250/1295] internet.tor.sh: fix btc-rpc-explorer ports --- home.admin/config.scripts/internet.tor.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/internet.tor.sh b/home.admin/config.scripts/internet.tor.sh index cf22368e6..76fe67241 100755 --- a/home.admin/config.scripts/internet.tor.sh +++ b/home.admin/config.scripts/internet.tor.sh @@ -246,7 +246,7 @@ EOF # ACTIVATE APPS OVER TOR source /mnt/hdd/raspiblitz.conf 2>/dev/null if [ "${BTCRPCexplorer}" = "on" ]; then - /home/admin/config.scripts/internet.hiddenservice.sh btc-rpc-explorer 80 3002 + /home/admin/config.scripts/internet.hiddenservice.sh btc-rpc-explorer 80 3022 443 3023 fi if [ "${rtlWebinterface}" = "on" ]; then /home/admin/config.scripts/internet.hiddenservice.sh RTL 80 3002 443 3003 From ad1dbc673a88b9687cda927b28414ca4255d63b1 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 4 Oct 2021 09:53:17 +0200 Subject: [PATCH 1251/1295] #2588 double enforce setup reboot --- home.admin/_bootstrap.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 1c7f23d26..65b9b83b3 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -760,8 +760,11 @@ if [ ${isMounted} -eq 0 ]; then # AFTER SETUP REBOOT # touchscreen activation, start with configured SWAP, fix LCD text bug sudo cp /home/admin/raspiblitz.log /home/admin/raspiblitz.setup.log - /home/admin/config.scripts/blitz.shutdown.sh reboot finalsetup - sleep 100 + timeout 60 /home/admin/config.scripts/blitz.shutdown.sh reboot finalsetup + sleep 10 + # if system has not rebooted yet - force reboot directly + sudo shutdown -r now + sleep 60 exit 0 else From 1803319cbaaa1560e319fbc522f8d674a58bddda Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 4 Oct 2021 09:56:16 +0200 Subject: [PATCH 1252/1295] #2588 updated time estimate for COPY --- home.admin/setup.scripts/controlFinalDialog.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/setup.scripts/controlFinalDialog.sh b/home.admin/setup.scripts/controlFinalDialog.sh index 9be6640e9..30cea3b53 100755 --- a/home.admin/setup.scripts/controlFinalDialog.sh +++ b/home.admin/setup.scripts/controlFinalDialog.sh @@ -40,8 +40,8 @@ if [ "${syncProgressFull}" != "" ] && [ "${network}" == "bitcoin" ] && [ ${syncP # offer choice to copy blockchain over LAN OPTIONS=() OPTIONS+=(SELFSYNC "Run full self sync/validation (takes long)") - OPTIONS+=(COPY "Copy from Computer/RaspiBlitz over LAN (±6h)") - CHOICESUB=$(dialog --backtitle "RaspiBlitz" --clear --title " Blockchain Sync/Validation " --menu "\nYour Blockchain sync is just at ${syncProgress}%\nThe full validation might take multiple days to finish.\n\nHow do you want to proceed:" 13 63 7 "${OPTIONS[@]}" 2>&1 >/dev/tty) + OPTIONS+=(COPY "Copy from Computer/RaspiBlitz over LAN (3-10h)") + CHOICESUB=$(dialog --backtitle "RaspiBlitz" --clear --title " Blockchain Sync/Validation " --menu "\nYour Blockchain sync is just at ${syncProgress}%\nThe full validation might take multiple days to finish.\n\nHow do you want to proceed:" 13 66 7 "${OPTIONS[@]}" 2>&1 >/dev/tty) if [ "${CHOICESUB}" == "COPY" ]; then /home/admin/config.scripts/blitz.copychain.sh target From c3314378536e10672b15fec688f3b47423eac068 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 4 Oct 2021 09:57:57 +0200 Subject: [PATCH 1253/1295] #2588 updated shutdown info --- home.admin/config.scripts/blitz.shutdown.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/blitz.shutdown.sh b/home.admin/config.scripts/blitz.shutdown.sh index 2109de952..253b7b9db 100755 --- a/home.admin/config.scripts/blitz.shutdown.sh +++ b/home.admin/config.scripts/blitz.shutdown.sh @@ -17,7 +17,7 @@ fi # display info echo "" -echo "LCD turns white when shutdown complete." +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." From 81eedc635b003b0d474541bfc08c18dbaff56278 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 4 Oct 2021 19:32:25 +0200 Subject: [PATCH 1254/1295] #2597 update lnd to 0.13.3 --- CHANGES.md | 2 +- README.md | 2 +- build_sdcard.sh | 2 +- home.admin/_version.info | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 16e86a6dd..998240600 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -13,7 +13,7 @@ - New: Allow SphinxApp to connect over Tor - New: Parallel TESTNET & SIGNET services - Update: Bitcoin Core v22.0 [details](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-22.0.md) -- Update: LND v0.13.1 [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.13.1-beta) +- Update: LND v0.13.3 [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.13.3-beta) - Update: Specter Desktop 1.6.0 [details](https://github.com/cryptoadvance/specter-desktop/blob/master/README.md) - Update: JoinMarket v0.9.2 [details](https://github.com/JoinMarket-Org/joinmarket-clientserver/releases/tag/v0.9.2) - Update: JoininBox v0.6.1 [details](https://github.com/openoms/joininbox/releases/tag/v0.6.1) diff --git a/README.md b/README.md index ecd509693..916dd61af 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ *Build your own Lightning & Bitcoin Fullnode on a RaspberryPi with a nice Display.* -`Version 1.7.1rc2 with lnd 0.13.1 & c-lightning 0.10.0 and bitcoin 22.0.0` +`Version 1.7.1rc2 with lnd 0.13.3 & c-lightning 0.10.0 and bitcoin 22.0.0` ![RaspiBlitz](pictures/raspiblitz.jpg) diff --git a/build_sdcard.sh b/build_sdcard.sh index 75061797a..93ccb311b 100755 --- a/build_sdcard.sh +++ b/build_sdcard.sh @@ -947,7 +947,7 @@ echo "*** PREPARING LIGHTNING ***" ## based on https://stadicus.github.io/RaspiBolt/raspibolt_40_lnd.html#lightning-lnd ## see LND releases: https://github.com/lightningnetwork/lnd/releases ## !!!! If you change here - make sure to also change interims version in lnd.update.sh !!! -lndVersion="0.13.1-beta" +lndVersion="0.13.3-beta" # olaoluwa PGPauthor="roasbeef" diff --git a/home.admin/_version.info b/home.admin/_version.info index 28eab0a76..a1776e507 100644 --- a/home.admin/_version.info +++ b/home.admin/_version.info @@ -1,2 +1,2 @@ # RaspiBlitz Version - always [major].[main].[sub] (sub can be a string like '2rc1') -codeVersion="1.7.1rc2" +codeVersion="1.7.1rc3" From 5dcdb062753de722c3b2c9cfc1daaf947e95621b Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 4 Oct 2021 21:33:59 +0200 Subject: [PATCH 1255/1295] mute errors --- home.admin/config.scripts/lnd.backup.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/home.admin/config.scripts/lnd.backup.sh b/home.admin/config.scripts/lnd.backup.sh index 43c773f06..ccde0844a 100755 --- a/home.admin/config.scripts/lnd.backup.sh +++ b/home.admin/config.scripts/lnd.backup.sh @@ -37,20 +37,20 @@ if [ ${mode} = "lnd-export" ]; then downloadPath="/home/admin" fileowner="admin" - # stop LND - echo "# Stopping lnd..." - sudo systemctl stop lnd - sleep 5 - echo "# OK" - echo - # add lnd version info into lnd dir (to detect needed updates later) - lndVersion=$(sudo -u bitcoin lncli getinfo | jq -r ".version" | cut -d ' ' -f1) + lndVersion=$(sudo -u bitcoin lncli getinfo 2>/dev/null | jq -r ".version" | cut -d ' ' -f1) sudo rm /mnt/hdd/lnd/version.info 2>/dev/null echo "${lndVersion}" > /home/admin/lnd.version.info sudo mv /home/admin/lnd.version.info /mnt/hdd/lnd/version.info sudo chown bitcoin:bitcoin /mnt/hdd/lnd/version.info + # stop LND + echo "# Stopping lnd..." + sudo systemctl stop lnd 2>/dev/null + sleep 5 + echo "# OK" + echo + # zip it sudo tar -zcvf ${downloadPath}/lnd-rescue.tar.gz /mnt/hdd/lnd 1>&2 sudo chown ${fileowner}:${fileowner} ${downloadPath}/lnd-rescue.tar.gz 1>&2 From 872ea17956172cf5fa98125c7e980984f594f864 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 5 Oct 2021 09:14:46 +0200 Subject: [PATCH 1256/1295] update lightning dialog --- home.admin/setup.scripts/dialogBlockchainLightning.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/setup.scripts/dialogBlockchainLightning.sh b/home.admin/setup.scripts/dialogBlockchainLightning.sh index f952e9925..4f5ea7628 100644 --- a/home.admin/setup.scripts/dialogBlockchainLightning.sh +++ b/home.admin/setup.scripts/dialogBlockchainLightning.sh @@ -57,12 +57,12 @@ if [ "${network}" == "bitcoin" ]; then # choose lightning client OPTIONS=() OPTIONS+=(LND "LND - Lightning Network Daemon (DEFAULT)") - OPTIONS+=(CL "C-lightning by Blockstream (fewer apps)") + OPTIONS+=(CL "C-lightning by Blockstream (NEW)") OPTIONS+=(NONE "Run without Lightning") CHOICE=$(dialog --clear \ --backtitle "RaspiBlitz ${codeVersion} - Setup" \ --title "⚡ Lightning ⚡" \ - --menu "\nChoose your Lightning Client: \n " \ + --menu "\nChoose your Lightning Client to run on RaspiBlitz: \n " \ 12 64 6 \ "${OPTIONS[@]}" \ 2>&1 >/dev/tty) From af5e59795aa4b4626a7c4a92937db9d9a78d3bbc Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 5 Oct 2021 10:17:46 +0200 Subject: [PATCH 1257/1295] update lightning choose dialog --- README.md | 2 +- pictures/ssh1-layer2.png | Bin 19692 -> 20947 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 916dd61af..108a63051 100644 --- a/README.md +++ b/README.md @@ -233,7 +233,7 @@ First thing to setup is giving your RaspiBlitz a name: This name is given to the RaspiBlitz as a public alias of the lightning node for everybody to see. -Then you can choose which Lightning implementation you want to run on top of your Bitcoin Fullnode. RaspiBlitz started with `LND` from Lightning Labs which is used by most other RaspberryPi lightning nodes and works with most additional apps. But you can now also choose `CL` for c-lightning by Blockstream which is a good choice for already more experienced node operators & lightning developers that want to use the highly customizable plug-in structure that c-lightning offers. +Then you can choose which Lightning implementation you want to run on top of your Bitcoin Fullnode. RaspiBlitz started with `LND` from Lightning Labs which is used by most other RaspberryPi lightning nodes and works with most additional apps. But you can now also choose `CL` for c-lightning by Blockstream which is a good choice for already more experienced node operators & lightning developers that want to use the highly customizable plug-in structure that c-lightning offers. Its also possible to use both in parallel on your RaspiBlitz later on - just pick one to start with or choose `NONE` is your only interested in running a Fullnode without Lightning. diff --git a/pictures/ssh1-layer2.png b/pictures/ssh1-layer2.png index 7ff50c2d698331c0110c6f0b87251458e38ccc1d..9813729283cd1bfe4cffd77100495ec69980c0bc 100644 GIT binary patch literal 20947 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 Date: Tue, 5 Oct 2021 11:35:33 +0200 Subject: [PATCH 1258/1295] #2561 debug output --- home.admin/config.scripts/lnd.check.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.admin/config.scripts/lnd.check.sh b/home.admin/config.scripts/lnd.check.sh index 6f87207a9..f4c7fc152 100755 --- a/home.admin/config.scripts/lnd.check.sh +++ b/home.admin/config.scripts/lnd.check.sh @@ -24,6 +24,7 @@ function setting() # FILE LINENUMBER NAME VALUE NAME=$3 VALUE=$4 settingExists=$(cat ${FILE} | grep -c "^${NAME}=") + echo "# setting ${FILE} ${LINENUMBER} ${NAME} ${VALUE}" echo "# ${NAME} exists->(${settingExists})" if [ "${settingExists}" == "0" ]; then echo "# adding setting (${NAME})" @@ -114,6 +115,7 @@ if [ "$1" == "prestart" ]; then fi # SET/UPDATE zmqpubrawtx + echo "# zmqpubrawtx insert/update" setting ${lndConfFile} ${insertLine} "${network}d\.zmqpubrawtx" "tcp\:\/\/127\.0\.0\.1\:${zmqprefix}333" # SET/UPDATE zmqpubrawblock From cd41455a6d3c03d232a069a0d1fe2c729e8150be Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 5 Oct 2021 11:42:41 +0200 Subject: [PATCH 1259/1295] update thunderhub v0.12.30 --- CHANGES.md | 2 +- home.admin/config.scripts/bonus.thunderhub.sh | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 998240600..f546b483e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -25,7 +25,7 @@ - Update: Lightning Terminal v0.5.1-alpha [details](https://github.com/lightninglabs/lightning-terminal/releases/tag/v0.5.1-alpha) - Update: RTL 0.11.2 [details](https://github.com/Ride-The-Lightning/RTL/releases/tag/v0.11.2) - Update: Lightning Terminal v0.5.0-alpha [details](https://github.com/lightninglabs/lightning-terminal/releases/tag/v0.5.0-alpha) -- Update: Thunderhub v0.12.25 [details](https://github.com/apotdevin/thunderhub/releases/tag/v0.12.25) +- Update: Thunderhub v0.12.30 [details](https://github.com/apotdevin/thunderhub/releases/tag/v0.12.30) - Update: Pool CLI v0.5.1-alpha [details](https://github.com/lightninglabs/pool/releases/tag/v0.5.1-alpha) - Update: Balance of Satoshis 10.7.8 (BOS) + keep data on reinstall [details](https://github.com/alexbosworth/balanceofsatoshis/blob/master/CHANGELOG.md#version-8010) - Update: Channel Tools (chantools) v0.9.3 [details](https://github.com/guggero/chantools/blob/master/README.md) diff --git a/home.admin/config.scripts/bonus.thunderhub.sh b/home.admin/config.scripts/bonus.thunderhub.sh index 5b0552af0..63e163eb6 100755 --- a/home.admin/config.scripts/bonus.thunderhub.sh +++ b/home.admin/config.scripts/bonus.thunderhub.sh @@ -1,6 +1,7 @@ #!/bin/bash -THUBVERSION="v0.12.25" +# https://github.com/apotdevin/thunderhub +THUBVERSION="v0.12.30" # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then From 69d62a6929b9d69c2a4b16f0fa97c7c3b748f0a2 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 5 Oct 2021 12:27:52 +0200 Subject: [PATCH 1260/1295] #2600 move final rebot into controller --- home.admin/00raspiblitz.sh | 8 +-- home.admin/_bootstrap.sh | 64 ++---------------- .../setup.scripts/controlFinalDialog.sh | 56 ++++++++++++--- pictures/ssh4-done.png | Bin 19566 -> 20244 bytes 4 files changed, 56 insertions(+), 72 deletions(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 52a0d170c..3add5d80a 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -173,8 +173,8 @@ do # push to final setup gui dialogs #echo "# controlFinalDialog.sh" /home/admin/setup.scripts/controlFinalDialog.sh - # exit for final setup reboot - state="reboot" + # exit because controller will reboot at the end + exit 0 fi # exit loop/script in case if system shutting down @@ -185,14 +185,12 @@ do echo "RaspiBlitz going to ${state}" echo "***********************************************************" if [ "${state}" == "reboot" ]; then - if [ "${message}" == "finalsetup" ]; then - echo "This is the final setup reboot - you will get disconnected." - fi echo "SSH again into system with:" echo "ssh admin@${localip}" echo "Use your password A" echo "***********************************************************" fi + sleep 10 exit 0 fi diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 65b9b83b3..4b24a9a32 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -706,66 +706,16 @@ if [ ${isMounted} -eq 0 ]; then done ################################################### - # WAIT LOOP: AFTER FRESH SETUP, MIGRATION - # successfull update & recover can skip this + # HANDOVER TO FINAL SETUP CONTROLLER ################################################### - if [ "${setupPhase}" == "setup" ] || [ "${setupPhase}" == "migration" ]; then - echo "# Go into WAIT LOOP for final setup dialog ..." >> $logFile - sed -i "s/^state=.*/state=waitfinal/g" ${infoFile} - sed -i "s/^message=.*/message='Setup Done'/g" ${infoFile} - else - echo "# Skip WAIT LOOP boot directly into main menu ..." >> $logFile - sed -i "s/^state=.*/state=ready/g" ${infoFile} - sed -i "s/^message=.*/message='Setup Done'/g" ${infoFile} - fi + echo "# HANDOVER TO FINAL SETUP CONTROLLER ..." >> $logFile + sed -i "s/^state=.*/state=waitfinal/g" ${infoFile} + sed -i "s/^message=.*/message='Setup Done'/g" ${infoFile} - source ${infoFile} - echo "WAIT LOOP: FINAL SETUP .. see controlFinalDialog.sh network(${network})" >> $logFile - until [ "${state}" == "ready" ] - do - - # get latest network info & update raspiblitz.info (in case network changes) - source <(/home/admin/config.scripts/internet.sh status) - sed -i "s/^localip=.*/localip='${localip}'/g" ${infoFile} - - # give the loop a little bed time - sleep 4 - - # check info file for updated values - # especially the state for checking loop - source ${infoFile} - - done - echo "WAIT LOOP: DONE" >> $logFile - - ######################################## - # AFTER FINAL SETUP TASKS - - # make sure for future starts that blockchain service gets started after bootstrap - # so deamon reloas needed ... system will go into reboot after last loop - # needs to be after wait loop because otherwise the "restart" on COPY OVER LAN will not work - echo "# Updating service ${network}d.service ..." >> $logFile - sudo sed -i "s/^Wants=.*/Wants=bootstrap.service/g" /etc/systemd/system/${network}d.service - sudo sed -i "s/^After=.*/After=bootstrap.service/g" /etc/systemd/system/${network}d.service - sudo systemctl daemon-reload - - # delete setup data from RAM - sudo rm ${setupFile} - - # signal that setup phase is over - sed -i "s/^setupPhase=.*/setupPhase='done'/g" ${infoFile} - - ######################################## - # AFTER SETUP REBOOT - # touchscreen activation, start with configured SWAP, fix LCD text bug - sudo cp /home/admin/raspiblitz.log /home/admin/raspiblitz.setup.log - timeout 60 /home/admin/config.scripts/blitz.shutdown.sh reboot finalsetup - sleep 10 - # if system has not rebooted yet - force reboot directly - sudo shutdown -r now - sleep 60 - exit 0 + # 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 + exit 1 else diff --git a/home.admin/setup.scripts/controlFinalDialog.sh b/home.admin/setup.scripts/controlFinalDialog.sh index 30cea3b53..dc9e147c8 100755 --- a/home.admin/setup.scripts/controlFinalDialog.sh +++ b/home.admin/setup.scripts/controlFinalDialog.sh @@ -104,28 +104,64 @@ if [ "${setupPhase}" == "setup" ]; then clear whiptail --title " Setup Done " --msgbox "\ Your RaspiBlitz setup is done. Welcome new Node Operator! :D\n -There can be some waiting time until your blockchain is fully synced before you can enter the RaspiBlitz user menu.\n +After the final reboot there can be some waiting time until your blockchain is fully synced before you can enter the RaspiBlitz user menu.\n It is safe to log out during the sync and return later.\n -" 12 65 +" 13 65 # when coming from migration from other node elif [ "${setupPhase}" == "migration" ]; then clear whiptail --title " Migration Done " --msgbox "\ Your running now RaspiBlitz. Welcome to the family! :D\n -There might now be some waiting time until your Blockchain is fully synced before you can enter the RaspiBlitz user menu.\n +After the final reboot there might now be some waiting time until your Blockchain is fully synced before you can enter the RaspiBlitz user menu.\n Its safe to logout during sync and return later.\n -" 12 65 +" 13 65 # just in case then from another phase else clear - echo "Missing Final Done Dialog for: ${setupPhase}" - echo "PRESS ENTER" - read key + whiptail --title " Recovery/Update Done " --msgbox "\ +Your RaspiBlitz is now ready again :D\n +After the final reboot there might now be some waiting time until your Blockchain sync has catched up before you can enter the RaspiBlitz user menu.\n +" 11 65 fi -echo "Starting ... (please wait)" +# source info fresh +source /home/admin/raspiblitz.info +clear +echo "***********************************************************" +echo "RaspiBlitz going to reboot" +echo "***********************************************************" +echo "This is the final setup reboot - you will get disconnected." +echo "SSH again into system with:" +echo "ssh admin@${localip}" +echo "Use your password A" +echo "***********************************************************" -# signal to backend that all is good and it can continue -sudo sed -i "s/^state=.*/state='ready'/g" /home/admin/raspiblitz.info \ No newline at end of file +######################################## +# AFTER FINAL SETUP TASKS + +# make sure for future starts that blockchain service gets started after bootstrap +# so deamon reloas needed ... system will go into reboot after last loop +# needs to be after wait loop because otherwise the "restart" on COPY OVER LAN will not work +echo "# Updating service ${network}d.service ..." >> $logFile +sudo sed -i "s/^Wants=.*/Wants=bootstrap.service/g" /etc/systemd/system/${network}d.service +sudo sed -i "s/^After=.*/After=bootstrap.service/g" /etc/systemd/system/${network}d.service +sudo systemctl daemon-reload + +# delete setup data from RAM +sudo rm ${setupFile} + +# signal that setup phase is over +sed -i "s/^setupPhase=.*/setupPhase='done'/g" ${infoFile} + +######################################## +# AFTER SETUP REBOOT +# touchscreen activation, start with configured SWAP, fix LCD text bug +sudo cp /home/admin/raspiblitz.log /home/admin/raspiblitz.setup.log +timeout 120 /home/admin/config.scripts/blitz.shutdown.sh reboot finalsetup +# if system has not rebooted yet - force reboot directly +sudo shutdown -r now +sleep 120 +echo "FAIL: automatic final reboot didnt worked .. please report to dev team and try to reboot manually" +exit 0 \ No newline at end of file diff --git a/pictures/ssh4-done.png b/pictures/ssh4-done.png index 42b7375d92cc7b2177a1232079f933cc8132596f..d97e349a19f50c094514664b9b2da7ab64de934b 100644 GIT binary patch literal 20244 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 Ro`n_Ctj$lD6`OkA{tvsn_y)ob%j!eKxpf z#q?V9y)gtU$Vnh0;30s4fgwwN{GbE|2EGP-zkq`Qet##gpaTvFn2CxiNQ#P*DA-z= zn1PJJz-Xck_4Uy|GSCbf80hN{{-CEtuys-j3JO!w_ZsdTA{puY(K(nElccS^ii5Ta zsnQLWtJu|GF6Vkuz4~uVF~bgcHu*NI5*^=bSML2uu^zQ1^NRNSIV`-|;+Q0?3(haVY%Wd=8OALUKpN#c@=@qQIi; zChWWo&*%Oz2iJ}D(%ad|{_yg0l8=P+z7Gj0llVBmpfU{Js}aNq|I_yGfhj0pgP1^!0|em-PD{C5_7EerC$ z?_d|N7m6s0N=gF%D;wGx8(Z3av9f2i^!yBDHDjitVXq-8!)s_|!DL`$_1T!o*~0qu z7BGHiUf`>RvAqF_vjxb~j@Ma$?9Uav!1vd~%w!~gF0nTkAk&alAQ82)H74O=Vqsz- z6GR{(A>p?*GT~MFApY-mASFQd#opeUmzmkg$%)B{oyp49l$n)>hliPkjhT&&5x9cU z&c)K+z?sp~j{I*X|K;<+*v`<_%-Y_}%97+YUxUw94)y|MWUmGN&%eL*GzK^=KskXxRw9)D6fKI_s3M`f#QOODd}XDRfGaSa$L;!%Dm87z zU2tf=hHoqRB+hg@nTL<(NXtu`$(}+O;_oM3j-+8i*~s^Q4upWkv(Q7pM}fV5RNjEo ztSI<2+|+sO z@gOUYXX`IicoiO>XmSZDP0eH^JdUDa<7}{HC=KytZRdvjH#p8F+dITIRN7C&>FBY4 z8Zw0jq0-HnN0N;Er$#>e5}k=W&G*Kk=&{1iQ2V3l;BcfTKY{+Lw_rvR^xWmcek1jlh}>xnRuX4&VuS}n^F0`feJdb26PJ93~Kf--=fy9`Ty??9pOi41xp zGa<&yG0u2LmntTfzNu9GZcOqyFIZ_NPi#|)+jNq_`A)Sbzs!J~_V%2-_~q75X(21P zY{i0k<$Qu1K1z5R4d^tyV;Rn4DBJT7Qqq)GX4!)Q$Ygc4`DI-u%Jy=qoq=Rbf$Dh1IO?*B_bG;TfL72v#0b!IkyR zE9*1#dAmQCl@{`nIq;sU%5dDnIb5&b4Czz}hoBxZjmYz@;DX(pE-fI<5`7t zX&ZH!qHcRMrp{wLdOhMndI>u-mbYU(+P9ck+HZ#lgO(|JVMRu9_BKQ4#&n4O6M0i8 zmUP4g2HlY@HdEYh)e(&Gl*e)8>TDNj+Pyi+b0K&6b5pO%w)c@Mm@6d zmm9VG)7dn34X)Z{k$oX{rTu3X9oyN;*x%iKV;5R^t)7sYPQQy|-WdjPB=L*n8xCh$ zk?uxAeeA^c5oTX|LoQB1#>~JF=k>Tj9DH&d`b`eD$JCMxzjBE3_kDF|GH3nQX{jzk zA7nZLxyk&Q^=~on%$*bwVNpRMiM=+{w0lPYS3iWU&?6N5&jSS0a*|rfX@H zPEwhTJRZDKTHThJOJkYqu$ZFmW0w=tV$d~RyQY;EzM5-JHnqf*K1)~)@9P$pR8hJe zk&nPwXe(DdEStx)fPy)_`Yar;W!RTeX{e9p0{s_><~saGCYL(0#sZ#Dd~4%bJikQ3 zOf^{PEd|_4La0iS46x2_Z(DNguky+?+6OaDkE5JB(AjG;l8R{w2qPeGY1 z{?NBzk60~-VV--XVZvChILG#yc|@j=M@n=%Ci~>3ld}}4b@9%njxhXpa>3XIWO7>Y zq7b7TFen5#@6_S~p)kQ)S?Oie)fDuw^gLtPL-|GbA5YWE_8k2~Jo{F&w|~e-@bDEn z=T^^D$L#=1EDvR0ME8i(OenSboC~toR@2z0+KqG57ZM)x8L2(FmXZ_Cm#qrj;u)t| zC!s0LQpcI}^zncs+3AzqVqHL|Kq zW5Bg|t)*B`C(=>|k@~d0mCj#-t&}W>zKFBGv-8BHrH#+=Xf8rlFlI~(S1}}Zl4%Id zQ(J>DyBw3okKZq7jjIDuI+(a`(5zp@yj(<%rJT#muO8|K(BIzMnX&8%n4NAy<~Y5x zLMV{wx+-)h3(s&-7*6Git|LVK8CjO;kj7~`xcI1RY8bzvM(h$(cJy0T$IuW23&a0rRRUU#Ois*HoU&drvp%-~VvE-KBOxP*0Sk}hP{&3Qr z`K~L)Xa8~3JrTJ{Eamwme8PQKxC>O>s)|S}Ft3Tayg73%D2vDMSXtY;%2C(SR5YGk zy??rqMmX3a_4F%J+U00L$zDmX_-1=VF6al<<@T&D#nu=Dp2@}*wl0G)G_rkMMy4y3 z*6AY+ZKb;U@WK&AsXV_l7l&oRbI2IC#C|w2L&aRDJ(k=e$d(Wd6&2e)W+8o@!53A}#9} zTjoW{155BUtXVHZPu)ZQs(48AV2;UU_J)#wb=RgIRw>VK4)0H^cT92$ zpxUp@uc}u6*mhX8U$5F`P7m5m1l~ij-iugUdp_@gRXm4Up?bQ$y8WSR%%mh7za~dM znig1ndwsx6yKQKohoi2br0Q*EyvLg<4tUUjUcvWyeV*auBp_@ke||TV*b%@^Caxu% zeVm4B(h%p&#;jpS9lE!g$&9!fUR`K-o;%H3KdOzd+C$cOo4fT6y$BB?o!6lx#Xq^k z3W9-rrD&Jc1S;pJmo`R(CaE&P-{ts_RG2bN!1za6%%9b|HwA;h-~h^$$3#=SlxzGcqsow zB0;!7UP*7^`bhsI2Z?~VU|xA&5K@O?Gs_KnO{=O8^k(T5?)Z9mi(;L=j6Z zpD?TEwN%vFwmuadiN`4wHOt*NoY2=#i9|FmaFZsJ%tjej^ga~QVJH0Ea@5_$PATuV z2x5n$RX@~(=~8w4$us5gFdy?%KUBe6VHBQCv}ATuIkLpv8Y0)->|Uo1Y=f!9h80h( z2%%@^rmGpPt-M${1d2dCm#5p%99gfMC8v^OUyp)gpcbk&*_lFTy%<~jrIiWH?YCr; zU&xV(i_ryde%s|c9xXr^BLyZCircGZ`;Ux_#3L!RZuEyM`$3K>0R1fCAXMTtKwuXZ zMl7UzesR(85d!%jKT$WPLZ_vqUsYS1;o+zu^S8sSj;}S9X(+~9+_$VK71hSyZGs^q zX^g%sw>B|oR0*4mXO!n;a+)V74Tj@!#=s!s;ly74Y2mG3bu}9<>*o*gJLp@kK>td= zJU?y4C+a0ETDHh8yI;uO0RvhpQ%|#C-{yLy;<-Olo@&!>FZ42J7&#OxFIar9Y~2GU zP{DK*uDNFfmENgonofDM>{hANNiGo)mm9$=!O3lN=swexz_J zpYfj$l7EfzW}&2{JRfBrA5_=#prlu?i1YP@pmakuy+-002*b_Y93B~oy*^qjji$xq zKId}3wZ6Io24g5%f`}Fp21$W%t!`Ggv{xjs2$pQm)3m_0%%W8t1Xv!n@-vvjP5V@AecNJ zu2pj#QyB*Ria}cSAhXRqbhA)td~E0XErZZO?RUdzyj&)ehfaGF`PHEL>Rx5#C9!3z z#x)pKxm`H@_GPCPkFEQIidgNy=wMB`UNSVurZW0)1!zAI>QQWcL6gP_W}FTfQzaAlB86v`yS)w zvGFDK%!}=@U~OUrH}CRz$t{%R3uIxMZHPl|cdRgsGtT1d?fW6n7X`k$vs|Y| z>*x+xUFW>*dKfQs6pjC(}!p_Lj?HVK7U?FD`92u9cvhj9KBCB{DaAo`5c%R&Ed_ zmTR-;kIGnINPgUYDCqb#dyY<%>zh+;Nuy@=On6z%<4EV9}Ay&=ccoPI?=UN2fn z!8`3wNg@v`SP44tLL>#rjw+Yk*_6TwfzDNUOm|!` zo2W7n?SlwcRsU+Alf?RcA>dZ9sj8xqXQE=USg%@xEQA0Z{ka}FFgjg#$A_$I z7kzkhH#bskJbSfH)URI#E*+oOFid<2rDp45Tu5)pw+RNB2pK$`?EH&TcV+v1iBig! zONF>%0-1#ZZr1f4Vw_Bu?PRT_nl~sYRL&s%?kqU=QqfFNA4n3-DMO%-GHwCl;G) zDE@pip9HPiy&A#EJSC6RsPLknE#fvvArQ9(Ow_a_gRJx}pWx!9b)Nkx;9+9IppsD- zcCKu@R`RQnF%oIrJNGB}GFycr;>h6lBb`s(Mv`+*%=L>X&CWZ5i%Q3OTZy~med(XA zqQ9t^4YT#$uN0=MYjuH*PH{O1TLGc(|03-w|n`e=0sHy#J61bK%aG zyJ_uw>=ctgP|wybQQ;pA9~QT258cU$xxlpuQto1a65G5P_?cw98v&jksTWvBg!!9# zY!p8n5;{_@6d3WZ7Blo2^p&kjM4q<>P0#lS@!dXq_%(Qqzkh2Rd(Nz}820ZjMT)kj zr@Ql?Bt2P&hZEq`iEUL;p;96#>m)MixKkPq^Nl)KTeV#!EI0?4105|bZG$^!+&vjr zM2kxG(iq7}p@GaoF6HRC&m?2Ckd2|hUIUjTGN1D!YuUlR42|(qt-=g8&Ce|3TK7BK zX|Afnm_v|@#NC1Gw`(Xw2pD2(5#wKbg(DbJIQX7X*bKo2LvZ*+tooN5`gJ|t1QzH| zm}!hB_4nu;CrRH8b>@z;Wb~iEvDdv7+H<+eth%4O7il0kHpj<48mAX{DqAk7TeUas zhRc)!??Htr!YS*YRt-VF9_Bacn9C0Sl|ckoT*U42iq{T2EK9PZ?5@c$SEAu-+PwGD=%MpBOI9PrgH*#3EF(X zy1x2{e_;s!UM4Ln-%+h{%=iyIMQVkC+ASDDe9sw3V0!Yx04&|?tY^~RsizR@7eC(> z%a)_56n4R1xtSdNg-`NFxN_}5;x$A+={G# zCCr04ta4n#hW8{)2ttD?aF#&>xim~;r>1dfqM;-pm!0gl!?)BgU8&Vr-w1e4*d@j$ zkg5v7dFfg#^otD~#p|voPg3i{@~*=#8o;2KXkdkxA{Gq2ACzsdTv9P~-7hYj!ecZk zWQn~7!n$%oa(Eibq=hQMQm3|WQMC)4uFEbvv|?eI_MN?9U0`^Oc+4}Q*>MJrqJ6y) zUq@4ZCHKgDL-Q(i3H#)z=|4`V?s;d#+B?eOAY5T4aiPrt%F+ zH6@>N+O9imP^TRYa&II!5*MPuhsa+7$7{^-!TkwNd43V_3DCEq+PAa`i@y&k5qX`t zwdM=flSjLs1d>A;QID;MW;Hejyw`w;G_F{=u*4_v+OV``A#%2m*o1~X$u7EpxX{#0 zq1{@;#7Fd#=Y*eLrE35#W0{zSZf8JlQv@w`x@Me9Aj2NF*7Hxb?*oU>mw>3kk~iO~Ym-I_-WTaxV1^(c zm??C7J4Ug)wr!`FL-B=vU%dT>tveW$O~kq{U&dz`7fM*h^6N892r|D$W*-$5|73v; zNUBpl_;Qe_;0uWR?*5=s6*eHVU%x*heK3k=zRY(FtmUREAuN;NOCT<18CcQW+*5c& z&yhZ^FgL&aSO=}#p#l))r%n%|*2pI9XWwQ8oxv(MJFbR=TX2~U^L6VV2yxA>Ifbn@ zKV2^(!n|8>8S;HoTn@@cQ#zYEbMtVu`M%XfkMg?*38&@g%#I6b@SbnmIO$*&mY=2lxuuo`$_Ni%CGe&K!ctZ41_X^440$4=V`GS8*<{al9XN9LM zl$)LSjrkF4*6KYKFPb;=8#szDPCUHJ(mz%1+T<#jWcBzQ37w$53fhX;DY*AF6*-R( z0ZULiZoQDJ6AW(-PoH=>JROhokdM05SN(qFHyEg%Do$)%f&mvhoIPeJN`D@D`@~yW zpL2l7V6TzV)eAEcw2-s)?s)hzakBkt0N+d4T+(4PDXmwThK?Jg0pHW*|4k9i5&Uax zXax2F>8}1yc(s6@`?oV%wbc%V#aq9}%zoo&_K3h6vSXW^u}t1-W?B#6PIHzS8c=Q2k=(tsJP6Y6+Yl{cK2{Oiq9#?T;8LH$HsN50R z_@K>YQdQ)C1lpUQ=myiMWNm&Di+6Iu+tY^qp~q|XrQ>hCV527ma%b6g$5kvSKf2a? zqV1(D)P{#9%wFQwj=>_E#^ll+@2H98a8k-1%Jhj-H(SF+nQ{~0O8=nltXHxdPLksG ztM0{9RBiQThm1BPjN>=d;m2eWhniFStb&6Z5>wCf$x3aQMF)oZ4-O~s`6>or;KX|L z09^lwf9!vCxG?5@A(0KAHe6|X%P_K|HbDP0F6*n-kYrV7lh9NSU*BmQ33655(Ll)X%>`Y zkN+r%03a_=h_CNIN&+9C5kT}d+W@@+2qGk0uatx`CZ_-2PLb)(ev#F>a^uAM{2n=9FBcDWK(l5#jO(neWUfJM~u`)Uea~g zPu!g2i=}-u{goqjK1^RZ2#Ly1^73@z)fOZ7yCy#RNR!MrN#{d}KP(asiGb_n-12)?S(xd$ur6ph*X;r`cxsYn z1fLRbf8jl5d%ihz4!jLv@o1pq*+;GGud!91Gd%Cjl35MKKh1kHBwt1=)&|n7KOR(e z7@e+mo$nQ9O4-c}ESzbWZvi;6v zZ>l(Ub8~aB)#YL$IK;CisFQVofc*BtHc3%m$D{!OpX=Wle`95cHol?O^fjSg;y(n4 z2j7lFJx@&lp8v=i>gUpy9oEA|nd%aWe!+0F=zk z^7q$A^aI3Rtq2c5gGK;+W^_>AphkX9DV;C~fKvJaLZ>uN?Qj0E?Qw~TBXi#kUwN4L zczX3=H7yHDkNeALQB(ny=7|+9STA|$2e)`HWf=?nwrg3Wjmkwx9Y>s7AcY&rzq*Ac}3wvzGKjP1m*yn z@i68U+%V1zrWUsrZamM`mr=X%;@bo!os#_>00S@p49SF~)fuiz0*yv)8Ndu!c7>_6 zkctKjejgyB2OtmU%(#o!3t>>99Ql$w(qJN^7S+q$xEH#JVn7jWq~LkbXo|pMjpxGo zEWm<%zk&|-N5U?+Ha)GdOkH?Gv~Z8+l$KO(@VAxRc5R-tKoTuoO4F*Y6aD`_|aDkS$sObG4E(A$hlCADb0Jj+~TGwM7)-2E=@-;ou>72+Hq*NUE~{dPqQ;lZ9sV z73tDm=y~3W0Z6w5hDet`mD8Nc4+c2~cRmV}9O`%#yP z9ko9kmsE&cZ;d3z!@Hh+NU96F(`y!V}v3yH3~1uy&ap9NV(6K zS@26>znjFOeoVQ~*mVBAGFzsZyTG!~yzt#}@(XqG@DgF(D?-=Rml-R+-u2~_!prLv*>_dK;9I;PXOvk|UBBi+GvXlN*9&R7H46^<{7~Gj| zXBs;X!EZ4-0S4075c1Xu*DW5^!*<|01<;yo| zCZSpztqvn|3A*=@+{#y)#p@hb0=xp1<5aRKG>9l=h7Jcas*tQls2=ijV`{KHa`fr9 zCED;eCo4jv%m|-;B0oXQxifXq)e*jg)+0xe&?j zAxJr7v8_}sO|U;&;Ji~@Z&4>gM@7bNYHEVNU~lb&icCf{d9mKx1~;f^J(uzs0?58f zbwBK+-E5WYxQ2NXd`?4up~iHlWz8SHU3JolO#4LVF1KrerSs61Q1Q?q+bt*U%Is1} zM}ers6KeR+XAf?t3;{p*Pwf3B6)s#;&{FZO}bQOdF z4>%-~^3x@`pSoTYU0U(eeE0l9bUErTo6pFEkR1Tk%b4x`sB(tEM z`lGgD0PA!Y&7{m*r+9h;(8PqC-oZSR_($E4H_yLB(5nw$vjV*0WFAka_S`%^XRX$mFN{<^ zWSE4z-Q!i0oZtj?8vKkN8~^AF%p&t7&b3Y`KaHui?(X*v@-LHjeNH!=?XW|T-Ox5k zzp}>+2r;CYchS~BSCjJ3zhx$)rE9DkgtVMf)9M9348S9zm`rNK_En=Mm^}JV+L94@ zq?_?goHcGt*}~j?XmY(0(6~Wae~fdBa+Y;q`KWF1ZC)w%+gm%BGyR^oCSS?L!xYlF z#3OHq5HPcTKqCiovx?qr#>&SH;io!m^KMV_*lp9)FvVfVA&mC1kc-gvw5Aq|iuy{T z;Q!1z)mM7$o^P2V`r?r=J}{AE@a9FpQmh<)Q(Tx4Gd*^XFTSavce0k$W5HC!@R2xm zOCdnRyemSi>_V8QN9H(?+N6laDG6^0g)N(Cl?RgwhQQJkVdpxx^80mIe?%L!a-p26 z9~QrzlfpvftZ7m;lySHm!7;#V#sjLv`{Tw9l)ipx-AcFQO_7&#@U6XBgYj?6@6hIcK$Fix!K!_fC(;fw{w1VP6@$m{fiu z`Ofla#j1%qF&ZUOev-YCcNax{em1_ueisSliEL~csB_LjZg_Lfvy+xvu{0jrGd~Q+u76lW{LV6M-D^FVny#j( zSgv`p%b~fNB2fOB$e)vo%b*9I*8vIbHU2E+l<2h>X_4cL$y=S zToev5>nqk+^uf;1(Pm z5!}T(J?@##;pFfMSK7B7Lr3?~6L~OWWK^j{4&RG#H>A`7?F%wmv)36w0;xR)z2f)6?^Ps)1beq_J)(q3SCb9LqGrOKPynL&;??APiiIhJp||ft502 zcb7_c`61-#N+^+@Y>Y|s?BiM%SJcJqjfU6iD-F<0jLc`a+&Qfvl7;fQpF2?Tvo?C0 z@hJy7e0}U92&(Qxap+wn4__e-pbX_>7SS*?!JHC{4m8rNO7qW0KNKGr16A@b?3+^E zNhgST$xlDmc5KQ6wKU%sjoFZVCZf=$I-=oulIbX1N2hpZ8CjAiL?SaRF!)^Q&;Em? zC)PU{%%r6XPJbSp`D53(K@}hWystjO_`@^2{9+azrwMfY1-_aDnv>Qy`_3i3F^g|!d#7XWHAX7``TjARk+L-xyr zTDSAT8^S*j^N#`!Xtw#!A7~d5!u~-v5^#KvuC!X1Y5+vC?rLOf?~ z`gM#%f~8GRr>V}ZXfTx)<;P4*ek)G|y&0Bi)9IvJ<3tde<^GwA_WtSRjc3~oX(gCb z`EL3SKkadtxWN~@uDc95123geA?svNtZ$@{2Sxz?X70?R_l-mmw##byS4F-`zZKR& zZw6-vTB9y{dK(Z8!MUKzxse0I-tMnlfxe3nWw*=q;>@#HsC7A#BhIx(QyRP=4zx4#7s#n^(kMf+nr7|SwaB8y?XY%X` z9)k|YAvbHq#}(S`H^=#vb>=4D8j9QT)a&MR_DQhy9v#IB#+G32s=)jTkz$B2Vm7Myep%tJETgwc0pn@&I zk5O*0FoxoC4i<_~{&435E2s5!wj%uu?Ovs0iPJ`;DH(;efe;k=&L(;N1B`{S(K>|Y z_K(y;nK5or)y#Y7{5-uRy>8i8McTyY;j@`*eUD#$ zau*;;p{@y~b4a$K;s)vi*z)2PXO*%`nT{q!JD;$LFBJKU2BO3hd)|tqtND&0S#@=T z9|IV@oo#&0qhDdhlVF)WRQ<>R#)n-onhTF&nbblGl@J+^h!?Uo6ld1jS&xDD0}=-i zqssB#_wsN5AuWf&1ZMAb`tdU@?}#n>Fbl(}_u0F<41{lA zCB?~nr6WtRXOP2kFZABrFwI8~;O(L>*~7QWiX%bbjLm=vTBtRXI)mov)WL=|fepe& z*=A0InyfaKHgt_b%{8lpEG31NGw>x7r}onnH2F3M21ALofn7R=dQOrB3VZ+}+MJ5erS9q<)b+6=j$Y7mT*EF$JbE zT_A22tsK65Z>Y7khG~C4(`XngDR_C~op&Ru~m)l4!`(Q$l5dDtU?__6A-?%uAO=P*F9 zv<-h8!MvQ5mJ_iVTak9{Rf=yT*Iq%rH(OsX4D+4BZk;7SIWg{s;S+ds7Mr22gOFks5E>y2 z=%@p;U5D}RKlxGI;_17Fz zIR6Cczh}9aT!nWc20X%@e|D{Xplqn=D}Hi`kM=ZqRU03iMhYsQ26KAcJaWcRiTE`% zwXDM^XP}hh{fd|NZ|gwE*IAkQ_r3Rm3EBFz-RNKmlx#Ls85$j8D|X%R)D+j>@}#I$ z)8E;gDFg4EP`)s?r{4(~j;Vkqp?A?-MnmgU@|)Om!PwJUV`74Twh#y1(|2KG#`n|$~T<6Qical3^tD&m2^yp zq1RY(Iu}S`OmJ9C@Cs#3Dle7p0{5`kKTU}qqIL$eM9o+Bq+9^dvJjKilh}$LR_JJ^ zRG`rqTzU{5qik`F@AhlWZAHuRz9)!3h%iIO#`TPWfk6fTT;Ha<8g`;Lb6HD~RB;wt zE4{%cxVpWuS6UlJc056dkY@o*W)+CCryFi@Nqq)QyIHc^FDImfb)xRGT+*ots={P3 zl8X1{qlt`LBzzWx1a08BQ2P7Bu*31lKO7Q?OMLVD^?fFU@K+G*z++Wbw7JnBHKq}&=@L)8bbJP5 zE4Fzm!|vs!&)M7&LhK{J>*!09osFu94^o>5&aL`7h=4M>@L0LBzsMEX%6~YvF<4)x zmOIQEh}hI^b1lYY91zpJ%$$qz*KvMy+ajTYO{@%kK2Ty_=;Sr(fz3~rmW za0HlY$}uS&cU|jX{l87Zb{GozJ~&;^1;HJl#=$uf`qeCUkxjKYSzYlrRV1%puEQHc ziiHVXA}?g47}n$tHKE4dlw43T1u=ibP2N1UTZzkHvZ`#3qx1TRt@d7nrYaCD7Q6Wi z{AR7y(^)?;#-|Bf9xCcH%yjDCoj#BlH%dDCKPK#dx>Lb2ETVJ;1Y?9KrDoQJ-Ge#V zlk9Pa`5IiaePhozl@_(@nlEt$`+RZYiA5oR5A;qlL74>|d6|VlY|vuw_L$z!0}}11 zgd_cjESrUMeLyZ@0%?M_vJU(oq8w=qKqWnRHRS?x=V*O3S^ToqbNj8>*iQTgiP3zP zl?Nny!0VVpe|R9qVD4yA`gz};S@UI{N-o0kD!vYw2vHE>oOfAwEGQcNVQQ7(6gx8q zKdo=O@V=lW?t@t?yVlpXHqJe^Wah_a5CfB%ZJyhZF1HAUTs|-~m3oHOY0d!lro7kT zCpX3$XYIL(i_?t8xAhG5wpG)?Do3QG)|5I>TW09Mx?rJ=rZ;D76r;F;8k5236*T*_ z=#Y*gluN2WD>Wy5*+^7%NNMiSAu%)E2DL#h?%qKFCe zWPgp4LcrCxiEk(={v?aC0foc-OBb8gUk&4o8jv(z*mC^;COP8(c?6kJ!zA>t0P+l6 zy`d)_7xgEZ6#(o2smO*N0RcYSSGQ>Pr>C|{4x>sE~l{ntVun*S0J z;nk%4KY5WHC0lEAKR!R4ygHo*0pr|T#AqzQznJN9o&0z;t2fc?V9oe_ z=+$Q?l_4IEH$)mpfQ~<(gT6T_FBEUlu%rg~Z3@F;fb}OyB(aD@@NDB00}Q+P zUGbhz58X|p-Ecn_;SC!+on9XM8sKppc_TrP{p@!q#rVvMia^U1YCgzN&gkI(s3Uj$YGa2*Og-x~ItL2s?cv%tXpvs>zjM-m-v zQL5c^4?X~#JGF9w%n-L;yv}&*dBl0k%kzUVpf2F<6c$LJsWmNf1FOpqFU)Z^i%FY7 zQB3U;!?frze|&)DC3Zjc(Wh7e-WjjX%6xzbd&|AXb9mTtRIl~zp}1XN&AWrU5mo3> zA?2MF6JRRT|FRCXwNBXyu*}rAZg*RWTR+~dT%Mzsx*2Q>OopjC3WO>zvm2``_Y7o* z{Vh+noOo}WUWpQfu{|#I66bQUEh#A({L1kMYa+(k01nJ>k)82O=2>00a#xheeL!nc z=wddRHtY|J2CSe`y1E&)fcilDf{?-AKG!YMZ<^sE-hRJNui0dqkBNy%!+r~}*EB2c z7vZBxtfET*1A;=xTXb?TQyvRM)$+-{q|z(x9$Ubu-hA}9C|A)Yp^g)H6gj&&n3YEn zxcvF!4OC-wpJu&*U)VfHsdlq{@l>h0yqw^j(cW}vA}6JC8cia=2WqjP&sq*fk=h=9 zACOwCw}706?~P^HsWu)_xvalzb~<5-6nbt1S)VroT}dz96+iAOoqVm2K~KQY=~_>?3o|ow;&;P=VIZ^8h5s}lNlgh^i!xw3nth+y z%0T;VZ9sPeF#ltNlWO8L_{wed(=`!P3R(<|4$*-rvtE9&{UXK|QxH=e>NjaFbfo+0J(IsDf)NL#H; zBb!%51IMy?kIJW70*@sb#-VtfV2vhOUDrkI)j=1J%5e;c1X{5*eekh#&P{~8EE>`v z7pI4tX1RnKfJ+}vWfXAMXm$Sn$;tyjKhvuaYPf@+OHDOwZ;u*Q;>dhoUWJzFHF;`T zB{Qm#^}yuJR#Dph%RkafEo~dg6_Rht{-X%s%t>lYRMqvkQk@4TcYbZ{RLYHMriU7% zi||>uzbCNpm-?ha7~YwFHQcM7*|LpX@?yPpJE5V7s zhLwG&>!BE4WnShsPFe2FACsQ#cCzU`7vs*(PN^mW?>!)!eF-JV>FEhWCVT+gpd^6b z^9IYa)iSBu;PL@b<7lD%QJ^aT330zhGM4JAxYI`XJ1KysjQ3SRP4mKuHng^RzS}89 zexGF421o>K77H9^lLg_|^?ilmh@(TFxVv2Z`-IcW6k+6ax&q&FI(cU8QMu|30vj>JcX8 zU!C{9a&$!u^{p@GBg}N+o0kgXelzSJzLZ>iVF%pAfx_8 zEjwfykBBzgPP~Xis22F=(s{o+=Je%SUj1_Cer9KYd0Z|zjh4U!5^$!!I^p^Rx`atOx-N)*`4TJSBhc6!5y*ecmoV$-giQ#b5^|VH?Ov56rL2 zP!n}{`VALvoJzoh!scX0HWC{aBKTRWx6L)TnH!aNe`%yXl`abypr6-j>OcW~9QFqqKZ#_ZS z?0zb8kp!&Lat+Gwf9qa>lfu>>>5>BM z(=N4dM@LTy4mxX0$JM0f8SCX%7!esnY24z>cp={jS&Y)R$!NO8w-9IO8poLlTnuNX zI`PhWI=gOl$uGAh<&)z-SxS;0{tW1VgG-DNH^LdFd z9dSmwP%ga$h68TnnB`Ppet!Lf1o92=QW(b8b0>BBZ4*f626%T|oP^}txrX4qJSU_h znD5+d1*AQXpDkl3-?9@*G`paF8V5P(j`%w0Ou2w&cmPBEmBj(I=acu!iQzo-k$Xjr z`scAUo*5RA#iZam&hMD0z$nw@vg~Uj{0fVVU91Iq%jGoIDHm-F@^a-BPVdu$o^Q*@ zd_J0XEAYEozzuy?Lx2?vfPo4m?3p_YUaC(b>>_}J-XAcare7bx!{YMk>`DW$4KtmO#PUYBG{Zthq+rB)jOm&)s(J&6PlR!rMAa z&0vh9Z79)lywdh~rYi>VXNR-y*-XNUc*H!&u_r=`8#DtyV$k~-m`m{L!hUjzS-Gt8 zy8!sFgrl@~RBP1ap6QGPTp6o{$|B1eP#A2U1-^3Rgr@5`TcGI@)oz&#xmI0IU{?#3 zAqcD+3`%ILOPm)Zett2-Sjp|M@TxZ#NVg5iuFPf@v>xo}W`2@OYKqkuUfy2(r*ke2YO3y;C2Pp7gHDMhX2?KRH=J35661pz;2B0kr>uqmhD~2M&3yZ_( zN;8s;99QJ~CgWgx4Mtk{!Z*zy50OW3Mec_-8`p0IUXhOQE7F1XD(_KO=@Jl8Jg(|N z=_3D#5G)>vtI#}#RUsCNwI`lf1n`E(hA!S4Ck)eA=%Mtqx_=6d_P zXzOiZ0%ER1D*M(F7R*63RU(~$a-;o;=`hkB^blV+bg`+fvA;0}sH!`{?yvwEof$^m zHT+HWoeeP2%YQ%RnV%buH2nWo`M_SUIgUUOzhmG%yeawZew68`qd`C~FV_t8*+otd zst`Zp!Fz{6(GMV2R3 z)Z|1}R=;57V`5wWU|Ov3)|-!7@Gb8sR5Oxfg8u=Zl7zo-AglrY*I&dDC0zd|=>3b> zGaumEqWI_9@`ic@aLKiF$n$^nzYzdLNFj~?+aAA~2o_(Zr*tXt&wWJ-0235knp^;! z{n^dl0aWiPCP(OR3LP#PfHi}{xc?~!w*aC#OvHTpuL^^}<)Sdd|A`Hq%;0ne9eKNv z|7!i-vSiT;_!AOouYU`G3V>H^3gZ8j>2Q9f+E|4KfU_LiDs zroI1HF`p>l@<61x{~GVD_a9{P{FX0-9>nM4m1g%oKco@ZgBYJeghB2DqWT}ZnGF{< z-G$tr7Apw6qRlT66-37JwEsXP$t#G|C>m92g^!yZNt{SukaWoncnifi-w+#D_eFP& zr~^QFQy>Vl)Le5el4e`t_6L=TEE-!BQ4}N#A_pQV+S_XApxWuK9)@py@i@ zlqhw)z!~#$g{^eZz!TG=Z;k@kH5fwdPZcR5F(zwU~6}2D}8%U!lZN7?YjUUO|OOnXD-efkKrtG0`dRjnG z+9}hcHokgi^^3%cGuW?+g;M*%u~%{k$tZUx8l$(JFo8`+`xDiO)F2KQi0 zs|F9~y%9XFm`@`K6vyRDg`v%skB6dC;2Y8raneUGsid;cRz-2gEr84F^pob|85k$K z9MmQ>@K*=wC^|D~R7XDN{Dm6tv#1c)}FZe681hR?E(oBw)S;X5r#3;1VEH;Dl!3 zl#fUFm!37q6;BzZvNFdG6ig3c;V2oBQv zIo~Iw{zRy3dUM$7mzS69i8MYLxpPxfP;RN?e3xUz&;RPKWt%_m$2o3bf}Q0F92!ZR zrd=$W3|!sUt(yL?Ny6LXBCt5q>Snm!qTOwB88&dF0!)6M4nL+s3mdI&hg;8HXz-b? zTXV)pR;XjvfkT1o-R8192Cm0lp~MvUV*i$@1tRTI;e!5Zkma)uO#3*&rNOt}`EroL zz(XMhXzIgHDLK$`>A`GZZp;t);sGr%9|Fr)zUk`8umbZwFcxbUFLH+!n85P2V26#Q zGC$tdP_L7F7k6MrN==(id1rnrl@-2DB6!3qXbB>B$?R#dAYG&@cM}F9MI$ z01r~Ncq_d9+)}uru(GmpN00%`lnzVC7G8;Vsp(Uv9+eS23M+IAAi=}8y+?vp9%|fD zzo_NO@qYRF6BYrtDQ?KUefpt!Xw5cN$)dzs&vl|}gh6mN=aH4RpdF}DTeFt7G{1X& zdHMM?N9P@0(VYA;76vUTlE4fM9f)%P?lXJ>Jeoo3``g>$hpshdY9}giM|b=XXNC^^ zDKviIEbz6cS=Iv!_8Q=#>u;@{^I(-`4JZv5r}n_oKsPWA==*$efu#XZr8!?S85-=2 z@t`!2xJVtA2Ie=cpRd7dv-!@9PiyS?&FmgCLuC{gjTz6ioXz%{Vtm z<>bJW2DCWMtOl~2+kt5!FtPQC=qp24lmm5ZB^pcH!7_jcFuL8lrcZ<%2s5DpSXpnF z$vYns5EC4h0G*|L^z;d6%0A!&Oe|;G{9&F90@^k4QR)+@Cli1vH7D(`IxMMa0+X7@ zN24OB(+z-rHrxDA7|QJcjgBsc<64Kt7knk5*U_0jfowZcOun+1GgBKf7Da Wsi&*v_`L_6J>}`@=d#Wzp$P!$NSe|B From a1ccef82a14f36dd9510e776d054c8cbdbdca955 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 5 Oct 2021 12:36:56 +0200 Subject: [PATCH 1261/1295] #2600 controlFinalDialof fixes --- home.admin/setup.scripts/controlFinalDialog.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/home.admin/setup.scripts/controlFinalDialog.sh b/home.admin/setup.scripts/controlFinalDialog.sh index dc9e147c8..868a898c9 100755 --- a/home.admin/setup.scripts/controlFinalDialog.sh +++ b/home.admin/setup.scripts/controlFinalDialog.sh @@ -144,16 +144,16 @@ echo "***********************************************************" # make sure for future starts that blockchain service gets started after bootstrap # so deamon reloas needed ... system will go into reboot after last loop # needs to be after wait loop because otherwise the "restart" on COPY OVER LAN will not work -echo "# Updating service ${network}d.service ..." >> $logFile +echo "# Updating service ${network}d.service ..." sudo sed -i "s/^Wants=.*/Wants=bootstrap.service/g" /etc/systemd/system/${network}d.service sudo sed -i "s/^After=.*/After=bootstrap.service/g" /etc/systemd/system/${network}d.service sudo systemctl daemon-reload # delete setup data from RAM -sudo rm ${setupFile} +sudo rm ${SETUPFILE} # signal that setup phase is over -sed -i "s/^setupPhase=.*/setupPhase='done'/g" ${infoFile} +sed -i "s/^setupPhase=.*/setupPhase='done'/g" /home/admin/raspiblitz.info ######################################## # AFTER SETUP REBOOT From e1aa6211090ca45cc66ce74fb1efc966320af7c3 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 5 Oct 2021 13:00:12 +0200 Subject: [PATCH 1262/1295] no loop within loop --- home.admin/00raspiblitz.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 3add5d80a..6cca97d2e 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -199,7 +199,8 @@ do ##################################### if [ "${lightning}" == "" ]; then syncedToChain=1; fi if [ "${setupPhase}" == "done" ] && [ "${state}" == "ready" ] && [ "${syncedToChain}" != "1" ]; then - /home/admin/setup.scripts/eventBlockchainSync.sh ssh loop + /home/admin/setup.scripts/eventBlockchainSync.sh ssh + sleep 10 continue fi From 0978ad77b6b7e3aefa6c6592d1262c1b8b8c87e4 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 5 Oct 2021 13:47:36 +0200 Subject: [PATCH 1263/1295] reorder final reboot --- .../setup.scripts/controlFinalDialog.sh | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/home.admin/setup.scripts/controlFinalDialog.sh b/home.admin/setup.scripts/controlFinalDialog.sh index 868a898c9..5d640263d 100755 --- a/home.admin/setup.scripts/controlFinalDialog.sh +++ b/home.admin/setup.scripts/controlFinalDialog.sh @@ -126,18 +126,6 @@ After the final reboot there might now be some waiting time until your Blockchai " 11 65 fi -# source info fresh -source /home/admin/raspiblitz.info -clear -echo "***********************************************************" -echo "RaspiBlitz going to reboot" -echo "***********************************************************" -echo "This is the final setup reboot - you will get disconnected." -echo "SSH again into system with:" -echo "ssh admin@${localip}" -echo "Use your password A" -echo "***********************************************************" - ######################################## # AFTER FINAL SETUP TASKS @@ -155,6 +143,18 @@ sudo rm ${SETUPFILE} # signal that setup phase is over sed -i "s/^setupPhase=.*/setupPhase='done'/g" /home/admin/raspiblitz.info +# source info fresh +source /home/admin/raspiblitz.info +clear +echo "***********************************************************" +echo "RaspiBlitz going to reboot" +echo "***********************************************************" +echo "This is the final setup reboot - you will get disconnected." +echo "SSH again into system with:" +echo "ssh admin@${localip}" +echo "Use your password A" +echo "***********************************************************" + ######################################## # AFTER SETUP REBOOT # touchscreen activation, start with configured SWAP, fix LCD text bug From 735239886ce853dbee54e2477b9d942b3717cd12 Mon Sep 17 00:00:00 2001 From: openoms Date: Wed, 6 Oct 2021 08:03:42 +0100 Subject: [PATCH 1264/1295] follow cl naming convention --- .../{dialogLightningWallet-cln.sh => dialogLightningWallet-cl.sh} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename home.admin/setup.scripts/{dialogLightningWallet-cln.sh => dialogLightningWallet-cl.sh} (100%) diff --git a/home.admin/setup.scripts/dialogLightningWallet-cln.sh b/home.admin/setup.scripts/dialogLightningWallet-cl.sh similarity index 100% rename from home.admin/setup.scripts/dialogLightningWallet-cln.sh rename to home.admin/setup.scripts/dialogLightningWallet-cl.sh From 6967cd8da0d2390c73bcb5b18effdc61e2016926 Mon Sep 17 00:00:00 2001 From: openoms Date: Wed, 6 Oct 2021 18:35:36 +0100 Subject: [PATCH 1265/1295] cl-plugin.standard-python: add persist option --- .../cl-plugin.standard-python.sh | 31 ++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/home.admin/config.scripts/cl-plugin.standard-python.sh b/home.admin/config.scripts/cl-plugin.standard-python.sh index b3a465048..d9b9f6912 100644 --- a/home.admin/config.scripts/cl-plugin.standard-python.sh +++ b/home.admin/config.scripts/cl-plugin.standard-python.sh @@ -5,10 +5,10 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then echo echo "Install and show the output of the chosen plugin for C-lightning" echo "Usage:" - echo "cl-plugin.standard-python.sh on [plugin-name] [testnet|mainnet|signet] [runonce]" + echo "cl-plugin.standard-python.sh on [plugin-name] " echo echo "tested plugins:" - echo "summary | helpme | feeadjuster" + echo "summary | helpme | feeadjuster | paytest" echo echo "find more at:" echo "https://github.com/lightningd/plugins" @@ -22,17 +22,34 @@ if [ "$1" = "on" ];then plugin=$2 + # download if [ ! -f "/home/bitcoin/cl-plugins-available/plugins/${plugin}/${plugin}.py" ]; then cd /home/bitcoin/cl-plugins-available || exit 1 sudo -u bitcoin git clone https://github.com/lightningd/plugins.git fi - if [ $($lightningcli_alias | grep -c "${plugin}") -eq 0 ];then - echo "# Starting the ${plugin} plugin" - sudo -u bitcoin pip install -r /home/bitcoin/cl-plugins-available/plugins/${plugin}/requirements.txt - $lightningcli_alias plugin start /home/bitcoin/cl-plugins-available/plugins/${plugin}/${plugin}.py + # enable + if [ "$(echo "$@" | grep -c "persist")" -gt 0 ];then + if [ ! -L /home/bitcoin/${netprefix}cl-plugins-enabled/${plugin}.py ];then + echo "# Symlink to /home/bitcoin/${netprefix}cl-plugins-enabled" + sudo ln -s /home/bitcoin/cl-plugins-available/plugins/${plugin}/${plugin}.py \ + /home/bitcoin/${netprefix}cl-plugins-enabled + + source /home/admin/raspiblitz.info + if [ "${state}" == "ready" ]; then + echo "# Restart the ${netprefix}lightningd.service to activate the ${plugin} plugin" + sudo systemctl restart ${netprefix}lightningd + fi + fi + + else + if [ $($lightningcli_alias | grep -c "${plugin}") -eq 0 ];then + echo "# Just start the ${plugin} plugin" + sudo -u bitcoin pip install -r /home/bitcoin/cl-plugins-available/plugins/${plugin}/requirements.txt + $lightningcli_alias plugin start /home/bitcoin/cl-plugins-available/plugins/${plugin}/${plugin}.py + fi fi - + echo echo "Node URI:" ln_getinfo=$($lightningcli_alias -H getinfo 2>/dev/null) From 5e853b4ef6a93cd0cbe56bd861e9fac2c93cdb8b Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 7 Oct 2021 11:21:52 +0200 Subject: [PATCH 1266/1295] #2561 setting password B on migration --- home.admin/_provision.migration.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/home.admin/_provision.migration.sh b/home.admin/_provision.migration.sh index 176e89316..f047bff82 100755 --- a/home.admin/_provision.migration.sh +++ b/home.admin/_provision.migration.sh @@ -45,6 +45,20 @@ if [ "${err}" != "" ]; then exit 3 fi +# set Password B +echo "## SETTING PASSWORD B" >> ${logFile} +if [ "${setPasswordB}" == "1" ]; then + if [ "${passwordB}" != "" ]; then + # set password B as RPC password + 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} + fi +else + echo "WARN: setPasswordB!=1 this not normal on migration! Running with default." >> ${logFile} +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} From 78101faae7f938f6b4e2ceedadfa7ea412eaf8a7 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 7 Oct 2021 11:50:25 +0200 Subject: [PATCH 1267/1295] #2561 adapt node migration detection --- home.admin/config.scripts/blitz.datadrive.sh | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index 81d088400..f7cdf5af5 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -279,13 +279,12 @@ if [ "$1" = "status" ]; then # check if its another fullnode implementation data disk hddGotMigrationData="" if [ "${hddFormat}" = "ext4" ]; then - # check for umbrel + # check for other node implementations isUmbrelHDD=$(sudo ls /mnt/storage/umbrel/info.json 2>/dev/null | grep -c '.json') + isMyNodeHDD=$(sudo ls /mnt/storage/mynode/bitcoin/bitcoin.conf 2>/dev/null | grep -c '.conf') if [ ${isUmbrelHDD} -gt 0 ]; then hddGotMigrationData="umbrel" - fi - isMyNodeHDD=$(sudo ls /mnt/storage/mynode/bitcoin/bitcoin.conf 2>/dev/null | grep -c '.conf') - if [ ${isMyNodeHDD} -gt 0 ]; then + elif [ ${isMyNodeHDD} -gt 0 ]; then hddGotMigrationData="mynode" fi else From 112109f0f2a15d53f4b3521b22cbfb4c2d1f0dbb Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 7 Oct 2021 12:06:24 +0200 Subject: [PATCH 1268/1295] final dialog add debug info delay --- home.admin/setup.scripts/controlFinalDialog.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/home.admin/setup.scripts/controlFinalDialog.sh b/home.admin/setup.scripts/controlFinalDialog.sh index 5d640263d..f5ad24b01 100755 --- a/home.admin/setup.scripts/controlFinalDialog.sh +++ b/home.admin/setup.scripts/controlFinalDialog.sh @@ -129,13 +129,16 @@ fi ######################################## # AFTER FINAL SETUP TASKS +# source info fresh +source /home/admin/raspiblitz.info + # make sure for future starts that blockchain service gets started after bootstrap # so deamon reloas needed ... system will go into reboot after last loop # needs to be after wait loop because otherwise the "restart" on COPY OVER LAN will not work echo "# Updating service ${network}d.service ..." sudo sed -i "s/^Wants=.*/Wants=bootstrap.service/g" /etc/systemd/system/${network}d.service sudo sed -i "s/^After=.*/After=bootstrap.service/g" /etc/systemd/system/${network}d.service -sudo systemctl daemon-reload +sudo systemctl daemon-reload 2>/dev/null # delete setup data from RAM sudo rm ${SETUPFILE} @@ -143,8 +146,7 @@ sudo rm ${SETUPFILE} # signal that setup phase is over sed -i "s/^setupPhase=.*/setupPhase='done'/g" /home/admin/raspiblitz.info -# source info fresh -source /home/admin/raspiblitz.info +sleep 2 clear echo "***********************************************************" echo "RaspiBlitz going to reboot" From 0d6b1ac9142bde9e5d04ee8a9f3e8887a2bc0d82 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 7 Oct 2021 13:10:16 +0200 Subject: [PATCH 1269/1295] backup old lnd.conf --- home.admin/_provision.update.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/home.admin/_provision.update.sh b/home.admin/_provision.update.sh index 5c46120cd..c8a458e77 100755 --- a/home.admin/_provision.update.sh +++ b/home.admin/_provision.update.sh @@ -179,6 +179,9 @@ if [ "${lightning}" == "lnd" ]; then configExists=$(sudo ls /mnt/hdd/lnd/lnd.conf | grep -c '.conf') if [ ${configExists} -eq 1 ]; then + # backup old lnd conf + sudo cp /mnt/hdd/lnd/lnd.conf /home/admin/lnd.conf.prebackup + # 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) From b8ffa0129a9ff21b480cd8713ade3386f24f19be Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 7 Oct 2021 13:17:11 +0200 Subject: [PATCH 1270/1295] default network to bitcoin --- home.admin/setup.scripts/controlFinalDialog.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/home.admin/setup.scripts/controlFinalDialog.sh b/home.admin/setup.scripts/controlFinalDialog.sh index f5ad24b01..a1261fb56 100755 --- a/home.admin/setup.scripts/controlFinalDialog.sh +++ b/home.admin/setup.scripts/controlFinalDialog.sh @@ -70,6 +70,7 @@ if [ "${gotSCB}" == "1" ]; then # check if its possible to give background info on the error notMachtingSeed=$(echo $error | grep -c 'unable to unpack chan backup') if [ ${notMachtingSeed} -gt 0 ]; then + echo "# FAIL Static-Channel-Backup: seed not machting file" >> /home/admin/raspiblitz.log echo "--> ERROR BACKGROUND:" echo "The WORD SEED is not matching the channel.backup file." echo "Either there was an error in the word seed list or" @@ -128,9 +129,18 @@ fi ######################################## # AFTER FINAL SETUP TASKS +echo "# AFTER FINAL SETUP TASKS" >> /home/admin/raspiblitz.log # source info fresh source /home/admin/raspiblitz.info +echo "# source /home/admin/raspiblitz.info" >> /home/admin/raspiblitz.log +cat /home/admin/raspiblitz.info >> /home/admin/raspiblitz.log + +# make sure network defaults to bitcoin +if [ "${network}" == "" ]; then + echo "# WARN: default network to bitcoin" >> /home/admin/raspiblitz.log + network="bitcoin" +fi # make sure for future starts that blockchain service gets started after bootstrap # so deamon reloas needed ... system will go into reboot after last loop @@ -156,6 +166,7 @@ echo "SSH again into system with:" echo "ssh admin@${localip}" echo "Use your password A" echo "***********************************************************" +echo "# final setup reboot ..." >> /home/admin/raspiblitz.log ######################################## # AFTER SETUP REBOOT From b9f207fcf3457c0beacf854d35bb5ffe52c50eff Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 7 Oct 2021 13:57:03 +0200 Subject: [PATCH 1271/1295] fix lnd config on migration --- home.admin/_provision.migration.sh | 4 ++++ home.admin/_provision.update.sh | 5 +++++ home.admin/config.scripts/lnd.check.sh | 2 +- home.admin/setup.scripts/controlFinalDialog.sh | 3 +++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/home.admin/_provision.migration.sh b/home.admin/_provision.migration.sh index f047bff82..2c9cd0ee3 100755 --- a/home.admin/_provision.migration.sh +++ b/home.admin/_provision.migration.sh @@ -45,6 +45,10 @@ if [ "${err}" != "" ]; then 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} + # set Password B echo "## SETTING PASSWORD B" >> ${logFile} if [ "${setPasswordB}" == "1" ]; then diff --git a/home.admin/_provision.update.sh b/home.admin/_provision.update.sh index c8a458e77..9ef50f61d 100755 --- a/home.admin/_provision.update.sh +++ b/home.admin/_provision.update.sh @@ -245,11 +245,16 @@ if [ "${lightning}" == "lnd" ]; then echo "WARN: /mnt/hdd/lnd/lnd.conf not found" >> ${logFile} fi + # backup old lnd conf + sudo cp /mnt/hdd/lnd/lnd.conf /home/admin/lnd.conf.prebackup2 + # start LND service echo "Starting LND Service ..." >> ${logFile} sudo systemctl enable lnd >> ${logFile} sudo systemctl start lnd >> ${logFile} + # backup old lnd conf + sudo cp /mnt/hdd/lnd/lnd.conf /home/admin/lnd.conf.prebackup3 elif [ "${lightning}" == "cl" ]; then diff --git a/home.admin/config.scripts/lnd.check.sh b/home.admin/config.scripts/lnd.check.sh index f4c7fc152..a4bdf5dbe 100755 --- a/home.admin/config.scripts/lnd.check.sh +++ b/home.admin/config.scripts/lnd.check.sh @@ -86,7 +86,7 @@ if [ "$1" == "prestart" ]; then # [bitcoind] sectionName="[Bb]itcoind" - if [ "${network}" != "bitcoin" ]; then + if [ "${network}" != "bitcoin" ] && [ "${network}" != "" ]; then sectionName="${network}d" fi echo "# [${sectionName}] config ..." diff --git a/home.admin/setup.scripts/controlFinalDialog.sh b/home.admin/setup.scripts/controlFinalDialog.sh index a1261fb56..598ba7639 100755 --- a/home.admin/setup.scripts/controlFinalDialog.sh +++ b/home.admin/setup.scripts/controlFinalDialog.sh @@ -9,6 +9,9 @@ source /home/admin/raspiblitz.info SETUPFILE="/var/cache/raspiblitz/temp/raspiblitz.setup" source ${SETUPFILE} +# make sure also admin user can write to log +sudo chmod 777 /home/admin/raspiblitz.log + ############################################ # SHOW SEED WORDS AFTER SETUP if [ "${lightning}" == "lnd" ]; then From 9726c25907954ae29a5adfe8023ff46828109ada Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 7 Oct 2021 14:32:07 +0200 Subject: [PATCH 1272/1295] set rights on lnd.conf --- home.admin/_provision.update.sh | 11 +++-------- home.admin/config.scripts/blitz.migration.sh | 5 +++++ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/home.admin/_provision.update.sh b/home.admin/_provision.update.sh index 9ef50f61d..348f269a1 100755 --- a/home.admin/_provision.update.sh +++ b/home.admin/_provision.update.sh @@ -179,8 +179,9 @@ if [ "${lightning}" == "lnd" ]; then configExists=$(sudo ls /mnt/hdd/lnd/lnd.conf | grep -c '.conf') if [ ${configExists} -eq 1 ]; then - # backup old lnd conf - sudo cp /mnt/hdd/lnd/lnd.conf /home/admin/lnd.conf.prebackup + # make sure correct file permisions are set + sudo chown bitcoin:bitcoin /mnt/hdd/lnd/lnd.conf + sudo 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} @@ -245,17 +246,11 @@ if [ "${lightning}" == "lnd" ]; then echo "WARN: /mnt/hdd/lnd/lnd.conf not found" >> ${logFile} fi - # backup old lnd conf - sudo cp /mnt/hdd/lnd/lnd.conf /home/admin/lnd.conf.prebackup2 - # start LND service echo "Starting LND Service ..." >> ${logFile} sudo systemctl enable lnd >> ${logFile} sudo systemctl start lnd >> ${logFile} - # backup old lnd conf - sudo cp /mnt/hdd/lnd/lnd.conf /home/admin/lnd.conf.prebackup3 - elif [ "${lightning}" == "cl" ]; then echo "Install C-lightning on update" >> ${logFile} diff --git a/home.admin/config.scripts/blitz.migration.sh b/home.admin/config.scripts/blitz.migration.sh index 25c4b86d3..757062704 100755 --- a/home.admin/config.scripts/blitz.migration.sh +++ b/home.admin/config.scripts/blitz.migration.sh @@ -68,6 +68,11 @@ migrate_lnd_conf () { # start from fresh configuration template (user will set password B on recovery) sudo cp /home/admin/assets/lnd.bitcoin.conf /mnt/hdd/lnd/lnd.conf sudo sed -i "s/^alias=.*/alias=${nodename}/g" /mnt/hdd/lnd/lnd.conf + + # make sure correct file permisions are set + sudo chown bitcoin:bitcoin /mnt/hdd/lnd/lnd.conf + sudo chmod 664 /mnt/hdd/lnd/lnd.conf + } migrate_raspiblitz_conf () { From 28af2ef41603d96dfe815c637ef9fbd5fa9a2372 Mon Sep 17 00:00:00 2001 From: sys-shock <84696243+sys-shock@users.noreply.github.com> Date: Thu, 7 Oct 2021 11:46:05 -0400 Subject: [PATCH 1273/1295] Update README.md (#2605) Adding detail about Tor response time --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 108a63051..48dd1ab12 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ RaspiBlitz is mainly targeted for learning how to run your own node decentralized from home - because: Not your Node, Not your Rules. Discover & develop the growing ecosystem of the Lightning Network by becoming a full part of it. Build it as part of a [workshop](WORKSHOP.md) or as a weekend project yourself. +__When you set up your Raspiblitz, you have the option to set it up over clearnet or Tor. Using Tor hides your IP address but will possibly increase the [time](https://twitter.com/SeverinAlexB/status/1442138426740981761) it will take for your node to route a payment. Setting up over clearnet will give you a lower response time when routing but your IP address will be freely availible to the rest of the network like the node [tippin.me](https://1ml.com/node/03c2abfa93eacec04721c019644584424aab2ba4dff3ac9bdab4e9c97007491dda). If you need to be private and/or don't want to doxx your home network then Tor might be the option for you. However if privacy isn't something you need and/or want, or you are trying to set up a service that your node is the back end for then clearnet might be more advantageous choice.__ + ## Feature Overview There are further Services that can be switched on: From af69799b7b0d7d5b4600437ab44f744668799f7c Mon Sep 17 00:00:00 2001 From: rootzoll Date: Thu, 7 Oct 2021 17:49:31 +0200 Subject: [PATCH 1274/1295] #2605 move info about tor time --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 48dd1ab12..530d17d68 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,6 @@ RaspiBlitz is mainly targeted for learning how to run your own node decentralized from home - because: Not your Node, Not your Rules. Discover & develop the growing ecosystem of the Lightning Network by becoming a full part of it. Build it as part of a [workshop](WORKSHOP.md) or as a weekend project yourself. -__When you set up your Raspiblitz, you have the option to set it up over clearnet or Tor. Using Tor hides your IP address but will possibly increase the [time](https://twitter.com/SeverinAlexB/status/1442138426740981761) it will take for your node to route a payment. Setting up over clearnet will give you a lower response time when routing but your IP address will be freely availible to the rest of the network like the node [tippin.me](https://1ml.com/node/03c2abfa93eacec04721c019644584424aab2ba4dff3ac9bdab4e9c97007491dda). If you need to be private and/or don't want to doxx your home network then Tor might be the option for you. However if privacy isn't something you need and/or want, or you are trying to set up a service that your node is the back end for then clearnet might be more advantageous choice.__ - ## Feature Overview There are further Services that can be switched on: @@ -483,6 +481,8 @@ But this can also come with the following side effects: * Some Mobile wallets don't support connecting to RaspiBlitz over Tor yet. * Lightning nodes that don't run Tor cannot reach you (like behind NAT). +*Using Tor hides your IP address but will possibly increase the [time](https://twitter.com/SeverinAlexB/status/1442138426740981761) it will take for your node to route a payment. Setting up over clearnet will give you a lower response time when routing but your IP address will be freely availible to the rest of the network like the node [tippin.me](https://1ml.com/node/03c2abfa93eacec04721c019644584424aab2ba4dff3ac9bdab4e9c97007491dda). If you need to be private and/or don't want to doxx your home network then Tor might be the option for you. However if privacy isn't something you need and/or want, or you are trying to set up a service that your node is the back end for then clearnet might be more advantageous choice.* + To try it out, just switch on the service - you can deactivate it later on if it's not working for you. ##### Parallel Testnet/Signet From 3990f45aeeef97f0203160309b45326463b017fe Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Fri, 8 Oct 2021 16:12:43 +0100 Subject: [PATCH 1275/1295] add clHTTPplugin with Fully noded connection (#2602) * add clHTTPplugin with Fully noded connection * clHTTPplugin: pin version to latest master * MOBILE:extend menu, install clHTTPplugin for FN_CL * spell out FULLYNODED in CONNECT --- home.admin/97addMobileWallet.sh | 52 +++++- home.admin/_provision_.sh | 9 + home.admin/config.scripts/bonus.lndconnect.sh | 10 +- home.admin/config.scripts/cl-plugin.http.sh | 169 ++++++++++++++++++ home.admin/config.scripts/cl.check.sh | 10 ++ .../config.scripts/cl.install-service.sh | 7 + 6 files changed, 253 insertions(+), 4 deletions(-) create mode 100644 home.admin/config.scripts/cl-plugin.http.sh diff --git a/home.admin/97addMobileWallet.sh b/home.admin/97addMobileWallet.sh index a6f6034cb..b3651c916 100755 --- a/home.admin/97addMobileWallet.sh +++ b/home.admin/97addMobileWallet.sh @@ -149,20 +149,22 @@ if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then OPTIONS+=(ZEUS_ANDROID "Zeus to LND (Android)") OPTIONS+=(SPHINX "Sphinx Chat to LND (Android/iOS)") OPTIONS+=(SENDMANY_ANDROID "SendMany to LND (Android)") + OPTIONS+=(FULLYNODED_LND "Fully Noded to LND REST (iOS+Tor)") fi if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then OPTIONS+=(ZEUS_CLREST "Zeus to C-lightningREST (Android or iOS)") OPTIONS+=(ZEUS_SPARK "Zeus to Sparko (Android or iOS)") OPTIONS+=(SPARK "Spark Wallet to Sparko (Android - EXPERIMENTAL)" ) + OPTIONS+=(FULLYNODED_CL "Fully Noded to CL REST (iOS+Tor)") fi # Additional Options with Tor if [ "${runBehindTor}" = "on" ]; then - OPTIONS+=(FULLY_NODED "Fully Noded (iOS+Tor)") + OPTIONS+=(FULLYNODED_BTC "Fully Noded to bitcoinRPC (iOS+Tor)") fi -CHOICE=$(whiptail --clear --title "Choose Mobile Wallet" --menu "" 14 75 8 "${OPTIONS[@]}" 2>&1 >/dev/tty) +CHOICE=$(whiptail --clear --title "Choose Mobile Wallet" --menu "" 16 75 10 "${OPTIONS[@]}" 2>&1 >/dev/tty) /home/admin/config.scripts/blitz.display.sh hide @@ -307,7 +309,8 @@ Or scan the qr code on the LCD with your mobile phone. /home/admin/config.scripts/bonus.lndconnect.sh zeus-android tor exit 0; ;; - FULLY_NODED) + + FULLYNODED_BTC) appstoreLink="https://apps.apple.com/us/app/fully-noded/id1436425586" /home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/app_fullynoded.png whiptail --title "Install Fully Noded on your iOS device" \ @@ -327,6 +330,49 @@ Or scan the qr code on the LCD with your mobile phone. exit 0; ;; + FULLYNODED_LND) + appstoreLink="https://apps.apple.com/us/app/fully-noded/id1436425586" + /home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/app_fullynoded.png + whiptail --title "Install Fully Noded on your iOS device" \ + --yes-button "Continue" \ + --no-button "StoreLink" \ + --yesno "Open the Apple App Store on your mobile phone.\n\nSearch for --> 'fully noded'\n\nCheck that logo is like on LCD and author is: Denton LLC\nWhen app is installed and started --> Continue." 12 65 + if [ $? -eq 1 ]; then + /home/admin/config.scripts/blitz.display.sh qr ${appstoreLink} + whiptail --title " App Store Link " --msgbox "\ +To install app open the following link:\n +${appstoreLink}\n +Or scan the qr code on the LCD with your mobile phone. +" 11 70 + fi + /home/admin/config.scripts/blitz.display.sh hide + /home/admin/config.scripts/bonus.lndconnect.sh fullynoded-lnd tor + exit 0; + ;; + + FULLYNODED_CL) + if [ ! -L /home/bitcoin/cl-plugins-enabled/c-lightning-http-plugin ];then + /home/admin/config.scripts/cl-plugin.http.sh on + fi + appstoreLink="https://apps.apple.com/us/app/fully-noded/id1436425586" + /home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/app_fullynoded.png + whiptail --title "Install Fully Noded on your iOS device" \ + --yes-button "Continue" \ + --no-button "StoreLink" \ + --yesno "Open the Apple App Store on your mobile phone.\n\nSearch for --> 'fully noded'\n\nCheck that logo is like on LCD and author is: Denton LLC\nWhen app is installed and started --> Continue." 12 65 + if [ $? -eq 1 ]; then + /home/admin/config.scripts/blitz.display.sh qr ${appstoreLink} + whiptail --title " App Store Link " --msgbox "\ +To install app open the following link:\n +${appstoreLink}\n +Or scan the qr code on the LCD with your mobile phone. +" 11 70 + fi + /home/admin/config.scripts/blitz.display.sh hide + /home/admin/config.scripts/cl-plugin.http.sh connect + exit 0; + ;; + ZEUS_CLREST) /home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/app_zeus.png whiptail --title "Install Zeus on your Android or iOS Phone" \ diff --git a/home.admin/_provision_.sh b/home.admin/_provision_.sh index 3af4fe43e..c4bbd605d 100755 --- a/home.admin/_provision_.sh +++ b/home.admin/_provision_.sh @@ -457,6 +457,15 @@ else echo "Provisioning Sparko - keep default" >> ${logFile} fi +# clHTTPplugin +if [ "${clHTTPplugin}" = "on" ]; then + echo "Provisioning clHTTPplugin - run config script" >> ${logFile} + sudo sed -i "s/^message=.*/message='Setup clHTTPplugin'/g" ${infoFile} + sudo -u admin /home/admin/config.scripts/cl-plugin.http.sh on >> ${logFile} 2>&1 +else + echo "Provisioning clHTTPplugin - keep default" >> ${logFile} +fi + # SPARK if [ "${spark}" = "on" ]; then echo "Provisioning Spark Wallet - run config script" >> ${logFile} diff --git a/home.admin/config.scripts/bonus.lndconnect.sh b/home.admin/config.scripts/bonus.lndconnect.sh index 62f087b83..a7255e8a1 100755 --- a/home.admin/config.scripts/bonus.lndconnect.sh +++ b/home.admin/config.scripts/bonus.lndconnect.sh @@ -4,7 +4,7 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo "# config script to connect mobile apps with lnd connect" echo "# will autodetect dyndns, sshtunnel or TOR" - echo "# bonus.lndconnect.sh [zap-ios|zap-android|zeus-ios|zeus-android|shango-ios|shango-android|sendmany-android] [?ip|tor]" + echo "# bonus.lndconnect.sh [zap-ios|zap-android|zeus-ios|zeus-android|shango-ios|shango-android|sendmany-android|fullynoded-lnd] [?ip|tor]" exit 1 fi @@ -126,6 +126,14 @@ elif [ "${targetWallet}" = "sendmany-android" ]; then port="${ip2torGRPC_PORT}" fi +elif [ "${targetWallet}" = "fullynoded-lnd" ]; then + + port="8080" + usingIP2TOR="LND-REST-API" + forceTOR=1 + host=$(sudo cat /mnt/hdd/tor/lndrest8080/hostname) + connectInfo="- start Fully Noded and go to:\n Settings' -> 'Node Manger' -> 'scan QR'" + else echo "error='unknown target wallet'" exit 1 diff --git a/home.admin/config.scripts/cl-plugin.http.sh b/home.admin/config.scripts/cl-plugin.http.sh new file mode 100644 index 000000000..7b9ca07d2 --- /dev/null +++ b/home.admin/config.scripts/cl-plugin.http.sh @@ -0,0 +1,169 @@ +#!/bin/bash + +# https://github.com/Start9Labs/c-lightning-http-plugin/commits/master +clHTTPpluginVersion="1dbb6537e0ec5fb9b8edde10db6b4cc613ccdb19" + +# command info +if [ $# -lt 1 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then + echo + echo "Install, remove, connect the c-lightning-http-plugin" + echo "version: $clHTTPpluginVersion" + echo "Implemented for mainnet only." + echo "Usage:" + echo "cl-plugin.http.sh [on|off|connect] " + echo + exit 1 +fi + +# source <(/home/admin/config.scripts/network.aliases.sh getvars cl ) +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-) + # https://github.com/rootzoll/raspiblitz/issues/2579#issuecomment-936091256 + # http://rpcuser:rpcpassword@xxx.onion:9080 + url="http://lightning:${PASSWORD_B}@${toraddress}:9080" + clear + echo + /home/admin/config.scripts/blitz.display.sh qr "${toraddress}" + echo " +Connect Fully Noded + +In Fully Noded go to 'Settings' > 'Node Manager' > +, from there you will be automatically prompted to add a node: + + 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: + ${toraddress}:9080" + + qrencode -t ANSIUTF8 "${toraddress}:9080" + + 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. +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. + +Find the most up-to-date version of this info at: +https://github.com/Fonta1n3/FullyNoded/blob/master/Docs/Lightning.md#connect-fully-noded +" + echo + echo "# Press enter to continue to show the full connection URL with all the info above" + read key + /home/admin/config.scripts/blitz.display.sh hide + /home/admin/config.scripts/blitz.display.sh qr "${url}" + clear + echo " +C-lightning connection URL code for Fully Noded: +The string shown is: +$url +" + qrencode -t ANSIUTF8 "${url}" + echo + echo "# Press enter to hide the QRcode from the LCD" + read key + /home/admin/config.scripts/blitz.display.sh hide + exit 0 +fi + +if [ "$1" = "on" ];then + + if [ $(cargo -V 2>/dev/null | grep -c cargo) -eq 0 ];then + echo + echo "# Installing Rust" + echo + # https://github.com/romanz/electrs/blob/master/doc/usage.md#build-dependencies + #sudo -u electrs curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sudo -u electrs sh -s -- --default-toolchain 1.39.0 -y + sudo apt update + sudo apt install -y cargo + fi + + 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 + 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 + echo + echo "# change CL REST port to 9080" + sudo sed -i "s/8080/9080/g" src/rpc.rs + echo + sudo -u bitcoin cargo build --release + sudo chmod a+x /home/bitcoin/cl-plugins-available/c-lightning-http-plugin/target/release/c-lightning-http-plugin + fi + + if [ ! -L /home/bitcoin/cl-plugins-enabled/c-lightning-http-plugin ];then + sudo ln -s /home/bitcoin/cl-plugins-available/c-lightning-http-plugin/target/release/c-lightning-http-plugin \ + /home/bitcoin/cl-plugins-enabled + fi + + ########## + # Config # + ########## + if ! grep -Eq "^http-pass=" ${CLCONF};then + echo "# Editing ${CLCONF}" + echo "# See: https://github.com/Fonta1n3/FullyNoded/blob/master/Docs/Lightning.md#setup-c-lightning-http-plugin" + PASSWORD_B=$(sudo cat /mnt/hdd/bitcoin/bitcoin.conf | grep rpcpassword | cut -c 13-) + 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 + + # setting value in raspi blitz config + sudo sed -i "s/^clHTTPplugin=.*/clHTTPplugin=on/g" /mnt/hdd/raspiblitz.conf + + source /home/admin/raspiblitz.info + if [ "${state}" == "ready" ] && [ "$2" != "norestart" ]; then + echo "# Restart the lightningd.service to activate clHTTPplugin" + sudo systemctl restart lightningd + fi + + echo "# clHTTPplugin was installed" + echo "# Monitor with:" + echo "sudo journalctl | grep clHTTPplugin | tail -n5" + echo "sudo tail -n 100 -f /home/bitcoin/.lightning/${CLNETWORK}/cl.log | grep clHTTPplugin" + +fi + +if [ "$1" = "off" ];then + # delete symlink + sudo rm -rf /home/bitcoin/cl-plugins-enabled/c-lightning-http-plugin + + echo "# Editing ${CLCONF}" + sudo sed -i "/^http-pass/d" ${CLCONF} + + echo "# Restart the lightningd.service to deactivate clHTTPplugin" + sudo systemctl restart lightningd + + /home/admin/config.scripts/internet.hiddenservice.sh off clHTTPplugin + + # purge + if [ "$(echo "$@" | grep -c purge)" -gt 0 ];then + echo "# Delete plugin" + 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 + echo "# clHTTPplugin was uninstalled" + +fi diff --git a/home.admin/config.scripts/cl.check.sh b/home.admin/config.scripts/cl.check.sh index 2c9c97fed..ee813ca36 100644 --- a/home.admin/config.scripts/cl.check.sh +++ b/home.admin/config.scripts/cl.check.sh @@ -29,6 +29,16 @@ if [ $(grep -c "^sparko" < ${CLCONF}) -gt 0 ];then fi fi +if [ $(grep -c "^http-pass" < ${CLCONF}) -gt 0 ];then + if [ ! -f /home/bitcoin/cl-plugins-enabled/c-lightning-http-plugin ]\ + || [ "${clHTTPplugin}" != "on" ]; 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 + fi +fi + if [ $(grep -c "^feeadjuster" < ${CLCONF}) -gt 0 ];then if [ ! -f /home/bitcoin/${netprefix}cl-plugins-enabled/feeadjuster.py ]\ || [ "$(eval echo \$${netprefix}feeadjuster)" != "on" ]; then diff --git a/home.admin/config.scripts/cl.install-service.sh b/home.admin/config.scripts/cl.install-service.sh index 8487a4edd..f1a96a7c1 100644 --- a/home.admin/config.scripts/cl.install-service.sh +++ b/home.admin/config.scripts/cl.install-service.sh @@ -20,6 +20,13 @@ if [ $(sudo -u bitcoin cat ${CLCONF} | grep -c "^sparko") -gt 0 ];then fi fi +if [ $(sudo -u bitcoin cat ${CLCONF} | grep -c "^http-pass") -gt 0 ];then + if [ ! -f /home/bitcoin/cl-plugins-enabled/c-lightning-http-plugin ]; then + echo "# The clHTTPplugin is not present but in config" + /home/admin/config.scripts/cl-plugin.http.sh on norestart + fi +fi + if [ $(sudo -u bitcoin cat ${CLCONF} | grep -c "^feeadjuster") -gt 0 ];then if [ ! -f /home/bitcoin/${netprefix}cl-plugins-enabled/feeadjuster.py ];then echo "# The feeadjuster plugin is not present but in config" From df57bb39ed2d6c5a870a1cb6943232ecbc5bdab9 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 8 Oct 2021 23:12:12 +0200 Subject: [PATCH 1276/1295] v1.7.1rc3 link --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 530d17d68..ca663a808 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ *Build your own Lightning & Bitcoin Fullnode on a RaspberryPi with a nice Display.* -`Version 1.7.1rc2 with lnd 0.13.3 & c-lightning 0.10.0 and bitcoin 22.0.0` +`Version 1.7.1rc3 with lnd 0.13.3 & c-lightning 0.10.0 and bitcoin 22.0.0` ![RaspiBlitz](pictures/raspiblitz.jpg) @@ -113,7 +113,7 @@ In the end your RaspiBlitz should look like this: |Philosophy|Trust|Sovereignty| |Difficulty level|Easy|Medium| |Pros|Make Blitz accessible to everyone|You don't need to trust us, build from your own forked repository| -|Instructions|[Download 1.7.1RC2 image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.1rc2-2021-09-23.img.gz) and [Flash the sd card](README.md#write-the-sd-card-image-to-your-sd-card)|[Build your own sd card image](#build-the-sd-card-image)| +|Instructions|[Download 1.7.1RC3 image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.1rc3-2021-10-08.img.gz) and [Flash the sd card](README.md#write-the-sd-card-image-to-your-sd-card)|[Build your own sd card image](#build-the-sd-card-image)| |Verify what?|[Signature file - only for final release]() and [verify the Sig](FAQ.md#how-to-verify-the-sd-card-image-after-download) OR SHA-256 (below)|All of the code, don't trust, verify| If downloading the maintainer sd card image: From 6e4e55a9b92ea60976acacb110a7c92b5ccde632 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Fri, 8 Oct 2021 23:19:11 +0200 Subject: [PATCH 1277/1295] update hash rc3 image --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ca663a808..0067e0cb8 100644 --- a/README.md +++ b/README.md @@ -118,7 +118,7 @@ In the end your RaspiBlitz should look like this: If downloading the maintainer sd card image: * GPG 64-bit: 1C73 060C 7C17 6461 -* SHA-256: 4c857203c927951248a15b71d3c3a64e34b033f7c55674ab8dacdcab7e38f778 +* SHA-256: f231c73f7b5e2b378db97512029edcca7d261bf919a474b9e9caec10842d6165 Which verification method should I used: Hash or Signature? * Signed file prove to you that the SD card image was actually built by the lead developer of the RaspiBlitz project. (Safest) From 31d6ef9e34207195f55ab4a5b28a157186f996a6 Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Sat, 9 Oct 2021 22:00:37 +0100 Subject: [PATCH 1278/1295] cl.setname: fix detection of CLCONF, clean #2608 --- home.admin/config.scripts/cl.setname.sh | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/home.admin/config.scripts/cl.setname.sh b/home.admin/config.scripts/cl.setname.sh index ef0dd5796..662331aa6 100644 --- a/home.admin/config.scripts/cl.setname.sh +++ b/home.admin/config.scripts/cl.setname.sh @@ -32,25 +32,22 @@ fi # config file blitzConfig="/mnt/hdd/raspiblitz.conf" -# cl conf file -clConfig="${CLCONF}" - # check if raspiblitz config file exists if [ ! -f ${blitzConfig} ]; then - echo "FAIL - missing ${blitzConfig}" - exit 1 + echo "FAIL - missing ${blitzConfig}" + exit 1 fi # check if cl config file exists -if sudo ls ${clConfig}; then - echo "FAIL - missing ${clConfig}" - exit 1 +if ! sudo ls ${CLCONF}; then + echo "FAIL - missing ${CLCONF}" + exit 1 fi # make sure entry line for 'alias' exists -entryExists=$(cat ${clConfig} | grep -c "alias=") +entryExists=$(cat ${CLCONF} | grep -c "alias=") if [ ${entryExists} -eq 0 ]; then - echo "alias=" >> ${clConfig} + echo "alias=" >> ${CLCONF} fi # stop services @@ -58,7 +55,7 @@ echo "making sure services are not running" sudo systemctl stop ${netprefix}lightningd 2>/dev/null # config: change name -sudo sed -i "s/^alias=.*/alias=${newName}/g" ${clConfig} +sudo sed -i "s/^alias=.*/alias=${newName}/g" ${CLCONF} source /home/admin/raspiblitz.info if [ "${state}" == "ready" ]; then From 565e914a9939ecd57b5c7ad85c37e6b4f80b91a9 Mon Sep 17 00:00:00 2001 From: openoms Date: Sun, 10 Oct 2021 09:41:40 +0100 Subject: [PATCH 1279/1295] FAQ.cl: extend custom plugin notes --- FAQ.cl.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/FAQ.cl.md b/FAQ.cl.md index 695933077..dd57b4586 100644 --- a/FAQ.cl.md +++ b/FAQ.cl.md @@ -237,19 +237,22 @@ or with the alias: `cllog` * clboss ### Add a custom plugin -* The easiest way is to place the plugin in the -`/home/bitcoin/cl-plugins-enabled` -directory and start with +* Place the plugin in the `/home/bitcoin/cl-plugins-enabled` directory +* Make sure it is owned by the `bitcoin` user and is executable: + ``` + sudo chown bitcoin:bitcoin /home/bitcoin/cl-plugins-enabled/PLUGIN_NAME + sudo chmod +x /home/bitcoin/cl-plugins-enabled/PLUGIN_NAME + ``` +* start with ``` lightnign-cli plugin start /home/bitcoin/cl-plugins-enabled/PLUGIN_NAME ``` - or restart C-ligthning with: +* or to load it automatically on restart: ``` sudo systemctl restart lightningd ``` - to have it loaded automatically. - From that directory it will load auomatically after restarts. - To just load it run it once store in: + From the directory `/home/bitcoin/cl-plugins-enabled` it will load auomatically after restarts. +* To just load it run it once store in (and start from): `/home/bitcoin/cl-plugins-available/` ### CLBOSS From 5f0760dcfa268138907297e71c85c6e29e8d55eb Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 10 Oct 2021 10:43:38 +0200 Subject: [PATCH 1280/1295] fix password c error on setup --- home.admin/setup.scripts/controlSetupDialog.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.admin/setup.scripts/controlSetupDialog.sh b/home.admin/setup.scripts/controlSetupDialog.sh index dc22f062a..54b50d5f5 100755 --- a/home.admin/setup.scripts/controlSetupDialog.sh +++ b/home.admin/setup.scripts/controlSetupDialog.sh @@ -94,6 +94,7 @@ if [ "${setupPhase}" == "setup" ]; then # menu RECOVER menu option if [ "${menuresult}" == "4" ]; then setupPhase="${orgSetupPhase}" + sudo sed -i "s/^setupPhase=.*/setupPhase='${setupPhase}'/g" /home/admin/raspiblitz.info # proceed with provision (mark Password A to be set) echo "# OK update process starting .." echo "setPasswordA=1" >> $SETUPFILE @@ -102,6 +103,7 @@ if [ "${setupPhase}" == "setup" ]; then # menu MIGRATE menu option if [ "${menuresult}" == "5" ]; then setupPhase="${orgSetupPhase}" + sudo sed -i "s/^setupPhase=.*/setupPhase='${setupPhase}'/g" /home/admin/raspiblitz.info # mark migration to happen on provision echo "migrationOS='${hddGotMigrationData}'" >> $SETUPFILE # user needs to reset password A, B & C From 3a7409033ba6ac6311139d18d2aac704bb1ca25a Mon Sep 17 00:00:00 2001 From: openoms Date: Sun, 10 Oct 2021 10:50:23 +0100 Subject: [PATCH 1281/1295] electrs: fix rust installation #2548 --- home.admin/config.scripts/bonus.electrs.sh | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/home.admin/config.scripts/bonus.electrs.sh b/home.admin/config.scripts/bonus.electrs.sh index 311c029be..d224e6a08 100755 --- a/home.admin/config.scripts/bonus.electrs.sh +++ b/home.admin/config.scripts/bonus.electrs.sh @@ -268,12 +268,10 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then cd /home/electrs echo - echo "# Installing Rust" + echo "# Installing Rust for the electrs user" echo # https://github.com/romanz/electrs/blob/master/doc/usage.md#build-dependencies - #sudo -u electrs curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sudo -u electrs sh -s -- --default-toolchain 1.39.0 -y - sudo apt update - sudo apt install -y cargo + sudo -u electrs curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sudo -u electrs sh -s -- --default-toolchain none -y sudo apt install -y clang cmake build-essential # for building 'rust-rocksdb' echo @@ -283,7 +281,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then cd /home/electrs/electrs || exit 1 sudo -u electrs git reset --hard $ELECTRSVERSION - sudo -u electrs cargo build --locked --release || exit 1 + sudo -u electrs /home/electrs/.cargo/bin/cargo build --locked --release || exit 1 echo echo "# The electrs database will be built in /mnt/hdd/app-storage/electrs/db. Takes ~18 hours and ~50Gb diskspace" From 7a1ec283d2e4128c98550680f96cf8f829798c39 Mon Sep 17 00:00:00 2001 From: openoms Date: Sun, 10 Oct 2021 10:54:49 +0100 Subject: [PATCH 1282/1295] cl-plugin.http: fix rust installation #2579 --- home.admin/config.scripts/cl-plugin.http.sh | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/home.admin/config.scripts/cl-plugin.http.sh b/home.admin/config.scripts/cl-plugin.http.sh index 7b9ca07d2..100c4a59b 100644 --- a/home.admin/config.scripts/cl-plugin.http.sh +++ b/home.admin/config.scripts/cl-plugin.http.sh @@ -82,15 +82,10 @@ fi if [ "$1" = "on" ];then - if [ $(cargo -V 2>/dev/null | grep -c cargo) -eq 0 ];then - echo - echo "# Installing Rust" - echo - # https://github.com/romanz/electrs/blob/master/doc/usage.md#build-dependencies - #sudo -u electrs curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sudo -u electrs sh -s -- --default-toolchain 1.39.0 -y - sudo apt update - sudo apt install -y cargo - fi + echo + echo "# Installing Rust for the bitcoin user" + echo + sudo -u bitcoin curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sudo -u bitcoin sh -s -- -y if [ ! -f /home/bitcoin/cl-plugins-available/c-lightning-http-plugin ];then sudo -u bitcoin mkdir /home/bitcoin/cl-plugins-available @@ -102,7 +97,7 @@ if [ "$1" = "on" ];then echo "# change CL REST port to 9080" sudo sed -i "s/8080/9080/g" src/rpc.rs echo - sudo -u bitcoin cargo build --release + sudo -u bitcoin /home/bitcoin/.cargo/bin/cargo build --release sudo chmod a+x /home/bitcoin/cl-plugins-available/c-lightning-http-plugin/target/release/c-lightning-http-plugin fi From 92411e7b5ed3c697edd36f5cd8930346edc7662d Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 10 Oct 2021 13:02:02 +0200 Subject: [PATCH 1283/1295] mute debug error --- home.admin/00raspiblitz.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 6cca97d2e..8b38499e1 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -129,7 +129,7 @@ do fi # load statusscan results - source /var/cache/raspiblitz/raspiblitz.status + source /var/cache/raspiblitz/raspiblitz.status 2>/dev/null ##################################### # ALWAYS: Handle System States From dc49f922dcec0fd328307783559fb9b4937e8976 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 10 Oct 2021 19:34:03 +0200 Subject: [PATCH 1284/1295] add info link on seuz --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index f546b483e..dd0617663 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,7 +8,7 @@ - New: CL plugin: Sparko [details](https://github.com/fiatjaf/sparko) - New: CL plugin: CLBOSS The C-Lightning Node Manager [details](https://github.com/ZmnSCPxj/clboss#clboss-the-c-lightning-node-manager) - New: Refactored Setup-Process [details](https://github.com/rootzoll/raspiblitz/issues/1126#issuecomment-829757665) -- New: Suez - channel visualization for LND and CL [details](https://github.com/prusnak/suez) +- New: Suez - channel visualization for LND and CL [info](https://github.com/rootzoll/raspiblitz/issues/2366#issuecomment-939521302)[details](https://github.com/prusnak/suez) - New: LND Static Channel Backup to Nextcloud - New: Allow SphinxApp to connect over Tor - New: Parallel TESTNET & SIGNET services From 592801e91a647903f5fbf568361ba4be39ee18ca Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 10 Oct 2021 23:49:11 +0200 Subject: [PATCH 1285/1295] fix btc-rpc-explorer config dir --- home.admin/config.scripts/bonus.btc-rpc-explorer.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/home.admin/config.scripts/bonus.btc-rpc-explorer.sh b/home.admin/config.scripts/bonus.btc-rpc-explorer.sh index e90e04c7a..0e3911a18 100755 --- a/home.admin/config.scripts/bonus.btc-rpc-explorer.sh +++ b/home.admin/config.scripts/bonus.btc-rpc-explorer.sh @@ -239,6 +239,7 @@ BTCEXP_BASIC_AUTH_PASSWORD=$PASSWORD_B BTCEXP_ADDRESS_API=none BTCEXP_ELECTRUMX_SERVERS=tcp://127.0.0.1:50001 EOF + sudo -u btcrpcexplorer mkdir /home/btcrpcexplorer/.config sudo mv /home/admin/btc-rpc-explorer.env /home/btcrpcexplorer/.config/btc-rpc-explorer.env sudo chown btcrpcexplorer:btcrpcexplorer /home/btcrpcexplorer/.config/btc-rpc-explorer.env From 1019a6551bbcc9ab9a12cdadba1ad463e8a607c5 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 11 Oct 2021 00:52:44 +0200 Subject: [PATCH 1286/1295] #2488 add documentation on feature --- FAQ.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/FAQ.md b/FAQ.md index 2f51152f2..078fa8d57 100644 --- a/FAQ.md +++ b/FAQ.md @@ -957,3 +957,8 @@ If you can login into your local internet router it should show you the IP addre Another way is to use [Angry IP Scanner](https://angryip.org/) to find the IP address. You can also put an empty file just called `hdmi` (without any ending) onto the sd card when connected to your laptop and then start it up on the RaspberryPi. This will activate the HDMI port and if you connect a HDMI monitor to the RaspberryPi it will show you the RaspiBlitz status screen containing the local IP address. + +## How can I enforce UASP mode for my SSD controller? + +By default just tested & selected SSD encasings/controller are running enabled with UASP in RaspiBlitz. UASP brings a speed up for the SSD but also if not well supported by the SSD encasing/controller can lead to system halts. If you know for sure that your SSD encasing/controller is supporting UASP fully you can place a file called `uasp.force` on the sd card boot section after flashing the image with your laptop. See details or report errors on issue [#2488](https://github.com/rootzoll/raspiblitz/issues/2488) + From 4ead6f00d0d53beaeab5bb7209cb854dd5195f34 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 11 Oct 2021 01:05:03 +0200 Subject: [PATCH 1287/1295] #2448 add documentation in scp SCB backup --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index 0067e0cb8..0b002a2a6 100644 --- a/README.md +++ b/README.md @@ -543,6 +543,18 @@ Nextcloud is an open-source project to host your own files: https://en.wikipedia You can connect a small extra USB drive to your RaspiBlitz (choose a small one up to 32GB - don't use second HDD or SSD here, that would drain too much power from the RaspiBlitz). On that USB drive your latest StaticChannelBackup will be stored - just in case your HDD gets an error. +##### StaticChannelBackup per SCP/SSH to other server + +An option for more advanced users that you only can set directly in the `raspiblitz.conf` is the automated backup of the Static Channel Backup to another server per SSH/SCP. For this you need to set the value: + +`scpBackupTarget='[USER]@[SERVER]:[DIRPATH-WITHOUT-ENDING-/]'` + +and you can optionally set custom options for the scp command (for example to set a non-default port) with: + +`scpBackupOptions='[YOUR-CUSTOM-OPTIONS]'` + +On target server add the root ssh public key of your RaspiBlitz to the authorized_keys for the user - how to do this see: https://www.linode.com/docs/security/authentication/use-public-key-authentication-with-ssh/ + ##### C-LIGHTNING NODE This needs to switched on to see the sub-settings options for c-lightning. If switched on it means the c-lighting node implementation is installed and running on your RaspiBlitz - it can run in parallel to LND. If activated you will find an additional option in the SSH Main Menu that offers you more options to operate the c-lightning node. Also under `SERVICES` some apps might just be available if c-lightning is activated. From f8ee4896f2a0c838c8ac1fd3fb5b53b8dfa6f12f Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 11 Oct 2021 14:39:24 +0100 Subject: [PATCH 1288/1295] cl.backup: read key on BACKUP and improve output --- home.admin/99clRepairMenu.sh | 6 ++++++ home.admin/config.scripts/cl.backup.sh | 3 +-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/home.admin/99clRepairMenu.sh b/home.admin/99clRepairMenu.sh index 39e88fd22..eb88a29e4 100644 --- a/home.admin/99clRepairMenu.sh +++ b/home.admin/99clRepairMenu.sh @@ -77,6 +77,9 @@ case $CHOICE in /home/admin/config.scripts/cl.backup.sh cl-export-gui production $_temp source $_temp 2>/dev/null sudo rm $_temp 2>/dev/null + echo + echo "Press ENTER when finished downloading." + read key ;; RESET) @@ -89,6 +92,7 @@ case $CHOICE in sudo rm $_temp 2>/dev/null echo echo "The rescue file is stored on the SDcard named cl-rescue.*.tar.gz just in case." + echo echo "The next step will overwrite the old C-lighthning $CHAIN wallet" echo "Press ENTER to continue or CTRL+C to abort" read key @@ -126,6 +130,7 @@ case $CHOICE in sudo rm $_temp 2>/dev/null echo echo "The rescue file is stored on the SDcard named cl-rescue.*.tar.gz just in case." + echo echo "The next step will overwrite the old C-lighthning $CHAIN wallet" echo "Press ENTER to continue or CTRL+C to abort" read key @@ -150,6 +155,7 @@ case $CHOICE in sudo rm $_temp 2>/dev/null echo echo "The rescue file is stored on the SDcard named cl-rescue.*.tar.gz just in case." + echo echo "The next step will overwrite the old C-lighthning $CHAIN wallet" echo "Press ENTER to continue or CTRL+C to abort" read key diff --git a/home.admin/config.scripts/cl.backup.sh b/home.admin/config.scripts/cl.backup.sh index 5027c31d2..bf827591a 100644 --- a/home.admin/config.scripts/cl.backup.sh +++ b/home.admin/config.scripts/cl.backup.sh @@ -81,8 +81,7 @@ if [ ${mode} = "cl-export" ]; then fi if [ ${mode} = "cl-export-gui" ]; then - - # create lnd rescue file + echo "# Create the CL rescue file ..." source <(/home/admin/config.scripts/cl.backup.sh cl-export) if [ "${error}" != "" ]; then echo "error='${error}'" From 1812e0625860abeb1ad3560e98d480dcbde1a8d7 Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 11 Oct 2021 14:49:06 +0100 Subject: [PATCH 1289/1295] FAQ.cl: answers to some common questions --- FAQ.cl.md | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/FAQ.cl.md b/FAQ.cl.md index dd57b4586..2fbe4278b 100644 --- a/FAQ.cl.md +++ b/FAQ.cl.md @@ -1,6 +1,11 @@ # C-lightning on the RaspiBlitz FAQ +- [Common questions about the different Lightning Network implementations](#common-questions-about-the-different-lightning-network-implementations) + - [Can LND and C-lightning nodes open channels to each other and route payments?](#can-lnd-and-c-lightning-nodes-open-channels-to-each-other-and-route-payments) + - [Can I run LND and C-lightning connected to the same node?](#can-i-run-lnd-and-c-lightning-connected-to-the-same-node) + - [Can I convert an LND node to C-lightning (or the opposite)?](#can-i-convert-an-lnd-node-to-c-lightning-or-the-opposite) + - [Is there a table to quickly compare LND and C-Lightning?](#is-there-a-table-to-quickly-compare-lnd-and-c-lightning) - [C-lightning official documentation](#c-lightning-official-documentation) - [Commands and aliases](#commands-and-aliases) - [Directories](#directories) @@ -24,13 +29,31 @@ - [Testnets](#testnets) - [Backups](#backups) - [Seed](#seed) + - [How to display the hsm_secret in a human-readable format?](#how-to-display-the-hsm_secret-in-a-human-readable-format) - [Channel database](#channel-database) - [Recovery](#recovery) - [Script file help list](#script-file-help-list) +--- +## Common questions about the different Lightning Network implementations + +### Can LND and C-lightning nodes open channels to each other and route payments? +* Yes, all [BOLT specification](https://github.com/lightningnetwork/lightning-rfc) compliant implementations can open channels to each other and route payments. + +### Can I run LND and C-lightning connected to the same node? +* Yes, both can run parallel on a RaspiBlitz and even have channels witch each other. + +### Can I convert an LND node to C-lightning (or the opposite)? +* No, currently there are no tools available to convert between the databases storing the channel states. +The channels would need to be closed to use the same funds in an other node. + +### Is there a table to quickly compare LND and C-Lightning? +* see [github.com/openoms/lightning-node-management/blob/master/node-types/comparison.md](https://github.com/openoms/lightning-node-management/blob/master/node-types/comparison.md) + +--- + ## C-lightning official documentation * https://lightning.readthedocs.io/ -* the lightningd is built by deafult with ## Commands and aliases @@ -532,7 +555,14 @@ Will need to pay through a peer which supports the onion messages which means yo * https://lightning.readthedocs.io/FAQ.html#how-to-backup-my-wallet * General details: https://lightning.readthedocs.io/BACKUP.html ### Seed -- +### How to display the hsm_secret in a human-readable format? +* If there is no seed available it isbest is to save the hsm_secret as a file with `scp`. To display as text: + ``` + sudo cat /home/bitcoin/.lightning/bitcoin/hsm_secret | xxd + ``` + + + ### Channel database * From eeaebc4b1c9a8182ac7ed110a07aaf974e754771 Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 11 Oct 2021 21:43:03 +0100 Subject: [PATCH 1290/1295] cl.spark: fix babel dependency #2584 --- home.admin/config.scripts/cl.spark.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/home.admin/config.scripts/cl.spark.sh b/home.admin/config.scripts/cl.spark.sh index 75c02e7db..716db69b6 100644 --- a/home.admin/config.scripts/cl.spark.sh +++ b/home.admin/config.scripts/cl.spark.sh @@ -18,7 +18,6 @@ fi source <(/home/admin/config.scripts/network.aliases.sh getvars cl $2) systemdService="${netprefix}spark" - # show info menu if [ "$1" = "menu" ]; then @@ -81,6 +80,7 @@ if [ $1 = on ];then sudo -u bitcoin git clone https://github.com/shesek/spark-wallet cd spark-wallet || exit 1 sudo -u bitcoin git reset --hard ${SPARKVERSION} || exit 1 + sudo -u bitcoin npm install @babel/cli sudo -u bitcoin npm run dist:npm || exit 1 if [ ! -f /home/bitcoin/.spark-wallet/tls/key.pem ];then @@ -171,8 +171,8 @@ if [ $1 = off ];then # purge if [ "$(echo "$@" | grep -c purge)" -gt 0 ];then - echo "# Delete user and home directory" - /home/bitcoin/spark-wallet + echo "# Delete user and home directory" + sudo rm -rf /home/bitcoin/spark-wallet fi # setting value in raspi blitz config sudo sed -i "s/^${netprefix}spark=.*/${netprefix}spark=off/g" /mnt/hdd/raspiblitz.conf From 323ad1714d219285c8c86692f1f2cac9ed6ccd79 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 12 Oct 2021 00:05:20 +0200 Subject: [PATCH 1291/1295] prepeare v1.7.1 versioning --- home.admin/_version.info | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_version.info b/home.admin/_version.info index a1776e507..91e469bb3 100644 --- a/home.admin/_version.info +++ b/home.admin/_version.info @@ -1,2 +1,2 @@ # RaspiBlitz Version - always [major].[main].[sub] (sub can be a string like '2rc1') -codeVersion="1.7.1rc3" +codeVersion="1.7.1" From 3cdeebfd34ab82e312fb721bd992658dd86a5e57 Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 11 Oct 2021 23:47:47 +0100 Subject: [PATCH 1292/1295] cl.spark: correct purge message --- home.admin/config.scripts/cl.spark.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/cl.spark.sh b/home.admin/config.scripts/cl.spark.sh index 716db69b6..483718efd 100644 --- a/home.admin/config.scripts/cl.spark.sh +++ b/home.admin/config.scripts/cl.spark.sh @@ -171,7 +171,7 @@ if [ $1 = off ];then # purge if [ "$(echo "$@" | grep -c purge)" -gt 0 ];then - echo "# Delete user and home directory" + echo "# Delete install directory" sudo rm -rf /home/bitcoin/spark-wallet fi # setting value in raspi blitz config From facf84374c0c6d702cfcbc64497e1dd6dd080ee6 Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 11 Oct 2021 23:48:58 +0100 Subject: [PATCH 1293/1295] 99clRepairMenu: fix restore from seed #2295 --- home.admin/99clRepairMenu.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/99clRepairMenu.sh b/home.admin/99clRepairMenu.sh index eb88a29e4..c94588a02 100644 --- a/home.admin/99clRepairMenu.sh +++ b/home.admin/99clRepairMenu.sh @@ -166,8 +166,8 @@ case $CHOICE in # import seed _temp="/var/cache/raspiblitz/.temp.tmp" /home/admin/config.scripts/cl.backup.sh seed-import-gui $_temp - /home/admin/config.scripts/cl.hsmtool.sh seed "$CHAIN" "$(cat $_temp)" - source $_temp 2>/dev/null + source $_temp + /home/admin/config.scripts/cl.hsmtool.sh seed-force "$CHAIN" "${seedWords}" sudo rm $_temp 2>/dev/null # regenerate config /home/admin/config.scripts/cl.hsmtool.sh autounlock-off From bc0c8ab7e8610c98d81db0c8a38e5e18a01d2e52 Mon Sep 17 00:00:00 2001 From: openoms Date: Mon, 11 Oct 2021 23:50:54 +0100 Subject: [PATCH 1294/1295] 99clMenu: consistent naming of REPAIR-CL --- home.admin/99clMenu.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/99clMenu.sh b/home.admin/99clMenu.sh index 54e2f18cf..1e8a0e9ce 100644 --- a/home.admin/99clMenu.sh +++ b/home.admin/99clMenu.sh @@ -33,7 +33,7 @@ if [ ${#openChannels} -gt 0 ] && [ ${openChannels} -gt 0 ]; then fi OPTIONS+=(CASHOUT "Withdraw all funds onchain ($CHAIN)") OPTIONS+=(SEED "Show Wallet Seed Words") - OPTIONS+=(CLREPAIR "Repair options for C-lightning") + OPTIONS+=(REPAIR-CL "Repair options for C-lightning") if [ "${lightning}" != "cl" ] && [ "${CHAIN}" == "mainnet" ]; then OPTIONS+=(SWITCHLN "Use C-lightning as default") fi @@ -101,7 +101,7 @@ case $CHOICE in echo "Press ENTER to return to main menu." read key ;; - CLREPAIR) + REPAIR-CL) /home/admin/99clRepairMenu.sh $CHAIN ;; SWITCHLN) From 6f28510015aa6b00b62d0560549b034b4304a301 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 12 Oct 2021 01:07:07 +0200 Subject: [PATCH 1295/1295] Prepare README for v1.7.1 --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0b002a2a6..e939a30f4 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ *Build your own Lightning & Bitcoin Fullnode on a RaspberryPi with a nice Display.* -`Version 1.7.1rc3 with lnd 0.13.3 & c-lightning 0.10.0 and bitcoin 22.0.0` +`Version 1.7.1 with lnd 0.13.3 & c-lightning 0.10.0 and bitcoin 22.0.0` ![RaspiBlitz](pictures/raspiblitz.jpg) @@ -107,18 +107,19 @@ In the end your RaspiBlitz should look like this: ## Downloading the Software +*PLEASE WAIT SOME MORE HOURS .. NEW RELEASE 1.7.1 IMAGE WILL BE POROVIDED VERY SOON* |Method|Install the image|Build the sd card| |------|-----------------|-----------------| |Philosophy|Trust|Sovereignty| |Difficulty level|Easy|Medium| |Pros|Make Blitz accessible to everyone|You don't need to trust us, build from your own forked repository| -|Instructions|[Download 1.7.1RC3 image](https://raspiblitz.fulmo.org/images/raspiblitz-v1.7.1rc3-2021-10-08.img.gz) and [Flash the sd card](README.md#write-the-sd-card-image-to-your-sd-card)|[Build your own sd card image](#build-the-sd-card-image)| -|Verify what?|[Signature file - only for final release]() and [verify the Sig](FAQ.md#how-to-verify-the-sd-card-image-after-download) OR SHA-256 (below)|All of the code, don't trust, verify| +|Instructions|(NEW IMAGE WILL BE RELEASED SHORTLY) and [Flash the sd card](README.md#write-the-sd-card-image-to-your-sd-card)|[Build your own sd card image](#build-the-sd-card-image)| +|Verify what?|[Signature file]() and [verify the Sig](FAQ.md#how-to-verify-the-sd-card-image-after-download) OR SHA-256 (below)|All of the code, don't trust, verify| If downloading the maintainer sd card image: * GPG 64-bit: 1C73 060C 7C17 6461 -* SHA-256: f231c73f7b5e2b378db97512029edcca7d261bf919a474b9e9caec10842d6165 +* SHA-256: (please wait) Which verification method should I used: Hash or Signature? * Signed file prove to you that the SD card image was actually built by the lead developer of the RaspiBlitz project. (Safest)

k1FmYI=Br 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 diff --git a/pictures/update.png b/pictures/update.png index ebf3a5c0776dc5d7f6e89ebfe78a6e8d7550c973..64a059cbe9be67bf252438c1ba78ebab7599e66e 100644 GIT binary patch literal 34480 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 literal 96885 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∈&O}_5}^-2U%5o6*zlu}fZ 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