Compare commits
229 Commits
Author | SHA1 | Date |
---|---|---|
AJ ONeal | a431978582 | |
AJ ONeal | 6c3fa218ba | |
AJ ONeal | 79d4d239ad | |
AJ ONeal | 60f206373c | |
AJ ONeal | 22c741817c | |
AJ ONeal | 1f3a195fe9 | |
AJ ONeal | c3890ca8a9 | |
AJ ONeal | 689fa58531 | |
AJ ONeal | 895dcd31f2 | |
AJ ONeal | b8acbae85f | |
AJ ONeal | 509ee32688 | |
AJ ONeal | 3109f4bb94 | |
AJ ONeal | 05199bcf82 | |
AJ ONeal | 1387929dfc | |
AJ ONeal | c15264b763 | |
AJ ONeal | 8be0a29b7d | |
AJ ONeal | 972d510f59 | |
AJ ONeal | 92ec7ad5b6 | |
AJ ONeal | 95c0caf4be | |
AJ ONeal | ed24276356 | |
AJ ONeal | dddf31db8d | |
AJ ONeal | a1af3328cb | |
AJ ONeal | 515bdce8c2 | |
AJ ONeal | 4ea01c4c42 | |
AJ ONeal | 45adb12ae1 | |
AJ ONeal | 0d6e15ee62 | |
AJ ONeal | 8a14fc8ede | |
AJ ONeal | 2309008c5f | |
AJ ONeal | f2a8c2fc49 | |
AJ ONeal | b562d6dd3b | |
AJ ONeal | bad41027ad | |
AJ ONeal | 5f231f9d22 | |
AJ ONeal | 0171162f20 | |
AJ ONeal | 3ced314799 | |
AJ ONeal | 00c986e483 | |
AJ ONeal | 97c7ef9793 | |
AJ ONeal | c747edb99a | |
AJ ONeal | 62bc523d03 | |
AJ ONeal | 82e6ace060 | |
AJ ONeal | 748c51a687 | |
AJ ONeal | 0c7d0a7da6 | |
AJ ONeal | be9344dbea | |
AJ ONeal | 2d628014d0 | |
AJ ONeal | 17c0b01ee0 | |
AJ ONeal | e436cdb64d | |
AJ ONeal | a443dd04d3 | |
AJ ONeal | 5af26c6c86 | |
AJ ONeal | a9e1370b58 | |
AJ ONeal | 1edc07515f | |
AJ ONeal | 1a7d21b850 | |
AJ ONeal | 7809937d74 | |
AJ ONeal | 3adefcc4a8 | |
AJ ONeal | ae2511f592 | |
AJ ONeal | 08002c572a | |
AJ ONeal | 3e7745177f | |
AJ ONeal | 5d39eef143 | |
AJ ONeal | 90cdb8f93e | |
AJ ONeal | ccb1487b36 | |
AJ ONeal | e57069fe50 | |
AJ ONeal | e9c21e3063 | |
AJ ONeal | 216aa9b420 | |
AJ ONeal | d3069471e7 | |
AJ ONeal | 65ad946056 | |
AJ ONeal | b0b829fd91 | |
AJ ONeal | bacd1a4537 | |
AJ ONeal | 963f551a98 | |
AJ ONeal | 32839e69ba | |
AJ ONeal | 4090196e84 | |
AJ ONeal | 2adfec1fd6 | |
richdex14 | aed892007f | |
richdex14 | 6252737cc1 | |
richdex14 | 2f9f3c0c82 | |
richdex14 | a24f92df98 | |
richdex14 | 351056f9bc | |
richdex14 | 28c1ad8484 | |
richdex14 | ae331149f7 | |
richdex14 | 16a6d7e18c | |
richdex14 | 6c0afe6488 | |
richdex14 | 31b92cdadb | |
richdex14 | 561a2e2fa1 | |
richdex14 | 8a5593363d | |
richdex14 | 69bc78680d | |
richdex14 | 8a3f4ba77f | |
richdex14 | a99583fb1d | |
richdex14 | 0948a728c3 | |
richdex14 | fb0a8f6372 | |
richdex14 | de522df09b | |
AJ ONeal | b96b79f3ed | |
AJ ONeal | efe4bde88e | |
AJ ONeal | 1b271ba7e5 | |
AJ ONeal | 01bc3bf064 | |
AJ ONeal | 586863fb75 | |
AJ ONeal | 77c6be5840 | |
AJ ONeal | a05cf035b3 | |
AJ ONeal | f2f1cb94d2 | |
AJ ONeal | 6a73356dd9 | |
AJ ONeal | b33f1136f2 | |
AJ ONeal | 0e84c903e9 | |
AJ ONeal | 6fb08fe2af | |
AJ ONeal | ae72817e43 | |
AJ ONeal | 228bdc5e1c | |
AJ ONeal | 59e420471b | |
AJ ONeal | 3e36adfbcb | |
AJ ONeal | d41b5b1adf | |
AJ ONeal | 49d19e6cdb | |
AJ ONeal | 1a41b29bfb | |
AJ ONeal | 6d1df2e7e4 | |
AJ ONeal | 1c05eb8a68 | |
AJ ONeal | 6dde1965fc | |
AJ ONeal | e9837d9445 | |
AJ ONeal | 0a5ec4deba | |
AJ ONeal | 933ceba356 | |
AJ ONeal | 5a1edbd2e4 | |
AJ ONeal | 216bcb8796 | |
AJ ONeal | 30627ef933 | |
AJ ONeal | b6c4f023f5 | |
AJ ONeal | e93042403c | |
AJ ONeal | 1bc7b66208 | |
AJ ONeal | 24b68d4f90 | |
AJ ONeal | 85ad20281f | |
AJ ONeal | c3e6fa9660 | |
AJ ONeal | 94e18f04a9 | |
AJ ONeal | 2831949296 | |
AJ ONeal | 5b17c6e5fd | |
AJ ONeal | 4155a7c639 | |
AJ ONeal | 2cfa00cced | |
AJ ONeal | 4011161397 | |
AJ ONeal | 67245d84fc | |
AJ ONeal | a5d7a27747 | |
AJ ONeal | c65932db08 | |
AJ ONeal | 020fe6b3d6 | |
AJ ONeal | c243b8bb89 | |
AJ ONeal | d5fb60b2a9 | |
AJ ONeal | 891dd40394 | |
AJ ONeal | 2f42061544 | |
Joshua Mudge | dde86e4db2 | |
Joshua Mudge | fe16a47cb6 | |
Joshua Mudge | c8d1657124 | |
Joshua Mudge | 2c16603901 | |
Joshua Mudge | 4eccc5c807 | |
AJ ONeal | 9163e8e4e5 | |
AJ ONeal | 0241804132 | |
AJ ONeal | 4f96105db3 | |
AJ ONeal | 3f364aa1ed | |
AJ ONeal | 3e0dbfed66 | |
AJ ONeal | 1445f20fca | |
AJ ONeal | 5658598c4a | |
AJ ONeal | 2648050562 | |
AJ ONeal | 5a54bd3c50 | |
AJ ONeal | 06a6c22afb | |
AJ ONeal | 6229b43e22 | |
AJ ONeal | 16dee18802 | |
AJ ONeal | 4eeef938b6 | |
AJ ONeal | 70ba60508c | |
AJ ONeal | 863a949524 | |
AJ ONeal | 20ebf115c9 | |
AJ ONeal | 40ab864ee8 | |
AJ ONeal | cfcb236d39 | |
AJ ONeal | 9d7e5f6442 | |
AJ ONeal | d9f6f974ae | |
AJ ONeal | 1f63791ef9 | |
AJ ONeal | 2398ca578f | |
Manuel Strebel | 80b80bbfc6 | |
AJ ONeal | d8c75b08f4 | |
AJ ONeal | 701513faa9 | |
AJ ONeal | 139be1b26d | |
AJ ONeal | 1ec6722544 | |
AJ ONeal | fa01634643 | |
AJ ONeal | f5f40aaed8 | |
AJ ONeal | 18577cb2de | |
AJ ONeal | 2c58eb64c5 | |
AJ ONeal | c09719e26a | |
AJ ONeal | 339c4b83bd | |
AJ ONeal | a40b71b1b1 | |
AJ ONeal | 5ef5c2ed1d | |
AJ ONeal | 2a362e70e9 | |
AJ ONeal | 6a8de7e98a | |
AJ ONeal | a3ae1c98f0 | |
AJ ONeal | e7102d3406 | |
AJ ONeal | 373b1ebe19 | |
AJ ONeal | 837f52dd7d | |
AJ ONeal | e845e13631 | |
AJ ONeal | 91279d1fe2 | |
AJ ONeal | 23f9400728 | |
AJ ONeal | c4d784318b | |
AJ ONeal | 76fe4fad6e | |
AJ ONeal | 2d13295e63 | |
AJ ONeal | 9f245dd42b | |
AJ ONeal | 7f07bc0a25 | |
AJ ONeal | 21f26603f6 | |
AJ ONeal | 6d2d7e7c20 | |
AJ ONeal | 05dd997bf6 | |
AJ ONeal | 835ebe737f | |
AJ ONeal | c4c74e3f46 | |
AJ ONeal | 1e52638583 | |
AJ ONeal | 882f8c6d97 | |
AJ ONeal | fc3c4fcf2e | |
AJ ONeal | d13acf1a8f | |
AJ ONeal | f14b3d6b49 | |
AJ ONeal | 2f2e721893 | |
AJ ONeal | 3d69946240 | |
AJ ONeal | 2e22e92cd9 | |
AJ ONeal | 09322c50ae | |
AJ ONeal | d7c26deaf1 | |
AJ ONeal | 22d6a12a7f | |
AJ ONeal | 331f4eadb9 | |
AJ ONeal | 52d1bd8cdc | |
AJ ONeal | 984b6135f7 | |
AJ ONeal | e2974cc962 | |
AJ ONeal | 6defb38f85 | |
AJ ONeal | 158d114aeb | |
AJ ONeal | 6bb1b6a612 | |
AJ ONeal | ee45e9d885 | |
AJ ONeal | a737667301 | |
AJ ONeal | 8a6a7ed83a | |
AJ ONeal | 0ff11fbf72 | |
AJ ONeal | e013693961 | |
AJ ONeal | b44332e44d | |
AJ ONeal | 8916e4501a | |
AJ ONeal | 9aba23aec2 | |
AJ ONeal | 1928941c1b | |
AJ ONeal | 5f316be072 | |
AJ ONeal | 220530a675 | |
AJ ONeal | 6433047dab | |
AJ ONeal | 14d64876cc | |
AJ ONeal | aceb40476d | |
AJ ONeal | 1ed3b1934b | |
AJ ONeal | 7cc0644fec | |
AJ ONeal | b1855d243e |
171
README.md
171
README.md
|
@ -1,47 +1,154 @@
|
||||||
node-install-script
|
# STOP
|
||||||
===================
|
|
||||||
|
|
||||||
A script to install basic development tools for node (git, node, gcc, etc)
|
The install method in this repo still has its place, but this is no longer maintained.
|
||||||
|
|
||||||
Works for any recent version of Ubuntu or OS X.
|
**Update**: Use [Webi](https://webinstall.dev) instead:
|
||||||
|
|
||||||
```bash
|
```sh
|
||||||
# Specify the version of node to install
|
curl https://webinstall.dev/node | bash
|
||||||
echo "v0.11.14" > /tmp/NODE_VER
|
|
||||||
|
|
||||||
# And install away!
|
|
||||||
curl -fsSL bit.ly/easy-install-node | bash
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**For older versions of Ubuntu**:
|
# Easy Install node.js
|
||||||
|
|
||||||
|
| A [Root](https://rootprojects.org) Project |
|
||||||
|
|
||||||
|
Simple node.js installer for macOS and Linux
|
||||||
|
|
||||||
|
## QuickStart
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
wget -nv bit.ly/easy-install-node -O - | bash
|
curl -fsL bit.ly/node-installer | bash
|
||||||
```
|
```
|
||||||
|
|
||||||
This is what gets installed:
|
*Note*: [bit.ly/node-installer](https://bit.ly/node-installer) is a redirect to <https://git.coolaj86.com/coolaj86/node-installer.sh/raw/master/install.sh>
|
||||||
|
|
||||||
* fail2ban (not necessary for development, but should be on every server)
|
## Screencast
|
||||||
* rsync
|
|
||||||
* curl
|
|
||||||
* wget
|
|
||||||
* git
|
|
||||||
* xcode / brew / build-essential / pkg-config / gcc
|
|
||||||
* node
|
|
||||||
* jshint
|
|
||||||
|
|
||||||
Screencast
|
[How to Setup a VPS for node.js Development](https://www.youtube.com/watch?v=ypjzi1axH2A) - [(3:06 installing node.js](https://www.youtube.com/watch?v=ypjzi1axH2A#t=186))
|
||||||
==========
|
|
||||||
|
|
||||||
[How to Setup a VPS for Node.js Development](https://www.youtube.com/watch?v=ypjzi1axH2A) - [(3:06 installing node](https://www.youtube.com/watch?v=ypjzi1axH2A#t=186))
|
## Installer Options
|
||||||
|
|
||||||
Front-End Extras
|
* [x] version
|
||||||
================
|
* [x] install location
|
||||||
|
* [x] tools for building native modules
|
||||||
|
|
||||||
These are **not installed**, but you may wish to use them if you're doing front-end work as well
|
### Choose Version
|
||||||
|
|
||||||
* bower
|
The latest version of node is installed by default.
|
||||||
* uglifyjs
|
|
||||||
* yo
|
You can choose a specific version by defining `NODE_VERSION` in the format `vX`, `vX.Y`, or `v.X.Y.Z`:
|
||||||
* jade
|
|
||||||
* less
|
```bash
|
||||||
|
NODE_VERSION=v10
|
||||||
|
```
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export NODE_VERSION=v10.10
|
||||||
|
curl -fsSL https://bit.ly/node-installer | bash
|
||||||
|
```
|
||||||
|
|
||||||
|
### Location
|
||||||
|
|
||||||
|
By default node will be installed to `/usr/local`, without root if possible.
|
||||||
|
|
||||||
|
You can choose a specific location by setting **both** `NPM_CONFIG_PREFIX` **and** `NODE_PATH`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export NPM_CONFIG_PREFIX=$HOME/.local
|
||||||
|
export NODE_PATH=$NPM_CONFIG_PREFIX/lib/node_modules
|
||||||
|
curl -fsSL https://bit.ly/node-installer | bash
|
||||||
|
```
|
||||||
|
|
||||||
|
If you want to add the install location to your `PATH`, add `/bin` to the custom location used above and append it like so:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
PATH=$PATH:$HOME/.local/bin
|
||||||
|
```
|
||||||
|
|
||||||
|
### Development Tools
|
||||||
|
|
||||||
|
If you plan on building or creating native node modules, you'll want to install `gcc`, `pgk-config`, and a few other required tools and niceties.
|
||||||
|
|
||||||
|
In fact, it's fairly common for modules to have both native module and pure js dependencies, so you'll probably want (or need) to install these even if you don't plan to use them directly.
|
||||||
|
|
||||||
|
* [x] curl & wget
|
||||||
|
* [x] git
|
||||||
|
* [x] rsync
|
||||||
|
* [x] xcode, brew (on macOS), build-essential (Linux)
|
||||||
|
* [x] gcc, pkg-config
|
||||||
|
* [x] pkg-config
|
||||||
|
* [x] node.js, jshint
|
||||||
|
|
||||||
|
Pass `--dev-deps` to the installer script and it will use either `brew` (on macOS) or `apt` (on Linux) to install the development tools.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://bit.ly/node-installer | bash -s -- --dev-deps
|
||||||
|
```
|
||||||
|
|
||||||
|
Or, if you don't have `curl` installed yet you can use `wget`:
|
||||||
|
```bash
|
||||||
|
wget -nv https://bit.ly/node-installer -O - | bash -s -- --dev-deps
|
||||||
|
```
|
||||||
|
|
||||||
|
### Securing your server
|
||||||
|
|
||||||
|
If you're running a node.js server on anything with a public ip address
|
||||||
|
(an "edge" server), I'd highly recommend that you also install `fail2ban` to secure ssh -
|
||||||
|
especially if you haven't switched your server to use key-only authentication (which you should also do).
|
||||||
|
|
||||||
|
See [The 15-Minute Guide to Secure VPS Access (for the Semi-Paranoid)](https://www.youtube.com/watch?v=YZzhIIJmlE0)
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
* [OS X](#apple-os-x)
|
||||||
|
* [Ubuntu Linux](#ubuntu-linux)
|
||||||
|
* [Important Notes](#other-things-you-should-know)
|
||||||
|
|
||||||
|
### Apple OS X
|
||||||
|
|
||||||
|
First you need to **Install XCode Command Line Tools**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
xcode-select --install
|
||||||
|
```
|
||||||
|
|
||||||
|
Then you need to **Accept the XCode License** by running any command installed by Xcode with sudo. We'll use git.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo git --version
|
||||||
|
```
|
||||||
|
|
||||||
|
You can scroll to the bottom by hitting shift+G (capital G).
|
||||||
|
|
||||||
|
Type `agree` and hit enter to accept the license.
|
||||||
|
|
||||||
|
Now you can install node.js
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://bit.ly/node-installer -o /tmp/node-installer.sh; bash /tmp/node-installer.sh --dev-deps
|
||||||
|
```
|
||||||
|
|
||||||
|
*TODO*: Make it easier to accepting the license (automatic?)
|
||||||
|
|
||||||
|
### Ubuntu Linux
|
||||||
|
|
||||||
|
```bash
|
||||||
|
wget -nv https://bit.ly/node-installer -O /tmp/node-installer.sh; bash /tmp/node-installer.sh --dev-deps
|
||||||
|
```
|
||||||
|
|
||||||
|
### Automatic Version Detection
|
||||||
|
|
||||||
|
Fun FYI, here's how the latest version is determined:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
NODE_VERSION=$(curl -fsSL https://nodejs.org/dist/index.tab | tail -n +2 | cut -f 1 | head -1 )
|
||||||
|
echo "The current node.js version is $NODE_VERSION"
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
BASE_VER="v10\\."
|
||||||
|
NODE_VERSION=$(curl -fsSL https://nodejs.org/dist/index.tab | tail -n +2 | cut -f 1 | grep $BASE_VER | head -1 )
|
||||||
|
echo "Latest node.js $BASE_VER is $NODE_VERSION"
|
||||||
|
```
|
|
@ -0,0 +1,387 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Installs node.js only (no development dependencies) for both Ubuntu and OS X
|
||||||
|
|
||||||
|
#
|
||||||
|
# See https://git.coolaj86.com/coolaj86/node-installer.sh
|
||||||
|
#
|
||||||
|
|
||||||
|
# curl -fsSL bit.ly/nodejs-min | bash
|
||||||
|
# wget -nv bit.ly/nodejs-min -O - | bash
|
||||||
|
|
||||||
|
# curl -fsSL https://example.com/setup-min.bash | bash
|
||||||
|
# wget -nv https://example.com/setup-min.bash -O - | bash
|
||||||
|
|
||||||
|
# Not every platform has or needs sudo, gotta save them O(1)s...
|
||||||
|
sudo_cmd=""
|
||||||
|
((EUID)) && [[ -z "${ANDROID_ROOT:-}" ]] && sudo_cmd="sudo"
|
||||||
|
|
||||||
|
deps_flag="$1"
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
#set -o pipefail
|
||||||
|
|
||||||
|
if [ -z "${PREFIX-}" ]; then
|
||||||
|
PREFIX=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
NODEJS_NAME="node"
|
||||||
|
NODEJS_BASE_URL="https://nodejs.org"
|
||||||
|
BASE_URL="https://git.coolaj86.com/coolaj86/node-installer.sh/raw/master"
|
||||||
|
#NO_FAIL2BAN=""
|
||||||
|
NO_FAIL2BAN="nope"
|
||||||
|
OS="unsupported"
|
||||||
|
ARCH=""
|
||||||
|
SETUP_FILE=""
|
||||||
|
my_tmp="$(mktemp -d -t node-installer.XXXXXXXX)"
|
||||||
|
export my_tmp
|
||||||
|
|
||||||
|
clear
|
||||||
|
|
||||||
|
#########################
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# Mavericks+ works for all current macOS versions
|
||||||
|
OS='mavericks'
|
||||||
|
|
||||||
|
if [[ "$OSX_MAJOR" -eq 10 ]]; then
|
||||||
|
#
|
||||||
|
# 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
|
||||||
|
fi
|
||||||
|
|
||||||
|
# OS X (10) and macOS (11) should be supported
|
||||||
|
|
||||||
|
if [ "$OSX_MAJOR" -gt 11 ]; then
|
||||||
|
echo "WARNING: macOS 12+ may or may not be supported"
|
||||||
|
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 "$(uname -a | 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 'Arch ')" ]; 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='ubuntu'
|
||||||
|
elif [ "$(cat /etc/issue | grep -i 'Marvell')" ]; then
|
||||||
|
OS='marvell'
|
||||||
|
else
|
||||||
|
OS='ubuntu'
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "unsupported unknown os (non-mac, non-linux)"
|
||||||
|
exit 500
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "${OS}" in
|
||||||
|
fedora)
|
||||||
|
echo "FEDORA not yet supported (feel free to pull request)"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
ubuntu)
|
||||||
|
SETUP_FILE="ubuntu"
|
||||||
|
;;
|
||||||
|
raspbian)
|
||||||
|
SETUP_FILE="ubuntu"
|
||||||
|
;;
|
||||||
|
marvell)
|
||||||
|
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
|
||||||
|
|
||||||
|
#######################
|
||||||
|
# Download installers #
|
||||||
|
#######################
|
||||||
|
|
||||||
|
if [ "--dev-deps" == "$deps_flag" ]; then
|
||||||
|
echo "Preparing to install node.js (and common development dependencies) for ${OS}" "${ARCH}"
|
||||||
|
else
|
||||||
|
echo "Preparing to install node.js (minimal) for ${OS}" "${ARCH}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
INSTALL_DEPS_FILE="setup-deps-${SETUP_FILE}.bash"
|
||||||
|
INSTALL_FILE="setup-node-${SETUP_FILE}.bash"
|
||||||
|
if [ ! -e "$my_tmp/${INSTALL_FILE}" ]; then
|
||||||
|
if [ -n "$(type -p curl)" ]; then
|
||||||
|
curl --silent -L "${BASE_URL}/${INSTALL_FILE}" \
|
||||||
|
-o "$my_tmp/${INSTALL_FILE}" || echo 'error downloading os setup script'
|
||||||
|
elif [ -n "$(type -p wget)" ]; then
|
||||||
|
wget --quiet "${BASE_URL}/${INSTALL_FILE}" \
|
||||||
|
-O "$my_tmp/${INSTALL_FILE}" || echo 'error downloading os setup script'
|
||||||
|
else
|
||||||
|
echo "Found neither 'curl' nor 'wget'. Can't Continue."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "--dev-deps" == "$deps_flag" ]; then
|
||||||
|
if [ ! -e "$my_tmp/${INSTALL_DEPS_FILE}" ]; then
|
||||||
|
if [ -n "$(type -p curl)" ]; then
|
||||||
|
curl --silent -L "${BASE_URL}/${INSTALL_DEPS_FILE}" \
|
||||||
|
-o "$my_tmp/${INSTALL_DEPS_FILE}" || echo 'error downloading os deps script: '"${BASE_URL}/${INSTALL_DEPS_FILE}"
|
||||||
|
elif [ -n "$(type -p wget)" ]; then
|
||||||
|
wget --quiet "${BASE_URL}/${INSTALL_DEPS_FILE}" \
|
||||||
|
-O "$my_tmp/${INSTALL_DEPS_FILE}" || echo 'error downloading os deps script: '"${BASE_URL}/${INSTALL_DEPS_FILE}"
|
||||||
|
else
|
||||||
|
echo "Found neither 'curl' nor 'wget'. Can't Continue."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -e "$my_tmp/${INSTALL_FILE}" ]
|
||||||
|
then
|
||||||
|
echo "Error Downloading Install File"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "--dev-deps" == "$deps_flag" ]; then
|
||||||
|
if [ ! -e "$my_tmp/${INSTALL_DEPS_FILE}" ]
|
||||||
|
then
|
||||||
|
echo "Error Downloading Deps File"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
#########################
|
||||||
|
# Which node.js VERSION ? #
|
||||||
|
#########################
|
||||||
|
|
||||||
|
NODE_VERSION=${NODE_VERSION:-}
|
||||||
|
NODEJS_VER=${NODEJS_VER:-}
|
||||||
|
if [ -n "$NODE_VERSION" ]; then
|
||||||
|
NODEJS_VER=$NODE_VERSION
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "${NODEJS_VER:-}" ]; then
|
||||||
|
# For backwards compat
|
||||||
|
if [ -f "$my_tmp/NODEJS_VER" ]; then
|
||||||
|
NODEJS_VER=$(cat $my_tmp/NODEJS_VER | grep v)
|
||||||
|
elif [ -f "/tmp/IOJS_VER" ]; then
|
||||||
|
NODEJS_VER=$(cat $my_tmp/IOJS_VER | grep v)
|
||||||
|
fi
|
||||||
|
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
|
||||||
|
|
||||||
|
NODEJS_VER="${NODEJS_VER:-v}" # Search for 'v' at the least
|
||||||
|
# sort -rV # will sort by version number, but it appears these are already sorted
|
||||||
|
# tail -n +2 # starts at line two (1-indexed) and all after (omits the csv header with 'version' and such)
|
||||||
|
# cut -f 1 # gets only the first column
|
||||||
|
# head -n 1 # gets only the most recent version
|
||||||
|
my_char="."
|
||||||
|
my_count=$(awk -F"${my_char}" '{print NF-1}' <<< "${NODEJS_VER}")
|
||||||
|
# get the latest version if partial
|
||||||
|
if [ $my_count -ne 2 ]; then
|
||||||
|
if [ "$NODEJS_VER" != "v" ]; then
|
||||||
|
NODEJS_VER="$NODEJS_VER\\."
|
||||||
|
fi
|
||||||
|
if [ -n "$(type -p curl)" ]; then
|
||||||
|
NODEJS_VER=$(curl -fsL "$NODEJS_BASE_URL/dist/index.tab" | tail -n +2 | cut -f 1 | grep "^$NODEJS_VER" | head -n 1) \
|
||||||
|
|| echo 'error automatically determining current node.js version'
|
||||||
|
elif [ -n "$(type -p wget)" ]; then
|
||||||
|
NODEJS_VER=$(wget --quiet "$NODEJS_BASE_URL/dist/index.tab" -O - | tail -n +2 | cut -f 1 | grep "^$NODEJS_VER" | head -n 1) \
|
||||||
|
|| echo 'error automatically determining current node.js version'
|
||||||
|
else
|
||||||
|
echo "Found neither 'curl' nor 'wget'. Can't Continue."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
#
|
||||||
|
# node
|
||||||
|
#
|
||||||
|
if [ -z "${NODE_PATH-}" ]; then
|
||||||
|
if [ -n "$(type -p node | grep node 2>/dev/null)" ]; then
|
||||||
|
# /usr/local/bin/node => /usr/local
|
||||||
|
node_install_path="$(dirname $(dirname $(type -p node)))"
|
||||||
|
echo "NODE_PATH is not set. Using existing node install path: '$node_install_path'"
|
||||||
|
else
|
||||||
|
node_install_path=$PREFIX/usr/local
|
||||||
|
echo "NODE_PATH is not set. Using default install path '$node_install_path'"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
node_install_path=$(dirname $(dirname $NODE_PATH))
|
||||||
|
echo "NODE_PATH is '$NODE_PATH', so install path is '$node_install_path'"
|
||||||
|
fi
|
||||||
|
if [ -e "$node_install_path/bin/node" ]; then
|
||||||
|
# node of some version is already installed
|
||||||
|
if [ "${NODEJS_VER}" == "$($node_install_path/bin/node -v 2>/dev/null)" ]; then
|
||||||
|
echo node ${NODEJS_VER} is already installed
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
echo "HEY, LISTEN:"
|
||||||
|
echo ""
|
||||||
|
echo "node.js is already installed as node $($node_install_path/bin/node -v | grep v)"
|
||||||
|
echo ""
|
||||||
|
echo "to reinstall as ${NODEJS_VER} please first run: rm $node_install_path/bin/node"
|
||||||
|
echo ""
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
NODEJS_VER=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "${NODEJS_VER}" ]; then
|
||||||
|
bash "$my_tmp/${INSTALL_FILE}" "${NODEJS_VER}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p $node_install_path/lib/node_modules 2> /dev/null || $sudo_cmd mkdir -p $node_install_path/lib/node_modules
|
||||||
|
chown -R $(whoami) $node_install_path/lib/node_modules 2> /dev/null || $sudo_cmd chown -R $(whoami) $node_install_path/lib/node_modules
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [ "--dev-deps" == "$deps_flag" ]; then
|
||||||
|
|
||||||
|
################
|
||||||
|
# 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 "$my_tmp/${INSTALL_DEPS_FILE}" "${NO_FAIL2BAN}"
|
||||||
|
|
||||||
|
# yarn
|
||||||
|
#if [ -z "$(type -p yarn)" ]; then
|
||||||
|
# echo "installing yarn..."
|
||||||
|
# npm install --silent yarn -g > /dev/null
|
||||||
|
#fi
|
||||||
|
|
||||||
|
# jshint
|
||||||
|
if [ -z "$(type -p jshint)" ]; then
|
||||||
|
echo "installing jshint..."
|
||||||
|
#yarn global add jshint > /dev/null
|
||||||
|
$node_install_path/bin/npm install -g jshint > /dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -rf "$my_tmp"
|
|
@ -1,10 +1,18 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# curl -fsSL https://ldsconnect.org/setup-osx.bash | bash -c
|
# curl -fsSL https://ldsconnect.org/setup-osx.bash | bash -c
|
||||||
NODE_VER=${1}
|
NO_FAIL2BAN=${1}
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo ""
|
echo ""
|
||||||
|
echo "Checking for"
|
||||||
|
echo ""
|
||||||
|
echo " * XCode Command Line Tools"
|
||||||
|
echo " * wget"
|
||||||
|
echo " * pkg-config"
|
||||||
|
echo " * node"
|
||||||
|
echo " * jshint"
|
||||||
|
echo ""
|
||||||
|
|
||||||
# XCode
|
# XCode
|
||||||
# testing for which git, gcc, etc will not work because the tools are aliased to the install script
|
# testing for which git, gcc, etc will not work because the tools are aliased to the install script
|
||||||
|
@ -23,6 +31,13 @@ if [ -z "$(xcode-select --print-path 2>/dev/null)" ] || [ -z "$(git --version 2>
|
||||||
while true; do
|
while true; do
|
||||||
sleep 5
|
sleep 5
|
||||||
|
|
||||||
|
if [ -n "$(xcode-select --print-path 2>/dev/null)" ]; then
|
||||||
|
# Agreeing to the Xcode/iOS license requires admin privileges, please run “sudo xcodebuild -license” and then retry this command.
|
||||||
|
echo "Now running 'sudo xcodebuild -license' so that you can accept the license agreement"
|
||||||
|
sudo xcodebuild -license
|
||||||
|
fi
|
||||||
|
# http://stackoverflow.com/questions/15371925/how-to-check-if-command-line-tools-is-installed
|
||||||
|
|
||||||
if [ -n "$(git --version 2>/dev/null)" ] && [ -n "$(xcode-select --print-path 2>/dev/null)" ]; then
|
if [ -n "$(git --version 2>/dev/null)" ] && [ -n "$(xcode-select --print-path 2>/dev/null)" ]; then
|
||||||
break;
|
break;
|
||||||
fi
|
fi
|
||||||
|
@ -31,8 +46,6 @@ if [ -z "$(xcode-select --print-path 2>/dev/null)" ] || [ -z "$(git --version 2>
|
||||||
echo "It looks like the other install is finishing up."
|
echo "It looks like the other install is finishing up."
|
||||||
echo "This installation will begin in one minute."
|
echo "This installation will begin in one minute."
|
||||||
sleep 60
|
sleep 60
|
||||||
else
|
|
||||||
echo "XCode Command Line Tools already installed"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# homebrew
|
# homebrew
|
||||||
|
@ -48,46 +61,18 @@ fi
|
||||||
if [ -z "$(which wget | grep wget)" ]; then
|
if [ -z "$(which wget | grep wget)" ]; then
|
||||||
echo "installing wget..."
|
echo "installing wget..."
|
||||||
brew install wget
|
brew install wget
|
||||||
else
|
|
||||||
echo "wget already installed"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# http://www.fail2ban.org/wiki/index.php/HOWTO_Mac_OS_X_Server_(10.5)
|
# http://www.fail2ban.org/wiki/index.php/HOWTO_Mac_OS_X_Server_(10.5)
|
||||||
if [ -z "$(which fail2ban-server | grep fail2ban)" ]; then
|
#if [ -z "$(which fail2ban-server | grep fail2ban)" ]; then
|
||||||
echo "installing fail2ban..."
|
# if [ -z "${NO_FAIL2BAN}" ]; then
|
||||||
brew install fail2ban
|
# brew install fail2ban
|
||||||
sudo cp -fv /usr/local/opt/fail2ban/*.plist /Library/LaunchDaemons
|
# sudo cp -fv /usr/local/opt/fail2ban/*.plist /Library/LaunchDaemons
|
||||||
sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.fail2ban.plist
|
# sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.fail2ban.plist
|
||||||
else
|
# fi
|
||||||
echo "fail2ban already installed"
|
#fi
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$(which pkg-config | grep pkg-config)" ]; then
|
if [ -z "$(which pkg-config | grep pkg-config)" ]; then
|
||||||
echo "installing pkg-config..."
|
echo "installing pkg-config..."
|
||||||
brew install pkg-config
|
brew install pkg-config
|
||||||
else
|
|
||||||
echo "pkg-config already installed"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# node
|
|
||||||
if [ -n "$(which node | grep node 2>/dev/null)" ]; then
|
|
||||||
NODE_VER=""
|
|
||||||
|
|
||||||
if [ "${NODE_VER}" == "$(node -v 2>/dev/null)" ]; then
|
|
||||||
echo node ${NODE_VER} already installed
|
|
||||||
else
|
|
||||||
echo ""
|
|
||||||
echo "HEY, LISTEN:"
|
|
||||||
echo "node is already installed as $(node -v | grep v)"
|
|
||||||
echo ""
|
|
||||||
echo "to reinstall please first run: rm $(which node)"
|
|
||||||
echo ""
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "${NODE_VER}" ]; then
|
|
||||||
echo "installing node ${NODE_VER}..."
|
|
||||||
curl -fsSL "http://nodejs.org/dist/${NODE_VER}/node-${NODE_VER}.pkg" -o "/tmp/node-${NODE_VER}.pkg"
|
|
||||||
sudo /usr/sbin/installer -pkg "/tmp/node-${NODE_VER}.pkg" -target /
|
|
||||||
sudo chown -R $(whoami) /usr/local 2>/dev/null
|
|
||||||
fi
|
fi
|
|
@ -0,0 +1,40 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# curl -fsSL https://ldsconnect.org/setup-linux.bash | bash -c
|
||||||
|
|
||||||
|
# Not every platform has or needs sudo, gotta save them O(1)s...
|
||||||
|
sudo_cmd=""
|
||||||
|
((EUID)) && [[ -z "$ANDROID_ROOT" ]] && sudo_cmd="sudo"
|
||||||
|
|
||||||
|
NO_FAIL2BAN=${1}
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo ""
|
||||||
|
echo "Checking for"
|
||||||
|
echo ""
|
||||||
|
echo " * build-essential"
|
||||||
|
echo " * rsync"
|
||||||
|
echo " * wget"
|
||||||
|
echo " * curl"
|
||||||
|
echo " * pkg-config"
|
||||||
|
echo " * node"
|
||||||
|
echo " * jshint"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "updating apt-get..."
|
||||||
|
$sudo_cmd bash -c "apt-get update -qq -y < /dev/null" > /dev/null
|
||||||
|
|
||||||
|
# fail2ban
|
||||||
|
#if [ -z "$(which fail2ban-server | grep fail2ban)" ]; then
|
||||||
|
# if [ -z "${NO_FAIL2BAN}" ]; then
|
||||||
|
# echo "installing fail2ban..."
|
||||||
|
# sudo bash -c "apt-get install -qq -y fail2ban < /dev/null" > /dev/null
|
||||||
|
# fi
|
||||||
|
#fi
|
||||||
|
|
||||||
|
# git, wget, curl, build-essential
|
||||||
|
if [ -z "$(type -p pkg-config)" ] || [ -z "$(type -p git)" ] || [ -z "$(type -p wget)" ] || [ -z "$(type -p curl)" ] || [ -z "$(type -p gcc)" ] || [ -z "$(type -p rsync)" ] || [ -z "$(type -p python)" ]
|
||||||
|
then
|
||||||
|
echo "installing git, wget, curl, build-essential, rsync, pkg-config, python..."
|
||||||
|
$sudo_cmd bash -c "apt-get install -qq -y git wget curl build-essential rsync pkg-config python < /dev/null" > /dev/null 2>/dev/null
|
||||||
|
fi
|
|
@ -0,0 +1,44 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Installs node.js + dependencies for both Ubuntu and OS X
|
||||||
|
|
||||||
|
#
|
||||||
|
# See https://git.colaj86.com/coolaj86/node-installer.sh
|
||||||
|
#
|
||||||
|
|
||||||
|
# curl -fsSL https://example.com/setup.bash | bash
|
||||||
|
# wget -nv https://example.com/setup.bash -O - | bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
|
||||||
|
BASE_URL="https://git.coolaj86.com/coolaj86/node-installer.sh/raw/master"
|
||||||
|
|
||||||
|
#######################
|
||||||
|
# Download installers #
|
||||||
|
#######################
|
||||||
|
|
||||||
|
INSTALL_FILE_REMOTE="install.sh"
|
||||||
|
INSTALL_FILE="node-installer.sh"
|
||||||
|
if [ ! -e "/tmp/${INSTALL_FILE}" ]
|
||||||
|
then
|
||||||
|
if [ -n "$(which curl)" ]; then
|
||||||
|
curl --silent -L "${BASE_URL}/${INSTALL_FILE_REMOTE}" \
|
||||||
|
-o "/tmp/${INSTALL_FILE}" || echo 'error setup script: '"${BASE_URL}/${INSTALL_FILE_REMOTE}"
|
||||||
|
elif [ -n "$(which wget)" ]; then
|
||||||
|
wget --quiet "${BASE_URL}/${INSTALL_FILE_REMOTE}" \
|
||||||
|
-O "/tmp/${INSTALL_FILE}" || echo 'error setup script: '"${BASE_URL}/${INSTALL_FILE_REMOTE}"
|
||||||
|
else
|
||||||
|
echo "Found neither 'curl' nor 'wget'. Can't Continue."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -e "/tmp/${INSTALL_FILE}" ]
|
||||||
|
then
|
||||||
|
echo "Error Downloading Install File"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
bash "/tmp/${INSTALL_FILE}" --no-dev-deps
|
|
@ -0,0 +1,60 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
if [ -z "${my_tmp-}" ]; then
|
||||||
|
my_tmp=$(mkdir -p)
|
||||||
|
fi
|
||||||
|
if [ -z "${PREFIX-}" ]; then
|
||||||
|
PREFIX=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "${NODE_PATH-}" ]; then
|
||||||
|
node_install_path=$PREFIX/usr/local
|
||||||
|
else
|
||||||
|
node_install_path=$(dirname $(dirname $NODE_PATH))
|
||||||
|
fi
|
||||||
|
|
||||||
|
NODEJS_VER=${1}
|
||||||
|
NODEJS_VERT=$(echo ${NODEJS_VER} | cut -c 2- | cut -d '.' -f1)
|
||||||
|
|
||||||
|
NODEJS_NAME="node"
|
||||||
|
NODEJS_BASE_URL="https://nodejs.org"
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
# When using .pkg
|
||||||
|
#NODEJS_REMOTE="$NODEJS_BASE_URL/dist/${NODEJS_VER}/${NODEJS_NAME}-${NODEJS_VER}.pkg"
|
||||||
|
#NODEJS_PKG="/tmp/${NODEJS_NAME}-${NODEJS_VER}.pkg"
|
||||||
|
|
||||||
|
NODEJS_REMOTE="$NODEJS_BASE_URL/dist/${NODEJS_VER}/${NODEJS_NAME}-${NODEJS_VER}-darwin-x64.tar.gz"
|
||||||
|
NODEJS_PKG="$my_tmp/${NODEJS_NAME}-${NODEJS_VER}-darwin-x64.tar.gz"
|
||||||
|
NODEJS_UNTAR="$my_tmp/${NODEJS_NAME}-${NODEJS_VER}-darwin-x64"
|
||||||
|
|
||||||
|
if [ -n "${NODEJS_VER}" ]; then
|
||||||
|
echo "installing ${NODEJS_NAME} as ${NODEJS_NAME} ${NODEJS_VER}..."
|
||||||
|
curl -fsSL "${NODEJS_REMOTE}" -o "${NODEJS_PKG}"
|
||||||
|
|
||||||
|
# When using .pkg
|
||||||
|
#sudo /usr/sbin/installer -pkg "${NODEJS_PKG}" -target /
|
||||||
|
|
||||||
|
# When using .tar.gz
|
||||||
|
mkdir -p ${NODEJS_UNTAR}/
|
||||||
|
tar xf "${NODEJS_PKG}" -C "${NODEJS_UNTAR}/" --strip-components=1
|
||||||
|
rm -f ${NODEJS_UNTAR}/{LICENSE,CHANGELOG.md,README.md}
|
||||||
|
|
||||||
|
mkdir -p "$node_install_path/" || sudo mkdir -p "$node_install_path/"
|
||||||
|
rsync -a "${NODEJS_UNTAR}/" "$node_install_path/" || sudo rsync -a "${NODEJS_UNTAR}/" "$node_install_path/"
|
||||||
|
|
||||||
|
|
||||||
|
chown -R $(whoami) "$node_install_path/lib/node_modules/" || sudo chown -R $(whoami) "$node_install_path/lib/node_modules/"
|
||||||
|
chown $(whoami) "$node_install_path/bin/" || sudo chown $(whoami) "$node_install_path/bin/"
|
||||||
|
fi
|
|
@ -0,0 +1,87 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Not every platform has or needs sudo, gotta save them O(1)s...
|
||||||
|
sudo_cmd=""
|
||||||
|
((EUID)) && [[ -z "${ANDROID_ROOT:-}" ]] && sudo_cmd="sudo"
|
||||||
|
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
if [ -z "${my_tmp-}" ]; then
|
||||||
|
my_tmp="$(mktemp -d -t node-installer.XXXXXXXX)"
|
||||||
|
fi
|
||||||
|
if [ -z "${PREFIX-}" ]; then
|
||||||
|
PREFIX=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "${NODE_PATH-}" ]; then
|
||||||
|
node_install_path=$PREFIX/usr/local
|
||||||
|
else
|
||||||
|
node_install_path=$(dirname $(dirname $NODE_PATH))
|
||||||
|
fi
|
||||||
|
|
||||||
|
NODEJS_VER=${1}
|
||||||
|
NODEJS_VERT=$(echo ${NODEJS_VER} | cut -c 2- | cut -d '.' -f1)
|
||||||
|
|
||||||
|
NODEJS_NAME="node"
|
||||||
|
NODEJS_BASE_URL="https://nodejs.org"
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
if [ -n "$(uname -a | grep aarch64)" ]; then
|
||||||
|
ARCH="arm64"
|
||||||
|
elif [ -n "$(uname -a | grep 64)" ]; then
|
||||||
|
ARCH="x64"
|
||||||
|
elif [ -n "$(uname -a | grep armv8l)" ]; then
|
||||||
|
ARCH="arm64"
|
||||||
|
elif [ -n "$(uname -a | grep armv7l)" ]; then
|
||||||
|
ARCH="armv7l"
|
||||||
|
elif [ -n "$(uname -a | grep armv6l)" ]; then
|
||||||
|
ARCH="armv6l"
|
||||||
|
else
|
||||||
|
ARCH="x86"
|
||||||
|
fi
|
||||||
|
|
||||||
|
NODEJS_REMOTE="${NODEJS_BASE_URL}/dist/${NODEJS_VER}/${NODEJS_NAME}-${NODEJS_VER}-linux-${ARCH}.tar.gz"
|
||||||
|
NODEJS_LOCAL="$my_tmp/${NODEJS_NAME}-${NODEJS_VER}-linux-${ARCH}.tar.gz"
|
||||||
|
NODEJS_UNTAR="$my_tmp/${NODEJS_NAME}-${NODEJS_VER}-linux-${ARCH}"
|
||||||
|
|
||||||
|
if [ -n "${NODEJS_VER}" ]; then
|
||||||
|
echo "installing ${NODEJS_NAME} as ${NODEJS_NAME} ${NODEJS_VER}..."
|
||||||
|
|
||||||
|
if [ -n "$(command -v curl 2>/dev/null | grep curl)" ]; then
|
||||||
|
curl -fsSL ${NODEJS_REMOTE} -o ${NODEJS_LOCAL} || echo 'error downloading ${NODEJS_NAME}'
|
||||||
|
elif [ -n "$(command -v wget 2>/dev/null | grep wget)" ]; then
|
||||||
|
wget --quiet ${NODEJS_REMOTE} -O ${NODEJS_LOCAL} || echo 'error downloading ${NODEJS_NAME}'
|
||||||
|
else
|
||||||
|
echo "'wget' and 'curl' are missing. Please run the following command and try again"
|
||||||
|
echo " sudo apt-get install --yes curl wget"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p ${NODEJS_UNTAR}/
|
||||||
|
# --strip-components isn't portable, switch to portable version by performing move step after untar
|
||||||
|
tar xf ${NODEJS_LOCAL} -C ${NODEJS_UNTAR}/ #--strip-components=1
|
||||||
|
mv ${NODEJS_UNTAR}/${NODEJS_NAME}-${NODEJS_VER}-linux-${ARCH}/* ${NODEJS_UNTAR}/
|
||||||
|
rm -rf ${NODEJS_UNTAR}/${NODEJS_NAME}-${NODEJS_VER}-linux-${ARCH} # clean up the temporary unzip folder
|
||||||
|
rm ${NODEJS_UNTAR}/{LICENSE,CHANGELOG.md,README.md}
|
||||||
|
if [ -n "$(command -v rsync 2>/dev/null | grep rsync)" ]; then
|
||||||
|
echo $sudo_cmd rsync -Krl "${NODEJS_UNTAR}/" "$node_install_path/"
|
||||||
|
rsync -Krl "${NODEJS_UNTAR}/" "$node_install_path/" 2>/dev/null || $sudo_cmd rsync -Krl "${NODEJS_UNTAR}/" "$node_install_path/"
|
||||||
|
else
|
||||||
|
# due to symlink issues on Arch Linux, don't copy the share directory
|
||||||
|
rm -rf ${NODEJS_UNTAR}/share
|
||||||
|
echo $sudo_cmd cp -Hr "${NODEJS_UNTAR}/*" "$node_install_path/"
|
||||||
|
cp -Hr "${NODEJS_UNTAR}"/* "$node_install_path/" 2>/dev/null || $sudo_cmd cp -Hr "${NODEJS_UNTAR}"/* "$node_install_path/"
|
||||||
|
fi
|
||||||
|
rm -rf "${NODEJS_UNTAR}"
|
||||||
|
|
||||||
|
chown -R $(whoami) "$node_install_path/lib/node_modules/" 2>/dev/null || $sudo_cmd chown -R $(whoami) "$node_install_path/lib/node_modules/"
|
||||||
|
chown $(whoami) ""$node_install_path"/bin/" 2>/dev/null || $sudo_cmd chown $(whoami) ""$node_install_path"/bin/"
|
||||||
|
fi
|
|
@ -1,56 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# curl -fsSL https://ldsconnect.org/setup-linux.bash | bash -c
|
|
||||||
|
|
||||||
NODE_VER=${1}
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
echo "updating apt-get..."
|
|
||||||
sudo bash -c "apt-get update -qq -y < /dev/null" > /dev/null
|
|
||||||
|
|
||||||
# fail2ban
|
|
||||||
if [ -z "$(which fail2ban-server | grep fail2ban)" ]; then
|
|
||||||
echo "installing fail2ban..."
|
|
||||||
sudo bash -c "apt-get install -qq -y fail2ban < /dev/null" > /dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
# git, wget, curl, build-essential
|
|
||||||
if [ -z "$(which pkg-config | grep pkg-config)" ] || [ -z "$(which git | grep git)" ] || [ -z "$(which wget | grep wget)" ] || [ -z "$(which curl | grep curl)" ] || [ -z "$(which gcc | grep gcc)" ] || [ -z "$(which rsync | grep rsync)" ]
|
|
||||||
then
|
|
||||||
echo "installing git, wget, curl, build-essential, rsync, pkg-config..."
|
|
||||||
sudo bash -c "apt-get install -qq -y git wget curl build-essential rsync pkg-config < /dev/null" > /dev/null 2>/dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
# node
|
|
||||||
if [ -n "$(which node | grep node 2>/dev/null)" ]; then
|
|
||||||
NODE_VER=""
|
|
||||||
|
|
||||||
if [ "${NODE_VER}" == "$(node -v 2>/dev/null)" ]; then
|
|
||||||
echo node ${NODE_VER} already installed
|
|
||||||
else
|
|
||||||
echo ""
|
|
||||||
echo "HEY, LISTEN:"
|
|
||||||
echo "node is already installed as $(node -v | grep v)"
|
|
||||||
echo ""
|
|
||||||
echo "to reinstall please first run: rm $(which node)"
|
|
||||||
echo ""
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "${NODE_VER}" ]; then
|
|
||||||
if [ -n "$(arch | grep 64)" ]; then
|
|
||||||
ARCH="x64"
|
|
||||||
else
|
|
||||||
ARCH="x86"
|
|
||||||
fi
|
|
||||||
echo "installing node ${NODE_VER}..."
|
|
||||||
curl -fsSL "http://nodejs.org/dist/${NODE_VER}/node-${NODE_VER}-linux-${ARCH}.tar.gz" \
|
|
||||||
-o "/tmp/node-${NODE_VER}-linux-${ARCH}.tar.gz"
|
|
||||||
pushd /tmp
|
|
||||||
tar xf /tmp/node-${NODE_VER}-linux-${ARCH}.tar.gz
|
|
||||||
rm node-${NODE_VER}-linux-x64/{LICENSE,ChangeLog,README.md}
|
|
||||||
sudo rsync -a "/tmp/node-${NODE_VER}-linux-${ARCH}/" /usr/local/
|
|
||||||
sudo chown -R $(whoami) /usr/local
|
|
||||||
fi
|
|
161
setup.bash
161
setup.bash
|
@ -1,149 +1,44 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Installs node.js + dependencies for both Ubuntu and OS X
|
||||||
|
|
||||||
|
#
|
||||||
|
# See https://git.colaj86.com/coolaj86/node-installer.sh
|
||||||
|
#
|
||||||
|
|
||||||
# curl -fsSL https://example.com/setup.bash | bash
|
# curl -fsSL https://example.com/setup.bash | bash
|
||||||
# wget -nv https://example.com/setup.bash -O - | bash
|
# wget -nv https://example.com/setup.bash -O - | bash
|
||||||
|
|
||||||
BASE_URL="https://raw.githubusercontent.com/coolaj86/node-install-script/master"
|
set -e
|
||||||
|
set -u
|
||||||
|
|
||||||
if [ -n "$(which node 2>/dev/null || false)" ]; then
|
BASE_URL="https://git.coolaj86.com/coolaj86/node-installer.sh/raw/master"
|
||||||
echo ""
|
|
||||||
echo "HEY, LISTEN:"
|
|
||||||
echo "node is already install as $(node -v | grep v)"
|
|
||||||
echo ""
|
|
||||||
echo "to reinstall please first run: rm $(which node)"
|
|
||||||
echo ""
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -f "/tmp/NODE_VER" ]; then
|
#######################
|
||||||
NODE_VER=$(cat /tmp/NODE_VER | grep v)
|
# Download installers #
|
||||||
fi
|
#######################
|
||||||
if [ -z "$NODE_VER" ]; then
|
|
||||||
NODE_VER="v0.11.14"
|
|
||||||
fi
|
|
||||||
OS="unsupported"
|
|
||||||
ARCH=""
|
|
||||||
|
|
||||||
if [ "$(uname | grep -i 'Darwin')" ]; then
|
INSTALL_FILE_REMOTE="install.sh"
|
||||||
OSX_VER="$(sw_vers | grep ProductVersion | cut -d':' -f2 | cut -f2)"
|
INSTALL_FILE="node-installer.sh"
|
||||||
OSX_MAJOR="$(echo ${OSX_VER} | cut -d'.' -f1)"
|
if [ ! -e "/tmp/${INSTALL_FILE}" ]
|
||||||
OSX_MINOR="$(echo ${OSX_VER} | cut -d'.' -f2)"
|
then
|
||||||
OSX_PATCH="$(echo ${OSX_VER} | cut -d'.' -f3)"
|
if [ -n "$(which curl)" ]; then
|
||||||
|
curl --silent -L "${BASE_URL}/${INSTALL_FILE_REMOTE}" \
|
||||||
#
|
-o "/tmp/${INSTALL_FILE}" || echo 'error setup script: '"${BASE_URL}/${INSTALL_FILE_REMOTE}"
|
||||||
# Major
|
elif [ -n "$(which wget)" ]; then
|
||||||
#
|
wget --quiet "${BASE_URL}/${INSTALL_FILE_REMOTE}" \
|
||||||
if [ "$OSX_MAJOR" -lt 10 ]; then
|
-O "/tmp/${INSTALL_FILE}" || echo 'error setup script: '"${BASE_URL}/${INSTALL_FILE_REMOTE}"
|
||||||
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
|
else
|
||||||
ARCH="32"
|
echo "Found neither 'curl' nor 'wget'. Can't Continue."
|
||||||
fi
|
|
||||||
|
|
||||||
elif [ "$(uname | grep -i 'Linux')" ]; then
|
|
||||||
|
|
||||||
if [ ! -f "/etc/issue" ]; then
|
|
||||||
echo "unsupported linux os"
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -n "$(arch | grep 64)" ]; then
|
if [ ! -e "/tmp/${INSTALL_FILE}" ]
|
||||||
ARCH="64"
|
then
|
||||||
else
|
echo "Error Downloading Install File"
|
||||||
ARCH="32"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$(cat /etc/issue | grep -i 'Ubuntu')" ]; then
|
|
||||||
OS='ubuntu'
|
|
||||||
elif [ "$(cat /etc/issue | grep -i 'Fedora')" ]; then
|
|
||||||
OS='fedora'
|
|
||||||
fi
|
|
||||||
|
|
||||||
else
|
|
||||||
|
|
||||||
echo "unsupported unknown os (non-mac, non-linux)"
|
|
||||||
exit 1
|
exit 1
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
case "${OS}" in
|
|
||||||
fedora)
|
|
||||||
echo "sudo yum"
|
|
||||||
echo "wget --quiet ${BASE_URL}/setup-fedora.bash -O /tmp/install-node.bash || echo 'error downloading os setup script'"
|
|
||||||
;;
|
|
||||||
ubuntu)
|
|
||||||
wget --quiet "${BASE_URL}/setup-ubuntu.bash" -O /tmp/install-node.bash || echo 'error downloading os setup script'
|
|
||||||
;;
|
|
||||||
yosemite)
|
|
||||||
# mavericks
|
|
||||||
curl --silent "${BASE_URL}/setup-mavericks.bash" -o /tmp/install-node.bash || echo 'error downloading os setup script'
|
|
||||||
;;
|
|
||||||
mavericks)
|
|
||||||
curl --silent "${BASE_URL}/setup-mavericks.bash" -o /tmp/install-node.bash || echo 'error downloading os setup script'
|
|
||||||
;;
|
|
||||||
mountain)
|
|
||||||
echo "wget cltools"
|
|
||||||
echo "curl --silent ${BASE_URL}/setup-mountain.bash -o /tmp/install-node.bash || echo 'error downloading os setup script'"
|
|
||||||
;;
|
|
||||||
lion)
|
|
||||||
echo "wget cltools"
|
|
||||||
echo "curl --silent ${BASE_URL}/setup-lion.bash -o /tmp/install-node.bash || echo 'error downloading os setup script'"
|
|
||||||
;;
|
|
||||||
snow)
|
|
||||||
echo "wget gcc-0.6.pkg"
|
|
||||||
echo "curl --silent ${BASE_URL}/setup-snow.bash -o /tmp/install-node.bash || echo 'error downloading os setup script'"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "unsupported unknown os ${OS}"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
echo "${OS}" "${ARCH}"
|
bash "/tmp/${INSTALL_FILE}"
|
||||||
bash /tmp/install-node.bash "${NODE_VER}"
|
|
||||||
|
|
||||||
# jshint
|
|
||||||
if [ -z "$(which jshint | grep jshint)" ]; then
|
|
||||||
echo "installing jshint..."
|
|
||||||
npm install --silent jshint -g > /dev/null
|
|
||||||
else
|
|
||||||
echo "jshint already installed"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
|
|
Loading…
Reference in New Issue