2022-03-07 12:49:12 +01:00
#!/usr/bin/env zsh
2020-08-19 13:26:03 +09:00
set -e
2020-08-25 20:19:01 +09:00
echo -n "Initializing..."
case ` uname -s` in
FreeBSD)
OS = FreeBSD
;;
Linux)
if [ " $( grep -Ei 'debian|buntu|mint' /etc/*release) " ] ; then
OS = Debian
else
echo "Your distribution of Linux is not yet supported by this installation script"
exit 1
fi
;;
*)
echo "Unsupported OS"
exit 1
;;
esac
2020-08-19 13:26:03 +09:00
########################################
##### mempool installation options #####
########################################
2020-08-25 20:19:01 +09:00
# tor onion and clearnet hostname
2020-09-10 14:04:27 +09:00
TOR_INSTALL = ON
CERTBOT_INSTALL = ON
2020-08-25 20:19:01 +09:00
# install 3 network daemons
2020-09-10 14:04:27 +09:00
BITCOIN_INSTALL = ON
BISQ_INSTALL = ON
ELEMENTS_INSTALL = ON
2020-08-19 13:26:03 +09:00
2020-08-25 20:19:01 +09:00
# configure 4 network instances
2020-09-10 14:04:27 +09:00
BITCOIN_MAINNET_ENABLE = ON
BITCOIN_TESTNET_ENABLE = ON
BISQ_MAINNET_ENABLE = ON
ELEMENTS_LIQUID_ENABLE = ON
2020-08-19 13:26:03 +09:00
2020-08-25 20:19:01 +09:00
# enable lightmode and disable compaction to fit on 1TB SSD drive
2020-09-10 14:04:27 +09:00
BITCOIN_ELECTRS_LIGHT_MODE = ON
BITCOIN_ELECTRS_COMPACTION = OFF
ELEMENTS_ELECTRS_LIGHT_MODE = ON
ELEMENTS_ELECTRS_COMPACTION = OFF
2020-08-25 20:19:01 +09:00
# automaitcally configure firewall
2020-09-10 14:04:27 +09:00
FIREWALL_CONFIGURE = ON
2020-08-25 20:19:01 +09:00
############
# probe OS #
############
HOSTNAME = $( hostname)
# get newest zpool if using zfs
ZPOOL = ""
2022-03-07 12:49:12 +01:00
[ " ${ OS } " = FreeBSD ] && ZPOOL = $( zpool list -H| head -1| cut -f 1)
2020-08-25 20:19:01 +09:00
MD5 = md5sum
[ " ${ OS } " = FreeBSD ] && MD5 = md5
2020-08-19 13:26:03 +09:00
2020-08-25 20:19:01 +09:00
##################################################
##### P2P / RPC / HTTP network communication #####
##################################################
2020-08-19 13:26:03 +09:00
# used for bisq and firewall configuration
BITCOIN_MAINNET_P2P_HOST = 127.0.0.1
BITCOIN_MAINNET_P2P_PORT = 8333
# used for RPC communication
BITCOIN_MAINNET_RPC_HOST = 127.0.0.1
BITCOIN_MAINNET_RPC_PORT = 8332
2020-08-25 20:19:01 +09:00
# generate random hex string
BITCOIN_MAINNET_RPC_USER = $( head -150 /dev/urandom | ${ MD5 } | awk '{print $1}' )
BITCOIN_MAINNET_RPC_PASS = $( head -150 /dev/urandom | ${ MD5 } | awk '{print $1}' )
2020-08-19 13:26:03 +09:00
# used for firewall configuration
BITCOIN_TESTNET_P2P_HOST = 127.0.0.1
BITCOIN_TESTNET_P2P_PORT = 18333
# used for RPC communication
BITCOIN_TESTNET_RPC_HOST = 127.0.0.1
BITCOIN_TESTNET_RPC_PORT = 18332
2020-08-25 20:19:01 +09:00
# generate random hex string
BITCOIN_TESTNET_RPC_USER = $( head -150 /dev/urandom | ${ MD5 } | awk '{print $1}' )
BITCOIN_TESTNET_RPC_PASS = $( head -150 /dev/urandom | ${ MD5 } | awk '{print $1}' )
2020-08-19 13:26:03 +09:00
# used by bisq to receive notifications from bitcoind about new blocks
BISQ_BLOCKNOTIFY_HOST = 127.0.0.1
BISQ_BLOCKNOTIFY_PORT = 5120
# used for firewall configuration
ELEMENTS_LIQUID_P2P_HOST = 127.0.0.1
ELEMENTS_LIQUID_P2P_PORT = 7042
# used for RPC communication
ELEMENTS_LIQUID_RPC_HOST = 127.0.0.1
ELEMENTS_LIQUID_RPC_PORT = 7041
2020-08-25 20:19:01 +09:00
# generate random hex string
ELEMENTS_LIQUID_RPC_USER = $( head -150 /dev/urandom | ${ MD5 } | awk '{print $1}' )
ELEMENTS_LIQUID_RPC_PASS = $( head -150 /dev/urandom | ${ MD5 } | awk '{print $1}' )
2020-08-19 13:26:03 +09:00
# set either socket or TCP host/port, not both
2020-08-25 20:19:01 +09:00
#ELECTRS_MAINNET_HTTP_SOCK=/tmp/bitcoin.mainnet.electrs
ELECTRS_MAINNET_HTTP_HOST = 127.0.0.1
ELECTRS_MAINNET_HTTP_PORT = 3000
2020-08-19 13:26:03 +09:00
# set either socket or TCP host/port, not both
2020-08-25 20:19:01 +09:00
#ELECTRS_TESTNET_HTTP_SOCK=/tmp/bitcoin.testnet.electrs
ELECTRS_TESTNET_HTTP_HOST = 127.0.0.1
ELECTRS_TESTNET_HTTP_PORT = 3002
2020-08-19 13:26:03 +09:00
# set either socket or TCP host/port, not both
2020-08-25 20:19:01 +09:00
#ELECTRS_LIQUID_HTTP_SOCK=/tmp/elements.liquid.electrs
ELECTRS_LIQUID_HTTP_HOST = 127.0.0.1
ELECTRS_LIQUID_HTTP_PORT = 3001
2020-08-19 13:26:03 +09:00
# set either socket or TCP host/port, not both
2020-08-25 20:19:01 +09:00
#MEMPOOL_MAINNET_HTTP_SOCK=/tmp/bitcoin.mainnet.mempool
MEMPOOL_MAINNET_HTTP_HOST = 127.0.0.1
MEMPOOL_MAINNET_HTTP_PORT = 8999
2020-08-19 13:26:03 +09:00
# set either socket or TCP host/port, not both
2020-08-25 20:19:01 +09:00
#MEMPOOL_TESTNET_HTTP_SOCK=/tmp/bitcoin.testnet.mempool
MEMPOOL_TESTNET_HTTP_HOST = 127.0.0.1
MEMPOOL_TESTNET_HTTP_PORT = 8997
2020-08-19 13:26:03 +09:00
# set either socket or TCP host/port, not both
2020-08-25 20:19:01 +09:00
#MEMPOOL_BISQ_HTTP_SOCK=/tmp/bitcoin.bisq.mempool
MEMPOOL_BISQ_HTTP_HOST = 127.0.0.1
MEMPOOL_BISQ_HTTP_PORT = 8996
2020-08-19 13:26:03 +09:00
# set either socket or TCP host/port, not both
2020-08-25 20:19:01 +09:00
#MEMPOOL_LIQUID_HTTP_SOCK=/tmp/elements.liquid.mempool
MEMPOOL_LIQUID_HTTP_HOST = 127.0.0.1
MEMPOOL_LIQUID_HTTP_PORT = 8998
2020-08-19 13:26:03 +09:00
##### OS options, should be automatically detected
# where systemd services get installed
2020-08-25 20:19:01 +09:00
DEBIAN_SERVICE_HOME = /etc/systemd/system
2020-08-19 13:26:03 +09:00
# where environment variables for services are set
2020-08-25 20:19:01 +09:00
DEBIAN_ENV_HOME = /etc/default
2020-08-19 13:26:03 +09:00
2022-03-07 12:49:12 +01:00
# mysql data folder and user/group
MYSQL_HOME = /mysql
MYSQL_USER = mysql
MYSQL_GROUP = mysql
2020-08-19 13:26:03 +09:00
# mempool data folder and user/group
MEMPOOL_HOME = /mempool
MEMPOOL_USER = mempool
MEMPOOL_GROUP = mempool
# name of Tor hidden service in torrc
MEMPOOL_TOR_HS = mempool
# bitcoin user/group
BITCOIN_USER = bitcoin
BITCOIN_GROUP = bitcoin
# bitcoin core data folder, needs about 300GB
BITCOIN_HOME = /bitcoin
2020-08-25 20:19:01 +09:00
# bitcoin testnet data
BITCOIN_TESTNET_DATA = ${ BITCOIN_HOME } /testnet3
2020-08-19 13:26:03 +09:00
# bitcoin electrs source/binaries
BITCOIN_ELECTRS_HOME = ${ BITCOIN_HOME } /electrs
2020-08-25 20:19:01 +09:00
# electrs database root
ELECTRS_DATA_ROOT = /electrs
# bitcoin electrs data, needs about 350GB, and uses double that during compaction
ELECTRS_MAINNET_ZPOOL = ${ ZPOOL }
ELECTRS_MAINNET_DATA = ${ ELECTRS_DATA_ROOT } /mainnet
# bitcoin testnet electrs database, only a few GB
ELECTRS_TESTNET_ZPOOL = ${ ZPOOL }
ELECTRS_TESTNET_DATA = ${ ELECTRS_DATA_ROOT } /testnet
# liquid electrs data, needs about 5GB
ELECTRS_LIQUID_ZPOOL = ${ ZPOOL }
ELECTRS_LIQUID_DATA = /electrs
2020-08-19 13:26:03 +09:00
# bisq user/group
BISQ_USER = bisq
BISQ_GROUP = bisq
# bisq home folder, needs about 1GB
BISQ_HOME = /bisq
# liquid user/group
ELEMENTS_USER = elements
ELEMENTS_GROUP = elements
# liquid home/data/blockchain folder, needs about 10GB
ELEMENTS_HOME = /elements
2022-03-07 12:49:12 +01:00
# electrs db top-level
ELECTRS_HOME = /electrs
2020-08-19 13:26:03 +09:00
# elements electrs source/binaries
ELEMENTS_ELECTRS_HOME = ${ ELEMENTS_HOME } /electrs
2020-08-25 20:19:01 +09:00
# tor package from apt-get or pkg
TOR_PKG = tor
2020-08-19 13:26:03 +09:00
# tor user/group
TOR_USER = debian-tor
TOR_GROUP = debian-tor
NGINX_CONFIGURATION = /etc/nginx/nginx.conf
TOR_HOME = /etc/tor
TOR_CONFIGURATION = /etc/tor/torrc
TOR_RESOURCES = /var/lib/tor
ROOT_USER = root
ROOT_GROUP = root
ROOT_HOME = /root
##### git repo settings, shouldn't need changing
MEMPOOL_REPO_URL = https://github.com/mempool/mempool
MEMPOOL_REPO_NAME = mempool
MEMPOOL_REPO_BRANCH = master
MEMPOOL_LATEST_RELEASE = master
BITCOIN_REPO_URL = https://github.com/bitcoin/bitcoin
BITCOIN_REPO_NAME = bitcoin
BITCOIN_REPO_BRANCH = master
2020-08-25 20:19:01 +09:00
#BITCOIN_LATEST_RELEASE=$(curl -s https://api.github.com/repos/bitcoin/bitcoin/releases/latest|grep tag_name|head -1|cut -d '"' -f4)
BITCOIN_LATEST_RELEASE = master
echo -n '.'
2020-08-19 13:26:03 +09:00
BISQ_REPO_URL = https://github.com/bisq-network/bisq
BISQ_REPO_NAME = bisq
BISQ_REPO_BRANCH = master
2020-08-25 20:19:01 +09:00
#BISQ_LATEST_RELEASE=$(curl -s https://api.github.com/repos/bisq-network/bisq/releases/latest|grep tag_name|head -1|cut -d '"' -f4)
BISQ_LATEST_RELEASE = master
echo -n '.'
2020-08-19 13:26:03 +09:00
ELEMENTS_REPO_URL = https://github.com/ElementsProject/elements
ELEMENTS_REPO_NAME = elements
ELEMENTS_REPO_BRANCH = master
2020-08-25 20:19:01 +09:00
#ELEMENTS_LATEST_RELEASE=$(curl -s https://api.github.com/repos/ElementsProject/elements/releases/latest|grep tag_name|head -1|cut -d '"' -f4)
ELEMENTS_LATEST_RELEASE = master
echo -n '.'
2020-08-19 13:26:03 +09:00
2022-03-07 12:49:12 +01:00
BITCOIN_ELECTRS_REPO_URL = https://github.com/blockstream/electrs
2020-08-19 13:26:03 +09:00
BITCOIN_ELECTRS_REPO_NAME = electrs
BITCOIN_ELECTRS_REPO_BRANCH = new-index
BITCOIN_ELECTRS_LATEST_RELEASE = new-index
2022-03-07 12:49:12 +01:00
ELEMENTS_ELECTRS_REPO_URL = https://github.com/blockstream/electrs
2020-08-19 13:26:03 +09:00
ELEMENTS_ELECTRS_REPO_NAME = electrs
ELEMENTS_ELECTRS_REPO_BRANCH = new-index
ELEMENTS_ELECTRS_LATEST_RELEASE = new-index
2020-08-25 20:19:01 +09:00
#######################
##### OS packages #####
#######################
# package needed for just certbot test before full install
2022-03-07 12:49:12 +01:00
FREEBSD_CERTBOT_PKG = py38-certbot
2020-08-25 20:19:01 +09:00
DEBIAN_CERTBOT_PKG = python-certbot
# packages needed for mempool ecosystem
DEBIAN_PKG =()
DEBIAN_PKG +=( zsh vim curl screen openssl python3)
DEBIAN_PKG +=( build-essential git git-lfs clang cmake)
DEBIAN_PKG +=( autotools-dev autoconf automake pkg-config bsdmainutils)
DEBIAN_PKG +=( libevent-dev libdb-dev libssl-dev libtool-dev autotools-dev)
DEBIAN_PKG +=( libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-test-dev libboost-thread-dev)
DEBIAN_PKG +=( nodejs npm mariadb-server nginx-core python-certbot-nginx rsync ufw)
# packages needed for mempool ecosystem
FREEBSD_PKG =()
2022-03-07 12:49:12 +01:00
FREEBSD_PKG +=( zsh sudo git screen curl wget calc neovim)
FREEBSD_PKG +=( openssh-portable open-vm-tools-nox11 py38-pip)
2020-08-25 20:19:01 +09:00
FREEBSD_PKG +=( boost-libs autoconf automake gmake gcc libevent libtool pkgconf)
2022-03-07 12:49:12 +01:00
FREEBSD_PKG +=( node npm nginx rsync py38-certbot-nginx )
2020-08-25 20:19:01 +09:00
#############################
##### utility functions #####
#############################
osSudo()
{
SUDO_USER = $1
shift
case $OS in
FreeBSD)
sudo -H -i -u " ${ SUDO_USER } " $*
;;
Debian)
sudo -H -i -u " ${ SUDO_USER } " $*
;;
esac
}
osPackageUpdate()
{
echo "[*] Updating OS sources"
case $OS in
FreeBSD)
2022-03-07 12:49:12 +01:00
pkg update
2020-08-25 20:19:01 +09:00
;;
Debian)
osSudo " ${ ROOT_USER } " DEBIAN_FRONTEND = noninteractive apt-get update -q
;;
esac
}
osPackageUpgrade()
{
echo "[*] Upgrading OS packages $* "
case $OS in
FreeBSD)
2022-03-07 12:49:12 +01:00
pkg upgrade -y $*
2020-08-25 20:19:01 +09:00
;;
Debian)
osSudo " ${ ROOT_USER } " DEBIAN_FRONTEND = noninteractive apt-get upgrade -qq -y $*
;;
esac
}
osPackageInstall()
{
echo "[*] Installing OS packages $* "
case $OS in
FreeBSD)
2022-03-07 12:49:12 +01:00
pkg install -y $*
2020-08-25 20:19:01 +09:00
;;
Debian)
osSudo " ${ ROOT_USER } " DEBIAN_FRONTEND = noninteractive apt-get install -qq -y $*
;;
esac
}
osPackageInstallAll()
{
case $OS in
FreeBSD)
osPackageInstall ${ FREEBSD_PKG [@] }
;;
Debian)
osPackageInstall ${ DEBIAN_PKG [@] }
;;
esac
}
osUserCreate()
{
case $OS in
FreeBSD)
2022-03-07 12:57:43 +01:00
# pw useradd -d /mempool -g mempool -n mempool
2020-08-25 20:19:01 +09:00
osSudo " ${ ROOT_USER } " pw useradd $*
;;
Debian)
osSudo " ${ ROOT_USER } " useradd $*
;;
esac
}
2022-03-07 12:57:43 +01:00
osGroupCreate()
{
case $OS in
FreeBSD)
osSudo " ${ ROOT_USER } " pw groupadd $*
;;
Debian)
osSudo " ${ ROOT_USER } " groupadd $*
;;
esac
}
2020-08-25 20:19:01 +09:00
osCertbotDryRun()
{
if [ ! -z " ${ HOSTNAME } " ] ; then
case $OS in
FreeBSD)
osPackageInstall " ${ FREEBSD_PKG_CERTBOT } "
;;
Debian)
osPackageInstall " ${ DEBIAN_PKG_CERTBOT } "
;;
esac
certbot certonly --dry-run --standalone --agree-tos --register-unsafely-without-email -d " ${ HOSTNAME } "
fi
}
zfsCreateFilesystems()
{
zfs create -o "mountpoint= ${ ELEMENTS_HOME } " " ${ ZPOOL } /elements"
zfs create -o "mountpoint= ${ BITCOIN_HOME } " " ${ ZPOOL } /bitcoin"
zfs create -o "mountpoint= ${ ELECTRS_HOME } " " ${ ZPOOL } /electrs"
2022-03-07 12:49:12 +01:00
zfs create -o "mountpoint= ${ MEMPOOL_HOME } " " ${ ZPOOL } /mempool"
zfs create -o "mountpoint= ${ MYSQL_HOME } " " ${ ZPOOL } /mysql"
zfs create -o "mountpoint= ${ BITCOIN_ELECTRS_HOME } " " ${ ZPOOL } /bitcoin/electrs"
2020-08-25 20:19:01 +09:00
zfs create -o "mountpoint= ${ ELEMENTS_HOME } /liquidv1" " ${ ZPOOL } /elements/liquidv1"
zfs create -o "mountpoint= ${ ELEMENTS_ELECTRS_HOME } " " ${ ZPOOL } /elements/electrs"
# Bitcoin Mainnet
2022-03-07 12:49:12 +01:00
if [ " ${ BITCOIN_MAINNET_ENABLE } " = ON ] ; then
for folder in chainstate indexes blocks
do
zfs create -o "mountpoint= ${ BITCOIN_HOME } / ${ folder } " " ${ ZPOOL } /bitcoin/ ${ folder } "
done
fi
2020-08-25 20:19:01 +09:00
# Bitcoin Testnet
2022-03-07 12:49:12 +01:00
if [ " ${ BITCOIN_TESTNET_ENABLE } " = ON ] ; then
zfs create -o "mountpoint= ${ BITCOIN_TESTNET_DATA } " " ${ ZPOOL } /bitcoin/testnet"
for folder in chainstate indexes blocks
do
zfs create -o "mountpoint= ${ BITCOIN_TESTNET_DATA } / ${ folder } " " ${ ZPOOL } /bitcoin/testnet/ ${ folder } "
done
fi
2020-08-25 20:19:01 +09:00
# electrs mainnet data
2020-09-10 14:04:27 +09:00
if [ " ${ BITCOIN_MAINNET_ENABLE } " = ON ] ; then
2020-08-25 20:19:01 +09:00
zfs create -o "mountpoint= ${ ELECTRS_MAINNET_DATA } " " ${ ELECTRS_MAINNET_ZPOOL } /electrs/mainnet"
for folder in cache history txstore
do
zfs create -o "mountpoint= ${ ELECTRS_MAINNET_DATA } /mainnet/newindex/ ${ folder } " " ${ ELECTRS_MAINNET_ZPOOL } /electrs/mainnet/ ${ folder } "
done
fi
# electrs testnet data
2020-09-10 14:04:27 +09:00
if [ " ${ BITCOIN_TESTNET_ENABLE } " = ON ] ; then
2020-08-25 20:19:01 +09:00
zfs create -o "mountpoint= ${ ELECTRS_TESTNET_DATA } " " ${ ELECTRS_TESTNET_ZPOOL } /electrs/testnet"
for folder in cache history txstore
do
zfs create -o "mountpoint= ${ ELECTRS_TESTNET_DATA } /testnet/newindex/ ${ folder } " " ${ ELECTRS_TESTNET_ZPOOL } /electrs/testnet/ ${ folder } "
done
fi
# electrs liquid data
2020-09-10 14:04:27 +09:00
if [ " ${ ELEMENTS_LIQUID_ENABLE } " = ON ] ; then
2020-08-25 20:19:01 +09:00
zfs create -o "mountpoint= ${ ELECTRS_LIQUID_DATA } " " ${ ELECTRS_LIQUID_ZPOOL } /electrs/liquid"
for folder in cache history txstore
do
zfs create -o "mountpoint= ${ ELECTRS_LIQUID_DATA } /liquid/newindex/ ${ folder } " " ${ ELECTRS_LIQUID_ZPOOL } /electrs/liquid/ ${ folder } "
done
fi
2020-09-10 14:04:27 +09:00
if [ " ${ BISQ_INSTALL } " = ON ] ; then
2020-08-25 20:19:01 +09:00
zfs create -o "mountpoint= ${ BISQ_HOME } " " ${ ZPOOL } /bisq"
fi
}
2020-08-19 13:26:03 +09:00
##### Perform sanity checks before trying anything
# what OS running, what FS partitions, etc.
# how much free disk space available?
# is something listening on port 80 already?
# is nginx or apache running?
##### Determine what actually needs to be installed
# does bitcoin exist?
2020-09-10 14:04:27 +09:00
##########
# dialog #
##########
2020-08-25 20:19:01 +09:00
: ${ DIALOG =dialog }
: ${ DIALOG_OK =0 }
: ${ DIALOG_CANCEL =1 }
: ${ DIALOG_HELP =2 }
: ${ DIALOG_EXTRA =3 }
: ${ DIALOG_ITEM_HELP =4 }
: ${ DIALOG_ESC =255 }
2020-09-10 14:04:27 +09:00
: ${ SIG_OFFNE =0 }
2020-08-25 20:19:01 +09:00
: ${ SIG_HUP =1 }
: ${ SIG_INT =2 }
: ${ SIG_QUIT =3 }
: ${ SIG_KILL =9 }
: ${ SIG_TERM =15 }
input = ` tempfile 2>/dev/null` || input = /tmp/input$$
output = ` tempfile 2>/dev/null` || output = /tmp/test$$
2020-09-10 14:04:27 +09:00
trap "rm -f $input $output " $SIG_OFFNE $SIG_HUP $SIG_INT $SIG_TRAP $SIG_TERM
2020-08-25 20:19:01 +09:00
2020-09-10 14:04:27 +09:00
DIALOG_ERROR = 254
export DIALOG_ERROR
2020-08-25 20:19:01 +09:00
2020-09-10 14:04:27 +09:00
backtitle = "Mempool Fullnode Installer"
title = "Mempool Fullnode Installer"
returncode = 0
#################
# dialog part 1 #
#################
2020-08-25 20:19:01 +09:00
$CUT >$input <<-EOF
2020-09-10 14:04:27 +09:00
Tor:Enable Tor v3 HS Onion:ON
Certbot:Enable HTTPS using Certbot:ON
Mainnet:Enable Bitcoin Mainnet:ON
Testnet:Enable Bitcoin Testnet:ON
Liquid:Enable Elements Liquid:ON
Bisq:Enable Bisq:ON
Lightmode:Enable Electrs Lightmode to save disk space:ON
Smalldisk:Disable Electrs Compaction to save disk space:ON
Firewall:Enable Firewall:ON
2020-08-25 20:19:01 +09:00
EOF
2020-09-10 14:04:27 +09:00
2020-08-25 20:19:01 +09:00
cat $input | sed -e 's/^/"/' -e 's/:/" "/g' -e 's/$/"/' >$output
cat $output >$input
2020-09-10 14:04:27 +09:00
$DIALOG --backtitle " ${ backtitle } " \
--title " ${ title } " " $@ " \
--checklist "Toggle the features below to configure your fullnode:\n" \
20 80 10 \
--file $input 2> $output
2020-08-25 20:19:01 +09:00
retval = $?
tempfile = $output
2020-09-10 14:04:27 +09:00
if [ $retval != $DIALOG_OK ] ; then
echo "Installation aborted."
exit 1
fi
2020-08-25 20:19:01 +09:00
2020-09-10 14:04:27 +09:00
if grep Tor $tempfile >/dev/null 2>& 1; then
TOR_INSTALL = ON
else
TOR_INSTALL = OFF
fi
2020-08-25 20:19:01 +09:00
2020-09-10 14:04:27 +09:00
if grep Certbot $tempfile >/dev/null 2>& 1; then
CERTBOT_INSTALL = ON
else
CERTBOT_INSTALL = OFF
fi
if grep Mainnet $tempfile >/dev/null 2>& 1; then
BITCOIN_MAINNET_ENABLE = ON
else
BITCOIN_MAINNET_ENABLE = OFF
fi
if grep Testnet $tempfile >/dev/null 2>& 1; then
BITCOIN_TESTNET_ENABLE = ON
else
BITCOIN_TESTNET_ENABLE = OFF
fi
2020-08-25 20:19:01 +09:00
2020-09-10 14:04:27 +09:00
if grep Liquid $tempfile >/dev/null 2>& 1; then
ELEMENTS_INSTALL = ON
ELEMENTS_LIQUID_ENABLE = ON
else
ELEMENTS_INSTALL = OFF
ELEMENTS_LIQUID_ENABLE = OFF
fi
2020-08-25 20:19:01 +09:00
2020-09-10 14:04:27 +09:00
if grep Bisq $tempfile >/dev/null 2>& 1; then
BISQ_INSTALL = ON
BISQ_MAINNET_ENABLE = ON
else
BISQ_INSTALL = OFF
BISQ_MAINNET_ENABLE = OFF
fi
2020-08-25 20:19:01 +09:00
2020-09-10 14:04:27 +09:00
if grep Lightmode $tempfile >/dev/null 2>& 1; then
BITCOIN_ELECTRS_LIGHT_MODE = ON
else
BITCOIN_ELECTRS_LIGHT_MODE = OFF
fi
if grep Smalldisk $tempfile >/dev/null 2>& 1; then
BITCOIN_ELECTRS_LIGHT_MODE = ON
else
BITCOIN_ELECTRS_LIGHT_MODE = OFF
fi
#################
# dialog part 2 #
#################
$DIALOG --cr-wrap \
--title "INPUT BOX" --clear \
--inputbox " $@ " \
"Enter the FQDN hostname for obtaining an SSL certificate using Certbot:" 0 0 " ${ HOSTNAME } " 2> $tempfile
HOSTNAME = $( cat $tempfile )
#################
# dialog part 3 #
#################
# --form text height width formheight
# [ label y x item y x flen ilen ]
#"BISQ_BLOCKNOTIFY_HOST" 0 1 "${BISQ_BLOCKNOTIFY_HOST}" 0 30 0 0 \
$DIALOG --ok-label "Submit" \
--backtitle " $backtitle " " $@ " \
--form "Your fullnode will be installed as follows:" 30 70 0 \
"BISQ_BLOCKNOTIFY_PORT" 1 1 " ${ BISQ_BLOCKNOTIFY_PORT } " 1 35 35 0 \
"BISQ_GROUP" 2 1 " ${ BISQ_GROUP } " 2 35 35 0 \
"BISQ_HOME" 3 1 " ${ BISQ_HOME } " 3 35 35 0 \
"BISQ_INSTALL" 4 1 " ${ BISQ_INSTALL } " 4 35 35 0 \
"BISQ_LATEST_RELEASE" 5 1 " ${ BISQ_LATEST_RELEASE } " 5 35 35 0 \
"BISQ_MAINNET_ENABLE" 6 1 " ${ BISQ_MAINNET_ENABLE } " 6 35 35 0 \
"BISQ_REPO_BRANCH" 7 1 " ${ BISQ_REPO_BRANCH } " 7 35 35 0 \
"BISQ_REPO_NAME" 8 1 " ${ BISQ_REPO_NAME } " 8 35 35 0 \
"BISQ_REPO_URL" 9 1 " ${ BISQ_REPO_URL } " 9 35 35 0 \
"BISQ_USER" 10 1 " ${ BISQ_USER } " 10 35 35 0 \
"BITCOIN_ELECTRS_COMPACTION" 11 1 " ${ BITCOIN_ELECTRS_COMPACTION } " 11 35 35 0 \
"BITCOIN_ELECTRS_HOME" 12 1 " ${ BITCOIN_ELECTRS_HOME } " 12 35 35 0 \
"BITCOIN_ELECTRS_LATEST_RELEASE" 13 1 " ${ BITCOIN_ELECTRS_LATEST_RELEASE } " 13 35 35 0 \
"BITCOIN_ELECTRS_LIGHT_MODE" 14 1 " ${ BITCOIN_ELECTRS_LIGHT_MODE } " 14 35 35 0 \
"BITCOIN_ELECTRS_REPO_BRANCH" 15 1 " ${ BITCOIN_ELECTRS_REPO_BRANCH } " 15 35 35 0 \
"BITCOIN_ELECTRS_REPO_NAME" 16 1 " ${ BITCOIN_ELECTRS_REPO_NAME } " 16 35 35 0 \
"BITCOIN_ELECTRS_REPO_URL" 17 1 " ${ BITCOIN_ELECTRS_REPO_URL } " 17 35 35 0 \
"BITCOIN_GROUP" 18 1 " ${ BITCOIN_GROUP } " 18 35 35 0 \
"BITCOIN_HOME" 19 1 " ${ BITCOIN_HOME } " 19 35 35 0 \
"BITCOIN_INSTALL" 20 1 " ${ BITCOIN_INSTALL } " 20 35 35 0 \
"BITCOIN_LATEST_RELEASE" 21 1 " ${ BITCOIN_LATEST_RELEASE } " 21 35 35 0 \
"BITCOIN_MAINNET_ENABLE" 22 1 " ${ BITCOIN_MAINNET_ENABLE } " 22 35 35 0 \
"BITCOIN_MAINNET_P2P_HOST" 23 1 " ${ BITCOIN_MAINNET_P2P_HOST } " 23 35 35 0 \
"BITCOIN_MAINNET_P2P_PORT" 24 1 " ${ BITCOIN_MAINNET_P2P_PORT } " 24 35 35 0 \
"BITCOIN_MAINNET_RPC_HOST" 25 1 " ${ BITCOIN_MAINNET_RPC_HOST } " 25 35 35 0 \
"BITCOIN_MAINNET_RPC_PASS" 26 1 " ${ BITCOIN_MAINNET_RPC_PASS } " 26 35 35 0 \
"BITCOIN_MAINNET_RPC_PORT" 27 1 " ${ BITCOIN_MAINNET_RPC_PORT } " 27 35 35 0 \
"BITCOIN_MAINNET_RPC_USER" 28 1 " ${ BITCOIN_MAINNET_RPC_USER } " 28 35 35 0 \
"BITCOIN_REPO_BRANCH" 29 1 " ${ BITCOIN_REPO_BRANCH } " 29 35 35 0 \
"BITCOIN_REPO_NAME" 30 1 " ${ BITCOIN_REPO_NAME } " 30 35 35 0 \
"BITCOIN_REPO_URL" 31 1 " ${ BITCOIN_REPO_URL } " 31 35 35 0 \
"BITCOIN_TESTNET_DATA" 32 1 " ${ BITCOIN_TESTNET_DATA } " 32 35 35 0 \
"BITCOIN_TESTNET_ENABLE" 33 1 " ${ BITCOIN_TESTNET_ENABLE } " 33 35 35 0 \
"BITCOIN_TESTNET_P2P_HOST" 34 1 " ${ BITCOIN_TESTNET_P2P_HOST } " 34 35 35 0 \
"BITCOIN_TESTNET_P2P_PORT" 35 1 " ${ BITCOIN_TESTNET_P2P_PORT } " 35 35 35 0 \
"BITCOIN_TESTNET_RPC_HOST" 36 1 " ${ BITCOIN_TESTNET_RPC_HOST } " 36 35 35 0 \
"BITCOIN_TESTNET_RPC_PASS" 37 1 " ${ BITCOIN_TESTNET_RPC_PASS } " 37 35 35 0 \
"BITCOIN_TESTNET_RPC_PORT" 38 1 " ${ BITCOIN_TESTNET_RPC_PORT } " 38 35 35 0 \
"BITCOIN_TESTNET_RPC_USER" 39 1 " ${ BITCOIN_TESTNET_RPC_USER } " 39 35 35 0 \
"BITCOIN_USER" 40 1 " ${ BITCOIN_USER } " 40 35 35 0 \
"ELECTRS_DATA_ROOT" 41 1 " ${ ELECTRS_DATA_ROOT } " 41 35 35 0 \
"ELECTRS_LIQUID_DATA" 42 1 " ${ ELECTRS_LIQUID_DATA } " 42 35 35 0 \
"ELECTRS_LIQUID_HTTP_HOST" 43 1 " ${ ELECTRS_LIQUID_HTTP_HOST } " 43 35 35 0 \
"ELECTRS_LIQUID_HTTP_PORT" 44 1 " ${ ELECTRS_LIQUID_HTTP_PORT } " 44 35 35 0 \
"ELECTRS_LIQUID_ZPOOL" 45 1 " ${ ELECTRS_LIQUID_ZPOOL } " 45 35 35 0 \
"ELECTRS_MAINNET_DATA" 46 1 " ${ ELECTRS_MAINNET_DATA } " 46 35 35 0 \
"ELECTRS_MAINNET_HTTP_HOST" 47 1 " ${ ELECTRS_MAINNET_HTTP_HOST } " 47 35 35 0 \
"ELECTRS_MAINNET_HTTP_PORT" 48 1 " ${ ELECTRS_MAINNET_HTTP_PORT } " 48 35 35 0 \
"ELECTRS_MAINNET_ZPOOL" 49 1 " ${ ELECTRS_MAINNET_ZPOOL } " 49 35 35 0 \
"ELECTRS_TESTNET_DATA" 50 1 " ${ ELECTRS_TESTNET_DATA } " 50 35 35 0 \
"ELECTRS_TESTNET_HTTP_HOST" 51 1 " ${ ELECTRS_TESTNET_HTTP_HOST } " 51 35 35 0 \
"ELECTRS_TESTNET_HTTP_PORT" 52 1 " ${ ELECTRS_TESTNET_HTTP_PORT } " 52 35 35 0 \
"ELECTRS_TESTNET_ZPOOL" 53 1 " ${ ELECTRS_TESTNET_ZPOOL } " 53 35 35 0 \
"ELEMENTS_ELECTRS_COMPACTION" 54 1 " ${ ELEMENTS_ELECTRS_COMPACTION } " 54 35 35 0 \
"ELEMENTS_ELECTRS_HOME" 55 1 " ${ ELEMENTS_ELECTRS_HOME } " 55 35 35 0 \
"ELEMENTS_ELECTRS_LATEST_RELEASE" 56 1 " ${ ELEMENTS_ELECTRS_LATEST_RELEASE } " 56 35 35 0 \
"ELEMENTS_ELECTRS_LIGHT_MODE" 57 1 " ${ ELEMENTS_ELECTRS_LIGHT_MODE } " 57 35 35 0 \
"ELEMENTS_ELECTRS_REPO_BRANCH" 58 1 " ${ ELEMENTS_ELECTRS_REPO_BRANCH } " 58 35 35 0 \
"ELEMENTS_ELECTRS_REPO_NAME" 59 1 " ${ ELEMENTS_ELECTRS_REPO_NAME } " 59 35 35 0 \
"ELEMENTS_ELECTRS_REPO_URL" 60 1 " ${ ELEMENTS_ELECTRS_REPO_URL } " 60 35 35 0 \
"ELEMENTS_GROUP" 61 1 " ${ ELEMENTS_GROUP } " 61 35 35 0 \
"ELEMENTS_HOME" 62 1 " ${ ELEMENTS_HOME } " 62 35 35 0 \
"ELEMENTS_INSTALL" 63 1 " ${ ELEMENTS_INSTALL } " 63 35 35 0 \
"ELEMENTS_LATEST_RELEASE" 64 1 " ${ ELEMENTS_LATEST_RELEASE } " 64 35 35 0 \
"ELEMENTS_LIQUID_ENABLE" 65 1 " ${ ELEMENTS_LIQUID_ENABLE } " 65 35 35 0 \
"ELEMENTS_LIQUID_P2P_HOST" 66 1 " ${ ELEMENTS_LIQUID_P2P_HOST } " 66 35 35 0 \
"ELEMENTS_LIQUID_P2P_PORT" 67 1 " ${ ELEMENTS_LIQUID_P2P_PORT } " 67 35 35 0 \
"ELEMENTS_LIQUID_RPC_HOST" 68 1 " ${ ELEMENTS_LIQUID_RPC_HOST } " 68 35 35 0 \
"ELEMENTS_LIQUID_RPC_PASS" 69 1 " ${ ELEMENTS_LIQUID_RPC_PASS } " 69 35 35 0 \
"ELEMENTS_LIQUID_RPC_PORT" 70 1 " ${ ELEMENTS_LIQUID_RPC_PORT } " 70 35 35 0 \
"ELEMENTS_LIQUID_RPC_USER" 71 1 " ${ ELEMENTS_LIQUID_RPC_USER } " 71 35 35 0 \
"ELEMENTS_REPO_BRANCH" 72 1 " ${ ELEMENTS_REPO_BRANCH } " 72 35 35 0 \
"ELEMENTS_REPO_NAME" 73 1 " ${ ELEMENTS_REPO_NAME } " 73 35 35 0 \
"ELEMENTS_REPO_URL" 74 1 " ${ ELEMENTS_REPO_URL } " 74 35 35 0 \
"ELEMENTS_USER" 75 1 " ${ ELEMENTS_USER } " 75 35 35 0 \
"MEMPOOL_BISQ_HTTP_HOST" 76 1 " ${ MEMPOOL_BISQ_HTTP_HOST } " 76 35 35 0 \
"MEMPOOL_BISQ_HTTP_PORT" 77 1 " ${ MEMPOOL_BISQ_HTTP_PORT } " 77 35 35 0 \
"MEMPOOL_GROUP" 78 1 " ${ MEMPOOL_GROUP } " 78 35 35 0 \
"MEMPOOL_HOME" 79 1 " ${ MEMPOOL_HOME } " 79 35 35 0 \
"MEMPOOL_LATEST_RELEASE" 80 1 " ${ MEMPOOL_LATEST_RELEASE } " 80 35 35 0 \
"MEMPOOL_LIQUID_HTTP_HOST" 81 1 " ${ MEMPOOL_LIQUID_HTTP_HOST } " 81 35 35 0 \
"MEMPOOL_LIQUID_HTTP_PORT" 82 1 " ${ MEMPOOL_LIQUID_HTTP_PORT } " 82 35 35 0 \
"MEMPOOL_MAINNET_HTTP_HOST" 83 1 " ${ MEMPOOL_MAINNET_HTTP_HOST } " 83 35 35 0 \
"MEMPOOL_MAINNET_HTTP_PORT" 84 1 " ${ MEMPOOL_MAINNET_HTTP_PORT } " 84 35 35 0 \
"MEMPOOL_REPO_BRANCH" 85 1 " ${ MEMPOOL_REPO_BRANCH } " 85 35 35 0 \
"MEMPOOL_REPO_NAME" 86 1 " ${ MEMPOOL_REPO_NAME } " 86 35 35 0 \
"MEMPOOL_REPO_URL" 87 1 " ${ MEMPOOL_REPO_URL } " 87 35 35 0 \
"MEMPOOL_TESTNET_HTTP_HOST" 88 1 " ${ MEMPOOL_TESTNET_HTTP_HOST } " 88 35 35 0 \
"MEMPOOL_TESTNET_HTTP_PORT" 89 1 " ${ MEMPOOL_TESTNET_HTTP_PORT } " 89 35 35 0 \
"MEMPOOL_TOR_HS" 90 1 " ${ MEMPOOL_TOR_HS } " 90 35 35 0 \
"MEMPOOL_USER" 91 1 " ${ MEMPOOL_USER } " 91 35 35 0 \
"HOSTNAME" 92 1 " ${ HOSTNAME } " 92 35 35 0 \
"TOR_INSTALL" 93 1 " ${ TOR_INSTALL } " 93 35 35 0 \
"CERTBOT_INSTALL" 94 1 " ${ CERTBOT_INSTALL } " 94 35 35 0 \
2022-03-07 12:49:12 +01:00
2> $tempfile
2020-09-10 14:04:27 +09:00
retval = $?
if [ $retval != $DIALOG_OK ] ; then
echo "Installation aborted."
exit 1
fi
2020-08-25 20:19:01 +09:00
############################
# START DOING ACTUAL STUFF #
############################
date
echo "[*] Mempool installation script for ${ OS } "
2022-03-07 12:49:12 +01:00
set -x
2020-08-19 13:26:03 +09:00
2020-08-25 20:19:01 +09:00
###################################
# create filesystems if necessary #
###################################
2020-08-19 13:26:03 +09:00
2022-03-07 12:49:12 +01:00
#zfsCreateFilesystems
2020-08-25 20:19:01 +09:00
###############################
# Install all the OS packages #
###############################
2020-08-19 13:26:03 +09:00
2022-03-07 12:57:43 +01:00
#osPackageUpdate
#osPackageUpgrade
#osPackageInstallAll
2022-03-07 12:49:12 +01:00
2020-08-25 20:19:01 +09:00
##########################
# Mempool top-level repo #
##########################
2020-08-19 13:26:03 +09:00
echo "[*] Creating Mempool user with Tor access"
2022-03-07 12:57:43 +01:00
osGroupCreate " ${ MEMPOOL_GROUP } "
osUserCreate -d " ${ MEMPOOL_HOME } " -g " ${ MEMPOOL_GROUP } " -n " ${ MEMPOOL_USER } "
2020-08-19 13:26:03 +09:00
id " ${ MEMPOOL_USER } "
echo "[*] Creating Mempool data folder"
2020-08-25 20:19:01 +09:00
osSudo " ${ ROOT_USER } " mkdir -p " ${ MEMPOOL_HOME } "
osSudo " ${ ROOT_USER } " chown " ${ MEMPOOL_USER } : ${ MEMPOOL_GROUP } " " ${ MEMPOOL_HOME } "
2020-08-19 13:26:03 +09:00
echo "[*] Cloning Mempool repo from ${ MEMPOOL_REPO_URL } "
2020-08-25 20:19:01 +09:00
osSudo " ${ MEMPOOL_USER } " git config --global advice.detachedHead false
osSudo " ${ MEMPOOL_USER } " git clone --branch " ${ MEMPOOL_REPO_BRANCH } " " ${ MEMPOOL_REPO_URL } " " ${ MEMPOOL_HOME } / ${ MEMPOOL_REPO_NAME } "
2020-08-19 13:26:03 +09:00
2022-03-07 12:57:43 +01:00
exit 0
2020-08-25 20:19:01 +09:00
####################
# Tor installation #
####################
2020-08-19 13:26:03 +09:00
2020-09-10 14:04:27 +09:00
if [ " ${ TOR_INSTALL } " = ON ] ; then
2020-08-19 13:26:03 +09:00
2020-08-25 20:19:01 +09:00
echo "[*] Installing Tor package"
osPackageInstall " ${ TOR_PKG } "
2020-08-19 13:26:03 +09:00
2020-08-25 20:19:01 +09:00
echo "[*] Installing Tor base configuration"
osSudo " ${ ROOT_USER } " install -c -m 644 " ${ MEMPOOL_HOME } / ${ MEMPOOL_REPO_NAME } /production/torrc" " ${ TOR_HOME } /torrc"
2020-08-19 13:26:03 +09:00
2020-08-25 20:19:01 +09:00
echo "[*] Adding Tor HS configuration"
if ! grep " ${ MEMPOOL_TOR_HS } " /etc/tor/torrc >/dev/null 2>& 1; then
osSudo " ${ ROOT_USER } " /bin/sh -c "echo HiddenServiceDir ${ TOR_RESOURCES } / ${ MEMPOOL_TOR_HS } / >> ${ TOR_CONFIGURATION } "
osSudo " ${ ROOT_USER } " /bin/sh -c "echo HiddenServicePort 80 127.0.0.1:81 >> ${ TOR_CONFIGURATION } "
osSudo " ${ ROOT_USER } " /bin/sh -c "echo HiddenServiceVersion 3 >> ${ TOR_CONFIGURATION } "
fi
2020-08-19 13:26:03 +09:00
2022-03-07 12:57:43 +01:00
# TODO: ADD mempool, bitcoin, bisq to tor group
# TODO: detect what the tor group is on this OS somehow
2020-08-25 20:19:01 +09:00
# start tor now so it can bootstrap in time for bitcoin starting a few mins later
echo "[*] Starting Tor service"
osSudo " ${ ROOT_USER } " service tor start
2020-08-19 13:26:03 +09:00
fi
2020-08-25 20:19:01 +09:00
########################
# Bitcoin installation #
########################
2020-08-19 13:26:03 +09:00
2020-09-10 14:04:27 +09:00
if [ " ${ BITCOIN_INSTALL } " = ON ] ; then
2020-08-19 13:26:03 +09:00
2020-08-25 20:19:01 +09:00
echo "[*] Creating Bitcoin user with Tor access"
osSudo " ${ ROOT_USER } " useradd -d " ${ BITCOIN_HOME } " -G " ${ TOR_GROUP } " " ${ BITCOIN_USER } "
echo "[*] Creating Bitcoin data folder"
osSudo " ${ ROOT_USER } " mkdir -p " ${ BITCOIN_HOME } "
osSudo " ${ ROOT_USER } " chown " ${ BITCOIN_USER } : ${ BITCOIN_GROUP } " " ${ BITCOIN_HOME } "
osSudo " ${ BITCOIN_USER } " ln -s . .bitcoin
echo "[*] Cloning Bitcoin repo from ${ BITCOIN_REPO_URL } "
osSudo " ${ BITCOIN_USER } " git config --global advice.detachedHead false
osSudo " ${ BITCOIN_USER } " git clone --branch " ${ BITCOIN_REPO_BRANCH } " " ${ BITCOIN_REPO_URL } " " ${ BITCOIN_HOME } / ${ BITCOIN_REPO_NAME } "
echo "[*] Building Bitcoin from source repo"
osSudo " ${ BITCOIN_USER } " sh -c "cd ${ BITCOIN_REPO_NAME } && ./autogen.sh --quiet && ./configure --quiet --disable-wallet --with-incompatible-bdb && make -j4"
echo "[*] Installing Bitcoin binaries into OS"
osSudo " ${ ROOT_USER } " sh -c "cd ${ BITCOIN_HOME } / ${ BITCOIN_REPO_NAME } && make install"
echo "[*] Installing Bitcoin configuration"
osSudo " ${ ROOT_USER } " install -c -o " ${ BITCOIN_USER } " -g " ${ BITCOIN_GROUP } " -m 644 " ${ MEMPOOL_HOME } / ${ MEMPOOL_REPO_NAME } /production/bitcoin.conf" " ${ BITCOIN_HOME } /bitcoin.conf"
2020-08-19 13:26:03 +09:00
fi
2020-08-25 20:19:01 +09:00
#########################
# Elements installation #
#########################
2020-08-19 13:26:03 +09:00
2020-09-10 14:04:27 +09:00
if [ " ${ ELEMENTS_INSTALL } " = ON ] ; then
2020-08-19 13:26:03 +09:00
2020-08-25 20:19:01 +09:00
echo "[*] Creating Elements user with Tor access"
osSudo " ${ ROOT_USER } " useradd -d " ${ ELEMENTS_HOME } " -G " ${ TOR_GROUP } " " ${ ELEMENTS_USER } "
echo "[*] Creating Elements data folder"
osSudo " ${ ROOT_USER } " mkdir -p " ${ ELEMENTS_HOME } "
osSudo " ${ ROOT_USER } " chown " ${ ELEMENTS_USER } : ${ ELEMENTS_GROUP } " " ${ ELEMENTS_HOME } "
osSudo " ${ ELEMENTS_USER } " ln -s . .elements
echo "[*] Cloning Elements repo from ${ ELEMENTS_REPO_URL } "
osSudo " ${ ELEMENTS_USER } " git config --global advice.detachedHead false
osSudo " ${ ELEMENTS_USER } " git clone --branch " ${ ELEMENTS_REPO_BRANCH } " " ${ ELEMENTS_REPO_URL } " " ${ ELEMENTS_HOME } / ${ ELEMENTS_REPO_NAME } "
echo "[*] Building Elements from source repo"
osSudo " ${ ELEMENTS_USER } " sh -c "cd ${ ELEMENTS_REPO_NAME } && ./autogen.sh --quiet && ./configure --quiet --disable-wallet --with-incompatible-bdb && make -j4"
echo "[*] Installing Elements binaries into OS"
osSudo " ${ ROOT_USER } " sh -c "cd ${ ELEMENTS_HOME } / ${ ELEMENTS_REPO_NAME } && make install"
echo "[*] Installing Elements configuration"
osSudo " ${ ROOT_USER } " install -c -o " ${ ELEMENTS_USER } " -g " ${ ELEMENTS_GROUP } " -m 644 " ${ MEMPOOL_HOME } / ${ MEMPOOL_REPO_NAME } /production/bitcoin.conf" " ${ ELEMENTS_HOME } /bitcoin.conf"
2020-08-19 13:26:03 +09:00
fi
2020-08-25 20:19:01 +09:00
###################################
# Bitcoin -> Electrs installation #
###################################
2020-08-19 13:26:03 +09:00
echo "[*] Creating Bitcoin Electrs data folder"
2020-08-25 20:19:01 +09:00
osSudo " ${ ROOT_USER } " mkdir -p " ${ BITCOIN_ELECTRS_HOME } "
osSudo " ${ ROOT_USER } " chown " ${ BITCOIN_USER } : ${ BITCOIN_GROUP } " " ${ BITCOIN_ELECTRS_HOME } "
2020-08-19 13:26:03 +09:00
echo "[*] Cloning Bitcoin Electrs repo from ${ BITCOIN_ELECTRS_REPO_URL } "
2020-08-25 20:19:01 +09:00
osSudo " ${ BITCOIN_USER } " git config --global advice.detachedHead false
2020-10-23 13:35:20 +09:00
osSudo " ${ BITCOIN_USER } " git clone --branch " ${ ELECTRS_REPO_BRANCH } " " ${ ELECTRS_REPO_URL } " " ${ BITCOIN_HOME } / ${ ELECTRS_REPO_NAME } "
2020-08-19 13:26:03 +09:00
echo "[*] Installing Rust from rustup.rs"
2020-08-25 20:19:01 +09:00
osSudo " ${ BITCOIN_USER } " sh -c "cd ${ BITCOIN_ELECTRS_HOME } && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh"
2020-08-19 13:26:03 +09:00
echo "[*] Building Bitcoin Electrs release binary"
2020-08-25 20:19:01 +09:00
osSudo " ${ BITCOIN_USER } " sh -c "cd ${ BITCOIN_ELECTRS_HOME } && cargo run --release --bin electrs -- --version"
2020-08-19 13:26:03 +09:00
2020-08-25 20:19:01 +09:00
##################################
# Liquid -> Electrs installation #
##################################
2020-08-19 13:26:03 +09:00
echo "[*] Creating Liquid Electrs data folder"
2020-08-25 20:19:01 +09:00
osSudo " ${ ROOT_USER } " mkdir -p " ${ ELEMENTS_ELECTRS_HOME } "
osSudo " ${ ROOT_USER } " chown " ${ ELEMENTS_USER } : ${ ELEMENTS_GROUP } " " ${ ELEMENTS_ELECTRS_HOME } "
2020-08-19 13:26:03 +09:00
echo "[*] Cloning Liquid Electrs repo from ${ ELEMENTS_ELECTRS_REPO_URL } "
2020-08-25 20:19:01 +09:00
osSudo " ${ ELEMENTS_USER } " git config --global advice.detachedHead false
osSudo " ${ ELEMENTS_USER } " git clone --branch " ${ ELECTRS_REPO_BRANCH } " " ${ ELECTRS_REPO_URL } " " ${ MEMPOOL_HOME } / ${ MEMPOOL_REPO_NAME } "
2020-08-19 13:26:03 +09:00
echo "[*] Installing Rust from rustup.rs"
2020-08-25 20:19:01 +09:00
osSudo " ${ ELEMENTS_USER } " sh -c "cd ${ ELEMENTS_ELECTRS_HOME } && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh"
2020-08-19 13:26:03 +09:00
echo "[*] Building Liquid Electrs release binary"
2020-08-25 20:19:01 +09:00
osSudo " ${ ELEMENTS_USER } " sh -c "cd ${ ELEMENTS_ELECTRS_HOME } && cargo run --release --features liquid --bin electrs -- --network liquid --version"
2020-08-19 13:26:03 +09:00
2020-08-25 20:19:01 +09:00
#####################
# Bisq installation #
#####################
2020-08-19 13:26:03 +09:00
2020-09-10 14:04:27 +09:00
if [ " ${ BISQ_INSTALL } " = ON ] ; then
2020-08-19 13:26:03 +09:00
2020-08-25 20:19:01 +09:00
echo "[*] Creating Bisq user with Tor access"
osSudo " ${ BISQ_USER } " useradd -d " ${ BISQ_HOME } " -G " ${ TOR_GROUP } " " ${ BISQ_USER } "
2020-08-19 13:26:03 +09:00
2020-08-25 20:19:01 +09:00
echo "[*] Creating Bisq data folder"
osSudo " ${ BISQ_USER } " mkdir -p " ${ BISQ_HOME } "
osSudo " ${ BISQ_USER } " chown " ${ BISQ_USER } : ${ BISQ_GROUP } " " ${ BISQ_HOME } "
2020-08-19 13:26:03 +09:00
2020-08-25 20:19:01 +09:00
echo "[*] Cloning Bisq top-level repo"
osSudo " ${ BISQ_USER } " git clone --branch " ${ BISQ_REPO_BRANCH } " " ${ BISQ_REPO_URL } " " ${ BISQ_HOME } / ${ BISQ_REPO_NAME } "
2020-08-19 13:26:03 +09:00
2020-08-25 20:19:01 +09:00
echo "[*] Installing OpenJDK 10.0.2 from Bisq install_java.sh script"
osSudo " ${ ROOT_USER } " " ${ BISQ_HOME } / ${ BISQ_REPO_NAME } /scripts/install_java.sh"
2020-08-19 13:26:03 +09:00
fi
2020-08-25 20:19:01 +09:00
################################
# Bitcoin instance for Mainnet #
################################
2020-08-19 13:26:03 +09:00
2020-09-10 14:04:27 +09:00
if [ " ${ BITCOIN_MAINNET_ENABLE } " = ON ] ; then
2020-08-25 20:19:01 +09:00
echo "[*] Installing Bitcoin Mainnet RPC credentials"
osSudo " ${ ROOT_USER } " sed -i -e "s/__BITCOIN_MAINNET_RPC_USER__/ ${ BITCOIN_MAINNET_RPC_USER } /" " ${ BITCOIN_HOME } /bitcoin.conf"
osSudo " ${ ROOT_USER } " sed -i -e "s/__BITCOIN_MAINNET_RPC_PASS__/ ${ BITCOIN_MAINNET_RPC_PASS } /" " ${ BITCOIN_HOME } /bitcoin.conf"
echo "[*] Installing Bitcoin Mainnet service"
osSudo " ${ ROOT_USER } " install -c -o " ${ ROOT_USER } " -g " ${ ROOT_GROUP } " -m 644 " ${ MEMPOOL_HOME } / ${ MEMPOOL_REPO_NAME } /production/bitcoin-mainnet.service" " ${ DEBIAN_SERVICE_HOME } "
2020-08-19 13:26:03 +09:00
fi
2020-08-25 20:19:01 +09:00
################################
# Bitcoin instance for Testnet #
################################
2020-08-19 13:26:03 +09:00
2020-09-10 14:04:27 +09:00
if [ " ${ BITCOIN_TESTNET_ENABLE } " = ON ] ; then
2020-08-25 20:19:01 +09:00
echo "[*] Installing Bitcoin Testnet RPC credentials"
osSudo " ${ ROOT_USER } " sed -i -e "s/__BITCOIN_TESTNET_RPC_USER__/ ${ BITCOIN_TESTNET_RPC_USER } /" " ${ BITCOIN_TESTNET_DATA } /bitcoin.conf"
osSudo " ${ ROOT_USER } " sed -i -e "s/__BITCOIN_TESTNET_RPC_PASS__/ ${ BITCOIN_TESTNET_RPC_PASS } /" " ${ BITCOIN_TESTNET_DATA } /bitcoin.conf"
echo "[*] Installing Bitcoin Testnet service"
osSudo " ${ ROOT_USER } " install -c -o " ${ ROOT_USER } " -g " ${ ROOT_GROUP } " -m 644 " ${ MEMPOOL_HOME } / ${ MEMPOOL_REPO_NAME } /production/bitcoin-testnet.service" " ${ DEBIAN_SERVICE_HOME } "
2020-08-19 13:26:03 +09:00
fi
2020-08-25 20:19:01 +09:00
########################################
# Electrs instance for Bitcoin Mainnet #
########################################
2020-08-19 13:26:03 +09:00
2020-09-10 14:04:27 +09:00
if [ " ${ BITCOIN_MAINNET_ENABLE } " = ON ] ; then
2020-08-25 20:19:01 +09:00
fi
########################################
# Electrs instance for Bitcoin Testnet #
########################################
2020-09-10 14:04:27 +09:00
if [ " ${ BITCOIN_TESTNET_ENABLE } " = ON ] ; then
2020-08-25 20:19:01 +09:00
fi
########################################
# Electrs instance for Elements Liquid #
########################################
2020-08-19 13:26:03 +09:00
2020-09-10 14:04:27 +09:00
if [ " ${ ELEMENTS_LIQUID_ENABLE } " = ON ] ; then
2020-08-25 20:19:01 +09:00
fi
2020-08-19 13:26:03 +09:00
2020-08-25 20:19:01 +09:00
#####################################
# Bisq instance for Bitcoin Mainnet #
#####################################
2020-08-19 13:26:03 +09:00
2020-09-10 14:04:27 +09:00
if [ " ${ BISQ_MAINNET_ENABLE } " = ON ] ; then
2020-08-25 20:19:01 +09:00
echo "[*] Installing Bisq service"
osSudo " ${ ROOT_USER } " install -c -o " ${ ROOT_USER } " -g " ${ ROOT_GROUP } " -m 644 " ${ BISQ_HOME } / ${ BISQ_REPO_NAME } /seednode/bisq.service" " ${ DEBIAN_SERVICE_HOME } /bisq.service"
osSudo " ${ ROOT_USER } " sed -i -e "s/#Requires=bitcoin.service/Requires=bitcoin.service/" " ${ DEBIAN_SERVICE_HOME } /bisq.service"
osSudo " ${ ROOT_USER } " sed -i -e "s/#BindsTo=bitcoin.service/BindsTo=bitcoin.service/" " ${ DEBIAN_SERVICE_HOME } /bisq.service"
osSudo " ${ ROOT_USER } " sed -i -e "s/__BISQ_REPO_NAME__/ ${ BISQ_REPO_NAME } /" " ${ DEBIAN_SERVICE_HOME } /bisq.service"
osSudo " ${ ROOT_USER } " sed -i -e "s!__BISQ_HOME__! ${ BISQ_HOME } !" " ${ DEBIAN_SERVICE_HOME } /bisq.service"
echo "[*] Installing Bisq environment file"
osSudo " ${ ROOT_USER } " install -c -o " ${ ROOT_USER } " -g " ${ ROOT_GROUP } " -m 644 " ${ BISQ_HOME } / ${ BISQ_REPO_NAME } /seednode/bisq.env" " ${ DEBIAN_ENV_HOME } /bisq.env"
osSudo " ${ ROOT_USER } " sed -i -e "s!__BISQ_APP_NAME__! ${ BISQ_APP_NAME } !" " ${ DEBIAN_ENV_HOME } /bisq.env"
osSudo " ${ ROOT_USER } " sed -i -e "s!__BISQ_HOME__! ${ BISQ_HOME } !" " ${ DEBIAN_ENV_HOME } /bisq.env"
echo "[*] Configuring Bisq environment file with Bitcoin RPC credentials"
osSudo " ${ ROOT_USER } " sed -i -e "s/__BITCOIN_P2P_HOST__/ ${ BITCOIN_MAINNET_P2P_HOST } /" " ${ DEBIAN_ENV_HOME } /bisq.env"
osSudo " ${ ROOT_USER } " sed -i -e "s/__BITCOIN_P2P_PORT__/ ${ BITCOIN_MAINNET_P2P_PORT } /" " ${ DEBIAN_ENV_HOME } /bisq.env"
osSudo " ${ ROOT_USER } " sed -i -e "s/__BITCOIN_RPC_HOST__/ ${ BITCOIN_MAINNET_RPC_HOST } /" " ${ DEBIAN_ENV_HOME } /bisq.env"
osSudo " ${ ROOT_USER } " sed -i -e "s/__BITCOIN_RPC_PORT__/ ${ BITCOIN_MAINNET_RPC_PORT } /" " ${ DEBIAN_ENV_HOME } /bisq.env"
osSudo " ${ ROOT_USER } " sed -i -e "s/__BITCOIN_RPC_USER__/ ${ BITCOIN_MAINNET_RPC_USER } /" " ${ DEBIAN_ENV_HOME } /bisq.env"
osSudo " ${ ROOT_USER } " sed -i -e "s/__BITCOIN_RPC_PASS__/ ${ BITCOIN_MAINNET_RPC_PASS } /" " ${ DEBIAN_ENV_HOME } /bisq.env"
echo "[*] Checking out Bisq ${ BISQ_LATEST_RELEASE } "
osSudo " ${ BISQ_USER } " sh -c "cd ${ BISQ_HOME } / ${ BISQ_REPO_NAME } && git checkout ${ BISQ_LATEST_RELEASE } "
echo "[*] Performing Git LFS pull"
osSudo " ${ BISQ_USER } " sh -c "cd ${ BISQ_HOME } / ${ BISQ_REPO_NAME } && git lfs pull"
echo "[*] Building Bisq from source"
osSudo " ${ BISQ_USER } " sh -c "cd ${ BISQ_HOME } / ${ BISQ_REPO_NAME } && ./gradlew build -x test < /dev/null" # redirect from /dev/null is necessary to workaround gradlew non-interactive shell hanging issue
echo "[*] Updating Bitcoin configuration for Bisq"
osSudo " ${ ROOT_USER } " sed -i -e "s/#blocknotify/blocknotify/" " ${ BITCOIN_HOME } /bitcoin.conf"
osSudo " ${ BITCOIN_USER } " install -c -o " ${ BITCOIN_USER } " -g " ${ BITCOIN_GROUP } " -m 755 " ${ BISQ_HOME } / ${ BISQ_REPO_NAME } /seednode/blocknotify.sh" " ${ BITCOIN_HOME } /blocknotify.sh"
2020-08-19 13:26:03 +09:00
fi
##### Mempool -> Bitcoin Mainnet instance
2020-09-10 14:04:27 +09:00
if [ " ${ BITCOIN_MAINNET_ENABLE } " = ON ] ; then
2020-08-25 20:19:01 +09:00
echo "[*] Creating Mempool instance for Bitcoin Mainnet"
osSudo " ${ MEMPOOL_USER } " git config --global advice.detachedHead false
osSudo " ${ MEMPOOL_USER } " git clone --branch " ${ MEMPOOL_REPO_BRANCH } " " ${ MEMPOOL_REPO_URL } " " ${ MEMPOOL_HOME } /mainnet"
2020-08-19 13:26:03 +09:00
fi
##### nginx
echo "[*] Adding Nginx configuration"
2020-08-25 20:19:01 +09:00
osSudo " ${ ROOT_USER } " install -c -o " ${ ROOT_USER } " -g " ${ ROOT_GROUP } " -m 644 " ${ MEMPOOL_HOME } / ${ MEMPOOL_REPO_NAME } /production/nginx.conf" " ${ NGINX_CONFIGURATION } "
2020-08-19 13:26:03 +09:00
echo "[*] Restarting Nginx"
2020-08-25 20:19:01 +09:00
osSudo " ${ ROOT_USER } " service nginx restart
2020-08-19 13:26:03 +09:00
##### OS systemd
echo "[*] Updating systemd daemon configuration"
2020-08-25 20:19:01 +09:00
osSudo " ${ ROOT_USER } " systemctl daemon-reload
2020-09-10 14:04:27 +09:00
if [ " ${ TOR_ENABLE } " = ON ] ; then
2020-08-25 20:19:01 +09:00
osSudo " ${ ROOT_USER } " systemctl enable tor.service
2020-08-19 13:26:03 +09:00
fi
2020-09-10 14:04:27 +09:00
if [ " ${ BITCOIN_MAINNET_ENABLE } " = ON ] ; then
2020-08-25 20:19:01 +09:00
osSudo " ${ ROOT_USER } " systemctl enable bitcoin.service
osSudo " ${ ROOT_USER } " systemctl enable electrs.service
osSudo " ${ ROOT_USER } " systemctl enable mempool.service
2020-08-19 13:26:03 +09:00
fi
2020-09-10 14:04:27 +09:00
if [ " ${ BITCOIN_TESTNET_ENABLE } " = ON ] ; then
2020-08-25 20:19:01 +09:00
osSudo " ${ ROOT_USER } " systemctl enable bitcoin-testnet.service
osSudo " ${ ROOT_USER } " systemctl enable electrs-testnet.service
osSudo " ${ ROOT_USER } " systemctl enable mempool-testnet.service
2020-08-19 13:26:03 +09:00
fi
2020-09-10 14:04:27 +09:00
if [ " ${ BISQ_MAINNET_ENABLE } " = ON ] ; then
2020-08-25 20:19:01 +09:00
osSudo " ${ ROOT_USER } " systemctl enable bisq.service
osSudo " ${ ROOT_USER } " systemctl enable mempool-bisq.service
2020-08-19 13:26:03 +09:00
fi
2020-09-10 14:04:27 +09:00
if [ " ${ ELEMENTS_LIQUID_ENABLE } " = ON ] ; then
2020-08-25 20:19:01 +09:00
osSudo " ${ ROOT_USER } " systemctl enable liquid.service
osSudo " ${ ROOT_USER } " systemctl enable electrs-liquid.service
osSudo " ${ ROOT_USER } " systemctl enable mempool-liquid.service
2020-08-19 13:26:03 +09:00
fi
##### OS services
2020-09-10 14:04:27 +09:00
if [ " ${ BITCOIN_MAINNET_ENABLE } " = ON ] ; then
2020-08-25 20:19:01 +09:00
echo "[*] Starting Bitcoin Mainnet"
osSudo " ${ ROOT_USER } " systemctl start bitcoin
osSudo " ${ ROOT_USER } " systemctl start electrs
osSudo " ${ ROOT_USER } " journalctl --no-pager --unit bitcoin
2020-08-19 13:26:03 +09:00
fi
2020-09-10 14:04:27 +09:00
if [ " ${ BITCOIN_TESTNET_ENABLE } " = ON ] ; then
2020-08-25 20:19:01 +09:00
echo "[*] Starting Bitcoin Testnet"
osSudo " ${ ROOT_USER } " systemctl start bitcoin-testnet
osSudo " ${ ROOT_USER } " systemctl start electrs-testnet
osSudo " ${ ROOT_USER } " journalctl --no-pager --unit bitcoin-testnet
2020-08-19 13:26:03 +09:00
fi
2020-09-10 14:04:27 +09:00
if [ " ${ ELEMENTS_LIQUID_ENABLE } " = ON ] ; then
2020-08-25 20:19:01 +09:00
echo "[*] Starting Elements Liquid"
osSudo " ${ ROOT_USER } " systemctl start liquid
osSudo " ${ ROOT_USER } " systemctl start electrs-liquid
osSudo " ${ ROOT_USER } " journalctl --no-pager --unit liquid
2020-08-19 13:26:03 +09:00
fi
2020-08-25 20:19:01 +09:00
osSudo " ${ ROOT_USER } " tail " ${ BITCOIN_HOME } /debug.log"
2020-08-19 13:26:03 +09:00
##### OS notes
echo "[*] Adding notes to motd"
2020-08-25 20:19:01 +09:00
osSudo " ${ ROOT_USER } " sh -c 'echo " " >> /etc/motd'
2020-08-19 13:26:03 +09:00
##### OS firewall
echo "[*] Preparing firewall"
2020-08-25 20:19:01 +09:00
osSudo " ${ ROOT_USER } " ufw default deny incoming
osSudo " ${ ROOT_USER } " ufw default allow outgoing
osSudo " ${ ROOT_USER } " ufw allow from any to any port ${ BITCOIN_MAINNET_P2P_PORT } proto tcp
osSudo " ${ ROOT_USER } " ufw allow from any to any port ${ BITCOIN_TESTNET_P2P_PORT } proto tcp
osSudo " ${ ROOT_USER } " ufw allow from any to any port ${ ELEMENTS_LIQUID_P2P_PORT } proto tcp
2020-08-19 13:26:03 +09:00
##### finish
echo '[*] Done!'
echo ' '
echo '[*] Follow all the README instructions!'
echo '[*] AND DONT FORGET TO ENABLE FIREWALL!!!11'
echo '[*] type "ufw enable" to enable firewall'
echo ' '
exit 0