I’ve recently been working on an install script for a project. As part of the install I need to check if there is a suitable version of NodeJS installed and if not install one.
The problem is that there are 2 main ways in which NodeJS can be installed using the default package management systems for different Linux Distributions. So I needed a way to work out which distro the script was running on.
The step was to work out if it is actually Linux or if it’s OSx, since I’m using bash
as the interpreter for the script there is the OSTYPE
environment variable that I can check.
case "$OSTYPE" in
darwin*)
MYOS=darwin
;;
linux*)
MYOS=$(cat /etc/os-release | grep "^ID=" | cut -d = -f 2 | tr -d '"')
;;
*)
# unknown OS
;;
esac
Once we are sure we are on Linux the we can check the /etc/os-release
file and cut out the ID=
entry. The tr
is to cut the quotes off (Amazon Linux I’m looking at you…)
MYOS
then contains one of the following:
- debian
- ubuntu
- raspbian
- fedora
- rhel
- centos
- amzon
And using this we can then decide how to install NodeJS
if [[ "$MYOS" == "debian" ]] || [[ "$MYOS" == "ubuntu" ]] || [[ "$MYOS" == "raspbian" ]]; then
curl -sSL "https://deb.nodesource.com/setup_$MIN_NODEJS.x" | sudo -E bash -
sudo apt-get install -y nodejs build-essential
elif [[ "$MYOS" == "fedora" ]]; then
sudo dnf module reset -y nodejs
sudo dnf module install -y "nodejs:$MIN_NODEJS/default"
sudo dnf group install -y "C Development Tools and Libraries"
elif [[ "$MYOS" == "rhel" ]] || [[ "$MYOS" == "centos" || "$MYOS" == "amzn" ]]; then
curl -fsSL "https://rpm.nodesource.com/setup_$MIN_NODEJS.x" | sudo -E bash -
sudo yum install -y nodejs
sudo yum group install -y "Development Tools"
elif [[ "$MYOS" == "darwin" ]]; then
echo "**************************************************************"
echo "* On OSx you will need to manually install NodeJS *"
echo "* Please install the latest LTS release from: *"
echo "* https://nodejs.org/en/download/ *"
echo "**************************************************************"
exit 1
fi
Now that’s out of the way time to look at how to nicely setup a Systemd service…