diff --git a/cyphernodeconf_docker/prompters/900_bitcoin.js b/cyphernodeconf_docker/prompters/900_bitcoin.js index 4dc2a44..a6817ea 100644 --- a/cyphernodeconf_docker/prompters/900_bitcoin.js +++ b/cyphernodeconf_docker/prompters/900_bitcoin.js @@ -104,6 +104,6 @@ module.exports = { return 'VAR0=VALUE0\nVAR1=VALUE1' }, templates: function( props ) { - return ['bitcoin.conf', 'bitcoin-client.conf'] + return ['bitcoin.conf', 'bitcoin-client.conf', 'entrypoint.sh', 'createWallets.sh']; } }; \ No newline at end of file diff --git a/cyphernodeconf_docker/run.sh b/cyphernodeconf_docker/run.sh index bf1c1ae..fa84318 100755 --- a/cyphernodeconf_docker/run.sh +++ b/cyphernodeconf_docker/run.sh @@ -6,7 +6,7 @@ export DEFAULT_CERT_HOSTNAME=disk0book.local export PROXYCRON_VERSION=v0.6.0-dev export PYCOIN_VERSION=v0.6.0-dev export SETUP_VERSION=v0.6.0-dev -export BITCOIN_VERSION=v0.20.1 +export BITCOIN_VERSION=v0.21.0 export LIGHTNING_VERSION=v0.9.1 export DEFAULT_DATADIR_BASE=$HOME export GATEKEEPER_VERSION=v0.6.0-dev diff --git a/cyphernodeconf_docker/templates/bitcoin/createWallets.sh b/cyphernodeconf_docker/templates/bitcoin/createWallets.sh new file mode 100755 index 0000000..699d293 --- /dev/null +++ b/cyphernodeconf_docker/templates/bitcoin/createWallets.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +BITCOIN_CLI='bitcoin-cli' + +<% if( net === 'regtest' ) { %> +BITCOIN_CLI="$BITCOIN_CLI -regtest" +<% } %> + +while [ ! -f "/container_monitor/bitcoin_ready" ]; do echo "CYPHERNODE: bitcoind not ready" ; sleep 10 ; done + +echo "CYPHERNODE: bitcoind is ready" + +# Check for the basic wallets. If not present, create. +BASIC_WALLETS='"watching01.dat" "xpubwatching01.dat" "spending01.dat"' + +CURRENT_WALLETS=`$BITCOIN_CLI listwallets` + +for wallet in $BASIC_WALLETS +do + echo "CYPHERNODE: Checking wallet [$wallet]" + echo "$CURRENT_WALLETS" | grep -F $wallet > /dev/null 2>&1 + + if [ "$?" -ne "0" ]; then + walletNameNoQuote=`echo $wallet | tr -d '"'` + $BITCOIN_CLI createwallet ${walletNameNoQuote} && echo "CYPHERNODE: new wallet created : [$walletNameNoQuote]" + else + echo "CYPHERNODE: Wallet [$wallet] found" + fi +done \ No newline at end of file diff --git a/cyphernodeconf_docker/templates/bitcoin/entrypoint.sh b/cyphernodeconf_docker/templates/bitcoin/entrypoint.sh new file mode 100755 index 0000000..f961a7e --- /dev/null +++ b/cyphernodeconf_docker/templates/bitcoin/entrypoint.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +rm -f /container_monitor/bitcoin_ready + +<% if ( features.indexOf('tor') !== -1 && torifyables && torifyables.indexOf('tor_bitcoin') !== -1 ) { %> +while [ ! -f "/container_monitor/tor_ready" ]; +do + echo "CYPHERNODE: Waiting for Tor to be ready before starting bitcoind" + sleep 10 +done +echo "CYPHERNODE: Tor is ready - Starting bitcoind" +<% } %> + +# Create default wallets if they are not loaded +/.bitcoin/createWallets.sh & + +exec bitcoind diff --git a/cyphernodeconf_docker/templates/installer/docker/docker-compose.yaml b/cyphernodeconf_docker/templates/installer/docker/docker-compose.yaml index 280cee3..00b7c74 100644 --- a/cyphernodeconf_docker/templates/installer/docker/docker-compose.yaml +++ b/cyphernodeconf_docker/templates/installer/docker/docker-compose.yaml @@ -89,17 +89,14 @@ services: bitcoin: image: cyphernode/bitcoin:<%= bitcoin_version %> - <% if ( features.indexOf('tor') !== -1 && torifyables && torifyables.indexOf('tor_bitcoin') !== -1 ) { %> - command: $USER sh -c 'rm -f /container_monitor/bitcoin_ready ; while [ ! -f "/container_monitor/tor_ready" ]; do echo "tor not ready" ; sleep 10 ; done ; echo "tor ready" ; bitcoind' - <% } else { %> - command: $USER sh -c 'rm -f /container_monitor/bitcoin_ready ; bitcoind' - <% } %> + command: $USER /.bitcoin/entrypoint.sh <% if( bitcoin_expose ) { %> ports: - "<%= (net === 'regtest') ? '18444:18444' : ((net === 'testnet') ? '18333:18333' : '8333:8333') %>" <% } %> volumes: - "<%= bitcoin_datapath %>:/.bitcoin" + - "<%= bitcoin_datapath %>/createWallets.sh:/.bitcoin/createWallets.sh:ro" - container_monitor:/container_monitor healthcheck: test: chown $USER /container_monitor && su-exec $USER sh -c 'bitcoin-cli echo && touch /container_monitor/bitcoin_ready || rm -f /container_monitor/bitcoin_ready' diff --git a/cyphernodeconf_docker/templates/lightning/c-lightning/entrypoint.sh b/cyphernodeconf_docker/templates/lightning/c-lightning/entrypoint.sh index 4b0817a..37579e3 100755 --- a/cyphernodeconf_docker/templates/lightning/c-lightning/entrypoint.sh +++ b/cyphernodeconf_docker/templates/lightning/c-lightning/entrypoint.sh @@ -13,9 +13,9 @@ while [ -z "${TORIP}" ]; do echo "tor not ready" ; TORIP=$(getent hosts tor | aw #TORIP=$(getent hosts tor | awk '{ print $1 }') echo "tor ready at IP ${TORIP}" -lightningd --proxy=$TORIP:9050 +exec lightningd --proxy=$TORIP:9050 <% } else { %> -lightningd +exec lightningd <% } %> diff --git a/dist/setup.sh b/dist/setup.sh index 7c894a3..321a6a6 100755 --- a/dist/setup.sh +++ b/dist/setup.sh @@ -506,6 +506,20 @@ install_docker() { copy_file $cyphernodeconf_filepath/bitcoin/bitcoin-client.conf $BITCOIN_DATAPATH/bitcoin-client.conf 1 $SUDO_REQUIRED fi fi + + copy_file $cyphernodeconf_filepath/bitcoin/entrypoint.sh $BITCOIN_DATAPATH/entrypoint.sh 1 $SUDO_REQUIRED + copy_file $cyphernodeconf_filepath/bitcoin/createWallets.sh $BITCOIN_DATAPATH/createWallets.sh 1 $SUDO_REQUIRED + + if [[ ! -x $BITCOIN_DATAPATH/entrypoint.sh ]]; then + step " make entrypoint.sh executable" + sudo_if_required chmod +x $BITCOIN_DATAPATH/entrypoint.sh + next + fi + if [[ ! -x $BITCOIN_DATAPATH/createWallets.sh ]]; then + step " make createWallets.sh executable" + sudo_if_required chmod +x $BITCOIN_DATAPATH/createWallets.sh + next + fi fi if [[ $FEATURE_LIGHTNING == true ]]; then