Browse Source

Merge pull request #11 from rootzoll/master

Tor fix
dev
bluecell296 6 years ago
committed by GitHub
parent
commit
738ed075f3
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 55
      FAQ.md
  2. 16
      build.sdcard/raspbianStretchDesktop.sh
  3. 2
      home.admin/00infoBlitz.sh
  4. 3
      home.admin/00mainMenu.sh
  5. 2
      home.admin/00settingsMenuServices.sh
  6. 1
      home.admin/20recoverDialog.sh
  7. 19
      home.admin/40addHDD.sh
  8. 3
      home.admin/80scanLND.sh
  9. 2
      home.admin/90finishSetup.sh
  10. 12
      home.admin/95finalSetup.sh
  11. 1
      home.admin/97addMobileWallet.sh
  12. 3
      home.admin/97addMobileWalletShango.sh
  13. 19
      home.admin/97addMobileWalletZap.sh
  14. 3
      home.admin/AAunlockLND.sh
  15. 3
      home.admin/BBcashoutWallet.sh
  16. 3
      home.admin/BBcloseAllChannels.sh
  17. 3
      home.admin/BBconnectPeer.sh
  18. 3
      home.admin/BBcreateInvoice.sh
  19. 3
      home.admin/BBfundWallet.sh
  20. 3
      home.admin/BBopenChannel.sh
  21. 3
      home.admin/BBpayInvoice.sh
  22. 3
      home.admin/XXdebugLogs.sh
  23. 2
      home.admin/_background.sh
  24. 26
      home.admin/_bootstrap.sh
  25. 3
      home.admin/config.scripts/blitz.setpassword.sh
  26. 3
      home.admin/config.scripts/bonus.rtl.sh
  27. 102
      home.admin/config.scripts/internet.tor.sh
  28. 1
      home.admin/config.scripts/lnd.autonat.sh
  29. 1
      home.admin/config.scripts/lnd.autopilot.sh
  30. 3
      home.admin/config.scripts/lnd.export.sh
  31. 5
      home.admin/config.scripts/network.chain.sh
  32. 25
      home.admin/config.scripts/network.reindex.sh

55
FAQ.md

@ -2,35 +2,37 @@
## How to update my RaspiBlitz (AFTER version 0.98)? ## How to update my RaspiBlitz (AFTER version 0.98)?
*Notice: Please be sure that your base image you started with was version 0.98 or greater. If you used the now deprecated XXupdateScripts.sh script to update before, you might have started with an older base image. If you never run that script, you're good.*
To prepare the RaspiBlitz update: To prepare the RaspiBlitz update:
- main menu > OFF - main menu > OFF
- remove power - remove power
- remove SD card - remove SD card
Now download the new RaspiBlitz SD card image and write it to your SD card .. yes you simply overwrite the old one, its OK all your personal data is on the HDD (if you havent done any manual changes to the system). See details about latest SD card image here: https://github.com/rootzoll/raspiblitz#scenario-2-start-at-home Now download the new RaspiBlitz SD card image and write it to your SD card .. yes you simply overwrite the old one, it's OK, all your personal data is on the HDD (if you haven't done any manual changes to the system). See details about latest SD card image here: https://github.com/rootzoll/raspiblitz#scenario-2-start-at-home
If done successful simple put the SD card into the RaspiBlitz and power on again. Then follow the instructions on the display ... and dont worry you dont need to redownload the blockchain again. If done successfully, simply put the SD card into the RaspiBlitz and power on again. Then follow the instructions on the display ... and dont worry, you dont need to re-download the blockchain again.
## How to update my RaspiBlitz (BEFORE version 0.98)? ## How to update my RaspiBlitz (BEFORE version 0.98)?
Before version 0.98 you need to setup a new RaspiBlitz. So close all channels. Remove all funds from your Raspiblitz (cash-out). Go into terminal and run: `sudo /home/admin/XXleanHDD.sh` and then `sudo shutdown now`. This way you keep your blockchain data on the HDD, but your HDD is cleaned. Now follow again: https://github.com/rootzoll/raspiblitz#scenario-2-start-at-home You need to setup a new RaspiBlitz. So close all channels. Remove all funds from your Raspiblitz (cash-out). Go into terminal and run: `sudo /home/admin/XXleanHDD.sh` and then `sudo shutdown now`. This way you keep your blockchain data on the HDD, but your HDD is cleaned. Now follow again: https://github.com/rootzoll/raspiblitz#scenario-2-start-at-home
## Why do I need to re-burn my SD card for an update (AFTER version 0.98)? ## Why do I need to re-burn my SD card for an update (AFTER version 0.98)?
I know it would be nicer to run just an update script and you are ready to go. But then the scripts would need to be written in a much more complex way to be able to work with any versions of LND and Bitcoind (they are already complex enough with all the edge cases) and testing would become even more time consuming as it is now already. Thats nothing a single developer can deliver. I know it would be nicer to run just an update script and you are ready to go. But then the scripts would need to be written in a much more complex way to be able to work with any versions of LND and Bitcoind (they are already complex enough with all the edge cases) and testing would become even more time consuming than it is now already. That's nothing a single developer can deliver.
For some it might be a pain point to make a update by re-burning a new sd card - especially if you added own scripts or made changes to the system -> but thats by design. Its a way to enforce a "clean state" with every update - the same state that I tested and developed the scripts against. The reason for that pain: I simply cannot write and support scripts that run on every modified system forever - thats simply too much work. For some, it might be a pain point to make an update by re-burning a new sd card - especially if you added your own scripts or made changes to the system - but thats by design. It's a way to enforce a "clean state" with every update - the same state that I tested and developed the scripts with. The reason for that pain: I simply cannot write and support scripts that run on every modified system forever - that's simply too much work.
With the SD card update mechanism I reduce complexity, I deliver a "clean state" OS, LND/Bitcoind and the scripts tightly bundled together exactly in the dependency/combination like I tested them and its much easier to reproduce bug reports and give support that way. With the SD card update mechanism I reduce complexity, I deliver a "clean state" OS, LND/Bitcoind and the scripts tightly bundled together exactly in the dependency/combination like I tested them and its much easier to reproduce bug reports and give support that way.
Of course people should modify the system, add own scripts, etc ... but if you want also benefit of the updates of the RaspiBlitz you have two ways to do it: Of course, people should modify the system, add own scripts, etc ... but if you want to also have the benefit of the updates of the RaspiBlitz, you have two ways to do it:
1. Contribute your changes back to the main project as pull requests so that they become part of the next update - the next SD card release. 1. Contribute your changes back to the main project as pull requests so that they become part of the next update - the next SD card release.
2. Make your changes so that they survive an SD card update easily -> put all your scripts and extra data onto the HDD AND document for yourself how to activate them again after an update. 2. Make your changes so that they survive an SD card update easily - put all your scripts and extra data onto the HDD AND document for yourself how to activate them again after an update.
BTW there is a beneficial side effect, when updating with a new SD card: You also get rid of any maleware or system bloat that happend in the past. You start with a fresh system :) BTW there is a beneficial side effect when updating with a new SD card: You also get rid of any malware or system bloat that happened in the past. You start with a fresh system :)
## I have the full blockchain on another computer. How do I copy it to the RaspiBlitz? ## I have the full blockchain on another computer. How do I copy it to the RaspiBlitz?
@ -46,6 +48,10 @@ If everything of the above is prepared, start the setup of the new RaspiBlitz wi
Once you finished all the transferes the Raspiblitz will make a quick-check on the data - but that will not guarantee that everything in detail was OK with the transfere. Check further FAQ answeres if you get stuck or see a final sync with a value below 90%. Once you finished all the transferes the Raspiblitz will make a quick-check on the data - but that will not guarantee that everything in detail was OK with the transfere. Check further FAQ answeres if you get stuck or see a final sync with a value below 90%.
## Why is taking my torrent download of the blockchain so long?
Its a lot of data and torrent seeds can not be garantuued. Normally it should be done within 24 hours. If it takes longer then 2 days consider to abort the torrent download by pressing 'x' and choose FTP download as fallback ... will also take some time, but should be more stable. If even that is not working - choose SYNC option, which will take over a week, but is the classic way to get the blockchain thru the bitcoin peer2peer network.
## Why is my "final sync" taking so long? ## Why is my "final sync" taking so long?
First of all if you see a final sync over 90% and you can see from time to time small increase - you should be OK ... this can take some looong time to catch up with the network. Only in the case that you activly choose the `SYNC` option in the `Getting the Blockchain` a final sync under 90% is OK. If you did a torrent, a FTP or a copy from another computer and seeing under 90% somthing went wrong and the setup process is ignoring your prepared Blockchain and doing a full sync - which can almost take forever on a raspberryPi. First of all if you see a final sync over 90% and you can see from time to time small increase - you should be OK ... this can take some looong time to catch up with the network. Only in the case that you activly choose the `SYNC` option in the `Getting the Blockchain` a final sync under 90% is OK. If you did a torrent, a FTP or a copy from another computer and seeing under 90% somthing went wrong and the setup process is ignoring your prepared Blockchain and doing a full sync - which can almost take forever on a raspberryPi.
@ -54,13 +60,13 @@ So if something is wrong (like mentioned above) then try again from the beginnin
## How to backup my Lightning Node? ## How to backup my Lightning Node?
CAUTION: Restoring a backup can lead to LOSS OF ALL CHANNEL FUNDS if its not the latest channel state. There is no perfect backup solution for lightning nodes yet - this topic is in development by the community. CAUTION: Restoring a backup can lead to LOSS OF ALL CHANNEL FUNDS if it's not the latest channel state. There is no perfect backup solution for lightning nodes yet - this topic is in development by the community.
But there is one safe way to start: Store your LND wallet seed (list of words you got on wallet creation) in a safe place. Its the key to recover access to your on-chain funds - your coins that are not bound in an active channel. But there is one safe way to start: Store your LND wallet seed (list of words you got on wallet creation) in a safe place. Its the key to recover access to your on-chain funds - your coins that are not bound in an active channel.
Recovering the coins that you have in a active channel is a bit more complicated. Because you have to be sure that you really have an up to date backup of your channel state data. The problem is: If you post an old state of your channel this looks to the network like you want to cheat and your channel partner is allowed claim all the funds in the channel. Recovering the coins that you have in an active channel is a bit more complicated. Because you have to be sure that you really have an up to date backup of your channel state data. The problem is: If you post an old state of your channel, to the network this looks like an atempt to cheat, and your channel partner is allowed claim all the funds in the channel.
To really have a good backup to rely on such feature needs to be part of the LND software. Almost every other solution would not be perfect. Thats why RaspiBlitz is not trying to provide a backup feature at the moment. To really have a reliable backup, such feature needs to be part of the LND software. Almost every other solution would not be perfect. Thats why RaspiBlitz is not trying to provide a backup feature at the moment.
But you can try to backup at your own risk. All your Lightning Node data is within the `/mnt/hdd/lnd` directory. Just run a backup of that data when the lnd service is stopped. But you can try to backup at your own risk. All your Lightning Node data is within the `/mnt/hdd/lnd` directory. Just run a backup of that data when the lnd service is stopped.
@ -78,40 +84,37 @@ To use a an additional password for your seed words is optional. If you choose s
## How do I change the Name/Alias of my lightning node ## How do I change the Name/Alias of my lightning node
Use the "Change Name/Alias of Node" option in main menu. The RaspiBlitz will make a reboot after this. Use the "Change Name/Alias of Node" option in the main menu. The RaspiBlitz will make a reboot after this.
## What to do when on SSH I see "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!" ## What to do when on SSH I see "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!"
This means, that he public ssh key of the RaspiBlitz has changed to the one you logged in the last time under that IP. This means, that he public ssh key of the RaspiBlitz has changed to the one you logged in the last time under that IP.
Its OK when happening during an update - when you changed the sd card image. If its really happening out of the blue - check your local network setup for a second. Maybe the local IP of your RaspiBlitz changed? Is there a second RaspiBlitz connected? Its a security warning, so at least take some time to check if anything is strange. But also dont get to panic - when its in your local network, normally its some network thing - not an intruder. It's OK when happening during an update - when you changed the sd card image. If it's really happening out of the blue - check your local network setup for a second. Maybe the local IP of your RaspiBlitz changed? Is there a second RaspiBlitz connected? It's a security warning, so at least take some time to check if anything is strange. But also don't get to panic - when it's in your local network, normally it's some network thing - not an intruder.
To fix this and to be able to login with SSH again, you have to remove the old public key for that IP from your local client computer. Just run the following command (with the replaced IP of your RaspiBlitz): `ssh-keygen -R IP-OF-YOUR-RASPIBLITZ` or remove the line for this IP manually from the known_hosts file (path see in warning message). To fix this and to be able to login with SSH again, you have to remove the old public key for that IP from your local client computer. Just run the following command (with the replaced IP of your RaspiBlitz): `ssh-keygen -R IP-OF-YOUR-RASPIBLITZ` or remove the line for this IP manually from the known_hosts file (see the path to the file in the warning message).
After that you should be able to login with SSH again. After that, you should be able to login with SSH again.
## When using Auto-Unlock, which security do I loose? ## When using Auto-Unlock, how much security do I lose?
The idea of the "wallet lock" in general is that your privatekey/seed/wallet is stored in a encrypted way on your HDD. On every you restart you have to input the password once manually (unlock your wallet), so that the LND can again read and write to the encrypted wallet. This gives you security if your RaspiBlitz gets stolen or taken away - it looses power and then your wallet is safe - the attacker cannot access your wallet. The idea of the "wallet lock" in general, is that your private key / seed / wallet is stored in a encrypted way on your HDD. On every restart, you have to input the password once manually (unlock your wallet), so that the LND can read and write to the encrypted wallet again. This improves your security if your RaspiBlitz gets stolen or taken away - it loses power and then your wallet is safe - the attacker cannot access your wallet.
When you activate the "Auto-Unlock" feature of the RaspiBlitz, the password of the wallet gets stored on the RaspiBlitz. So for an attacker stealing the RaspiBlitz physically its now possible to find the password and unlock the wallet. When you activate the "Auto-Unlock" feature of the RaspiBlitz, the password of the wallet gets stored on the RaspiBlitz. So if an attacker steals the RaspiBlitz physically, it's now possible for them to find the password and unlock the wallet.
## I connected my HDD but it still says 'Connect HDD' on the display? ## I connected my HDD but it still says 'Connect HDD' on the display?
Your HDD may have no partitions yet. SSH into the RaspiBlitz as admin (see command and password on display) and you should get offert the option to create a partition. If this is not the case: Your HDD may have no partitions yet. SSH into the RaspiBlitz as admin (see command and password on display) and you should be offered the option to create a partition. If this is not the case:
Check/Exchange the USB cable. Connect the HDD to another computer and check if it shows up at all .. Check/Exchange the USB cable. Connect the HDD to another computer and check if it shows up at all.
OSX: https://www.howtogeek.com/212836/how-to-use-your-macs-disk-utility-to-partition-wipe-repair-restore-and-copy-drives/ OSX: https://www.howtogeek.com/212836/how-to-use-your-macs-disk-utility-to-partition-wipe-repair-restore-and-copy-drives/
Windows: Windows: https://www.lifewire.com/how-to-open-disk-management-2626080
https://www.lifewire.com/how-to-open-disk-management-2626080
Linux/Ubuntu (desktop): Linux/Ubuntu (desktop): https://askubuntu.com/questions/86724/how-do-i-open-the-disk-utility-in-unity
https://askubuntu.com/questions/86724/how-do-i-open-the-disk-utility-in-unity
Linux/Raspbian (command line): Linux/Raspbian (command line): https://www.addictivetips.com/ubuntu-linux-tips/manually-partition-a-hard-drive-command-line-linux/
https://www.addictivetips.com/ubuntu-linux-tips/manually-partition-a-hard-drive-command-line-linux/
## How do I shrink the QR code for connecting my Shango/Zap mobile phone? ## How do I shrink the QR code for connecting my Shango/Zap mobile phone?

16
build.sdcard/raspbianStretchDesktop.sh

@ -515,22 +515,6 @@ sudo chmod +x /home/admin/_background.sh
sudo cp ./assets/background.service /etc/systemd/system/background.service sudo cp ./assets/background.service /etc/systemd/system/background.service
sudo systemctl enable background sudo systemctl enable background
# Prepare for TOR service
echo "*** Adding Tor Sources to sources.list ***"
echo "deb http://deb.torproject.org/torproject.org stretch main" | sudo tee -a /etc/apt/sources.list
echo "deb-src http://deb.torproject.org/torproject.org stretch main" | sudo tee -a /etc/apt/sources.list
echo "OK"
echo ""
echo "*** Installing dirmngr ***"
sudo apt install dirmngr
echo ""
echo "*** Fetching GPG key ***"
sudo gpg --keyserver keys.gnupg.net --recv 886DDD89
sudo gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | sudo apt-key add -
sudo gpg --keyserver pgpkeys.mit.edu --recv-key 74A941BA219EC810
sudo gpg -a --export 74A941BA219EC810 | sudo apt-key add -
echo "!!!!!! Please check if the above really worked!"
# *** RASPIBLITZ IMAGE READY *** # *** RASPIBLITZ IMAGE READY ***
echo "" echo ""
echo "**********************************************" echo "**********************************************"

2
home.admin/00infoBlitz.sh

@ -192,7 +192,7 @@ else
if [ ${#dynDomain} -gt 0 ]; then if [ ${#dynDomain} -gt 0 ]; then
#check if dyndns resolves to correct IP #check if dyndns resolves to correct IP
ipOfDynDNS=$(getent hosts rootzoll.chickenkiller.com | awk '{ print $1 }') ipOfDynDNS=$(getent hosts ${dynDomain} | awk '{ print $1 }')
if [ "${ipOfDynDNS}:${public_port}" != "${public_addr}" ]; then if [ "${ipOfDynDNS}:${public_port}" != "${public_addr}" ]; then
public_color="${color_red}" public_color="${color_red}"
else else

3
home.admin/00mainMenu.sh

@ -91,9 +91,8 @@ fi
if [ "${state}" = "ready" ]; then if [ "${state}" = "ready" ]; then
configExists=$(ls ${configFile} | grep -c '.conf') configExists=$(ls ${configFile} | grep -c '.conf')
if [ ${configExists} -eq 1 ]; then if [ ${configExists} -eq 1 ]; then
echo "setup is done - loading config data" echo "loading config data"
source ${configFile} source ${configFile}
setupStep=100
else else
echo "setup still in progress - setupStep(${setupStep})" echo "setup still in progress - setupStep(${setupStep})"
fi fi

2
home.admin/00settingsMenuServices.sh

@ -2,7 +2,9 @@
# get raspiblitz config # get raspiblitz config
echo "get raspiblitz config" echo "get raspiblitz config"
source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf source /mnt/hdd/raspiblitz.conf
echo "services default values" echo "services default values"
if [ ${#autoPilot} -eq 0 ]; then autoPilot="off"; fi if [ ${#autoPilot} -eq 0 ]; then autoPilot="off"; fi
if [ ${#autoUnlock} -eq 0 ]; then autoUnlock="off"; fi if [ ${#autoUnlock} -eq 0 ]; then autoUnlock="off"; fi

1
home.admin/20recoverDialog.sh

@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
## get basic info ## get basic info
source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf source /mnt/hdd/raspiblitz.conf
# show password info dialog # show password info dialog

19
home.admin/40addHDD.sh

@ -2,7 +2,7 @@
echo "" echo ""
## get basic info ## get basic info
source /home/admin/raspiblitz.info 2>/dev/null source /home/admin/raspiblitz.info
echo "*** Adding HDD to the System ***" echo "*** Adding HDD to the System ***"
echo "started from state(${state})" echo "started from state(${state})"
@ -42,9 +42,26 @@ if [ ${existsHDD} -gt 0 ]; then
sudo mount -a sudo mount -a
mountOK=$(df | grep -c /mnt/hdd) mountOK=$(df | grep -c /mnt/hdd)
if [ ${mountOK} -eq 1 ]; then if [ ${mountOK} -eq 1 ]; then
echo "OK - HDD is mounted" echo "OK - HDD is mounted"
echo "" echo ""
# init the RASPIBLITZ Config (if not exist on provision)
configExists=$(sudo ls /mnt/hdd/raspiblitz.conf | grep -c 'raspiblitz.conf')
if [ ${configExists} -eq 0 ]; then
echo "Creating raspiblitz.conf on HDD"
source /home/admin/_version.info
configFile="/mnt/hdd/raspiblitz.conf"
echo "# RASPIBLITZ CONFIG FILE" > $configFile
echo "raspiBlitzVersion='${codeVersion}'" >> $configFile
echo "network=${network}" >> $configFile
echo "chain=${chain}" >> $configFile
echo "hostname=${hostname}" >> $configFile
sudo chmod 777 ${configFile}
echo "OK"
echo ""
fi
# move SSH pub keys to HDD so that they survive an update # move SSH pub keys to HDD so that they survive an update
echo "moving SSH pub keys to HDD" echo "moving SSH pub keys to HDD"
sudo cp -r /etc/ssh /mnt/hdd/ssh sudo cp -r /etc/ssh /mnt/hdd/ssh

3
home.admin/80scanLND.sh

@ -1,3 +1,6 @@
#!/bin/bash
source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf source /mnt/hdd/raspiblitz.conf
### USER PI AUTOSTART (LCD Display) ### USER PI AUTOSTART (LCD Display)

2
home.admin/90finishSetup.sh

@ -87,4 +87,4 @@ sudo apt-get update
echo "OK - System is now up to date" echo "OK - System is now up to date"
# mark setup is done # mark setup is done
sudo sed -i "s/^setupStep=.*/setupStep=90/g" /home/admin/raspiblitz.info sudo sed -i "s/^setupStep=.*/setupStep=100/g" /home/admin/raspiblitz.info

12
home.admin/95finalSetup.sh

@ -19,16 +19,6 @@ dialog --backtitle "RaspiBlitz - Setup" --title " RaspiBlitz Setup is done :) "
Press OK for a final reboot. Press OK for a final reboot.
" 10 42 " 10 42
# init the RASPIBLITZ Config
echo "# RASPIBLITZ CONFIG FILE" > $configFile
echo "raspiBlitzVersion='${codeVersion}'" >> $configFile
sudo chmod 777 ${configFile}
# transfer data from SD info file
echo "hostname=${hostname}" >> $configFile
echo "network=${network}" >> $configFile
echo "chain=${chain}" >> $configFile
# let migration/init script do the rest # let migration/init script do the rest
/home/admin/_bootstrap.migration.sh /home/admin/_bootstrap.migration.sh
@ -39,7 +29,7 @@ cp $logFile /home/admin/raspiblitz.setup.log
echo "Setting the Name/Alias/Hostname .." echo "Setting the Name/Alias/Hostname .."
sudo /home/admin/config.scripts/lnd.setname.sh ${hostname} sudo /home/admin/config.scripts/lnd.setname.sh ${hostname}
# mark setup is done (100%) # mark setup is done
sudo sed -i "s/^setupStep=.*/setupStep=100/g" /home/admin/raspiblitz.info sudo sed -i "s/^setupStep=.*/setupStep=100/g" /home/admin/raspiblitz.info
clear clear

1
home.admin/97addMobileWallet.sh

@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# get raspiblitz config # get raspiblitz config
source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf source /mnt/hdd/raspiblitz.conf
# check if dynamic domain is set # check if dynamic domain is set

3
home.admin/97addMobileWalletShango.sh

@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# load raspiblitz config data (with backup from old config) # load raspiblitz config data
source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf source /mnt/hdd/raspiblitz.conf
# make sure qrcode-encoder in installed # make sure qrcode-encoder in installed

19
home.admin/97addMobileWalletZap.sh

@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
# load raspiblitz config data # load raspiblitz config data
source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf source /mnt/hdd/raspiblitz.conf
# export go vars (if needed) # export go vars (if needed)
@ -25,7 +26,7 @@ if [ ${goInstalled} -eq 0 ];then
goInstalled=$(go version 2>/dev/null | grep -c 'go') goInstalled=$(go version 2>/dev/null | grep -c 'go')
fi fi
if [ ${goInstalled} -eq 0 ];then if [ ${goInstalled} -eq 0 ];then
echo "FAIL: Was not able to install GO (needed to run ZapConnect)" echo "FAIL: Was not able to install GO (needed to run LndConnect)"
exit 1 exit 1
fi fi
@ -35,11 +36,11 @@ echo "*** Setup ***"
echo "" echo ""
echo "Installing zapconnect. Please wait..." echo "Installing zapconnect. Please wait..."
echo "" echo ""
echo "Getting github.com/LN-Zap/zapconnect (please wait) ..." echo "Getting github.com/LN-Zap/lndconnect (please wait) ..."
go get -d github.com/LN-Zap/zapconnect go get -d github.com/LN-Zap/lndconnect
cd $GOPATH/src/github.com/LN-Zap/zapconnect cd $GOPATH/src/github.com/LN-Zap/lndconnect
echo "" echo ""
echo "Building github.com/LN-Zap/zapconnect ..." echo "Building github.com/LN-Zap/lndconnect ..."
make make
cd cd
sleep 3 sleep 3
@ -69,11 +70,11 @@ clear
echo "*** STEP 2 : Click on Scan (make whole QR code fill camera) ***" echo "*** STEP 2 : Click on Scan (make whole QR code fill camera) ***"
if [ ${#dynDomain} -eq 0 ]; then if [ ${#dynDomain} -eq 0 ]; then
# If you drop the -i parameter, zapconnect will use the external IP. # If you drop the -i parameter, lndconnect will use the external IP.
zapconnect -i lndconnect -i
else else
# when dynamic domain is set # when dynamic domain is set
zapconnect --host=${dynDomain} lndconnect --host=${dynDomain}
fi fi
echo "(To shrink QR code: OSX->CMD- / LINUX-> CTRL-) Press ENTER when finished." echo "(To shrink QR code: OSX->CMD- / LINUX-> CTRL-) Press ENTER when finished."
@ -82,5 +83,5 @@ read key
clear clear
echo "If its not working - check issues on GitHub:" echo "If its not working - check issues on GitHub:"
echo "https://github.com/LN-Zap/zap-iOS/issues" echo "https://github.com/LN-Zap/zap-iOS/issues"
echo "https://github.com/LN-Zap/zapconnect/issues" echo "https://github.com/LN-Zap/lndconnect/issues"
echo "" echo ""

3
home.admin/AAunlockLND.sh

@ -1,7 +1,8 @@
#!/bin/bash #!/bin/bash
# load raspiblitz config data (with backup from old config) # load raspiblitz config data (with backup from old config)
source /mnt/hdd/raspiblitz.conf 2>/dev/null 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 [ ${#network} -eq 0 ]; then network="bitcoin"; fi
if [ ${#chain} -eq 0 ]; then if [ ${#chain} -eq 0 ]; then

3
home.admin/BBcashoutWallet.sh

@ -5,7 +5,8 @@ _error="./.error.out"
echo "please wait ..." echo "please wait ..."
# load raspiblitz config data (with backup from old config) # load raspiblitz config data (with backup from old config)
source /mnt/hdd/raspiblitz.conf 2>/dev/null 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 [ ${#network} -eq 0 ]; then network="bitcoin"; fi
if [ ${#chain} -eq 0 ]; then if [ ${#chain} -eq 0 ]; then

3
home.admin/BBcloseAllChannels.sh

@ -1,7 +1,8 @@
#!/bin/bash #!/bin/bash
# load raspiblitz config data (with backup from old config) # load raspiblitz config data (with backup from old config)
source /mnt/hdd/raspiblitz.conf 2>/dev/null 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 [ ${#network} -eq 0 ]; then network="bitcoin"; fi
if [ ${#chain} -eq 0 ]; then if [ ${#chain} -eq 0 ]; then

3
home.admin/BBconnectPeer.sh

@ -3,7 +3,8 @@ _temp="./download/dialog.$$"
_error="./.error.out" _error="./.error.out"
# load raspiblitz config data (with backup from old config) # load raspiblitz config data (with backup from old config)
source /mnt/hdd/raspiblitz.conf 2>/dev/null 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 [ ${#network} -eq 0 ]; then network="bitcoin"; fi
if [ ${#chain} -eq 0 ]; then if [ ${#chain} -eq 0 ]; then

3
home.admin/BBcreateInvoice.sh

@ -4,7 +4,8 @@ _error="./.error.out"
sudo chmod 7777 ${_error} sudo chmod 7777 ${_error}
# load raspiblitz config data (with backup from old config) # load raspiblitz config data (with backup from old config)
source /mnt/hdd/raspiblitz.conf 2>/dev/null 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 [ ${#network} -eq 0 ]; then network="bitcoin"; fi
if [ ${#chain} -eq 0 ]; then if [ ${#chain} -eq 0 ]; then

3
home.admin/BBfundWallet.sh

@ -1,7 +1,8 @@
#!/bin/bash #!/bin/bash
# load raspiblitz config data (with backup from old config) # load raspiblitz config data (with backup from old config)
source /mnt/hdd/raspiblitz.conf 2>/dev/null 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 [ ${#network} -eq 0 ]; then network="bitcoin"; fi
if [ ${#chain} -eq 0 ]; then if [ ${#chain} -eq 0 ]; then

3
home.admin/BBopenChannel.sh

@ -3,7 +3,8 @@ _temp="./download/dialog.$$"
_error="./.error.out" _error="./.error.out"
# load raspiblitz config data (with backup from old config) # load raspiblitz config data (with backup from old config)
source /mnt/hdd/raspiblitz.conf 2>/dev/null 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 [ ${#network} -eq 0 ]; then network="bitcoin"; fi
if [ ${#chain} -eq 0 ]; then if [ ${#chain} -eq 0 ]; then

3
home.admin/BBpayInvoice.sh

@ -3,7 +3,8 @@ _temp="./download/dialog.$$"
_error="./.error.out" _error="./.error.out"
# load raspiblitz config data (with backup from old config) # load raspiblitz config data (with backup from old config)
source /mnt/hdd/raspiblitz.conf 2>/dev/null 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 [ ${#network} -eq 0 ]; then network="bitcoin"; fi
if [ ${#chain} -eq 0 ]; then if [ ${#chain} -eq 0 ]; then

3
home.admin/XXdebugLogs.sh

@ -6,7 +6,8 @@
source /home/admin/_version.info source /home/admin/_version.info
## get basic info (its OK if not set yet) ## get basic info (its OK if not set yet)
source /mnt/hdd/raspiblitz.conf 2>/dev/null source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf
# for old nodes # for old nodes
if [ ${#network} -eq 0 ]; then if [ ${#network} -eq 0 ]; then

2
home.admin/_background.sh

@ -16,6 +16,8 @@ configFile="/mnt/hdd/raspiblitz.conf"
configExists=$(ls ${configFile} | grep -c '.conf') configExists=$(ls ${configFile} | grep -c '.conf')
if [ ${configExists} -eq 1 ]; then if [ ${configExists} -eq 1 ]; then
source ${configFile} source ${configFile}
else
source ${infoFile}
fi fi
echo "_background.sh STARTED" echo "_background.sh STARTED"

26
home.admin/_bootstrap.sh

@ -51,6 +51,9 @@ echo "message=" >> $infoFile
echo "network=${network}" >> $infoFile echo "network=${network}" >> $infoFile
echo "chain=${chain}" >> $infoFile echo "chain=${chain}" >> $infoFile
echo "setupStep=${setupStep}" >> $infoFile echo "setupStep=${setupStep}" >> $infoFile
if [ "${setupStep}" != "100" ]; then
echo "hostname=${hostname}" >> $infoFile
fi
sudo chmod 777 ${infoFile} sudo chmod 777 ${infoFile}
################################ ################################
@ -324,7 +327,30 @@ fi
# SD INFOFILE BASICS # SD INFOFILE BASICS
################################ ################################
# state info
sed -i "s/^state=.*/state=ready/g" ${infoFile} sed -i "s/^state=.*/state=ready/g" ${infoFile}
sed -i "s/^message=.*/message='waiting login'/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
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
echo "DONE BOOTSTRAP" >> $logFile echo "DONE BOOTSTRAP" >> $logFile
exit 0 exit 0

3
home.admin/config.scripts/blitz.setpassword.sh

@ -18,7 +18,8 @@ fi
_temp="./dialog.$$" _temp="./dialog.$$"
# load raspiblitz config (if available) # load raspiblitz config (if available)
source /mnt/hdd/raspiblitz.conf 2>/dev/null source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf
if [ ${#network} -eq 0 ]; then if [ ${#network} -eq 0 ]; then
network="bitcoin" network="bitcoin"
fi fi

3
home.admin/config.scripts/bonus.rtl.sh

@ -9,6 +9,7 @@ fi
# check and load raspiblitz config # check and load raspiblitz config
# to know which network is running # to know which network is running
source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf source /mnt/hdd/raspiblitz.conf
if [ ${#network} -eq 0 ]; then if [ ${#network} -eq 0 ]; then
echo "FAIL - missing /mnt/hdd/raspiblitz.conf" echo "FAIL - missing /mnt/hdd/raspiblitz.conf"
@ -45,7 +46,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
echo "*** Get the RTL Source Code ***" echo "*** Get the RTL Source Code ***"
git clone https://github.com/ShahanaFarooqui/RTL.git git clone https://github.com/ShahanaFarooqui/RTL.git
cd RTL cd RTL
git reset --hard v0.1.12-alpha git reset --hard v0.1.13-alpha
# install # install
echo "*** Run: npm install ***" echo "*** Run: npm install ***"

102
home.admin/config.scripts/internet.tor.sh

@ -14,6 +14,7 @@ fi
# check and load raspiblitz config # check and load raspiblitz config
# to know which network is running # to know which network is running
source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf source /mnt/hdd/raspiblitz.conf
if [ ${#network} -eq 0 ]; then if [ ${#network} -eq 0 ]; then
echo "FAIL - missing /mnt/hdd/raspiblitz.conf" echo "FAIL - missing /mnt/hdd/raspiblitz.conf"
@ -55,21 +56,58 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then
echo "" echo ""
fi fi
# check if TOR package is installed
packageInstalled=$(dpkg -s tor-arm | grep -c 'Status: install ok')
if [ ${packageInstalled} -eq 0 ]; then
# Prepare for TOR service
echo "*** Install TOR repo keys ***"
recvKeyResult=$(sudo gpg --keyserver keys.gnupg.net --recv 886DDD89 2>&1)
echo "${recvKeyResult}"
recvKeyFailed=$(echo "${recvKeyResult}" | grep -c 'Total number processed: 0')
if [ ${recvKeyFailed} -eq 1 ]; then
echo "FAILED: sudo gpg --keyserver keys.gnupg.net --recv 886DDD89"
exit 1
fi
sudo gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | sudo apt-key add -
echo ""
recvKeyResult=$(sudo gpg --keyserver pgpkeys.mit.edu --recv-key 74A941BA219EC810 2>&1)
echo "${recvKeyResult}"
recvKeyFailed=$(echo "${recvKeyResult}" | grep -c 'Total number processed: 0')
if [ ${recvKeyFailed} -eq 1 ]; then
echo "FAILED: sudo gpg --keyserver pgpkeys.mit.edu --recv-key 74A941BA219EC810"
exit 1
fi
sudo gpg -a --export 74A941BA219EC810 | sudo apt-key add -
echo ""
echo "*** Adding Tor Sources to sources.list ***"
echo "deb https://deb.torproject.org/torproject.org stretch main" | sudo tee -a /etc/apt/sources.list
echo "deb-src https://deb.torproject.org/torproject.org stretch main" | sudo tee -a /etc/apt/sources.list
echo "OK"
echo ""
echo "*** Updating System ***" echo "*** Updating System ***"
sudo apt-get update sudo apt-get update
echo "" echo ""
echo "*** Installing dirmngr ***"
sudo apt install dirmngr -y
echo ""
echo "*** Install Tor ***" echo "*** Install Tor ***"
sudo apt install tor tor-arm -y sudo apt install tor tor-arm -y
echo "" echo ""
echo "*** Tor Config ***" echo "*** Tor Config ***"
sudo rm -r -f /mnt/hdd/tor 2>/dev/null #sudo rm -r -f /mnt/hdd/tor 2>/dev/null
sudo mkdir /mnt/hdd/tor sudo mkdir /mnt/hdd/tor 2>/dev/null
sudo mkdir /mnt/hdd/tor/sys sudo mkdir /mnt/hdd/tor/sys 2>/dev/null
sudo mkdir /mnt/hdd/tor/web80 sudo mkdir /mnt/hdd/tor/web80 2>/dev/null
sudo mkdir /mnt/hdd/tor/lnd9735 sudo mkdir /mnt/hdd/tor/lnd9735 2>/dev/null
sudo mkdir /mnt/hdd/tor/lndrpc9735 sudo mkdir /mnt/hdd/tor/lndrpc9735 2>/dev/null
sudo chmod -R 700 /mnt/hdd/tor sudo chmod -R 700 /mnt/hdd/tor
sudo chown -R bitcoin:bitcoin /mnt/hdd/tor sudo chown -R bitcoin:bitcoin /mnt/hdd/tor
cat > ./torrc <<EOF cat > ./torrc <<EOF
@ -133,21 +171,6 @@ EOF
sudo systemctl enable tor@default sudo systemctl enable tor@default
echo "" echo ""
#echo "*** Waiting for TOR to boostrap ***"
#torIsBootstrapped=0
#while [ ${torIsBootstrapped} -eq 0 ]
#do
# echo "--- Checking 1 ---"
# date +%s
# sudo cat /mnt/hdd/tor/notice.log 2>/dev/null | grep "Bootstrapped" | tail -n 10
# torIsBootstrapped=$(sudo cat /mnt/hdd/tor/notice.log 2>/dev/null | grep "Bootstrapped 100" -c)
# echo "torIsBootstrapped(${torIsBootstrapped})"
# echo "If this takes too long --> CTRL+c, reboot and check manually"
# sleep 5
#done
#echo "OK - Tor Bootstrap is ready"
#echo ""
echo "*** Changing ${network} Config ***" echo "*** Changing ${network} Config ***"
networkIsTor=$(sudo cat /home/bitcoin/.${network}/${network}.conf | grep 'onlynet=onion' -c) networkIsTor=$(sudo cat /home/bitcoin/.${network}/${network}.conf | grep 'onlynet=onion' -c)
if [ ${networkIsTor} -eq 0 ]; then if [ ${networkIsTor} -eq 0 ]; then
@ -171,33 +194,16 @@ EOF
echo "Chain network already configured for TOR" echo "Chain network already configured for TOR"
fi fi
#echo "*** ${network} re-init - Waiting for Onion Address ***" else
# restarting bitcoind to start with tor and generare onion.address
#echo "restarting ${network}d ..." echo "TOR package/service is installed and was prepared earlier .. just activating again"
#sudo systemctl restart ${network}d
#sleep 8 echo "*** Enable TOR service ***"
#onionAddress="" sudo systemctl ensable tor@default
#while [ ${#onionAddress} -eq 0 ] echo ""
#do
# echo "--- Checking 2 ---" fi
# date +%s
# testNetAdd=""
# if [ "${chain}" = "test" ];then
# testNetAdd="/testnet3"
# fi
# sudo cat /mnt/hdd/${network}${testNetAdd}/debug.log 2>/dev/null | grep "tor" | tail -n 10
# onionAddress=$(sudo -u bitcoin ${network}-cli getnetworkinfo | grep '"address"' | cut -d '"' -f4)
# echo "Can take up to 20min - if this takes longer --> CTRL+c, reboot and check manually"
# sleep 5
#done
#onionPort=$(sudo -u bitcoin ${network}-cli getnetworkinfo | grep '"port"' | tr -dc '0-9')
#echo "Your Chain Network Onion Address is: ${onionAddress}:${onionPort}"
#echo ""
#echo "*** Setting your Onion Address ***"
#onionLND=$(sudo cat /mnt/hdd/tor/lnd9735/hostname)
#echo "Your Lightning Tor Onion Address is: ${onionLND}:9735"
#echo ""
# ACTIVATE LND OVER TOR # ACTIVATE LND OVER TOR
echo "*** Putting LND behind TOR ***" echo "*** Putting LND behind TOR ***"

1
home.admin/config.scripts/lnd.autonat.sh

@ -27,6 +27,7 @@ echo "making sure services are not running"
sudo systemctl stop lnd 2>/dev/null sudo systemctl stop lnd 2>/dev/null
# add default value to raspi config if needed # add default value to raspi config if needed
source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf source /mnt/hdd/raspiblitz.conf
if [ ${#autoNatDiscovery} -eq 0 ]; then if [ ${#autoNatDiscovery} -eq 0 ]; then
echo "autoNatDiscovery=off" >> /mnt/hdd/raspiblitz.conf echo "autoNatDiscovery=off" >> /mnt/hdd/raspiblitz.conf

1
home.admin/config.scripts/lnd.autopilot.sh

@ -28,6 +28,7 @@ if [ ${valueExists} -eq 0 ]; then
fi fi
# add default value to raspi config if needed # add default value to raspi config if needed
source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf source /mnt/hdd/raspiblitz.conf
if [ ${#autoPilot} -eq 0 ]; then if [ ${#autoPilot} -eq 0 ]; then
echo "autoPilot=off" >> /mnt/hdd/raspiblitz.conf echo "autoPilot=off" >> /mnt/hdd/raspiblitz.conf

3
home.admin/config.scripts/lnd.export.sh

@ -42,7 +42,8 @@ if [ "$1" = "" ] || [ $# -eq 0 ]; then
fi fi
# load data from config # load data from config
source /mnt/hdd/raspiblitz.conf 2>/dev/null source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf
######################## ########################
# CANCEL # CANCEL

5
home.admin/config.scripts/network.chain.sh

@ -15,9 +15,10 @@ fi
# check and load raspiblitz config # check and load raspiblitz config
# to know which network is running # to know which network is running
source /mnt/hdd/raspiblitz.conf 2>/dev/null source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf
if [ ${#network} -eq 0 ]; then if [ ${#network} -eq 0 ]; then
echo "FAIL - missing /mnt/hdd/raspiblitz.conf" echo "FAIL - missing network info"
exit 1 exit 1
fi fi

25
home.admin/config.scripts/network.reindex.sh

@ -9,7 +9,8 @@ fi
# check and load raspiblitz config # check and load raspiblitz config
# to know which network is running # to know which network is running
source /mnt/hdd/raspiblitz.conf 2>/dev/null source /home/admin/raspiblitz.info
source /mnt/hdd/raspiblitz.conf
if [ ${#network} -eq 0 ]; then if [ ${#network} -eq 0 ]; then
echo "FAIL - missing /mnt/hdd/raspiblitz.conf" echo "FAIL - missing /mnt/hdd/raspiblitz.conf"
exit 1 exit 1
@ -41,6 +42,7 @@ fi
# while loop to wait to finish # while loop to wait to finish
finished=0 finished=0
progress=0
while [ ${finished} -eq 0 ] while [ ${finished} -eq 0 ]
do do
clear clear
@ -51,14 +53,20 @@ while [ ${finished} -eq 0 ]
echo "THIS CAN TAKE SOME LONG TIME" echo "THIS CAN TAKE SOME LONG TIME"
echo "If you dont see any progress after 24h keep X pressed to stop." echo "If you dont see any progress after 24h keep X pressed to stop."
progress=0 # get blockchain sync progress
blockchaininfo=$(sudo -u bitcoin ${network}-cli -datadir=/home/bitcoin/.${network} getblockchaininfo)
progress=$(echo "${blockchaininfo}" | jq -r '.verificationprogress')
#progress=$(echo "${progress}*100" | bc)
inprogress="$(echo "${blockchaininfo}" | jq -r '.initialblockdownload')"
if [ "${inprogress}" = "false" ]; then
finished=1
fi
echo "" echo ""
echo "PROGRESS: ${progress}%" echo "RUNNING: ${inprogress}"
echo "PROGRESS: ${progress}"
echo "" echo ""
#TODO: detect and display progress
#TODO: determine when finished and then finished=1
echo "You can close terminal while reindex is running.." echo "You can close terminal while reindex is running.."
echo "But you have to login again to check if ready." echo "But you have to login again to check if ready."
@ -73,9 +81,14 @@ while [ ${finished} -eq 0 ]
done done
# trigger reboot when finished # trigger reboot when finished
echo "*************************" echo "*************************"
if [ ${finished} -eq 0 ]; then
echo "Re-Index CANCELED"
else
echo "Re-Index finished" echo "Re-Index finished"
fi
echo "Starting reboot ..." echo "Starting reboot ..."
echo "*************************" echo "*************************"
# stop bitcoind # stop bitcoind

Loading…
Cancel
Save