#!/bin/bash echo "This assumes that you are doing a green-field install. If you're not, please exit in the next 15 seconds." sleep 15 echo "Continuing install, this will prompt you for your password if you're not already running as root and you didn't enable passwordless sudo. Please do not run me as root!" if [[ `whoami` == "root" ]]; then echo "You ran me as root! Do not run me as root!" exit 1 fi ROOT_SQL_PASS=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) CURUSER=$(whoami) SERVER_IP=$(dig +short myip.opendns.com @resolver1.opendns.com) API_URL="http://$SERVER_IP:8000/leafApi" WALLET_PASSWORD=`cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1` read -p "Enter a pool API URL or leave it blank for default ($API_URL): " USER_API_URL printf "\n" if [[ ! -z $USER_API_URL ]]; then API_URL=$USER_API_URL fi read -p "Enter a Mailgun key:" MAILGUN_KEY printf "\n" read -p "Enter a Mailgun URL:" MAILGUN_URL printf "\n" read -p "Enter an address for outgoing emails:" EMAIL_FROM printf "\n" sudo timedatectl set-timezone Etc/UTC sudo apt-get update sudo DEBIAN_FRONTEND=noninteractive apt-get -y upgrade sudo debconf-set-selections <<< "mysql-server mysql-server/root_password password $ROOT_SQL_PASS" sudo debconf-set-selections <<< "mysql-server mysql-server/root_password_again password $ROOT_SQL_PASS" echo -e "[client]\nuser=root\npassword=$ROOT_SQL_PASS" | sudo tee /root/.my.cnf sudo DEBIAN_FRONTEND=noninteractive apt-get -y install git python-virtualenv python3-virtualenv curl ntp build-essential screen cmake pkg-config libboost-all-dev libevent-dev libunbound-dev libminiupnpc-dev libunwind8-dev liblzma-dev libldns-dev libexpat1-dev libgtest-dev mysql-server lmdb-utils libzmq3-dev cd ~ git clone https://github.com/letheanVPN/lethean-nodejs-pool.git # Change this depending on how the deployment goes. cd /usr/src/gtest sudo cmake . sudo make sudo mv libg* /usr/lib/ cd ~ sudo systemctl enable ntp cd /usr/local/src sudo git clone --recursive https://github.com/letheanVPN/lethean.git cd lethean sudo git checkout master sudo mkdir build sudo cd build sudo cmake .. sudo make -j$(nproc) cd ~ export LC_ALL=C unset LANGUAGE POOL_WALLET=`/usr/local/src/lethean/build/release/src/simplewallet --generate-new-wallet "/home/$CURUSER/lethean.wallet" --password "$WALLET_PASSWORD" | grep "Generated new wallet" | awk '{ print $4 }'` echo "$WALLET_PASSWORD" > "/home/$CURUSER/lethean.wallet.passwd" echo "Generated a new wallet $POOL_WALLET in /home/$CURUSER/lethean.wallet with the password in /home/$CURUSER/lethean.wallet.passwd." echo "!!! PLEASE BACK IT UP !!!" sudo screen -S lethean -dm bash -c "/usr/local/src/lethean/build/release/src/letheand" sudo screen -S simplewallet -dm bash -c "/usr/local/src/lethean/build/release/src/simplewallet --wallet-file /home/$CURUSER/lethean.wallet --password `cat /home/$CURUSER/lethean.wallet.passwd` --rpc-bind-port 46942" curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash source ~/.nvm/nvm.sh nvm install v8.9.3 cd ~/lethean-nodejs-pool npm install npm install -g pm2 openssl req -subj "/C=IT/ST=Pool/L=Daemon/O=Mining Pool/CN=mining.pool" -newkey rsa:2048 -nodes -keyout cert.key -x509 -out cert.pem -days 36500 mkdir ~/pool_db/ cp config_example.json config.json sed -r "s/(\"db_storage_path\": ).*/\1\"\/home\/$CURUSER\/pool_db\/\",/ ; s/(\"bind_ip\": ).*/\1\"$SERVER_IP\",/ ; s/(\"hostname\": ).*/\1\"$SERVER_IP\",/" config_example.json > config.json sed -i "s/localhost/$SERVER_IP/g" /home/$CURUSER/lethean-nodejs-pool/frontend/app/globals.js sed -i "s/localhost/$SERVER_IP/g" /home/$CURUSER/lethean-nodejs-pool/frontend/app/globals.default.js cd ~/lethean-nodejs-pool/frontend npm install ./node_modules/bower/bin/bower update ./node_modules/gulp/bin/gulp.js build cd build sudo ln -s `pwd` /var/www CADDY_DOWNLOAD_DIR=$(mktemp -d) cd $CADDY_DOWNLOAD_DIR curl -sL "https://github.com/mholt/caddy/releases/download/v0.11.4/caddy_v0.11.4_linux_amd64.tar.gz" | tar -xz caddy init/linux-systemd/caddy.service sudo mv caddy /usr/local/bin sudo chown root:root /usr/local/bin/caddy sudo chmod 755 /usr/local/bin/caddy sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy sudo groupadd -g 33 www-data sudo useradd -g www-data --no-user-group --home-dir /var/www --no-create-home --shell /usr/sbin/nologin --system --uid 33 www-data sudo mkdir /etc/caddy sudo chown -R root:www-data /etc/caddy sudo mkdir /etc/ssl/caddy sudo chown -R www-data:root /etc/ssl/caddy sudo chmod 0770 /etc/ssl/caddy sudo cp ~/lethean-nodejs-pool/deployment/caddyfile /etc/caddy/Caddyfile sudo chown www-data:www-data /etc/caddy/Caddyfile sudo chmod 444 /etc/caddy/Caddyfile sudo sh -c "sed 's/ProtectHome=true/ProtectHome=false/' init/linux-systemd/caddy.service > /etc/systemd/system/caddy.service" sudo chown root:root /etc/systemd/system/caddy.service sudo chmod 644 /etc/systemd/system/caddy.service sudo systemctl daemon-reload sudo systemctl enable caddy.service sudo systemctl start caddy.service rm -rf $CADDY_DOWNLOAD_DIR cd ~ sudo env PATH=$PATH:`pwd`/.nvm/versions/node/v8.9.3/bin `pwd`/.nvm/versions/node/v8.9.3/lib/node_modules/pm2/bin/pm2 startup systemd -u $CURUSER --hp `pwd` cd ~/lethean-nodejs-pool sudo chown -R $CURUSER. ~/.pm2 echo "Installing pm2-logrotate in the background!" pm2 install pm2-logrotate & mysql -u root --password=$ROOT_SQL_PASS < deployment/base.sql mysql -u root --password=$ROOT_SQL_PASS pool -e "INSERT INTO pool.config (module, item, item_value, item_type, Item_desc) VALUES ('api', 'authKey', '`cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1`', 'string', 'Auth key sent with all Websocket frames for validation.')" mysql -u root --password=$ROOT_SQL_PASS pool -e "INSERT INTO pool.config (module, item, item_value, item_type, Item_desc) VALUES ('api', 'secKey', '`cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1`', 'string', 'HMAC key for Passwords. JWT Secret Key. Changing this will invalidate all current logins.')" mysql -u root --password=$ROOT_SQL_PASS pool -e "UPDATE pool.config SET item_value = '$POOL_WALLET' WHERE module = 'pool' and item = 'address';" mysql -u root --password=$ROOT_SQL_PASS pool -e "UPDATE pool.config SET item_value = '$POOL_WALLET' WHERE module = 'payout' and item = 'feeAddress';" mysql -u root --password=$ROOT_SQL_PASS pool -e "UPDATE pool.config SET item_value = '$API_URL' WHERE module = 'general' and item = 'shareHost';" mysql -u root --password=$ROOT_SQL_PASS pool -e "UPDATE pool.config SET item_value = '$MAILGUN_KEY' WHERE module = 'general' and item = 'mailgunKey';" mysql -u root --password=$ROOT_SQL_PASS pool -e "UPDATE pool.config SET item_value = '$MAILGUN_URL' WHERE module = 'general' and item = 'mailgunURL';" mysql -u root --password=$ROOT_SQL_PASS pool -e "UPDATE pool.config SET item_value = '$EMAIL_FROM' WHERE module = 'general' and item = 'emailFrom';" pm2 start init.js --name=blockManager --log-date-format="YYYY-MM-DD HH:mm Z" -- --module=blockManager pm2 start init.js --name=worker --log-date-format="YYYY-MM-DD HH:mm Z" -- --module=worker pm2 start init.js --name=payments --log-date-format="YYYY-MM-DD HH:mm Z" -- --module=payments pm2 start init.js --name=remoteShare --log-date-format="YYYY-MM-DD HH:mm Z" -- --module=remoteShare pm2 start init.js --name=longRunner --log-date-format="YYYY-MM-DD HH:mm Z" -- --module=longRunner pm2 start init.js --name=pool --log-date-format="YYYY-MM-DD HH:mm Z" -- --module=pool pm2 start init.js --name=api --log-date-format="YYYY-MM-DD HH:mm Z" -- --module=api bash ~/lethean-nodejs-pool/deployment/install_lmdb_tools.sh cd ~/lethean-nodejs-pool/sql_sync/ env PATH=$PATH:`pwd`/.nvm/versions/node/v8.9.3/bin node sql_sync.js echo "You're setup! Please read the rest of the readme for the remainder of your setup and configuration. These steps include: Setting your Fee Address, Pool Address, Global Domain, and the Mailgun setup!" printf "\n" echo "!!! DO NOT FORGET TO BACK UP THE GENERATED WALLET AND ITS PASSWORD !!!" printf "\n"