#!/bin/bash
#
# IceWarp Server
# Copyright (c) 2008-2022 IceWarp Ltd. All rights reserved.
#
# http://www.icewarp.com
#
# file: platform-RHEL6-x86_64 - platform specific definitions for RedHat 6, 32bit IceWarp
#

# Platform ID
PLATFORM_OSDIST=( "RHEL" )
PLATFORM_DISTRO_IDS=( "REDHATENTERPRISELINUX" "CENTOSLINUX" "CENTOSSTREAM" "ROCKYLINUX" "ALMALINUX")
PLATFORM_VERSIONS=( 8 )
PLATFORM_HW_PLATFORMS=( "x86_64" )

PLATFORM_NAME="RedHat Enterprise Server, CentOS, Rocky Linux or Alma Linux 8.x x86_64"
PLATFORM_SERVICE_MANAGEMENT_TOOL_NAME="chkconfig"

PLATFORM_RESULT=""

PLATFORM_JAVA_PACKAGE_NAME="java-1.8.0-openjdk"
PLATFORM_JAVA_NAME="OpenJDK JRE 8"

PLATFORM_POPPLER_PACKAGE=("poppler-utils" "poppler-data")
PLATFORM_LAME_PACKAGE=""
PLATFORM_TRUETYPE_FONTS=("dejavu-fonts-common" "dejavu-sans-fonts" "dejavu-sans-mono-fonts" "dejavu-serif-fonts" "google-crosextra-carlito-fonts" "liberation-fonts-common" "liberation-mono-fonts" "liberation-sans-fonts" "liberation-serif-fonts" "libreoffice-opensymbol-fonts")

PLATFORM_WEBDOCUMENTS_HTML_PREVIEW_ENABLED="0"
PLATFORM_WEBDOCUMENTS_HTML_PREVIEW_PACKAGES=()

PLATFORM_WEBDOCUMENTS_VERSION_CHECK_PACKAGES=("curl")

# Required dependencies - list cannot be empty
IDX=1
PLATFORM_DEPENDENCIES64[$IDX]="libX11-xcb.so.1"
PLATFORM_PACKAGES64[$IDX]="libX11-xcb"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libX11.so.6"
PLATFORM_PACKAGES64[$IDX]="libX11"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libXcomposite.so.1"
PLATFORM_PACKAGES64[$IDX]="libXcomposite"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libXcursor.so.1"
PLATFORM_PACKAGES64[$IDX]="libXcursor"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libXdamage.so.1"
PLATFORM_PACKAGES64[$IDX]="libXdamage"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libXext.so.6"
PLATFORM_PACKAGES64[$IDX]="libXdamage"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libXfixes.so.3"
PLATFORM_PACKAGES64[$IDX]="libXfixes"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libXi.so.6"
PLATFORM_PACKAGES64[$IDX]="libXi"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libXrandr.so.2"
PLATFORM_PACKAGES64[$IDX]="libXrandr"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libXrender.so.1"
PLATFORM_PACKAGES64[$IDX]="libXrender"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libXss.so.1"
PLATFORM_PACKAGES64[$IDX]="libXScrnSaver"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libXtst.so.6"
PLATFORM_PACKAGES64[$IDX]="libXtst"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libasound.so.2"
PLATFORM_PACKAGES64[$IDX]="alsa-lib"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libatk-1.0.so.0"
PLATFORM_PACKAGES64[$IDX]="atk"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libbz2.so.1"
PLATFORM_PACKAGES64[$IDX]="bzip2-libs"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libc.so.6"
PLATFORM_PACKAGES64[$IDX]="glibc"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libcairo.so.2"
PLATFORM_PACKAGES64[$IDX]="cairo"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libcap.so.2"
PLATFORM_PACKAGES64[$IDX]="libcap"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libcrypt.so.1"
PLATFORM_PACKAGES64[$IDX]="libxcrypt"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libcups.so.2"
PLATFORM_PACKAGES64[$IDX]="cups-libs"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libdbus-1.so.3"
PLATFORM_PACKAGES64[$IDX]="dbus-libs"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libdl.so.2"
PLATFORM_PACKAGES64[$IDX]="glibc"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libexpat.so.1"
PLATFORM_PACKAGES64[$IDX]="expat"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libfontconfig.so.1"
PLATFORM_PACKAGES64[$IDX]="fontconfig"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libgcc_s.so.1"
PLATFORM_PACKAGES64[$IDX]="libgcc"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libgconf-2.so.4"
PLATFORM_PACKAGES64[$IDX]="GConf2"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libgd.so.3"
PLATFORM_PACKAGES64[$IDX]="gd"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libgdk-x11-2.0.so.0"
PLATFORM_PACKAGES64[$IDX]="gtk2"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libgdk_pixbuf-2.0.so.0"
PLATFORM_PACKAGES64[$IDX]="gdk-pixbuf2"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libgio-2.0.so.0"
PLATFORM_PACKAGES64[$IDX]="glib2"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libglib-2.0.so.0"
PLATFORM_PACKAGES64[$IDX]="glib2"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libgmodule-2.0.so.0"
PLATFORM_PACKAGES64[$IDX]="glib2"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libgnutls.so.30"
PLATFORM_PACKAGES64[$IDX]="gnutls"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libgobject-2.0.so.0"
PLATFORM_PACKAGES64[$IDX]="glib2"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libgthread-2.0.so.0"
PLATFORM_PACKAGES64[$IDX]="glib2"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libgtk-x11-2.0.so.0"
PLATFORM_PACKAGES64[$IDX]="gtk2"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libhunspell-1.6.so.0"
PLATFORM_PACKAGES64[$IDX]="hunspell"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libicudata.so.60"
PLATFORM_PACKAGES64[$IDX]="libicu"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libicuuc.so.60"
PLATFORM_PACKAGES64[$IDX]="libicu"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libidn.so.11"
PLATFORM_PACKAGES64[$IDX]="libidn"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libjpeg.so.62"
PLATFORM_PACKAGES64[$IDX]="libjpeg-turbo"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libjson-glib-1.0.so.0"
PLATFORM_PACKAGES64[$IDX]="json-glib"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="liblzma.so.5"
PLATFORM_PACKAGES64[$IDX]="xz-libs"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libm.so.6"
PLATFORM_PACKAGES64[$IDX]="glibc"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libmariadb.so.3"
PLATFORM_PACKAGES64[$IDX]="mariadb-connector-c"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libmp3lame.so.0"
PLATFORM_PACKAGES64[$IDX]="lame-libs"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libnspr4.so"
PLATFORM_PACKAGES64[$IDX]="nspr"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libnss3.so"
PLATFORM_PACKAGES64[$IDX]="nss"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libnssutil3.so"
PLATFORM_PACKAGES64[$IDX]="nss-util"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libpam.so.0"
PLATFORM_PACKAGES64[$IDX]="pam"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libpango-1.0.so.0"
PLATFORM_PACKAGES64[$IDX]="pango"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libpangocairo-1.0.so.0"
PLATFORM_PACKAGES64[$IDX]="pango"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libpcre.so.1"
PLATFORM_PACKAGES64[$IDX]="pcre"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libpng16.so.16"
PLATFORM_PACKAGES64[$IDX]="libpng"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libpthread.so.0"
PLATFORM_PACKAGES64[$IDX]="glibc"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libresolv.so.2"
PLATFORM_PACKAGES64[$IDX]="glibc"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="librt.so.1"
PLATFORM_PACKAGES64[$IDX]="glibc"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libsasl2.so.3"
PLATFORM_PACKAGES64[$IDX]="cyrus-sasl-lib"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libsmime3.so"
PLATFORM_PACKAGES64[$IDX]="nss"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libstdc++.so.6"
PLATFORM_PACKAGES64[$IDX]="libstdc++"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libuuid.so.1"
PLATFORM_PACKAGES64[$IDX]="libuuid"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libxcb.so.1"
PLATFORM_PACKAGES64[$IDX]="libxcb"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libxml2.so.2"
PLATFORM_PACKAGES64[$IDX]="libxml2"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libz.so.1"
PLATFORM_PACKAGES64[$IDX]="zlib"

# Mundi dependencies list
IDX=1
PLATFORM_MUNDI_PROGRAMS[$IDX]="pdfimages"           # Program name
PLATFORM_MUNDI_PROGRAMCHECKS[$IDX]="pdfimages -v"   # What to execute to check for program
PLATFORM_MUNDI_CHECKRESULTS[$IDX]=0                 # Return value on program presence
PLATFORM_MUNDI_PACKAGES[$IDX]="poppler-utils"       # Package to install the program
PLATFORM_MUNDI_EXTRAREPO[$IDX]=false                # If can be installed only when platform_check_mundi_extra_repo_enabled return true
IDX=$((${IDX}+1))
PLATFORM_MUNDI_PROGRAMS[$IDX]="pdffonts"
PLATFORM_MUNDI_PROGRAMCHECKS[$IDX]="pdffonts -v"
PLATFORM_MUNDI_CHECKRESULTS[$IDX]=0
PLATFORM_MUNDI_PACKAGES[$IDX]="poppler-utils"
PLATFORM_MUNDI_EXTRAREPO[$IDX]=false
IDX=$((${IDX}+1))
PLATFORM_MUNDI_PROGRAMS[$IDX]="pdfinfo"
PLATFORM_MUNDI_PROGRAMCHECKS[$IDX]="pdfinfo -v"
PLATFORM_MUNDI_CHECKRESULTS[$IDX]=0
PLATFORM_MUNDI_PACKAGES[$IDX]="poppler-utils"
PLATFORM_MUNDI_EXTRAREPO[$IDX]=false
IDX=$((${IDX}+1))
PLATFORM_MUNDI_PROGRAMS[$IDX]="pdftotext"
PLATFORM_MUNDI_PROGRAMCHECKS[$IDX]="pdftotext -v"
PLATFORM_MUNDI_CHECKRESULTS[$IDX]=0
PLATFORM_MUNDI_PACKAGES[$IDX]="poppler-utils"
PLATFORM_MUNDI_EXTRAREPO[$IDX]=false
IDX=$((${IDX}+1))
PLATFORM_MUNDI_PROGRAMS[$IDX]="tidy"
PLATFORM_MUNDI_PROGRAMCHECKS[$IDX]="tidy -v"
PLATFORM_MUNDI_CHECKRESULTS[$IDX]=0
PLATFORM_MUNDI_PACKAGES[$IDX]="tidy"
PLATFORM_MUNDI_EXTRAREPO[$IDX]=true
IDX=$((${IDX}+1))
PLATFORM_MUNDI_PROGRAMS[$IDX]="7z"
PLATFORM_MUNDI_PROGRAMCHECKS[$IDX]="7z"
PLATFORM_MUNDI_CHECKRESULTS[$IDX]=0
PLATFORM_MUNDI_PACKAGES[$IDX]="p7zip-plugins"
PLATFORM_MUNDI_EXTRAREPO[$IDX]=true
IDX=$((${IDX}+1))

# Install given packages to system
# Param: "0" - ask user, "1" - force install
# Param: List of packages, max. length 20
platform_install_packages()
{
    FORCE=$1
    shift
    if [ "${FORCE}" == "1" ]; then
        FORCE="-y"
    else
        FORCE=""
    fi
    
    if [ -z "$NON_INTERACTIVE" ]; then
        dnf ${FORCE} install $@ >/dev/tty 2>&1
    else
        dnf ${FORCE} install $@
    fi
}

# Install given package from disk to system
# Param: Package name
platform_install_local_package()
{
    if [ -z "$NON_INTERACTIVE" ]; then
        dnf install $@ >/dev/tty 2>&1
    else
        dnf install $@
    fi
}
#If $? == "1", package is not installed
platform_is_package_installed()
{
    rpm -q "$@" &>/dev/null
}

# Do some platform specific checks, returns false -> script ends
platform_do_specific_checks()
{
    :
}

# Emits warning on RHEL servers, that libreoffice is available only in optional repo
platform_warn_about_rhel_repos()
{
    :
}

# Get distribution ID, that will match one of the values in PLATFORM_DISTRO_IDS
# Value is returned in PLATFORM_RESULT
# Function result: true, when distro id was obtained
platform_get_distro_id()
{
    PLATFORM_RESULT=""
    if [ -f "/etc/centos-release" ]; then
        PLATFORM_FILE="/etc/centos-release"
    elif [ -f "/etc/redhat-release" ]; then
        PLATFORM_FILE="/etc/redhat-release"
    elif [ -f "/etc/rocky-release" ]; then
        PLATFORM_FILE="/etc/rocky-release"
    elif [ -f "/etc/almalinux-release" ]; then
        PLATFORM_FILE="/etc/almalinux-release"
    else
        return 1
    fi
    
    PLATFORM_RESULT=$(cat "${PLATFORM_FILE}" | sed 's/ release.*//' | sed 's/ //g' | tr 'a-z' 'A-Z')
    return 0
}

# Get distribution major version
# Value is returned in PLATFORM_RESULT
# Function result: true, when distro version was obtained
platform_get_distro_major_version()
{
    PLATFORM_RESULT=""
    if [ -f "/etc/centos-release" ]; then
        PLATFORM_FILE="/etc/centos-release"
    elif [ -f "/etc/redhat-release" ]; then
        PLATFORM_FILE="/etc/redhat-release"
    elif [ -f "/etc/rocky-release" ]; then
        PLATFORM_FILE="/etc/rocky-release"
    elif [ -f "/etc/almalinux-release" ]; then
        PLATFORM_FILE="/etc/almalinux-release"
    else
        return 1
    fi
    
    PLATFORM_RESULT=$(cat "${PLATFORM_FILE}" | sed 's/.*release //' | sed 's/\..*//')
    return 0
}

# Get "bitness" of platform
platform_get_hw_platform()
{
    PLATFORM_RESULT=$(uname -m)
    return 0
}

# Check if service management tool is installed
platform_check_service_management_tool()
{
    chkconfig &> /dev/null
    if [ $? -ne 0 ]; then
        chkconfig --version &> /dev/null
        if [ $? -ne 0 ]; then            
            return 1
        fi
    fi
    
    return 0
}

platform_is_install_service_management_tool_supported()
{
    return 0
}

# Install platform service management tool
platform_install_service_management_tool()
{
    return 0
}

platform_install_unzip()
{
    platform_install_packages "$1" "unzip"
}

# Functions checking yoda requirements
platform_check_service()
{
    service --version >/dev/null 2>&1
}

platform_install_service()
{
    platform_install_packages "$1" "initscripts"
}

# Add service to system
platform_add_service()
{
    chkconfig --add "$1" > /dev/null
}

# Remove service from system
platform_remove_service()
{
    chkconfig --del "$1" > /dev/null
}

platform_check_mundi_extra_repo_enabled()
{
    dnf repolist 2>/dev/null | grep -q epel
}
