aesthetic terminal experience
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

431 lines
13 KiB

#!/bin/sh
# Script for installing the base dependencies of AO and getting it running
# Bare Metal Alchemist, 2022
source ingredients/lead
source ingredients/copper
source ingredients/iron
3 years ago
source ingredients/gold
clear
echo ''
echo ' d8888 .d88888b. 8888888 888 888 888 '
echo ' d88888 d88P" "Y88b 888 888 888 888 '
echo ' d88P888 888 888 888 888 888 888 '
echo ' d88P 888 888 888 888 88888b. .d8888b 888888 8888b. 888 888 .d88b. 888d888 '
echo ' d88P 888 888 888 888 888 "88b 88K 888 "88b 888 888 d8P Y8b 888P" '
echo ' d88P 888 888 888 888 888 888 "Y8888b. 888 .d888888 888 888 88888888 888 '
echo ' d8888888888 Y88b. .d88P 888 888 888 X88 Y88b. 888 888 888 888 Y8b. 888 '
echo 'd88P 888 "Y88888P" 8888888 888 888 88888P" "Y888 "Y888888 888 888 "Y8888 888 '
echo ''
# ------------------- Step 1 - Baseline Setup -------------------
echo -e "${BOLD}Hiya!${RESET} We're going to get you set up with your very own Autonomous Engine."
echo ""
echo -e "This script is designed to ask you just enough questions to keep you involved in the process,"
echo -e "while making it as easy as possible for you to get it going."
echo ""
echo -e "${BLUE}press enter to continue${RESET}"
read
if [ "$EUID" -eq 0 ]; then
echo -e "${RED}Woah there!${RESET} Seems you're running this script as a superuser."
echo ""
echo "That might cause some issues with permissions and whatnot. Run this script as your default user (without sudo) and I'll ask you when I need superuser permissions"
echo ""
exit 1
fi
echo -e "Making sure we've got the basics..."
echo -e "(you'll probably need to input ${BLUE}your 'sudo' password${RESET} here)"
case $DISTRO in
"debian")
# Note -- I'm not sure if these are all needed but I'm not in the mood to check
install_if_needed git wget sqlite3 zlib1g-dev libtool-bin autoconf autoconf-archive automake autotools-dev \
libgmp-dev libsqlite3-dev python python3 python3-mako libsodium-dev build-essential pkg-config libev-dev \
libcurl4-gnutls-dev libssl-dev fakeroot devscripts
;;
"arch")
if [[ ! $(pacman -Qg base-devel) ]]; then
sudo pacman -S base-devel --noconfirm
fi
install_if_needed wget python gmp sqlite3 autoconf-archive pkgconf libev \
python-mako python-pip net-tools zlib libsodium gettext dnsutils nginx
;;
"mac")
# install_if_needed better-computer
;;
"fedora")
install_if_needed git wget tor sqlite3 autoconf autoconf-archive automake \
python python3 python3-mako pkg-config fakeroot devscripts
;;
esac
echo ""
# ------------------- Step 2 - AO Environment Setup -------------------
if [ -z $AO ]; then
AO=''
echo -e "${BOLD}Hey!${RESET} I was wondering which ${BLUE}version of AO${RESET} you wanted to install. \n"
echo -e "${BOLD}1.${RESET} ao-3 (Vue)"
echo -e "${BOLD}2.${RESET} ao-react (React)"
fi
while [[ -z $AO ]]; do
echo -en "${BLUE}(number):${RESET} "
read -n1 ao_select
echo ""
echo ""
case $ao_select in
"1")
echo "Minimalism, I like it! Proceeding with ${BLUE}ao-3${RESET} installation"
AO=3
;;
"2")
echo -e "It's got community! Proceeding with ${BLUE}ao-react${RESET} installation"
AO=react
;;
*)
echo "that aint no AO i ever heard of, try again"
;;
esac
done;
remember "AO=${AO}"
echo ""
if [ $AO = "3" ] || [ $AO = 'react' ]; then
if ! check_exists nvm; then
install_nvm
else
echo -e "${BLUE}Node${RESET} already installed"
echo ""
fi
echo "Setting Node to v16.13.0 for compatibility"
set_node_to v16.13.0
echo -e "${GREEN}Done!${RESET}"
fi
if [ $AO = "3" ] || [ $AO = 'react' ]; then
echo -e "${BOLD}Installing Bitcoin Ecosystem${RESET}"
echo ""
3 years ago
if ! check_exists bitcoind; then
echo -e "Building bitcoind from source... might take a while!"
install_bitcoin
fi
3 years ago
if ! check_exists lightningd; then
echo -e "Building lightningd from source... here we go again"
install_lightning
fi
3 years ago
configure_bitcoin
configure_lightning
fi
echo ''
if [ $AO = "3" ] || [ $AO = 'react' ]; then
echo -e "${BOLD}Installing and configuring Tor${RESET}\n"
install_if_needed tor
configure_tor
fi
# ------------------- Step 3 - AO Installation -------------------
echo -e "${BOLD}Configuring AO Core${RESET}\n"
mkdir -p $HOME/.ao
if [ -f $HOME/.ao/key ]; then
echo 'We already have a private key for this AO, sweet!'
else
node scripts/createPrivateKey.js >> $HOME/.ao/key
echo -e "Just made a fresh private key and put it in ${GREEN}~/.ao${RESET}"
fi
echo ""
# TODO this is really janky/fragile, it would be better to store this in ~/.ao
CONFIG_FILE=$HOME/ao-$AO/configuration.js
case $AO in
"3")
echo -e "Installing ${BLUE}ao-3${RESET}"
git clone 'https://github.com/AutonomousOrganization/ao-3.git' ~/ao-3
if [ -f "$CONFIG_FILE" ]; then
echo configuration.js already exists
else
cp resources/ao-config $CONFIG_FILE
sed -i "s#SQLITE_DATABASE#${HOME}/.ao/database.sqlite3#" $CONFIG_FILE
sed -i "s#PASSLINE#${PASSLINE}#" $CONFIG_FILE
sed -i "s#PRIVATEKEY#${HOME}/.ao/key#" $CONFIG_FILE
sed -i "s#CLIGHTNING_DIR#${HOME}/.lightning/bitcoin#" $CONFIG_FILE
sed -i "s#MEMES_DIR#${HOME}/.ao/memes#" $CONFIG_FILE
fi
echo ""
pushd ~/ao-3
npm install
npm run build
npm run checkconfig
popd
NODE_PARAMS=''
;;
"react")
echo -e "Installing ${BLUE}ao-react${RESET}"
git clone 'https://github.com/coalition-of-invisible-colleges/ao-react.git' ~/ao-react
if [ -f "$CONFIG_FILE" ]; then
echo configuration.js already exists
else
cp resources/ao-config $CONFIG_FILE
sed -i "s#SQLITE_DATABASE#${HOME}/.ao/database.sqlite3#" $CONFIG_FILE
sed -i "s#PASSLINE#${PASSLINE}#" $CONFIG_FILE
sed -i "s#PRIVATEKEY#${HOME}/.ao/key#" $CONFIG_FILE
sed -i "s#CLIGHTNING_DIR#${HOME}/.lightning/bitcoin#" $CONFIG_FILE
sed -i "s#MEMES_DIR#${HOME}/.ao/memes#" $CONFIG_FILE
fi
echo ""
pushd ~/ao-react
npm install
npm run webpack
popd
NODE_PARAMS='--experimental-specifier-resolution=node -r dotenv/config'
;;
esac
# ------------------- Step 4 - NGINX Setup -------------------
echo ""
echo -e "You still there? I need to ask you some questions! \n\n${BLUE}(enter)${RESET}"
read
echo ""
read -p "Do you have a domain name pointing to this computer? (y/n): " dns
echo ""
case $dns in
y | Y)
echo "Good to hear! What is it?"
read -p "http://" domain
;;
*)
echo "Okay, let's just leave it open for now."
domain=$(dig @resolver4.opendns.com myip.opendns.com +short)
anywhere=1
echo "Try accessing this AO from either localhost, 127.0.0.1, or ${domain}"
;;
esac
if [ "$anywhere" -eq 1 ]; then
ACCESS_POINT=http://localhost
else
ACCESS_POINT=https://$domain
fi
echo ""
# Making sure this version of NGINX supports sites-enabled
if [[ -z $(sudo cat /etc/nginx/nginx.conf | grep sites-enabled) ]]; then
sudo mkdir -p /etc/nginx/sites-available
sudo mkdir -p /etc/nginx/sites-enabled
sudo cp resources/base.nginx.conf /etc/nginx/nginx.conf
fi
3 years ago
sudo mkdir -p /etc/nginx/logs
AO_NGINX_CONF=/etc/nginx/sites-available/ao
sudo cp resources/ao.nginx.conf $AO_NGINX_CONF
if [ -n $anywhere ]; then
sudo sed -i "s#SERVER_NAME#_#" $AO_NGINX_CONF
else
sudo sed -i "s#SERVER_NAME#${domain}#" $AO_NGINX_CONF
fi
sudo sed -i "s#FILE_ROOT#${HOME}/ao-react/dist#" $AO_NGINX_CONF
if [ ! -e /etc/nginx/sites-enabled/ao ]; then
sudo ln -s /etc/nginx/sites-available/ao /etc/nginx/sites-enabled/
fi
echo ""
echo "Excellent! We've configured $AO_NGINX_CONF to serve your AO from $domain"
echo ""
read -p "Would you like to enable SSL via Certbot? (y/n): " -n1 ssl
echo ""
case $ssl in
y | Y)
echo "Alright, let's get Certbot in here!"
install_if_needed python3 certbot python3-certbot-nginx
echo -e "${BOLD}Take it away, Certbot${NC}"
sudo certbot --nginx
;;
*)
echo "Yea, SSL is lame anyways..."
;;
esac
echo ""
# ------------------- Step 7 - Systemd Setup -------------------
READY=''
echo -e "\n${BOLD}Alright, almost there!${RESET} Now we just need to set up the system daemons for Tor, Bitcoin, Lightning, and the AO so that everything opens on startup."
while [[ -z $READY ]]; do
echo -en "${BLUE}You ready? (y/n):${RESET} "
read -n1 ao_select
echo ""
echo ""
case $ao_select in
"y" | "Y")
echo -e "Nice, let's do it.\n"
READY=1
;;
*)
echo -e "wrong answer, fren\n"
;;
esac
done
echo ""
echo "Creating tor.service..."
TOR_SERVICE=/etc/systemd/system/tor.service
if [ -f "$TOR_SERVICE" ]; then
echo "Seems like you've already got tor here!"
else
sudo cp resources/tor-service-template $TOR_SERVICE
# Making sure all values have been de-templated
sudo sed -i "s#USER#${USER}#g" $TOR_SERVICE
sudo sed -i "s#HOME#${HOME}#g" $TOR_SERVICE
sudo sed -i "s#TORRCPATH#${TORRCPATH}#g" $TOR_SERVICE
sudo sed -i "s#TORPATH#$(which tor)#g" $TOR_SERVICE
fi
# Creating the .tor directory
sudo mkdir -p $HOME/.tor
sudo chown tor $HOME/.tor
sudo chgrp $USER $HOME/.tor
sudo chmod 770 $HOME/.tor
echo "Enabling and starting Tor"
sudo systemctl enable tor
sudo systemctl start tor
echo ""
echo "Creating bitcoin.service..."
BTC_SERVICE=/etc/systemd/system/bitcoin.service
if [ -f "$BTC_SERVICE" ]; then
echo -e "Seems like you've already have a bitcoin service!"
else
sudo cp resources/bitcoin-service-template $BTC_SERVICE
# Making sure all values have been de-templated
sudo sed -i "s#USER#${USER}#g" $BTC_SERVICE
sudo sed -i "s#HOME#${HOME}#g" $BTC_SERVICE
sudo sed -i "s#BITCOIND#$(which bitcoind)#g" $BTC_SERVICE
fi
echo -e "Enabling and starting ${GREEN}Bitcoin${RESET}"
sudo systemctl enable bitcoin
sudo systemctl start bitcoin
echo ""
echo "Creating lightning.service..."
LN_SERVICE=/etc/systemd/system/lightning.service
if [ -f "$LN_SERVICE" ]; then
echo -e "Seems like you've already have a lightning service!"
else
sudo cp resources/lightning-service-template $LN_SERVICE
# Making sure all values have been de-templated
sudo sed -i "s#USER#${USER}#g" $LN_SERVICE
sudo sed -i "s#HOME#${HOME}#g" $LN_SERVICE
sudo sed -i "s#LIGHTNINGD#$(which lightningd)#g" $LN_SERVICE
fi
echo -e "Enabling and starting ${GREEN}lightning${RESET} "
sudo systemctl enable lightning
sudo systemctl start lightning
echo ""
echo "Creating ao.service..."
AO_SERVICE=/etc/systemd/system/ao.service
if [ -f "$AO_SERVICE" ]; then
echo "Seems like you've already added one of these!"
else
sudo cp resources/ao-service-template $AO_SERVICE
# Making sure all values have been de-templated
sudo sed -i "s#USER#${USER}#g" $AO_SERVICE
sudo sed -i "s#HOME#${HOME}#g" $AO_SERVICE
sudo sed -i "s#NODE#$(which node)#g" $AO_SERVICE
sudo sed -i "s#AO#${AO}#g" $AO_SERVICE
sudo sed -i "s#NODE_PARAMS#${NODE_PARAMS}#g" $AO_SERVICE
fi
echo -e "Enabling and starting the ${GREEN}AO${RESET}'s backend"
sudo systemctl enable ao
sudo systemctl start ao
echo ""
echo -e "Enabling and starting ${GREEN}NGINX${RESET} as the webserver"
sudo systemctl enable nginx
sudo systemctl start nginx
# ------------------- Step 8 - Port Testing -------------------
echo ""
echo -e "${BOLD}One more thing!${RESET} We need to make sure that your ports are open."
check_ports
# ------------------- Step 9 - Health Check -------------------
echo '*********************************************************'
echo -e "* ${BOLD}Version Information${RESET} *"
echo '*********************************************************'
echo ' '
echo 'make Version'
echo '*********************************************************'
make --version
echo ' '
echo 'node Version'
echo '*********************************************************'
node --version
echo ' '
echo 'sqlite3 Version'
echo '*********************************************************'
sqlite3 --version
echo ' '
echo 'tor Version'
echo '*********************************************************'
tor --version
echo ' '
echo 'bitcoind Version'
echo '*********************************************************'
bitcoind --version
echo ' '
echo 'lightningd Version'
echo '*********************************************************'
lightningd --version
echo ' '
echo 'clboss Version'
echo '*********************************************************'
clboss --version
echo ""
echo -e "$BOLD\nOkay, well that's everything!${RESET}\n\nAs long as everything worked properly, \
you should be ready to continue your journey\ntowards autonomy by opening ${BLUE}$ACCESS_POINT${RESET} in your browser."
3 years ago
echo -e "The default login is ${BLUE}dctrl/dctrl${RESET}, have fun!"
exit 0