Compare commits

...

44 Commits
v1.1 ... master

Author SHA1 Message Date
AJ ONeal a431978582 docs: fix typo 2022-08-19 19:05:47 +00:00
AJ ONeal 6c3fa218ba docs: update deprecation notice 2022-08-19 19:05:19 +00:00
AJ ONeal 79d4d239ad bugfix: don't block macOS 11+ 2021-09-08 03:20:15 +00:00
AJ ONeal 60f206373c Update 'install.sh' 2021-09-04 21:14:30 +00:00
AJ ONeal 22c741817c point to webinstall.dev 2020-04-28 02:32:35 +00:00
AJ ONeal 1f3a195fe9 update link 2019-04-09 03:48:40 +00:00
AJ ONeal c3890ca8a9 silence stupid errors 2019-04-04 06:07:54 +00:00
AJ ONeal 689fa58531 silence unimportant errors 2019-04-04 06:05:25 +00:00
AJ ONeal 895dcd31f2 NODE_VERSION taks preference over NODEJS_VER 2018-09-14 06:49:59 +00:00
AJ ONeal b8acbae85f fix unbound var 2018-09-14 06:46:56 +00:00
AJ ONeal 509ee32688 remove trailing / 2018-09-10 08:21:38 +00:00
AJ ONeal 3109f4bb94 syntax highlighting 2018-09-10 08:20:38 +00:00
AJ ONeal 05199bcf82 refactor the docs 2018-09-10 08:19:11 +00:00
AJ ONeal 1387929dfc NODEJS_VER => NODE_VERSION 2018-09-10 07:45:08 +00:00
AJ ONeal c15264b763 Update 'README.md' 2018-09-10 07:40:50 +00:00
AJ ONeal 8be0a29b7d remove tmpdir on success 2018-07-26 22:10:46 +00:00
AJ ONeal 972d510f59 better tmpdir 2018-07-26 22:08:15 +00:00
AJ ONeal 92ec7ad5b6 use better tmp dir 2018-07-26 22:07:02 +00:00
AJ ONeal 95c0caf4be cleanup 2018-07-26 22:02:16 +00:00
AJ ONeal ed24276356 bugfix for Arch Linux sans rsync 2018-07-26 22:00:40 +00:00
AJ ONeal dddf31db8d do copy links with rsync 2018-07-26 21:48:34 +00:00
AJ ONeal a1af3328cb copy -Hr as best approximation for rsync -Kr 2018-07-26 21:47:05 +00:00
AJ ONeal 515bdce8c2 rsync with -Kr instead of -a to not break symlinks in /usr/local 2018-07-26 21:41:42 +00:00
AJ ONeal 4ea01c4c42 don't include * in quotes 2018-07-26 20:51:20 +00:00
AJ ONeal 45adb12ae1 cp has slightly different symmantecs 2018-07-26 20:49:40 +00:00
AJ ONeal 0d6e15ee62 don't rely on rsync 2018-07-26 20:48:00 +00:00
AJ ONeal 8a14fc8ede assume no dev tools by default 2018-07-26 20:38:51 +00:00
AJ ONeal 2309008c5f failsafe exit if node is installed 2018-06-27 10:20:10 +00:00
AJ ONeal f2a8c2fc49 allow ANDROID_ROOT to be undefined 2018-06-26 05:54:06 +00:00
AJ ONeal b562d6dd3b merge 2018-06-23 16:31:37 -06:00
AJ ONeal 5f231f9d22 set ANDROID_ROOT empty 2018-06-23 05:16:13 +00:00
AJ ONeal 0171162f20 typo fix 2018-06-20 02:11:24 +00:00
AJ ONeal 3ced314799 fix comparison 2018-06-20 02:07:43 +00:00
AJ ONeal 00c986e483 regression fix: allow empty NODEJS_VER 2018-06-20 02:06:38 +00:00
AJ ONeal 97c7ef9793 make sure directory exists before chowning it 2018-06-18 21:40:42 +00:00
AJ ONeal c747edb99a update installer examples 2018-06-14 21:10:05 +00:00
AJ ONeal 62bc523d03 fix #1 typo / misspelling of PREFIX
PREFIX not PREFIIX as per #1
2018-06-05 07:36:21 +00:00
AJ ONeal 82e6ace060 make docs more readable 2018-05-24 21:34:44 +00:00
AJ ONeal 748c51a687 show selecting version in docs 2018-05-24 21:31:04 +00:00
AJ ONeal 0c7d0a7da6 note desired version number when already installed 2018-05-24 21:13:55 +00:00
AJ ONeal be9344dbea match literal '.' for version, not wildcard 2018-05-24 21:12:37 +00:00
AJ ONeal 2d628014d0 tail typo fix 2018-05-24 21:09:02 +00:00
AJ ONeal 17c0b01ee0 unset far typo fix 2018-05-24 21:08:12 +00:00
AJ ONeal e436cdb64d allow use of partial version number i.e. v10 or v10.2 2018-05-24 21:07:04 +00:00
3 changed files with 166 additions and 94 deletions

136
README.md
View File

@ -1,66 +1,105 @@
# STOP
The install method in this repo still has its place, but this is no longer maintained.
**Update**: Use [Webi](https://webinstall.dev) instead:
```sh
curl https://webinstall.dev/node | bash
```
# Easy Install node.js
| Sponsored by [ppl](https://ppl.family) |
| A [Root](https://rootprojects.org) Project |
Automated node.js installers for OS X and Ubuntu
Simple node.js installer for macOS and Linux
**node.js only** (no dev tools)
## QuickStart
```bash
# install node.js without development dependencies
curl -fsSL https://bit.ly/node-installer | bash -s -- --no-dev-deps
# using wget instead of curl (Ubuntu)
wget -nv https://bit.ly/node-installer -O - | bash -s -- --no-dev-deps
curl -fsL bit.ly/node-installer | bash
```
**node.js + dev tools**
Install node.js and basic development tools - git, node, gcc, pkg-config, etc
```bash
curl -fsSL https://bit.ly/node-installer -o ./node-installer.sh; bash ./node-installer.sh --dev-deps
# or wget
wget -nv https://bit.ly/node-installer -O - ./node-installer.sh; bash ./node-installer.sh --dev-deps
```
*Note*: [bit.ly/node-installer](https://bit.ly/node-installer) simple redirects to <https://git.coolaj86.com/coolaj86/node-installer.sh/raw/master/install.sh>
*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>
## 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))
## Options
## Installer Options
### Choosing a specific version
* [x] version
* [x] install location
* [x] tools for building native modules
### Choose Version
The latest version of node is installed by default.
You can choose a specific version by defining `NODE_VERSION` in the format `vX`, `vX.Y`, or `v.X.Y.Z`:
```bash
echo "Current node.js version is $(curl -fsSL https://nodejs.org/dist/index.tab | head -2 | tail -1 | cut -f 1)"
NODE_VERSION=v10
```
Usage:
```bash
# To install a specific version rather than defaulting to latest
# latest version at time of writing are v8.11.1 and v10.1.0
export NODEJS_VER="v10.1.0"
export NODE_VERSION=v10.10
curl -fsSL https://bit.ly/node-installer | bash
```
### Choosing an install location
### Location
Just set BOTH `NODE_PATH` and `NPM_CONFIG_PREFIX`.
The install path will be the preceding `lib/node_modules`
(which you usually want to be the same as `NPM_CONFIG_PREFIIX` anyway).
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=/tmp/user/local
export NODE_PATH=/tmp/user/local/lib/node_modules
curl -fsSL https://bit.ly/node-installer -o ./node-installer.sh; bash ./node-installer.sh --dev-deps
# If you want to add the install location to your PATH
PATH=$PATH:/tmp/user/local/bin
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)
@ -99,18 +138,17 @@ curl -fsSL https://bit.ly/node-installer -o /tmp/node-installer.sh; bash /tmp/no
wget -nv https://bit.ly/node-installer -O /tmp/node-installer.sh; bash /tmp/node-installer.sh --dev-deps
```
### Other things you should know
### Automatic Version Detection
This is what gets installed:
Fun FYI, here's how the latest version is determined:
* rsync
* curl
* wget
* git
* xcode / brew / build-essential / pkg-config / gcc
* node (including npm)
* jshint
```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"
```
**NOTE**: If you're running a node.js server on 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.
```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"
```

View File

@ -14,7 +14,7 @@
# Not every platform has or needs sudo, gotta save them O(1)s...
sudo_cmd=""
((EUID)) && [[ -z "$ANDROID_ROOT" ]] && sudo_cmd="sudo"
((EUID)) && [[ -z "${ANDROID_ROOT:-}" ]] && sudo_cmd="sudo"
deps_flag="$1"
set -e
@ -33,7 +33,7 @@ NO_FAIL2BAN="nope"
OS="unsupported"
ARCH=""
SETUP_FILE=""
my_tmp=$(mktemp -d)
my_tmp="$(mktemp -d -t node-installer.XXXXXXXX)"
export my_tmp
clear
@ -56,37 +56,38 @@ if [ "$(uname | grep -i 'Darwin')" ]; then
exit 1
fi
if [ "$OSX_MAJOR" -gt 10 ]; then
echo "unsupported OS X version (os 11+)"
exit 1
# 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
#
# Minor
#
if [ "$OSX_MINOR" -le 5 ]; then
echo "unsupported OS X version (os 10.5-)"
exit 1
fi
# OS X (10) and macOS (11) should be supported
# 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'
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
@ -112,6 +113,8 @@ elif [ "$(uname | grep -i 'Linux')" ]; 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
@ -121,13 +124,15 @@ elif [ "$(uname | grep -i 'Linux')" ]; then
elif [ "$(cat /etc/issue | grep -i 'Raspbian')" ]; then
OS='raspbian'
elif [ "$(cat /etc/issue | grep -i 'Fedora')" ]; then
OS='fedora'
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 1
exit 500
fi
case "${OS}" in
@ -227,6 +232,12 @@ 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
@ -247,12 +258,23 @@ if [ -n "${NODEJS_VER:-}" ]; then
fi
fi
if [ -z "${NODEJS_VER:-}" ]; then
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" | head -n 2 | tail -1 | cut -f 1) \
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 - | head -n 2 | tail -1 | cut -f 1) \
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."
@ -280,14 +302,16 @@ 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 please first run: rm $node_install_path/bin/node"
echo "to reinstall as ${NODEJS_VER} please first run: rm $node_install_path/bin/node"
echo ""
exit 1
fi
NODEJS_VER=""
@ -297,7 +321,8 @@ if [ -n "${NODEJS_VER}" ]; then
bash "$my_tmp/${INSTALL_FILE}" "${NODEJS_VER}"
fi
chown -R $(whoami) $node_install_path/lib/node_modules || $sudo_cmd chown -R $(whoami) $node_install_path/lib/node_modules
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 ""
@ -358,3 +383,5 @@ if [ "--dev-deps" == "$deps_flag" ]; then
echo ""
fi
rm -rf "$my_tmp"

View File

@ -2,14 +2,14 @@
# Not every platform has or needs sudo, gotta save them O(1)s...
sudo_cmd=""
((EUID)) && [[ -z "$ANDROID_ROOT" ]] && sudo_cmd="sudo"
((EUID)) && [[ -z "${ANDROID_ROOT:-}" ]] && sudo_cmd="sudo"
set -e
set -u
set -o pipefail
if [ -z "${my_tmp-}" ]; then
my_tmp=$(mkdir -p)
my_tmp="$(mktemp -d -t node-installer.XXXXXXXX)"
fi
if [ -z "${PREFIX-}" ]; then
PREFIX=""
@ -55,9 +55,9 @@ 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 "$(which curl 2>/dev/null)" ]; then
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 "$(which wget 2>/dev/null)" ]; then
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"
@ -71,10 +71,17 @@ if [ -n "${NODEJS_VER}" ]; then
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}
echo $sudo_cmd rsync -a "${NODEJS_UNTAR}/" "$node_install_path/"
rsync -a "${NODEJS_UNTAR}/" "$node_install_path/" || $sudo_cmd rsync -a "${NODEJS_UNTAR}/" "$node_install_path/"
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/" || $sudo_cmd chown -R $(whoami) "$node_install_path/lib/node_modules/"
chown $(whoami) ""$node_install_path"/bin/" || $sudo_cmd chown $(whoami) ""$node_install_path"/bin/"
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