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.
393 lines
12 KiB
393 lines
12 KiB
3 years ago
|
#!/bin/sh
|
||
|
|
||
|
# Script for installing a simple Flask server and deploying it
|
||
|
# Bare Metal Alchemist, 2022
|
||
|
|
||
|
source ingredients/lead
|
||
|
source ingredients/iron
|
||
|
source ingredients/copper
|
||
|
|
||
|
clear
|
||
|
say "${BLUE}"
|
||
|
say " ${AAAAAAAAAAAA} &&&&&&&&&&& "
|
||
|
say " ${AAAAAAAAAAAA} &@ && "
|
||
|
say " ${AAAAAAAAAAAA} &@ && "
|
||
|
say " ${AAAAAAAAAAAA} &@ && "
|
||
|
say "${RESET} 8888888888 888 888 ${BLUE} /&& @& "
|
||
|
say "${RESET} 8888888888 888 888 ${BLUE} @&# &&&&&, "
|
||
|
say "${RESET} 888 888 888 ${BLUE} #&. /&/ "
|
||
|
say "${RESET} 888 888 888 ${BLUE} && *&@ "
|
||
|
say "${RESET} 8888888 888 8888b. .d8888b 888 888${BLUE} && &&&&&@ "
|
||
|
say "${RESET} 888 888 '88b 88K 888 .88P${BLUE} && && "
|
||
|
say "${RESET} 888 888 .d888888 'Y8888b. 888888K ${BLUE} &@ && "
|
||
|
say "${RESET} 888 888 888 888 X88 888 '88b${BLUE} && .&@ "
|
||
|
say "${RESET} 888 888 'Y888888 88888P' 888 888${BLUE} (&&&&&&&&&&&&&&&&&&&&&. "
|
||
|
say "${RESET}"
|
||
|
|
||
|
# ------------------- Step 1 - Baseline Setup -------------------
|
||
|
|
||
|
say "${BOLD}Hi again!${RESET} Looks like you want to get ${BLUE}Flask${RESET} up and running."
|
||
|
say "Well, as an alchemy-themed toolkit, I must say: ${GREEN}good decision :)${RESET}"
|
||
|
say ""
|
||
|
|
||
|
# Make sure this script isn't being run with sudo in front
|
||
|
if [ "$EUID" -eq 0 ]; then
|
||
|
say "${RED}${BOLD}Woah there!${RESET} Seems you're running this script as a superuser."
|
||
|
say ""
|
||
|
say "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"
|
||
|
say ""
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
say "${ULINE}Making sure we've got the basics...${RESET}"
|
||
|
echo -e "(you'll probably need to input ${BLUE}your 'sudo' password${RESET} here)"
|
||
|
case $DISTRO in
|
||
|
"debian")
|
||
|
say "HEY I HAVEN'T TESTED THIS BY THE WAY"
|
||
|
install_if_needed python python-pip
|
||
|
pip install --upgrade pip
|
||
|
;;
|
||
|
"arch")
|
||
|
install_if_needed python python-pip
|
||
|
pip install --upgrade pip
|
||
|
;;
|
||
|
"mac")
|
||
|
say "HEY I HAVEN'T TESTED THIS BY THE WAY"
|
||
|
install_if_needed python python-pip
|
||
|
pip install --upgrade pip
|
||
|
;;
|
||
|
"fedora")
|
||
|
say "HEY I HAVEN'T TESTED THIS BY THE WAY"
|
||
|
install_if_needed python python-pip
|
||
|
pip install --upgrade pip
|
||
|
;;
|
||
|
esac
|
||
|
echo ""
|
||
|
|
||
|
while [ ! -d "$FLASK_DIR" ]; do
|
||
|
ask_for FLASK_DIR "Please enter the path you would like to install \
|
||
|
Flask to (or enter nothing for ${BLUE}~/flask${RESET}): "
|
||
|
if [ -z "$FLASK_DIR" ]; then
|
||
|
remember "FLASK_DIR=$HOME/flask"
|
||
|
fi
|
||
|
say ""
|
||
|
ask_for CONFIRM "Okay, should we install to \
|
||
|
${BLUE}${FLASK_DIR}${RESET}? ${BLUE}(y/n)${RESET} "
|
||
|
|
||
|
case $CONFIRM in
|
||
|
"Y" | "y")
|
||
|
mkdir -p $FLASK_DIR
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
# ------------------- Step 2 - Create venv -------------------
|
||
|
|
||
|
if [ -d "$FLASK_VENV" ]; then
|
||
|
say "We already have a virtualenv folder for Flask here: ${BLUE}$FLASK_VENV${RESET}"
|
||
|
else
|
||
|
say "Creating virtual environment for Flask"
|
||
|
python -m venv $FLASK_DIR/venv
|
||
|
remember FLASK_VENV=$FLASK_DIR/venv
|
||
|
fi
|
||
|
|
||
|
if [ "$VIRTUAL_ENV" != "$FLASK_VENV" ]; then
|
||
|
say "Sourcing the virtual environment"
|
||
|
source ${FLASK_VENV}/bin/activate
|
||
|
fi
|
||
|
|
||
|
say "Making sure we've got all the python packages we need!"
|
||
|
pip install -r resources/flask/requirements.txt
|
||
|
say ""
|
||
|
|
||
|
# ------------------- Step 3 - Build Flask -------------------
|
||
|
|
||
|
say "${BOLD}We've got everything!${RESET} I'm going to set you up with \
|
||
|
a basic Flask page now"
|
||
|
|
||
|
mkdir -p ${FLASK_DIR}/{templates,static}
|
||
|
cp resources/flask/app.py ${FLASK_DIR}
|
||
|
cp resources/flask/demo.css ${FLASK_DIR}/static
|
||
|
cp resources/flask/demo.html ${FLASK_DIR}/templates
|
||
|
|
||
|
cd ${FLASK_DIR}
|
||
|
flask run
|
||
|
|
||
|
exit 0
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
if [ ! -z $AO ]; then
|
||
|
echo "You're currently using ao-$AO"
|
||
|
echo -en "Would you like to re-install? ${BLUE}(y/n): ${RESET}"
|
||
|
read reinstall_ao
|
||
|
echo ""
|
||
|
case $reinstall_ao in
|
||
|
"Y" | "y")
|
||
|
forget AO
|
||
|
;;
|
||
|
*)
|
||
|
echo "Okay, we'll keep using this version of AO"
|
||
|
;;
|
||
|
esac
|
||
|
fi
|
||
|
|
||
|
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 -e "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 [ -z $NVM_DIR ]; then
|
||
|
install_nvm
|
||
|
source ingredients/iron
|
||
|
else
|
||
|
echo -e "${BLUE}Node${RESET} already installed!"
|
||
|
fi
|
||
|
|
||
|
echo -e "Setting Node to ${BLUE}v16.13.0${RESET} for compatibility"
|
||
|
set_node_to v16.13.0
|
||
|
echo ""
|
||
|
echo -e "${GREEN}Done!${RESET}"
|
||
|
echo ""
|
||
|
fi
|
||
|
|
||
|
if [ $AO = "3" ] || [ $AO = 'react' ]; then
|
||
|
echo -e "${BOLD}Installing Bitcoin Ecosystem${RESET}"
|
||
|
echo ""
|
||
|
|
||
|
if ! check_for bitcoind; then
|
||
|
echo -e "Building bitcoind from source... might take a while!"
|
||
|
install_bitcoin
|
||
|
fi
|
||
|
|
||
|
if ! check_for lightningd; then
|
||
|
echo -e "Building lightningd from source... here we go again"
|
||
|
install_lightning
|
||
|
fi
|
||
|
|
||
|
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
|
||
|
echo ""
|
||
|
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")
|
||
|
if [ ! -d ~/ao-3 ]; then
|
||
|
echo -e "Installing ${BLUE}ao-3${RESET}"
|
||
|
git clone 'https://github.com/AutonomousOrganization/ao-3.git' ~/ao-3
|
||
|
fi
|
||
|
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}"
|
||
|
if [ ! -d ~/ao-react ]; then
|
||
|
git clone 'https://github.com/coalition-of-invisible-colleges/ao-react.git' ~/ao-react
|
||
|
fi
|
||
|
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 -en "You still there? I might need your input here! \n\n${BLUE}(enter)${RESET}"
|
||
|
read
|
||
|
|
||
|
initialize_nginx
|
||
|
make_site ao "FILE_ROOT=${HOME}/ao-${AO}/dist"
|
||
|
echo ""
|
||
|
configure_domain_for_site ao
|
||
|
enable_ssl
|
||
|
|
||
|
echo -e "Excellent! We've configured this computer to serve your AO from ${BLUE}${ACCESS_POINT}${RESET}"
|
||
|
|
||
|
# ------------------- 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
|
||
|
|
||
|
build_service_from_template tor "TORRCPATH=$TORRCPATH" "TORPATH=`which tor`"
|
||
|
|
||
|
# Creating the .tor directory
|
||
|
sudo mkdir -p $HOME/.tor
|
||
|
sudo chown tor $HOME/.tor
|
||
|
sudo chgrp $USER $HOME/.tor
|
||
|
sudo chmod 770 $HOME/.tor
|
||
|
|
||
|
activate_service tor
|
||
|
|
||
|
echo ""
|
||
|
build_service_from_template bitcoin "BITCOIND=`which bitcoind`"
|
||
|
activate_service bitcoin
|
||
|
|
||
|
echo ""
|
||
|
build_service_from_template lightning "LIGHTNINGD=`which lightningd`"
|
||
|
activate_service lightning
|
||
|
|
||
|
echo ""
|
||
|
build_service_from_template ao "NODE=`which node`" "AO=$AO" "NODE_PARAMS=$NODE_PARAMS"
|
||
|
activate_service ao
|
||
|
|
||
|
echo "this should be nginx"
|
||
|
activate_service nginx
|
||
|
|
||
|
# ------------------- Step 8 - Port Testing -------------------
|
||
|
|
||
|
echo ""
|
||
|
echo -e "${BOLD}One more thing!${RESET} We need to make sure that your ports are open."
|
||
|
echo ""
|
||
|
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."
|
||
|
echo -e "The default login is ${BLUE}dctrl/dctrl${RESET}, have fun!"
|
||
|
|
||
|
exit 0
|