#!/bin/bash
#
# IceWarp Server
# Copyright (c) 2008-2025 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_POPPLER_PACKAGE=("poppler-utils" "poppler-data")
PLATFORM_FFMPEG_PACKAGE="ffmpeg"
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_VERSION_CHECK_PACKAGES=("curl")

# Required dependencies - list cannot be empty
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]="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]="libdl.so.2"
PLATFORM_PACKAGES64[$IDX]="glibc"
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]="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]="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]="libicui18n.so.60"
PLATFORM_PACKAGES64[$IDX]="libicu"
IDX=$((${IDX}+1))
PLATFORM_DEPENDENCIES64[$IDX]="libicuio.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]="libpam.so.0"
PLATFORM_PACKAGES64[$IDX]="pam"
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]="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]="libXpm.so.4"
PLATFORM_PACKAGES64[$IDX]="libXpm"
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()
{
    if [ "${OPT_CHECK_FFMPEG}" != "1" ]; then
        PLATFORM_FFMPEG_PACKAGE=""
        return 0
    fi

    local INSTALL=false

    if ! dnf repolist | grep -q "rpmfusion"; then
        warn "For local generation of video thumbnails is required ffmpeg, which is available in RPM fusion repository."

        if [ $OPT_AUTO == "1" ]; then
            good "Automatic installation mode - enabling RPM fusion repository"
            INSTALL=true
        else
            ask_with_confirmation "Do you want to enable RPM fusion repository?" "Y" "n"
            if [ $? -eq 1 ]; then
                INSTALL=true
            fi
        fi
        if $INSTALL; then
            dnf config-manager --set-enabled powertools
            if [ $? -ne 0 ]; then
                dnf install -y 'dnf-command(config-manager)'
                dnf config-manager --set-enabled powertools
            fi
            platform_install_packages "1" "https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm"
        fi
    fi

    if ! dnf repolist | grep -q "rpmfusion"; then
        PLATFORM_FFMPEG_PACKAGE=""
    fi

    return 0
}

# 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
}

# Get path of ca-bundle.crt
# Value is returned in PLATFORM_RESULT
platform_ca_bundle_path()
{
    PLATFORM_RESULT="/etc/pki/tls/certs/ca-bundle.crt"
    return 0
}

# Get package that will install ca-bundle.crt
# Value is returned in PLATFORM_RESULT
platform_ca_bundle_package()
{
    PLATFORM_RESULT="ca-certificates"
    return 0
}
