Downloaded from <https://unit.nginx.org/_downloads/setup-unit.sh>. Acked-by: Artem Konev <a.konev@f5.com> Acked-by: Konstantin Pavlov <thresh@nginx.com> Signed-off-by: Alejandro Colomar <alx@nginx.com>
312 lines
7.7 KiB
Bash
Executable File
312 lines
7.7 KiB
Bash
Executable File
#!/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
|