node-installer.sh/setup.bash

282 lines
7.0 KiB
Bash
Raw Normal View History

2014-12-22 00:16:06 +00:00
#!/bin/bash
2016-03-28 19:50:12 +00:00
# Installs node.js + dependencies for both Ubuntu and OS X
2015-01-14 09:57:45 +00:00
#
2016-03-28 20:11:01 +00:00
# See https://github.com/coolaj86/node-install-script
2015-01-14 09:57:45 +00:00
#
2014-12-28 08:25:26 +00:00
# curl -fsSL https://example.com/setup.bash | bash
# wget -nv https://example.com/setup.bash -O - | bash
2014-12-22 00:16:06 +00:00
NODEJS_NAME="node"
NODEJS_BASE_URL="https://nodejs.org"
2015-01-14 09:43:38 +00:00
BASE_URL="https://raw.githubusercontent.com/coolaj86/iojs-install-script/master"
2015-01-15 22:41:04 +00:00
NO_FAIL2BAN=""
2014-12-22 00:16:06 +00:00
OS="unsupported"
ARCH=""
NODEJS_VER=""
2015-01-15 22:41:04 +00:00
SETUP_FILE=""
clear
#########################
# Which OS and version? #
#########################
2014-12-22 00:16:06 +00:00
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'
2015-03-20 03:34:45 +00:00
elif [ "$(cat /etc/issue | grep -i 'Raspbian')" ]; then
OS='raspbian'
2014-12-22 00:16:06 +00:00
elif [ "$(cat /etc/issue | grep -i 'Fedora')" ]; then
OS='fedora'
fi
else
echo "unsupported unknown os (non-mac, non-linux)"
exit 1
fi
case "${OS}" in
fedora)
2015-01-15 22:41:04 +00:00
echo "FEDORA not yet supported (feel free to pull request)"
exit 1
2014-12-22 00:16:06 +00:00
;;
ubuntu)
2015-01-15 22:41:04 +00:00
SETUP_FILE="ubuntu"
2014-12-22 00:16:06 +00:00
;;
2015-03-20 03:34:45 +00:00
raspbian)
SETUP_FILE="ubuntu"
;;
2014-12-22 00:16:06 +00:00
yosemite)
# mavericks
2015-01-15 22:41:04 +00:00
SETUP_FILE="mavericks"
2014-12-22 00:16:06 +00:00
;;
mavericks)
2015-01-15 22:41:04 +00:00
SETUP_FILE="mavericks"
2014-12-22 00:16:06 +00:00
;;
mountain)
2015-01-15 22:41:04 +00:00
echo "Mountain Lion not yet supported (feel free to pull request)"
exit 1
2014-12-22 00:16:06 +00:00
;;
lion)
2015-01-15 22:41:04 +00:00
echo "Lion not yet supported (feel free to pull request)"
exit 1
2014-12-22 00:16:06 +00:00
;;
snow)
2015-01-15 22:41:04 +00:00
echo "Snow Leopard not yet supported (feel free to pull request)"
exit 1
2014-12-22 00:16:06 +00:00
;;
*)
echo "unsupported unknown os ${OS}"
exit 1
;;
esac
2015-01-15 22:41:04 +00:00
#######################
# Download installers #
#######################
echo "Preparing to install ${NODEJS_NAME} (and common development dependencies) for ${OS}" "${ARCH}"
2015-01-15 22:41:04 +00:00
2016-03-28 19:50:12 +00:00
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}" \
2016-03-28 20:11:01 +00:00
-o "/tmp/${INSTALL_DEPS_FILE}" || echo 'error downloading os deps script: '"${BASE_URL}/${INSTALL_DEPS_FILE}"
2016-03-28 19:50:12 +00:00
curl --silent "${BASE_URL}/${INSTALL_FILE}" \
2016-03-28 20:11:01 +00:00
-o "/tmp/${INSTALL_FILE}" || echo 'error downloading os setup script: '"${BASE_URL}/${INSTALL_FILE}"
2016-03-28 19:50:12 +00:00
elif [ -n "$(which wget)" ]; then
wget --quiet "${BASE_URL}/${INSTALL_DEPS_FILE}" \
2016-03-28 20:11:01 +00:00
-O "/tmp/${INSTALL_DEPS_FILE}" || echo 'error downloading os deps script: '"${BASE_URL}/${INSTALL_DEPS_FILE}"
2016-03-28 19:50:12 +00:00
wget --quiet "${BASE_URL}/${INSTALL_FILE}" \
2016-03-28 20:11:01 +00:00
-O "/tmp/${INSTALL_FILE}" || echo 'error downloading os setup script: '"${BASE_URL}/${INSTALL_FILE}"
2016-03-28 19:50:12 +00:00
else
echo "Found neither 'curl' nor 'wget'. Can't Continue."
exit 1
fi
2015-01-15 22:41:04 +00:00
fi
2016-03-28 20:11:01 +00:00
if [ ! -e "/tmp/${INSTALL_DEPS_FILE}" ]
then
echo "Error Downloading Install File"
exit 1
fi
2015-01-15 22:41:04 +00:00
################
# 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 obviosly 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
2016-03-28 19:50:12 +00:00
bash "/tmp/${INSTALL_DEPS_FILE}" "${NO_FAIL2BAN}"
2015-01-15 22:41:04 +00:00
#########################
# Which node.js VERSION ? #
2015-01-15 22:41:04 +00:00
#########################
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)
2015-01-15 22:41:04 +00:00
fi
if [ -n "$NODEJS_VER" ]; then
NODEJS_VERT=$(echo ${NODEJS_VER} | cut -c 2- | cut -d '.' -f1)
2015-12-23 02:46:44 +00:00
if [ $NODEJS_VERT -ge 1 ] && [ $NODEJS_VERT -lt 4 ]
then
2015-12-23 02:46:44 +00:00
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
2015-04-22 15:46:54 +00:00
if [ -n "$(which curl)" ]; then
2016-03-28 19:50:12 +00:00
NODEJS_VER=$(curl -fsSL "$NODEJS_BASE_URL/dist/index.tab" | head -2 | tail -1 | cut -f 1) \
|| echo "error automatically determining current ${NODEJS_NAME} version"
2015-04-22 15:46:54 +00:00
elif [ -n "$(which wget)" ]; then
2016-03-28 19:50:12 +00:00
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"
2015-04-22 15:46:54 +00:00
else
echo "Found neither 'curl' nor 'wget'. Can't Continue."
exit 1
fi
2015-01-15 22:41:04 +00:00
fi
#
2016-03-28 20:11:01 +00:00
# node
2015-01-15 22:41:04 +00:00
#
2016-03-28 20:11:01 +00:00
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
2015-01-15 22:41:04 +00:00
else
2015-01-15 22:52:35 +00:00
echo ""
2015-01-15 22:41:04 +00:00
echo "HEY, LISTEN:"
echo ""
2016-03-28 20:11:01 +00:00
echo "node.js is already installed as node $(node -v | grep v)"
2015-01-15 22:41:04 +00:00
echo ""
2016-03-28 20:11:01 +00:00
echo "to reinstall please first run: rm $(which node)"
2015-01-15 22:41:04 +00:00
echo ""
fi
2016-03-28 20:11:01 +00:00
NODEJS_VER=""
2015-01-15 22:41:04 +00:00
fi
if [ -n "${NODEJS_VER}" ]; then
2016-03-28 19:50:12 +00:00
bash "/tmp/${INSTALL_FILE}" "${NODEJS_VER}"
2015-01-15 22:41:04 +00:00
fi
2014-12-22 00:16:06 +00:00
# jshint
if [ -z "$(which jshint | grep jshint)" ]; then
echo "installing jshint..."
npm install --silent jshint -g > /dev/null
fi
echo ""