summaryrefslogtreecommitdiff
path: root/files
diff options
context:
space:
mode:
Diffstat (limited to 'files')
-rw-r--r--files/setup_lts.sh121
1 files changed, 121 insertions, 0 deletions
diff --git a/files/setup_lts.sh b/files/setup_lts.sh
new file mode 100644
index 0000000..f0a381f
--- /dev/null
+++ b/files/setup_lts.sh
@@ -0,0 +1,121 @@
+#!/bin/bash
+
+# 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 update'
+ if ! apt update -y; then
+ handle_error "$?" "Failed to run 'apt update'"
+ fi
+
+ # Run 'apt install'
+ if ! apt 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
+ rm -f /etc/apt/sources.list.d/nodesource.sources || 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" ]; then
+ handle_error "1" "Unsupported architecture: $arch. Only amd64, arm64 are supported. Contact Nodesource for an extended support version https://nodesource.com/pages/contact-us.html."
+ fi
+
+ cat <<EOF | tee /etc/apt/sources.list.d/nodesource.sources > /dev/null
+Types: deb
+URIs: https://deb.nodesource.com/node_$node_version
+Suites: nodistro
+Components: main
+Architectures: $arch
+Signed-By: /usr/share/keyrings/nodesource.gpg
+EOF
+
+ # 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 update'
+ if ! apt update -y; then
+ handle_error "$?" "Failed to run 'apt update'"
+ else
+ log "Repository configured successfully."
+ log "To install Node.js, run: apt 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 install nsolid -y \n" "success"
+ fi
+}
+
+# Define Node.js version
+NODE_VERSION="24.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"