You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hestiacp/install/hst-install.sh

148 lines
4.1 KiB

#!/bin/bash
# ======================================================== #
#
# Hestia Control Panel Installation Routine
# Automatic OS detection wrapper
# https://www.hestiacp.com/
#
# Currently Supported Operating Systems:
#
# Debian 10, 11
# Ubuntu 20.04, 22.04
# AlmaLinux, EuroLinux, Red Hat EnterPrise Linux, Rocky Linux 8, 9
#
# ======================================================== #
# Am I root?
if [ "x$(id -u)" != 'x0' ]; then
echo 'Error: this script can only be executed by root'
exit 1
fi
# Check admin user account
if [ ! -z "$(grep ^admin: /etc/passwd)" ] && [ -z "$1" ]; then
echo "Error: user admin exists"
echo
echo 'Please remove admin user before proceeding.'
echo 'If you want to do it automatically run installer with -f option:'
echo "Example: bash $0 --force"
exit 1
fi
# Check admin group
if [ ! -z "$(grep ^admin: /etc/group)" ] && [ -z "$1" ]; then
echo "Error: group admin exists"
echo
echo 'Please remove admin group before proceeding.'
echo 'If you want to do it automatically run installer with -f option:'
echo "Example: bash $0 --force"
exit 1
fi
# Detect OS
if [ -e "/etc/os-release" ] && [ ! -e "/etc/redhat-release" ]; then
type=$(grep "^ID=" /etc/os-release | cut -f 2 -d '=')
if [ "$type" = "ubuntu" ]; then
# Check if lsb_release is installed
if [ -e '/usr/bin/lsb_release' ]; then
release="$(lsb_release -s -r)"
VERSION='ubuntu'
else
echo "lsb_release is currently not installed, please install it:"
echo "apt-get update && apt-get install lsb-release"
exit 1
fi
elif [ "$type" = "debian" ]; then
release=$(cat /etc/debian_version | grep -o "[0-9]\{1,2\}" | head -n1)
VERSION='debian'
fi
elif [ -e "/etc/os-release" ] && [ -e "/etc/redhat-release" ]; then
type=$(grep "^ID=" /etc/os-release | cut -f 2 -d '"')
VERSION=$type
# TODO: Not sure if this required
if [[ "$type" =~ ^(rhel|almalinux|eurolinux|ol|rocky|centos|msvsphere)$ ]]; then
release=$(rpm --eval='%rhel')
fi
else
type="NoSupport"
fi
no_support_message() {
echo "****************************************************"
echo "Your operating system (OS) is not supported by"
echo "Hestia Control Panel. Officially supported releases:"
echo "****************************************************"
echo " Debian 10, 11"
echo " Ubuntu 20.04, 22.04 LTS"
# Commenting this out for now
echo " Red Hat Enterprise Linux 8, 9 and related versions of"
echo " AlmaLinux, Rocky Linux, Oracle Linux Server and EuroLinux"
echo ""
exit 1
}
if [ "$type" = "NoSupport" ]; then
no_support_message
fi
check_wget_curl() {
# Check wget
if [ -e '/usr/bin/wget' ]; then
if [ -e '/etc/redhat-release' ]; then
wget -q https://dev.brepo.ru/bayrepo/hestiacp/raw/branch/master/install/hst-install-rhel.sh -O hst-install-rhel.sh
if [ "$?" -eq '0' ]; then
bash hst-install-rhel.sh $*
exit
else
echo "Error: hst-install-rhel.sh download failed."
exit 1
fi
else
wget -q https://dev.brepo.ru/bayrepo/hestiacp/raw/branch/master/install/hst-install-$type.sh -O hst-install-$type.sh
if [ "$?" -eq '0' ]; then
bash hst-install-$type.sh $*
exit
else
echo "Error: hst-install-$type.sh download failed."
exit 1
fi
fi
fi
# Check curl
if [ -e '/usr/bin/curl' ]; then
if [ -e '/etc/redhat-release' ]; then
curl -s -O https://dev.brepo.ru/bayrepo/hestiacp/raw/branch/master/install/hst-install-rhel.sh
if [ "$?" -eq '0' ]; then
bash hst-install-rhel.sh $*
exit
else
echo "Error: hst-install-rhel.sh download failed."
exit 1
fi
else
curl -s -O https://dev.brepo.ru/bayrepo/hestiacp/raw/branch/master/install/hst-install-$type.sh
if [ "$?" -eq '0' ]; then
bash hst-install-$type.sh $*
exit
else
echo "Error: hst-install-$type.sh download failed."
exit 1
fi
fi
fi
}
# Check for supported operating system before proceeding with download
# of OS-specific installer, and throw error message if unsupported OS detected.
if [[ "$release" =~ ^(10|11|12|20.04|22.04)$ ]]; then
check_wget_curl $*
elif [[ -e "/etc/redhat-release" ]] && [[ "$release" =~ ^(8|9)$ ]]; then
check_wget_curl $*
else
no_support_message
fi
exit