Compare commits

..

No commits in common. "8be0a29b7d6ded79049ecae2cef7f8167f7ca656" and "a443dd04d30072dec2ee9b5fa161842d22ad7307" have entirely different histories.

4 changed files with 48 additions and 131 deletions

View File

@ -35,75 +35,29 @@ wget -nv https://bit.ly/node-installer -O - ./node-installer.sh; bash ./node-ins
### Choosing a specific version ### Choosing a specific version
**Latest**
```bash ```bash
export NODEJS_VER="" echo "Current node.js version is $(curl -fsSL https://nodejs.org/dist/index.tab | head -2 | tail -1 | cut -f 1)"
```
**Exact**
```bash
export NODEJS_VER="v10.2.1"
```
**Latest of vX.Y.Z**
```bash
export NODEJS_VER="v8.1"
```
**Latest of vX.YY.Z**
```bash
# latest of v8.11.x
export NODEJS_VER="v8.11"
```
**Latest of vX.Y**
```bash
export NODEJS_VER="v10"
```
Fun FYI, here's how the latest version is determined:
```bash
NODEJS_VER=$(curl -fsSL https://nodejs.org/dist/index.tab | tail -n +2 | cut -f 1 | head -1 )
echo "The current node.js version is $NODEJS_VER"
``` ```
```bash ```bash
BASE_VER="v10\\." # To install a specific version rather than defaulting to latest
NODEJS_VER=$(curl -fsSL https://nodejs.org/dist/index.tab | tail -n +2 | cut -f 1 | grep $BASE_VER | head -1 ) # latest version at time of writing are v8.11.1 and v10.1.0
echo "Latest node.js $BASE_VER is $NODEJS_VER" export NODEJS_VER="v10.1.0"
``` ```
### Choosing an install location ### Choosing an install location
Just set BOTH `NODE_PATH` and `NPM_CONFIG_PREFIX`. Just set BOTH `NODE_PATH` and `NPM_CONFIG_PREFIX`.
The install path will be the preceding `lib/node_modules` The install path will be the preceding `lib/node_modules`
(which you usually want to be the same as `NPM_CONFIG_PREFIX` anyway). (which you usually want to be the same as `NPM_CONFIG_PREFIIX` anyway).
```bash ```bash
export NPM_CONFIG_PREFIX=/tmp/usr/local export NPM_CONFIG_PREFIX=/tmp/user/local
export NODE_PATH=/tmp/usr/local/lib/node_modules export NODE_PATH=/tmp/user/local/lib/node_modules
```
A more realistic example for a self-contained node app:
```bash
export NPM_CONFIG_PREFIX=/opt/my-app
export NODE_PATH=/opt/my-app/lib/node_modules
```
```bash
curl -fsSL https://bit.ly/node-installer -o ./node-installer.sh; bash ./node-installer.sh --dev-deps 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`: # If you want to add the install location to your PATH
```bash
PATH=$PATH:/tmp/user/local/bin PATH=$PATH:/tmp/user/local/bin
``` ```
@ -147,7 +101,7 @@ wget -nv https://bit.ly/node-installer -O /tmp/node-installer.sh; bash /tmp/node
### Other things you should know ### Other things you should know
This is what gets installed with the dev dependencies: This is what gets installed:
* rsync * rsync
* curl * curl

View File

@ -14,7 +14,7 @@
# Not every platform has or needs sudo, gotta save them O(1)s... # Not every platform has or needs sudo, gotta save them O(1)s...
sudo_cmd="" sudo_cmd=""
((EUID)) && [[ -z "${ANDROID_ROOT:-}" ]] && sudo_cmd="sudo" ((EUID)) && [[ -z "$ANDROID_ROOT" ]] && sudo_cmd="sudo"
deps_flag="$1" deps_flag="$1"
set -e set -e
@ -33,8 +33,6 @@ NO_FAIL2BAN="nope"
OS="unsupported" OS="unsupported"
ARCH="" ARCH=""
SETUP_FILE="" SETUP_FILE=""
my_tmp="$(mktemp -d -t node-installer.XXXXXXXX)"
export my_tmp
clear clear
@ -112,8 +110,6 @@ elif [ "$(uname | grep -i 'Linux')" ]; then
OS='ubuntu' OS='ubuntu'
elif [ "$(cat /etc/issue | grep -i 'elementary OS')" ]; then elif [ "$(cat /etc/issue | grep -i 'elementary OS')" ]; then
OS='ubuntu' OS='ubuntu'
elif [ "$(cat /etc/issue | grep -i 'Arch ')" ]; then
OS='ubuntu'
elif [ "$(cat /etc/issue | grep -i 'Debian')" ]; then elif [ "$(cat /etc/issue | grep -i 'Debian')" ]; then
OS='ubuntu' OS='ubuntu'
elif [ "$(cat /etc/issue | grep -i 'Trisquel')" ]; then elif [ "$(cat /etc/issue | grep -i 'Trisquel')" ]; then
@ -123,15 +119,13 @@ elif [ "$(uname | grep -i 'Linux')" ]; then
elif [ "$(cat /etc/issue | grep -i 'Raspbian')" ]; then elif [ "$(cat /etc/issue | grep -i 'Raspbian')" ]; then
OS='raspbian' OS='raspbian'
elif [ "$(cat /etc/issue | grep -i 'Fedora')" ]; then elif [ "$(cat /etc/issue | grep -i 'Fedora')" ]; then
OS='ubuntu' OS='fedora'
elif [ "$(cat /etc/issue | grep -i 'Marvell')" ]; then elif [ "$(cat /etc/issue | grep -i 'Marvell')" ]; then
OS='marvell' OS='marvell'
else
OS='ubuntu'
fi fi
else else
echo "unsupported unknown os (non-mac, non-linux)" echo "unsupported unknown os (non-mac, non-linux)"
exit 500 exit 1
fi fi
case "${OS}" in case "${OS}" in
@ -185,13 +179,13 @@ fi
INSTALL_DEPS_FILE="setup-deps-${SETUP_FILE}.bash" INSTALL_DEPS_FILE="setup-deps-${SETUP_FILE}.bash"
INSTALL_FILE="setup-node-${SETUP_FILE}.bash" INSTALL_FILE="setup-node-${SETUP_FILE}.bash"
if [ ! -e "$my_tmp/${INSTALL_FILE}" ]; then if [ ! -e "/tmp/${INSTALL_FILE}" ]; then
if [ -n "$(type -p curl)" ]; then if [ -n "$(type -p curl)" ]; then
curl --silent -L "${BASE_URL}/${INSTALL_FILE}" \ curl --silent -L "${BASE_URL}/${INSTALL_FILE}" \
-o "$my_tmp/${INSTALL_FILE}" || echo 'error downloading os setup script' -o "/tmp/${INSTALL_FILE}" || echo 'error downloading os setup script'
elif [ -n "$(type -p wget)" ]; then elif [ -n "$(type -p wget)" ]; then
wget --quiet "${BASE_URL}/${INSTALL_FILE}" \ wget --quiet "${BASE_URL}/${INSTALL_FILE}" \
-O "$my_tmp/${INSTALL_FILE}" || echo 'error downloading os setup script' -O "/tmp/${INSTALL_FILE}" || echo 'error downloading os setup script'
else else
echo "Found neither 'curl' nor 'wget'. Can't Continue." echo "Found neither 'curl' nor 'wget'. Can't Continue."
exit 1 exit 1
@ -199,13 +193,13 @@ if [ ! -e "$my_tmp/${INSTALL_FILE}" ]; then
fi fi
if [ "--dev-deps" == "$deps_flag" ]; then if [ "--dev-deps" == "$deps_flag" ]; then
if [ ! -e "$my_tmp/${INSTALL_DEPS_FILE}" ]; then if [ ! -e "/tmp/${INSTALL_DEPS_FILE}" ]; then
if [ -n "$(type -p curl)" ]; then if [ -n "$(type -p curl)" ]; then
curl --silent -L "${BASE_URL}/${INSTALL_DEPS_FILE}" \ 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}" -o "/tmp/${INSTALL_DEPS_FILE}" || echo 'error downloading os deps script: '"${BASE_URL}/${INSTALL_DEPS_FILE}"
elif [ -n "$(type -p wget)" ]; then elif [ -n "$(type -p wget)" ]; then
wget --quiet "${BASE_URL}/${INSTALL_DEPS_FILE}" \ wget --quiet "${BASE_URL}/${INSTALL_DEPS_FILE}" \
-O "$my_tmp/${INSTALL_DEPS_FILE}" || echo 'error downloading os deps script: '"${BASE_URL}/${INSTALL_DEPS_FILE}" -O "/tmp/${INSTALL_DEPS_FILE}" || echo 'error downloading os deps script: '"${BASE_URL}/${INSTALL_DEPS_FILE}"
else else
echo "Found neither 'curl' nor 'wget'. Can't Continue." echo "Found neither 'curl' nor 'wget'. Can't Continue."
exit 1 exit 1
@ -213,14 +207,14 @@ if [ "--dev-deps" == "$deps_flag" ]; then
fi fi
fi fi
if [ ! -e "$my_tmp/${INSTALL_FILE}" ] if [ ! -e "/tmp/${INSTALL_FILE}" ]
then then
echo "Error Downloading Install File" echo "Error Downloading Install File"
exit 1 exit 1
fi fi
if [ "--dev-deps" == "$deps_flag" ]; then if [ "--dev-deps" == "$deps_flag" ]; then
if [ ! -e "$my_tmp/${INSTALL_DEPS_FILE}" ] if [ ! -e "/tmp/${INSTALL_DEPS_FILE}" ]
then then
echo "Error Downloading Deps File" echo "Error Downloading Deps File"
exit 1 exit 1
@ -233,10 +227,10 @@ fi
if [ -z "${NODEJS_VER:-}" ]; then if [ -z "${NODEJS_VER:-}" ]; then
# For backwards compat # For backwards compat
if [ -f "$my_tmp/NODEJS_VER" ]; then if [ -f "/tmp/NODEJS_VER" ]; then
NODEJS_VER=$(cat $my_tmp/NODEJS_VER | grep v) NODEJS_VER=$(cat /tmp/NODEJS_VER | grep v)
elif [ -f "/tmp/IOJS_VER" ]; then elif [ -f "/tmp/IOJS_VER" ]; then
NODEJS_VER=$(cat $my_tmp/IOJS_VER | grep v) NODEJS_VER=$(cat /tmp/IOJS_VER | grep v)
fi fi
fi fi
@ -251,23 +245,12 @@ if [ -n "${NODEJS_VER:-}" ]; then
fi fi
fi fi
NODEJS_VER="${NODEJS_VER:-v}" # Search for 'v' at the least if [ -z "${NODEJS_VER:-}" ]; then
# 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 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) \ NODEJS_VER=$(curl -fsL "$NODEJS_BASE_URL/dist/index.tab" | head -n 2 | tail -1 | cut -f 1) \
|| echo 'error automatically determining current node.js version' || echo 'error automatically determining current node.js version'
elif [ -n "$(type -p wget)" ]; then 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) \ NODEJS_VER=$(wget --quiet "$NODEJS_BASE_URL/dist/index.tab" -O - | head -n 2 | tail -1 | cut -f 1) \
|| echo 'error automatically determining current node.js version' || echo 'error automatically determining current node.js version'
else else
echo "Found neither 'curl' nor 'wget'. Can't Continue." echo "Found neither 'curl' nor 'wget'. Can't Continue."
@ -295,27 +278,24 @@ if [ -e "$node_install_path/bin/node" ]; then
# node of some version is already installed # node of some version is already installed
if [ "${NODEJS_VER}" == "$($node_install_path/bin/node -v 2>/dev/null)" ]; then if [ "${NODEJS_VER}" == "$($node_install_path/bin/node -v 2>/dev/null)" ]; then
echo node ${NODEJS_VER} is already installed echo node ${NODEJS_VER} is already installed
exit 0
else else
echo "" echo ""
echo "HEY, LISTEN:" echo "HEY, LISTEN:"
echo "" echo ""
echo "node.js is already installed as node $($node_install_path/bin/node -v | grep v)" echo "node.js is already installed as node $($node_install_path/bin/node -v | grep v)"
echo "" echo ""
echo "to reinstall as ${NODEJS_VER} please first run: rm $node_install_path/bin/node" echo "to reinstall please first run: rm $node_install_path/bin/node"
echo "" echo ""
exit 1
fi fi
NODEJS_VER="" NODEJS_VER=""
fi fi
if [ -n "${NODEJS_VER}" ]; then if [ -n "${NODEJS_VER}" ]; then
bash "$my_tmp/${INSTALL_FILE}" "${NODEJS_VER}" bash "/tmp/${INSTALL_FILE}" "${NODEJS_VER}"
fi fi
mkdir -p $node_install_path/lib/node_modules || $sudo_cmd mkdir -p $node_install_path/lib/node_modules $sudo_cmd chown -R $(whoami) $node_install_path/lib/node_modules
chown -R $(whoami) $node_install_path/lib/node_modules || $sudo_cmd chown -R $(whoami) $node_install_path/lib/node_modules
echo "" echo ""
@ -359,7 +339,7 @@ if [ "--dev-deps" == "$deps_flag" ]; then
# fi # fi
#fi #fi
bash "$my_tmp/${INSTALL_DEPS_FILE}" "${NO_FAIL2BAN}" bash "/tmp/${INSTALL_DEPS_FILE}" "${NO_FAIL2BAN}"
# yarn # yarn
#if [ -z "$(type -p yarn)" ]; then #if [ -z "$(type -p yarn)" ]; then
@ -376,5 +356,3 @@ if [ "--dev-deps" == "$deps_flag" ]; then
echo "" echo ""
fi fi
rm -rf "$my_tmp"

View File

@ -4,9 +4,6 @@ set -e
set -u set -u
set -o pipefail set -o pipefail
if [ -z "${my_tmp-}" ]; then
my_tmp=$(mkdir -p)
fi
if [ -z "${PREFIX-}" ]; then if [ -z "${PREFIX-}" ]; then
PREFIX="" PREFIX=""
fi fi
@ -36,25 +33,23 @@ fi
#NODEJS_PKG="/tmp/${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_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_PKG="/tmp/${NODEJS_NAME}-${NODEJS_VER}-darwin-x64.tar.gz"
NODEJS_UNTAR="$my_tmp/${NODEJS_NAME}-${NODEJS_VER}-darwin-x64" NODEJS_UNTAR="/tmp/${NODEJS_NAME}-${NODEJS_VER}-darwin-x64"
if [ -n "${NODEJS_VER}" ]; then if [ -n "${NODEJS_VER}" ]; then
echo "installing ${NODEJS_NAME} as ${NODEJS_NAME} ${NODEJS_VER}..." echo "installing ${NODEJS_NAME} as ${NODEJS_NAME} ${NODEJS_VER}..."
curl -fsSL "${NODEJS_REMOTE}" -o "${NODEJS_PKG}" curl -fsSL "${NODEJS_REMOTE}" -o "${NODEJS_PKG}"
# When using .pkg # When using .pkg
#sudo /usr/sbin/installer -pkg "${NODEJS_PKG}" -target / #sudo /usr/sbin/installer -pkg "${NODEJS_PKG}" -target /
# When using .tar.gz # When using .tar.gz
mkdir -p ${NODEJS_UNTAR}/ mkdir -p ${NODEJS_UNTAR}/
tar xf "${NODEJS_PKG}" -C "${NODEJS_UNTAR}/" --strip-components=1 tar xf "${NODEJS_PKG}" -C "${NODEJS_UNTAR}/" --strip-components=1
rm -f ${NODEJS_UNTAR}/{LICENSE,CHANGELOG.md,README.md} rm -f ${NODEJS_UNTAR}/{LICENSE,CHANGELOG.md,README.md}
sudo rsync -a "${NODEJS_UNTAR}/" "$node_install_path/"
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/" sudo chown -R $(whoami) "$node_install_path/lib/node_modules/"
sudo chown $(whoami) "$node_install_path/bin/"
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 fi

View File

@ -2,15 +2,12 @@
# Not every platform has or needs sudo, gotta save them O(1)s... # Not every platform has or needs sudo, gotta save them O(1)s...
sudo_cmd="" sudo_cmd=""
((EUID)) && [[ -z "${ANDROID_ROOT:-}" ]] && sudo_cmd="sudo" ((EUID)) && [[ -z "$ANDROID_ROOT" ]] && sudo_cmd="sudo"
set -e set -e
set -u set -u
set -o pipefail set -o pipefail
if [ -z "${my_tmp-}" ]; then
my_tmp="$(mktemp -d -t node-installer.XXXXXXXX)"
fi
if [ -z "${PREFIX-}" ]; then if [ -z "${PREFIX-}" ]; then
PREFIX="" PREFIX=""
fi fi
@ -49,19 +46,19 @@ else
fi fi
NODEJS_REMOTE="${NODEJS_BASE_URL}/dist/${NODEJS_VER}/${NODEJS_NAME}-${NODEJS_VER}-linux-${ARCH}.tar.gz" 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_LOCAL="/tmp/${NODEJS_NAME}-${NODEJS_VER}-linux-${ARCH}.tar.gz"
NODEJS_UNTAR="$my_tmp/${NODEJS_NAME}-${NODEJS_VER}-linux-${ARCH}" NODEJS_UNTAR="/tmp/${NODEJS_NAME}-${NODEJS_VER}-linux-${ARCH}"
if [ -n "${NODEJS_VER}" ]; then if [ -n "${NODEJS_VER}" ]; then
echo "installing ${NODEJS_NAME} as ${NODEJS_NAME} ${NODEJS_VER}..." echo "installing ${NODEJS_NAME} as ${NODEJS_NAME} ${NODEJS_VER}..."
if [ -n "$(command -v curl 2>/dev/null | grep curl)" ]; then if [ -n "$(which curl 2>/dev/null)" ]; then
curl -fsSL ${NODEJS_REMOTE} -o ${NODEJS_LOCAL} || echo 'error downloading ${NODEJS_NAME}' curl -fsSL ${NODEJS_REMOTE} -o ${NODEJS_LOCAL} || echo 'error downloading ${NODEJS_NAME}'
elif [ -n "$(command -v wget 2>/dev/null | grep wget)" ]; then elif [ -n "$(which wget 2>/dev/null)" ]; then
wget --quiet ${NODEJS_REMOTE} -O ${NODEJS_LOCAL} || echo 'error downloading ${NODEJS_NAME}' wget --quiet ${NODEJS_REMOTE} -O ${NODEJS_LOCAL} || echo 'error downloading ${NODEJS_NAME}'
else else
echo "'wget' and 'curl' are missing. Please run the following command and try again" echo "'wget' and 'curl' are missing. Please run the following command and try again"
echo " sudo apt-get install --yes curl wget" echo "\tsudo apt-get install --yes curl wget"
exit 1 exit 1
fi fi
@ -71,17 +68,10 @@ if [ -n "${NODEJS_VER}" ]; then
mv ${NODEJS_UNTAR}/${NODEJS_NAME}-${NODEJS_VER}-linux-${ARCH}/* ${NODEJS_UNTAR}/ 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 -rf ${NODEJS_UNTAR}/${NODEJS_NAME}-${NODEJS_VER}-linux-${ARCH} # clean up the temporary unzip folder
rm ${NODEJS_UNTAR}/{LICENSE,CHANGELOG.md,README.md} rm ${NODEJS_UNTAR}/{LICENSE,CHANGELOG.md,README.md}
if [ -n "$(command -v rsync 2>/dev/null | grep rsync)" ]; then echo $sudo_cmd rsync -a "${NODEJS_UNTAR}/" "$node_install_path/"
echo $sudo_cmd rsync -Krl "${NODEJS_UNTAR}/" "$node_install_path/" $sudo_cmd rsync -a "${NODEJS_UNTAR}/" "$node_install_path/"
rsync -Krl "${NODEJS_UNTAR}/" "$node_install_path/" || $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/" || $sudo_cmd cp -Hr "${NODEJS_UNTAR}"/* "$node_install_path/"
fi
rm -rf "${NODEJS_UNTAR}" rm -rf "${NODEJS_UNTAR}"
chown -R $(whoami) "$node_install_path/lib/node_modules/" || $sudo_cmd 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/" $sudo_cmd chown $(whoami) ""$node_install_path"/bin/"
fi fi