From 976a58d15ca7b4fba7e68c63a8f95af5d745a427 Mon Sep 17 00:00:00 2001 From: wiz Date: Tue, 25 Aug 2020 20:19:01 +0900 Subject: [PATCH] More WIP on new installer --- install | 866 +++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 634 insertions(+), 232 deletions(-) mode change 100644 => 100755 install diff --git a/install b/install old mode 100644 new mode 100755 index cd2a8ea2a..793c27568 --- a/install +++ b/install @@ -1,33 +1,69 @@ -#!/bin/sh +#!/usr/local/bin/zsh set -e +echo -n "Initializing..." -echo "[*] Mempool installation script for Debian/Ubuntu" +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 ######################################## ##### mempool installation options ##### ######################################## -TOR_ONLY=true -#HOSTNAME= - +# tor onion and clearnet hostname TOR_INSTALL=true +CERTBOT_INSTALL=true + +# install 3 network daemons BITCOIN_INSTALL=true BISQ_INSTALL=true ELEMENTS_INSTALL=true -BITCOIN_ELECTRS_LIGHT_MODE=true -ELEMENTS_ELECTRS_LIGHT_MODE=true - +# configure 4 network instances BITCOIN_MAINNET_ENABLE=true BITCOIN_TESTNET_ENABLE=true BISQ_MAINNET_ENABLE=true ELEMENTS_LIQUID_ENABLE=true -################################################ -##### end of mempool configuration options ##### -################################################ +# enable lightmode and disable compaction to fit on 1TB SSD drive +BITCOIN_ELECTRS_LIGHT_MODE=true +BITCOIN_ELECTRS_COMPACTION=false +ELEMENTS_ELECTRS_LIGHT_MODE=true +ELEMENTS_ELECTRS_COMPACTION=false -##### P2P / RPC / HTTP network communication +# automaitcally configure firewall +FIREWALL_CONFIGURE=true + +############ +# probe OS # +############ + +HOSTNAME=$(hostname) + +# get newest zpool if using zfs +ZPOOL="" +[ "${OS}" = FreeBSD ] && ZPOOL=$(zpool list -H|tail -1|cut -f 1) + +MD5=md5sum +[ "${OS}" = FreeBSD ] && MD5=md5 + +################################################## +##### P2P / RPC / HTTP network communication ##### +################################################## # used for bisq and firewall configuration BITCOIN_MAINNET_P2P_HOST=127.0.0.1 @@ -35,9 +71,9 @@ BITCOIN_MAINNET_P2P_PORT=8333 # used for RPC communication BITCOIN_MAINNET_RPC_HOST=127.0.0.1 BITCOIN_MAINNET_RPC_PORT=8332 -# leave blank to generate random credentials -#BITCOIN_MAINNET_RPC_USER= -#BITCOIN_MAINNET_RPC_PASS= +# 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}') # used for firewall configuration BITCOIN_TESTNET_P2P_HOST=127.0.0.1 @@ -45,9 +81,9 @@ BITCOIN_TESTNET_P2P_PORT=18333 # used for RPC communication BITCOIN_TESTNET_RPC_HOST=127.0.0.1 BITCOIN_TESTNET_RPC_PORT=18332 -# leave blank to generate random credentials -#BITCOIN_TESTNET_RPC_USER= -#BITCOIN_TESTNET_RPC_PASS= +# 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}') # used by bisq to receive notifications from bitcoind about new blocks BISQ_BLOCKNOTIFY_HOST=127.0.0.1 @@ -59,62 +95,51 @@ ELEMENTS_LIQUID_P2P_PORT=7042 # used for RPC communication ELEMENTS_LIQUID_RPC_HOST=127.0.0.1 ELEMENTS_LIQUID_RPC_PORT=7041 -# leave blank to generate random credentials -#ELEMENTS_LIQUID_RPC_USER= -#ELEMENTS_LIQUID_RPC_PASS= +# 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}') # set either socket or TCP host/port, not both -ELECTRS_MAINNET_HTTP_SOCK=/tmp/bitcoin.mainnet.electrs -#ELECTRS_MAINNET_HTTP_HOST=127.0.0.1 -#ELECTRS_MAINNET_HTTP_PORT=3000 +#ELECTRS_MAINNET_HTTP_SOCK=/tmp/bitcoin.mainnet.electrs +ELECTRS_MAINNET_HTTP_HOST=127.0.0.1 +ELECTRS_MAINNET_HTTP_PORT=3000 # set either socket or TCP host/port, not both -ELECTRS_TESTNET_HTTP_SOCK=/tmp/bitcoin.testnet.electrs -#ELECTRS_TESTNET_HTTP_HOST=127.0.0.1 -#ELECTRS_TESTNET_HTTP_PORT=3002 +#ELECTRS_TESTNET_HTTP_SOCK=/tmp/bitcoin.testnet.electrs +ELECTRS_TESTNET_HTTP_HOST=127.0.0.1 +ELECTRS_TESTNET_HTTP_PORT=3002 # set either socket or TCP host/port, not both -ELECTRS_LIQUID_HTTP_SOCK=/tmp/elements.liquid.electrs -#ELECTRS_LIQUID_HTTP_HOST=127.0.0.1 -#ELECTRS_LIQUID_HTTP_PORT=3001 +#ELECTRS_LIQUID_HTTP_SOCK=/tmp/elements.liquid.electrs +ELECTRS_LIQUID_HTTP_HOST=127.0.0.1 +ELECTRS_LIQUID_HTTP_PORT=3001 # set either socket or TCP host/port, not both -MEMPOOL_MAINNET_HTTP_SOCK=/tmp/bitcoin.mainnet.mempool -#MEMPOOL_MAINNET_HTTP_HOST=127.0.0.1 -#MEMPOOL_MAINNET_HTTP_PORT=8999 +#MEMPOOL_MAINNET_HTTP_SOCK=/tmp/bitcoin.mainnet.mempool +MEMPOOL_MAINNET_HTTP_HOST=127.0.0.1 +MEMPOOL_MAINNET_HTTP_PORT=8999 # set either socket or TCP host/port, not both -MEMPOOL_TESTNET_HTTP_SOCK=/tmp/bitcoin.testnet.mempool -#MEMPOOL_TESTNET_HTTP_HOST=127.0.0.1 -#MEMPOOL_TESTNET_HTTP_PORT=8997 +#MEMPOOL_TESTNET_HTTP_SOCK=/tmp/bitcoin.testnet.mempool +MEMPOOL_TESTNET_HTTP_HOST=127.0.0.1 +MEMPOOL_TESTNET_HTTP_PORT=8997 # set either socket or TCP host/port, not both -MEMPOOL_BISQ_HTTP_SOCK=/tmp/bitcoin.bisq.mempool -#MEMPOOL_BISQ_HTTP_HOST=127.0.0.1 -#MEMPOOL_BISQ_HTTP_PORT=8996 +#MEMPOOL_BISQ_HTTP_SOCK=/tmp/bitcoin.bisq.mempool +MEMPOOL_BISQ_HTTP_HOST=127.0.0.1 +MEMPOOL_BISQ_HTTP_PORT=8996 # set either socket or TCP host/port, not both -MEMPOOL_LIQUID_HTTP_SOCK=/tmp/elements.liquid.mempool -#MEMPOOL_LIQUID_HTTP_HOST=127.0.0.1 -#MEMPOOL_LIQUID_HTTP_PORT=8998 +#MEMPOOL_LIQUID_HTTP_SOCK=/tmp/elements.liquid.mempool +MEMPOOL_LIQUID_HTTP_HOST=127.0.0.1 +MEMPOOL_LIQUID_HTTP_PORT=8998 ##### OS options, should be automatically detected # where systemd services get installed -OS_SERVICE_HOME=/etc/systemd/system +DEBIAN_SERVICE_HOME=/etc/systemd/system # where environment variables for services are set -OS_ENV_HOME=/etc/default - -# package needed for just certbot test before full install -CERTBOT_PKG=(python-certbot) - -# packages needed for mempool ecosystem -OS_PKG=(vim curl screen zsh openssl python3) -OS_PKG+=(build-essential git git-lfs clang cmake) -OS_PKG+=(autotools-dev autoconf automake pkg-config bsdmainutils) -OS_PKG+=(libevent-dev libdb-dev libssl-dev libtool-dev autotools-dev) -OS_PKG+=(libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-test-dev libboost-thread-dev) -OS_PKG+=(nodejs npm mariadb-server nginx-core python-certbot-nginx rsync ufw) +DEBIAN_ENV_HOME=/etc/default # mempool data folder and user/group MEMPOOL_HOME=/mempool @@ -128,10 +153,23 @@ BITCOIN_USER=bitcoin BITCOIN_GROUP=bitcoin # bitcoin core data folder, needs about 300GB BITCOIN_HOME=/bitcoin + +# bitcoin testnet data +BITCOIN_TESTNET_DATA=${BITCOIN_HOME}/testnet3 # bitcoin electrs source/binaries BITCOIN_ELECTRS_HOME=${BITCOIN_HOME}/electrs -# bitcoin electrs data, needs about 350GB -BITCOIN_ELECTRS_DATA=/electrs + +# 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 # bisq user/group BISQ_USER=bisq @@ -146,14 +184,12 @@ ELEMENTS_GROUP=elements ELEMENTS_HOME=/elements # elements electrs source/binaries ELEMENTS_ELECTRS_HOME=${ELEMENTS_HOME}/electrs -# liquid electrs data, needs about 5GB -ELEMENTS_ELECTRS_DATA=/electrs +# tor package from apt-get or pkg +TOR_PKG=tor # tor user/group TOR_USER=debian-tor TOR_GROUP=debian-tor -# tor package from apt-get or pkg -TOR_PKG=tor NGINX_CONFIGURATION=/etc/nginx/nginx.conf @@ -175,17 +211,23 @@ MEMPOOL_LATEST_RELEASE=master BITCOIN_REPO_URL=https://github.com/bitcoin/bitcoin BITCOIN_REPO_NAME=bitcoin BITCOIN_REPO_BRANCH=master -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=$(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 '.' BISQ_REPO_URL=https://github.com/bisq-network/bisq BISQ_REPO_NAME=bisq BISQ_REPO_BRANCH=master -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=$(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 '.' ELEMENTS_REPO_URL=https://github.com/ElementsProject/elements ELEMENTS_REPO_NAME=elements ELEMENTS_REPO_BRANCH=master -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=$(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 '.' BITCOIN_ELECTRS_REPO_URL=https://github.com/mempool/electrs BITCOIN_ELECTRS_REPO_NAME=electrs @@ -197,6 +239,184 @@ ELEMENTS_ELECTRS_REPO_NAME=electrs ELEMENTS_ELECTRS_REPO_BRANCH=new-index ELEMENTS_ELECTRS_LATEST_RELEASE=new-index +####################### +##### OS packages ##### +####################### + +# package needed for just certbot test before full install +FREEBSD_CERTBOT_PKG=py37-certbot +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=() +FREEBSD_PKG+=(zsh sudo git screen vim-console curl wget calc neovim) +FREEBSD_PKG+=(openssh-portable open-vm-tools-nox11 py27-pip py37-pip) +FREEBSD_PKG+=(boost-libs autoconf automake gmake gcc libevent libtool pkgconf) +FREEBSD_PKG+=(node npm nginx rsync py37-certbot-nginx mariadb-server) + +############################# +##### 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) + osSudo "${ROOT_USER}" pkg update -y + ;; + Debian) + osSudo "${ROOT_USER}" DEBIAN_FRONTEND=noninteractive apt-get update -q + ;; + esac +} + +osPackageUpgrade() +{ + echo "[*] Upgrading OS packages $*" + case $OS in + FreeBSD) + osSudo "${ROOT_USER}" pkg upgrade -y $* + ;; + Debian) + osSudo "${ROOT_USER}" DEBIAN_FRONTEND=noninteractive apt-get upgrade -qq -y $* + ;; + esac +} + +osPackageInstall() +{ + echo "[*] Installing OS packages $*" + case $OS in + FreeBSD) + osSudo "${ROOT_USER}" pkg install -y $* + ;; + 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) + osSudo "${ROOT_USER}" pw useradd $* + ;; + Debian) + osSudo "${ROOT_USER}" useradd $* + ;; + esac +} + +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" + + zfs create -o "mountpoint=${ELEMENTS_HOME}/liquidv1" "${ZPOOL}/elements/liquidv1" + zfs create -o "mountpoint=${ELEMENTS_ELECTRS_HOME}" "${ZPOOL}/elements/electrs" + + # Bitcoin Mainnet + zfs create -o "mountpoint=${BITCOIN_HOME}/chainstate" "${ZPOOL}/bitcoin/chainstate" + zfs create -o "mountpoint=${BITCOIN_HOME}/indexes" "${ZPOOL}/bitcoin/indexes" + zfs create -o "mountpoint=${BITCOIN_HOME}/blocks" "${ZPOOL}/bitcoin/blocks" + + # Bitcoin Testnet + zfs create -o "mountpoint=${BITCOIN_TESTNET_DATA}" "${ZPOOL}/bitcoin/testnet" + zfs create -o "mountpoint=${BITCOIN_TESTNET_DATA}/blocks" "${ZPOOL}/bitcoin/testnet/blocks" + zfs create -o "mountpoint=${BITCOIN_TESTNET_DATA}/chainstate" "${ZPOOL}/bitcoin/testnet/chainstate" + zfs create -o "mountpoint=${BITCOIN_TESTNET_DATA}/indexes" "${ZPOOL}/bitcoin/testnet/indexes" + + zfs create -o "mountpoint=${BITCOIN_ELECTRS_HOME}" "${ZPOOL}/bitcoin/electrs" + + # electrs mainnet data + if [ "${BITCOIN_MAINNET_ENABLE}" = true ];then + 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 + if [ "${BITCOIN_TESTNET_ENABLE}" = true ];then + 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 + if [ "${ELEMENTS_LIQUID_ENABLE}" = true ];then + 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 + + if [ "${BISQ_INSTALL}" = true ];then + zfs create -o "mountpoint=${BISQ_HOME}" "${ZPOOL}/bisq" + fi + + zfs create -o "mountpoint=/mempool" "${ZPOOL}/mempool" + zfs create -o "mountpoint=/mysql" "${ZPOOL}/mysql" +} + ##### Perform sanity checks before trying anything # what OS running, what FS partitions, etc. @@ -208,297 +428,479 @@ ELEMENTS_ELECTRS_LATEST_RELEASE=new-index # does bitcoin exist? -# -certbot certonly --dry-run --standalone --agree-tos --register-unsafely-without-email -d +# dialog -##### OS packages +: ${DIALOG=dialog} -echo "[*] Updating OS apt sources" -sudo -H -i -u "${ROOT_USER}" DEBIAN_FRONTEND=noninteractive apt-get update -q -echo "[*] Upgrading OS packages" -sudo -H -i -u "${ROOT_USER}" DEBIAN_FRONTEND=noninteractive apt-get upgrade -qq -y -echo "[*] Installing OS packages" -sudo -H -i -u "${ROOT_USER}" DEBIAN_FRONTEND=noninteractive apt-get install -qq -y ${OS_PKG[@]} +: ${DIALOG_OK=0} +: ${DIALOG_CANCEL=1} +: ${DIALOG_HELP=2} +: ${DIALOG_EXTRA=3} +: ${DIALOG_ITEM_HELP=4} +: ${DIALOG_ESC=255} -##### Mempool top-level repo +: ${SIG_NONE=0} +: ${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$$ +trap "rm -f $input $output" $SIG_NONE $SIG_HUP $SIG_INT $SIG_TRAP $SIG_TERM + + +case "x$DIALOGOPTS" in +*--no-items*|*--noitem*) + CUT="cut -d: -f1,3" + ;; +*) + CUT="cat" + ;; +esac + +$CUT >$input <<-EOF + Apple:It's an apple.:off + Dog:No, that's not my dog.:ON + Orange:Yeah, that's juicy.:off + Chicken:Normally not a pet.:off + Cat:No, never put a dog and a cat together!:oN + Fish:Cats like fish.:On + Lemon:You know how it tastes.:on +EOF +cat $input | sed -e 's/^/"/' -e 's/:/" "/g' -e 's/$/"/' >$output +cat $output >$input + +$DIALOG --backtitle "No Such Organization" \ + --title "CHECKLIST BOX" "$@" \ + --checklist "Hi, this is a checklist box. You can use this to \n\ +present a list of choices which can be turned on or \n\ +off. If there are more items than can fit on the \n\ +screen, the list will be scrolled. You can use the \n\ +UP/DOWN arrow keys, the first letter of the choice as a \n\ +hot key, or the number keys 1-9 to choose an option. \n\ +Press SPACE to toggle an option on/off. \n\n\ + Which of the following are fruits?" 20 61 5 \ + --file $input 2> $output + +retval=$? + +tempfile=$output +case $retval in + $DIALOG_OK) + echo "Result: `cat $tempfile`";; + $DIALOG_CANCEL) + echo "Cancel pressed.";; + $DIALOG_HELP) + echo "Help pressed: `cat $tempfile`";; + $DIALOG_EXTRA) + echo "Extra button pressed.";; + $DIALOG_ITEM_HELP) + echo "Item-help button pressed: `cat $tempfile`";; + $DIALOG_ESC) + if test -s $tempfile ; then + cat $tempfile + else + echo "ESC pressed." + fi + ;; +esac + +DIALOG_ERROR=254 +export DIALOG_ERROR + +backtitle="Mempool Fullnode Installer" +returncode=0 + +while test $returncode != 1 && test $returncode != 250 +do +exec 3>&1 +value=`$DIALOG --ok-label "Submit" \ + --backtitle "$backtitle" "$@" \ + --form "Your fullnode will be installed as follows:" \ +20 60 0 \ + "Hostname:" 1 1 "$HOSTNAME" 1 10 40 0 \ + "UID:" 2 1 "$uid" 2 10 8 0 \ + "GID:" 3 1 "$gid" 3 10 8 0 \ + "HOME:" 4 1 "$home" 4 10 40 0 \ +2>&1 1>&3` +returncode=$? +exec 3>&- + +show=`echo "$value" |sed -e 's/^/ /'` + + case $returncode in + $DIALOG_CANCEL) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" \ + --yesno "Really quit?" 10 30 + case $? in + $DIALOG_OK) + break + ;; + $DIALOG_CANCEL) + returncode=99 + ;; + esac + ;; + $DIALOG_OK) + "$DIALOG" \ + --clear \ + --backtitle "$backtitle" --no-collapse --cr-wrap \ + --msgbox "Resulting data:\n\ +$show" 10 40 + ;; + $DIALOG_ERROR) + echo "ERROR!$value" + exit + ;; + $DIALOG_ESC) + echo "ESC pressed." + exit + ;; + *) + echo "Return code was $returncode" + exit + ;; + esac +done + + + +############################ +# START DOING ACTUAL STUFF # +############################ + +date +echo "[*] Mempool installation script for ${OS}" + +set +exit 0 + +################################### +# create filesystems if necessary # +################################### + +############################### +# Install all the OS packages # +############################### + +osPackageUpdate +osPackageUpgrade +osPackageInstallAll + +########################## +# Mempool top-level repo # +########################## echo "[*] Creating Mempool user with Tor access" -sudo -H -i -u "${ROOT_USER}" useradd -d "${MEMPOOL_HOME}" -G "${TOR_GROUP}" "${MEMPOOL_USER}" +osUserCreate -d "${MEMPOOL_HOME}" -g "${MEMPOOL_GROUP}" -G "${TOR_GROUP}" "${MEMPOOL_USER}" id "${MEMPOOL_USER}" echo "[*] Creating Mempool data folder" -sudo -H -i -u "${ROOT_USER}" mkdir -p "${MEMPOOL_HOME}" -sudo -H -i -u "${ROOT_USER}" chown "${MEMPOOL_USER}:${MEMPOOL_GROUP}" "${MEMPOOL_HOME}" +osSudo "${ROOT_USER}" mkdir -p "${MEMPOOL_HOME}" +osSudo "${ROOT_USER}" chown "${MEMPOOL_USER}:${MEMPOOL_GROUP}" "${MEMPOOL_HOME}" echo "[*] Cloning Mempool repo from ${MEMPOOL_REPO_URL}" -sudo -H -i -u "${MEMPOOL_USER}" git config --global advice.detachedHead false -sudo -H -i -u "${MEMPOOL_USER}" git clone --branch "${MEMPOOL_REPO_BRANCH}" "${MEMPOOL_REPO_URL}" "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}" +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}" -##### Tor installation +#################### +# Tor installation # +#################### if [ "${TOR_INSTALL}" = true ];then - echo "[*] Installing Tor package" - sudo -H -i -u "${ROOT_USER}" DEBIAN_FRONTEND=noninteractive apt-get install -qq -y "${TOR_PKG}" + echo "[*] Installing Tor package" + osPackageInstall "${TOR_PKG}" - echo "[*] Installing Tor base configuration" - sudo -H -i -u "${ROOT_USER}" install -c -m 644 "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/torrc" "${TOR_HOME}/torrc" + echo "[*] Installing Tor base configuration" + osSudo "${ROOT_USER}" install -c -m 644 "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/torrc" "${TOR_HOME}/torrc" - echo "[*] Adding Tor HS configuration" - if ! grep "${MEMPOOL_TOR_HS}" /etc/tor/torrc >/dev/null 2>&1;then - sudo -H -i -u "${ROOT_USER}" /bin/sh -c "echo HiddenServiceDir ${TOR_RESOURCES}/${MEMPOOL_TOR_HS}/ >> ${TOR_CONFIGURATION}" - sudo -H -i -u "${ROOT_USER}" /bin/sh -c "echo HiddenServicePort 80 127.0.0.1:81 >> ${TOR_CONFIGURATION}" - sudo -H -i -u "${ROOT_USER}" /bin/sh -c "echo HiddenServiceVersion 3 >> ${TOR_CONFIGURATION}" - fi + 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 - # start tor now so it can bootstrap in time for bitcoin starting a few mins later - echo "[*] Starting Tor service" - sudo -H -i -u "${ROOT_USER}" service tor start + # 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 fi -##### Bitcoin installation +######################## +# Bitcoin installation # +######################## if [ "${BITCOIN_INSTALL}" = true ];then - echo "[*] Creating Bitcoin user with Tor access" - sudo -H -i -u "${ROOT_USER}" useradd -d "${BITCOIN_HOME}" -G "${TOR_GROUP}" "${BITCOIN_USER}" - echo "[*] Creating Bitcoin data folder" - sudo -H -i -u "${ROOT_USER}" mkdir -p "${BITCOIN_HOME}" - sudo -H -i -u "${ROOT_USER}" chown "${BITCOIN_USER}:${BITCOIN_GROUP}" "${BITCOIN_HOME}" - sudo -H -i -u "${BITCOIN_USER}" ln -s . .bitcoin - echo "[*] Cloning Bitcoin repo from ${BITCOIN_REPO_URL}" - sudo -H -i -u "${BITCOIN_USER}" git config --global advice.detachedHead false - sudo -H -i -u "${BITCOIN_USER}" git clone --branch "${BITCOIN_REPO_BRANCH}" "${BITCOIN_REPO_URL}" "${BITCOIN_HOME}/${BITCOIN_REPO_NAME}" + 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" - sudo -H -i -u "${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" - sudo -H -i -u "${ROOT_USER}" sh -c "cd ${BITCOIN_HOME}/${BITCOIN_REPO_NAME} && make install" - echo "[*] Installing Bitcoin configuration" - sudo -H -i -u "${ROOT_USER}" install -c -o "${BITCOIN_USER}" -g "${BITCOIN_GROUP}" -m 644 "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/bitcoin.conf" "${BITCOIN_HOME}/bitcoin.conf" + 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" fi -##### Elements installation +######################### +# Elements installation # +######################### if [ "${ELEMENTS_INSTALL}" = true ];then - echo "[*] Creating Elements user with Tor access" - sudo -H -i -u "${ROOT_USER}" useradd -d "${ELEMENTS_HOME}" -G "${TOR_GROUP}" "${ELEMENTS_USER}" - echo "[*] Creating Elements data folder" - sudo -H -i -u "${ROOT_USER}" mkdir -p "${ELEMENTS_HOME}" - sudo -H -i -u "${ROOT_USER}" chown "${ELEMENTS_USER}:${ELEMENTS_GROUP}" "${ELEMENTS_HOME}" - sudo -H -i -u "${ELEMENTS_USER}" ln -s . .elements - echo "[*] Cloning Elements repo from ${ELEMENTS_REPO_URL}" - sudo -H -i -u "${ELEMENTS_USER}" git config --global advice.detachedHead false - sudo -H -i -u "${ELEMENTS_USER}" git clone --branch "${ELEMENTS_REPO_BRANCH}" "${ELEMENTS_REPO_URL}" "${ELEMENTS_HOME}/${ELEMENTS_REPO_NAME}" + 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" - sudo -H -i -u "${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" - sudo -H -i -u "${ROOT_USER}" sh -c "cd ${ELEMENTS_HOME}/${ELEMENTS_REPO_NAME} && make install" - echo "[*] Installing Elements configuration" - sudo -H -i -u "${ROOT_USER}" install -c -o "${ELEMENTS_USER}" -g "${ELEMENTS_GROUP}" -m 644 "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/bitcoin.conf" "${ELEMENTS_HOME}/bitcoin.conf" + 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" fi -##### Bitcoin -> Electrs installation +################################### +# Bitcoin -> Electrs installation # +################################### echo "[*] Creating Bitcoin Electrs data folder" -sudo -H -i -u "${ROOT_USER}" mkdir -p "${BITCOIN_ELECTRS_HOME}" -sudo -H -i -u "${ROOT_USER}" chown "${BITCOIN_USER}:${BITCOIN_GROUP}" "${BITCOIN_ELECTRS_HOME}" +osSudo "${ROOT_USER}" mkdir -p "${BITCOIN_ELECTRS_HOME}" +osSudo "${ROOT_USER}" chown "${BITCOIN_USER}:${BITCOIN_GROUP}" "${BITCOIN_ELECTRS_HOME}" echo "[*] Cloning Bitcoin Electrs repo from ${BITCOIN_ELECTRS_REPO_URL}" -sudo -H -i -u "${BITCOIN_USER}" git config --global advice.detachedHead false -sudo -H -i -u "${BITCOIN_USER}" git clone --branch "${ELECTRS_REPO_BRANCH}" "${ELECTRS_REPO_URL}" "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}" +osSudo "${BITCOIN_USER}" git config --global advice.detachedHead false +osSudo "${BITCOIN_USER}" git clone --branch "${ELECTRS_REPO_BRANCH}" "${ELECTRS_REPO_URL}" "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}" echo "[*] Installing Rust from rustup.rs" -sudo -H -i -u "${BITCOIN_USER}" sh -c "cd ${BITCOIN_ELECTRS_HOME} && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh" +osSudo "${BITCOIN_USER}" sh -c "cd ${BITCOIN_ELECTRS_HOME} && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh" echo "[*] Building Bitcoin Electrs release binary" -sudo -H -i -u "${BITCOIN_USER}" sh -c "cd ${BITCOIN_ELECTRS_HOME} && cargo run --release --bin electrs -- --version" +osSudo "${BITCOIN_USER}" sh -c "cd ${BITCOIN_ELECTRS_HOME} && cargo run --release --bin electrs -- --version" -##### Liquid -> Electrs installation +################################## +# Liquid -> Electrs installation # +################################## echo "[*] Creating Liquid Electrs data folder" -sudo -H -i -u "${ROOT_USER}" mkdir -p "${ELEMENTS_ELECTRS_HOME}" -sudo -H -i -u "${ROOT_USER}" chown "${ELEMENTS_USER}:${ELEMENTS_GROUP}" "${ELEMENTS_ELECTRS_HOME}" +osSudo "${ROOT_USER}" mkdir -p "${ELEMENTS_ELECTRS_HOME}" +osSudo "${ROOT_USER}" chown "${ELEMENTS_USER}:${ELEMENTS_GROUP}" "${ELEMENTS_ELECTRS_HOME}" echo "[*] Cloning Liquid Electrs repo from ${ELEMENTS_ELECTRS_REPO_URL}" -sudo -H -i -u "${ELEMENTS_USER}" git config --global advice.detachedHead false -sudo -H -i -u "${ELEMENTS_USER}" git clone --branch "${ELECTRS_REPO_BRANCH}" "${ELECTRS_REPO_URL}" "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}" +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}" echo "[*] Installing Rust from rustup.rs" -sudo -H -i -u "${ELEMENTS_USER}" sh -c "cd ${ELEMENTS_ELECTRS_HOME} && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh" +osSudo "${ELEMENTS_USER}" sh -c "cd ${ELEMENTS_ELECTRS_HOME} && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh" echo "[*] Building Liquid Electrs release binary" -sudo -H -i -u "${ELEMENTS_USER}" sh -c "cd ${ELEMENTS_ELECTRS_HOME} && cargo run --release --features liquid --bin electrs -- --network liquid --version" +osSudo "${ELEMENTS_USER}" sh -c "cd ${ELEMENTS_ELECTRS_HOME} && cargo run --release --features liquid --bin electrs -- --network liquid --version" -##### Bisq installation +##################### +# Bisq installation # +##################### if [ "${BISQ_INSTALL}" = true ];then - echo "[*] Creating Bisq user with Tor access" - sudo -H -i -u "${BISQ_USER}" useradd -d "${BISQ_HOME}" -G "${TOR_GROUP}" "${BISQ_USER}" + echo "[*] Creating Bisq user with Tor access" + osSudo "${BISQ_USER}" useradd -d "${BISQ_HOME}" -G "${TOR_GROUP}" "${BISQ_USER}" - echo "[*] Creating Bisq data folder" - sudo -H -i -u "${BISQ_USER}" mkdir -p "${BISQ_HOME}" - sudo -H -i -u "${BISQ_USER}" chown "${BISQ_USER}:${BISQ_GROUP}" "${BISQ_HOME}" + echo "[*] Creating Bisq data folder" + osSudo "${BISQ_USER}" mkdir -p "${BISQ_HOME}" + osSudo "${BISQ_USER}" chown "${BISQ_USER}:${BISQ_GROUP}" "${BISQ_HOME}" - echo "[*] Cloning Bisq top-level repo" - sudo -H -i -u "${BISQ_USER}" git clone --branch "${BISQ_REPO_BRANCH}" "${BISQ_REPO_URL}" "${BISQ_HOME}/${BISQ_REPO_NAME}" + echo "[*] Cloning Bisq top-level repo" + osSudo "${BISQ_USER}" git clone --branch "${BISQ_REPO_BRANCH}" "${BISQ_REPO_URL}" "${BISQ_HOME}/${BISQ_REPO_NAME}" - echo "[*] Installing OpenJDK 10.0.2 from Bisq install_java.sh script" - sudo -H -i -u "${ROOT_USER}" "${BISQ_HOME}/${BISQ_REPO_NAME}/scripts/install_java.sh" + echo "[*] Installing OpenJDK 10.0.2 from Bisq install_java.sh script" + osSudo "${ROOT_USER}" "${BISQ_HOME}/${BISQ_REPO_NAME}/scripts/install_java.sh" fi -##### Bitcoin -> Mainnet instance +################################ +# Bitcoin instance for Mainnet # +################################ if [ "${BITCOIN_MAINNET_ENABLE}" = true ];then - echo "[*] Generating Bitcoin Mainnet RPC credentials" - BITCOIN_MAINNET_RPC_USER=$(head -150 /dev/urandom | md5sum | awk '{print $1}') - sudo sed -i -e "s/__BITCOIN_MAINNET_RPC_USER__/${BITCOIN_MAINNET_RPC_USER}/" "${BITCOIN_HOME}/bitcoin.conf" - BITCOIN_MAINNET_RPC_PASS=$(head -150 /dev/urandom | md5sum | awk '{print $1}') - sudo sed -i -e "s/__BITCOIN_MAINNET_RPC_PASS__/${BITCOIN_MAINNET_RPC_PASS}/" "${BITCOIN_HOME}/bitcoin.conf" + 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" - sudo -H -i -u "${ROOT_USER}" install -c -o "${ROOT_USER}" -g "${ROOT_GROUP}" -m 644 "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/bitcoin-mainnet.service" "${OS_SERVICE_HOME}" + 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}" fi -##### Bitcoin -> Testnet instance +################################ +# Bitcoin instance for Testnet # +################################ if [ "${BITCOIN_TESTNET_ENABLE}" = true ];then - echo "[*] Generating Bitcoin Testnet RPC credentials" - BITCOIN_TESTNET_RPC_USER=$(head -150 /dev/urandom | md5sum | awk '{print $1}') - sudo sed -i -e "s/__BITCOIN_TESTNET_RPC_USER__/${BITCOIN_TESTNET_RPC_USER}/" "${BITCOIN_HOME}/testnet3/bitcoin.conf" - BITCOIN_TESTNET_RPC_PASS=$(head -150 /dev/urandom | md5sum | awk '{print $1}') - sudo sed -i -e "s/__BITCOIN_TESTNET_RPC_PASS__/${BITCOIN_TESTNET_RPC_PASS}/" "${BITCOIN_HOME}/testnet3/bitcoin.conf" + 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" - sudo -H -i -u "${ROOT_USER}" install -c -o "${ROOT_USER}" -g "${ROOT_GROUP}" -m 644 "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/bitcoin-testnet.service" "${OS_SERVICE_HOME}" + 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}" fi -##### Electrs -> Bitcoin Mainnet instance +######################################## +# Electrs instance for Bitcoin Mainnet # +######################################## -##### Electrs -> Bitcoin Testnet instance +if [ "${BITCOIN_MAINNET_ENABLE}" = true ];then +fi -##### Electrs -> Elements Liquid instance +######################################## +# Electrs instance for Bitcoin Testnet # +######################################## -##### Bisq -> Bitcoin Mainnet instance +if [ "${BITCOIN_TESTNET_ENABLE}" = true ];then +fi + +######################################## +# Electrs instance for Elements Liquid # +######################################## + +if [ "${ELEMENTS_LIQUID_ENABLE}" = true ];then +fi + +##################################### +# Bisq instance for Bitcoin Mainnet # +##################################### if [ "${BISQ_MAINNET_ENABLE}" = true ];then - echo "[*] Installing Bisq service" - sudo -H -i -u "${ROOT_USER}" install -c -o "${ROOT_USER}" -g "${ROOT_GROUP}" -m 644 "${BISQ_HOME}/${BISQ_REPO_NAME}/seednode/bisq.service" "${OS_SERVICE_HOME}/bisq.service" - sudo sed -i -e "s/#Requires=bitcoin.service/Requires=bitcoin.service/" "${OS_SERVICE_HOME}/bisq.service" - sudo sed -i -e "s/#BindsTo=bitcoin.service/BindsTo=bitcoin.service/" "${OS_SERVICE_HOME}/bisq.service" - sudo sed -i -e "s/__BISQ_REPO_NAME__/${BISQ_REPO_NAME}/" "${OS_SERVICE_HOME}/bisq.service" - sudo sed -i -e "s!__BISQ_HOME__!${BISQ_HOME}!" "${OS_SERVICE_HOME}/bisq.service" + 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" - sudo -H -i -u "${ROOT_USER}" install -c -o "${ROOT_USER}" -g "${ROOT_GROUP}" -m 644 "${BISQ_HOME}/${BISQ_REPO_NAME}/seednode/bisq.env" "${OS_ENV_HOME}/bisq.env" - sudo sed -i -e "s!__BISQ_APP_NAME__!${BISQ_APP_NAME}!" "${OS_ENV_HOME}/bisq.env" - sudo sed -i -e "s!__BISQ_HOME__!${BISQ_HOME}!" "${OS_ENV_HOME}/bisq.env" + 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" - sudo sed -i -e "s/__BITCOIN_P2P_HOST__/${BITCOIN_MAINNET_P2P_HOST}/" "${OS_ENV_HOME}/bisq.env" - sudo sed -i -e "s/__BITCOIN_P2P_PORT__/${BITCOIN_MAINNET_P2P_PORT}/" "${OS_ENV_HOME}/bisq.env" - sudo sed -i -e "s/__BITCOIN_RPC_HOST__/${BITCOIN_MAINNET_RPC_HOST}/" "${OS_ENV_HOME}/bisq.env" - sudo sed -i -e "s/__BITCOIN_RPC_PORT__/${BITCOIN_MAINNET_RPC_PORT}/" "${OS_ENV_HOME}/bisq.env" - sudo sed -i -e "s/__BITCOIN_RPC_USER__/${BITCOIN_MAINNET_RPC_USER}/" "${OS_ENV_HOME}/bisq.env" - sudo sed -i -e "s/__BITCOIN_RPC_PASS__/${BITCOIN_MAINNET_RPC_PASS}/" "${OS_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}" - sudo -H -i -u "${BISQ_USER}" sh -c "cd ${BISQ_HOME}/${BISQ_REPO_NAME} && git checkout ${BISQ_LATEST_RELEASE}" + 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" - sudo -H -i -u "${BISQ_USER}" sh -c "cd ${BISQ_HOME}/${BISQ_REPO_NAME} && git lfs pull" + echo "[*] Performing Git LFS pull" + osSudo "${BISQ_USER}" sh -c "cd ${BISQ_HOME}/${BISQ_REPO_NAME} && git lfs pull" - echo "[*] Building Bisq from source" - sudo -H -i -u "${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 "[*] 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" - sudo sed -i -e "s/#blocknotify/blocknotify/" "${BITCOIN_HOME}/bitcoin.conf" - sudo -H -i -u "${BITCOIN_USER}" install -c -o "${BITCOIN_USER}" -g "${BITCOIN_GROUP}" -m 755 "${BISQ_HOME}/${BISQ_REPO_NAME}/seednode/blocknotify.sh" "${BITCOIN_HOME}/blocknotify.sh" + 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" fi ##### Mempool -> Bitcoin Mainnet instance if [ "${BITCOIN_MAINNET_ENABLE}" = true ];then - echo "[*] Creating Mempool instance for Bitcoin Mainnet" - sudo -H -i -u "${MEMPOOL_USER}" git config --global advice.detachedHead false - sudo -H -i -u "${MEMPOOL_USER}" git clone --branch "${MEMPOOL_REPO_BRANCH}" "${MEMPOOL_REPO_URL}" "${MEMPOOL_HOME}/mainnet" + 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" fi ##### nginx echo "[*] Adding Nginx configuration" -sudo -H -i -u "${ROOT_USER}" install -c -o "${ROOT_USER}" -g "${ROOT_GROUP}" -m 644 "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/nginx.conf" "${NGINX_CONFIGURATION}" +osSudo "${ROOT_USER}" install -c -o "${ROOT_USER}" -g "${ROOT_GROUP}" -m 644 "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/nginx.conf" "${NGINX_CONFIGURATION}" echo "[*] Restarting Nginx" -sudo -H -i -u "${ROOT_USER}" service nginx restart +osSudo "${ROOT_USER}" service nginx restart ##### OS systemd echo "[*] Updating systemd daemon configuration" -sudo -H -i -u "${ROOT_USER}" systemctl daemon-reload +osSudo "${ROOT_USER}" systemctl daemon-reload if [ "${TOR_ENABLE}" = true ];then - sudo -H -i -u "${ROOT_USER}" systemctl enable tor.service + osSudo "${ROOT_USER}" systemctl enable tor.service fi if [ "${BITCOIN_MAINNET_ENABLE}" = true ];then - sudo -H -i -u "${ROOT_USER}" systemctl enable bitcoin.service - sudo -H -i -u "${ROOT_USER}" systemctl enable electrs.service - sudo -H -i -u "${ROOT_USER}" systemctl enable mempool.service + osSudo "${ROOT_USER}" systemctl enable bitcoin.service + osSudo "${ROOT_USER}" systemctl enable electrs.service + osSudo "${ROOT_USER}" systemctl enable mempool.service fi if [ "${BITCOIN_TESTNET_ENABLE}" = true ];then - sudo -H -i -u "${ROOT_USER}" systemctl enable bitcoin-testnet.service - sudo -H -i -u "${ROOT_USER}" systemctl enable electrs-testnet.service - sudo -H -i -u "${ROOT_USER}" systemctl enable mempool-testnet.service + osSudo "${ROOT_USER}" systemctl enable bitcoin-testnet.service + osSudo "${ROOT_USER}" systemctl enable electrs-testnet.service + osSudo "${ROOT_USER}" systemctl enable mempool-testnet.service fi if [ "${BISQ_MAINNET_ENABLE}" = true ];then - sudo -H -i -u "${ROOT_USER}" systemctl enable bisq.service - sudo -H -i -u "${ROOT_USER}" systemctl enable mempool-bisq.service + osSudo "${ROOT_USER}" systemctl enable bisq.service + osSudo "${ROOT_USER}" systemctl enable mempool-bisq.service fi if [ "${ELEMENTS_LIQUID_ENABLE}" = true ];then - sudo -H -i -u "${ROOT_USER}" systemctl enable liquid.service - sudo -H -i -u "${ROOT_USER}" systemctl enable electrs-liquid.service - sudo -H -i -u "${ROOT_USER}" systemctl enable mempool-liquid.service + osSudo "${ROOT_USER}" systemctl enable liquid.service + osSudo "${ROOT_USER}" systemctl enable electrs-liquid.service + osSudo "${ROOT_USER}" systemctl enable mempool-liquid.service fi ##### OS services if [ "${BITCOIN_MAINNET_ENABLE}" = true ];then - echo "[*] Starting Bitcoin Mainnet" - sudo -H -i -u "${ROOT_USER}" systemctl start bitcoin - sudo -H -i -u "${ROOT_USER}" systemctl start electrs - sudo -H -i -u "${ROOT_USER}" journalctl --no-pager --unit bitcoin + echo "[*] Starting Bitcoin Mainnet" + osSudo "${ROOT_USER}" systemctl start bitcoin + osSudo "${ROOT_USER}" systemctl start electrs + osSudo "${ROOT_USER}" journalctl --no-pager --unit bitcoin fi if [ "${BITCOIN_TESTNET_ENABLE}" = true ];then - echo "[*] Starting Bitcoin Testnet" - sudo -H -i -u "${ROOT_USER}" systemctl start bitcoin-testnet - sudo -H -i -u "${ROOT_USER}" systemctl start electrs-testnet - sudo -H -i -u "${ROOT_USER}" journalctl --no-pager --unit bitcoin-testnet + 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 fi if [ "${ELEMENTS_LIQUID_ENABLE}" = true ];then - echo "[*] Starting Elements Liquid" - sudo -H -i -u "${ROOT_USER}" systemctl start liquid - sudo -H -i -u "${ROOT_USER}" systemctl start electrs-liquid - sudo -H -i -u "${ROOT_USER}" journalctl --no-pager --unit liquid + 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 fi -sudo -H -i -u "${ROOT_USER}" tail "${BITCOIN_HOME}/debug.log" +osSudo "${ROOT_USER}" tail "${BITCOIN_HOME}/debug.log" ##### OS notes echo "[*] Adding notes to motd" -sudo -H -i -u "${ROOT_USER}" sh -c 'echo " " >> /etc/motd' +osSudo "${ROOT_USER}" sh -c 'echo " " >> /etc/motd' ##### OS firewall echo "[*] Preparing firewall" -sudo -H -i -u "${ROOT_USER}" ufw default deny incoming -sudo -H -i -u "${ROOT_USER}" ufw default allow outgoing -sudo -H -i -u "${ROOT_USER}" ufw allow from any to any port ${BITCOIN_MAINNET_P2P_PORT} proto tcp -sudo -H -i -u "${ROOT_USER}" ufw allow from any to any port ${BITCOIN_TESTNET_P2P_PORT} proto tcp -sudo -H -i -u "${ROOT_USER}" ufw allow from any to any port ${ELEMENTS_LIQUID_P2P_PORT} proto tcp +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 ##### finish