#!/bin/bash # shellcheck disable=SC1091,SC2164,SC2034,SC1072,SC1073,SC1009 # Twister Command-line Intallation Manager # Supported OS: Debian, Ubuntu # https://github.com/twisterarmy/twister-cli-installer # Based on the openvpn-install codebase (https://github.com/angristan/openvpn-install) function isRoot() { if [ "$EUID" -ne 0 ]; then return 1 fi } function checkOS() { if [[ -e /etc/debian_version ]]; then OS="debian" source /etc/os-release if [[ $ID == "debian" ]]; then if [[ $VERSION_ID -lt 9 ]]; then echo "⚠️ Your version of Debian is not supported." echo "" echo "However, if you're using Debian >= 9 or unstable/testing then you can continue, at your own risk." echo "" until [[ $CONTINUE =~ (y|n) ]]; do read -rp "Continue? [y/n]: " -e CONTINUE done if [[ $CONTINUE == "n" ]]; then exit 1 fi fi elif [[ $ID == "ubuntu" ]]; then OS="ubuntu" MAJOR_UBUNTU_VERSION=$(echo "$VERSION_ID" | cut -d '.' -f1) if [[ $MAJOR_UBUNTU_VERSION -lt 20 ]]; then echo "⚠️ Your version of Ubuntu is not supported." echo "" echo "However, if you're using Ubuntu >= 20.04 or beta, then you can continue, at your own risk." echo "" until [[ $CONTINUE =~ (y|n) ]]; do read -rp "Continue? [y/n]: " -e CONTINUE done if [[ $CONTINUE == "n" ]]; then exit 1 fi fi fi else echo "Looks like you aren't running this installer on a Debian or Ubuntu system" exit 1 fi } function initialCheck() { checkOS } function install() { echo "Welcome to the Twister installer!" echo "The git repository is available at: https://github.com/twisterarmy/twister-cli-installer" echo "" echo "I need to ask you a few questions before starting the setup." echo "You can leave the default options and just press enter if you are ok with them." echo "" echo "To compile twister from the source, we need to check and install following dependencies:" echo "" echo "git" echo "autoconf" echo "libtool" echo "build-essential" echo "libboost-all-dev" echo "libssl-dev" echo "libdb++-dev" echo "libminiupnpc-dev" echo "automake" echo "ufw" echo "" until [[ $CONTINUE =~ (y|n) ]]; do read -rp "Continue? [y/n]: " -e CONTINUE done if [[ $CONTINUE == "n" ]]; then exit 1 fi apt-get update apt-get install git autoconf libtool build-essential libboost-all-dev libssl-dev libdb++-dev libminiupnpc-dev automake ufw echo "" until [[ $INSTALL =~ (y|n) ]]; do read -rp "Install twister from the official sources? [y/n]: " -e INSTALL done if [[ $INSTALL == "n" ]]; then exit 1 fi git clone https://github.com/miguelfreitas/twister-core.git mkdir ~/.twister chmod 600 ~/.twister/twister.conf git clone https://github.com/miguelfreitas/twister-html.git ~/.twister/html cd twister-core until [[ $USER_NAME != "" ]]; do read -rp "Enter RPC username: " -e USER_NAME done until [[ $PASSWORD != "" ]]; do read -rp "Enter RPC password: " -e PASSWORD done echo -e "rpcuser=$USER_NAME\nrpcpassword=$PASSWORD" > ~/.twister/twister.conf until [[ $SSL =~ (y|n) ]]; do read -rp "Enable SSL connection? [y/n]: " -e SSL done if [[ $SSL == "y" ]]; then openssl req -x509 -newkey rsa:4096 -keyout ~/.twister/key.pem -out ~/.twister/cert.pem -days 365 -nodes echo -e "rpcuser=$USER_NAME\nrpcpassword=$PASSWORD\nrpcsslcertificatechainfile=~/.twister/cert.pem\nrpcsslprivatekeyfile=~/.twister/key.pem" > ~/.twister/twister.conf fi echo "Check firewall rules..." sudo ufw status until [[ $REMOTE =~ (y|n) ]]; do read -rp "Is this remote node (28332 and 22 ports will be allowed in the iptables rules)? [y/n]: " -e REMOTE done if [[ $REMOTE == "y" ]]; then sudo ufw allow 28332 sudo ufw allow 22 fi until [[ $PORTS =~ (y|n) ]]; do read -rp "Open 6550 / 7550 ports to support the network? [y/n]: " -e PORTS done if [[ $PORTS == "y" ]]; then sudo ufw allow 6550 sudo ufw allow 7550 fi until [[ $UFW =~ (y|n) ]]; do if [[ $REMOTE == "y" ]]; then read -rp "Enable firewall (make sure 22 port was added to the iptable rules)? [y/n]: " -e UFW fi if [[ $REMOTE == "n" ]]; then read -rp "Enable firewall? [y/n]: " -e UFW fi done if [[ $UFW == "y" ]]; then sudo ufw enable sudo ufw status fi make clean ./autotool.sh ./configure make echo "Installation process completed!" if [[ $SSL == "y" ]]; then echo "You can run SSL node by using following command: ./twisterd -rpcssl" fi } initialCheck install