mirror of
https://github.com/Retropex/raspiblitz.git
synced 2025-05-12 19:20:48 +02:00
parent
fa21b1ac43
commit
ec7f983ed2
77
FAQ.cl.md
77
FAQ.cl.md
@ -37,6 +37,7 @@
|
|||||||
- [Recover from a cl-rescue file](#recover-from-a-cl-rescue-file)
|
- [Recover from a cl-rescue file](#recover-from-a-cl-rescue-file)
|
||||||
- [Recover from a seed](#recover-from-a-seed)
|
- [Recover from a seed](#recover-from-a-seed)
|
||||||
- [Rescan the chain after restoring a used c-lightning wallet](#rescan-the-chain-after-restoring-a-used-c-lightning-wallet)
|
- [Rescan the chain after restoring a used c-lightning wallet](#rescan-the-chain-after-restoring-a-used-c-lightning-wallet)
|
||||||
|
- [Guesstoremote to recover funds from force-closed channels](#guesstoremote-to-recover-funds-from-force-closed-channels)
|
||||||
- [Update](#update)
|
- [Update](#update)
|
||||||
- [Update to a new C-lightning release](#update-to-a-new-c-lightning-release)
|
- [Update to a new C-lightning release](#update-to-a-new-c-lightning-release)
|
||||||
- [Experimental update to the latest master](#experimental-update-to-the-latest-master)
|
- [Experimental update to the latest master](#experimental-update-to-the-latest-master)
|
||||||
@ -626,20 +627,21 @@ Will need to pay through a peer which supports the onion messages which means yo
|
|||||||
* use the `REPAIR-CL` - `SEEDRESTORE` option in the menu for instructions to paste the seedwords to restore
|
* use the `REPAIR-CL` - `SEEDRESTORE` option in the menu for instructions to paste the seedwords to restore
|
||||||
|
|
||||||
#### Rescan the chain after restoring a used c-lightning wallet
|
#### Rescan the chain after restoring a used c-lightning wallet
|
||||||
* https://lightning.readthedocs.io/FAQ.html#rescanning-the-block-chain-for-lost-utxos
|
|
||||||
* Stop `lightningd`:
|
* can use the `menu` -> `REPAIR` -> `REPAIR-CL` -> `RESCAN` option
|
||||||
|
* or follow the manual process:
|
||||||
|
<https://lightning.readthedocs.io/FAQ.html#rescanning-the-block-chain-for-lost-utxos>
|
||||||
```
|
```
|
||||||
|
# stop `lightningd`:
|
||||||
sudo systemctl stop lightningd
|
sudo systemctl stop lightningd
|
||||||
```
|
|
||||||
An ungraceful method:
|
# the ungraceful method:
|
||||||
```
|
|
||||||
sudo killall ligthningd
|
sudo killall ligthningd
|
||||||
* Rescan from the block 700000
|
|
||||||
```
|
# Rescan from the block 700000
|
||||||
sudo -u bitcoin lightningd --rescan -700000 --log-level debug
|
sudo -u bitcoin lightningd --rescan -700000 --log-level debug
|
||||||
```
|
|
||||||
* Rescan the last 1000 blocks:
|
# Rescan the last 1000 blocks:
|
||||||
```
|
|
||||||
sudo -u bitcoin lightningd --rescan 1000 --log-level debug
|
sudo -u bitcoin lightningd --rescan 1000 --log-level debug
|
||||||
```
|
```
|
||||||
* can monitor in a new window using the shortcut:
|
* can monitor in a new window using the shortcut:
|
||||||
@ -647,6 +649,61 @@ Will need to pay through a peer which supports the onion messages which means yo
|
|||||||
cllog
|
cllog
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Guesstoremote to recover funds from force-closed channels
|
||||||
|
* <https://lightning.readthedocs.io/lightning-hsmtool.8.html>
|
||||||
|
```
|
||||||
|
$ man lightning-hsmtool
|
||||||
|
guesstoremote p2wpkh node_id max_channel_dbid hsm_secret [password]
|
||||||
|
Brute-force the private key to our funds from a remote unilateral close of a channel, in a case where we have lost all database data except for our hsm_secret. The peer must be the one to close the channel (and the funds will remain unrecoverable until the channel is closed). max_channel_dbid is your own guess on what the channel_dbid was, or at least the maximum possible value, and is usually no greater than the number of channels that the node has ever had. Specify password if the hsm_secret is encrypted.
|
||||||
|
```
|
||||||
|
* Usage on the RaspiBlitz (example for mainnet):
|
||||||
|
```
|
||||||
|
sudo -u bitcoin lightning-hsmtool guesstoremote p2wpkh-ADDRESS-bc1... PEER_NODE_ID 5000 /home/bitcoin/.lightning/bitcoin/hsm_secret
|
||||||
|
```
|
||||||
|
* The `p2wpkh-ADDRESS-bc1...` must a be a non-timelocked output. Shows with `OP_PUSHBYTES_20` in block explorers.
|
||||||
|
* The `max_channel_dbid` = 5000 is usually plenty, can set any higher number
|
||||||
|
* If the `hsm_secret` is encrypted give the password on the end
|
||||||
|
|
||||||
|
* Output if unsuccessful (the private key is not known):
|
||||||
|
```
|
||||||
|
Could not find any basepoint matching the provided witness programm.
|
||||||
|
Are you sure that the channel used `option_static_remotekey` ?
|
||||||
|
*** stack smashing detected ***: terminated
|
||||||
|
Aborted
|
||||||
|
```
|
||||||
|
* Output if successful:
|
||||||
|
```
|
||||||
|
bech32 : bc1q......................................
|
||||||
|
pubkey hash : 0123456789abcdef0123456789abcdef01234567
|
||||||
|
pubkey : 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef01
|
||||||
|
privkey : 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
|
||||||
|
```
|
||||||
|
* To import the private key of the address in Electrum Wallet will need to convert to base58
|
||||||
|
```
|
||||||
|
git clone https://github.com/matja/bitcoin-tool
|
||||||
|
cd bitcoin-tool
|
||||||
|
make test
|
||||||
|
|
||||||
|
./bitcoin-tool \
|
||||||
|
--network bitcoin \
|
||||||
|
--input-type private-key \
|
||||||
|
--input-format hex \
|
||||||
|
--input PASTE_THE_privkey_HERE \
|
||||||
|
--output-type private-key-wif \
|
||||||
|
--output-format base58check \
|
||||||
|
--public-key-compression compressed
|
||||||
|
```
|
||||||
|
* Example output:
|
||||||
|
```
|
||||||
|
KwFvTne98E1t3mTNAr8pKx67eUzFJWdSNPqPSfxMEtrueW7PcQzL
|
||||||
|
```
|
||||||
|
* To import to teh Electrum Wallet use the `p2wpkh:` prefix:
|
||||||
|
<https://bitcoinelectrum.com/importing-your-private-keys-into-electrum/>
|
||||||
|
```
|
||||||
|
p2wpkh:KxacygL6usxP8T9cFSM2SRW5QsEg66bUQUEn997UWwCZANEe7NLT
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## Update
|
## Update
|
||||||
### Update to a new C-lightning release
|
### Update to a new C-lightning release
|
||||||
* See the tagged releases by the C-lightning team: [github.com/ElementsProject/lightning/releases](https://github.com/ElementsProject/lightning/releases)
|
* See the tagged releases by the C-lightning team: [github.com/ElementsProject/lightning/releases](https://github.com/ElementsProject/lightning/releases)
|
||||||
|
@ -187,6 +187,10 @@ if [ "${lightning}" != "" ]; then
|
|||||||
ln_sync="${value}"
|
ln_sync="${value}"
|
||||||
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_locked)
|
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_locked)
|
||||||
ln_locked="${value}"
|
ln_locked="${value}"
|
||||||
|
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_recovery_mode)
|
||||||
|
ln_recovery_mode="${value}"
|
||||||
|
source <(/home/admin/_cache.sh meta ln_${lightning}_${chain}net_recovery_done)
|
||||||
|
ln_recovery_done="${value}"
|
||||||
|
|
||||||
# lightning is still starting
|
# lightning is still starting
|
||||||
if [ "${ln_ready}" != "1" ]; then
|
if [ "${ln_ready}" != "1" ]; then
|
||||||
@ -200,6 +204,12 @@ if [ "${lightning}" != "" ]; then
|
|||||||
ln_baseInfo="${color_amber}Wallet Locked"
|
ln_baseInfo="${color_amber}Wallet Locked"
|
||||||
ln_peersInfo=""
|
ln_peersInfo=""
|
||||||
|
|
||||||
|
# lightning is still syncing
|
||||||
|
elif [ "${ln_recovery_mode}" == "1" ] && [ "${ln_recovery_done}" == "0" ]; then
|
||||||
|
|
||||||
|
ln_baseInfo="${color_amber}Rescanning transactions"
|
||||||
|
ln_peersInfo=""
|
||||||
|
|
||||||
# lightning is still syncing
|
# lightning is still syncing
|
||||||
elif [ "${ln_sync}" != "1" ]; then
|
elif [ "${ln_sync}" != "1" ]; then
|
||||||
|
|
||||||
@ -284,7 +294,7 @@ elif [ "${lightning}" == "lnd" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
LNinfo=" + Lightning Network"
|
LNinfo=" + Lightning Network"
|
||||||
if [ "${lightning}" == "" ]; then
|
if [ "${lightning}" == "" ] || [ "${lightning}" == "none" ]; then
|
||||||
LNinfo=""
|
LNinfo=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -108,6 +108,7 @@ while :
|
|||||||
lightning \
|
lightning \
|
||||||
ln_default_locked \
|
ln_default_locked \
|
||||||
btc_default_synced \
|
btc_default_synced \
|
||||||
|
btc_default_online \
|
||||||
btc_default_sync_initialblockdownload \
|
btc_default_sync_initialblockdownload \
|
||||||
btc_default_blocks_behind \
|
btc_default_blocks_behind \
|
||||||
)
|
)
|
||||||
@ -118,7 +119,15 @@ while :
|
|||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${btc_default_synced}" != "1" ]; then
|
# when lightning is active - show sync until ln_default_sync_initial_done
|
||||||
|
if [ "${lightning}" != "" ] && [ "${lightning}" != "none" ] && [ "${ln_default_sync_initial_done}" == "0" ]; then
|
||||||
|
/home/admin/setup.scripts/eventBlockchainSync.sh lcd
|
||||||
|
sleep 3
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# when btc not online or not synced - show sync screen
|
||||||
|
if [ "${btc_default_synced}" != "1" ] || [ "${btc_default_online}" != "1" ]; then
|
||||||
/home/admin/setup.scripts/eventBlockchainSync.sh lcd
|
/home/admin/setup.scripts/eventBlockchainSync.sh lcd
|
||||||
sleep 3
|
sleep 3
|
||||||
continue
|
continue
|
||||||
|
@ -99,6 +99,7 @@ do
|
|||||||
btc_default_synced \
|
btc_default_synced \
|
||||||
ln_default_sync_chain \
|
ln_default_sync_chain \
|
||||||
ln_default_locked \
|
ln_default_locked \
|
||||||
|
ln_default_sync_initial_done \
|
||||||
message \
|
message \
|
||||||
network \
|
network \
|
||||||
chain \
|
chain \
|
||||||
@ -185,13 +186,73 @@ do
|
|||||||
# MAKE SURE BLOCKCHAIN/LN IS SYNC
|
# MAKE SURE BLOCKCHAIN/LN IS SYNC
|
||||||
#####################################
|
#####################################
|
||||||
if [ "${setupPhase}" == "done" ] && [ "${state}" == "ready" ]; then
|
if [ "${setupPhase}" == "done" ] && [ "${state}" == "ready" ]; then
|
||||||
if [ "${btc_default_synced}" != "1" ] || [ "${ln_default_sync_chain}" != "1" ]; then
|
if [ "${btc_default_synced}" != "1" ] || [ "${ln_default_sync_chain}" == "0" ] || [ "${ln_default_sync_initial_done}" == "0" ]; then
|
||||||
/home/admin/setup.scripts/eventBlockchainSync.sh ssh
|
/home/admin/setup.scripts/eventBlockchainSync.sh ssh
|
||||||
sleep 3
|
sleep 3
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
#####################################
|
||||||
|
# SCB ACTIVATION
|
||||||
|
#####################################
|
||||||
|
|
||||||
|
# when setup is done & state is ready .. check for SCB activation
|
||||||
|
if [ "${setupPhase}" == "done" ] && [ "${state}" == "ready" ]; then
|
||||||
|
|
||||||
|
# check if there is a channel.backup to activate
|
||||||
|
gotSCB=$(ls /home/admin/channel.backup 2>/dev/null | grep -c 'channel.backup')
|
||||||
|
if [ "${gotSCB}" == "1" ]; then
|
||||||
|
|
||||||
|
clear
|
||||||
|
echo
|
||||||
|
echo "*** channel.backup Recovery ***"
|
||||||
|
echo "Running ... (please wait)"
|
||||||
|
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 "To try upload of channel.backup again:"
|
||||||
|
echo "MAINMENU > REPAIR > REPAIR-LND > RETRYSCB"
|
||||||
|
echo
|
||||||
|
echo "Press ENTER to continue for now ..."
|
||||||
|
rm /home/admin/channel.backup
|
||||||
|
read key
|
||||||
|
else
|
||||||
|
rm /home/admin/channel.backup
|
||||||
|
dialog --title " OK Static-Channel-Backup IMPORT " --msgbox "
|
||||||
|
LND accepted the channel.backup file you uploaded.
|
||||||
|
It can now take up to an hour until you can see,
|
||||||
|
if LND was able to recover funds from your channels.
|
||||||
|
|
||||||
|
If you dont see any pending on-chain incoming funds
|
||||||
|
within the next hour or you still missing funds, you
|
||||||
|
can always retry the upload again under:
|
||||||
|
MAINMENU > REPAIR > REPAIR-LND > RETRYSCB
|
||||||
|
" 14 58
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
#####################################
|
#####################################
|
||||||
# MAIN MENU or BLOCKCHAIN SYNC
|
# MAIN MENU or BLOCKCHAIN SYNC
|
||||||
#####################################
|
#####################################
|
||||||
|
@ -9,6 +9,27 @@ source <(/home/admin/config.scripts/network.aliases.sh getvars cl $1)
|
|||||||
|
|
||||||
sudo mkdir /var/cache/raspiblitz/temp 2>/dev/null
|
sudo mkdir /var/cache/raspiblitz/temp 2>/dev/null
|
||||||
|
|
||||||
|
|
||||||
|
function clRescan() {
|
||||||
|
trap 'rm -f "$_temp"' EXIT
|
||||||
|
_temp=$(mktemp -p /dev/shm/)
|
||||||
|
dialog --backtitle "Choose the new gap limit" \
|
||||||
|
--title "Enter the rescan depth or blockheight (-)" \
|
||||||
|
--inputbox "
|
||||||
|
Enter the number of blocks to rescan from the current tip
|
||||||
|
or use a negative number for the absolute blockheight to scan from.
|
||||||
|
|
||||||
|
If left empty will start to rescan from the block 700000 (-700000).
|
||||||
|
" 12 71 2> "$_temp"
|
||||||
|
BLOCK=$(cat "$_temp")
|
||||||
|
if [ ${#BLOCK} -eq 0 ]; then
|
||||||
|
BLOCK="-700000"
|
||||||
|
fi
|
||||||
|
sudo /home/admin/config.scripts/cl.backup.sh "${CHAIN}" recoverymode on "${BLOCK}"
|
||||||
|
sudo systemctl restart ${netprefix}lightningd
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# BASIC MENU INFO
|
# BASIC MENU INFO
|
||||||
WIDTH=64
|
WIDTH=64
|
||||||
BACKTITLE="RaspiBlitz"
|
BACKTITLE="RaspiBlitz"
|
||||||
@ -31,6 +52,7 @@ fi
|
|||||||
OPTIONS+=(RESET "Reset the wallet and create new")
|
OPTIONS+=(RESET "Reset the wallet and create new")
|
||||||
OPTIONS+=(FILERESTORE "Restore from a rescue file")
|
OPTIONS+=(FILERESTORE "Restore from a rescue file")
|
||||||
OPTIONS+=(SEEDRESTORE "Restore from a seed (onchain funds only)")
|
OPTIONS+=(SEEDRESTORE "Restore from a seed (onchain funds only)")
|
||||||
|
OPTIONS+=(RESCAN "Rescan for onchain funds from a given block")
|
||||||
|
|
||||||
CHOICE_HEIGHT=$(("${#OPTIONS[@]}/2+1"))
|
CHOICE_HEIGHT=$(("${#OPTIONS[@]}/2+1"))
|
||||||
HEIGHT=$((CHOICE_HEIGHT+6))
|
HEIGHT=$((CHOICE_HEIGHT+6))
|
||||||
@ -102,6 +124,8 @@ case $CHOICE in
|
|||||||
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}clAutoUnlock "off"
|
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}clAutoUnlock "off"
|
||||||
# new
|
# new
|
||||||
/home/admin/config.scripts/cl.hsmtool.sh new $CHAIN
|
/home/admin/config.scripts/cl.hsmtool.sh new $CHAIN
|
||||||
|
# create config
|
||||||
|
/home/admin/config.scripts/cl.install.sh on $CHAIN
|
||||||
# set the lightningd service file on each active network
|
# set the lightningd service file on each active network
|
||||||
if [ "${cl}" == "on" ] || [ "${cl}" == "1" ]; then
|
if [ "${cl}" == "on" ] || [ "${cl}" == "1" ]; then
|
||||||
/home/admin/config.scripts/cl.install-service.sh mainnet
|
/home/admin/config.scripts/cl.install-service.sh mainnet
|
||||||
@ -171,8 +195,13 @@ case $CHOICE in
|
|||||||
/home/admin/config.scripts/cl.hsmtool.sh autounlock-off
|
/home/admin/config.scripts/cl.hsmtool.sh autounlock-off
|
||||||
/home/admin/config.scripts/cl.hsmtool.sh decrypt
|
/home/admin/config.scripts/cl.hsmtool.sh decrypt
|
||||||
/home/admin/config.scripts/cl.install.sh on $CHAIN
|
/home/admin/config.scripts/cl.install.sh on $CHAIN
|
||||||
|
|
||||||
|
clRescan
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
RESCAN)
|
||||||
|
clRescan
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
exit 0
|
exit 0
|
@ -89,9 +89,9 @@ syncAndCheckLND() # from _provision.setup.sh
|
|||||||
sudo /home/admin/config.scripts/blitz.datadrive.sh link
|
sudo /home/admin/config.scripts/blitz.datadrive.sh link
|
||||||
|
|
||||||
# check if now a config exists
|
# check if now a config exists
|
||||||
configLinkedCorrectly=$(ls /home/bitcoin/.lnd/lnd.conf | grep -c "lnd.conf")
|
configLinkedCorrectly=$(ls /home/bitcoin/.lnd/${netprefix}lnd.conf | grep -c "${netprefix}lnd.conf")
|
||||||
if [ "${configLinkedCorrectly}" != "1" ]; then
|
if [ "${configLinkedCorrectly}" != "1" ]; then
|
||||||
echo "lnd-link-broken" "link /home/bitcoin/.lnd/lnd.conf broken" ""
|
echo "lnd-link-broken" "link /home/bitcoin/.lnd/${netprefix}lnd.conf broken" ""
|
||||||
exit 7
|
exit 7
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -103,7 +103,7 @@ syncAndCheckLND() # from _provision.setup.sh
|
|||||||
sudo systemctl stop ${netprefix}lnd 2>/dev/null
|
sudo systemctl stop ${netprefix}lnd 2>/dev/null
|
||||||
sudo systemctl disable ${netprefix}lnd 2>/dev/null
|
sudo systemctl disable ${netprefix}lnd 2>/dev/null
|
||||||
|
|
||||||
# copy lnd service
|
# copy lnd service - note the same service is created with 'lnd.install.sh on mainnet'
|
||||||
sudo cp /home/admin/assets/lnd.service /etc/systemd/system/lnd.service
|
sudo cp /home/admin/assets/lnd.service /etc/systemd/system/lnd.service
|
||||||
|
|
||||||
# start lnd up
|
# start lnd up
|
||||||
@ -138,10 +138,12 @@ syncAndCheckLND() # from _provision.setup.sh
|
|||||||
sudo /home/admin/config.scripts/lnd.credentials.sh sync
|
sudo /home/admin/config.scripts/lnd.credentials.sh sync
|
||||||
|
|
||||||
# make a final lnd check
|
# make a final lnd check
|
||||||
source <(/home/admin/config.scripts/lnd.check.sh basic-setup)
|
source <(/home/admin/config.scripts/lnd.check.sh basic-setup "${chain}net")
|
||||||
if [ "${err}" != "" ]; then
|
if [ "${err}" != "" ]; then
|
||||||
echo "lnd-check-error" "lnd.check.sh basic-setup with error" "/home/admin/config.scripts/lnd.check.sh basic-setup --> ${err}"
|
echo
|
||||||
exit 15
|
echo "lnd-check-error" "lnd.check.sh basic-setup ${chain}net with error" "/home/admin/config.scripts/lnd.check.sh basic-setup ${chain}net --> ${err}"
|
||||||
|
echo
|
||||||
|
# exit 15
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,21 +174,7 @@ or having a complete LND rescue-backup from your old node.
|
|||||||
|
|
||||||
getpasswordC
|
getpasswordC
|
||||||
|
|
||||||
clear
|
removeLNDwallet
|
||||||
echo
|
|
||||||
echo "The next step will overwrite the old LND wallets on all chains"
|
|
||||||
echo "Press ENTER to continue or CTRL+C to abort"
|
|
||||||
read key
|
|
||||||
echo "Stopping ${netprefix}lnd ..."
|
|
||||||
sudo systemctl stop ${netprefix}lnd
|
|
||||||
if [ "${tlnd}" == "on" ];then
|
|
||||||
sudo systemctl stop tlnd
|
|
||||||
fi
|
|
||||||
if [ "${slnd}" == "on" ];then
|
|
||||||
sudo systemctl stop slnd
|
|
||||||
fi
|
|
||||||
echo "Reset wallet"
|
|
||||||
sudo rm -r /mnt/hdd/lnd
|
|
||||||
|
|
||||||
# creates fresh lnd.conf without an alias
|
# creates fresh lnd.conf without an alias
|
||||||
/home/admin/config.scripts/lnd.install.sh on $CHAIN
|
/home/admin/config.scripts/lnd.install.sh on $CHAIN
|
||||||
@ -213,64 +201,102 @@ function restoreSCB()
|
|||||||
{
|
{
|
||||||
# import SCB and get results
|
# import SCB and get results
|
||||||
_temp="/var/cache/raspiblitz/.temp.tmp"
|
_temp="/var/cache/raspiblitz/.temp.tmp"
|
||||||
/home/admin/config.scripts/lnd.backup.sh scb-import-gui setup $_temp
|
# 'production' to use passwordA
|
||||||
|
/home/admin/config.scripts/lnd.backup.sh scb-import-gui production $_temp
|
||||||
source $_temp 2>/dev/null
|
source $_temp 2>/dev/null
|
||||||
sudo rm $_temp 2>/dev/null
|
sudo rm $_temp 2>/dev/null
|
||||||
|
|
||||||
# if user canceled the upload
|
# if user canceled the upload
|
||||||
if [ "${staticchannelbackup}" == "" ]; then
|
if ! ls -la /home/admin/channel.backup; then
|
||||||
# signal cancel to the calling script by exit code (5 = exit on scb)
|
echo "# signal cancel to the calling script by exit code (5 = exit on scb)"
|
||||||
exit 5
|
exit 5
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "The next step will attempt to trigger all online peers to force close the channels with this node."
|
echo "The next step will attempt to trigger all online peers to force close the channels."
|
||||||
echo "Restoring the channel.backup can be repeated again until all the channels are force closed."
|
echo "Restoring the channel.backup can be repeated until all the channels are force closed."
|
||||||
echo "Contacting the peers and asking them to force close achieves the same."
|
echo
|
||||||
|
echo "Make sure to enter the Raspiblitz menu to trigger the next step."
|
||||||
|
echo "If menu does not open automatically - use command: raspiblitz"
|
||||||
echo "Press ENTER to continue or CTRL+C to abort"
|
echo "Press ENTER to continue or CTRL+C to abort"
|
||||||
read key
|
read key
|
||||||
|
|
||||||
# WALLET --> SEED + SCB
|
### --> DEACTIVATED BECAUSE when a file is placed at /home/admin/channel.backup
|
||||||
if [ "${staticchannelbackup}" != "" ]; then
|
### it will now automatically trigger a Static-Channel-Backup procedure after lnd recoverymode is done
|
||||||
|
#
|
||||||
|
# # WALLET --> SEED + SCB
|
||||||
|
# if ls -la /home/admin/channel.backup; then
|
||||||
|
#
|
||||||
|
# # LND was restarted so need to unlock
|
||||||
|
# echo "WALLET --> UNLOCK WALLET - SCAN 0"
|
||||||
|
# /home/admin/_cache.sh set message "LND Wallet Unlock - scan 0"
|
||||||
|
# source <(/home/admin/config.scripts/lnd.initwallet.py unlock "${chain}net" "${passwordC}" 0)
|
||||||
|
# if [ "${err}" != "" ]; then
|
||||||
|
# echo "lnd-wallet-unlock" "lnd.initwallet.py unlock returned error" "/home/admin/config.scripts/lnd.initwallet.py unlock ${chain}net ... --> ${err} + ${errMore}"
|
||||||
|
# if [ "${errMore}" = "wallet already unlocked, WalletUnlocker service is no longer available" ]; then
|
||||||
|
# echo "The wallet is already unlocked, continue."
|
||||||
|
# else
|
||||||
|
# exit 11
|
||||||
|
# fi
|
||||||
|
# fi
|
||||||
|
#
|
||||||
|
# echo "WALLET --> SEED + SCB "
|
||||||
|
# /home/admin/_cache.sh set message "LND Wallet (SEED & SCB)"
|
||||||
|
# macaroonPath="/home/admin/.lnd/data/chain/${network}/${chain}net/admin.macaroon"
|
||||||
|
# source <(/home/admin/config.scripts/lnd.initwallet.py scb ${chain}net "/home/admin/channel.backup" "${macaroonPath}")
|
||||||
|
# if [ "${err}" != "" ]; then
|
||||||
|
# echo "lnd-wallet-seed+scb" "lnd.initwallet.py scb returned error" "/home/admin/config.scripts/lnd.initwallet.py scb ${chain}net ... --> ${err} + ${errMore}"
|
||||||
|
# while [ $(echo "${errMore}" | grep -c "RPC server is in the process of starting up") -gt 0 ]; do
|
||||||
|
# echo "# ${errMore}"
|
||||||
|
# echo "# waiting 10 seconds (${counter})"
|
||||||
|
# counter=$((counter+1))
|
||||||
|
# if [ ${counter} -eq 60 ]; then
|
||||||
|
# echo "# Giving up after 10 minutes"
|
||||||
|
# echo
|
||||||
|
# echo "lnd-wallet-seed+scb" "lnd.initwallet.py scb returned error" "/home/admin/config.scripts/lnd.initwallet.py scb ${chain}net ... --> ${err} + ${errMore}"
|
||||||
|
# echo
|
||||||
|
# echo "The SCB recovery is not possible now - use the RETRYSCB option the REPAIR-LND menu after LND is synced."
|
||||||
|
# echo "Can repeat the SCB recovery until all peers have force closed the channels to this node."
|
||||||
|
# echo
|
||||||
|
# echo "# ${netprefix}lnd error logs:"
|
||||||
|
# sudo journalctl -u ${netprefix}lnd
|
||||||
|
# echo
|
||||||
|
# echo "# ${netprefix}lnd logs:"
|
||||||
|
# sudo tail /home/bitcoin/.lnd/logs/bitcoin/${CHAIN}/lnd.log
|
||||||
|
# exit 12
|
||||||
|
# fi
|
||||||
|
# sleep 10
|
||||||
|
# source <(/home/admin/config.scripts/lnd.initwallet.py scb ${chain}net "/home/admin/channel.backup" "${macaroonPath}")
|
||||||
|
# done
|
||||||
|
#
|
||||||
|
# fi
|
||||||
|
# fi
|
||||||
|
#
|
||||||
|
# syncAndCheckLND
|
||||||
|
|
||||||
# LND was restarted so need to unlock
|
}
|
||||||
echo "WALLET --> UNLOCK WALLET - SCAN 0"
|
|
||||||
/home/admin/_cache.sh set message "LND Wallet Unlock - scan 0"
|
|
||||||
source <(/home/admin/config.scripts/lnd.initwallet.py unlock "${chain}net" "${passwordC}" 0)
|
|
||||||
if [ "${err}" != "" ]; then
|
|
||||||
echo "lnd-wallet-unlock" "lnd.initwallet.py unlock returned error" "/home/admin/config.scripts/lnd.initwallet.py unlock ${chain}net ... --> ${err} + ${errMore}"
|
|
||||||
if [ "${errMore}" = "wallet already unlocked, WalletUnlocker service is no longer available" ]; then
|
|
||||||
echo "The wallet is already unlocked, continue."
|
|
||||||
else
|
|
||||||
exit 11
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "WALLET --> SEED + SCB "
|
function removeLNDwallet
|
||||||
/home/admin/_cache.sh set message "LND Wallet (SEED & SCB)"
|
{
|
||||||
macaroonPath="/home/admin/.lnd/data/chain/${network}/${chain}net/admin.macaroon"
|
clear
|
||||||
source <(/home/admin/config.scripts/lnd.initwallet.py scb ${chain}net "/home/admin/channel.backup" "${macaroonPath}")
|
echo
|
||||||
if [ "${err}" != "" ]; then
|
echo "The next step WILL REMOVE the old LND wallet on ${CHAIN}"
|
||||||
echo "lnd-wallet-seed+scb" "lnd.initwallet.py scb returned error" "/home/admin/config.scripts/lnd.initwallet.py scb ${chain}net ... --> ${err} + ${errMore}"
|
echo "Press ENTER to continue or CTRL+C to abort"
|
||||||
if [ "${errMore}" = "server is still in the process of starting" ]; then
|
read key
|
||||||
echo "The SCB recovery is not possible now - use the RETRYSCB option the REPAIR-LND menu after LND is synced."
|
echo "# Stopping lnd on ${CHAIN} ..."
|
||||||
echo "Can repeat the SCB recovery until all peers have force closed the channels to this node."
|
sudo systemctl stop ${netprefix}lnd
|
||||||
else
|
sudo systemctl disable ${netprefix}lnd
|
||||||
exit 12
|
echo "Reset wallet on ${CHAIN}"
|
||||||
fi
|
sudo rm -f /home/bitcoin/.lnd/${netprefix}lnd.conf
|
||||||
fi
|
sudo rm -f /home/bitcoin/.lnd/${netprefix}v3_onion_private_key
|
||||||
fi
|
sudo rm -f /mnt/hdd/lnd/data/chain/${network}/${CHAIN}/wallet.db
|
||||||
|
sudo rm -f /home/bitcoin/.lnd/data/graph/${CHAIN}/channel.db
|
||||||
|
sudo rm -f /home/bitcoin/.lnd/data/graph/${CHAIN}/sphinxreplay.db
|
||||||
|
|
||||||
syncAndCheckLND
|
sudo rm -rf /mnt/hdd/lnd/data/chain/${network}/${CHAIN}
|
||||||
|
sudo rm -rf /home/bitcoin/.lnd/logs/${network}/${CHAIN}
|
||||||
# LND was restarted so need to unlock
|
sudo rm -rf /home/bitcoin/.lnd/data/graph/${CHAIN}
|
||||||
echo "WALLET --> UNLOCK WALLET - SCAN 5000"
|
sudo rm -rf home/bitcoin/.lnd/data/watchtower/${CHAIN}
|
||||||
/home/admin/_cache.sh set message "LND Wallet Unlock - scan 5000"
|
|
||||||
source <(/home/admin/config.scripts/lnd.initwallet.py unlock ${chain}net "${passwordC}" 5000)
|
|
||||||
if [ "${err}" != "" ]; then
|
|
||||||
echo "lnd-wallet-unlock" "lnd.initwallet.py unlock returned error" "/home/admin/config.scripts/lnd.initwallet.py unlock ${chain}net ... --> ${err} + ${errMore}"
|
|
||||||
exit 50
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# BASIC MENU INFO
|
# BASIC MENU INFO
|
||||||
@ -279,8 +305,10 @@ BACKTITLE="RaspiBlitz"
|
|||||||
TITLE="LND repair options for $CHAIN"
|
TITLE="LND repair options for $CHAIN"
|
||||||
MENU=""
|
MENU=""
|
||||||
OPTIONS=()
|
OPTIONS=()
|
||||||
|
if [ "${chain}" = "main" ]; then
|
||||||
OPTIONS+=(COMPACT "Compact the LND channel.db")
|
OPTIONS+=(COMPACT "Compact the LND channel.db")
|
||||||
|
OPTIONS+=(GETSCB "Download channel.backup (StaticChannelBackup)")
|
||||||
|
fi
|
||||||
OPTIONS+=(BACKUP-LND "Backup your LND data (Rescue-File)")
|
OPTIONS+=(BACKUP-LND "Backup your LND data (Rescue-File)")
|
||||||
OPTIONS+=(RESET-LND "Delete LND & start new node/wallet")
|
OPTIONS+=(RESET-LND "Delete LND & start new node/wallet")
|
||||||
OPTIONS+=(LNDRESCUE "Restore from a rescue file")
|
OPTIONS+=(LNDRESCUE "Restore from a rescue file")
|
||||||
@ -311,6 +339,9 @@ case $CHOICE in
|
|||||||
echo "Press ENTER to return to main menu."
|
echo "Press ENTER to return to main menu."
|
||||||
read key
|
read key
|
||||||
;;
|
;;
|
||||||
|
GETSCB)
|
||||||
|
/home/admin/config.scripts/lnd.backup.sh scb-export-gui
|
||||||
|
;;
|
||||||
BACKUP-LND)
|
BACKUP-LND)
|
||||||
/home/admin/config.scripts/lnd.compact.sh interactive
|
/home/admin/config.scripts/lnd.compact.sh interactive
|
||||||
sudo /home/admin/config.scripts/lnd.backup.sh ${netprefix}lnd-export-gui
|
sudo /home/admin/config.scripts/lnd.backup.sh ${netprefix}lnd-export-gui
|
||||||
@ -342,26 +373,12 @@ case $CHOICE in
|
|||||||
# sudo /home/admin/config.scripts/lnd.setname.sh ${chain}net "${result}"
|
# sudo /home/admin/config.scripts/lnd.setname.sh ${chain}net "${result}"
|
||||||
# /home/admin/config.scripts/blitz.conf.sh set hostname "${result}"
|
# /home/admin/config.scripts/blitz.conf.sh set hostname "${result}"
|
||||||
|
|
||||||
echo "stopping ${netprefix}lnd ..."
|
removeLNDwallet
|
||||||
sudo systemctl stop ${netprefix}lnd
|
|
||||||
if [ "${tlnd}" == "on" ];then
|
|
||||||
sudo systemctl stop tlnd
|
|
||||||
fi
|
|
||||||
if [ "${slnd}" == "on" ];then
|
|
||||||
sudo systemctl stop slnd
|
|
||||||
fi
|
|
||||||
echo "Delete wallet"
|
|
||||||
sudo rm -r /mnt/hdd/lnd
|
|
||||||
# create wallet
|
# create wallet
|
||||||
/home/admin/config.scripts/lnd.install.sh on ${chain}net initwallet
|
/home/admin/config.scripts/lnd.install.sh on ${chain}net initwallet
|
||||||
# display and delete the seed for ${chain}net
|
# display and delete the seed for ${chain}net
|
||||||
sudo /home/admin/config.scripts/lnd.install.sh display-seed ${chain}net delete
|
sudo /home/admin/config.scripts/lnd.install.sh display-seed ${chain}net delete
|
||||||
if [ "${tlnd}" == "on" ];then
|
|
||||||
/home/admin/config.scripts/lnd.install.sh on testnet initwallet
|
|
||||||
fi
|
|
||||||
if [ "${slnd}" == "on" ];then
|
|
||||||
/home/admin/config.scripts/lnd.install.sh on signet initwallet
|
|
||||||
fi
|
|
||||||
|
|
||||||
syncAndCheckLND
|
syncAndCheckLND
|
||||||
|
|
||||||
@ -374,18 +391,24 @@ case $CHOICE in
|
|||||||
|
|
||||||
LNDRESCUE)
|
LNDRESCUE)
|
||||||
askLNDbackupCopy
|
askLNDbackupCopy
|
||||||
echo "The next step will overwrite the old LND wallets on all chains"
|
|
||||||
|
#removeAllLNDwallets
|
||||||
|
clear
|
||||||
|
echo
|
||||||
|
echo "The next step WILL REMOVE the old LND wallets on ALL CHAINS"
|
||||||
echo "Press ENTER to continue or CTRL+C to abort"
|
echo "Press ENTER to continue or CTRL+C to abort"
|
||||||
read key
|
read key
|
||||||
echo "Stopping ${netprefix}lnd ..."
|
echo "# Stopping lnd on mainnet ..."
|
||||||
sudo systemctl stop ${netprefix}lnd
|
sudo systemctl stop lnd
|
||||||
|
# don' t want to set CL as default if running parallel
|
||||||
|
#/home/admin/config.scripts/lnd.install.sh off mainnet
|
||||||
if [ "${tlnd}" == "on" ];then
|
if [ "${tlnd}" == "on" ];then
|
||||||
sudo systemctl stop tlnd
|
/home/admin/config.scripts/lnd.install.sh off testnet
|
||||||
fi
|
fi
|
||||||
if [ "${slnd}" == "on" ];then
|
if [ "${slnd}" == "on" ];then
|
||||||
sudo systemctl stop slnd
|
/home/admin/config.scripts/lnd.install.sh off signet
|
||||||
fi
|
fi
|
||||||
echo "Delete wallet"
|
echo "Reset wallet"
|
||||||
sudo rm -r /mnt/hdd/lnd
|
sudo rm -r /mnt/hdd/lnd
|
||||||
|
|
||||||
## from dialogLightningWallet.sh
|
## from dialogLightningWallet.sh
|
||||||
@ -408,12 +431,20 @@ case $CHOICE in
|
|||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
|
|
||||||
SEED+SCB)
|
ONLYSEED)
|
||||||
|
|
||||||
restoreFromSeed
|
restoreFromSeed
|
||||||
|
|
||||||
restoreSCB
|
echo "Set lnd recovery mode & restart ..."
|
||||||
|
sudo /home/admin/config.scripts/lnd.backup.sh "${chain}net" recoverymode on
|
||||||
|
sudo systemctl restart ${netprefix}lnd
|
||||||
|
sleep 3
|
||||||
|
|
||||||
|
echo "# Unlock wallet ..."
|
||||||
|
/home/admin/config.scripts/lnd.unlock.sh "${CHAIN}"
|
||||||
|
|
||||||
echo
|
echo
|
||||||
|
echo "System will now go thru rescan for on-chain funds"
|
||||||
echo "Press ENTER to return to main menu."
|
echo "Press ENTER to return to main menu."
|
||||||
read key
|
read key
|
||||||
# go back to main menu (and show)
|
# go back to main menu (and show)
|
||||||
@ -421,63 +452,60 @@ case $CHOICE in
|
|||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
SEED+SCB)
|
||||||
|
|
||||||
|
restoreFromSeed
|
||||||
|
restoreSCB
|
||||||
|
|
||||||
|
echo "Set lnd recovery mode & restart ..."
|
||||||
|
sudo /home/admin/config.scripts/lnd.backup.sh "${chain}net" recoverymode on
|
||||||
|
sudo systemctl restart ${netprefix}lnd
|
||||||
|
sleep 3
|
||||||
|
|
||||||
|
echo "# Unlock wallet ..."
|
||||||
|
/home/admin/config.scripts/lnd.unlock.sh "${CHAIN}"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "System will now go thru rescan for on-chain funds and when done"
|
||||||
|
echo "the Static-Channel-Backup will trigger to recover off-chain funds."
|
||||||
|
echo "Press ENTER to return to main menu."
|
||||||
|
read key
|
||||||
|
|
||||||
|
# go back to main menu (and show)
|
||||||
|
/home/admin/00raspiblitz.sh
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
|
||||||
RETRYSCB)
|
RETRYSCB)
|
||||||
|
|
||||||
restoreSCB
|
restoreSCB
|
||||||
|
|
||||||
echo
|
|
||||||
echo "Press ENTER to return to main menu."
|
|
||||||
read key
|
|
||||||
# go back to main menu (and show)
|
# go back to main menu (and show)
|
||||||
/home/admin/00raspiblitz.sh
|
/home/admin/00raspiblitz.sh
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
|
|
||||||
ONLYSEED)
|
|
||||||
restoreFromSeed
|
|
||||||
|
|
||||||
echo "WALLET --> UNLOCK WALLET - SCAN 5000"
|
|
||||||
/home/admin/_cache.sh set message "LND Wallet Unlock - scan 5000"
|
|
||||||
source <(/home/admin/config.scripts/lnd.initwallet.py unlock "${chain}net" "${passwordC}" 5000)
|
|
||||||
if [ "${err}" != "" ]; then
|
|
||||||
echo "lnd-wallet-unlock" "lnd.initwallet.py unlock returned error" "/home/admin/config.scripts/lnd.initwallet.py unlock ${chain}net ... --> ${err} + ${errMore}"
|
|
||||||
exit 50
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Press ENTER to return to main menu."
|
|
||||||
read key
|
|
||||||
# go back to main menu (and show)
|
|
||||||
/home/admin/00raspiblitz.sh
|
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
|
|
||||||
RESCAN)
|
RESCAN)
|
||||||
clear
|
clear
|
||||||
echo "Restart lnd to lock the wallet ..."
|
|
||||||
echo "If this takes very long LND might be already rescanning."
|
|
||||||
echo "Can use 'sudo pkill lnd' to shut down ungracefully."
|
|
||||||
sudo systemctl restart lnd
|
|
||||||
|
|
||||||
# from blitz.conf.sh
|
source <(sudo /home/admin/config.scripts/lnd.backup.sh "${CHAIN}" recoverymode status)
|
||||||
configFile="/home/admin/raspiblitz.info"
|
if [ "${recoverymode}" == "0" ]; then
|
||||||
keystr="fundRecovery"
|
|
||||||
valuestr="1"
|
echo "Putting lnd back in recoverymode."
|
||||||
# check if key needs to be added (prepare new entry)
|
sudo /home/admin/config.scripts/lnd.backup.sh "${CHAIN}" recoverymode on
|
||||||
entryExists=$(grep -c "^${keystr}=" ${configFile})
|
echo "Restarting lnd ..."
|
||||||
if [ ${entryExists} -eq 0 ]; then
|
sudo systemctl restart ${netprefix}lnd
|
||||||
echo "${keystr}=" | tee -a ${configFile}
|
sleep 3
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
echo "lnd already in recoverymode."
|
||||||
|
|
||||||
fi
|
fi
|
||||||
# add valuestr quotes if not standard values
|
|
||||||
if [ "${valuestr}" != "on" ] && [ "${valuestr}" != "off" ] && [ "${valuestr}" != "1" ] && [ "${valuestr}" != "0" ]; then
|
|
||||||
valuestr="'${valuestr}'"
|
|
||||||
fi
|
|
||||||
# set value (sed needs sudo to operate when user is not root)
|
|
||||||
sudo sed -i "s/^${keystr}=.*/${keystr}=${valuestr}/g" ${configFile}
|
|
||||||
|
|
||||||
/home/admin/config.scripts/lnd.unlock.sh unlock
|
echo "# Unlock wallet ..."
|
||||||
|
/home/admin/config.scripts/lnd.unlock.sh "${CHAIN}"
|
||||||
# switch rescan off for the next unlock
|
|
||||||
valuestr="0"
|
|
||||||
sudo sed -i "s/^${keystr}=.*/${keystr}=${valuestr}/g" ${configFile}
|
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "To show the scanning progress in the background will follow the lnd.log with:"
|
echo "To show the scanning progress in the background will follow the lnd.log with:"
|
||||||
|
@ -27,9 +27,9 @@ elif [ $LNTYPE = lnd ];then
|
|||||||
fi
|
fi
|
||||||
if [ ${chainOutSync} -eq 1 ]; then
|
if [ ${chainOutSync} -eq 1 ]; then
|
||||||
if [ $LNTYPE = cl ];then
|
if [ $LNTYPE = cl ];then
|
||||||
echo "# FAIL PRECHECK - lncli getinfo shows 'synced_to_chain': false - wait until chain is sync "
|
echo "# FAIL PRECHECK - '$lightningcli_alias getinfo' blockheight is different from 'bitcoind getblockchaininfo' - wait until chain is sync "
|
||||||
else
|
else
|
||||||
echo "# FAIL PRECHECK - 'lightning-cli getinfo' blockheight is different from 'bitcoind getblockchaininfo' - wait until chain is sync "
|
echo "# FAIL PRECHECK - '$lncli_alias getinfo' shows 'synced_to_chain': false - wait until chain is sync "
|
||||||
fi
|
fi
|
||||||
echo
|
echo
|
||||||
echo "# PRESS ENTER to return to menu"
|
echo "# PRESS ENTER to return to menu"
|
||||||
|
@ -18,8 +18,6 @@ fi
|
|||||||
|
|
||||||
source <(/home/admin/config.scripts/network.aliases.sh getvars $1 $2)
|
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
|
# check if chain is in sync
|
||||||
if [ $LNTYPE = cl ];then
|
if [ $LNTYPE = cl ];then
|
||||||
lncommand="${netprefix}lightning-cli"
|
lncommand="${netprefix}lightning-cli"
|
||||||
|
@ -70,6 +70,9 @@ WEEK=604800
|
|||||||
MONTH=2592000
|
MONTH=2592000
|
||||||
YEAR=31536000
|
YEAR=31536000
|
||||||
|
|
||||||
|
# make sure root is in group bitcoin and allowed to read macaroons
|
||||||
|
usermod -G bitcoin root
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
# INIT
|
# INIT
|
||||||
####################################################################
|
####################################################################
|
||||||
@ -285,29 +288,9 @@ do
|
|||||||
# data that may be based on setup phase or configuration
|
# data that may be based on setup phase or configuration
|
||||||
####################################################################
|
####################################################################
|
||||||
|
|
||||||
# by default will only scan the btc & lightning instances that are set to default
|
|
||||||
# but can scan/monitor all that are switched on when `system_scan_all=on` in config
|
|
||||||
|
|
||||||
# read/update config values
|
# read/update config values
|
||||||
source /mnt/hdd/raspiblitz.conf
|
source /mnt/hdd/raspiblitz.conf
|
||||||
|
|
||||||
# check if a one time `system_scan_all_once=1` is set on cache
|
|
||||||
# will trigger a scan_all for one loop
|
|
||||||
source <(/home/admin/_cache.sh get system_scan_all_once)
|
|
||||||
if [ "${system_scan_all_once}" == "1" ]; then
|
|
||||||
echo "system_scan_all_once found --> TRIGGER system_scan_all for one loop"
|
|
||||||
/home/admin/_cache.sh set system_scan_all_once "0"
|
|
||||||
system_scan_all="on"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# check if a temporary `system_scan_all_temp=1` is set on cache
|
|
||||||
# will trigger a scan_all until its gone or `0`
|
|
||||||
source <(/home/admin/_cache.sh get system_scan_all_temp)
|
|
||||||
if [ "${system_scan_all_temp}" == "1" ]; then
|
|
||||||
echo "system_scan_all_temp found --> TRIGGER system_scan_all"
|
|
||||||
system_scan_all="on"
|
|
||||||
fi
|
|
||||||
|
|
||||||
###################
|
###################
|
||||||
# HARDDRIVE
|
# HARDDRIVE
|
||||||
|
|
||||||
@ -354,12 +337,14 @@ do
|
|||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# only scan non defaults when set by parameter from config
|
# set intervals for non default & non-default (in seconds)
|
||||||
if [ "${system_scan_all}" != "on" ]; then
|
CYCLE_QUICK=30
|
||||||
|
CYCLE_MID=60
|
||||||
|
CYCLE_LONG=90
|
||||||
if [ "${isDefaultChain}" != "1" ]; then
|
if [ "${isDefaultChain}" != "1" ]; then
|
||||||
#echo "skip btc ${CHAIN}net scan - because its not default"
|
CYCLE_QUICK=150
|
||||||
continue
|
CYCLE_MID=300
|
||||||
fi
|
CYCLE_LONG=600
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# update basic status values always
|
# update basic status values always
|
||||||
@ -381,7 +366,7 @@ do
|
|||||||
btc_default_error_full \
|
btc_default_error_full \
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
if [ "${stillvalid}" == "0" ] || [ ${age} -gt 30 ]; then
|
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${CYCLE_QUICK} ]; then
|
||||||
echo "updating: /home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net status"
|
echo "updating: /home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net status"
|
||||||
source <(/home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net status)
|
source <(/home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net status)
|
||||||
/home/admin/_cache.sh set btc_${CHAIN}net_activated "1"
|
/home/admin/_cache.sh set btc_${CHAIN}net_activated "1"
|
||||||
@ -429,7 +414,7 @@ do
|
|||||||
btc_default_sync_initialblockdownload \
|
btc_default_sync_initialblockdownload \
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${MINUTE} ]; then
|
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${CYCLE_MID} ]; then
|
||||||
error=""
|
error=""
|
||||||
echo "updating: /home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net info"
|
echo "updating: /home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net info"
|
||||||
source <(/home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net info)
|
source <(/home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net info)
|
||||||
@ -450,6 +435,7 @@ do
|
|||||||
/home/admin/_cache.sh set btc_default_sync_percentage "${btc_sync_percentage}"
|
/home/admin/_cache.sh set btc_default_sync_percentage "${btc_sync_percentage}"
|
||||||
/home/admin/_cache.sh set btc_default_sync_initialblockdownload "${btc_sync_initialblockdownload}"
|
/home/admin/_cache.sh set btc_default_sync_initialblockdownload "${btc_sync_initialblockdownload}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
else
|
else
|
||||||
echo "!! ERROR --> ${error}"
|
echo "!! ERROR --> ${error}"
|
||||||
fi
|
fi
|
||||||
@ -468,7 +454,7 @@ do
|
|||||||
btc_default_port \
|
btc_default_port \
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${MINUTE} ]; then
|
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${CYCLE_MID} ]; then
|
||||||
error=""
|
error=""
|
||||||
echo "updating: /home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net network"
|
echo "updating: /home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net network"
|
||||||
source <(/home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net network)
|
source <(/home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net network)
|
||||||
@ -495,7 +481,7 @@ do
|
|||||||
btc_default_mempool_transactions \
|
btc_default_mempool_transactions \
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${MINUTE5} ]; then
|
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${CYCLE_LONG} ]; then
|
||||||
error=""
|
error=""
|
||||||
echo "updating: /home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net mempool"
|
echo "updating: /home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net mempool"
|
||||||
source <(/home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net mempool)
|
source <(/home/admin/config.scripts/bitcoin.monitor.sh ${CHAIN}net mempool)
|
||||||
@ -538,12 +524,14 @@ do
|
|||||||
isDefaultChain=$(echo "${CHAIN}" | grep -c "${chain}")
|
isDefaultChain=$(echo "${CHAIN}" | grep -c "${chain}")
|
||||||
isDefaultLightning=$(echo "${lightning}" | grep -c "lnd")
|
isDefaultLightning=$(echo "${lightning}" | grep -c "lnd")
|
||||||
|
|
||||||
# only scan non defaults when set by parameter from config
|
# set intervals for non default & non-default (in seconds)
|
||||||
if [ "${system_scan_all}" != "on" ]; then
|
CYCLE_QUICK=30
|
||||||
if [ "${isDefaultChain}" != "1" ] || [ ${isDefaultLightning} != "1" ]; then
|
CYCLE_MID=60
|
||||||
#echo "skip lnd ${CHAIN}net scan - because its not default"
|
CYCLE_LONG=90
|
||||||
continue
|
if [ "${isDefaultChain}" != "1" ] || [ "${isDefaultLightning}" != "1" ]; then
|
||||||
fi
|
CYCLE_QUICK=300
|
||||||
|
CYCLE_MID=600
|
||||||
|
CYCLE_LONG=900
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# update basic status values always
|
# update basic status values always
|
||||||
@ -567,7 +555,7 @@ do
|
|||||||
ln_default_error_full \
|
ln_default_error_full \
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
if [ "${stillvalid}" == "0" ] || [ ${age} -gt 30 ]; then
|
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${CYCLE_QUICK} ]; then
|
||||||
echo "updating: /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net status"
|
echo "updating: /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net status"
|
||||||
source <(/home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net status)
|
source <(/home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net status)
|
||||||
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_activated "1"
|
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_activated "1"
|
||||||
@ -596,7 +584,7 @@ do
|
|||||||
|
|
||||||
# check if config needs update
|
# check if config needs update
|
||||||
source <(/home/admin/_cache.sh valid ln_lnd_${CHAIN}net_alias)
|
source <(/home/admin/_cache.sh valid ln_lnd_${CHAIN}net_alias)
|
||||||
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${MINUTE5} ]; then
|
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${CYCLE_LONG} ]; then
|
||||||
error=""
|
error=""
|
||||||
echo "updating: /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net config"
|
echo "updating: /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net config"
|
||||||
source <(/home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net config)
|
source <(/home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net config)
|
||||||
@ -621,6 +609,8 @@ do
|
|||||||
ln_lnd_${CHAIN}net_channels_inactive \
|
ln_lnd_${CHAIN}net_channels_inactive \
|
||||||
ln_lnd_${CHAIN}net_channels_total \
|
ln_lnd_${CHAIN}net_channels_total \
|
||||||
ln_lnd_${CHAIN}net_peers \
|
ln_lnd_${CHAIN}net_peers \
|
||||||
|
ln_lnd_${CHAIN}net_recovery_mode \
|
||||||
|
ln_lnd_${CHAIN}net_recovery_done \
|
||||||
)
|
)
|
||||||
if [ "${isDefaultLightning}" == "1" ] && [ "${isDefaultChain}" == "1" ] && [ "${stillvalid}" == "1" ]; then
|
if [ "${isDefaultLightning}" == "1" ] && [ "${isDefaultChain}" == "1" ] && [ "${stillvalid}" == "1" ]; then
|
||||||
source <(/home/admin/_cache.sh valid \
|
source <(/home/admin/_cache.sh valid \
|
||||||
@ -633,9 +623,11 @@ do
|
|||||||
ln_default_channels_inactive \
|
ln_default_channels_inactive \
|
||||||
ln_default_channels_total \
|
ln_default_channels_total \
|
||||||
ln_default_peers \
|
ln_default_peers \
|
||||||
|
ln_default_recovery_mode \
|
||||||
|
ln_default_recovery_done \
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${MINUTE} ]; then
|
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${CYCLE_MID} ]; then
|
||||||
error=""
|
error=""
|
||||||
echo "updating: /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net info"
|
echo "updating: /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net info"
|
||||||
source <(/home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net info)
|
source <(/home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net info)
|
||||||
@ -650,6 +642,8 @@ do
|
|||||||
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_channels_inactive "${ln_lnd_channels_inactive}"
|
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_channels_inactive "${ln_lnd_channels_inactive}"
|
||||||
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_channels_total "${ln_lnd_channels_total}"
|
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_channels_total "${ln_lnd_channels_total}"
|
||||||
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_peers "${ln_lnd_peers}"
|
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_peers "${ln_lnd_peers}"
|
||||||
|
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_recovery_mode "${ln_lnd_recovery_mode}"
|
||||||
|
/home/admin/_cache.sh set ln_lnd_${CHAIN}net_recovery_done "${ln_lnd_recovery_done}"
|
||||||
if [ "${isDefaultLightning}" == "1" ] && [ "${isDefaultChain}" == "1" ]; then
|
if [ "${isDefaultLightning}" == "1" ] && [ "${isDefaultChain}" == "1" ]; then
|
||||||
/home/admin/_cache.sh set ln_default_address "${ln_lnd_address}"
|
/home/admin/_cache.sh set ln_default_address "${ln_lnd_address}"
|
||||||
/home/admin/_cache.sh set ln_default_tor "${ln_lnd_tor}"
|
/home/admin/_cache.sh set ln_default_tor "${ln_lnd_tor}"
|
||||||
@ -660,6 +654,8 @@ do
|
|||||||
/home/admin/_cache.sh set ln_default_channels_inactive "${ln_lnd_channels_inactive}"
|
/home/admin/_cache.sh set ln_default_channels_inactive "${ln_lnd_channels_inactive}"
|
||||||
/home/admin/_cache.sh set ln_default_channels_total "${ln_lnd_channels_total}"
|
/home/admin/_cache.sh set ln_default_channels_total "${ln_lnd_channels_total}"
|
||||||
/home/admin/_cache.sh set ln_default_peers "${ln_lnd_peers}"
|
/home/admin/_cache.sh set ln_default_peers "${ln_lnd_peers}"
|
||||||
|
/home/admin/_cache.sh set ln_default_recovery_mode "${ln_lnd_recovery_mode}"
|
||||||
|
/home/admin/_cache.sh set ln_default_recovery_done "${ln_lnd_recovery_done}"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "!! ERROR --> ${error}"
|
echo "!! ERROR --> ${error}"
|
||||||
@ -681,7 +677,7 @@ do
|
|||||||
ln_default_wallet_channels_pending \
|
ln_default_wallet_channels_pending \
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
if [ "${stillvalid}" == "0" ] || [ ${age} -gt 22 ]; then
|
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${CYCLE_QUICK} ]; then
|
||||||
error=""
|
error=""
|
||||||
echo "updating: /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net wallet"
|
echo "updating: /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net wallet"
|
||||||
source <(/home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net wallet)
|
source <(/home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net wallet)
|
||||||
@ -713,7 +709,7 @@ do
|
|||||||
ln_default_fees_total \
|
ln_default_fees_total \
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${MINUTE5} ]; then
|
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${CYCLE_LONG} ]; then
|
||||||
error=""
|
error=""
|
||||||
echo "updating: /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net fees"
|
echo "updating: /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net fees"
|
||||||
source <(/home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net fees)
|
source <(/home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net fees)
|
||||||
@ -758,12 +754,14 @@ do
|
|||||||
isDefaultChain=$(echo "${CHAIN}" | grep -c "${chain}")
|
isDefaultChain=$(echo "${CHAIN}" | grep -c "${chain}")
|
||||||
isDefaultLightning=$(echo "${lightning}" | grep -c "cl")
|
isDefaultLightning=$(echo "${lightning}" | grep -c "cl")
|
||||||
|
|
||||||
# only scan non defaults when set by parameter from config
|
# set intervals for non default & non-default (in seconds)
|
||||||
if [ "${system_scan_all}" != "on" ]; then
|
CYCLE_QUICK=30
|
||||||
if [ "${isDefaultChain}" != "1" ] || [ ${isDefaultLightning} != "1" ]; then
|
CYCLE_MID=60
|
||||||
#echo "skip cl ${CHAIN}net scan - because its not default"
|
CYCLE_LONG=90
|
||||||
continue
|
if [ "${isDefaultChain}" != "1" ] || [ "${isDefaultLightning}" != "1" ]; then
|
||||||
fi
|
CYCLE_QUICK=300
|
||||||
|
CYCLE_MID=600
|
||||||
|
CYCLE_LONG=900
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# TODO: c-lightning is seen as "always unlocked" for now - needs to be implemented later #2691
|
# TODO: c-lightning is seen as "always unlocked" for now - needs to be implemented later #2691
|
||||||
@ -787,7 +785,7 @@ do
|
|||||||
ln_default_error_full \
|
ln_default_error_full \
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
if [ "${stillvalid}" == "0" ] || [ ${age} -gt 30 ]; then
|
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${CYCLE_QUICK} ]; then
|
||||||
echo "updating: /home/admin/config.scripts/cl.monitor.sh ${CHAIN}net status"
|
echo "updating: /home/admin/config.scripts/cl.monitor.sh ${CHAIN}net status"
|
||||||
source <(/home/admin/config.scripts/cl.monitor.sh ${CHAIN}net status)
|
source <(/home/admin/config.scripts/cl.monitor.sh ${CHAIN}net status)
|
||||||
/home/admin/_cache.sh set ln_cl_${CHAIN}net_activated "1"
|
/home/admin/_cache.sh set ln_cl_${CHAIN}net_activated "1"
|
||||||
@ -841,7 +839,7 @@ do
|
|||||||
ln_default_fees_total \
|
ln_default_fees_total \
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${MINUTE} ]; then
|
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${CYCLE_MID} ]; then
|
||||||
error=""
|
error=""
|
||||||
echo "updating: /home/admin/config.scripts/cl.monitor.sh ${CHAIN}net info"
|
echo "updating: /home/admin/config.scripts/cl.monitor.sh ${CHAIN}net info"
|
||||||
source <(/home/admin/config.scripts/cl.monitor.sh ${CHAIN}net info)
|
source <(/home/admin/config.scripts/cl.monitor.sh ${CHAIN}net info)
|
||||||
@ -857,6 +855,8 @@ do
|
|||||||
/home/admin/_cache.sh set ln_cl_${CHAIN}net_channels_inactive "${ln_cl_channels_inactive}"
|
/home/admin/_cache.sh set ln_cl_${CHAIN}net_channels_inactive "${ln_cl_channels_inactive}"
|
||||||
/home/admin/_cache.sh set ln_cl_${CHAIN}net_channels_total "${ln_cl_channels_total}"
|
/home/admin/_cache.sh set ln_cl_${CHAIN}net_channels_total "${ln_cl_channels_total}"
|
||||||
/home/admin/_cache.sh set ln_cl_${CHAIN}net_fees_total "${ln_cl_fees_total}"
|
/home/admin/_cache.sh set ln_cl_${CHAIN}net_fees_total "${ln_cl_fees_total}"
|
||||||
|
/home/admin/_cache.sh set ln_cl_${CHAIN}net_recovery_mode "${ln_cl_recovery_mode}"
|
||||||
|
/home/admin/_cache.sh set ln_cl_${CHAIN}net_recovery_done "${ln_cl_recovery_done}"
|
||||||
|
|
||||||
if [ "${isDefaultLightning}" == "1" ] && [ "${isDefaultChain}" == "1" ]; then
|
if [ "${isDefaultLightning}" == "1" ] && [ "${isDefaultChain}" == "1" ]; then
|
||||||
/home/admin/_cache.sh set ln_default_alias "${ln_cl_alias}"
|
/home/admin/_cache.sh set ln_default_alias "${ln_cl_alias}"
|
||||||
@ -870,6 +870,8 @@ do
|
|||||||
/home/admin/_cache.sh set ln_default_channels_inactive "${ln_cl_channels_inactive}"
|
/home/admin/_cache.sh set ln_default_channels_inactive "${ln_cl_channels_inactive}"
|
||||||
/home/admin/_cache.sh set ln_default_channels_total "${ln_cl_channels_total}"
|
/home/admin/_cache.sh set ln_default_channels_total "${ln_cl_channels_total}"
|
||||||
/home/admin/_cache.sh set ln_default_fees_total "${ln_cl_fees_total}"
|
/home/admin/_cache.sh set ln_default_fees_total "${ln_cl_fees_total}"
|
||||||
|
/home/admin/_cache.sh set ln_default_recovery_mode "${ln_cl_recovery_mode}"
|
||||||
|
/home/admin/_cache.sh set ln_default_recovery_done "${ln_cl_recovery_done}"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "!! ERROR --> ${error}"
|
echo "!! ERROR --> ${error}"
|
||||||
@ -891,7 +893,7 @@ do
|
|||||||
ln_default_wallet_channels_pending \
|
ln_default_wallet_channels_pending \
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${MINUTE} ]; then
|
if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${CYCLE_MID} ]; then
|
||||||
error=""
|
error=""
|
||||||
echo "updating: /home/admin/config.scripts/cl.monitor.sh ${CHAIN}net wallet"
|
echo "updating: /home/admin/config.scripts/cl.monitor.sh ${CHAIN}net wallet"
|
||||||
source <(/home/admin/config.scripts/cl.monitor.sh ${CHAIN}net wallet)
|
source <(/home/admin/config.scripts/cl.monitor.sh ${CHAIN}net wallet)
|
||||||
@ -913,6 +915,98 @@ do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
##################################
|
||||||
|
# DEFAULT & SUMMARIZED SYNC STATUS
|
||||||
|
|
||||||
|
btc_default_sync_initial_done=0
|
||||||
|
btc_all_sync_initial_done=1
|
||||||
|
ln_default_sync_initial_done=0
|
||||||
|
ln_all_sync_initial_done=1
|
||||||
|
blitz_sync_initial_done=0
|
||||||
|
networks=( "main" "test" "sig" )
|
||||||
|
sedondLayers=( "lnd" "cl" )
|
||||||
|
|
||||||
|
# if default is mainnet, then consider mainnet=on
|
||||||
|
if [ "${chain}" == "main" ]; then
|
||||||
|
mainnet="on"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# loop over all chains
|
||||||
|
for CHAIN in "${networks[@]}"
|
||||||
|
do
|
||||||
|
|
||||||
|
# skip if this network is not switched on
|
||||||
|
btc_service_name="${CHAIN}net"
|
||||||
|
if [ "${!btc_service_name}" != "on" ]; then
|
||||||
|
echo "skipping because ${btc_service_name}=${!btc_service_name}"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# get values from cache
|
||||||
|
source <(/home/admin/_cache.sh meta btc_${CHAIN}net_sync_initial_done)
|
||||||
|
flagBtcDone="${value}"
|
||||||
|
|
||||||
|
# check if default
|
||||||
|
if [ "${CHAIN}" == "${chain}" ]; then
|
||||||
|
btc_default_sync_initial_done="${flagBtcDone}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# check for all btc sync
|
||||||
|
if [ "${flagBtcDone}" != "1" ]; then
|
||||||
|
btc_all_sync_initial_done=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# sub loop over all layer 2 on that chain
|
||||||
|
for LN in "${sedondLayers[@]}"
|
||||||
|
do
|
||||||
|
|
||||||
|
# skip if this variant is not switched on
|
||||||
|
ln_service_name="${LN}"
|
||||||
|
if [ "${CHAIN}" == "test" ]; then
|
||||||
|
ln_service_name="t${LN}"
|
||||||
|
fi
|
||||||
|
if [ "${CHAIN}" == "sig" ]; then
|
||||||
|
ln_service_name="s${LN}"
|
||||||
|
fi
|
||||||
|
if [ "${!ln_service_name}" != "on" ]; then
|
||||||
|
echo "skipping because ${ln_service_name}=${!ln_service_name}"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# get values from cache
|
||||||
|
source <(/home/admin/_cache.sh meta ln_${LN}_${CHAIN}net_sync_initial_done)
|
||||||
|
flagLNSyncDone="${value}"
|
||||||
|
|
||||||
|
# check if default
|
||||||
|
if [ "${CHAIN}" == "${chain}" ] && [ "${LN}" == "${lightning}" ]; then
|
||||||
|
ln_default_sync_initial_done="${flagLNSyncDone}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# check for all ln sync
|
||||||
|
if [ "${flagLNSyncDone}" != "1" ]; then
|
||||||
|
ln_all_sync_initial_done=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
# finalize & writing results to cache
|
||||||
|
if [ "${lightning}" == "" ] || [ "${lightning}" == "none" ]; then
|
||||||
|
ln_all_sync_initial_done=""
|
||||||
|
ln_default_sync_initial_done=""
|
||||||
|
blitz_sync_initial_done="${btc_all_sync_initial_done}"
|
||||||
|
else
|
||||||
|
# only if all btc & ln sync done - the complete blitz has done syncing
|
||||||
|
if [ "${btc_all_sync_initial_done}" == "1" ] && [ "${ln_all_sync_initial_done}" == "1" ]; then
|
||||||
|
blitz_sync_initial_done="1"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
/home/admin/_cache.sh set blitz_sync_initial_done "${blitz_sync_initial_done}"
|
||||||
|
/home/admin/_cache.sh set btc_default_sync_initial_done "${btc_default_sync_initial_done}"
|
||||||
|
/home/admin/_cache.sh set btc_all_sync_initial_done "${btc_all_sync_initial_done}"
|
||||||
|
/home/admin/_cache.sh set ln_default_sync_initial_done "${ln_default_sync_initial_done}"
|
||||||
|
/home/admin/_cache.sh set ln_all_sync_initial_done "${ln_all_sync_initial_done}"
|
||||||
|
|
||||||
#################
|
#################
|
||||||
# DONE
|
# DONE
|
||||||
|
|
||||||
|
@ -223,6 +223,148 @@ do
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
####################################################
|
||||||
|
# MONITOR Initial Syncing of Bitcoin & Lightning
|
||||||
|
# - turn off recovery mode
|
||||||
|
####################################################
|
||||||
|
|
||||||
|
recheckIBD=$((($counter % 10)+1))
|
||||||
|
if [ ${recheckIBD} -eq 1 ]; then
|
||||||
|
# loop thru mainet, testnet & signet
|
||||||
|
networks=( "main" "test" "sig" )
|
||||||
|
for CHAIN in "${networks[@]}"
|
||||||
|
do
|
||||||
|
|
||||||
|
# gat values from cache
|
||||||
|
source <(/home/admin/_cache.sh meta btc_${CHAIN}net_sync_initial_started)
|
||||||
|
flagBtcStarted="${value}"
|
||||||
|
source <(/home/admin/_cache.sh meta btc_${CHAIN}net_sync_initialblockdownload)
|
||||||
|
flagBtcActive="${value}"
|
||||||
|
source <(/home/admin/_cache.sh meta btc_${CHAIN}net_synced)
|
||||||
|
flagBtcSynced="${value}"
|
||||||
|
source <(/home/admin/_cache.sh meta btc_${CHAIN}net_online)
|
||||||
|
flagBtcOnline="${value}"
|
||||||
|
source <(/home/admin/_cache.sh meta btc_${CHAIN}net_sync_initial_done)
|
||||||
|
flagBtcDone="${value}"
|
||||||
|
#echo "CHAIN(${CHAIN}) flagBtcStarted(${flagBtcStarted}) flagBtcActive(${flagBtcActive}) flagBtcSynced(${flagBtcSynced}) flagBtcOnline(${flagBtcOnline}) flagBtcDone(${flagBtcDone})"
|
||||||
|
|
||||||
|
# first check if flags need to be reset (manually delete of blockchain)
|
||||||
|
if [ "${flagBtcDone}" == "1" ] && [ "${flagBtcActive}" == "1" ]; then
|
||||||
|
flagBtcDone=0
|
||||||
|
/home/admin/config.scripts/blitz.conf.sh set btc_${CHAIN}net_sync_initial_done ${flagBtcDone} /home/admin/raspiblitz.info
|
||||||
|
echo "EVENT --> btc_${CHAIN}net_sync_initial_done changed to ${flagBtcDone}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# when started flag not set yet - but is now active --> set flag
|
||||||
|
if [ "${flagBtcStarted}" != "1" ] && [ "${flagBtcActive}" == "1" ]; then
|
||||||
|
flagBtcStarted=1
|
||||||
|
/home/admin/_cache.sh set btc_${CHAIN}net_sync_initial_started ${flagBtcStarted}
|
||||||
|
echo "EVENT --> btc_${CHAIN}net_sync_initial_started changed to ${flagBtcStarted}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# when started done is set - but not not active anymore --> end of IDB event detected
|
||||||
|
if [ "${flagBtcDone}" == "0" ] && [ "${flagBtcOnline}" == "1" ] && [ "${flagBtcSynced}" == "1" ]; then
|
||||||
|
flagBtcDone=1
|
||||||
|
/home/admin/config.scripts/blitz.conf.sh set btc_${CHAIN}net_sync_initial_done ${flagBtcDone} /home/admin/raspiblitz.info
|
||||||
|
echo "EVENT --> btc_${CHAIN}net_sync_initial_done changed to ${flagBtcDone}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# loop thru all second layers
|
||||||
|
sedondLayers=( "lnd" "cl" )
|
||||||
|
for LN in "${sedondLayers[@]}"
|
||||||
|
do
|
||||||
|
|
||||||
|
source <(/home/admin/_cache.sh meta ln_${LN}_${CHAIN}net_sync_chain)
|
||||||
|
flagLnSyncChain="${value}"
|
||||||
|
source <(/home/admin/_cache.sh meta ln_${LN}_${CHAIN}net_online)
|
||||||
|
flagLnOnline="${value}"
|
||||||
|
source <(/home/admin/_cache.sh meta ln_${LN}_${CHAIN}net_recovery_mode)
|
||||||
|
flagLNRecoveryMode="${value}"
|
||||||
|
source <(/home/admin/_cache.sh meta ln_${LN}_${CHAIN}net_recovery_done)
|
||||||
|
flagLNRecoveryDone="${value}"
|
||||||
|
source <(/home/admin/_cache.sh meta ln_${LN}_${CHAIN}net_sync_initial_done)
|
||||||
|
flagLNSyncDone="${value}"
|
||||||
|
#echo "LN(${LN}) flagLnSyncChain(${flagLnSyncChain}) flagLnOnline(${flagLnOnline}) flagLNRecoveryMode(${flagLNRecoveryMode}) flagLNRecoveryDone(${flagLNRecoveryDone}) flagLNSyncDone(${flagLNSyncDone})"
|
||||||
|
|
||||||
|
# first check if flags need to be reset (manually a rescan was triggered)
|
||||||
|
if [ "${flagLNSyncDone}" == "1" ] && [ "${flagLNRecoveryMode}" == "1" ]; then
|
||||||
|
flagLNSyncDone=0
|
||||||
|
/home/admin/config.scripts/blitz.conf.sh set ln_${LN}_${CHAIN}net_sync_initial_done ${flagLNSyncDone} /home/admin/raspiblitz.info
|
||||||
|
echo "EVENT --> ln_${LN}_${CHAIN}net_sync_initial_done to ${flagLNSyncDone}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# when flag initial sync not done yet - but all chains are in sync with network
|
||||||
|
if [ "${flagLNSyncDone}" == "0" ] && [ "${flagBtcDone}" == "1" ] && [ "${flagLnOnline}" == "1" ] && [ "${flagLnSyncChain}" == "1" ]; then
|
||||||
|
|
||||||
|
# then only finished if no LNRecoveryMode or LNRecoveryDone
|
||||||
|
if [ "${flagLNRecoveryMode}" == "0" ] || [ "${flagLNRecoveryDone}" == "1" ]; then
|
||||||
|
|
||||||
|
# write event
|
||||||
|
flagLNSyncDone=1
|
||||||
|
/home/admin/config.scripts/blitz.conf.sh set ln_${LN}_${CHAIN}net_sync_initial_done ${flagLNSyncDone} /home/admin/raspiblitz.info
|
||||||
|
echo "EVENT --> ln_${LN}_${CHAIN}net_sync_initial_done to ${flagLNSyncDone}"
|
||||||
|
|
||||||
|
# LND if recovery mode was on - deactivate now
|
||||||
|
if [ "${LN}" == "lnd" ] && [ "${flagLNRecoveryMode}" == "1" ]; then
|
||||||
|
/home/admin/_cache.sh set ln_lnd_mainnet_recovery_mode 0
|
||||||
|
/home/admin/config.scripts/lnd.backup.sh mainnet recoverymode off
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
####################################################
|
||||||
|
# CHECK FOR End of Intial Blockhain & Lightning Sync
|
||||||
|
# bitcoin mainnet only / special on dbcache size
|
||||||
|
####################################################
|
||||||
|
|
||||||
|
# check every 60secs
|
||||||
|
recheckIBD=$((($counter % 60)+1))
|
||||||
|
if [ ${recheckIBD} -eq 1 ]; then
|
||||||
|
|
||||||
|
# check if flag exists (gets created on setup)
|
||||||
|
# this flag signals that an initial blockchain sync/chatchup was happening
|
||||||
|
flagExists=$(ls /mnt/hdd/bitcoin/blocks/selfsync.flag 2>/dev/null | grep -c "selfsync.flag")
|
||||||
|
if [ ${flagExists} -eq 1 ]; then
|
||||||
|
|
||||||
|
source <(/home/admin/_cache.sh get btc_default_sync_initialblockdownload)
|
||||||
|
if [ "${btc_default_sync_initialblockdownload}" == "0" ]; then
|
||||||
|
|
||||||
|
echo "CHECK FOR END OF IBD --> reduce RAM for next reboot"
|
||||||
|
|
||||||
|
# remove flag
|
||||||
|
rm /mnt/hdd/bitcoin/blocks/selfsync.flag
|
||||||
|
|
||||||
|
# set dbcache back to normal (to give room for other apps after reboot in the future)
|
||||||
|
kbSizeRAM=$(cat /proc/meminfo | grep "MemTotal" | sed 's/[^0-9]*//g')
|
||||||
|
|
||||||
|
# RP4 4GB
|
||||||
|
if [ ${kbSizeRAM} -gt 3500000 ]; then
|
||||||
|
echo "Detected RAM >=4GB --> normalizing bitcoin.conf"
|
||||||
|
sed -i "s/^dbcache=.*/dbcache=512/g" /mnt/hdd/bitcoin/bitcoin.conf
|
||||||
|
# RP4 2GB
|
||||||
|
elif [ ${kbSizeRAM} -gt 1500000 ]; then
|
||||||
|
echo "Detected RAM >=2GB --> normalizing bitcoin.conf"
|
||||||
|
sed -i "s/^dbcache=.*/dbcache=256/g" /mnt/hdd/bitcoin/bitcoin.conf
|
||||||
|
#RP3/4 1GB
|
||||||
|
else
|
||||||
|
echo "Detected RAM <=1GB --> normalizing bitcoin.conf"
|
||||||
|
sed -i "s/^dbcache=.*/dbcache=128/g" /mnt/hdd/bitcoin/bitcoin.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
# relax sanning on sync progress (after 30 more secs)
|
||||||
|
/home/admin/_cache.sh focus btc_default_sync_progress 10 30
|
||||||
|
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
###############################
|
###############################
|
||||||
# BlitzTUI Monitoring
|
# BlitzTUI Monitoring
|
||||||
###############################
|
###############################
|
||||||
@ -410,43 +552,6 @@ do
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
####################################################
|
|
||||||
# CHECK FOR END OF IBD (self validation)
|
|
||||||
####################################################
|
|
||||||
|
|
||||||
# check every 60secs
|
|
||||||
recheckIBD=$((($counter % 60)+1))
|
|
||||||
if [ ${recheckIBD} -eq 1 ]; then
|
|
||||||
# check if flag exists (got created on 50syncHDD.sh)
|
|
||||||
flagExists=$(ls /mnt/hdd/${network}/blocks/selfsync.flag 2>/dev/null | grep -c "selfsync.flag")
|
|
||||||
if [ ${flagExists} -eq 1 ]; then
|
|
||||||
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 for next reboot"
|
|
||||||
|
|
||||||
# remove flag
|
|
||||||
rm /mnt/hdd/${network}/blocks/selfsync.flag
|
|
||||||
|
|
||||||
# set dbcache back to normal (to give room for other apps after reboot in the future)
|
|
||||||
kbSizeRAM=$(cat /proc/meminfo | grep "MemTotal" | sed 's/[^0-9]*//g')
|
|
||||||
|
|
||||||
if [ ${kbSizeRAM} -gt 1500000 ]; then
|
|
||||||
echo "Detected RAM >1GB --> optimizing ${network}.conf"
|
|
||||||
sed -i "s/^dbcache=.*/dbcache=512/g" /mnt/hdd/${network}/${network}.conf
|
|
||||||
else
|
|
||||||
echo "Detected RAM 1GB --> optimizing ${network}.conf"
|
|
||||||
sed -i "s/^dbcache=.*/dbcache=128/g" /mnt/hdd/${network}/${network}.conf
|
|
||||||
fi
|
|
||||||
|
|
||||||
# relax sanning on sync progress (after 30 more secs)
|
|
||||||
/home/admin/_cache.sh focus btc_default_sync_progress 10 30
|
|
||||||
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
###############################
|
###############################
|
||||||
# Prepare next loop
|
# Prepare next loop
|
||||||
###############################
|
###############################
|
||||||
|
@ -48,10 +48,22 @@ sudo /home/admin/config.scripts/blitz.ssh.sh checkrepair >> ${logFile}
|
|||||||
echo "## INIT raspiblitz.info" >> $logFile
|
echo "## INIT raspiblitz.info" >> $logFile
|
||||||
|
|
||||||
# set default values for raspiblitz.info (that are not set by build_sdcard.sh)
|
# set default values for raspiblitz.info (that are not set by build_sdcard.sh)
|
||||||
|
|
||||||
setupPhase='boot'
|
setupPhase='boot'
|
||||||
setupStep=0
|
setupStep=0
|
||||||
fsexpanded=0
|
fsexpanded=0
|
||||||
fundRecovery=0
|
|
||||||
|
btc_mainnet_sync_initial_done=0
|
||||||
|
btc_testnet_sync_initial_done=0
|
||||||
|
btc_signet_sync_initial_done=0
|
||||||
|
|
||||||
|
ln_lnd_mainnet_sync_initial_done=0
|
||||||
|
ln_lnd_testnet_sync_initial_done=0
|
||||||
|
ln_lnd_signet_sync_initial_done=0
|
||||||
|
|
||||||
|
ln_cl_mainnet_sync_initial_done=0
|
||||||
|
ln_cl_testnet_sync_initial_done=0
|
||||||
|
ln_cl_signet_sync_initial_done=0
|
||||||
|
|
||||||
# load already persisted valued (overwriting defaults if exist)
|
# load already persisted valued (overwriting defaults if exist)
|
||||||
source ${infoFile} 2>/dev/null
|
source ${infoFile} 2>/dev/null
|
||||||
@ -63,9 +75,18 @@ echo "displayClass=${displayClass}" >> $infoFile
|
|||||||
echo "displayType=${displayType}" >> $infoFile
|
echo "displayType=${displayType}" >> $infoFile
|
||||||
echo "setupPhase=${setupPhase}" >> $infoFile
|
echo "setupPhase=${setupPhase}" >> $infoFile
|
||||||
echo "setupStep=${setupStep}" >> $infoFile
|
echo "setupStep=${setupStep}" >> $infoFile
|
||||||
echo "fundRecovery=${fundRecovery}" >> $infoFile
|
|
||||||
echo "fsexpanded=${fsexpanded}" >> $infoFile
|
|
||||||
echo "state=starting" >> $infoFile
|
echo "state=starting" >> $infoFile
|
||||||
|
echo "btc_mainnet_sync_initial_done=${btc_mainnet_sync_initial_done}" >> $infoFile
|
||||||
|
echo "btc_testnet_sync_initial_done=${btc_testnet_sync_initial_done}" >> $infoFile
|
||||||
|
echo "btc_signet_sync_initial_done=${btc_signet_sync_initial_done}" >> $infoFile
|
||||||
|
echo "ln_lnd_mainnet_sync_initial_done=${ln_lnd_mainnet_sync_initial_done}" >> $infoFile
|
||||||
|
echo "ln_lnd_testnet_sync_initial_done=${ln_lnd_testnet_sync_initial_done}" >> $infoFile
|
||||||
|
echo "ln_lnd_signet_sync_initial_done=${ln_lnd_signet_sync_initial_done}" >> $infoFile
|
||||||
|
echo "ln_cl_mainnet_sync_initial_done=${ln_cl_mainnet_sync_initial_done}" >> $infoFile
|
||||||
|
echo "ln_cl_testnet_sync_initial_done=${ln_cl_testnet_sync_initial_done}" >> $infoFile
|
||||||
|
echo "ln_cl_signet_sync_initial_done=${ln_cl_signet_sync_initial_done}" >> $infoFile
|
||||||
|
|
||||||
|
|
||||||
sudo chmod 664 ${infoFile}
|
sudo chmod 664 ${infoFile}
|
||||||
|
|
||||||
# write content of raspiblitz.info to logs
|
# write content of raspiblitz.info to logs
|
||||||
@ -541,10 +562,16 @@ if [ ${isMounted} -eq 0 ]; then
|
|||||||
echo "# lsblk -o NAME,FSTYPE,LABEL " >> ${logFile}
|
echo "# lsblk -o NAME,FSTYPE,LABEL " >> ${logFile}
|
||||||
lsblk -o NAME,FSTYPE,LABEL >> ${logFile}
|
lsblk -o NAME,FSTYPE,LABEL >> ${logFile}
|
||||||
|
|
||||||
# if migrationFile was uploaded - now import it
|
# load fresh setup data
|
||||||
|
echo "# Sourcing ${setupFile} " >> ${logFile}
|
||||||
|
source ${setupFile}
|
||||||
|
|
||||||
|
# if migrationFile was uploaded (value from raspiblitz.setup) - now import
|
||||||
echo "# migrationFile(${migrationFile})" >> ${logFile}
|
echo "# migrationFile(${migrationFile})" >> ${logFile}
|
||||||
if [ "${migrationFile}" != "" ]; then
|
if [ "${migrationFile}" != "" ]; then
|
||||||
|
|
||||||
|
echo "##### IMPORT MIGRATIONFILE: ${migrationFile}" >> ${logFile}
|
||||||
|
|
||||||
# unpack
|
# unpack
|
||||||
sed -i "s/^message=.*/message='Unpacking Migration Data'/g" ${infoFile}
|
sed -i "s/^message=.*/message='Unpacking Migration Data'/g" ${infoFile}
|
||||||
source <(/home/admin/config.scripts/blitz.migration.sh import "${migrationFile}")
|
source <(/home/admin/config.scripts/blitz.migration.sh import "${migrationFile}")
|
||||||
@ -555,6 +582,13 @@ if [ ${isMounted} -eq 0 ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# make sure a raspiblitz.conf exists after migration
|
||||||
|
confExists=$(ls /mnt/hdd/raspiblitz.conf 2>/dev/null | grep -c "raspiblitz.conf")
|
||||||
|
if [ "${confExists}" != "1" ]; then
|
||||||
|
/home/admin/config.scripts/blitz.error.sh _bootstrap.sh "migration-failed" "missing-config" "After runnign migration process - no raspiblitz.conf abvailable." ${logFile}
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# signal recovery provision phase
|
# signal recovery provision phase
|
||||||
setupPhase="recovery"
|
setupPhase="recovery"
|
||||||
/home/admin/_cache.sh set setupPhase "${setupPhase}"
|
/home/admin/_cache.sh set setupPhase "${setupPhase}"
|
||||||
|
@ -189,7 +189,6 @@ function status() {
|
|||||||
echo
|
echo
|
||||||
echo "Keep X pressed to EXIT loop ... (please wait)"
|
echo "Keep X pressed to EXIT loop ... (please wait)"
|
||||||
echo
|
echo
|
||||||
/home/admin/_cache.sh set system_scan_all_temp "1"
|
|
||||||
sleep 4
|
sleep 4
|
||||||
while :
|
while :
|
||||||
do
|
do
|
||||||
@ -203,7 +202,6 @@ function status() {
|
|||||||
# check if user wants to abort session
|
# check if user wants to abort session
|
||||||
if [ "${keyPressed}" = "x" ]; then
|
if [ "${keyPressed}" = "x" ]; then
|
||||||
echo
|
echo
|
||||||
/home/admin/_cache.sh set system_scan_all_temp "0"
|
|
||||||
echo "Returning to menu ....."
|
echo "Returning to menu ....."
|
||||||
sleep 4
|
sleep 4
|
||||||
break
|
break
|
||||||
|
@ -29,7 +29,7 @@ echo "###################################" >> ${logFile}
|
|||||||
/home/admin/_cache.sh set message "Provision Migration"
|
/home/admin/_cache.sh set message "Provision Migration"
|
||||||
|
|
||||||
if [ "${hddGotMigrationData}" == "" ]; then
|
if [ "${hddGotMigrationData}" == "" ]; then
|
||||||
/home/admin/config.scripts/blitz.error.sh _provision.migration.sh "missing-hostnamemigrationdata" "missing hddGotMigrationData" "" ${logFile}
|
/home/admin/config.scripts/blitz.error.sh _provision.migration.sh "missing-migrationdata" "missing hddGotMigrationData" "" ${logFile}
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -45,7 +45,14 @@ if [ "${err}" != "" ]; then
|
|||||||
exit 3
|
exit 3
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# make sure for the rest of the seup info is set correctly
|
# make sure a raspiblitz.conf exists after migration
|
||||||
|
confExists=$(ls /mnt/hdd/raspiblitz.conf 2>/dev/null | grep -c "raspiblitz.conf")
|
||||||
|
if [ "${confExists}" != "1" ]; then
|
||||||
|
/home/admin/config.scripts/blitz.error.sh _provision.migration.sh "missing-config" "no /mnt/hdd/raspiblitz.conf" "After runningn migration process - no raspiblitz.conf abvailable." ${logFile}
|
||||||
|
exit 6
|
||||||
|
fi
|
||||||
|
|
||||||
|
# make sure for the rest of the setup info is set correctly
|
||||||
/home/admin/config.scripts/blitz.conf.sh set network "bitcoin"
|
/home/admin/config.scripts/blitz.conf.sh set network "bitcoin"
|
||||||
/home/admin/config.scripts/blitz.conf.sh set chain "main"
|
/home/admin/config.scripts/blitz.conf.sh set chain "main"
|
||||||
|
|
||||||
|
@ -32,6 +32,13 @@ echo "###################################" >> ${logFile}
|
|||||||
echo "# _provision.setup.sh" >> ${logFile}
|
echo "# _provision.setup.sh" >> ${logFile}
|
||||||
echo "###################################" >> ${logFile}
|
echo "###################################" >> ${logFile}
|
||||||
|
|
||||||
|
# make sure a raspiblitz.conf exists
|
||||||
|
confExists=$(ls /mnt/hdd/raspiblitz.conf 2>/dev/null | grep -c "raspiblitz.conf")
|
||||||
|
if [ "${confExists}" != "1" ]; then
|
||||||
|
/home/admin/config.scripts/blitz.error.sh _provision.setup.sh "missing-config" "No raspiblitz.conf abvailable." ${logFile}
|
||||||
|
exit 6
|
||||||
|
fi
|
||||||
|
|
||||||
###################################
|
###################################
|
||||||
# Preserve SSH keys
|
# Preserve SSH keys
|
||||||
# just copy dont link anymore
|
# just copy dont link anymore
|
||||||
@ -81,7 +88,7 @@ echo "# setting PASSWORD B" >> ${logFile}
|
|||||||
/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)
|
# optimize RAM for blockchain validation (bitcoin only)
|
||||||
if [ "${network}" == "bitcoin" ] && [ "${hddBlocksBitcoin}" == "0" ]; then
|
if [ "${network}" == "bitcoin" ]; then
|
||||||
echo "*** Optimizing RAM for Sync ***" >> ${logFile}
|
echo "*** Optimizing RAM for Sync ***" >> ${logFile}
|
||||||
kbSizeRAM=$(cat /proc/meminfo | grep "MemTotal" | sed 's/[^0-9]*//g')
|
kbSizeRAM=$(cat /proc/meminfo | grep "MemTotal" | sed 's/[^0-9]*//g')
|
||||||
echo "kbSizeRAM(${kbSizeRAM})" >> ${logFile}
|
echo "kbSizeRAM(${kbSizeRAM})" >> ${logFile}
|
||||||
@ -259,8 +266,10 @@ if [ "${lightning}" == "lnd" ]; then
|
|||||||
exit 12
|
exit 12
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Rescanning addresses takes a long time" >> ${logFile}
|
# set lnd into recovery mode (gets activated after setup reboot)
|
||||||
echo "use the RESCAN option in the REPAIR-LND menu after LND is synced or 'lncli unlock ---recovery_window 5000'" >> ${logFile}
|
/home/admin/config.scripts/lnd.backup.sh mainnet recoverymode on >> ${logFile}
|
||||||
|
echo "Rescanning will activate after setup-reboot ..." >> ${logFile}
|
||||||
|
|
||||||
|
|
||||||
# WALLET --> NEW
|
# WALLET --> NEW
|
||||||
else
|
else
|
||||||
@ -312,40 +321,6 @@ if [ "${lightning}" == "lnd" ]; then
|
|||||||
exit 15
|
exit 15
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# restore SCB
|
|
||||||
if [ "${staticchannelbackup}" != "" ]; then
|
|
||||||
|
|
||||||
# LND was restarted so need to unlock
|
|
||||||
echo "WALLET --> UNLOCK WALLET - SCAN 0" >> ${logFile}
|
|
||||||
/home/admin/_cache.sh set message "LND Wallet Unlock - scan 0"
|
|
||||||
source <(/home/admin/config.scripts/lnd.initwallet.py unlock "${chain}net" "${passwordC}" 0)
|
|
||||||
if [ "${err}" != "" ]; then
|
|
||||||
echo "lnd-wallet-unlock" "lnd.initwallet.py unlock returned error" "/home/admin/config.scripts/lnd.initwallet.py unlock ${chain}net ... --> ${err} + ${errMore}"
|
|
||||||
if [ "${errMore}" = "wallet already unlocked, WalletUnlocker service is no longer available" ]; then
|
|
||||||
echo "The wallet is already unlocked, continue."
|
|
||||||
else
|
|
||||||
exit 11
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "WALLET --> SCB" >> ${logFile}
|
|
||||||
/home/admin/_cache.sh set message "LND Wallet (SEED & SCB)"
|
|
||||||
macaroonPath="/home/admin/.lnd/data/chain/${network}/${chain}net/admin.macaroon"
|
|
||||||
source <(/home/admin/config.scripts/lnd.initwallet.py scb "${chain}net" "/home/admin/channel.backup" "${macaroonPath}")
|
|
||||||
if [ "${err}" != "" ]; then
|
|
||||||
echo "lnd-wallet-seed+scb" "lnd.initwallet.py scb returned error" "/home/admin/config.scripts/lnd.initwallet.py scb mainnet ... --> ${err} + ${errMore}" ${logFile}
|
|
||||||
if [ "${errMore}" = "server is still in the process of starting" ]; then
|
|
||||||
echo "The SCB recovery is not possible now - use the RETRYSCB option the REPAIR-LND menu after LND is synced." >> ${logFile}
|
|
||||||
echo "Can repeat the SCB recovery until all peers have force closed the channels to this node." >> ${logFile}
|
|
||||||
else
|
|
||||||
exit 12
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Rescanning addresses takes a long time" >> ${logFile}
|
|
||||||
echo "use the RESCAN option in the REPAIR-LND menu after LND is synced or 'lncli unlock ---recovery_window 5000'" >> ${logFile}
|
|
||||||
|
|
||||||
# stop lnd for the rest of the provision process
|
# stop lnd for the rest of the provision process
|
||||||
echo "stopping lnd for the rest provision again (will start on next boot)" >> ${logFile}
|
echo "stopping lnd for the rest provision again (will start on next boot)" >> ${logFile}
|
||||||
systemctl stop lnd >> ${logFile}
|
systemctl stop lnd >> ${logFile}
|
||||||
|
@ -5,9 +5,8 @@ configFile="/mnt/hdd/raspiblitz.conf"
|
|||||||
# command info
|
# command info
|
||||||
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "-help" ]; then
|
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "-help" ]; then
|
||||||
echo "RaspiBlitz Config Edit - adds value to file & cache and creates entries if needed:"
|
echo "RaspiBlitz Config Edit - adds value to file & cache and creates entries if needed:"
|
||||||
echo "blitz.conf.sh set [key] [value]"
|
echo "blitz.conf.sh set [key] [value] [?conffile]"
|
||||||
echo "blitz.conf.sh delete [key]"
|
echo "blitz.conf.sh delete [key] [?conffile]"
|
||||||
echo "To use values use in shell scripts: source ${configFile}"
|
|
||||||
echo
|
echo
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@ -17,7 +16,7 @@ if [ "$1" = "set" ]; then
|
|||||||
# get parameters
|
# get parameters
|
||||||
keystr=$2
|
keystr=$2
|
||||||
valuestr=$3
|
valuestr=$3
|
||||||
overflow=$4
|
configfileAlternative=$4
|
||||||
|
|
||||||
# check that key & value are given
|
# check that key & value are given
|
||||||
if [ "${keystr}" == "" ] || [ "${valuestr}" == "" ]; then
|
if [ "${keystr}" == "" ] || [ "${valuestr}" == "" ]; then
|
||||||
@ -26,11 +25,9 @@ if [ "$1" = "set" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# check if input quotes are missing (there should be no 4th parameter)
|
# optional another configfile
|
||||||
if [ "${overflow}" != "" ]; then
|
if [ "${configfileAlternative}" != "" ]; then
|
||||||
echo "# blitz.conf.sh $@"
|
configFile="${configfileAlternative}"
|
||||||
echo "# FAIL: possible missing quotes in value string"
|
|
||||||
exit 2
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# update config value in cache
|
# update config value in cache
|
||||||
@ -47,7 +44,7 @@ if [ "$1" = "set" ]; then
|
|||||||
# check if key needs to be added (prepare new entry)
|
# check if key needs to be added (prepare new entry)
|
||||||
entryExists=$(grep -c "^${keystr}=" ${configFile})
|
entryExists=$(grep -c "^${keystr}=" ${configFile})
|
||||||
if [ ${entryExists} -eq 0 ]; then
|
if [ ${entryExists} -eq 0 ]; then
|
||||||
echo "${keystr}=" | sudo tee -a ${configFile}
|
echo "${keystr}=" | sudo tee -a ${configFile} 1>/dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# add valuestr quotes if not standard values
|
# add valuestr quotes if not standard values
|
||||||
@ -63,6 +60,7 @@ elif [ "$1" = "delete" ]; then
|
|||||||
|
|
||||||
# get parameters
|
# get parameters
|
||||||
keystr=$2
|
keystr=$2
|
||||||
|
configfileAlternative=$3
|
||||||
|
|
||||||
# check that key & value are given
|
# check that key & value are given
|
||||||
if [ "${keystr}" == "" ]; then
|
if [ "${keystr}" == "" ]; then
|
||||||
@ -70,6 +68,11 @@ elif [ "$1" = "delete" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# optional another configfile
|
||||||
|
if [ "${configfileAlternative}" != "" ]; then
|
||||||
|
configFile="${configfileAlternative}"
|
||||||
|
fi
|
||||||
|
|
||||||
# delete value
|
# delete value
|
||||||
sudo sed -i "/^${keystr}=/d" ${configFile} 2>/dev/null
|
sudo sed -i "/^${keystr}=/d" ${configFile} 2>/dev/null
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ fi
|
|||||||
btrfsInstalled=$(btrfs --version 2>/dev/null | grep -c "btrfs-progs")
|
btrfsInstalled=$(btrfs --version 2>/dev/null | grep -c "btrfs-progs")
|
||||||
if [ ${btrfsInstalled} -eq 0 ]; then
|
if [ ${btrfsInstalled} -eq 0 ]; then
|
||||||
>&2 echo "# Installing BTRFS ..."
|
>&2 echo "# Installing BTRFS ..."
|
||||||
sudo apt-get install -y btrfs-tools 1>/dev/null
|
apt-get install -y btrfs-tools 1>/dev/null
|
||||||
fi
|
fi
|
||||||
btrfsInstalled=$(btrfs --version 2>/dev/null | grep -c "btrfs-progs")
|
btrfsInstalled=$(btrfs --version 2>/dev/null | grep -c "btrfs-progs")
|
||||||
if [ ${btrfsInstalled} -eq 0 ]; then
|
if [ ${btrfsInstalled} -eq 0 ]; then
|
||||||
@ -46,9 +46,10 @@ fi
|
|||||||
# is global so that also other parts of this script can use this
|
# is global so that also other parts of this script can use this
|
||||||
|
|
||||||
# basics
|
# basics
|
||||||
isMounted=$(sudo df | grep -c /mnt/hdd)
|
isMounted=$(df | grep -c /mnt/hdd)
|
||||||
isBTRFS=$(sudo btrfs filesystem show 2>/dev/null| grep -c 'BLITZSTORAGE')
|
isBTRFS=$(btrfs filesystem show 2>/dev/null| grep -c 'BLITZSTORAGE')
|
||||||
isRaid=$(btrfs filesystem df /mnt/hdd 2>/dev/null | grep -c "Data, RAID1")
|
isRaid=$(btrfs filesystem df /mnt/hdd 2>/dev/null | grep -c "Data, RAID1")
|
||||||
|
isZFS=$(zfs list 2>/dev/null | grep -c "/mnt/hdd")
|
||||||
isSSD="0"
|
isSSD="0"
|
||||||
|
|
||||||
# determine if swap is external on or not
|
# determine if swap is external on or not
|
||||||
@ -82,12 +83,12 @@ if [ "$1" = "status" ]; then
|
|||||||
# will then be used to offer formatting and permanent mounting
|
# will then be used to offer formatting and permanent mounting
|
||||||
hdd=""
|
hdd=""
|
||||||
sizeDataPartition=0
|
sizeDataPartition=0
|
||||||
OSPartition=$(sudo df /usr 2>/dev/null | grep dev | cut -d " " -f 1 | sed "s#/dev/##g")
|
OSPartition=$(df /usr 2>/dev/null | grep dev | cut -d " " -f 1 | sed "s#/dev/##g")
|
||||||
# detect boot partition on UEFI systems
|
# detect boot partition on UEFI systems
|
||||||
bootPartition=$(sudo df /boot/efi 2>/dev/null | grep dev | cut -d " " -f 1 | sed "s#/dev/##g")
|
bootPartition=$(df /boot/efi 2>/dev/null | grep dev | cut -d " " -f 1 | sed "s#/dev/##g")
|
||||||
if [ ${#bootPartition} -eq 0 ]; then
|
if [ ${#bootPartition} -eq 0 ]; then
|
||||||
# for non UEFI
|
# for non UEFI
|
||||||
bootPartition=$(sudo df /boot 2>/dev/null | grep dev | cut -d " " -f 1 | sed "s#/dev/##g")
|
bootPartition=$(df /boot 2>/dev/null | grep dev | cut -d " " -f 1 | sed "s#/dev/##g")
|
||||||
fi
|
fi
|
||||||
lsblk -o NAME,SIZE -b | grep -P "[s|vn][dv][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
|
while read line; do
|
||||||
@ -108,7 +109,7 @@ if [ "$1" = "status" ]; then
|
|||||||
# count partitions
|
# count partitions
|
||||||
testpartitioncount=0
|
testpartitioncount=0
|
||||||
if [ ${#testdevice} -gt 0 ]; then
|
if [ ${#testdevice} -gt 0 ]; then
|
||||||
testpartitioncount=$(sudo fdisk -l | grep /dev/$testdevice | wc -l)
|
testpartitioncount=$(fdisk -l | grep /dev/$testdevice | wc -l)
|
||||||
# do not count line with disk info
|
# do not count line with disk info
|
||||||
testpartitioncount=$((testpartitioncount-1))
|
testpartitioncount=$((testpartitioncount-1))
|
||||||
fi
|
fi
|
||||||
@ -147,7 +148,7 @@ if [ "$1" = "status" ]; then
|
|||||||
# make sure to use the biggest
|
# make sure to use the biggest
|
||||||
if [ ${testsize} -gt ${sizeDataPartition} ]; then
|
if [ ${testsize} -gt ${sizeDataPartition} ]; then
|
||||||
# Partition to be created is smaller than disk so this is not correct (but close)
|
# Partition to be created is smaller than disk so this is not correct (but close)
|
||||||
sizeDataPartition=$(sudo fdisk -l /dev/$testdevice | grep GiB | cut -d " " -f 5)
|
sizeDataPartition=$(fdisk -l /dev/$testdevice | grep GiB | cut -d " " -f 5)
|
||||||
hddDataPartition="${testdevice}1"
|
hddDataPartition="${testdevice}1"
|
||||||
hdd="${testdevice}"
|
hdd="${testdevice}"
|
||||||
fi
|
fi
|
||||||
@ -162,7 +163,7 @@ if [ "$1" = "status" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# try to detect if its an SSD
|
# try to detect if its an SSD
|
||||||
isSSD=$(sudo cat /sys/block/${hdd}/queue/rotational 2>/dev/null | grep -c 0)
|
isSSD=$(cat /sys/block/${hdd}/queue/rotational 2>/dev/null | grep -c 0)
|
||||||
echo "isSSD=${isSSD}"
|
echo "isSSD=${isSSD}"
|
||||||
|
|
||||||
# display results from hdd & partition detection
|
# display results from hdd & partition detection
|
||||||
@ -170,7 +171,7 @@ if [ "$1" = "status" ]; then
|
|||||||
hddBytes=0
|
hddBytes=0
|
||||||
hddGigaBytes=0
|
hddGigaBytes=0
|
||||||
if [ "${hdd}" != "" ]; then
|
if [ "${hdd}" != "" ]; then
|
||||||
hddBytes=$(sudo fdisk -l /dev/$hdd | grep GiB | cut -d " " -f 5)
|
hddBytes=$(fdisk -l /dev/$hdd | grep GiB | cut -d " " -f 5)
|
||||||
hddGigaBytes=$(echo "scale=0; ${hddBytes}/1024/1024/1024" | bc -l)
|
hddGigaBytes=$(echo "scale=0; ${hddBytes}/1024/1024/1024" | bc -l)
|
||||||
fi
|
fi
|
||||||
echo "hddBytes=${hddBytes}"
|
echo "hddBytes=${hddBytes}"
|
||||||
@ -200,14 +201,14 @@ if [ "$1" = "status" ]; then
|
|||||||
|
|
||||||
# temp mount data drive
|
# temp mount data drive
|
||||||
mountError=""
|
mountError=""
|
||||||
sudo mkdir -p /mnt/hdd
|
mkdir -p /mnt/hdd
|
||||||
if [ "${hddFormat}" = "ext4" ]; then
|
if [ "${hddFormat}" = "ext4" ]; then
|
||||||
hddDataPartitionExt4=$hddDataPartition
|
hddDataPartitionExt4=$hddDataPartition
|
||||||
mountError=$(sudo mount /dev/${hddDataPartitionExt4} /mnt/hdd 2>&1)
|
mountError=$(mount /dev/${hddDataPartitionExt4} /mnt/hdd 2>&1)
|
||||||
isTempMounted=$(df | grep /mnt/hdd | grep -c ${hddDataPartitionExt4})
|
isTempMounted=$(df | grep /mnt/hdd | grep -c ${hddDataPartitionExt4})
|
||||||
fi
|
fi
|
||||||
if [ "${hddFormat}" = "btrfs" ]; then
|
if [ "${hddFormat}" = "btrfs" ]; then
|
||||||
mountError=$(sudo mount -o degraded /dev/${hdd}1 /mnt/hdd 2>&1)
|
mountError=$(mount -o degraded /dev/${hdd}1 /mnt/hdd 2>&1)
|
||||||
isTempMounted=$(df | grep /mnt/hdd | grep -c ${hdd})
|
isTempMounted=$(df | grep /mnt/hdd | grep -c ${hdd})
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -257,18 +258,18 @@ if [ "$1" = "status" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# comment this line out if case to study the contect of the data section
|
# comment this line out if case to study the contect of the data section
|
||||||
sudo umount /mnt/hdd
|
umount /mnt/hdd
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# temp storage data drive
|
# temp storage data drive
|
||||||
sudo mkdir -p /mnt/storage
|
mkdir -p /mnt/storage
|
||||||
if [ "${hddFormat}" = "btrfs" ]; then
|
if [ "${hddFormat}" = "btrfs" ]; then
|
||||||
# in btrfs setup the second partition is storage partition
|
# in btrfs setup the second partition is storage partition
|
||||||
sudo mount /dev/${hdd}2 /mnt/storage 2>/dev/null
|
mount /dev/${hdd}2 /mnt/storage 2>/dev/null
|
||||||
isTempMounted=$(df | grep /mnt/storage | grep -c ${hdd})
|
isTempMounted=$(df | grep /mnt/storage | grep -c ${hdd})
|
||||||
else
|
else
|
||||||
# in ext4 setup the partition is also the storage partition
|
# in ext4 setup the partition is also the storage partition
|
||||||
sudo mount /dev/${hddDataPartitionExt4} /mnt/storage 2>/dev/null
|
mount /dev/${hddDataPartitionExt4} /mnt/storage 2>/dev/null
|
||||||
isTempMounted=$(df | grep /mnt/storage | grep -c ${hddDataPartitionExt4})
|
isTempMounted=$(df | grep /mnt/storage | grep -c ${hddDataPartitionExt4})
|
||||||
fi
|
fi
|
||||||
if [ ${isTempMounted} -eq 0 ]; then
|
if [ ${isTempMounted} -eq 0 ]; then
|
||||||
@ -279,7 +280,7 @@ if [ "$1" = "status" ]; then
|
|||||||
# Pre-Setup Invetigation of STORAGE-PART
|
# Pre-Setup Invetigation of STORAGE-PART
|
||||||
|
|
||||||
# check for blockchain data on storage
|
# check for blockchain data on storage
|
||||||
hddBlocksBitcoin=$(sudo ls /mnt/storage${subVolumeDir}/bitcoin/blocks/blk00000.dat 2>/dev/null | grep -c '.dat')
|
hddBlocksBitcoin=$(ls /mnt/storage${subVolumeDir}/bitcoin/blocks/blk00000.dat 2>/dev/null | grep -c '.dat')
|
||||||
echo "hddBlocksBitcoin=${hddBlocksBitcoin}"
|
echo "hddBlocksBitcoin=${hddBlocksBitcoin}"
|
||||||
if [ "${blockchainType}" = "bitcoin" ] && [ ${hddBlocksBitcoin} -eq 1 ]; then
|
if [ "${blockchainType}" = "bitcoin" ] && [ ${hddBlocksBitcoin} -eq 1 ]; then
|
||||||
echo "hddGotBlockchain=1"
|
echo "hddGotBlockchain=1"
|
||||||
@ -311,9 +312,9 @@ if [ "$1" = "status" ]; then
|
|||||||
hddGotMigrationDataExtra=""
|
hddGotMigrationDataExtra=""
|
||||||
if [ "${hddFormat}" = "ext4" ]; then
|
if [ "${hddFormat}" = "ext4" ]; then
|
||||||
# check for other node implementations
|
# check for other node implementations
|
||||||
isUmbrelHDD=$(sudo ls /mnt/storage/umbrel/info.json 2>/dev/null | grep -c '.json')
|
isUmbrelHDD=$(ls /mnt/storage/umbrel/info.json 2>/dev/null | grep -c '.json')
|
||||||
isCitadelHDD=$(sudo ls /mnt/storage/citadel/info.json 2>/dev/null | grep -c '.json')
|
isCitadelHDD=$(ls /mnt/storage/citadel/info.json 2>/dev/null | grep -c '.json')
|
||||||
isMyNodeHDD=$(sudo ls /mnt/storage/mynode/bitcoin/bitcoin.conf 2>/dev/null | grep -c '.conf')
|
isMyNodeHDD=$(ls /mnt/storage/mynode/bitcoin/bitcoin.conf 2>/dev/null | grep -c '.conf')
|
||||||
if [ ${isUmbrelHDD} -gt 0 ]; then
|
if [ ${isUmbrelHDD} -gt 0 ]; then
|
||||||
hddGotMigrationData="umbrel"
|
hddGotMigrationData="umbrel"
|
||||||
lndVersion=$(grep "lightninglabs/lnd" /mnt/storage/umbrel/docker-compose.yml 2>/dev/null | sed 's/.*lnd://' | sed 's/@.*//')
|
lndVersion=$(grep "lightninglabs/lnd" /mnt/storage/umbrel/docker-compose.yml 2>/dev/null | sed 's/.*lnd://' | sed 's/@.*//')
|
||||||
@ -331,7 +332,7 @@ if [ "$1" = "status" ]; then
|
|||||||
echo "hddGotMigrationData='${hddGotMigrationData}'"
|
echo "hddGotMigrationData='${hddGotMigrationData}'"
|
||||||
|
|
||||||
# comment this line out if case to study the contect of the storage section
|
# comment this line out if case to study the contect of the storage section
|
||||||
sudo umount /mnt/storage
|
umount /mnt/storage
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
# if not ext4 or btrfs - there is no usable data
|
# if not ext4 or btrfs - there is no usable data
|
||||||
@ -345,9 +346,16 @@ if [ "$1" = "status" ]; then
|
|||||||
# STATUS INFO WHEN MOUNTED
|
# STATUS INFO WHEN MOUNTED
|
||||||
|
|
||||||
# output data drive
|
# output data drive
|
||||||
if [ ${isBTRFS} -eq 1 ]; then
|
if [ "${isBTRFS}" -gt 0 ]; then
|
||||||
# on btrfs date the storage partition as the data partition
|
# on btrfs date the storage partition as the data partition
|
||||||
hddDataPartition=$(df | grep "/mnt/storage$" | cut -d " " -f 1 | cut -d "/" -f 3)
|
hddDataPartition=$(df | grep "/mnt/storage$" | cut -d " " -f 1 | cut -d "/" -f 3)
|
||||||
|
elif [ "${isZFS}" -gt 0 ]; then
|
||||||
|
# a ZFS pool has no leading /
|
||||||
|
hddDataPartition=$(df | grep "/mnt/hdd$" | cut -d " " -f 1 | cut -d "/" -f 2)
|
||||||
|
if [ ${#hddDataPartition} -eq 0 ];then
|
||||||
|
# just a pool, no filesystem
|
||||||
|
hddDataPartition=$(df | grep "/mnt/hdd$" | cut -d " " -f 1 | cut -d "/" -f 1)
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
# on ext4 its the whole /mnt/hdd
|
# on ext4 its the whole /mnt/hdd
|
||||||
hddDataPartition=$(df | grep "/mnt/hdd$" | cut -d " " -f 1 | cut -d "/" -f 3)
|
hddDataPartition=$(df | grep "/mnt/hdd$" | cut -d " " -f 1 | cut -d "/" -f 3)
|
||||||
@ -357,7 +365,7 @@ if [ "$1" = "status" ]; then
|
|||||||
if [ "${hddFormat}" = "ext4" ]; then
|
if [ "${hddFormat}" = "ext4" ]; then
|
||||||
hddDataPartitionExt4=$hddDataPartition
|
hddDataPartitionExt4=$hddDataPartition
|
||||||
fi
|
fi
|
||||||
hddRaspiData=$(sudo ls -l /mnt/hdd | grep -c raspiblitz.conf)
|
hddRaspiData=$(ls -l /mnt/hdd | grep -c raspiblitz.conf)
|
||||||
echo "hddRaspiData=${hddRaspiData}"
|
echo "hddRaspiData=${hddRaspiData}"
|
||||||
hddRaspiVersion=""
|
hddRaspiVersion=""
|
||||||
if [ ${hddRaspiData} -eq 1 ]; then
|
if [ ${hddRaspiData} -eq 1 ]; then
|
||||||
@ -366,7 +374,7 @@ if [ "$1" = "status" ]; then
|
|||||||
fi
|
fi
|
||||||
echo "hddRaspiVersion='${hddRaspiVersion}'"
|
echo "hddRaspiVersion='${hddRaspiVersion}'"
|
||||||
|
|
||||||
isSSD=$(sudo cat /sys/block/${hdd}/queue/rotational 2>/dev/null | grep -c 0)
|
isSSD=$(cat /sys/block/${hdd}/queue/rotational 2>/dev/null | grep -c 0)
|
||||||
echo "isSSD=${isSSD}"
|
echo "isSSD=${isSSD}"
|
||||||
|
|
||||||
echo "datadisk='${hdd}'"
|
echo "datadisk='${hdd}'"
|
||||||
@ -375,7 +383,7 @@ if [ "$1" = "status" ]; then
|
|||||||
echo "hddPartitionCandidate='${hddDataPartition}'"
|
echo "hddPartitionCandidate='${hddDataPartition}'"
|
||||||
|
|
||||||
# check if blockchain data is available
|
# check if blockchain data is available
|
||||||
hddBlocksBitcoin=$(sudo ls /mnt/hdd/bitcoin/blocks/blk00000.dat 2>/dev/null | grep -c '.dat')
|
hddBlocksBitcoin=$(ls /mnt/hdd/bitcoin/blocks/blk00000.dat 2>/dev/null | grep -c '.dat')
|
||||||
echo "hddBlocksBitcoin=${hddBlocksBitcoin}"
|
echo "hddBlocksBitcoin=${hddBlocksBitcoin}"
|
||||||
if [ "${blockchainType}" = "bitcoin" ] && [ ${hddBlocksBitcoin} -eq 1 ]; then
|
if [ "${blockchainType}" = "bitcoin" ] && [ ${hddBlocksBitcoin} -eq 1 ]; then
|
||||||
echo "hddGotBlockchain=1"
|
echo "hddGotBlockchain=1"
|
||||||
@ -384,19 +392,18 @@ if [ "$1" = "status" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# check size in bytes and GBs
|
# check size in bytes and GBs
|
||||||
sizeDataPartition=$(lsblk -o NAME,SIZE -b | grep "${hddDataPartition}" | awk '$1=$1' | cut -d " " -f 2)
|
if [ "${isZFS}" -gt 0 ]; then
|
||||||
echo "hddBytes=${sizeDataPartition}"
|
sizeDataPartition=$(zpool list -pH | awk '{print $2}')
|
||||||
hddGigaBytes=$(echo "scale=0; ${sizeDataPartition}/1024/1024/1024" | bc -l)
|
hddGigaBytes=$(echo "scale=0; ${sizeDataPartition}/1024/1024/1024" | bc -l)
|
||||||
|
else
|
||||||
|
sizeDataPartition=$(lsblk -o NAME,SIZE -b | grep "${hddDataPartition}" | awk '$1=$1' | cut -d " " -f 2)
|
||||||
|
hddGigaBytes=$(echo "scale=0; ${sizeDataPartition}/1024/1024/1024" | bc -l)
|
||||||
|
fi
|
||||||
|
echo "hddBytes=${sizeDataPartition}"
|
||||||
echo "hddGigaBytes=${hddGigaBytes}"
|
echo "hddGigaBytes=${hddGigaBytes}"
|
||||||
|
|
||||||
# used space - at the moment just string info to display
|
# used space - at the moment just string info to display
|
||||||
if [ ${isBTRFS} -eq 0 ]; then
|
if [ "${isBTRFS}" -gt 0 ]; then
|
||||||
# EXT4 calculations
|
|
||||||
hdd_used_space=$(df -h | grep "/dev/${hddDataPartitionExt4}" | sed -e's/ */ /g' | cut -d" " -f 3 2>/dev/null)
|
|
||||||
hdd_used_ratio=$(df -h | grep "/dev/${hddDataPartitionExt4}" | sed -e's/ */ /g' | cut -d" " -f 5 | tr -dc '0-9' 2>/dev/null)
|
|
||||||
hdd_data_free1Kblocks=$(df -h -k /dev/${hddDataPartitionExt4} | grep "/dev/${hddDataPartitionExt4}" | sed -e's/ */ /g' | cut -d" " -f 4 | tr -dc '0-9')
|
|
||||||
hddUsedInfo="${hdd_used_space} (${hdd_used_ratio}%)"
|
|
||||||
else
|
|
||||||
# BTRFS calculations
|
# BTRFS calculations
|
||||||
# TODO: this is the final/correct way - make better later
|
# TODO: this is the final/correct way - make better later
|
||||||
# https://askubuntu.com/questions/170044/btrfs-and-missing-free-space
|
# https://askubuntu.com/questions/170044/btrfs-and-missing-free-space
|
||||||
@ -404,6 +411,18 @@ if [ "$1" = "status" ]; then
|
|||||||
storageDrive=$(df -h | grep "/dev/${hdd}2" | sed -e's/ */ /g' | cut -d" " -f 5)
|
storageDrive=$(df -h | grep "/dev/${hdd}2" | sed -e's/ */ /g' | cut -d" " -f 5)
|
||||||
hdd_data_free1Kblocks=$(df -h -k /dev/${hdd}1 | grep "/dev/${hdd}1" | sed -e's/ */ /g' | cut -d" " -f 4 | tr -dc '0-9')
|
hdd_data_free1Kblocks=$(df -h -k /dev/${hdd}1 | grep "/dev/${hdd}1" | sed -e's/ */ /g' | cut -d" " -f 4 | tr -dc '0-9')
|
||||||
hddUsedInfo="${datadrive} & ${storageDrive}"
|
hddUsedInfo="${datadrive} & ${storageDrive}"
|
||||||
|
elif [ "${isZFS}" -gt 0 ]; then
|
||||||
|
# ZFS calculations
|
||||||
|
hdd_used_space=$(zpool list -H | awk '{print $3}')
|
||||||
|
hdd_used_ratio=$((100 * ${hdd_used_space::-1} / hddGigaBytes))
|
||||||
|
hdd_data_free1Kblocks=$(($(zpool list -pH | awk '{print $4}') / 1024))
|
||||||
|
hddUsedInfo="${hdd_used_space} (${hdd_used_ratio}%)"
|
||||||
|
else
|
||||||
|
# EXT4 calculations
|
||||||
|
hdd_used_space=$(df -h | grep "/dev/${hddDataPartitionExt4}" | sed -e's/ */ /g' | cut -d" " -f 3 2>/dev/null)
|
||||||
|
hdd_used_ratio=$(df -h | grep "/dev/${hddDataPartitionExt4}" | sed -e's/ */ /g' | cut -d" " -f 5 | tr -dc '0-9' 2>/dev/null)
|
||||||
|
hdd_data_free1Kblocks=$(df -h -k /dev/${hddDataPartitionExt4} | grep "/dev/${hddDataPartitionExt4}" | sed -e's/ */ /g' | cut -d" " -f 4 | tr -dc '0-9')
|
||||||
|
hddUsedInfo="${hdd_used_space} (${hdd_used_ratio}%)"
|
||||||
fi
|
fi
|
||||||
echo "hddUsedInfo='${hddUsedInfo}'"
|
echo "hddUsedInfo='${hddUsedInfo}'"
|
||||||
hddDataFreeBytes=$((${hdd_data_free1Kblocks} * 1024))
|
hddDataFreeBytes=$((${hdd_data_free1Kblocks} * 1024))
|
||||||
@ -463,7 +482,7 @@ if [ "$1" = "status" ]; then
|
|||||||
|
|
||||||
# show devices used for raid
|
# show devices used for raid
|
||||||
raidHddDev=$(lsblk -o NAME,MOUNTPOINT | grep "/mnt/hdd" | awk '$1=$1' | cut -d " " -f 1 | sed 's/[^0-9a-z]*//g')
|
raidHddDev=$(lsblk -o NAME,MOUNTPOINT | grep "/mnt/hdd" | awk '$1=$1' | cut -d " " -f 1 | sed 's/[^0-9a-z]*//g')
|
||||||
raidUsbDev=$(sudo btrfs filesystem show /mnt/hdd | grep -F -v "${raidHddDev}" | grep "/dev/" | cut -d "/" --f 3)
|
raidUsbDev=$(btrfs filesystem show /mnt/hdd | grep -F -v "${raidHddDev}" | grep "/dev/" | cut -d "/" --f 3)
|
||||||
echo "raidHddDev='${raidHddDev}'"
|
echo "raidHddDev='${raidHddDev}'"
|
||||||
echo "raidUsbDev='${raidUsbDev}'"
|
echo "raidUsbDev='${raidUsbDev}'"
|
||||||
|
|
||||||
@ -543,12 +562,12 @@ if [ "$1" = "format" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# get basic info on data drive
|
# get basic info on data drive
|
||||||
source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status)
|
source <(/home/admin/config.scripts/blitz.datadrive.sh status)
|
||||||
|
|
||||||
if [ ${isSwapExternal} -eq 1 ] && [ "${hdd}" == "${datadisk}" ]; then
|
if [ ${isSwapExternal} -eq 1 ] && [ "${hdd}" == "${datadisk}" ]; then
|
||||||
>&2 echo "# Switching off external SWAP of system drive"
|
>&2 echo "# Switching off external SWAP of system drive"
|
||||||
sudo dphys-swapfile swapoff 1>/dev/null
|
dphys-swapfile swapoff 1>/dev/null
|
||||||
sudo dphys-swapfile uninstall 1>/dev/null
|
dphys-swapfile uninstall 1>/dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
>&2 echo "# Unmounting all partitions of this device"
|
>&2 echo "# Unmounting all partitions of this device"
|
||||||
@ -556,19 +575,19 @@ if [ "$1" = "format" ]; then
|
|||||||
lsblk -o UUID,NAME | grep "${hdd}" | cut -d " " -f 1 | grep "-" | while read -r uuid ; do
|
lsblk -o UUID,NAME | grep "${hdd}" | cut -d " " -f 1 | grep "-" | while read -r uuid ; do
|
||||||
if [ ${#uuid} -gt 0 ]; then
|
if [ ${#uuid} -gt 0 ]; then
|
||||||
>&2 echo "# Cleaning /etc/fstab from ${uuid}"
|
>&2 echo "# Cleaning /etc/fstab from ${uuid}"
|
||||||
sudo sed -i "/UUID=${uuid}/d" /etc/fstab
|
sed -i "/UUID=${uuid}/d" /etc/fstab
|
||||||
sync
|
sync
|
||||||
else
|
else
|
||||||
>&2 echo "# skipping empty result"
|
>&2 echo "# skipping empty result"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
sudo mount -a
|
mount -a
|
||||||
|
|
||||||
if [ "${hdd}" == "${datadisk}" ]; then
|
if [ "${hdd}" == "${datadisk}" ]; then
|
||||||
>&2 echo "# Make sure system drives are unmounted .."
|
>&2 echo "# Make sure system drives are unmounted .."
|
||||||
sudo umount /mnt/hdd 2>/dev/null
|
umount /mnt/hdd 2>/dev/null
|
||||||
sudo umount /mnt/temp 2>/dev/null
|
umount /mnt/temp 2>/dev/null
|
||||||
sudo umount /mnt/storage 2>/dev/null
|
umount /mnt/storage 2>/dev/null
|
||||||
unmounted1=$(df | grep -c "/mnt/hdd")
|
unmounted1=$(df | grep -c "/mnt/hdd")
|
||||||
if [ ${unmounted1} -gt 0 ]; then
|
if [ ${unmounted1} -gt 0 ]; then
|
||||||
>&2 echo "# ERROR: failed to unmount /mnt/hdd"
|
>&2 echo "# ERROR: failed to unmount /mnt/hdd"
|
||||||
@ -606,14 +625,14 @@ if [ "$1" = "format" ]; then
|
|||||||
if [ $wipePartitions -eq 1 ]; then
|
if [ $wipePartitions -eq 1 ]; then
|
||||||
# wipe all partitions and write fresh GPT
|
# wipe all partitions and write fresh GPT
|
||||||
>&2 echo "# Wiping all partitions (sfdisk/wipefs)"
|
>&2 echo "# Wiping all partitions (sfdisk/wipefs)"
|
||||||
sudo sfdisk --delete /dev/${hdd}
|
sfdisk --delete /dev/${hdd}
|
||||||
sleep 4
|
sleep 4
|
||||||
sudo wipefs -a /dev/${hdd}
|
wipefs -a /dev/${hdd}
|
||||||
sleep 4
|
sleep 4
|
||||||
partitions=$(lsblk | grep -c "─${hdd}")
|
partitions=$(lsblk | grep -c "─${hdd}")
|
||||||
if [ ${partitions} -gt 0 ]; then
|
if [ ${partitions} -gt 0 ]; then
|
||||||
>&2 echo "# WARNING: partitions are still not clean - try Quick & Dirty"
|
>&2 echo "# WARNING: partitions are still not clean - try Quick & Dirty"
|
||||||
sudo dd if=/dev/zero of=/dev/${hdd} bs=512 count=1
|
dd if=/dev/zero of=/dev/${hdd} bs=512 count=1
|
||||||
fi
|
fi
|
||||||
partitions=$(lsblk | grep -c "─${hdd}")
|
partitions=$(lsblk | grep -c "─${hdd}")
|
||||||
if [ ${partitions} -gt 0 ]; then
|
if [ ${partitions} -gt 0 ]; then
|
||||||
@ -621,7 +640,7 @@ if [ "$1" = "format" ]; then
|
|||||||
echo "error='partition cleaning failed'"
|
echo "error='partition cleaning failed'"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
sudo parted -s /dev/${hdd} mklabel gpt 1>/dev/null 1>&2
|
parted -s /dev/${hdd} mklabel gpt 1>/dev/null 1>&2
|
||||||
sleep 2
|
sleep 2
|
||||||
sync
|
sync
|
||||||
fi
|
fi
|
||||||
@ -631,12 +650,12 @@ if [ "$1" = "format" ]; then
|
|||||||
if [ "$2" = "ext4" ]; then
|
if [ "$2" = "ext4" ]; then
|
||||||
|
|
||||||
# prepare temp mount point
|
# prepare temp mount point
|
||||||
sudo mkdir -p /tmp/ext4 1>/dev/null
|
mkdir -p /tmp/ext4 1>/dev/null
|
||||||
|
|
||||||
if [ $ext4IsPartition -eq 0 ]; then
|
if [ $ext4IsPartition -eq 0 ]; then
|
||||||
# write new EXT4 partition
|
# write new EXT4 partition
|
||||||
>&2 echo "# Creating the one big partition"
|
>&2 echo "# Creating the one big partition"
|
||||||
sudo parted -s /dev/${hdd} mkpart primary ext4 1024KiB 100% 1>&2
|
parted -s /dev/${hdd} mkpart primary ext4 1024KiB 100% 1>&2
|
||||||
sleep 6
|
sleep 6
|
||||||
sync
|
sync
|
||||||
# loop until the partition gets available
|
# loop until the partition gets available
|
||||||
@ -659,7 +678,7 @@ if [ "$1" = "format" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# make sure /mnt/hdd is unmounted before formatting
|
# make sure /mnt/hdd is unmounted before formatting
|
||||||
sudo umount -f /tmp/ext4 2>/dev/null
|
umount -f /tmp/ext4 2>/dev/null
|
||||||
unmounted=$(df | grep -c "/tmp/ext4")
|
unmounted=$(df | grep -c "/tmp/ext4")
|
||||||
if [ ${unmounted} -gt 0 ]; then
|
if [ ${unmounted} -gt 0 ]; then
|
||||||
>&2 echo "# ERROR: failed to unmount /tmp/ext4"
|
>&2 echo "# ERROR: failed to unmount /tmp/ext4"
|
||||||
@ -669,9 +688,9 @@ if [ "$1" = "format" ]; then
|
|||||||
|
|
||||||
>&2 echo "# Formatting"
|
>&2 echo "# Formatting"
|
||||||
if [ $ext4IsPartition -eq 0 ]; then
|
if [ $ext4IsPartition -eq 0 ]; then
|
||||||
sudo mkfs.ext4 -F -L BLOCKCHAIN /dev/${hdd}1 1>/dev/null
|
mkfs.ext4 -F -L BLOCKCHAIN /dev/${hdd}1 1>/dev/null
|
||||||
else
|
else
|
||||||
sudo mkfs.ext4 -F -L BLOCKCHAIN /dev/${hdd} 1>/dev/null
|
mkfs.ext4 -F -L BLOCKCHAIN /dev/${hdd} 1>/dev/null
|
||||||
fi
|
fi
|
||||||
loopdone=0
|
loopdone=0
|
||||||
loopcount=0
|
loopcount=0
|
||||||
@ -692,9 +711,9 @@ if [ "$1" = "format" ]; then
|
|||||||
# setting fsk check interval to 1
|
# setting fsk check interval to 1
|
||||||
# see https://github.com/rootzoll/raspiblitz/issues/360#issuecomment-467567572
|
# see https://github.com/rootzoll/raspiblitz/issues/360#issuecomment-467567572
|
||||||
if [ $ext4IsPartition -eq 0 ]; then
|
if [ $ext4IsPartition -eq 0 ]; then
|
||||||
sudo tune2fs -c 1 /dev/${hdd}1
|
tune2fs -c 1 /dev/${hdd}1
|
||||||
else
|
else
|
||||||
sudo tune2fs -c 1 /dev/${hdd}
|
tune2fs -c 1 /dev/${hdd}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
>&2 echo "# OK EXT 4 format done"
|
>&2 echo "# OK EXT 4 format done"
|
||||||
@ -705,10 +724,10 @@ if [ "$1" = "format" ]; then
|
|||||||
if [ "$2" = "btrfs" ]; then
|
if [ "$2" = "btrfs" ]; then
|
||||||
|
|
||||||
# prepare temp mount point
|
# prepare temp mount point
|
||||||
sudo mkdir -p /tmp/btrfs 1>/dev/null
|
mkdir -p /tmp/btrfs 1>/dev/null
|
||||||
|
|
||||||
>&2 echo "# Creating BLITZDATA (${hdd})"
|
>&2 echo "# Creating BLITZDATA (${hdd})"
|
||||||
sudo parted -s -- /dev/${hdd} mkpart primary btrfs 1024KiB 30GiB 1>/dev/null
|
parted -s -- /dev/${hdd} mkpart primary btrfs 1024KiB 30GiB 1>/dev/null
|
||||||
sync
|
sync
|
||||||
sleep 6
|
sleep 6
|
||||||
win=$(lsblk -o NAME | grep -c ${hdd}1)
|
win=$(lsblk -o NAME | grep -c ${hdd}1)
|
||||||
@ -716,7 +735,7 @@ if [ "$1" = "format" ]; then
|
|||||||
echo "error='partition failed'"
|
echo "error='partition failed'"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
sudo mkfs.btrfs -f -L BLITZDATA /dev/${hdd}1 1>/dev/null
|
mkfs.btrfs -f -L BLITZDATA /dev/${hdd}1 1>/dev/null
|
||||||
# check result
|
# check result
|
||||||
loopdone=0
|
loopdone=0
|
||||||
loopcount=0
|
loopcount=0
|
||||||
@ -725,7 +744,7 @@ if [ "$1" = "format" ]; then
|
|||||||
>&2 echo "# waiting until formatted drives gets available"
|
>&2 echo "# waiting until formatted drives gets available"
|
||||||
sleep 2
|
sleep 2
|
||||||
sync
|
sync
|
||||||
sudo parted -l
|
parted -l
|
||||||
loopdone=$(lsblk -o NAME,LABEL | grep -c BLITZDATA)
|
loopdone=$(lsblk -o NAME,LABEL | grep -c BLITZDATA)
|
||||||
loopcount=$(($loopcount +1))
|
loopcount=$(($loopcount +1))
|
||||||
if [ ${loopcount} -gt 60 ]; then
|
if [ ${loopcount} -gt 60 ]; then
|
||||||
@ -738,18 +757,18 @@ if [ "$1" = "format" ]; then
|
|||||||
>&2 echo "# OK BLITZDATA exists now"
|
>&2 echo "# OK BLITZDATA exists now"
|
||||||
|
|
||||||
>&2 echo "# Creating SubVolume for Snapshots"
|
>&2 echo "# Creating SubVolume for Snapshots"
|
||||||
sudo mount /dev/${hdd}1 /tmp/btrfs 1>/dev/null
|
mount /dev/${hdd}1 /tmp/btrfs 1>/dev/null
|
||||||
if [ $(df | grep -c "/tmp/btrfs") -eq 0 ]; then
|
if [ $(df | grep -c "/tmp/btrfs") -eq 0 ]; then
|
||||||
echo "error='mount ${hdd}1 failed'"
|
echo "error='mount ${hdd}1 failed'"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
cd /tmp/btrfs
|
cd /tmp/btrfs
|
||||||
sudo btrfs subvolume create WORKINGDIR
|
btrfs subvolume create WORKINGDIR
|
||||||
subVolDATA=$(sudo btrfs subvolume show /tmp/btrfs/WORKINGDIR | grep "Subvolume ID:" | awk '$1=$1' | cut -d " " -f 3)
|
subVolDATA=$(btrfs subvolume show /tmp/btrfs/WORKINGDIR | grep "Subvolume ID:" | awk '$1=$1' | cut -d " " -f 3)
|
||||||
cd && sudo umount /tmp/btrfs
|
cd && umount /tmp/btrfs
|
||||||
|
|
||||||
>&2 echo "# Creating BLITZSTORAGE"
|
>&2 echo "# Creating BLITZSTORAGE"
|
||||||
sudo parted -s -- /dev/${hdd} mkpart primary btrfs 30GiB -34GiB 1>/dev/null
|
parted -s -- /dev/${hdd} mkpart primary btrfs 30GiB -34GiB 1>/dev/null
|
||||||
sync
|
sync
|
||||||
sleep 6
|
sleep 6
|
||||||
win=$(lsblk -o NAME | grep -c ${hdd}2)
|
win=$(lsblk -o NAME | grep -c ${hdd}2)
|
||||||
@ -757,7 +776,7 @@ if [ "$1" = "format" ]; then
|
|||||||
echo "error='partition failed'"
|
echo "error='partition failed'"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
sudo mkfs.btrfs -f -L BLITZSTORAGE /dev/${hdd}2 1>/dev/null
|
mkfs.btrfs -f -L BLITZSTORAGE /dev/${hdd}2 1>/dev/null
|
||||||
# check result
|
# check result
|
||||||
loopdone=0
|
loopdone=0
|
||||||
loopcount=0
|
loopcount=0
|
||||||
@ -766,7 +785,7 @@ if [ "$1" = "format" ]; then
|
|||||||
>&2 echo "# waiting until formatted drives gets available"
|
>&2 echo "# waiting until formatted drives gets available"
|
||||||
sleep 2
|
sleep 2
|
||||||
sync
|
sync
|
||||||
sudo parted -l
|
parted -l
|
||||||
loopdone=$(lsblk -o NAME,LABEL | grep -c BLITZSTORAGE)
|
loopdone=$(lsblk -o NAME,LABEL | grep -c BLITZSTORAGE)
|
||||||
loopcount=$(($loopcount +1))
|
loopcount=$(($loopcount +1))
|
||||||
if [ ${loopcount} -gt 60 ]; then
|
if [ ${loopcount} -gt 60 ]; then
|
||||||
@ -778,17 +797,17 @@ if [ "$1" = "format" ]; then
|
|||||||
>&2 echo "# OK BLITZSTORAGE exists now"
|
>&2 echo "# OK BLITZSTORAGE exists now"
|
||||||
|
|
||||||
>&2 echo "# Creating SubVolume for Snapshots"
|
>&2 echo "# Creating SubVolume for Snapshots"
|
||||||
sudo mount /dev/${hdd}2 /tmp/btrfs 1>/dev/null
|
mount /dev/${hdd}2 /tmp/btrfs 1>/dev/null
|
||||||
if [ $(df | grep -c "/tmp/btrfs") -eq 0 ]; then
|
if [ $(df | grep -c "/tmp/btrfs") -eq 0 ]; then
|
||||||
echo "error='mount ${hdd}2 failed'"
|
echo "error='mount ${hdd}2 failed'"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
cd /tmp/btrfs
|
cd /tmp/btrfs
|
||||||
sudo btrfs subvolume create WORKINGDIR
|
btrfs subvolume create WORKINGDIR
|
||||||
cd && sudo umount /tmp/btrfs
|
cd && umount /tmp/btrfs
|
||||||
|
|
||||||
>&2 echo "# Creating the FAT32 partition"
|
>&2 echo "# Creating the FAT32 partition"
|
||||||
sudo parted -s -- /dev/${hdd} mkpart primary fat32 -34GiB 100% 1>/dev/null
|
parted -s -- /dev/${hdd} mkpart primary fat32 -34GiB 100% 1>/dev/null
|
||||||
sync && sleep 3
|
sync && sleep 3
|
||||||
win=$(lsblk -o NAME | grep -c ${hdd}3)
|
win=$(lsblk -o NAME | grep -c ${hdd}3)
|
||||||
if [ ${win} -eq 0 ]; then
|
if [ ${win} -eq 0 ]; then
|
||||||
@ -797,7 +816,7 @@ if [ "$1" = "format" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
>&2 echo "# Creating Volume BLITZTEMP (format)"
|
>&2 echo "# Creating Volume BLITZTEMP (format)"
|
||||||
sudo mkfs -t vfat -n BLITZTEMP /dev/${hdd}3 1>/dev/null
|
mkfs -t vfat -n BLITZTEMP /dev/${hdd}3 1>/dev/null
|
||||||
# check result
|
# check result
|
||||||
loopdone=0
|
loopdone=0
|
||||||
loopcount=0
|
loopcount=0
|
||||||
@ -806,7 +825,7 @@ if [ "$1" = "format" ]; then
|
|||||||
>&2 echo "# waiting until formatted drives gets available"
|
>&2 echo "# waiting until formatted drives gets available"
|
||||||
sleep 2
|
sleep 2
|
||||||
sync
|
sync
|
||||||
sudo parted -l
|
parted -l
|
||||||
loopdone=$(lsblk -o NAME,LABEL | grep -c BLITZTEMP)
|
loopdone=$(lsblk -o NAME,LABEL | grep -c BLITZTEMP)
|
||||||
loopcount=$(($loopcount +1))
|
loopcount=$(($loopcount +1))
|
||||||
if [ ${loopcount} -gt 60 ]; then
|
if [ ${loopcount} -gt 60 ]; then
|
||||||
@ -856,9 +875,9 @@ if [ "$1" = "fstab" ]; then
|
|||||||
# unmount
|
# unmount
|
||||||
if [ ${isMounted} -eq 1 ]; then
|
if [ ${isMounted} -eq 1 ]; then
|
||||||
echo "# unmounting all drives"
|
echo "# unmounting all drives"
|
||||||
sudo umount /mnt/hdd > /dev/null 2>&1
|
umount /mnt/hdd > /dev/null 2>&1
|
||||||
sudo umount /mnt/storage > /dev/null 2>&1
|
umount /mnt/storage > /dev/null 2>&1
|
||||||
sudo umount /mnt/temp > /dev/null 2>&1
|
umount /mnt/temp > /dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${hddFormat}" = "ext4" ]; then
|
if [ "${hddFormat}" = "ext4" ]; then
|
||||||
@ -884,15 +903,15 @@ if [ "$1" = "fstab" ]; then
|
|||||||
|
|
||||||
# write new /etc/fstab & mount
|
# write new /etc/fstab & mount
|
||||||
echo "# mount /mnt/hdd"
|
echo "# mount /mnt/hdd"
|
||||||
sudo mkdir -p /mnt/hdd 1>/dev/null
|
mkdir -p /mnt/hdd 1>/dev/null
|
||||||
updated=$(cat /etc/fstab | grep -c "/mnt/hdd")
|
updated=$(cat /etc/fstab | grep -c "/mnt/hdd")
|
||||||
if [ $updated -eq 0 ]; then
|
if [ $updated -eq 0 ]; then
|
||||||
echo "# updating /etc/fstab"
|
echo "# updating /etc/fstab"
|
||||||
sudo sed "/raspiblitz/ i UUID=${uuid1} /mnt/hdd ext4 noexec,defaults 0 2" -i /etc/fstab 1>/dev/null
|
sed "/raspiblitz/ i UUID=${uuid1} /mnt/hdd ext4 noexec,defaults 0 2" -i /etc/fstab 1>/dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
sync
|
sync
|
||||||
sudo mount -a 1>/dev/null
|
mount -a 1>/dev/null
|
||||||
|
|
||||||
# loop mounts are available
|
# loop mounts are available
|
||||||
mountactive1=0
|
mountactive1=0
|
||||||
@ -921,15 +940,15 @@ if [ "$1" = "fstab" ]; then
|
|||||||
|
|
||||||
# get info on: Data Drive
|
# get info on: Data Drive
|
||||||
uuidDATA=$(lsblk -o UUID,NAME,LABEL | grep "${hdd}" | grep "BLITZDATA" | cut -d " " -f 1 | grep "-")
|
uuidDATA=$(lsblk -o UUID,NAME,LABEL | grep "${hdd}" | grep "BLITZDATA" | cut -d " " -f 1 | grep "-")
|
||||||
sudo mkdir -p /tmp/btrfs
|
mkdir -p /tmp/btrfs
|
||||||
sudo mount /dev/${hdd}1 /tmp/btrfs 1>/dev/null
|
mount /dev/${hdd}1 /tmp/btrfs 1>/dev/null
|
||||||
if [ $(df | grep -c "/tmp/btrfs") -eq 0 ]; then
|
if [ $(df | grep -c "/tmp/btrfs") -eq 0 ]; then
|
||||||
echo "error='mount ${hdd}1 failed'"
|
echo "error='mount ${hdd}1 failed'"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
cd /tmp/btrfs
|
cd /tmp/btrfs
|
||||||
subVolDATA=$(sudo btrfs subvolume show /tmp/btrfs/WORKINGDIR | grep "Subvolume ID:" | awk '$1=$1' | cut -d " " -f 3)
|
subVolDATA=$(btrfs subvolume show /tmp/btrfs/WORKINGDIR | grep "Subvolume ID:" | awk '$1=$1' | cut -d " " -f 3)
|
||||||
cd && sudo umount /tmp/btrfs
|
cd && umount /tmp/btrfs
|
||||||
echo "uuidDATA='${uuidDATA}'"
|
echo "uuidDATA='${uuidDATA}'"
|
||||||
echo "subVolDATA='${subVolDATA}'"
|
echo "subVolDATA='${subVolDATA}'"
|
||||||
if [ ${#uuidDATA} -eq 0 ] || [ ${#subVolDATA} -eq 0 ]; then
|
if [ ${#uuidDATA} -eq 0 ] || [ ${#subVolDATA} -eq 0 ]; then
|
||||||
@ -939,14 +958,14 @@ if [ "$1" = "fstab" ]; then
|
|||||||
|
|
||||||
# get info on: Storage Drive
|
# get info on: Storage Drive
|
||||||
uuidSTORAGE=$(lsblk -o UUID,NAME,LABEL | grep "${hdd}" | grep "BLITZSTORAGE" | cut -d " " -f 1 | grep "-")
|
uuidSTORAGE=$(lsblk -o UUID,NAME,LABEL | grep "${hdd}" | grep "BLITZSTORAGE" | cut -d " " -f 1 | grep "-")
|
||||||
sudo mount /dev/${hdd}2 /tmp/btrfs 1>/dev/null
|
mount /dev/${hdd}2 /tmp/btrfs 1>/dev/null
|
||||||
if [ $(df | grep -c "/tmp/btrfs") -eq 0 ]; then
|
if [ $(df | grep -c "/tmp/btrfs") -eq 0 ]; then
|
||||||
echo "error='mount ${hdd}2 failed'"
|
echo "error='mount ${hdd}2 failed'"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
cd /tmp/btrfs
|
cd /tmp/btrfs
|
||||||
subVolSTORAGE=$(sudo btrfs subvolume show /tmp/btrfs/WORKINGDIR | grep "Subvolume ID:" | awk '$1=$1' | cut -d " " -f 3)
|
subVolSTORAGE=$(btrfs subvolume show /tmp/btrfs/WORKINGDIR | grep "Subvolume ID:" | awk '$1=$1' | cut -d " " -f 3)
|
||||||
cd && sudo umount /tmp/btrfs
|
cd && umount /tmp/btrfs
|
||||||
echo "uuidSTORAGE='${uuidSTORAGE}'"
|
echo "uuidSTORAGE='${uuidSTORAGE}'"
|
||||||
echo "subVolSTORAGE='${subVolSTORAGE}'"
|
echo "subVolSTORAGE='${subVolSTORAGE}'"
|
||||||
if [ ${#uuidSTORAGE} -eq 0 ] || [ ${#subVolSTORAGE} -eq 0 ]; then
|
if [ ${#uuidSTORAGE} -eq 0 ] || [ ${#subVolSTORAGE} -eq 0 ]; then
|
||||||
@ -965,7 +984,7 @@ if [ "$1" = "fstab" ]; then
|
|||||||
# remove old entries from fstab
|
# remove old entries from fstab
|
||||||
lsblk -o UUID,NAME | grep "${hdd}" | cut -d " " -f 1 | grep "-" | while read -r uuid ; do
|
lsblk -o UUID,NAME | grep "${hdd}" | cut -d " " -f 1 | grep "-" | while read -r uuid ; do
|
||||||
>&2 echo "# Cleaning /etc/fstab from ${uuid}"
|
>&2 echo "# Cleaning /etc/fstab from ${uuid}"
|
||||||
sudo sed -i "/UUID=${uuid}/d" /etc/fstab
|
sed -i "/UUID=${uuid}/d" /etc/fstab
|
||||||
sync
|
sync
|
||||||
done
|
done
|
||||||
|
|
||||||
@ -974,16 +993,16 @@ if [ "$1" = "fstab" ]; then
|
|||||||
bitcoinGID=$(id -g bitcoin)
|
bitcoinGID=$(id -g bitcoin)
|
||||||
|
|
||||||
# modifying /etc/fstab & mount
|
# modifying /etc/fstab & mount
|
||||||
sudo mkdir -p /mnt/hdd 1>/dev/null
|
mkdir -p /mnt/hdd 1>/dev/null
|
||||||
fstabAdd1="UUID=${uuidDATA} /mnt/hdd btrfs noexec,defaults,subvolid=${subVolDATA} 0 2"
|
fstabAdd1="UUID=${uuidDATA} /mnt/hdd btrfs noexec,defaults,subvolid=${subVolDATA} 0 2"
|
||||||
sudo sed "3 a ${fstabAdd1}" -i /etc/fstab 1>/dev/null
|
sed "3 a ${fstabAdd1}" -i /etc/fstab 1>/dev/null
|
||||||
sudo mkdir -p /mnt/storage 1>/dev/null
|
mkdir -p /mnt/storage 1>/dev/null
|
||||||
fstabAdd2="UUID=${uuidSTORAGE} /mnt/storage btrfs noexec,defaults,subvolid=${subVolSTORAGE} 0 2"
|
fstabAdd2="UUID=${uuidSTORAGE} /mnt/storage btrfs noexec,defaults,subvolid=${subVolSTORAGE} 0 2"
|
||||||
sudo sed "4 a ${fstabAdd2}" -i /etc/fstab 1>/dev/null
|
sed "4 a ${fstabAdd2}" -i /etc/fstab 1>/dev/null
|
||||||
sudo mkdir -p /mnt/temp 1>/dev/null
|
mkdir -p /mnt/temp 1>/dev/null
|
||||||
fstabAdd3="UUID=${uuidTEMP} /mnt/temp vfat noexec,defaults,uid=${bitcoinUID},gid=${bitcoinGID} 0 2"
|
fstabAdd3="UUID=${uuidTEMP} /mnt/temp vfat noexec,defaults,uid=${bitcoinUID},gid=${bitcoinGID} 0 2"
|
||||||
sudo sed "5 a ${fstabAdd3}" -i /etc/fstab 1>/dev/null
|
sed "5 a ${fstabAdd3}" -i /etc/fstab 1>/dev/null
|
||||||
sync && sudo mount -a 1>/dev/null
|
sync && mount -a 1>/dev/null
|
||||||
|
|
||||||
# test mount
|
# test mount
|
||||||
mountactive1=0
|
mountactive1=0
|
||||||
@ -1098,7 +1117,7 @@ if [ "$1" = "raid" ] && [ "$2" = "on" ]; then
|
|||||||
# remove all partitions from device
|
# remove all partitions from device
|
||||||
for v_partition in $(parted -s /dev/${usbdev} print|awk '/^ / {print $1}')
|
for v_partition in $(parted -s /dev/${usbdev} print|awk '/^ / {print $1}')
|
||||||
do
|
do
|
||||||
sudo parted -s /dev/${usbdev} rm ${v_partition}
|
parted -s /dev/${usbdev} rm ${v_partition}
|
||||||
done
|
done
|
||||||
|
|
||||||
# check if usb device is at least 30GB big
|
# check if usb device is at least 30GB big
|
||||||
@ -1111,8 +1130,8 @@ if [ "$1" = "raid" ] && [ "$2" = "on" ]; then
|
|||||||
|
|
||||||
# add usb device as raid for data
|
# add usb device as raid for data
|
||||||
>&2 echo "# adding ${usbdev} as BTRFS raid1 for /mnt/hdd"
|
>&2 echo "# adding ${usbdev} as BTRFS raid1 for /mnt/hdd"
|
||||||
sudo btrfs device add -f /dev/${usbdev} /mnt/hdd 1>/dev/null
|
btrfs device add -f /dev/${usbdev} /mnt/hdd 1>/dev/null
|
||||||
sudo btrfs filesystem balance start -dconvert=raid1 -mconvert=raid1 /mnt/hdd 1>/dev/null
|
btrfs filesystem balance start -dconvert=raid1 -mconvert=raid1 /mnt/hdd 1>/dev/null
|
||||||
|
|
||||||
>&2 echo "# OK - ${usbdev} is now part of a RAID1 for your RaspiBlitz data"
|
>&2 echo "# OK - ${usbdev} is now part of a RAID1 for your RaspiBlitz data"
|
||||||
exit 0
|
exit 0
|
||||||
@ -1123,7 +1142,7 @@ fi
|
|||||||
if [ "$1" = "raid" ] && [ "$2" = "off" ]; then
|
if [ "$1" = "raid" ] && [ "$2" = "off" ]; then
|
||||||
|
|
||||||
# checking if BTRFS mode
|
# checking if BTRFS mode
|
||||||
isBTRFS=$(sudo btrfs filesystem show 2>/dev/null| grep -c 'BLITZSTORAGE')
|
isBTRFS=$(btrfs filesystem show 2>/dev/null| grep -c 'BLITZSTORAGE')
|
||||||
if [ ${isBTRFS} -eq 0 ]; then
|
if [ ${isBTRFS} -eq 0 ]; then
|
||||||
echo "error='raid only BTRFS'"
|
echo "error='raid only BTRFS'"
|
||||||
exit 1
|
exit 1
|
||||||
@ -1136,8 +1155,8 @@ if [ "$1" = "raid" ] && [ "$2" = "off" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
>&2 echo "# removing USB DEV from RAID"
|
>&2 echo "# removing USB DEV from RAID"
|
||||||
sudo btrfs balance start -mconvert=dup -dconvert=single /mnt/hdd 1>/dev/null
|
btrfs balance start -mconvert=dup -dconvert=single /mnt/hdd 1>/dev/null
|
||||||
sudo btrfs device remove ${deviceToBeRemoved} /mnt/hdd 1>/dev/null
|
btrfs device remove ${deviceToBeRemoved} /mnt/hdd 1>/dev/null
|
||||||
|
|
||||||
isRaid=$(btrfs filesystem df /mnt/hdd 2>/dev/null | grep -c "Data, RAID1")
|
isRaid=$(btrfs filesystem df /mnt/hdd 2>/dev/null | grep -c "Data, RAID1")
|
||||||
if [ ${isRaid} -eq 0 ]; then
|
if [ ${isRaid} -eq 0 ]; then
|
||||||
@ -1195,18 +1214,18 @@ if [ "$1" = "snapshot" ]; then
|
|||||||
>&2 echo "# Preparing Snapshot ..."
|
>&2 echo "# Preparing Snapshot ..."
|
||||||
|
|
||||||
# make sure backup folder exists
|
# make sure backup folder exists
|
||||||
sudo mkdir -p ${subvolume}/snapshots
|
mkdir -p ${subvolume}/snapshots
|
||||||
|
|
||||||
# delete old backup if existing
|
# delete old backup if existing
|
||||||
oldBackupExists=$(sudo ls ${subvolume}/snapshots | grep -c backup)
|
oldBackupExists=$(ls ${subvolume}/snapshots | grep -c backup)
|
||||||
if [ ${oldBackupExists} -gt 0 ]; then
|
if [ ${oldBackupExists} -gt 0 ]; then
|
||||||
>&2 echo "# Deleting old snapshot"
|
>&2 echo "# Deleting old snapshot"
|
||||||
sudo btrfs subvolume delete ${subvolume}/snapshots/backup 1>/dev/null
|
btrfs subvolume delete ${subvolume}/snapshots/backup 1>/dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
>&2 echo "# Creating Snapshot ..."
|
>&2 echo "# Creating Snapshot ..."
|
||||||
sudo btrfs subvolume snapshot ${subvolume} ${subvolume}/snapshots/backup 1>/dev/null
|
btrfs subvolume snapshot ${subvolume} ${subvolume}/snapshots/backup 1>/dev/null
|
||||||
if [ $(sudo btrfs subvolume list ${subvolume} | grep -c snapshots/backup) -eq 0 ]; then
|
if [ $(btrfs subvolume list ${subvolume} | grep -c snapshots/backup) -eq 0 ]; then
|
||||||
echo "error='not created'"
|
echo "error='not created'"
|
||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
@ -1217,25 +1236,25 @@ if [ "$1" = "snapshot" ]; then
|
|||||||
elif [ "$3" = "rollback" ]; then
|
elif [ "$3" = "rollback" ]; then
|
||||||
|
|
||||||
# check if an old snapshot exists
|
# check if an old snapshot exists
|
||||||
oldBackupExists=$(sudo ls ${subvolume}/snapshots | grep -c backup)
|
oldBackupExists=$(ls ${subvolume}/snapshots | grep -c backup)
|
||||||
if [ ${oldBackupExists} -eq 0 ]; then
|
if [ ${oldBackupExists} -eq 0 ]; then
|
||||||
echo "error='no old snapshot found'"
|
echo "error='no old snapshot found'"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
>&2 echo "# Resetting state to old Snapshot ..."
|
>&2 echo "# Resetting state to old Snapshot ..."
|
||||||
sudo umount ${subvolume}
|
umount ${subvolume}
|
||||||
sudo mkdir -p /tmp/btrfs 1>/dev/null
|
mkdir -p /tmp/btrfs 1>/dev/null
|
||||||
sudo mount ${partition} /tmp/btrfs
|
mount ${partition} /tmp/btrfs
|
||||||
sudo mv /tmp/btrfs/WORKINGDIR/snapshots/backup /tmp/btrfs/backup
|
mv /tmp/btrfs/WORKINGDIR/snapshots/backup /tmp/btrfs/backup
|
||||||
sudo btrfs subvolume delete /tmp/btrfs/WORKINGDIR
|
btrfs subvolume delete /tmp/btrfs/WORKINGDIR
|
||||||
sudo mv /tmp/btrfs/backup /tmp/btrfs/WORKINGDIR
|
mv /tmp/btrfs/backup /tmp/btrfs/WORKINGDIR
|
||||||
subVolID=$(sudo btrfs subvolume show /tmp/btrfs/WORKINGDIR | grep "Subvolume ID:" | awk '$1=$1' | cut -d " " -f 3)
|
subVolID=$(btrfs subvolume show /tmp/btrfs/WORKINGDIR | grep "Subvolume ID:" | awk '$1=$1' | cut -d " " -f 3)
|
||||||
sudo sed -i "/${subvolumeESC}/d" /etc/fstab
|
sed -i "/${subvolumeESC}/d" /etc/fstab
|
||||||
fstabAdd="UUID=${uuid} ${subvolume} btrfs noexec,defaults,subvolid=${subVolID} 0 2"
|
fstabAdd="UUID=${uuid} ${subvolume} btrfs noexec,defaults,subvolid=${subVolID} 0 2"
|
||||||
sudo sed "4 a ${fstabAdd}" -i /etc/fstab 1>/dev/null
|
sed "4 a ${fstabAdd}" -i /etc/fstab 1>/dev/null
|
||||||
sudo umount /tmp/btrfs
|
umount /tmp/btrfs
|
||||||
sudo mount -a
|
mount -a
|
||||||
sync
|
sync
|
||||||
if [ $(df | grep -c "${subvolume}") -eq 0 ]; then
|
if [ $(df | grep -c "${subvolume}") -eq 0 ]; then
|
||||||
>&2 echo "# check drive setting ... rollback seemed to "
|
>&2 echo "# check drive setting ... rollback seemed to "
|
||||||
@ -1310,8 +1329,8 @@ if [ "$1" = "tempmount" ]; then
|
|||||||
|
|
||||||
# do EXT4 temp mount
|
# do EXT4 temp mount
|
||||||
echo "# temp mount /dev/${hddDataPartitionExt4} --> /mnt/hdd"
|
echo "# temp mount /dev/${hddDataPartitionExt4} --> /mnt/hdd"
|
||||||
sudo mkdir -p /mnt/hdd 1>/dev/null
|
mkdir -p /mnt/hdd 1>/dev/null
|
||||||
sudo mount /dev/${hddDataPartitionExt4} /mnt/hdd
|
mount /dev/${hddDataPartitionExt4} /mnt/hdd
|
||||||
|
|
||||||
# check result
|
# check result
|
||||||
isMounted=$(df | grep -c "/mnt/hdd")
|
isMounted=$(df | grep -c "/mnt/hdd")
|
||||||
@ -1330,12 +1349,12 @@ if [ "$1" = "tempmount" ]; then
|
|||||||
bitcoinGID=$(id -g bitcoin)
|
bitcoinGID=$(id -g bitcoin)
|
||||||
|
|
||||||
# do BTRFS temp mount
|
# do BTRFS temp mount
|
||||||
sudo mkdir -p /mnt/hdd 1>/dev/null
|
mkdir -p /mnt/hdd 1>/dev/null
|
||||||
sudo mkdir -p /mnt/storage 1>/dev/null
|
mkdir -p /mnt/storage 1>/dev/null
|
||||||
sudo mkdir -p /mnt/temp 1>/dev/null
|
mkdir -p /mnt/temp 1>/dev/null
|
||||||
sudo mount -t btrfs -o degraded -o subvol=WORKINGDIR /dev/${hddBTRFS}1 /mnt/hdd
|
mount -t btrfs -o degraded -o subvol=WORKINGDIR /dev/${hddBTRFS}1 /mnt/hdd
|
||||||
sudo mount -t btrfs -o subvol=WORKINGDIR /dev/${hddBTRFS}2 /mnt/storage
|
mount -t btrfs -o subvol=WORKINGDIR /dev/${hddBTRFS}2 /mnt/storage
|
||||||
sudo mount -o umask=0000,uid=${bitcoinUID},gid=${bitcoinGID} /dev/${hddBTRFS}3 /mnt/temp
|
mount -o umask=0000,uid=${bitcoinUID},gid=${bitcoinGID} /dev/${hddBTRFS}3 /mnt/temp
|
||||||
|
|
||||||
# check result
|
# check result
|
||||||
isMountedA=$(df | grep -c "/mnt/hdd")
|
isMountedA=$(df | grep -c "/mnt/hdd")
|
||||||
@ -1362,9 +1381,9 @@ if [ "$1" = "tempmount" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$1" = "unmount" ]; then
|
if [ "$1" = "unmount" ]; then
|
||||||
sudo umount /mnt/hdd 2>/dev/null
|
umount /mnt/hdd 2>/dev/null
|
||||||
sudo umount /mnt/storage 2>/dev/null
|
umount /mnt/storage 2>/dev/null
|
||||||
sudo umount /mnt/temp 2>/dev/null
|
umount /mnt/temp 2>/dev/null
|
||||||
echo "# OK done unmount"
|
echo "# OK done unmount"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@ -1381,93 +1400,93 @@ if [ "$1" = "link" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# cleanups
|
# cleanups
|
||||||
if [ $(sudo ls -la /home/bitcoin/ | grep -c "bitcoin ->") -eq 0 ]; then
|
if [ $(ls -la /home/bitcoin/ | grep -c "bitcoin ->") -eq 0 ]; then
|
||||||
>&2 echo "# - /home/bitcoin/.bitcoin -> is not a link, cleaning"
|
>&2 echo "# - /home/bitcoin/.bitcoin -> is not a link, cleaning"
|
||||||
sudo rm -r /home/bitcoin/.bitcoin 2>/dev/null
|
rm -r /home/bitcoin/.bitcoin 2>/dev/null
|
||||||
else
|
else
|
||||||
sudo rm /home/bitcoin/.bitcoin 2>/dev/null
|
rm /home/bitcoin/.bitcoin 2>/dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# make sure common base directory exits
|
# make sure common base directory exits
|
||||||
sudo mkdir -p /mnt/hdd/lnd
|
mkdir -p /mnt/hdd/lnd
|
||||||
sudo mkdir -p /mnt/hdd/app-data
|
mkdir -p /mnt/hdd/app-data
|
||||||
|
|
||||||
if [ ${isBTRFS} -eq 1 ]; then
|
if [ ${isBTRFS} -eq 1 ]; then
|
||||||
>&2 echo "# Creating BTRFS setup links"
|
>&2 echo "# Creating BTRFS setup links"
|
||||||
|
|
||||||
>&2 echo "# - linking blockchains into /mnt/hdd"
|
>&2 echo "# - linking blockchains into /mnt/hdd"
|
||||||
if [ $(ls -F /mnt/hdd/bitcoin | grep -c '/mnt/hdd/bitcoin@') -eq 0 ]; then
|
if [ $(ls -F /mnt/hdd/bitcoin | grep -c '/mnt/hdd/bitcoin@') -eq 0 ]; then
|
||||||
sudo mkdir -p /mnt/storage/bitcoin
|
mkdir -p /mnt/storage/bitcoin
|
||||||
sudo cp -R /mnt/hdd/bitcoin/* /mnt/storage/bitcoin 2>/dev/null
|
cp -R /mnt/hdd/bitcoin/* /mnt/storage/bitcoin 2>/dev/null
|
||||||
sudo chown -R bitcoin:bitcoin /mnt/storage/bitcoin
|
chown -R bitcoin:bitcoin /mnt/storage/bitcoin
|
||||||
sudo rm -r /mnt/hdd/bitcoin
|
rm -r /mnt/hdd/bitcoin
|
||||||
sudo ln -s /mnt/storage/bitcoin /mnt/hdd/bitcoin
|
ln -s /mnt/storage/bitcoin /mnt/hdd/bitcoin
|
||||||
sudo rm /mnt/storage/bitcoin/bitcoin 2>/dev/null
|
rm /mnt/storage/bitcoin/bitcoin 2>/dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
>&2 echo "# linking lnd for user bitcoin"
|
>&2 echo "# linking lnd for user bitcoin"
|
||||||
sudo rm /home/bitcoin/.lnd 2>/dev/null
|
rm /home/bitcoin/.lnd 2>/dev/null
|
||||||
sudo ln -s /mnt/hdd/lnd /home/bitcoin/.lnd
|
ln -s /mnt/hdd/lnd /home/bitcoin/.lnd
|
||||||
|
|
||||||
>&2 echo "# - linking blockchain for user bitcoin"
|
>&2 echo "# - linking blockchain for user bitcoin"
|
||||||
sudo ln -s /mnt/storage/bitcoin /home/bitcoin/.bitcoin
|
ln -s /mnt/storage/bitcoin /home/bitcoin/.bitcoin
|
||||||
|
|
||||||
>&2 echo "# - linking storage into /mnt/hdd"
|
>&2 echo "# - linking storage into /mnt/hdd"
|
||||||
sudo mkdir -p /mnt/storage/app-storage
|
mkdir -p /mnt/storage/app-storage
|
||||||
sudo chown -R bitcoin:bitcoin /mnt/storage/app-storage
|
chown -R bitcoin:bitcoin /mnt/storage/app-storage
|
||||||
sudo rm /mnt/hdd/app-storage 2>/dev/null
|
rm /mnt/hdd/app-storage 2>/dev/null
|
||||||
sudo ln -s /mnt/storage/app-storage /mnt/hdd/app-storage
|
ln -s /mnt/storage/app-storage /mnt/hdd/app-storage
|
||||||
|
|
||||||
>&2 echo "# - linking temp into /mnt/hdd"
|
>&2 echo "# - linking temp into /mnt/hdd"
|
||||||
sudo rm /mnt/hdd/temp 2>/dev/null
|
rm /mnt/hdd/temp 2>/dev/null
|
||||||
sudo ln -s /mnt/temp /mnt/hdd/temp
|
ln -s /mnt/temp /mnt/hdd/temp
|
||||||
sudo chown -R bitcoin:bitcoin /mnt/temp
|
chown -R bitcoin:bitcoin /mnt/temp
|
||||||
|
|
||||||
>&2 echo "# - creating snapshots folder"
|
>&2 echo "# - creating snapshots folder"
|
||||||
sudo mkdir -p /mnt/hdd/snapshots
|
mkdir -p /mnt/hdd/snapshots
|
||||||
sudo mkdir -p /mnt/storage/snapshots
|
mkdir -p /mnt/storage/snapshots
|
||||||
|
|
||||||
else
|
else
|
||||||
>&2 echo "# Creating EXT4 setup links"
|
>&2 echo "# Creating EXT4 setup links"
|
||||||
|
|
||||||
>&2 echo "# opening blockchain into /mnt/hdd"
|
>&2 echo "# opening blockchain into /mnt/hdd"
|
||||||
sudo mkdir -p /mnt/hdd/bitcoin
|
mkdir -p /mnt/hdd/bitcoin
|
||||||
|
|
||||||
>&2 echo "# linking blockchain for user bitcoin"
|
>&2 echo "# linking blockchain for user bitcoin"
|
||||||
sudo rm /home/bitcoin/.bitcoin 2>/dev/null
|
rm /home/bitcoin/.bitcoin 2>/dev/null
|
||||||
sudo ln -s /mnt/hdd/bitcoin /home/bitcoin/.bitcoin
|
ln -s /mnt/hdd/bitcoin /home/bitcoin/.bitcoin
|
||||||
|
|
||||||
>&2 echo "# linking lnd for user bitcoin"
|
>&2 echo "# linking lnd for user bitcoin"
|
||||||
sudo rm /home/bitcoin/.lnd 2>/dev/null
|
rm /home/bitcoin/.lnd 2>/dev/null
|
||||||
sudo ln -s /mnt/hdd/lnd /home/bitcoin/.lnd
|
ln -s /mnt/hdd/lnd /home/bitcoin/.lnd
|
||||||
|
|
||||||
>&2 echo "# creating default storage & temp folders"
|
>&2 echo "# creating default storage & temp folders"
|
||||||
sudo mkdir -p /mnt/hdd/app-storage
|
mkdir -p /mnt/hdd/app-storage
|
||||||
sudo mkdir -p /mnt/hdd/temp
|
mkdir -p /mnt/hdd/temp
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# fix ownership of linked files
|
# fix ownership of linked files
|
||||||
sudo chown -R bitcoin:bitcoin /mnt/hdd/bitcoin
|
chown -R bitcoin:bitcoin /mnt/hdd/bitcoin
|
||||||
sudo chown -R bitcoin:bitcoin /mnt/hdd/lnd
|
chown -R bitcoin:bitcoin /mnt/hdd/lnd
|
||||||
sudo chown -R bitcoin:bitcoin /home/bitcoin/.lnd
|
chown -R bitcoin:bitcoin /home/bitcoin/.lnd
|
||||||
sudo chown -R bitcoin:bitcoin /home/bitcoin/.bitcoin
|
chown -R bitcoin:bitcoin /home/bitcoin/.bitcoin
|
||||||
sudo chown -R bitcoin:bitcoin /mnt/hdd/app-storage
|
chown bitcoin:bitcoin /mnt/hdd/app-storage
|
||||||
sudo chown -R bitcoin:bitcoin /mnt/hdd/app-data
|
chown bitcoin:bitcoin /mnt/hdd/app-data
|
||||||
sudo chown -R bitcoin:bitcoin /mnt/hdd/temp 2>/dev/null
|
chown -R bitcoin:bitcoin /mnt/hdd/temp 2>/dev/null
|
||||||
sudo chmod -R 777 /mnt/temp 2>/dev/null
|
chmod -R 777 /mnt/temp 2>/dev/null
|
||||||
sudo chmod -R 777 /mnt/hdd/temp 2>/dev/null
|
chmod -R 777 /mnt/hdd/temp 2>/dev/null
|
||||||
|
|
||||||
# write info files about what directories are for
|
# write info files about what directories are for
|
||||||
|
|
||||||
echo "The /mnt/hdd/temp directory is for short time data and will get cleaned up on very start. Dont work with data here thats bigger then 25GB - because on BTRFS hdd layout this is a own partition with limited space. Also on BTRFS hdd layout the temp partition is an FAT format - so it can be easily mounted on Windows and OSx laptops by just connecting it to such laptops. Use this for easy export data. To import data make sure to work with the data before bootstrap is deleting the directory on startup." > ./README.txt
|
echo "The /mnt/hdd/temp directory is for short time data and will get cleaned up on very start. Dont work with data here thats bigger then 25GB - because on BTRFS hdd layout this is a own partition with limited space. Also on BTRFS hdd layout the temp partition is an FAT format - so it can be easily mounted on Windows and OSx laptops by just connecting it to such laptops. Use this for easy export data. To import data make sure to work with the data before bootstrap is deleting the directory on startup." > ./README.txt
|
||||||
sudo mv ./README.txt /mnt/hdd/temp/README.txt 2>/dev/null
|
mv ./README.txt /mnt/hdd/temp/README.txt 2>/dev/null
|
||||||
|
|
||||||
echo "The /mnt/hdd/app-data directory should be used by additional/optional apps and services installed to the RaspiBlitz for their data that should survive an import/export/backup. Data that can be reproduced (indexes, etc.) should be stored in app-storage." > ./README.txt
|
echo "The /mnt/hdd/app-data directory should be used by additional/optional apps and services installed to the RaspiBlitz for their data that should survive an import/export/backup. Data that can be reproduced (indexes, etc.) should be stored in app-storage." > ./README.txt
|
||||||
sudo mv ./README.txt /mnt/hdd/app-data/README.txt 2>/dev/null
|
mv ./README.txt /mnt/hdd/app-data/README.txt 2>/dev/null
|
||||||
|
|
||||||
echo "The /mnt/hdd/app-storage directory should be used by additional/optional apps and services installed to the RaspiBlitz for their non-critical and reproducible data (indexes, public blockchain, etc.) that does not need to survive an an import/export/backup. Data is critical should be in app-data." > ./README.txt
|
echo "The /mnt/hdd/app-storage directory should be used by additional/optional apps and services installed to the RaspiBlitz for their non-critical and reproducible data (indexes, public blockchain, etc.) that does not need to survive an an import/export/backup. Data is critical should be in app-data." > ./README.txt
|
||||||
sudo mv ./README.txt /mnt/hdd/app-storage/README.txt 2>/dev/null
|
mv ./README.txt /mnt/hdd/app-storage/README.txt 2>/dev/null
|
||||||
|
|
||||||
>&2 echo "# OK - all symbolic links are built"
|
>&2 echo "# OK - all symbolic links are built"
|
||||||
exit 0
|
exit 0
|
||||||
@ -1495,33 +1514,33 @@ if [ "$1" = "swap" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
>&2 echo "# Switch off/uninstall old SWAP"
|
>&2 echo "# Switch off/uninstall old SWAP"
|
||||||
sudo dphys-swapfile swapoff 1>/dev/null
|
dphys-swapfile swapoff 1>/dev/null
|
||||||
sudo dphys-swapfile uninstall 1>/dev/null
|
dphys-swapfile uninstall 1>/dev/null
|
||||||
|
|
||||||
if [ ${isBTRFS} -eq 1 ]; then
|
if [ ${isBTRFS} -eq 1 ]; then
|
||||||
|
|
||||||
>&2 echo "# Rewrite external SWAP config for BTRFS setup"
|
>&2 echo "# Rewrite external SWAP config for BTRFS setup"
|
||||||
sudo sed -i "s/^#CONF_SWAPFILE=/CONF_SWAPFILE=/g" /etc/dphys-swapfile
|
sed -i "s/^#CONF_SWAPFILE=/CONF_SWAPFILE=/g" /etc/dphys-swapfile
|
||||||
sudo sed -i "s/^CONF_SWAPFILE=.*/CONF_SWAPFILE=\/mnt\/temp\/swapfile/g" /etc/dphys-swapfile
|
sed -i "s/^CONF_SWAPFILE=.*/CONF_SWAPFILE=\/mnt\/temp\/swapfile/g" /etc/dphys-swapfile
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
>&2 echo "# Rewrite external SWAP config for EXT4 setup"
|
>&2 echo "# Rewrite external SWAP config for EXT4 setup"
|
||||||
sudo sed -i "s/^#CONF_SWAPFILE=/CONF_SWAPFILE=/g" /etc/dphys-swapfile
|
sed -i "s/^#CONF_SWAPFILE=/CONF_SWAPFILE=/g" /etc/dphys-swapfile
|
||||||
sudo sed -i "s/^CONF_SWAPFILE=.*/CONF_SWAPFILE=\/mnt\/hdd\/swapfile/g" /etc/dphys-swapfile
|
sed -i "s/^CONF_SWAPFILE=.*/CONF_SWAPFILE=\/mnt\/hdd\/swapfile/g" /etc/dphys-swapfile
|
||||||
|
|
||||||
fi
|
fi
|
||||||
sudo sed -i "s/^CONF_SWAPSIZE=/#CONF_SWAPSIZE=/g" /etc/dphys-swapfile
|
sed -i "s/^CONF_SWAPSIZE=/#CONF_SWAPSIZE=/g" /etc/dphys-swapfile
|
||||||
sudo sed -i "s/^#CONF_MAXSWAP=.*/CONF_MAXSWAP=4096/g" /etc/dphys-swapfile
|
sed -i "s/^#CONF_MAXSWAP=.*/CONF_MAXSWAP=4096/g" /etc/dphys-swapfile
|
||||||
|
|
||||||
>&2 echo "# Creating SWAP file .."
|
>&2 echo "# Creating SWAP file .."
|
||||||
sudo dd if=/dev/zero of=$externalSwapPath count=4096 bs=1MiB 1>/dev/null
|
dd if=/dev/zero of=$externalSwapPath count=4096 bs=1MiB 1>/dev/null
|
||||||
sudo chmod 0600 $externalSwapPath 1>/dev/null
|
chmod 0600 $externalSwapPath 1>/dev/null
|
||||||
|
|
||||||
>&2 echo "# Activating new SWAP"
|
>&2 echo "# Activating new SWAP"
|
||||||
sudo mkswap $externalSwapPath
|
mkswap $externalSwapPath
|
||||||
sudo dphys-swapfile setup
|
dphys-swapfile setup
|
||||||
sudo dphys-swapfile swapon
|
dphys-swapfile swapon
|
||||||
|
|
||||||
>&2 echo "# OK - Swap is now ON external"
|
>&2 echo "# OK - Swap is now ON external"
|
||||||
exit 0
|
exit 0
|
||||||
@ -1534,19 +1553,19 @@ if [ "$1" = "swap" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
>&2 echo "# Switch off/uninstall old SWAP"
|
>&2 echo "# Switch off/uninstall old SWAP"
|
||||||
sudo dphys-swapfile swapoff 1>/dev/null
|
dphys-swapfile swapoff 1>/dev/null
|
||||||
sudo dphys-swapfile uninstall 1>/dev/null
|
dphys-swapfile uninstall 1>/dev/null
|
||||||
|
|
||||||
>&2 echo "# Rewrite SWAP config"
|
>&2 echo "# Rewrite SWAP config"
|
||||||
sudo sed -i "12s/.*/CONF_SWAPFILE=\/var\/swap/" /etc/dphys-swapfile
|
sed -i "12s/.*/CONF_SWAPFILE=\/var\/swap/" /etc/dphys-swapfile
|
||||||
sudo sed -i "16s/.*/#CONF_SWAPSIZE=/" /etc/dphys-swapfile
|
sed -i "16s/.*/#CONF_SWAPSIZE=/" /etc/dphys-swapfile
|
||||||
sudo dd if=/dev/zero of=/var/swap count=256 bs=1MiB 1>/dev/null
|
dd if=/dev/zero of=/var/swap count=256 bs=1MiB 1>/dev/null
|
||||||
sudo chmod 0600 /var/swap
|
chmod 0600 /var/swap
|
||||||
|
|
||||||
>&2 echo "# Create and switch on new SWAP"
|
>&2 echo "# Create and switch on new SWAP"
|
||||||
sudo mkswap /var/swap 1>/dev/null
|
mkswap /var/swap 1>/dev/null
|
||||||
sudo dphys-swapfile setup 1>/dev/null
|
dphys-swapfile setup 1>/dev/null
|
||||||
sudo dphys-swapfile swapon 1>/dev/null
|
dphys-swapfile swapon 1>/dev/null
|
||||||
|
|
||||||
>&2 echo "# OK - Swap is now OFF external"
|
>&2 echo "# OK - Swap is now OFF external"
|
||||||
exit 0
|
exit 0
|
||||||
@ -1577,7 +1596,7 @@ if [ "$1" = "clean" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
>&2 echo "# Making sure 'secure-delete' is installed ..."
|
>&2 echo "# Making sure 'secure-delete' is installed ..."
|
||||||
sudo apt-get install -y secure-delete 1>/dev/null
|
apt-get install -y secure-delete 1>/dev/null
|
||||||
|
|
||||||
>&2 echo
|
>&2 echo
|
||||||
>&2 echo "# IMPORTANT: No 100% guarantee that sensitive data is completely deleted!"
|
>&2 echo "# IMPORTANT: No 100% guarantee that sensitive data is completely deleted!"
|
||||||
@ -1594,8 +1613,8 @@ if [ "$1" = "clean" ]; then
|
|||||||
>&2 echo "# Deleting personal Data .."
|
>&2 echo "# Deleting personal Data .."
|
||||||
|
|
||||||
# make sure swap is off
|
# make sure swap is off
|
||||||
sudo dphys-swapfile swapoff 1>/dev/null
|
dphys-swapfile swapoff 1>/dev/null
|
||||||
sudo dphys-swapfile uninstall 1>/dev/null
|
dphys-swapfile uninstall 1>/dev/null
|
||||||
sync
|
sync
|
||||||
|
|
||||||
# for all other data shred files selectively
|
# for all other data shred files selectively
|
||||||
@ -1635,18 +1654,18 @@ if [ "$1" = "clean" ]; then
|
|||||||
if [ -d "/mnt/hdd/$entry" ]; then
|
if [ -d "/mnt/hdd/$entry" ]; then
|
||||||
if [ ${whenDeleteSchredd} -eq 1 ]; then
|
if [ ${whenDeleteSchredd} -eq 1 ]; then
|
||||||
>&2 echo "# shredding DIR : ${entry}"
|
>&2 echo "# shredding DIR : ${entry}"
|
||||||
sudo srm -lr /mnt/hdd/$entry
|
srm -lr /mnt/hdd/$entry
|
||||||
else
|
else
|
||||||
>&2 echo "# deleting DIR : ${entry}"
|
>&2 echo "# deleting DIR : ${entry}"
|
||||||
sudo rm -r /mnt/hdd/$entry
|
rm -r /mnt/hdd/$entry
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
if [ ${whenDeleteSchredd} -eq 1 ]; then
|
if [ ${whenDeleteSchredd} -eq 1 ]; then
|
||||||
>&2 echo "# shredding FILE : ${entry}"
|
>&2 echo "# shredding FILE : ${entry}"
|
||||||
sudo srm -l /mnt/hdd/$entry
|
srm -l /mnt/hdd/$entry
|
||||||
else
|
else
|
||||||
>&2 echo "# deleting FILE : ${entry}"
|
>&2 echo "# deleting FILE : ${entry}"
|
||||||
sudo rm /mnt/hdd/$entry
|
rm /mnt/hdd/$entry
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -1664,7 +1683,7 @@ if [ "$1" = "clean" ]; then
|
|||||||
echo "Cleaning Blockchain: ${chain}"
|
echo "Cleaning Blockchain: ${chain}"
|
||||||
|
|
||||||
# take extra care if wallet.db exists
|
# take extra care if wallet.db exists
|
||||||
sudo srm -v /mnt/hdd/${chain}/wallet.db 2>/dev/null
|
srm -v /mnt/hdd/${chain}/wallet.db 2>/dev/null
|
||||||
|
|
||||||
# the rest just delete (keep blocks and chainstate and testnet3)
|
# the rest just delete (keep blocks and chainstate and testnet3)
|
||||||
for entry in $(ls -A1 /mnt/hdd/${chain} 2>/dev/null)
|
for entry in $(ls -A1 /mnt/hdd/${chain} 2>/dev/null)
|
||||||
@ -1679,10 +1698,10 @@ if [ "$1" = "clean" ]; then
|
|||||||
if [ ${delete} -eq 1 ]; then
|
if [ ${delete} -eq 1 ]; then
|
||||||
if [ -d "/mnt/hdd/${chain}/$entry" ]; then
|
if [ -d "/mnt/hdd/${chain}/$entry" ]; then
|
||||||
>&2 echo "# Deleting DIR : /mnt/hdd/${chain}/${entry}"
|
>&2 echo "# Deleting DIR : /mnt/hdd/${chain}/${entry}"
|
||||||
sudo rm -r /mnt/hdd/${chain}/$entry
|
rm -r /mnt/hdd/${chain}/$entry
|
||||||
else
|
else
|
||||||
>&2 echo "# deleting FILE : /mnt/hdd/${chain}/${entry}"
|
>&2 echo "# deleting FILE : /mnt/hdd/${chain}/${entry}"
|
||||||
sudo rm /mnt/hdd/${chain}/$entry
|
rm /mnt/hdd/${chain}/$entry
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
>&2 echo "# keeping: ${entry}"
|
>&2 echo "# keeping: ${entry}"
|
||||||
@ -1702,10 +1721,10 @@ if [ "$1" = "clean" ]; then
|
|||||||
if [ ${delete} -eq 1 ]; then
|
if [ ${delete} -eq 1 ]; then
|
||||||
if [ -d "/mnt/hdd/bitcoin/testnet3/$entry" ]; then
|
if [ -d "/mnt/hdd/bitcoin/testnet3/$entry" ]; then
|
||||||
>&2 echo "# Deleting DIR : /mnt/hdd/bitcoin/testnet3/${entry}"
|
>&2 echo "# Deleting DIR : /mnt/hdd/bitcoin/testnet3/${entry}"
|
||||||
sudo rm -r /mnt/hdd/bitcoin/testnet3/$entry
|
rm -r /mnt/hdd/bitcoin/testnet3/$entry
|
||||||
else
|
else
|
||||||
>&2 echo "# deleting FILE : /mnt/hdd/bitcoin/testnet3/${entry}"
|
>&2 echo "# deleting FILE : /mnt/hdd/bitcoin/testnet3/${entry}"
|
||||||
sudo rm /mnt/hdd/bitcoin/testnet3/$entry
|
rm /mnt/hdd/bitcoin/testnet3/$entry
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
>&2 echo "# keeping: ${entry}"
|
>&2 echo "# keeping: ${entry}"
|
||||||
@ -1737,8 +1756,8 @@ if [ "$1" = "clean" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# deleting the blocks and chainstate
|
# deleting the blocks and chainstate
|
||||||
sudo rm -R ${basePath}/bitcoin/blocks 1>/dev/null 2>/dev/null
|
rm -R ${basePath}/bitcoin/blocks 1>/dev/null 2>/dev/null
|
||||||
sudo rm -R ${basePath}/bitcoin/chainstate 1>/dev/null 2>/dev/null
|
rm -R ${basePath}/bitcoin/chainstate 1>/dev/null 2>/dev/null
|
||||||
|
|
||||||
>&2 echo "# OK cleaning done."
|
>&2 echo "# OK cleaning done."
|
||||||
exit 1
|
exit 1
|
||||||
@ -1761,10 +1780,10 @@ if [ "$1" = "clean" ]; then
|
|||||||
|
|
||||||
if [ -d "${tempPath}/$entry" ]; then
|
if [ -d "${tempPath}/$entry" ]; then
|
||||||
>&2 echo "# shredding DIR : ${entry}"
|
>&2 echo "# shredding DIR : ${entry}"
|
||||||
sudo rm -r ${tempPath}/$entry
|
rm -r ${tempPath}/$entry
|
||||||
else
|
else
|
||||||
>&2 echo "# shredding FILE : ${entry}"
|
>&2 echo "# shredding FILE : ${entry}"
|
||||||
sudo rm ${tempPath}/$entry
|
rm ${tempPath}/$entry
|
||||||
fi
|
fi
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -1794,18 +1813,18 @@ if [ "$1" = "uasp-fix" ]; then
|
|||||||
|
|
||||||
# check if UASP is already deactivated (on RaspiOS)
|
# 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/
|
# 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")
|
cmdlineExists=$(ls /boot/cmdline.txt 2>/dev/null | grep -c "cmdline.txt")
|
||||||
if [ ${cmdlineExists} -eq 1 ] && [ ${#hddAdapterUSB} -gt 0 ] && [ ${hddAdapterUSAP} -eq 0 ]; then
|
if [ ${cmdlineExists} -eq 1 ] && [ ${#hddAdapterUSB} -gt 0 ] && [ ${hddAdapterUSAP} -eq 0 ]; then
|
||||||
echo "# Checking for UASP deactivation ..."
|
echo "# Checking for UASP deactivation ..."
|
||||||
usbQuirkActive=$(sudo cat /boot/cmdline.txt | grep -c "usb-storage.quirks=")
|
usbQuirkActive=$(cat /boot/cmdline.txt | grep -c "usb-storage.quirks=")
|
||||||
usbQuirkDone=$(sudo cat /boot/cmdline.txt | grep -c "usb-storage.quirks=${hddAdapterUSB}:u")
|
usbQuirkDone=$(cat /boot/cmdline.txt | grep -c "usb-storage.quirks=${hddAdapterUSB}:u")
|
||||||
if [ ${usbQuirkActive} -gt 0 ] && [ ${usbQuirkDone} -eq 0 ]; then
|
if [ ${usbQuirkActive} -gt 0 ] && [ ${usbQuirkDone} -eq 0 ]; then
|
||||||
# remove old usb-storage.quirks
|
# remove old usb-storage.quirks
|
||||||
sudo sed -i "s/usb-storage.quirks=[^ ]* //g" /boot/cmdline.txt
|
sed -i "s/usb-storage.quirks=[^ ]* //g" /boot/cmdline.txt
|
||||||
fi
|
fi
|
||||||
if [ ${usbQuirkDone} -eq 0 ]; then
|
if [ ${usbQuirkDone} -eq 0 ]; then
|
||||||
# add new usb-storage.quirks
|
# add new usb-storage.quirks
|
||||||
sudo sed -i "s/^/usb-storage.quirks=${hddAdapterUSB}:u /" /boot/cmdline.txt
|
sed -i "s/^/usb-storage.quirks=${hddAdapterUSB}:u /" /boot/cmdline.txt
|
||||||
# go into reboot to activate new setting
|
# go into reboot to activate new setting
|
||||||
echo "# DONE deactivating UASP for ${hddAdapterUSB} ... reboot needed"
|
echo "# DONE deactivating UASP for ${hddAdapterUSB} ... reboot needed"
|
||||||
echo "neededReboot=1"
|
echo "neededReboot=1"
|
||||||
|
@ -14,8 +14,8 @@ fi
|
|||||||
###################
|
###################
|
||||||
|
|
||||||
# get required parameters
|
# get required parameters
|
||||||
script=$2
|
script=$1
|
||||||
shortcode=$3
|
shortcode=$2
|
||||||
|
|
||||||
# check reqired parameters
|
# check reqired parameters
|
||||||
if [ "${script}" == "" ]; then
|
if [ "${script}" == "" ]; then
|
||||||
|
@ -462,7 +462,7 @@ if [ "$1" = "import" ]; then
|
|||||||
# copy bitcoin data backups back to original places (if part of backup)
|
# copy bitcoin data backups back to original places (if part of backup)
|
||||||
if [ -d "/mnt/hdd/backup_bitcoin" ]; then
|
if [ -d "/mnt/hdd/backup_bitcoin" ]; then
|
||||||
echo "# Copying back bitcoin backup data .."
|
echo "# Copying back bitcoin backup data .."
|
||||||
sudo mkdir /mnt/hdd/bitcoin
|
sudo mkdir /mnt/hdd/bitcoin 2>/dev/null
|
||||||
sudo cp /mnt/hdd/backup_bitcoin/bitcoin.conf /mnt/hdd/bitcoin/bitcoin.conf
|
sudo cp /mnt/hdd/backup_bitcoin/bitcoin.conf /mnt/hdd/bitcoin/bitcoin.conf
|
||||||
sudo cp /mnt/hdd/backup_bitcoin/wallet.dat /mnt/hdd/bitcoin/wallet.dat 2>/dev/null
|
sudo cp /mnt/hdd/backup_bitcoin/wallet.dat /mnt/hdd/bitcoin/wallet.dat 2>/dev/null
|
||||||
sudo chown bitcoin:bitcoin -R /mnt/hdd/bitcoin
|
sudo chown bitcoin:bitcoin -R /mnt/hdd/bitcoin
|
||||||
|
@ -76,13 +76,16 @@ if [ "${action}" == "check-upload" ]; then
|
|||||||
if [ "${type}" == "scb" ]; then
|
if [ "${type}" == "scb" ]; then
|
||||||
|
|
||||||
# general filename check
|
# general filename check
|
||||||
typeCount=$(sudo ls ${defaultUploadPath}/*.backup 2>/dev/null | grep -c '.backup')
|
sudo mv ${defaultUploadPath}/channel-all.bak ${defaultUploadPath}/channel.backup 2>/dev/null
|
||||||
|
typeCount=$(sudo ls ${defaultUploadPath}/channel.backup 2>/dev/null | grep -c '.backup')
|
||||||
if [ "${typeCount}" != "1" ]; then
|
if [ "${typeCount}" != "1" ]; then
|
||||||
sudo rm ${defaultUploadPath}/* 2>/dev/null
|
sudo rm ${defaultUploadPath}/* 2>/dev/null
|
||||||
echo "error='invalid'"
|
echo "error='invalid'"
|
||||||
echo "errorDetail='not *.backup'"
|
echo "errorDetail='not *.backup'"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
filename="${defaultUploadPath}/channel.backup"
|
||||||
|
byteSize=$(ls -l ${filename} | awk '{print $5}')
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# LND-RESCUE check if file looks valid
|
# LND-RESCUE check if file looks valid
|
||||||
|
@ -13,12 +13,101 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
|
|||||||
echo "---------------------------------------------------"
|
echo "---------------------------------------------------"
|
||||||
echo "SEED WORDS"
|
echo "SEED WORDS"
|
||||||
echo "---------------------------------------------------"
|
echo "---------------------------------------------------"
|
||||||
echo "cl.backup.sh seed-export-gui [lndseeddata]"
|
echo "cl.backup.sh seed-export-gui [clseeddata]"
|
||||||
echo "cl.backup.sh seed-import-gui [resultfile]"
|
echo "cl.backup.sh seed-import-gui [resultfile]"
|
||||||
|
echo "---------------------------------------------------"
|
||||||
|
echo "RECOVERY"
|
||||||
|
echo "---------------------------------------------------"
|
||||||
|
echo "cl.backup.sh [mainnet|signet|testnet] recoverymode [on|off|status] <-rescanbockheight|rescandepth>"
|
||||||
echo
|
echo
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# 1st PARAMETER [mainnet|signet|testnet]
|
||||||
|
if [ "$1" == "mainnet" ] || [ "$1" == "testnet" ] || [ "$1" == "signet" ]; then
|
||||||
|
|
||||||
|
# prepare all chain dependent variables
|
||||||
|
source <(/home/admin/config.scripts/network.aliases.sh getvars cl $1)
|
||||||
|
mode="$2"
|
||||||
|
|
||||||
|
################################
|
||||||
|
# RECOVERY
|
||||||
|
################################
|
||||||
|
|
||||||
|
# c-lightning is considered in "recoverymode" when it is scanning the chain
|
||||||
|
# and getinfo -H shows: 'warning_lightningd_sync=Still loading latest blocks from bitcoind.'
|
||||||
|
# and 'blockheight=lower-than-in-bitcoind'
|
||||||
|
|
||||||
|
if [ ${mode} = "recoverymode" ]; then
|
||||||
|
|
||||||
|
# check if started with sudo
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
echo "error='run as root'"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# status
|
||||||
|
recoverymodeStatus=$(grep -c "^rescan=" < "${CLCONF}")
|
||||||
|
if [ "$3" == "status" ]; then
|
||||||
|
if [ ${recoverymodeStatus} -gt 0 ]; then
|
||||||
|
echo "recoverymode=1"
|
||||||
|
else
|
||||||
|
echo "recoverymode=0"
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# on
|
||||||
|
if [ "$3" == "on" ]; then
|
||||||
|
if [ ${recoverymodeStatus} -gt 0 ]; then
|
||||||
|
echo "# recoverymode already on"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# clean
|
||||||
|
sed -i 's/^rescan=.*//g' "${CLCONF}"
|
||||||
|
sed -i 's/^log-level=.*//g' "${CLCONF}"
|
||||||
|
|
||||||
|
# activate rescan in cl config
|
||||||
|
if [ $# -gt 3 ]; then
|
||||||
|
scanFrom="$4"
|
||||||
|
else
|
||||||
|
# scan from block 700000 by default
|
||||||
|
scanFrom="-700000"
|
||||||
|
fi
|
||||||
|
echo "# activating recovery mode ..."
|
||||||
|
echo "rescan=${scanFrom}" | tee -a "${CLCONF}"
|
||||||
|
echo "# setting log-level=debug ..."
|
||||||
|
echo "log-level=debug" | tee -a "${CLCONF}"
|
||||||
|
echo "# OK - restart/reboot needed for: ${netprefix}lightningd.service"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# off
|
||||||
|
if [ "$3" == "off" ]; then
|
||||||
|
if [ ${recoverymodeStatus} -eq 0 ]; then
|
||||||
|
echo "# recoverymode already off"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# remove --reset-wallet-transactions parameter in systemd service
|
||||||
|
echo "# deactivating recovery mode ..."
|
||||||
|
sed -i 's/^rescan=.*//g' "${CLCONF}"
|
||||||
|
sed -i 's/^log-level=.*//g' "${CLCONF}"
|
||||||
|
echo "# setting log-level=info (default) ..."
|
||||||
|
echo "log-level=info" | tee -a "${CLCONF}"
|
||||||
|
echo "# OK - restart/reboot needed for: ${netprefix}lightningd.service"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# parameter fallback
|
||||||
|
echo "error='unknown parameter'"
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
# 1st PARAMETER action
|
# 1st PARAMETER action
|
||||||
mode="$1"
|
mode="$1"
|
||||||
|
|
||||||
@ -328,7 +417,7 @@ if [ ${mode} = "seed-export-gui" ]; then
|
|||||||
# use text snippet for testing:
|
# use text snippet for testing:
|
||||||
#
|
#
|
||||||
|
|
||||||
# 2nd PARAMETER: lnd seed data
|
# 2nd PARAMETER: cl seed data
|
||||||
seedwords6x4=$2
|
seedwords6x4=$2
|
||||||
if [ "${seedwords6x4}" == "" ]; then
|
if [ "${seedwords6x4}" == "" ]; then
|
||||||
echo "error='missing parameter'"
|
echo "error='missing parameter'"
|
||||||
@ -344,7 +433,7 @@ if [ ${mode} = "seed-export-gui" ]; then
|
|||||||
ack=1
|
ack=1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Results will be stored on memory cache:
|
# Results will be stored on memory cache:
|
||||||
|
@ -14,13 +14,13 @@ if [ $# -lt 1 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]||\
|
|||||||
echo
|
echo
|
||||||
echo "Usage:"
|
echo "Usage:"
|
||||||
echo "Create new wallet:"
|
echo "Create new wallet:"
|
||||||
echo "cl.hsmtool.sh [new] [mainnet|testnet|signet] [?seedPassword]"
|
echo "cl.hsmtool.sh [new] [mainnet|testnet|signet] [?seedpassword]"
|
||||||
echo "cl.hsmtool.sh [new-force] [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 "There will be no seedpassword(passphrase) used by default"
|
||||||
echo "new-force will backup the old wallet and will work without interaction"
|
echo "new-force will backup the old wallet and will work without interaction"
|
||||||
echo
|
echo
|
||||||
echo "cl.hsmtool.sh [seed] [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 "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 "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 "seed-force will delete any old wallet and will work without dialog"
|
||||||
echo
|
echo
|
||||||
@ -38,7 +38,7 @@ source <(/home/admin/config.scripts/network.aliases.sh getvars cl $2)
|
|||||||
hsmSecretPath="/home/bitcoin/.lightning/${CLNETWORK}/hsm_secret"
|
hsmSecretPath="/home/bitcoin/.lightning/${CLNETWORK}/hsm_secret"
|
||||||
|
|
||||||
# password file is on the disk if encrypted and auto-unlock is enabled
|
# password file is on the disk if encrypted and auto-unlock is enabled
|
||||||
passwordFile=/dev/shm/.${netprefix}cl.pw
|
passwordFile="/dev/shm/.${netprefix}cl.pw"
|
||||||
if grep -Eq "${netprefix}clEncryptedHSM=on" /mnt/hdd/raspiblitz.conf;then
|
if grep -Eq "${netprefix}clEncryptedHSM=on" /mnt/hdd/raspiblitz.conf;then
|
||||||
if grep -Eq "${netprefix}clAutoUnlock=on" /mnt/hdd/raspiblitz.conf;then
|
if grep -Eq "${netprefix}clAutoUnlock=on" /mnt/hdd/raspiblitz.conf;then
|
||||||
passwordFile=/home/bitcoin/.${netprefix}cl.pw
|
passwordFile=/home/bitcoin/.${netprefix}cl.pw
|
||||||
@ -159,7 +159,8 @@ function decryptHSMsecret() {
|
|||||||
if [ "$1" = "new" ] || [ "$1" = "new-force" ] || [ "$1" = "seed" ] || [ "$1" = "seed-force" ]; then
|
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)
|
# make sure /home/bitcoin/.lightning/bitcoin exists (when lightningd was not run yet)
|
||||||
if ! sudo ls /home/bitcoin/.lightning/bitcoin; then
|
if ! sudo ls /home/bitcoin/.lightning/bitcoin 1>/dev/null; then
|
||||||
|
echo "# Create /home/bitcoin/.lightning/bitcoin/"
|
||||||
sudo -u bitcoin mkdir -p /home/bitcoin/.lightning/bitcoin/
|
sudo -u bitcoin mkdir -p /home/bitcoin/.lightning/bitcoin/
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -205,7 +206,7 @@ if [ "$1" = "new" ] || [ "$1" = "new-force" ] || [ "$1" = "seed" ] || [ "$1" = "
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$1" = "new" ]; then
|
if [ "$1" = "new" ]; then
|
||||||
seedPassword="$3"
|
seedpassword="$3"
|
||||||
# get 24 words
|
# get 24 words
|
||||||
source <(python /home/admin/config.scripts/blitz.mnemonic.py generate)
|
source <(python /home/admin/config.scripts/blitz.mnemonic.py generate)
|
||||||
#TODO seedwords to cl.backup.sh seed-export-gui
|
#TODO seedwords to cl.backup.sh seed-export-gui
|
||||||
@ -244,7 +245,7 @@ seedwords6x4='${seedwords6x4}'
|
|||||||
(echo "0"; echo "${seedwords}"; echo) | sudo -u bitcoin lightning-hsmtool \
|
(echo "0"; echo "${seedwords}"; echo) | sudo -u bitcoin lightning-hsmtool \
|
||||||
"generatehsm" $hsmSecretPath 1>&2
|
"generatehsm" $hsmSecretPath 1>&2
|
||||||
else
|
else
|
||||||
# pass to 'hsmtool generatehsm hsm_secret' - confirm seedPassword
|
# pass to 'hsmtool generatehsm hsm_secret' - confirm seedpassword
|
||||||
(echo "0"; echo "${seedwords}"; echo "$seedpassword"; echo "$seedpassword")\
|
(echo "0"; echo "${seedwords}"; echo "$seedpassword"; echo "$seedpassword")\
|
||||||
| sudo -u bitcoin lightning-hsmtool "generatehsm" $hsmSecretPath 1>&2
|
| sudo -u bitcoin lightning-hsmtool "generatehsm" $hsmSecretPath 1>&2
|
||||||
fi
|
fi
|
||||||
|
@ -124,8 +124,10 @@ if [ "$2" = "info" ]; then
|
|||||||
# sudo /usr/local/bin/lightning-cli --lightning-dir=/home/bitcoin/.lightning --conf=/home/bitcoin/.lightning/config getinfo
|
# sudo /usr/local/bin/lightning-cli --lightning-dir=/home/bitcoin/.lightning --conf=/home/bitcoin/.lightning/config getinfo
|
||||||
|
|
||||||
# get data
|
# get data
|
||||||
ln_getInfo=$($lightningcli_alias getinfo 2>/dev/null)
|
command="sudo -u bitcoin $lightningcli_alias getinfo"
|
||||||
|
ln_getInfo=$(${command} 2>/dev/null)
|
||||||
if [ "${ln_getInfo}" == "" ]; then
|
if [ "${ln_getInfo}" == "" ]; then
|
||||||
|
echo "command='${command}'"
|
||||||
echo "error='no data'"
|
echo "error='no data'"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@ -167,6 +169,17 @@ if [ "$2" = "info" ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# recovery info
|
||||||
|
source <(/home/admin/config.scripts/cl.backup.sh $1 recoverymode status)
|
||||||
|
cl_recovery_mode="${recoverymode}"
|
||||||
|
cl_recovery_done="0"
|
||||||
|
if [ "${cl_recovery_mode}" == "1" ]; then
|
||||||
|
scanning=$(echo "${ln_getInfo}" | grep "warning_lightningd_sync" | grep "Still loading latest blocks from bitcoind." -c)
|
||||||
|
if [ "${cl_recovery_mode}" == "1" ] && [ "${scanning}" == "0" ] && [ "${cl_sync_chain}" == "1" ]; then
|
||||||
|
cl_recovery_done="1"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# print data
|
# print data
|
||||||
echo "ln_cl_alias='${cl_alias}'"
|
echo "ln_cl_alias='${cl_alias}'"
|
||||||
echo "ln_cl_address='${cl_address}'"
|
echo "ln_cl_address='${cl_address}'"
|
||||||
@ -179,6 +192,8 @@ if [ "$2" = "info" ]; then
|
|||||||
echo "ln_cl_channels_inactive='${cl_channels_inactive}'"
|
echo "ln_cl_channels_inactive='${cl_channels_inactive}'"
|
||||||
echo "ln_cl_channels_total='${cl_channels_total}'"
|
echo "ln_cl_channels_total='${cl_channels_total}'"
|
||||||
echo "ln_cl_fees_total='${cl_fees_collected_msat//[^0-9.]/}'"
|
echo "ln_cl_fees_total='${cl_fees_collected_msat//[^0-9.]/}'"
|
||||||
|
echo "ln_cl_recovery_mode='${cl_recovery_mode}'"
|
||||||
|
echo "ln_cl_recovery_done='${cl_recovery_done}'"
|
||||||
exit 0
|
exit 0
|
||||||
|
|
||||||
fi
|
fi
|
||||||
@ -193,8 +208,11 @@ if [ "$2" = "wallet" ]; then
|
|||||||
# /usr/local/bin/lightning-cli --lightning-dir=/home/bitcoin/.lightning --conf=/home/bitcoin/.lightning/config listfunds
|
# /usr/local/bin/lightning-cli --lightning-dir=/home/bitcoin/.lightning --conf=/home/bitcoin/.lightning/config listfunds
|
||||||
|
|
||||||
# get data
|
# get data
|
||||||
cl_listfunds=$($lightningcli_alias listfunds 2>/dev/null)
|
sudo -u bitcoin
|
||||||
|
command="sudo -u bitcoin $lightningcli_alias listfunds"
|
||||||
|
cl_listfunds=$(${command} 2>/dev/null)
|
||||||
if [ "${cl_listfunds}" == "" ]; then
|
if [ "${cl_listfunds}" == "" ]; then
|
||||||
|
echo "command='${command}'"
|
||||||
echo "error='no data'"
|
echo "error='no data'"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
@ -21,10 +21,110 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then
|
|||||||
echo "# ---------------------------------------------------"
|
echo "# ---------------------------------------------------"
|
||||||
echo "# lnd.backup.sh seed-export-gui [lndseeddata]"
|
echo "# lnd.backup.sh seed-export-gui [lndseeddata]"
|
||||||
echo "# lnd.backup.sh seed-import-gui [resultfile]"
|
echo "# lnd.backup.sh seed-import-gui [resultfile]"
|
||||||
|
echo "# ---------------------------------------------------"
|
||||||
|
echo "# RECOVERY"
|
||||||
|
echo "# ---------------------------------------------------"
|
||||||
|
echo "# lnd.backup.sh [mainnet|signet|testnet] recoverymode [on|off|status]"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 1st PRAMETER action
|
# 1st PARAMETER [mainnet|signet|testnet]
|
||||||
|
if [ "$1" == "mainnet" ] || [ "$1" == "testnet" ] || [ "$1" == "signet" ]; then
|
||||||
|
|
||||||
|
# prepare all chain dependent variables
|
||||||
|
lndChain="$1"
|
||||||
|
mode="$2"
|
||||||
|
netprefix=""
|
||||||
|
if [ "${lndChain}" == "testnet" ]; then
|
||||||
|
netprefix="t"
|
||||||
|
fi
|
||||||
|
if [ "${lndChain}" == "signet" ]; then
|
||||||
|
netprefix="s"
|
||||||
|
fi
|
||||||
|
|
||||||
|
################################
|
||||||
|
# RECOVERY
|
||||||
|
################################
|
||||||
|
|
||||||
|
# LND is considered in "recoverymode" when it gets started with --reset-wallet-transactions parameter
|
||||||
|
# so it will forgets all the old on-chain transactions. This will trigger wallet unlock with
|
||||||
|
# recovery window to rescan for transactions and background process will monitor when finished
|
||||||
|
|
||||||
|
if [ ${mode} = "recoverymode" ]; then
|
||||||
|
|
||||||
|
# check if started with sudo
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
echo "error='run as root'"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# status
|
||||||
|
recoverymodeStatus=$(cat /mnt/hdd/lnd/${netprefix}lnd.conf | grep -c "^reset-wallet-transactions=true")
|
||||||
|
if [ "$3" == "status" ]; then
|
||||||
|
if [ ${recoverymodeStatus} -gt 0 ]; then
|
||||||
|
echo "recoverymode=1"
|
||||||
|
else
|
||||||
|
echo "recoverymode=0"
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# on
|
||||||
|
if [ "$3" == "on" ]; then
|
||||||
|
if [ ${recoverymodeStatus} -gt 0 ]; then
|
||||||
|
echo "# recoverymode already on"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# make sure config entry exits
|
||||||
|
entryExists=$(cat /mnt/hdd/lnd/${netprefix}lnd.conf | grep -c "^reset-wallet-transactions=")
|
||||||
|
if [ $entryExists -eq 0 ]; then
|
||||||
|
# find section
|
||||||
|
sectionLine=$(cat /mnt/hdd/lnd/${netprefix}lnd.conf | grep -n "^\[Application Options\]" | cut -d ":" -f1)
|
||||||
|
insertLine=$(expr $sectionLine + 1)
|
||||||
|
sed -i "${insertLine}ireset-wallet-transactions=false" /mnt/hdd/lnd/${netprefix}lnd.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
# activate reset-wallet-transactions in lnd.conf
|
||||||
|
echo "# activating recovery mode ..."
|
||||||
|
sed -i 's/^reset-wallet-transactions=.*/reset-wallet-transactions=true/g' /mnt/hdd/lnd/${netprefix}lnd.conf
|
||||||
|
echo "# OK - restart/reboot needed for: ${netprefix}lnd.service"
|
||||||
|
|
||||||
|
# set system status
|
||||||
|
/home/admin/config.scripts/blitz.conf.sh set ln_lnd_${lndChain}_sync_initial_done 0 /home/admin/raspiblitz.info
|
||||||
|
source <(/home/admin/_cache.sh get chain lightning)
|
||||||
|
if [ "${lndChain}" == "${chain}net" ] && [ "${lightning}" == "lnd" ]; then
|
||||||
|
/home/admin/_cache.sh set ln_default_sync_initial_done 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# off
|
||||||
|
if [ "$3" == "off" ]; then
|
||||||
|
if [ ${recoverymodeStatus} -eq 0 ]; then
|
||||||
|
echo "# recoverymode already off"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# remove --reset-wallet-transactions parameter in systemd service
|
||||||
|
echo "# deactivating recovery mode ..."
|
||||||
|
sed -i 's/^reset-wallet-transactions=.*/reset-wallet-transactions=false/g' /mnt/hdd/lnd/${netprefix}lnd.conf
|
||||||
|
|
||||||
|
|
||||||
|
echo "# OK - restart/reboot needed for: ${netprefix}lnd.service"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# parameter fallback
|
||||||
|
echo "error='unknown parameter'"
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 1st PARAMETER all other: action
|
||||||
mode="$1"
|
mode="$1"
|
||||||
|
|
||||||
################################
|
################################
|
||||||
@ -392,7 +492,7 @@ if [ ${mode} = "scb-import-gui" ]; then
|
|||||||
echo "To make upload open a new terminal and change,"
|
echo "To make upload open a new terminal and change,"
|
||||||
echo "into the directory where your lnd-rescue file is and"
|
echo "into the directory where your lnd-rescue file is and"
|
||||||
echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:"
|
echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:"
|
||||||
echo "scp ./*.backup ${defaultUploadUser}@${localip}:${defaultUploadPath}/"
|
echo "scp ./channel.backup ${defaultUploadUser}@${localip}:${defaultUploadPath}/"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Use ${passwordInfo} to authenticate file transfer."
|
echo "Use ${passwordInfo} to authenticate file transfer."
|
||||||
echo "PRESS ENTER when upload is done."
|
echo "PRESS ENTER when upload is done."
|
||||||
@ -435,19 +535,13 @@ if [ ${mode} = "scb-import-gui" ]; then
|
|||||||
|
|
||||||
# in setup scenario the final import is happening during provison
|
# in setup scenario the final import is happening during provison
|
||||||
if [ "${scenario}" == "setup" ]; then
|
if [ "${scenario}" == "setup" ]; then
|
||||||
# just add staticchannelbackup filename to give file
|
|
||||||
echo "# result in: ${RESULTFILE} (remember to make clean delete once processed)"
|
echo "# result in: ${RESULTFILE} (remember to make clean delete once processed)"
|
||||||
echo "staticchannelbackup='${filename}'" >> $RESULTFILE
|
echo "staticchannelbackup='${filename}'" >> $RESULTFILE
|
||||||
exit 0
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# run import process
|
# run import process
|
||||||
echo "OK importing channel.backup file ..."
|
|
||||||
source <(sudo /home/admin/config.scripts/lnd.backup.sh scb-import "${filename}")
|
source <(sudo /home/admin/config.scripts/lnd.backup.sh scb-import "${filename}")
|
||||||
|
echo "# DONE - placed SCB file at /home/admin/channel.backup"
|
||||||
# give final info
|
|
||||||
echo "DONE - placed SCB file at /home/admin/channel.backup"
|
|
||||||
echo "Reboot and login to trigger import."
|
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -3,13 +3,18 @@
|
|||||||
# command info
|
# command info
|
||||||
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "-help" ]; then
|
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "-help" ]; then
|
||||||
echo "# script to check LND states"
|
echo "# script to check LND states"
|
||||||
echo "# lnd.check.sh basic-setup"
|
echo "# lnd.check.sh basic-setup [mainnet|testnet|signet]"
|
||||||
echo "# lnd.check.sh prestart [mainnet|testnet|signet]"
|
echo "# lnd.check.sh prestart [mainnet|testnet|signet]"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# load raspiblitz conf
|
# load raspiblitz conf
|
||||||
source /mnt/hdd/raspiblitz.conf
|
source /mnt/hdd/raspiblitz.conf
|
||||||
|
source <(/home/admin/config.scripts/network.aliases.sh getvars lnd $2)
|
||||||
|
|
||||||
|
# config file
|
||||||
|
echo "# checking lnd config for ${targetchain}"
|
||||||
|
echo "# lndConfFile(${lndConfFile})"
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# PRESTART
|
# PRESTART
|
||||||
@ -56,33 +61,6 @@ if [ "$1" == "prestart" ]; then
|
|||||||
/home/admin/config.scripts/blitz.systemd.sh log lightning STARTED
|
/home/admin/config.scripts/blitz.systemd.sh log lightning STARTED
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# prefixes for parallel services
|
|
||||||
if [ "${targetchain}" = "mainnet" ];then
|
|
||||||
netprefix=""
|
|
||||||
portprefix=""
|
|
||||||
rpcportmod=0
|
|
||||||
zmqprefix=28
|
|
||||||
elif [ "${targetchain}" = "testnet" ];then
|
|
||||||
netprefix="t"
|
|
||||||
portprefix=1
|
|
||||||
rpcportmod=1
|
|
||||||
zmqprefix=21
|
|
||||||
elif [ "${targetchain}" = "signet" ];then
|
|
||||||
netprefix="s"
|
|
||||||
portprefix=3
|
|
||||||
rpcportmod=3
|
|
||||||
zmqprefix=23
|
|
||||||
else
|
|
||||||
echo "err='unvalid chain parameter on lnd.check.sh'"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# config file
|
|
||||||
echo "# checking lnd config for ${targetchain}"
|
|
||||||
lndConfFile="/mnt/hdd/lnd/${netprefix}lnd.conf"
|
|
||||||
echo "# lndConfFile(${lndConfFile})"
|
|
||||||
|
|
||||||
|
|
||||||
##### BITCOIN OPTIONS SECTION #####
|
##### BITCOIN OPTIONS SECTION #####
|
||||||
|
|
||||||
# [bitcoin]
|
# [bitcoin]
|
||||||
@ -185,7 +163,7 @@ if [ "$1" == "prestart" ]; then
|
|||||||
insertLine=$(expr $sectionLine + 1)
|
insertLine=$(expr $sectionLine + 1)
|
||||||
|
|
||||||
# make sure API ports are set to standard
|
# make sure API ports are set to standard
|
||||||
setting ${lndConfFile} ${insertLine} "rpclisten" "0\.0\.0\.0\:1${rpcportmod}009"
|
setting ${lndConfFile} ${insertLine} "rpclisten" "0\.0\.0\.0\:1${L2rpcportmod}009"
|
||||||
setting ${lndConfFile} ${insertLine} "restlisten" "0\.0\.0\.0\:${portprefix}8080"
|
setting ${lndConfFile} ${insertLine} "restlisten" "0\.0\.0\.0\:${portprefix}8080"
|
||||||
|
|
||||||
# enforce LND port is set correctly (if set in raspiblitz.conf)
|
# enforce LND port is set correctly (if set in raspiblitz.conf)
|
||||||
@ -293,30 +271,30 @@ elif [ "$1" == "basic-setup" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# check lnd.conf exists
|
# check lnd.conf exists
|
||||||
lndConfExists=$(sudo ls /mnt/hdd/lnd/lnd.conf 2>/dev/null | grep -c 'lnd.conf')
|
lndConfExists=$(sudo ls ${lndConfFile} 2>/dev/null | grep -c "${netprefix}lnd.conf")
|
||||||
if [ ${lndConfExists} -gt 0 ]; then
|
if [ ${lndConfExists} -gt 0 ]; then
|
||||||
echo "config=1"
|
echo "config=1"
|
||||||
else
|
else
|
||||||
echo "config=0"
|
echo "config=0"
|
||||||
echo "err='lnd.conf is missing in /mnt/hdd/lnd'"
|
echo "err='${netprefix}lnd.conf is missing in ${lndConfFile}'"
|
||||||
fi
|
fi
|
||||||
# check lnd.conf exits (on SD card for admin)
|
# check lnd.conf exits (on SD card for admin)
|
||||||
lndConfExists=$(sudo ls /home/admin/.lnd/lnd.conf 2>/dev/null | grep -c 'lnd.conf')
|
lndConfExists=$(sudo ls /home/admin/.lnd/${netprefix}lnd.conf 2>/dev/null | grep -c 'lnd.conf')
|
||||||
if [ ${lndConfExists} -gt 0 ]; then
|
if [ ${lndConfExists} -gt 0 ]; then
|
||||||
echo "configCopy=1"
|
echo "configCopy=1"
|
||||||
# check if the same
|
# check if the same
|
||||||
orgChecksum=$(sudo shasum -a 256 /mnt/hdd/lnd/lnd.conf 2>/dev/null | cut -d " " -f1)
|
orgChecksum=$(sudo shasum -a 256 ${lndConfFile} 2>/dev/null | cut -d " " -f1)
|
||||||
cpyChecksum=$(sudo shasum -a 256 /home/admin/.lnd/lnd.conf 2>/dev/null | cut -d " " -f1)
|
cpyChecksum=$(sudo shasum -a 256 /home/admin/.lnd/${netprefix}lnd.conf 2>/dev/null | cut -d " " -f1)
|
||||||
if [ "${orgChecksum}" == "${cpyChecksum}" ]; then
|
if [ "${orgChecksum}" == "${cpyChecksum}" ]; then
|
||||||
echo "configMismatch=0"
|
echo "configMismatch=0"
|
||||||
else
|
else
|
||||||
echo "configMismatch=1"
|
echo "configMismatch=1"
|
||||||
echo "err='lnd.conf for user admin is old'"
|
echo "err='${netprefix}lnd.conf for user admin is old'"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "configCopy=0"
|
echo "configCopy=0"
|
||||||
echo "configMismatch=0"
|
echo "configMismatch=0"
|
||||||
echo "err='lnd.conf is missing for user admin'"
|
echo "err='$(netprefix)lnd.conf is missing for user admin'"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# get network from config (BLOCKCHAIN)
|
# get network from config (BLOCKCHAIN)
|
||||||
@ -325,7 +303,7 @@ elif [ "$1" == "basic-setup" ]; then
|
|||||||
|
|
||||||
# check if network is same the raspiblitz config
|
# check if network is same the raspiblitz config
|
||||||
if [ "${network}" != "${lndNetwork}" ]; then
|
if [ "${network}" != "${lndNetwork}" ]; then
|
||||||
echo "err='lnd.conf: blockchain network in lnd.conf (${lndNetwork}) is different from raspiblitz.conf (${network})'"
|
echo "err='$(netprefix)lnd.conf: blockchain network in $(netprefix)lnd.conf (${lndNetwork}) is different from raspiblitz.conf (${network})'"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# # get chain from config (TESTNET / MAINNET)
|
# # get chain from config (TESTNET / MAINNET)
|
||||||
|
@ -10,6 +10,10 @@ fi
|
|||||||
echo "###########################################"
|
echo "###########################################"
|
||||||
echo "# lnd.compact.sh"
|
echo "# lnd.compact.sh"
|
||||||
|
|
||||||
|
if ! sudo ls /mnt/hdd/lnd/data/graph/mainnet/channel.db; then
|
||||||
|
echo "# /mnt/hdd/lnd/data/graph/mainnet/channel.db does not exist - exiting"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# check if HDD/SSD has enough space to run compaction (at least again the size as the channel.db at the moment)
|
# check if HDD/SSD has enough space to run compaction (at least again the size as the channel.db at the moment)
|
||||||
channelDBsizeKB=$(sudo ls -l --block-size=K /mnt/hdd/lnd/data/graph/mainnet/channel.db | cut -d " " -f5 | tr -dc '0-9')
|
channelDBsizeKB=$(sudo ls -l --block-size=K /mnt/hdd/lnd/data/graph/mainnet/channel.db | cut -d " " -f5 | tr -dc '0-9')
|
||||||
@ -45,6 +49,8 @@ echo
|
|||||||
echo "# Stop LND"
|
echo "# Stop LND"
|
||||||
sudo systemctl stop lnd
|
sudo systemctl stop lnd
|
||||||
|
|
||||||
|
sudo touch /home/admin/lnd.db.bolt.auto-compact.log
|
||||||
|
sudo chmod 777 /home/admin/lnd.db.bolt.auto-compact.log
|
||||||
echo "# Run LND with --db.bolt.auto-compact"
|
echo "# Run LND with --db.bolt.auto-compact"
|
||||||
sudo -u bitcoin /usr/local/bin/lnd --configfile=/home/bitcoin/.lnd/lnd.conf --db.bolt.auto-compact > /home/admin/lnd.db.bolt.auto-compact.log &
|
sudo -u bitcoin /usr/local/bin/lnd --configfile=/home/bitcoin/.lnd/lnd.conf --db.bolt.auto-compact > /home/admin/lnd.db.bolt.auto-compact.log &
|
||||||
|
|
||||||
|
@ -9,6 +9,8 @@ fi
|
|||||||
|
|
||||||
# load data from config
|
# load data from config
|
||||||
source /mnt/hdd/raspiblitz.conf
|
source /mnt/hdd/raspiblitz.conf
|
||||||
|
# shellcheck disable=SC2154 # gets the ${chain} from the raspiblitz.conf
|
||||||
|
source <(/home/admin/config.scripts/network.aliases.sh getvars lnd "${chain}net")
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# FUNCTIONS
|
# FUNCTIONS
|
||||||
@ -34,7 +36,7 @@ do
|
|||||||
local n=${1:-bitcoin} # the network (e.g. bitcoin) defaults to bitcoin
|
local n=${1:-bitcoin} # the network (e.g. bitcoin) defaults to bitcoin
|
||||||
local c=${2:-main} # the chain (e.g. main, test, sim, reg) defaults to main (for mainnet)
|
local c=${2:-main} # the chain (e.g. main, test, sim, reg) defaults to main (for mainnet)
|
||||||
if [ ! -f /mnt/hdd/app-data/lnd/data/chain/"${n}"/"${c}"net/"${macaroon}" ]; then
|
if [ ! -f /mnt/hdd/app-data/lnd/data/chain/"${n}"/"${c}"net/"${macaroon}" ]; then
|
||||||
missing=$(($missing + 1))
|
missing=$((missing + 1))
|
||||||
echo "# ${macaroon} is missing ($missing)"
|
echo "# ${macaroon} is missing ($missing)"
|
||||||
else
|
else
|
||||||
echo "# ${macaroon} is present"
|
echo "# ${macaroon} is present"
|
||||||
@ -77,6 +79,7 @@ if [ "$1" = "reset" ]; then
|
|||||||
echo "## Resetting Macaroons"
|
echo "## Resetting Macaroons"
|
||||||
echo "# all your macaroons get deleted and recreated"
|
echo "# all your macaroons get deleted and recreated"
|
||||||
cd || exit
|
cd || exit
|
||||||
|
# shellcheck disable=SC2154 # gets the ${network} from the raspiblitz.conf
|
||||||
sudo find /mnt/hdd/app-data/lnd/data/chain/"${network}"/"${chain}"net/ -iname '*.macaroon' -delete
|
sudo find /mnt/hdd/app-data/lnd/data/chain/"${network}"/"${chain}"net/ -iname '*.macaroon' -delete
|
||||||
sudo find /home/bitcoin/.lnd/data/chain/"${network}"/"${chain}"net/ -iname '*.macaroon' -delete
|
sudo find /home/bitcoin/.lnd/data/chain/"${network}"/"${chain}"net/ -iname '*.macaroon' -delete
|
||||||
if [ "${keepOldMacaroons}" != "1" ]; then
|
if [ "${keepOldMacaroons}" != "1" ]; then
|
||||||
@ -93,11 +96,12 @@ if [ "$1" = "reset" ]; then
|
|||||||
|
|
||||||
# unlock wallet after restart
|
# unlock wallet after restart
|
||||||
echo "# restarting LND ... wait 10 secs"
|
echo "# restarting LND ... wait 10 secs"
|
||||||
sudo systemctl start lnd
|
# shellcheck disable=SC2154
|
||||||
|
sudo systemctl start "${netprefix}lnd"
|
||||||
sleep 10
|
sleep 10
|
||||||
|
|
||||||
# unlock wallet after restart
|
# unlock wallet after restart
|
||||||
sudo /home/admin/config.scripts/lnd.unlock.sh
|
sudo /home/admin/config.scripts/lnd.unlock.sh "${CHAIN}"
|
||||||
sleep 10
|
sleep 10
|
||||||
|
|
||||||
if [ ${resetMacaroons} -eq 1 ]; then
|
if [ ${resetMacaroons} -eq 1 ]; then
|
||||||
@ -147,11 +151,11 @@ elif [ "$1" = "sync" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo "# make sure LND conf is readable and symlinked"
|
echo "# make sure LND conf is readable and symlinked"
|
||||||
sudo chmod 644 "/mnt/hdd/lnd/lnd.conf"
|
sudo chmod 644 "/mnt/hdd/lnd/${netprefix}lnd.conf"
|
||||||
sudo chown bitcoin:bitcoin "/mnt/hdd/lnd/lnd.conf"
|
sudo chown bitcoin:bitcoin "/mnt/hdd/lnd/${netprefix}lnd.conf"
|
||||||
if ! [[ -L "/mnt/hdd/app-data/lnd/lnd.conf" ]]; then
|
if ! [[ -L "/mnt/hdd/app-data/lnd/${netprefix}lnd.conf" ]]; then
|
||||||
sudo rm -rf "/mnt/hdd/app-data/lnd/lnd.conf" # not a symlink.. delete it silently
|
sudo rm -rf "/mnt/hdd/app-data/lnd/${netprefix}lnd.conf" # not a symlink.. delete it silently
|
||||||
sudo ln -s "/mnt/hdd/lnd/lnd.conf" "/mnt/hdd/app-data/lnd/lnd.conf" # and create symlink
|
sudo ln -s "/mnt/hdd/lnd/${netprefix}lnd.conf" "/mnt/hdd/app-data/lnd/${netprefix}lnd.conf" # and create symlink
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "# make sure TLS certificate is readable and symlinked"
|
echo "# make sure TLS certificate is readable and symlinked"
|
||||||
@ -166,9 +170,9 @@ elif [ "$1" = "sync" ]; then
|
|||||||
# Check Macaroons and fix missing
|
# Check Macaroons and fix missing
|
||||||
###########################
|
###########################
|
||||||
elif [ "$1" = "check" ]; then
|
elif [ "$1" = "check" ]; then
|
||||||
check_macaroons ${network} ${chain}
|
check_macaroons "${network}" "${chain}"
|
||||||
if [ $missing -gt 0 ]; then
|
if [ $missing -gt 0 ]; then
|
||||||
/home/admin/config.scrips/lnd.creds.sh reset keepold
|
/home/admin/config.scrips/lnd.credentials.sh reset keepold
|
||||||
fi
|
fi
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
|
@ -89,12 +89,14 @@ def new(stub, wallet_password="", seed_entropy=None):
|
|||||||
print("err='InitWallet'")
|
print("err='InitWallet'")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
# init wallet with recovery_window=0 (to not trigger rescan)
|
||||||
|
# but make sure to put lnd into recovery mode with lnd.backup.sh
|
||||||
|
# script after that
|
||||||
def seed(stub, wallet_password="", seed_words="", seed_password=""):
|
def seed(stub, wallet_password="", seed_words="", seed_password=""):
|
||||||
request = lnrpc.InitWalletRequest(
|
request = lnrpc.InitWalletRequest(
|
||||||
wallet_password=wallet_password.encode(),
|
wallet_password=wallet_password.encode(),
|
||||||
cipher_seed_mnemonic=[x.encode() for x in seed_words],
|
cipher_seed_mnemonic=[x.encode() for x in seed_words],
|
||||||
recovery_window=5000,
|
recovery_window=0,
|
||||||
aezeed_passphrase=seed_password.encode()
|
aezeed_passphrase=seed_password.encode()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -233,8 +233,8 @@ source /mnt/hdd/raspiblitz.conf
|
|||||||
|
|
||||||
function removeParallelService() {
|
function removeParallelService() {
|
||||||
if [ -f "/etc/systemd/system/${netprefix}lnd.service" ];then
|
if [ -f "/etc/systemd/system/${netprefix}lnd.service" ];then
|
||||||
sudo -u bitcoin /usr/local/bin/lncli\
|
echo "# Stopping ${netprefix}lnd ..."
|
||||||
--rpcserver localhost:1${rpcportmod}009 stop
|
#sudo -u bitcoin /usr/local/bin/lncli --rpcserver localhost:1${rpcportmod}009 stop
|
||||||
sudo systemctl stop ${netprefix}lnd
|
sudo systemctl stop ${netprefix}lnd
|
||||||
sudo systemctl disable ${netprefix}lnd
|
sudo systemctl disable ${netprefix}lnd
|
||||||
sudo rm /etc/systemd/system/${netprefix}lnd.service 2>/dev/null
|
sudo rm /etc/systemd/system/${netprefix}lnd.service 2>/dev/null
|
||||||
@ -446,10 +446,12 @@ alias ${netprefix}lndconf=\"sudo nano /home/bitcoin/.lnd/${netprefix}lnd.conf\"\
|
|||||||
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}lnd "on"
|
/home/admin/config.scripts/blitz.conf.sh set ${netprefix}lnd "on"
|
||||||
|
|
||||||
# if this is the first lightning mainnet turned on - make default
|
# if this is the first lightning mainnet turned on - make default
|
||||||
if [ "${CHAIN}" == "mainnet" ] && [ "${lightning}" == "" ]; then
|
if [ "${CHAIN}" == "mainnet" ]; then
|
||||||
|
if [ "${lightning}" == "" ] || [ "${lightning}" == "none" ]; then
|
||||||
echo "# LND is now default lighthning implementation"
|
echo "# LND is now default lighthning implementation"
|
||||||
/home/admin/config.scripts/blitz.conf.sh set lightning "lnd"
|
/home/admin/config.scripts/blitz.conf.sh set lightning "lnd"
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
@ -26,10 +26,10 @@ if [ "$1" == "mainnet" ]; then
|
|||||||
lndcli_alias="/usr/local/bin/lncli -n=mainnet --rpcserver=localhost:10009 --macaroonpath=${lndHomeDir}/data/chain/bitcoin/mainnet/readonly.macaroon --tlscertpath=${lndHomeDir}/tls.cert"
|
lndcli_alias="/usr/local/bin/lncli -n=mainnet --rpcserver=localhost:10009 --macaroonpath=${lndHomeDir}/data/chain/bitcoin/mainnet/readonly.macaroon --tlscertpath=${lndHomeDir}/tls.cert"
|
||||||
netprefix=""
|
netprefix=""
|
||||||
elif [ "$1" == "testnet" ]; then
|
elif [ "$1" == "testnet" ]; then
|
||||||
lndcli_alias="/usr/local/bin/lncli -n=mainnet --rpcserver=localhost:11009 --macaroonpath=${lndHomeDir}/data/chain/bitcoin/testnet/readonly.macaroon --tlscertpath=${lndHomeDir}/tls.cert"
|
lndcli_alias="/usr/local/bin/lncli -n=testnet --rpcserver=localhost:11009 --macaroonpath=${lndHomeDir}/data/chain/bitcoin/testnet/readonly.macaroon --tlscertpath=${lndHomeDir}/tls.cert"
|
||||||
netprefix="t"
|
netprefix="t"
|
||||||
elif [ "$1" == "signet" ]; then
|
elif [ "$1" == "signet" ]; then
|
||||||
lndcli_alias="/usr/local/bin/lncli -n=mainnet --rpcserver=localhost:13009 --macaroonpath=${lndHomeDir}/data/chain/bitcoin/signet/readonly.macaroon --tlscertpath=${lndHomeDir}/tls.cert"
|
lndcli_alias="/usr/local/bin/lncli -n=signet --rpcserver=localhost:13009 --macaroonpath=${lndHomeDir}/data/chain/bitcoin/signet/readonly.macaroon --tlscertpath=${lndHomeDir}/tls.cert"
|
||||||
netprefix="s"
|
netprefix="s"
|
||||||
else
|
else
|
||||||
echo "error='not supported net'"
|
echo "error='not supported net'"
|
||||||
@ -141,6 +141,7 @@ if [ "$2" = "info" ]; then
|
|||||||
# get data
|
# get data
|
||||||
ln_getInfo=$($lndcli_alias getinfo 2>/dev/null)
|
ln_getInfo=$($lndcli_alias getinfo 2>/dev/null)
|
||||||
if [ "${ln_getInfo}" == "" ]; then
|
if [ "${ln_getInfo}" == "" ]; then
|
||||||
|
echo "command='$lndcli_alias getinfo'"
|
||||||
echo "error='no data'"
|
echo "error='no data'"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@ -156,7 +157,7 @@ if [ "$2" = "info" ]; then
|
|||||||
lnd_channels_total=$(( lnd_channels_pending + lnd_channels_active + lnd_channels_inactive ))
|
lnd_channels_total=$(( lnd_channels_pending + lnd_channels_active + lnd_channels_inactive ))
|
||||||
lnd_peers=$(echo "${ln_getInfo}" | jq -r '.num_peers')
|
lnd_peers=$(echo "${ln_getInfo}" | jq -r '.num_peers')
|
||||||
|
|
||||||
# calaculate the sync/scan progress
|
# calculate the sync/scan progress
|
||||||
lnd_sync_progress=""
|
lnd_sync_progress=""
|
||||||
scanTimestamp=$(echo "${ln_getInfo}" | jq -r '.best_header_timestamp')
|
scanTimestamp=$(echo "${ln_getInfo}" | jq -r '.best_header_timestamp')
|
||||||
nowTimestamp=$(date +%s)
|
nowTimestamp=$(date +%s)
|
||||||
@ -175,6 +176,19 @@ if [ "$2" = "info" ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# recovery info
|
||||||
|
source <(/home/admin/config.scripts/lnd.backup.sh $1 recoverymode status)
|
||||||
|
lnd_recovery_mode="${recoverymode}"
|
||||||
|
lnd_recovery_done="0"
|
||||||
|
if [ "${lnd_recovery_mode}" == "1" ]; then
|
||||||
|
ln_getrecoveryinfo=$($lndcli_alias getrecoveryinfo 2>/dev/null)
|
||||||
|
activated=$(echo "${ln_getrecoveryinfo}" | grep "recovery_mode" | grep "true" -c)
|
||||||
|
finished=$(echo "${ln_getrecoveryinfo}" | grep "recovery_finished" | grep "true" -c)
|
||||||
|
if [ "${activated}" == "1" ] && [ "${finished}" == "1" ]; then
|
||||||
|
lnd_recovery_done="1"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# print data
|
# print data
|
||||||
echo "ln_lnd_address='${lnd_address}'"
|
echo "ln_lnd_address='${lnd_address}'"
|
||||||
echo "ln_lnd_tor='${lnd_tor}'"
|
echo "ln_lnd_tor='${lnd_tor}'"
|
||||||
@ -186,6 +200,8 @@ if [ "$2" = "info" ]; then
|
|||||||
echo "ln_lnd_channels_inactive='${lnd_channels_inactive}'"
|
echo "ln_lnd_channels_inactive='${lnd_channels_inactive}'"
|
||||||
echo "ln_lnd_channels_total='${lnd_channels_total}'"
|
echo "ln_lnd_channels_total='${lnd_channels_total}'"
|
||||||
echo "ln_lnd_peers='${lnd_peers}'"
|
echo "ln_lnd_peers='${lnd_peers}'"
|
||||||
|
echo "ln_lnd_recovery_mode='${lnd_recovery_mode}'"
|
||||||
|
echo "ln_lnd_recovery_done='${lnd_recovery_done}'"
|
||||||
exit 0
|
exit 0
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
@ -43,9 +43,6 @@ if [ ${#newName} -eq 0 ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# lnd conf file
|
|
||||||
lndConfFile="/mnt/hdd/lnd/${netprefix}lnd.conf"
|
|
||||||
|
|
||||||
# check if lnd config file exists
|
# check if lnd config file exists
|
||||||
configExists=$(ls ${lndConfFile} | grep -c '.conf')
|
configExists=$(ls ${lndConfFile} | grep -c '.conf')
|
||||||
if [ ${configExists} -eq 0 ]; then
|
if [ ${configExists} -eq 0 ]; then
|
||||||
|
@ -21,9 +21,20 @@ passwordC="$2"
|
|||||||
# chain-unlock --> unlock with re-arranged parameters
|
# chain-unlock --> unlock with re-arranged parameters
|
||||||
CHAIN="${chain}net"
|
CHAIN="${chain}net"
|
||||||
if [ "${action}" == "chain-unlock" ]; then
|
if [ "${action}" == "chain-unlock" ]; then
|
||||||
action="unlock"
|
|
||||||
passwordC=""
|
|
||||||
CHAIN=$2
|
CHAIN=$2
|
||||||
|
if [ "${CHAIN}" == "mainnet" ]; then
|
||||||
|
chain="main"
|
||||||
|
elif [ "${CHAIN}" == "testnet" ]; then
|
||||||
|
chain="test"
|
||||||
|
passwordC=""
|
||||||
|
elif [ "${CHAIN}" == "signet" ]; then
|
||||||
|
chain="sig"
|
||||||
|
passwordC=""
|
||||||
|
else
|
||||||
|
echo "# unkown chain parameter: ${CHAIN}"
|
||||||
|
sleep 1
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# dont if state is on reboot or shutdown
|
# dont if state is on reboot or shutdown
|
||||||
@ -38,7 +49,7 @@ source <(/home/admin/config.scripts/network.aliases.sh getvars lnd ${chain}net)
|
|||||||
|
|
||||||
# check if wallet is already unlocked
|
# check if wallet is already unlocked
|
||||||
# echo "# checking LND wallet ... (can take some time)"
|
# echo "# checking LND wallet ... (can take some time)"
|
||||||
lndError=$(sudo -u bitcoin lncli --chain=${network} --network=${chain}net getinfo 2>&1)
|
lndError=$(${lncli_alias} getinfo 2>&1)
|
||||||
walletLocked=$(echo "${lndError}" | grep -c "Wallet is encrypted")
|
walletLocked=$(echo "${lndError}" | grep -c "Wallet is encrypted")
|
||||||
if [ "${walletLocked}" == "0" ]; then
|
if [ "${walletLocked}" == "0" ]; then
|
||||||
# test for new error message
|
# test for new error message
|
||||||
@ -55,22 +66,10 @@ fi
|
|||||||
|
|
||||||
# if already unlocked all is done
|
# if already unlocked all is done
|
||||||
if [ ${walletLocked} -eq 0 ] && [ ${macaroonsMissing} -eq 0 ]; then
|
if [ ${walletLocked} -eq 0 ] && [ ${macaroonsMissing} -eq 0 ]; then
|
||||||
# echo "# OK LND wallet was already unlocked"
|
echo "# OK LND wallet was already unlocked"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# check if LND is below 0.10 (has no STDIN password option)
|
|
||||||
fallback=0
|
|
||||||
source <(/home/admin/config.scripts/lnd.update.sh info)
|
|
||||||
if [ ${lndInstalledVersionMajor} -eq 0 ] && [ ${lndInstalledVersionMain} -lt 10 ]; then
|
|
||||||
if [ ${#passwordC} -gt 0 ]; then
|
|
||||||
echo "error='lnd version too old'"
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
fallback=1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# if no password check if stored for auto-unlock
|
# if no password check if stored for auto-unlock
|
||||||
if [ ${#passwordC} -eq 0 ]; then
|
if [ ${#passwordC} -eq 0 ]; then
|
||||||
autoUnlockExists=$(sudo ls /root/lnd.autounlock.pwd 2>/dev/null | grep -c "lnd.autounlock.pwd")
|
autoUnlockExists=$(sudo ls /root/lnd.autounlock.pwd 2>/dev/null | grep -c "lnd.autounlock.pwd")
|
||||||
@ -82,13 +81,14 @@ fi
|
|||||||
|
|
||||||
# if still no password get from user
|
# if still no password get from user
|
||||||
manualEntry=0
|
manualEntry=0
|
||||||
if [ ${#passwordC} -eq 0 ] && [ ${fallback} -eq 0 ]; then
|
if [ ${#passwordC} -eq 0 ]; then
|
||||||
echo "# manual input"
|
echo "# manual input"
|
||||||
manualEntry=1
|
manualEntry=1
|
||||||
passwordC=$(whiptail --passwordbox "\nEnter Password C to unlock wallet:\n" 9 52 "" --title " LND Wallet " --backtitle "RaspiBlitz" 3>&1 1>&2 2>&3)
|
passwordC=$(whiptail --passwordbox "\nEnter Password C to unlock wallet:\n" 9 52 "" --title " LND Wallet " --backtitle "RaspiBlitz" 3>&1 1>&2 2>&3)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
loopCount=0
|
loopCount=0
|
||||||
|
fallback=0
|
||||||
while [ ${fallback} -eq 0 ]
|
while [ ${fallback} -eq 0 ]
|
||||||
do
|
do
|
||||||
|
|
||||||
@ -96,7 +96,16 @@ while [ ${fallback} -eq 0 ]
|
|||||||
|
|
||||||
loopCount=$(($loopCount +1))
|
loopCount=$(($loopCount +1))
|
||||||
echo "# calling: lncli unlock"
|
echo "# calling: lncli unlock"
|
||||||
result=$(echo "$passwordC" | $lncli_alias unlock --recovery_window=1000 --stdin 2>&1)
|
|
||||||
|
|
||||||
|
# check if lnd is in recovery mode
|
||||||
|
source <(sudo /home/admin/config.scripts/lnd.backup.sh mainnet recoverymode status)
|
||||||
|
recoveryOption=""
|
||||||
|
if [ "${recoverymode}" == "1" ]; then
|
||||||
|
recoveryOption="--recovery_window=5000 "
|
||||||
|
echo "# running unlock with ${recoveryOption}"
|
||||||
|
fi
|
||||||
|
result=$(echo "$passwordC" | $lncli_alias unlock ${recoveryOption}--stdin 2>&1)
|
||||||
wasUnlocked=$(echo "${result}" | grep -c 'successfully unlocked')
|
wasUnlocked=$(echo "${result}" | grep -c 'successfully unlocked')
|
||||||
wrongPassword=$(echo "${result}" | grep -c 'invalid passphrase')
|
wrongPassword=$(echo "${result}" | grep -c 'invalid passphrase')
|
||||||
if [ ${wasUnlocked} -gt 0 ]; then
|
if [ ${wasUnlocked} -gt 0 ]; then
|
||||||
@ -162,7 +171,7 @@ do
|
|||||||
echo "############################"
|
echo "############################"
|
||||||
echo "Calling: ${netprefix}lncli unlock"
|
echo "Calling: ${netprefix}lncli unlock"
|
||||||
echo "Please re-enter Password C:"
|
echo "Please re-enter Password C:"
|
||||||
$lncli_alias unlock --recovery_window=1000
|
$lncli_alias unlock --recovery_window=5000
|
||||||
|
|
||||||
# test unlock
|
# test unlock
|
||||||
walletLocked=$($lncli_alias getinfo 2>&1 | grep -c unlock)
|
walletLocked=$($lncli_alias getinfo 2>&1 | grep -c unlock)
|
||||||
|
@ -40,7 +40,7 @@ if [ "$1" = getvars ];then
|
|||||||
chain=main
|
chain=main
|
||||||
fi
|
fi
|
||||||
# CHAIN is: signet | testnet | mainnet
|
# CHAIN is: signet | testnet | mainnet
|
||||||
if [ $# -gt 2 ]&&[ "$3" != net ];then
|
if [ $# -gt 2 ]&&[ "$3" != net ]&&[ "$3" != "" ];then
|
||||||
CHAIN=$3
|
CHAIN=$3
|
||||||
chain=${CHAIN::-3}
|
chain=${CHAIN::-3}
|
||||||
else
|
else
|
||||||
@ -52,25 +52,30 @@ if [ "$1" = getvars ];then
|
|||||||
# netprefix is: "" | t | s
|
# netprefix is: "" | t | s
|
||||||
# portprefix is: "" | 1 | 3
|
# portprefix is: "" | 1 | 3
|
||||||
# L2rpcportmod is: 0 | 1 | 3
|
# L2rpcportmod is: 0 | 1 | 3
|
||||||
|
# zmqprefix is: 28 | 21 | 23
|
||||||
if [ "${chain}" == "main" ];then
|
if [ "${chain}" == "main" ];then
|
||||||
netprefix=""
|
netprefix=""
|
||||||
L1rpcportmod=""
|
L1rpcportmod=""
|
||||||
L2rpcportmod=0
|
L2rpcportmod=0
|
||||||
portprefix=""
|
portprefix=""
|
||||||
|
zmqprefix=28
|
||||||
elif [ "${chain}" == "test" ];then
|
elif [ "${chain}" == "test" ];then
|
||||||
netprefix="t"
|
netprefix="t"
|
||||||
L1rpcportmod=1
|
L1rpcportmod=1
|
||||||
L2rpcportmod=1
|
L2rpcportmod=1
|
||||||
portprefix=1
|
portprefix=1
|
||||||
|
zmqprefix=21
|
||||||
elif [ "${chain}" == "sig" ];then
|
elif [ "${chain}" == "sig" ];then
|
||||||
netprefix="s"
|
netprefix="s"
|
||||||
L1rpcportmod=3
|
L1rpcportmod=3
|
||||||
L2rpcportmod=3
|
L2rpcportmod=3
|
||||||
portprefix=3
|
portprefix=3
|
||||||
|
zmqprefix=23
|
||||||
fi
|
fi
|
||||||
echo "netprefix=${netprefix}"
|
echo "netprefix=${netprefix}"
|
||||||
echo "portprefix=${portprefix}"
|
echo "portprefix=${portprefix}"
|
||||||
echo "L2rpcportmod=${L2rpcportmod}"
|
echo "L2rpcportmod=${L2rpcportmod}"
|
||||||
|
echo "zmqprefix=${zmqprefix}"
|
||||||
|
|
||||||
if [ "${LNTYPE}" == "cl" ];then
|
if [ "${LNTYPE}" == "cl" ];then
|
||||||
# CLNETWORK is: bitcoin / signet / testnet
|
# CLNETWORK is: bitcoin / signet / testnet
|
||||||
@ -96,8 +101,10 @@ if [ "$1" = getvars ];then
|
|||||||
# typeprefix is: "" | c
|
# typeprefix is: "" | c
|
||||||
if [ "${LNTYPE}" == "lnd" ];then
|
if [ "${LNTYPE}" == "lnd" ];then
|
||||||
typeprefix=''
|
typeprefix=''
|
||||||
|
lndConfFile="/mnt/hdd/lnd/${netprefix}lnd.conf"
|
||||||
fi
|
fi
|
||||||
echo "typeprefix=${typeprefix}"
|
echo "typeprefix=${typeprefix}"
|
||||||
|
echo "lndConfFile=${lndConfFile}"
|
||||||
|
|
||||||
# instead of all
|
# instead of all
|
||||||
# sudo -u bitcoin /usr/local/bin/lncli --chain=${network} --network=${chain}net
|
# sudo -u bitcoin /usr/local/bin/lncli --chain=${network} --network=${chain}net
|
||||||
|
@ -35,10 +35,7 @@ fi
|
|||||||
# BLOCKCHAIN INFO & OPTIONS
|
# BLOCKCHAIN INFO & OPTIONS
|
||||||
|
|
||||||
# get fresh data
|
# get fresh data
|
||||||
source <(/home/admin/_cache.sh get \n
|
source <(/home/admin/_cache.sh get btc_default_sync_percentage network)
|
||||||
btc_default_sync_percentage \n
|
|
||||||
network \n
|
|
||||||
)
|
|
||||||
syncProgressFull=$(echo "${btc_default_sync_percentage}" | cut -d "." -f1)
|
syncProgressFull=$(echo "${btc_default_sync_percentage}" | cut -d "." -f1)
|
||||||
if [ "${syncProgressFull}" != "" ] && [ "${network}" == "bitcoin" ] && [ ${syncProgressFull} -lt 75 ]; then
|
if [ "${syncProgressFull}" != "" ] && [ "${network}" == "bitcoin" ] && [ ${syncProgressFull} -lt 75 ]; then
|
||||||
|
|
||||||
@ -54,54 +51,6 @@ if [ "${syncProgressFull}" != "" ] && [ "${network}" == "bitcoin" ] && [ ${syncP
|
|||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
############# 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}" == "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 "# 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"
|
|
||||||
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
|
|
||||||
|
|
||||||
############################################
|
############################################
|
||||||
# SETUP DONE CONFIRMATION (Konfetti Moment)
|
# SETUP DONE CONFIRMATION (Konfetti Moment)
|
||||||
|
|
||||||
|
@ -167,7 +167,8 @@ if [ ${uploadSCB} -eq 1 ]; then
|
|||||||
/home/admin/config.scripts/lnd.backup.sh scb-import-gui setup $_temp
|
/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 2>/dev/null
|
sudo rm $_temp 2>/dev/null
|
||||||
|
sleep 2
|
||||||
|
x
|
||||||
# if user canceled the upload
|
# if user canceled the upload
|
||||||
if [ "${staticchannelbackup}" == "" ]; then
|
if [ "${staticchannelbackup}" == "" ]; then
|
||||||
# signal cancel to the calling script by exit code (5 = exit on scb)
|
# signal cancel to the calling script by exit code (5 = exit on scb)
|
||||||
|
@ -46,6 +46,7 @@ source <(/home/admin/_cache.sh get \
|
|||||||
lightning \
|
lightning \
|
||||||
ln_default_ready \
|
ln_default_ready \
|
||||||
ln_default_sync_progress \
|
ln_default_sync_progress \
|
||||||
|
ln_default_recovery_mode \
|
||||||
system_count_start_lightning \
|
system_count_start_lightning \
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -61,6 +62,8 @@ if [ "${lightning}" != "" ] && [ "${ln_default_sync_progress}" == "" ]; then
|
|||||||
else
|
else
|
||||||
scanProgress="waiting"
|
scanProgress="waiting"
|
||||||
fi
|
fi
|
||||||
|
elif [ "${ln_default_sync_progress}" == "100.00" ] && [ "${ln_default_recovery_mode}" == "1" ]; then
|
||||||
|
scanProgress="recoverscan"
|
||||||
elif [ ${#ln_default_sync_progress} -lt 6 ]; then
|
elif [ ${#ln_default_sync_progress} -lt 6 ]; then
|
||||||
scanProgress=" ${ln_default_sync_progress} %"
|
scanProgress=" ${ln_default_sync_progress} %"
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user