diff --git a/setup.bash b/setup.bash index 654c15d..853999d 100644 --- a/setup.bash +++ b/setup.bash @@ -1,24 +1,291 @@ #!/bin/bash -TMP_FILE='/tmp/node-installer-new.sh' +# Installs node.js + dependencies for both Ubuntu and OS X -set -e -rm -rf /tmp/node-installer-new.sh +# +# See https://github.com/coolaj86/node-install-script +# -echo "Downloading and running the new installer script from https://git.daplie.com/coolaj86/node-install-script/raw/master/setup.bash" +# curl -fsSL https://example.com/setup.bash | bash +# wget -nv https://example.com/setup.bash -O - | bash -SETUP_URL='https://git.daplie.com/coolaj86/node-install-script/raw/master/setup.bash' +NODEJS_NAME="node" +NODEJS_BASE_URL="https://nodejs.org" +BASE_URL="https://raw.githubusercontent.com/coolaj86/node-install-script/master" +NO_FAIL2BAN="" +OS="unsupported" +ARCH="" +NODEJS_VER="" +SETUP_FILE="" + +clear -if [ -n "$(which curl)" ]; then - curl --silent "$SETUP_URL" \ - -o "$TMP_FILE" || echo 'error downloading newer deps script:' "$SETUP_URL" - -elif [ -n "$(which wget)" ]; then - wget --quiet "$SETUP_URL" \ - -O "$TMP_FILE" || echo 'error downloading newer deps script:' "$SETUP_URL" + +######################### +# Which OS and version? # +######################### + +if [ "$(uname | grep -i 'Darwin')" ]; then + OSX_VER="$(sw_vers | grep ProductVersion | cut -d':' -f2 | cut -f2)" + OSX_MAJOR="$(echo ${OSX_VER} | cut -d'.' -f1)" + OSX_MINOR="$(echo ${OSX_VER} | cut -d'.' -f2)" + OSX_PATCH="$(echo ${OSX_VER} | cut -d'.' -f3)" + + # + # Major + # + if [ "$OSX_MAJOR" -lt 10 ]; then + echo "unsupported OS X version (os 9-)" + exit 1 + fi + + if [ "$OSX_MAJOR" -gt 10 ]; then + echo "unsupported OS X version (os 11+)" + exit 1 + fi + + # + # Minor + # + if [ "$OSX_MINOR" -le 5 ]; then + echo "unsupported OS X version (os 10.5-)" + exit 1 + fi + + # Snow + if [ "$OSX_MINOR" -eq 6 ]; then + OS='snow' + fi + + # Lion + if [ $OSX_MINOR -eq 7 ]; then + OS='lion' + fi + + # Mountain Lion + if [ "$OSX_MINOR" -eq 8 ]; then + OS='mountain' + fi + + # Mavericks, Yosemite + if [ "$OSX_MINOR" -ge 9 ]; then + OS='mavericks' + fi + + if [ -n "$(sysctl hw | grep 64bit | grep ': 1')" ]; then + ARCH="64" + else + ARCH="32" + fi +elif [ "$(uname | grep -i 'Linux')" ]; then + if [ ! -f "/etc/issue" ]; then + echo "unsupported linux os" + exit 1 + fi + + if [ -n "$(arch | grep 64)" ]; then + ARCH="64" + else + ARCH="32" + fi + + if [ "$(cat /etc/issue | grep -i 'Ubuntu')" ]; then + OS='ubuntu' + elif [ "$(cat /etc/issue | grep -i 'Linux Mint')" ]; then + OS='ubuntu' + elif [ "$(cat /etc/issue | grep -i 'elementary OS')" ]; then + OS='ubuntu' + elif [ "$(cat /etc/issue | grep -i 'Debian')" ]; then + OS='ubuntu' + elif [ "$(cat /etc/issue | grep -i 'Trisquel')" ]; then + OS='ubuntu' + elif [ "$(cat /etc/issue | grep -i 'Zorin')" ]; then + OS='ubuntu' + elif [ "$(cat /etc/issue | grep -i 'Raspbian')" ]; then + OS='raspbian' + elif [ "$(cat /etc/issue | grep -i 'Fedora')" ]; then + OS='fedora' + fi +else + echo "unsupported unknown os (non-mac, non-linux)" + exit 1 fi -set +e +case "${OS}" in + fedora) + echo "FEDORA not yet supported (feel free to pull request)" + exit 1 + ;; + ubuntu) + SETUP_FILE="ubuntu" + ;; + raspbian) + SETUP_FILE="ubuntu" + ;; + yosemite) + # mavericks + SETUP_FILE="mavericks" + ;; + mavericks) + SETUP_FILE="mavericks" + ;; + mountain) + echo "Mountain Lion not yet supported (feel free to pull request)" + exit 1 + ;; + lion) + echo "Lion not yet supported (feel free to pull request)" + exit 1 + ;; + snow) + echo "Snow Leopard not yet supported (feel free to pull request)" + exit 1 + ;; + *) + echo "unsupported unknown os ${OS}" + exit 1 + ;; +esac -bash $TMP_FILE \ No newline at end of file + + + +####################### +# Download installers # +####################### + +echo "Preparing to install ${NODEJS_NAME} (and common development dependencies) for ${OS}" "${ARCH}" + +INSTALL_DEPS_FILE="setup-deps-${SETUP_FILE}.bash" +INSTALL_FILE="setup-node-${SETUP_FILE}.bash" +if [ ! -e "/tmp/${INSTALL_DEPS_FILE}" ] +then + if [ -n "$(which curl)" ]; then + curl --silent "${BASE_URL}/${INSTALL_DEPS_FILE}" \ + -o "/tmp/${INSTALL_DEPS_FILE}" || echo 'error downloading os deps script: '"${BASE_URL}/${INSTALL_DEPS_FILE}" + curl --silent "${BASE_URL}/${INSTALL_FILE}" \ + -o "/tmp/${INSTALL_FILE}" || echo 'error downloading os setup script: '"${BASE_URL}/${INSTALL_FILE}" + elif [ -n "$(which wget)" ]; then + wget --quiet "${BASE_URL}/${INSTALL_DEPS_FILE}" \ + -O "/tmp/${INSTALL_DEPS_FILE}" || echo 'error downloading os deps script: '"${BASE_URL}/${INSTALL_DEPS_FILE}" + wget --quiet "${BASE_URL}/${INSTALL_FILE}" \ + -O "/tmp/${INSTALL_FILE}" || echo 'error downloading os setup script: '"${BASE_URL}/${INSTALL_FILE}" + else + echo "Found neither 'curl' nor 'wget'. Can't Continue." + exit 1 + fi +fi + +if [ ! -e "/tmp/${INSTALL_DEPS_FILE}" ] +then + echo "Error Downloading Install File" + exit 1 +fi + + +################ +# DEPENDENCIES # +################ + +if [ -z "$(which fail2ban-server | grep fail2ban)" ]; then + echo "" + echo "Your server didn't come with fail2ban preinstalled!!!" + echo "Among other things, fail2ban secures ssh so that your server isn't reaped by botnets." + echo "" + echo "Since you're obviously connecting this computer to a network, you should install fail2ban before continuing" + echo "" + echo "Install fail2ban? [Y/n]" + echo "(if unsure, just hit [enter])" + read INSTALL_FAIL2BAN + + if [ "n" == "${INSTALL_FAIL2BAN}" ] || [ "no" == "${INSTALL_FAIL2BAN}" ] || [ "N" == "${INSTALL_FAIL2BAN}" ] || [ "NO" == "${INSTALL_FAIL2BAN}" ]; then + echo "" + echo "I don't think you understand: This is important." + echo "" + echo "Your server will be under constant attack by botnets via ssh." + echo "It only takes a few extra seconds to install and the defaults are adequate for protecting you." + echo "" + echo "Change your mind?" + echo "Ready to install fail2ban? [Y/n]" + read INSTALL_FAIL2BAN + if [ "n" == "${INSTALL_FAIL2BAN}" ] || [ "no" == "${INSTALL_FAIL2BAN}" ] || [ "N" == "${INSTALL_FAIL2BAN}" ] || [ "NO" == "${INSTALL_FAIL2BAN}" ]; then + clear + echo "you make me sad :-(" + sleep 0.5 + echo "but whatever, it's your funeral..." + sleep 1 + NO_FAIL2BAN="nope" + else + echo "Phew, dodged the bullet on that one... Will install fail2ban.. :-)" + fi + fi +fi + +bash "/tmp/${INSTALL_DEPS_FILE}" "${NO_FAIL2BAN}" + +######################### +# Which node.js VERSION ? # +######################### + +if [ -f "/tmp/NODEJS_VER" ]; then + NODEJS_VER=$(cat /tmp/NODEJS_VER | grep v) +elif [ -f "/tmp/IOJS_VER" ]; then + NODEJS_VER=$(cat /tmp/IOJS_VER | grep v) +fi + +if [ -n "$NODEJS_VER" ]; then + NODEJS_VERT=$(echo ${NODEJS_VER} | cut -c 2- | cut -d '.' -f1) + + if [ $NODEJS_VERT -ge 1 ] && [ $NODEJS_VERT -lt 4 ] + then + echo "Selecting io.js instead of node.js for this version (>= 1.0.0 < 4.0.0)" + NODEJS_BASE_URL="https://iojs.org" + NODEJS_NAME="iojs" + fi +fi + +if [ -z "$NODEJS_VER" ]; then + if [ -n "$(which curl)" ]; then + NODEJS_VER=$(curl -fsL "$NODEJS_BASE_URL/dist/index.tab" | head -2 | tail -1 | cut -f 1) \ + || echo "error automatically determining current ${NODEJS_NAME} version" + elif [ -n "$(which wget)" ]; then + NODEJS_VER=$(wget --quiet "$NODEJS_BASE_URL/dist/index.tab" -O - | head -2 | tail -1 | cut -f 1) \ + || echo "error automatically determining current ${NODEJS_NAME} version" + else + echo "Found neither 'curl' nor 'wget'. Can't Continue." + exit 1 + fi +fi + +# +# node +# +if [ -n "$(which node | grep node 2>/dev/null)" ]; then +# node of some version is already installed + if [ "${NODEJS_VER}" == "$(node -v 2>/dev/null)" ]; then + echo node ${NODEJS_VER} is already installed + else + echo "" + echo "HEY, LISTEN:" + echo "" + echo "node.js is already installed as node $(node -v | grep v)" + echo "" + echo "to reinstall please first run: rm $(which node)" + echo "" + fi + + NODEJS_VER="" +fi + +if [ -n "${NODEJS_VER}" ]; then + bash "/tmp/${INSTALL_FILE}" "${NODEJS_VER}" +fi + +# jshint +if [ -z "$(which jshint | grep jshint)" ]; then + echo "installing jshint..." + npm install --silent jshint -g > /dev/null +fi + +echo ""