diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..861190b --- /dev/null +++ b/install.sh @@ -0,0 +1,107 @@ +#!/bin/bash +# Script must be running from root +if [ "$EUID" -ne 0 ]; + then echo "Please run as root"; + exit 1; +fi; + +relayer_soft_git_repo="https://git.tornado.ws/tornadocash/classic-relayer"; + +user_home_dir=$(eval echo ~$USER); +relayer_folder="$user_home_dir/tornado-relayer"; +relayer_mainnet_soft_source_folder="$relayer_folder/mainnet-soft-source"; +relayer_sidechains_soft_source_folder="$relayer_folder/sidechains-soft-source"; +script_log_file="/tmp/tornado-classic-relayer-installation.log" +if [ -f $script_log_file ]; then rm $script_log_file; fi; + +function echo_log_err(){ + echo $1 1>&2; + echo -e "$1\n" &>> $script_log_file; +} + +function echo_log_err_and_exit(){ + echo_log_err "$1"; + exit 1; +} + +function is_package_installed(){ + if [ $(dpkg-query -W -f='${Status}' $1 2>/dev/null | grep -c "ok installed") -eq 0 ]; then return 1; else return 0; fi; +} + +function install_requred_packages(){ + apt update &>> $script_log_file; + + requred_packages=("curl" "git-all" "ufw" "nginx"); + local package; + for package in ${requred_packages[@]}; do + if ! is_package_installed $package; then + # Kill apache process, because Debian configuring nginx package right during installation + if [ $package = "nginx" ]; then systemctl stop apache2; fi; + apt install --yes --force-yes -o DPkg::Options::="--force-confold" $package &>> $script_log_file; + if ! is_package_installed $package; then + echo_log_err_and_exit "Error: cannot install \"$package\" package"; + fi; + fi; + done; + + echo -e "\nAll required packages installed successfully"; +} + +function install_repositories(){ + git clone $relayer_soft_git_repo -b mainnet $relayer_mainnet_soft_source_folder; + git clone $relayer_soft_git_repo -b sidechain $relayer_sidechains_soft_source_folder; +} + +function install_docker_utilities(){ + local kernel_name=$(uname -s); + local processor_type=$(uname -m); + + curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-$kernel_name-$processor_type -o /usr/local/bin/docker-compose; + chmod +x /usr/local/bin/docker-compose; + + curl -fsSL https://get.docker.com -o get-docker.sh; + chmod +x get-docker.sh; + ./get-docker.sh; +} + +function configure_firewall(){ + ufw allow https/tcp; + ufw allow http/tcp; + ufw insert 1 allow OpenSSH; + echo "y" | ufw enable; +} + +function configure_nginx_reverse_proxy(){ + systemctl stop apache2; + + cp $relayer_mainnet_soft_source_folder/tornado.conf /etc/nginx/sites-available/default; + echo "stream { map_hash_bucket_size 128; map_hash_max_size 128; include /etc/nginx/conf.d/streams/*.conf; }" >> /etc/nginx/nginx.conf; + mkdir /etc/nginx/conf.d/streams; + cp $relayer_mainnet_soft_source_folder/tornado-stream.conf /etc/nginx/conf.d/streams/tornado-stream.conf; + + systemctl restart nginx; + systemctl stop nginx; +} + +function build_relayer_docker_containers(){ + docker build -t tornadorelayer:mainnet $relayer_mainnet_soft_source_folder; + docker build -t tornadorelayer:sidechain $relayer_sidechains_soft_source_folder; +} + +function prepare_environments(){ + cp $relayer_mainnet_soft_source_folder/.env.example $relayer_folder/.env.mainnet; + tee $relayer_folder/.env.bsc $relayer_folder/.env.arb $relayer_folder/.env.goerli $relayer_folder/.env.polygon $relayer_folder/.env.op \ + $relayer_folder/.env.avax $relayer_folder/.env.gnosis < $relayer_sidechains_soft_source_folder/.env.example > /dev/null; +} + +function main(){ + install_requred_packages; + install_repositories; + configure_firewall; + configure_nginx_reverse_proxy; + install_docker_utilities; + build_relayer_docker_containers; + prepare_environments; +} + +main; \ No newline at end of file