132c67d414
It is better to replace bash shell with potentially long-running last script command. This way the running command will receive all potential unix process signals directly. A concrete example which motivated this change: Exec of btcd is needed for graceful shutdown of btcd during `docker-compose down`. Docker Compose properly sends this signal to our start-btcd.sh bash shell but it is not further signalled to the running btcd process. Docker Compose then kills whole container forcefully after some timeout. An alternative solution would be to trap SIGTERM in our bash script and forward it to running btcd. Which would be IMO ugly and error prone.
72 lines
1.7 KiB
Bash
Executable File
72 lines
1.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# exit from script if error was raised.
|
|
set -e
|
|
|
|
# error function is used within a bash function in order to send the error
|
|
# message directly to the stderr output and exit.
|
|
error() {
|
|
echo "$1" > /dev/stderr
|
|
exit 0
|
|
}
|
|
|
|
# return is used within bash function in order to return the value.
|
|
return() {
|
|
echo "$1"
|
|
}
|
|
|
|
# set_default function gives the ability to move the setting of default
|
|
# env variable from docker file to the script thereby giving the ability to the
|
|
# user override it durin container start.
|
|
set_default() {
|
|
# docker initialized env variables with blank string and we can't just
|
|
# use -z flag as usually.
|
|
BLANK_STRING='""'
|
|
|
|
VARIABLE="$1"
|
|
DEFAULT="$2"
|
|
|
|
if [[ -z "$VARIABLE" || "$VARIABLE" == "$BLANK_STRING" ]]; then
|
|
|
|
if [ -z "$DEFAULT" ]; then
|
|
error "You should specify default variable"
|
|
else
|
|
VARIABLE="$DEFAULT"
|
|
fi
|
|
fi
|
|
|
|
return "$VARIABLE"
|
|
}
|
|
|
|
# Set default variables if needed.
|
|
RPCUSER=$(set_default "$RPCUSER" "devuser")
|
|
RPCPASS=$(set_default "$RPCPASS" "devpass")
|
|
DEBUG=$(set_default "$DEBUG" "info")
|
|
NETWORK=$(set_default "$NETWORK" "simnet")
|
|
|
|
PARAMS=$(echo \
|
|
"--$NETWORK" \
|
|
"--debuglevel=$DEBUG" \
|
|
"--rpcuser=$RPCUSER" \
|
|
"--rpcpass=$RPCPASS" \
|
|
"--datadir=/data" \
|
|
"--logdir=/data" \
|
|
"--rpccert=/rpc/rpc.cert" \
|
|
"--rpckey=/rpc/rpc.key" \
|
|
"--rpclisten=0.0.0.0" \
|
|
"--txindex"
|
|
)
|
|
|
|
# Set the mining flag only if address is non empty.
|
|
if [[ -n "$MINING_ADDRESS" ]]; then
|
|
PARAMS="$PARAMS --miningaddr=$MINING_ADDRESS"
|
|
fi
|
|
|
|
# Add user parameters to command.
|
|
PARAMS="$PARAMS $@"
|
|
|
|
# Print command and start bitcoin node.
|
|
echo "Command: ltcd $PARAMS"
|
|
exec ltcd $PARAMS
|
|
|