diff --git a/misc/install.sh b/misc/install.sh new file mode 100755 index 00000000..7ef9455e --- /dev/null +++ b/misc/install.sh @@ -0,0 +1,117 @@ +#!/usr/bin/env bash + +{ # this ensures the entire script is downloaded before execution + +ENIGMA_NODE_VERSION=${ENIGMA_NODE_VERSION:=4.4} +ENIGMA_INSTALL_DIR=${ENIGMA_INSTALL_DIR:=$HOME/enigma-bbs} +ENIGMA_SOURCE=${ENIGMA_SOURCE:=https://github.com/NuSkooler/enigma-bbs.git} +TIME_FORMAT=`date "+%Y-%m-%d %H:%M:%S"` +WAIT_BEFORE_INSTALL=10 + +enigma_header() { + clear + cat << EndOfMessage + ______ +_____________________ _____ ____________________ __________\\_ / +\\__ ____/\\_ ____ \\ /____/ / _____ __ \\ / ______/ // /___jp! + // __|___// | \\// |// | \\// | | \\// \\ /___ /_____ +/____ _____| __________ ___|__| ____| \\ / _____ \\ +---- \\______\\ -- |______\\ ------ /______/ ---- |______\\ - |______\\ /__/ // ___/ + /__ _\\ + <*> ENiGMA½ // https://github.com/NuSkooler/enigma-bbs <*> /__/ + +ENiGMA½ will be installed to ${ENIGMA_INSTALL_DIR}, from source ${ENIGMA_SOURCE}. + +ENiGMA½ requires Node, v${ENIGMA_NODE_VERSION} will be installed via nvm. If you already have nvm installed, this install script will update it to the latest version. + +If this isn't what you were expecting, hit ctrl-c now. Installation will continue in ${WAIT_BEFORE_INSTALL} seconds... + +EndOfMessage + sleep ${WAIT_BEFORE_INSTALL} +} + +enigma_install_needs() { + command -v $1 >/dev/null 2>&1 || { log_error "ENiGMA½ requires $1 but it's not installed. Please install it and restart the installer."; exit 1; } +} + +log() { + printf "${TIME_FORMAT} %b\n" "$*"; +} + +log_error() { + printf "${TIME_FORMAT} \e[41mERROR:\033[0m %b\n" "$*" >&2; +} + +enigma_install_init() { + log "Checking git installation" + enigma_install_needs git + + log "Checking curl installation" + enigma_install_needs curl +} + +install_nvm() { + log "Installing nvm" + curl -o- https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash +} + +configure_nvm() { + log "Installing Node ${ENIGMA_NODE_VERSION} via nvm" + . ~/.nvm/nvm.sh + nvm install ${ENIGMA_NODE_VERSION} + nvm use ${ENIGMA_NODE_VERSION} +} + +download_enigma_source() { + local INSTALL_DIR + INSTALL_DIR=${ENIGMA_INSTALL_DIR} + + if [ -d "$INSTALL_DIR/.git" ]; then + log "ENiGMA½ is already installed in $INSTALL_DIR, trying to update using git" + command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" fetch 2> /dev/null || { + log_error "Failed to update ENiGMA½, run 'git fetch' in $INSTALL_DIR yourself." + exit 1 + } + else + log "Downloading ENiGMA½ from git to '$INSTALL_DIR'" + mkdir -p "$INSTALL_DIR" + command git clone ${ENIGMA_SOURCE} "$INSTALL_DIR" || { + log_error "Failed to clone ENiGMA½ repo. Please report this!" + exit 1 + } + fi +} + +install_node_packages() { + log "Installing required Node packages" + cd ${ENIGMA_INSTALL_DIR} + npm install + if [ $? -eq 0 ]; then + log "npm package installation complete" + else + log_error "Failed to install ENiGMA½ npm packages. Please report this!" + fi +} + +enigma_footer() { + log "ENiGMA½ installation complete!" + echo -e "\e[33m" + cat << EndOfMessage +If this is the first time you've installed ENiGMA½, you now need to generate a minimal configuration. To do so, run the following commands: + +cd ${ENIGMA_INSTALL_DIR} +./oputil.js config --new + +EndOfMessage + echo -e "\e[39m" +} + +enigma_header +enigma_install_init +install_nvm +configure_nvm +download_enigma_source +install_node_packages +enigma_footer + +} # this ensures the entire script is downloaded before execution \ No newline at end of file