Files
vim-ale/dashcore-utils/dashd-hd-service-install
2023-06-21 22:08:58 +00:00

177 lines
4.3 KiB
Bash

#!/bin/sh
set -e
set -u
fn_usage() { (
echo >&2 ""
echo >&2 "USAGE"
echo >&2 " dashd-hd-service-install [datadir] ['testnet']"
echo >&2 ""
echo >&2 "EXAMPLE"
echo >&2 " dashd-hd-service-install /mnt/vol_slc1_100g/dashcore/"
echo >&2 ""
echo >&2 "NOTE"
echo >&2 " If a directory matching '/mnt/*/dashcore/' is found,"
echo >&2 " it will be used automatically."
echo >&2 ""
); }
fn_datadir_help() { (
my_vol="${1:-}"
my_user="$(
id -n -u
)"
my_group="$(
id -n -g
)"
echo >&2 ""
echo >&2 "ERROR"
echo >&2 " '${my_vol}' is not writable"
echo >&2 ""
echo >&2 "SOLUTION"
echo >&2 " 1. Mount a large (50gb+) volume"
echo >&2 ""
echo >&2 " sudo mkdir -p /mnt/EXAMPLE"
echo >&2 " sudo mount /dev/sdx1 /mnt/EXAMPLE"
echo >&2 ""
echo >&2 " 2. Create a 'dashcore' inside of it"
echo >&2 ""
echo >&2 " sudo mkdir -p '${my_vol}'"
echo >&2 ""
echo >&2 " 3. Make it writable to this user"
echo >&2 ""
echo >&2 " sudo chown -R '${my_user}':'${my_group}' '${my_vol}'"
echo >&2 ""
echo >&2 ""
); }
fn_srv_install() { (
my_vol="${1:-}"
my_netname="${2:-}"
my_name='dashd'
# both of these will get '/testnet3' suffixes with -testnet
my_datadir="${my_vol}/_data"
my_blocksdir="${my_vol}/_caches"
if test -n "${my_netname}"; then
if test "mainnet" = "${my_netname}"; then
my_netname=""
elif test "testnet" != "${my_netname}"; then
fn_usage
return 1
fi
fi
if ! test -d "${my_datadir}"; then
mkdir "${my_datadir}"
chmod 0700 "${my_datadir}"
fi
if ! test -d "${my_blocksdir}"; then
mkdir -p "${my_blocksdir}"
chmod 0700 "${my_blocksdir}"
fi
my_net_flag=''
if test -n "${my_netname}"; then
# ex: -testnet
my_net_flag="-${my_netname}"
# ex: dashd-testnet
my_name="dashd-${my_netname}"
fi
my_system_args=""
my_kernel="$(
uname -s
)"
if test "Darwin" != "${my_kernel}"; then
my_user="$(
id -u -n
)"
my_system_args="--system --username ${my_user}"
fi
# shellcheck disable=SC2016,SC1090
echo 'sudo env PATH="$PATH"' \
"serviceman add ${my_system_args} --path \"\$PATH\" --name \"${my_name}\" --force --" \
"dashd " \
"${my_net_flag}" \
-usehd \
'-conf="$HOME/.dashcore/dash.conf"' \
'-settings="$HOME/.dashcore/settings.json"' \
'-walletdir="$HOME/.dashcore/wallets/"' \
"-datadir=\"${my_datadir}\"" \
"-blocksdir=\"${my_blocksdir}\""
if ! command -v serviceman > /dev/null; then
echo ""
echo "Installing 'serviceman'..."
echo ""
{
curl -fsSL "${WEBI_HOST}/serviceman" | sh
} > /dev/null
# shellcheck disable=SC1090
. ~/.config/envman/PATH.env || true
fi
mkdir -p "$HOME/.dashcore/wallets/"
chmod 0700 "$HOME/.dashcore/wallets/"
mkdir -p "${my_datadir}"
chmod 0700 "${my_datadir}"
mkdir -p "${my_blocksdir}"
chmod 0700 "${my_blocksdir}"
cd "${my_vol}" || return 1
# leave options unquoted so they're interpreted separately
# shellcheck disable=SC2086
sudo env PATH="${PATH}" \
serviceman add ${my_system_args} --path "${PATH}" --name "${my_name}" --force -- \
dashd \
${my_net_flag} \
-usehd \
-conf="${HOME}/.dashcore/dash.conf" \
-settings="${HOME}/.dashcore/settings.json" \
-walletdir="${HOME}/.dashcore/wallets/" \
-datadir="${my_datadir}" \
-blocksdir="${my_blocksdir}"
); }
main() { (
my_vol="${1:-}"
my_netname="${2:-}"
if test -z "${my_vol}"; then
my_vol="$(
ls -d /mnt/*/dashcore/ 2> /dev/null || true
)"
fi
if test "help" = "${my_vol}" ||
test "--help" = "${my_vol}"; then
fn_usage
return 0
fi
if test -z "${my_vol}"; then
fn_usage
return 1
fi
if ! test -d "${my_vol}" ||
! test -w "${my_vol}"; then
fn_datadir_help "${my_vol}"
return 1
fi
fn_srv_install "${my_vol}" "${my_netname}"
); }
main "${@:-}"