Ernesto Nicolás Carrea 5 years ago
parent
commit
a36403e678
4 changed files with 302 additions and 0 deletions
  1. 65 0
      func/osal.sh
  2. 5 0
      func/osal_centos_7.sh
  3. 115 0
      func/osal_debian_based.sh
  4. 117 0
      func/osal_rhel_based.sh

+ 65 - 0
func/osal.sh

@@ -0,0 +1,65 @@
+#!/bin/sh
+
+# Identifies OS type and variant
+# Setups variables and provides OS-agnostic wrapper functions
+
+OS_TYPE=$(grep "^ID=" /etc/os-release | cut -f 2 -d '=' | sed -e 's/^"//' -e 's/"$//')
+case "$OS_TYPE" in
+debian|Debian)
+    OS_BASE='debian'
+    OS_VERSION=$(cat /etc/debian_version|grep -o "[0-9]\{1,2\}"|head -n1)
+    ;;
+ubuntu|Ubuntu)
+    OS_BASE='debian'
+    OS_VERSION="$(lsb_release -s -r)"
+    ;;
+centos|CentOS|rhel|RHEL|fedora|Fedora|RedHat)
+    OS_BASE='rhel'
+    OS_VERSION=$(cat /etc/os-release | grep VERSION_ID | sed -e "s/VERSION_ID=//" | sed -e 's/^"//' -e 's/"$//')
+    ;;
+*)
+    OS_BASE='unknown'
+    ;;
+esac
+
+OSAL_PATH="$(cd "$(dirname "$BASH_SOURCE")" >/dev/null 2>&1 ; pwd -P)"
+
+for OSAL_FILE in "osal_${OS_BASE}_based" \
+                 "osal_${OS_TYPE}" \
+                 "osal_${OS_TYPE}_${OS_VERSION}"
+do
+    # Search for OS specific OSAL file and source it
+    if [ -f "$OSAL_PATH/${OSAL_FILE}.sh" ]; then
+        source "$OSAL_PATH/${OSAL_FILE}.sh"
+    fi
+done
+
+# VAR = $(ini_get 'file' 'section' 'param' 'newvalue')
+ini_get() {
+    /usr/bin/crudini --get "$@"
+}
+
+# ini_set 'file' 'section' 'param' 'newvalue'
+ini_set() {
+    /usr/bin/crudini --set "$@"
+}
+
+execute_with_spinner() {
+    if [ "$OSAL_DEBUG" ]; then
+        echo "$@"
+        $@
+    else
+        $@ > /dev/null 2>&1 &
+        BACK_PID=$!
+
+        spinner="/-\|"
+        spin_i=1
+        while kill -0 $BACK_PID > /dev/null 2>&1 ; do
+            printf "\b${spinner:spin_i++%${#spinner}:1}"
+            sleep 0.5
+        done
+
+        # Do a blank echo to get the \n back
+        echo
+    fi
+}

+ 5 - 0
func/osal_centos_7.sh

@@ -0,0 +1,5 @@
+#!/bin/sh
+# CentOS 7 specific
+
+# Commands
+CMD_PACKAGE_MANAGER=/usr/bin/yum

+ 115 - 0
func/osal_debian_based.sh

@@ -0,0 +1,115 @@
+#!/bin/sh
+# Debian / Ubuntu
+
+#-------------------------------------------------------------------#
+# Variables                                                         #
+#-------------------------------------------------------------------#
+
+# Services
+SERVICE_NAME_APACHE=apache2
+SERVICE_NAME_BIND=bind9
+SERVICE_NAME_CRON=cron
+
+# Users
+USER_APACHE_DATA=www-data
+USER_BIND=bind
+USER_NOBODY=nobody
+USER_NOGROUP=nogroup
+
+# Commands
+CMD_PACKAGE_MANAGER=/usr/bin/apt-get
+
+# Packages
+PKG_APACHE=apache2
+PKG_APACHE_MOD_RUID2=libapache2-mod-ruid2
+PKG_BIND=bind9
+PKG_EXIM=exim4
+PKG_PHPMYADMIN=phpmyadmin
+PKG_ROUNDCUBE=roundcube
+
+# Paths
+PATH_BIND_DATA=/var/cache/bind
+PATH_ROUNDCUBE_INSTALL_MYSQL=/usr/share/dbconfig-common/data/roundcubemail/install/mysql
+
+#-------------------------------------------------------------------#
+# Functions                                                         #
+#-------------------------------------------------------------------#
+
+# OS function wrappers
+
+# package_preinstall
+package_preinstall() {
+    $CMD_PACKAGE_MANAGER -qq update
+}
+
+# package_install 'package' 'package' ...
+package_install() {
+    $CMD_PACKAGE_MANAGER -y -qq install -o Dpkg::Options::="--force-confold" "$@"
+}
+
+# package_remoev 'package' 'package' ...
+package_remove() {
+    $CMD_PACKAGE_MANAGER -y purge "$@"
+}
+
+# service_start 'service-name'
+service_start() {
+    /usr/bin/systemctl start ${1}.service
+}
+
+# service_stop 'service-name'
+service_stop() {
+    /usr/bin/systemctl stop ${1}.service
+}
+
+# service_restart 'service-name'
+service_restart() {
+    /usr/bin/systemctl restart ${1}.service
+}
+
+# service_enable 'service-name'
+service_enable() {
+    /usr/bin/systemctl enable ${1}.service
+}
+
+# service_disable 'service-name'
+service_disable() {
+    /usr/bin/systemctl disable ${1}.service
+}
+
+# Software-specific
+
+# apache_module_isenabled 'module_name' = (1|null)
+apache_module_isenabled() {
+    /usr/sbin/a2query -q -m $1 && echo 1
+}
+
+# apache_module_enable 'module_name'
+apache_module_enable() {
+    /usr/sbin/a2enmod $1
+}
+
+# apache_module_disable 'module_name'
+apache_module_disable() {
+    /usr/sbin/a2dismod $1
+}
+
+# multiphp_php_package_prefix 7.3 = 'php7.3'
+multiphp_php_package_prefix() {
+    echo "php${1}"
+}
+
+# multiphp_fpm_isinstalled 7.3 = (1|null)
+multiphp_fpm_isinstalled() {
+    [ -f "/etc/init.d/php$1-fpm" ] && echo 1
+}
+
+# multiphp_etc_folder '7.3' = /etc/php/7.3
+multiphp_etc_folder() {
+    echo /etc/php/php${1}
+}
+
+# multiphp_fpm_pool_d '7.3' = /etc/php/7.3/fpm/pool.d
+multiphp_fpm_pool_d() {
+    echo /etc/php/$1/fpm/pool.d
+}

+ 117 - 0
func/osal_rhel_based.sh

@@ -0,0 +1,117 @@
+#!/bin/sh
+# RHEL / CentOS / Fedora
+
+#-------------------------------------------------------------------#
+# Variables                                                         #
+#-------------------------------------------------------------------#
+
+# Services
+SERVICE_NAME_APACHE=httpd
+SERVICE_NAME_BIND=named
+SERVICE_NAME_CRON=crond
+
+# Users
+USER_APACHE_DATA=apache
+USER_BIND=named
+USER_NOBODY=nobody
+USER_NOGROUP=nobody
+
+# Commands
+CMD_PACKAGE_MANAGER=/usr/bin/dnf
+
+# Packages
+PKG_APACHE=httpd
+PKG_APACHE_MOD_RUID2=mod_ruid2
+PKG_BIND=bind
+PKG_EXIM=exim
+PKG_PHPMYADMIN=phpMyAdmin
+PKG_ROUNDCUBE=roundcubemail
+
+# Paths
+PATH_BIND_DATA=/var/named
+PATH_ROUNDCUBE_INSTALL_MYSQL=/usr/share/roundcubemail/SQL/mysql
+
+#-------------------------------------------------------------------#
+# Functions                                                         #
+#-------------------------------------------------------------------#
+
+# OS function wrappers
+
+# package_preinstall
+package_preinstall() {
+    true    # Do nothing (on Debian: apt-get update)
+}
+
+# package_install 'package' 'package' ...
+package_install() {
+    $CMD_PACKAGE_MANAGER -q -y install "$@"
+}
+
+# package_remoev 'package' 'package' ...
+package_remove() {
+    $CMD_PACKAGE_MANAGER -y remove "$@"
+}
+
+# service_start 'service-name'
+service_start() {
+    /usr/bin/systemctl start ${1}.service
+}
+
+# service_stop 'service-name'
+service_stop() {
+    /usr/bin/systemctl stop ${1}.service
+}
+
+# service_restart 'service-name'
+service_restart() {
+    /usr/bin/systemctl restart ${1}.service
+}
+
+# service_enable 'service-name'
+service_enable() {
+    /usr/bin/systemctl enable ${1}.service
+}
+
+# service_disable 'service-name'
+service_disable() {
+    /usr/bin/systemctl disable ${1}.service
+}
+
+# Software-specific
+
+# apache_module_isenabled 'module_name' = (1|null)
+apache_module_isenabled() {
+    mod_enabled=$(/usr/sbin/httpd -M | grep $1)
+    [ "$mod_enabled" ] && echo 1
+}
+
+# apache_module_enable 'module_name'
+apache_module_enable() {
+    /usr/bin/sed -i "/LoadModule ${1}_module/ s/#*//" /etc/httpd/conf.modules.d/*.conf
+}
+
+# apache_module_disable 'module_name'
+apache_module_disable() {
+    /usr/bin/sed -i "/LoadModule ${1}_module/ s/^/#/" /etc/httpd/conf.modules.d/*.conf
+}
+
+# multiphp_php_package_prefix 7.3 = 'php73-php'
+multiphp_php_package_prefix() {
+    echo php${1//.}-php
+}
+
+# multiphp_fpm_isinstalled 7.3 = (1|null)
+multiphp_fpm_isinstalled() {
+    php_prefix=$(multiphp_php_package_prefix $1)
+    rpm -q --quiet ${php_prefix}-fpm && echo 1
+}
+
+# multiphp_etc_folder '7.3' = /etc/opt/remi/php73
+multiphp_etc_folder() {
+    echo /etc/opt/remi/php${1//.}
+}
+
+# multiphp_fpm_pool_d '7.3' = /etc/php/7.3/fpm/pool.d
+multiphp_fpm_pool_d() {
+    echo /etc/opt/remi/php${1//.}/php-fpm.d
+}