Spaces:
Running
Running
# Logger Function | |
log() { | |
local message="$1" | |
local type="$2" | |
local timestamp=$(date '+%Y-%m-%d %H:%M:%S') | |
local color | |
local endcolor="\033[0m" | |
case "$type" in | |
"info") color="\033[38;5;79m" ;; | |
"success") color="\033[1;32m" ;; | |
"error") color="\033[1;31m" ;; | |
*) color="\033[1;34m" ;; | |
esac | |
echo -e "${color}${timestamp} - ${message}${endcolor}" | |
} | |
# Error handler function | |
handle_error() { | |
local exit_code=$1 | |
local error_message="$2" | |
log "Error: $error_message (Exit Code: $exit_code)" "error" | |
exit $exit_code | |
} | |
# Function to check for command availability | |
command_exists() { | |
command -v "$1" &> /dev/null | |
} | |
check_os() { | |
if ! [ -f "/etc/debian_version" ]; then | |
echo "Error: This script is only supported on Debian-based systems." | |
exit 1 | |
fi | |
} | |
# Function to Install the script pre-requisites | |
install_pre_reqs() { | |
log "Installing pre-requisites" "info" | |
# Run 'apt-get update' | |
if ! apt-get update -y; then | |
handle_error "$?" "Failed to run 'apt-get update'" | |
fi | |
# Run 'apt-get install' | |
if ! apt-get install -y apt-transport-https ca-certificates curl gnupg; then | |
handle_error "$?" "Failed to install packages" | |
fi | |
if ! mkdir -p /usr/share/keyrings; then | |
handle_error "$?" "Makes sure the path /usr/share/keyrings exist or run ' mkdir -p /usr/share/keyrings' with sudo" | |
fi | |
rm -f /usr/share/keyrings/nodesource.gpg || true | |
rm -f /etc/apt/sources.list.d/nodesource.list || true | |
# Run 'curl' and 'gpg' to download and import the NodeSource signing key | |
if ! curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource.gpg; then | |
handle_error "$?" "Failed to download and import the NodeSource signing key" | |
fi | |
# Explicitly set the permissions to ensure the file is readable by all | |
if ! chmod 644 /usr/share/keyrings/nodesource.gpg; then | |
handle_error "$?" "Failed to set correct permissions on /usr/share/keyrings/nodesource.gpg" | |
fi | |
} | |
# Function to configure the Repo | |
configure_repo() { | |
local node_version=$1 | |
arch=$(dpkg --print-architecture) | |
if [ "$arch" != "amd64" ] && [ "$arch" != "arm64" ] && [ "$arch" != "armhf" ]; then | |
handle_error "1" "Unsupported architecture: $arch. Only amd64, arm64, and armhf are supported." | |
fi | |
echo "deb [arch=$arch signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$node_version nodistro main" | tee /etc/apt/sources.list.d/nodesource.list > /dev/null | |
# N|solid Config | |
echo "Package: nsolid" | tee /etc/apt/preferences.d/nsolid > /dev/null | |
echo "Pin: origin deb.nodesource.com" | tee -a /etc/apt/preferences.d/nsolid > /dev/null | |
echo "Pin-Priority: 600" | tee -a /etc/apt/preferences.d/nsolid > /dev/null | |
# Nodejs Config | |
echo "Package: nodejs" | tee /etc/apt/preferences.d/nodejs > /dev/null | |
echo "Pin: origin deb.nodesource.com" | tee -a /etc/apt/preferences.d/nodejs > /dev/null | |
echo "Pin-Priority: 600" | tee -a /etc/apt/preferences.d/nodejs > /dev/null | |
# Run 'apt-get update' | |
if ! apt-get update -y; then | |
handle_error "$?" "Failed to run 'apt-get update'" | |
else | |
log "Repository configured successfully." | |
log "To install Node.js, run: apt-get install nodejs -y" "info" | |
log "You can use N|solid Runtime as a node.js alternative" "info" | |
log "To install N|solid Runtime, run: apt-get install nsolid -y \n" "success" | |
fi | |
} | |
# Define Node.js version | |
NODE_VERSION="22.x" | |
# Check OS | |
check_os | |
# Main execution | |
install_pre_reqs || handle_error $? "Failed installing pre-requisites" | |
configure_repo "$NODE_VERSION" || handle_error $? "Failed configuring repository" | |