diff --git a/02_2__Script_Linode_Setup.stackscript b/02_2__Script_Linode_Setup.stackscript deleted file mode 100644 index dbcaa00..0000000 --- a/02_2__Script_Linode_Setup.stackscript +++ /dev/null @@ -1,358 +0,0 @@ -#!/bin/bash - -# This block defines the variables the user of the script needs to input -# when deploying using this script. -# -# -# BTCTYPE= -# -# HOSTNAME= -# -# FQDN= -# -# USERPASSWORD= -# -# SSH_KEY= -# -# SYS_SSH_IP= - -#### -# 0. Set Initial Variables -#### - -# CURRENT BITCOIN RELEASE: -# Change as necessary - -export BITCOIN=bitcoin-core-0.18.0 - -# Set the variable $IPADDR to the IP address the new Linode receives. -IPADDR=$(/sbin/ifconfig eth0 | awk '/inet / { print $2 }' | sed 's/addr://') - -# Output stdout and stderr to ~root files - -exec > >(tee -a /root/stackscript.log) 2> >(tee -a /root/stackscript.log /root/stackscript.err >&2) - -echo "$0 - BEGINNING NEW MACHINE SETUP STACKSCRIPT" -echo "$0 - BITCOIN SETUP TYPE IS: $BTCTYPE" - -#### -# 1. Update Hostname -#### - -echo $HOSTNAME > /etc/hostname -# /etc/init.d/hostname.sh start -/bin/hostname $HOSTNAME - -echo "$0 - Set hostname as $FQDN ($IPADDR)" -echo "$0 - TODO: Put $FQDN with IP $IPADDR in your main DNS file." - -# Add localhost aliases - -echo "127.0.0.1 localhost" > /etc/hosts -echo "127.0.1.1 $FQDN $HOSTNAME" >> /etc/hosts - -echo "$0 - Set localhost" - -#### -# 2. Update Timezone -#### - -# Set Timezone to America/LA - -TIMEZONE="America/Los_Angeles" -echo $TIMEZONE > /etc/timezone -cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime - -echo "$0 - Set Time Zone to Lost Angeles" - -#### -# 3. Protect the Server -#### - -# Add firewall rules to block everything that's not Bitcoin, Ping, or SSH - -cat > /etc/iptables.firewall.rules < /etc/ip6tables.firewall.rules - -# Make a startup file that runs IPv4 and IPv6 rules - -cat > /etc/network/if-pre-up.d/firewall <> /etc/hosts.allow - echo "sshd: ALL" >> /etc/hosts.deny - echo "$0 - Limited SSH access." - -else - - echo "$0 - WARNING: Your SSH access is not limited; this is a major security hole!" - -fi - -# Block SSH access from everywhere else - -# Yes, this means that if you don't have an IP address for SSH, you can only login -# from Linode's Lish Console - - - -#### -# 4. Set Up User -#### - -# Create "user1" with optional password and give them sudo capability - -/usr/sbin/useradd -m -p `perl -e 'printf("%s\n",crypt($ARGV[0],"password"))' "$USERPASSWORD"` -g sudo -s /bin/bash user1 -/usr/sbin/adduser user1 sudo - -echo "$0 - Setup user1 with sudo access." - -# Set up SSH Key - -if [ -n "$SSH_KEY" ]; then - - mkdir ~user1/.ssh - echo "$SSH_KEY" >> ~user1/.ssh/authorized_keys - chown -R user1 ~user1/.ssh - - echo "$0 - Added .ssh key to user1." - -fi - -# Give user some helpful bitcoin aliases - -if [ "$BTCTYPE" == "Testnet" ] || [ "$BTCTYPE" == "Pruned Testnet" ]; then - -sudo -u user1 cat >> ~user1/.bash_profile <> ~user1/.bash_profile <&1 | grep "Good signature"` -echo "SHASIG is $SHASIG" - -if [[ $SHASIG ]]; then - echo "VERIFICATION SUCCESS / SIG: $SHASIG" -else - (>&2 echo "VERIFICATION ERROR: Signature for Bitcoin did not verify!") -fi - -# Verify Bitcoin: SHA - -export TARSHA256=`/usr/bin/sha256sum ~user1/$BITCOINPLAIN-x86_64-linux-gnu.tar.gz | awk '{print $1}'` -export EXPECTEDSHA256=`cat ~user1/SHA256SUMS.asc | grep $BITCOINPLAIN-x86_64-linux-gnu.tar.gz | awk '{print $1}'` - -if [ "$TARSHA256" == "$EXPECTEDSHA256" ]; then - echo "VERIFICATION SUCCESS / SHA: $TARSHA256" -else - (>&2 echo "VERIFICATION ERROR: SHA for Bitcoin did not match!") -fi - -# Install Bitcoin - -echo "$0 - Installinging Bitcoin." - -sudo -u user1 /bin/tar xzf ~user1/$BITCOINPLAIN-x86_64-linux-gnu.tar.gz -C ~user1 -/usr/bin/install -m 0755 -o root -g root -t /usr/local/bin ~user1/$BITCOINPLAIN/bin/* -/bin/rm -rf ~user1/$BITCOINPLAIN/ - -# Start Up Bitcoin - -echo "$0 - Starting Bitcoin." - -sudo -u user1 /bin/mkdir ~user1/.bitcoin - -# The only variation between Mainnet and Testnet is that Testnet has the "testnet=1" variable -# The only variation between Regular and Pruned is that Pruned has the "prune=550" variable, which is the smallest possible prune - -# TODO: need to test rpcpassword random below using EOF technique -# TODO: there are other more modern ways to set up rpc authentication — to investigate and document. - -cat >> ~user1/.bitcoin/bitcoin.conf << EOF -server=1 -dbcache=1536 -par=1 -blocksonly=1 -maxuploadtarget=137 -maxconnections=16 -rpcuser=bitcoinrpc -rpcpassword=$(xxd -l 16 -p /dev/urandom) -rpcallowip=127.0.0.1 -walletbroadcast=1 -EOF - -if [ "$BTCTYPE" == "Mainnet" ]; then - -cat >> ~user1/.bitcoin/bitcoin.conf << EOF -txindex=1 -EOF - -elif [ "$BTCTYPE" == "Pruned Mainnet" ]; then - -cat >> ~user1/.bitcoin/bitcoin.conf << EOF -prune=550 -EOF - -elif [ "$BTCTYPE" == "Testnet" ]; then - -cat >> ~user1/.bitcoin/bitcoin.conf << EOF -txindex=1 -testnet=1 -EOF - -elif [ "$BTCTYPE" == "Pruned Testnet" ]; then - -cat >> ~user1/.bitcoin/bitcoin.conf << EOF -prune=550 -testnet=1 -EOF - -elif [ "$BTCTYPE" == "Private Regtest" ]; then - - (>&2 echo "$0 - ERROR: Private Regtest is not setup yet.") - -else - - (>&2 echo "$0 - ERROR: Somehow you managed to select no Bitcoin Installation Type, so Bitcoin hasn't been properly setup. Whoops!") - -fi - -/bin/chown user1 ~user1/.bitcoin/bitcoin.conf -/bin/chmod 600 ~user1/.bitcoin/bitcoin.conf - -sudo -u user1 /usr/local/bin/bitcoind -daemon - -# Add Bitcoin Startup to Crontab for User1 - -sudo -u user1 sh -c '( /usr/bin/crontab -l -u user1 2>/dev/null; echo "@reboot /usr/local/bin/bitcoind -daemon" ) | /usr/bin/crontab -u user1 -' - -# Alert User! - -sudo -u user1 touch ~user1/BITCOIN-IS-READY - -echo "$0 - ENDING NEW MACHINE SETUP STACKSCRIPT"