summaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rwxr-xr-xtools/setup-unit311
1 files changed, 311 insertions, 0 deletions
diff --git a/tools/setup-unit b/tools/setup-unit
new file mode 100755
index 00000000..2e10e54d
--- /dev/null
+++ b/tools/setup-unit
@@ -0,0 +1,311 @@
+#!/bin/sh
+
+#####################################################################
+#
+# Copyright (C) NGINX, Inc.
+#
+# Author: NGINX Unit Team, F5 Inc.
+# Version: 0.0.1
+# Date: 2022-05-05
+#
+# This script will configure the repositories for NGINX Unit on Ubuntu,
+# Debian, RedHat, CentOS, Oracle Linux, Amazon Linux, Fedora.
+# It must be run as root.
+#
+# Note: curl and awk are required by this script, so the script checks to make
+# sure they are installed.
+#
+#####################################################################
+
+export LC_ALL=C
+
+checkOSPrereqs () {
+
+ if ! command -v curl > /dev/null 2>&1
+ then
+ echo "Error: curl not found in PATH. It must be installed to run this script."
+ exit 1
+ fi
+
+ if ! command -v awk > /dev/null 2>&1
+ then
+ echo "Error: awk not found in PATH. It must be installed to run this script."
+ exit 1
+ fi
+
+ return 0
+}
+
+#####################################################################
+# Function getOS
+#
+# Getting the OS is not the same on all distributions. First, we use
+# uname to find out if we are running on Linux or FreeBSD. For all the
+# supported versions of Debian and Ubuntu, we expect to find the
+# /etc/os-release file which has multiple lines with name-value pairs
+# from which we can get the OS name and version. For RedHat and its
+# variants, the os-release file may or may not exist, depending on the
+# version. If it doesn't, then we look for the release package and
+# get the OS and version from the package name. For FreeBSD, we use the
+# "uname -rs" command.
+#
+# A string is written to stdout with three values separated by ":":
+# OS
+# OS Name
+# OS Version
+#
+# If none of these files was found, an empty string is written.
+#
+# Return: 0 for success, 1 for error
+#####################################################################
+getOS () {
+
+ os=""
+ osName=""
+ osVersion=""
+
+ LC_ALL=C
+
+ os=$(uname | tr '[:upper:]' '[:lower:]')
+
+ if [ "$os" != "linux" ] && [ "$os" != "freebsd" ]; then
+ echoErr "Error: Operating system is not Linux or FreeBSD, can't proceed"
+ echo "On macOS, try 'brew install nginx/unit/unit'"
+ echo
+ return 1
+ fi
+
+ if [ "$os" = "linux" ]; then
+ if [ -f "$osRelease" ]; then
+ # The value for the ID and VERSION_ID may or may not be in quotes
+ osName=$( grep "^ID=" "$osRelease" | sed s/\"//g | awk -F= '{ print $2 }')
+ osVersion=$(grep "^VERSION_ID=" "$osRelease" | sed s/\"//g | awk -F= '{ print $2 }')
+ else
+ # rhel or centos 6.*
+ if rpm -q redhat-release-server >/dev/null 2>&1; then
+ osName=rhel
+ osVersion=$(rpm -q redhat-release-server |sed 's/.*-//' | awk -F. '{print $1"."$2;}')
+ elif rpm -q centos-release >/dev/null 2>&1; then
+ osName=centos
+ osVersion=$(rpm -q centos-release | sed 's/centos-release-//' | sed 's/\..*//' | awk -F- '{print $1"."$2;}')
+ else
+ echoErr "Error: Unable to determine the operating system and version, or the OS is not supported"
+ echo
+ return 1
+ fi
+ fi
+ else
+ osName=$os
+ osVersion=$(uname -rs | awk -F '[ -]' '{print $2}')
+ if [ -z "$osVersion" ]; then
+ echoErr "Unable to get the FreeBSD version"
+ echo
+ return 1
+ fi
+ fi
+
+ # Force osName to lowercase
+ osName=$(echo "$osName" | tr '[:upper:]' '[:lower:]')
+ echoDebug "getOS: os=$os osName=$osName osVersion=$osVersion"
+ echo "$os:$osName:$osVersion"
+
+ return 0
+}
+
+
+installDebian () {
+
+ echoDebug "Install on Debian"
+
+ curl --output /usr/share/keyrings/nginx-keyring.gpg https://unit.nginx.org/keys/nginx-keyring.gpg
+
+ apt install -y apt-transport-https lsb-release ca-certificates
+
+ printf "deb [signed-by=/usr/share/keyrings/nginx-keyring.gpg] https://packages.nginx.org/unit/debian/ %s unit\n" "$(lsb_release -cs)" | tee /etc/apt/sources.list.d/unit.list
+ printf "deb-src [signed-by=/usr/share/keyrings/nginx-keyring.gpg] https://packages.nginx.org/unit/debian/ %s unit\n" "$(lsb_release -cs)" | tee -a /etc/apt/sources.list.d/unit.list
+
+ apt update
+
+ return 0
+}
+
+installUbuntu () {
+
+ echoDebug "Install on Ubuntu"
+
+ curl --output /usr/share/keyrings/nginx-keyring.gpg https://unit.nginx.org/keys/nginx-keyring.gpg
+
+ apt install -y apt-transport-https lsb-release ca-certificates
+
+ printf "deb [signed-by=/usr/share/keyrings/nginx-keyring.gpg] https://packages.nginx.org/unit/ubuntu/ %s unit\n" "$(lsb_release -cs)" | tee /etc/apt/sources.list.d/unit.list
+ printf "deb-src [signed-by=/usr/share/keyrings/nginx-keyring.gpg] https://packages.nginx.org/unit/ubuntu/ %s unit\n" "$(lsb_release -cs)" | tee -a /etc/apt/sources.list.d/unit.list
+
+ apt update
+
+ return 0
+}
+
+installRedHat () {
+
+ echoDebug "Install on RedHat/CentOS/Oracle"
+
+ case "$osVersion" in
+ 6|6.*|7|7.*|8|8.*)
+ cat << __EOF__ > /etc/yum.repos.d/unit.repo
+[unit]
+name=unit repo
+baseurl=https://packages.nginx.org/unit/rhel/\$releasever/\$basearch/
+gpgcheck=0
+enabled=1
+__EOF__
+ ;;
+ *)
+ echo "Unsupported $osName version: $osVersion"
+ exit 1
+ ;;
+ esac
+
+ yum makecache
+
+ return 0
+}
+
+installAmazon () {
+
+ echoDebug "Install on Amazon"
+
+ case "$osVersion" in
+ 2)
+ cat << __EOF__ > /etc/yum.repos.d/unit.repo
+[unit]
+name=unit repo
+baseurl=https://packages.nginx.org/unit/amzn2/\$releasever/\$basearch/
+gpgcheck=0
+enabled=1
+__EOF__
+ ;;
+ *)
+ cat << __EOF__ > /etc/yum.repos.d/unit.repo
+[unit]
+name=unit repo
+baseurl=https://packages.nginx.org/unit/amzn/\$releasever/\$basearch/
+gpgcheck=0
+enabled=1
+__EOF__
+ ;;
+ esac
+
+ yum makecache
+
+ return 0
+}
+
+installFedora () {
+
+ echoDebug "Install on Fedora"
+
+ cat << __EOF__ > /etc/yum.repos.d/unit.repo
+[unit]
+name=unit repo
+baseurl=https://packages.nginx.org/unit/fedora/\$releasever/\$basearch/
+gpgcheck=0
+enabled=1
+__EOF__
+
+ dnf makecache
+
+ return 0
+}
+
+
+am_i_root() {
+
+ USERID=$(id -u)
+ if [ 0 -ne "$USERID" ]; then
+ echoErr "This script requires root privileges to run; now exiting."
+ exit 1
+ fi
+
+ return 0
+}
+
+echoErr () {
+
+ echo "$*" 1>&2;
+}
+
+echoDebug () {
+
+ if [ "$debug" -eq 1 ]; then
+ echo "$@" 1>&2;
+ fi
+}
+
+main() {
+debug=0 # If set to 1, debug message will be displayed
+
+checkOSPrereqs
+
+# The name and location of the files that will be used to get Linux
+# release info
+osRelease="/etc/os-release"
+
+os="" # Will be "linux" or "freebsd"
+osName="" # Will be "ubuntu", "debian", "rhel",
+ # "centos", "suse", "amzn", or "freebsd"
+osVersion=""
+
+am_i_root
+
+echo "This script will setup repositories for NGINX Unit"
+
+# Check the OS
+osNameVersion=$(getOS)
+if [ -z "$osNameVersion" ]; then
+ echoErr "Error getting the operating system information"
+ exit 1
+fi
+
+# Break out the OS, name, and version
+os=$(echo "$osNameVersion" | awk -F: '{print $1}')
+osName=$(echo "$osNameVersion" | awk -F: '{print $2}')
+osVersion=$(echo "$osNameVersion" | awk -F: '{print $3}')
+
+# Call the appropriate installation function
+case "$osName" in
+ debian)
+ installDebian
+ ;;
+ ubuntu)
+ installUbuntu
+ ;;
+ rhel)
+ installRedHat
+ ;;
+ centos)
+ installRedHat
+ ;;
+ ol)
+ installRedHat
+ ;;
+ amzn)
+ installAmazon
+ ;;
+ fedora)
+ installFedora
+ ;;
+ *)
+ echo "$osName is not supported"
+ exit 1
+ ;;
+esac
+
+echo
+echo "All done - NGINX Unit repositories for "$osName" "$osVersion" are set up"
+echo "Further steps: https://unit.nginx.org/installation/#official-packages"
+
+}
+
+main
+
+exit 0