diff --git a/detectOS.sh b/detectOS.sh new file mode 100644 index 0000000..5ca28d0 --- /dev/null +++ b/detectOS.sh @@ -0,0 +1,163 @@ +#!/bin/bash -e + +function detect_OS_ARCH_VER_BITS { + ARCH=$(uname -m | sed 's/x86_//;s/i[3-6]86/32/') + + if [ -f /etc/lsb-release ]; then + . /etc/lsb-release + fi + + if ! [ "$DISTRIB_ID" = "" ]; then + OS=$DISTRIB_ID + VER=$DISTRIB_RELEASE + elif [ -f /etc/debian_version ]; then + OS=Debian # XXX or Ubuntu?? + VER=$(cat /etc/debian_version) + SVER=$( grep -oP "[0-9]+" /etc/debian_version | head -1 ) + elif [ -f /etc/fedora-release ]; then + OS=Fedora + VER=$( grep -oP "[0-9]+" /etc/fedora-release | head -1 ) + elif [ -f /etc/os-release ]; then + . /etc/os-release + if [ "$NAME" = "" ]; then + OS=$(uname -s) + VER=$(uname -r) + else + OS=$NAME + VER=$VERSION_ID + fi + else + OS=$(uname -s) + VER=$(uname -r) + fi + case $(uname -m) in + x86_64) + BITS=64 + ;; + i*86) + BITS=32 + ;; + armv*) + BITS=32 + ;; + *) + BITS=? + ;; + esac + case $(uname -m) in + x86_64) + ARCH=x64 # or AMD64 or Intel64 or whatever + ;; + i*86) + ARCH=x86 # or IA32 or Intel32 or whatever + ;; + *) + # leave ARCH as-is + ;; + esac +} + +function RM_SCRIPTS { + rm -f e-prereq.sh + rm -f detectOS.sh +} + +declare OS ARCH VER BITS + +detect_OS_ARCH_VER_BITS + +export OS ARCH VER BITS + +if [ "$BITS" = 32 ]; then + echo -e "Your system architecture is $ARCH which is unsupported to run Microsoft .NET Core SDK. \nYour OS: $OS \nOS Version: $VER" + echo + printf "\e[1;31mPlease check the EllieBot self-hosting guide for alternatives.\e[0m\n" + rm n-prereq.sh + exit 1 +fi + +declare OS ARCH VER BITS + +detect_OS_ARCH_VER_BITS + +export OS ARCH VER BITS + +if [ "$OS" = "Ubuntu" ]; then + supported_ver=("20.04" "22.04" "24.04") + + if [[ "${supported_ver[*]}" =~ ${VER} ]]; then + supported=1 + else + supported=0 + fi +fi + +if [ "$OS" = "LinuxMint" ]; then + SVER=$( echo "$VER" | grep -oP "[0-9]+" | head -1 ) + supported_ver=("19" "20" "21") + + if [[ "${supported_ver[*]}" =~ ${SVER} ]]; then + supported=1 + else + supported=0 + fi +fi + +if [ "$OS" = "openSUSE Leap" ]; then + supported_ver=("15.5" "15.6") + + if [[ "${supported_ver[*]}" =~ ${VER} ]]; then + supported=1 + else + supported=0 + fi +fi + +if [ "$OS" = "AlmaLinux" ] || [ "$OS" = "Rocky Linux" ]; then + SVER=$( echo "$VER" | grep -oP "[0-9]+" | head -1 ) + supported_ver=("8" "9") + + if [[ "${supported_ver[*]}" =~ ${SVER} ]]; then + supported=1 + else + supported=0 + fi +fi + +if [ "$OS" = "Fedora" ]; then + supported_ver=("38" "39" "40" "41" "42") + + if [[ "${supported_ver[*]}" =~ ${VER} ]]; then + supported=1 + else + supported=0 + fi +fi + +if [ "$supported" = 0 ]; then + { + echo "Your OS $OS $VER $ARCH looks unsupported to run Microsoft .NET Core." + echo "Exiting..." + echo -e "\e[1;31mContact EllieBot's support on Discord with screenshot.\e[0m\n" + } >&2 + RM_SCRIPTS + exit 1 +fi + +if [ "$OS" = "Linux" ]; then + { + echo "Your OS $OS $VER $ARCH probably can run Microsoft .NET Core." + echo "Exiting..." + echo "Contact EllieBot's support on Discord with screenshot." + } >&2 + RM_SCRIPTS + exit 1 +fi + +echo "$OS" +echo "$VER" +echo "$ARCH" +echo "$SVER" + +RM_SCRIPTS +exit 0