#!/bin/bash # ------------------------------------------------------------------------------ # Loaders for conf and prepost functions # This file is part of the init.sh project # Copyright (c) 2019-2022 Geoffray Levasseur # ------------------------------------------------------------------------------ # This file is distributed under 3-clause BSD license. # The complete license agreement can be obtained at: # https://opensource.org/licenses/BSD-3-Clause # ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------ # Automatically load system specific configuration if file exist in the # following order: # 1) auto/arch.conf.sh # 2) auto/distro.conf.sh # 3) auto/distro-arch.conf.sh # 4) auto/distro-version.conf.sh # 5) auto/distro-codename.conf.sh (if sys_code defined) # 6) auto/distro-version-arch.conf.sh # 7) auto/distro-codename-arch.conf.sh (if sys_code defined) load_autoconf() { local prefix="$MYPATH/conf/auto" if [[ -e $prefix/$SYS_ARCH.conf.sh ]]; then . $prefix/$SYS_ARCH.conf.sh fi if [[ -e $prefix/$SYS_DIST.conf.sh ]]; then . $prefix/$SYS_DIST.conf.sh fi if [[ -e $prefix/$SYS_DIST-$SYS_ARCH.conf.sh ]]; then . $prefix/$SYS_DIST-$SYS_ARCH.conf.sh fi if [[ -e $prefix/$SYS_DIST-$SYS_VER.conf.sh ]]; then . $prefix/$SYS_DIST-$SYS_VER.conf.sh fi if [[ -n $SYS_CODE && -e $prefix/$SYS_DIST-$SYS_CODE.conf.sh ]]; then . $prefix/$SYS_DIST-$SYS_CODE.conf.sh fi if [[ -e $prefix/$SYS_DIST-$SYS_VER-$SYS_ARCH.conf.sh ]]; then . $prefix/$SYS_DIST-$SYS_VER-$SYS_ARCH.conf.sh fi if [[ -n $SYS_CODE && -e $prefix/$SYS_DIST-$SYS_CODE-$SYS_ARCH.conf.sh ]]; then . $prefix/$SYS_DIST-$SYS_CODE-$SYS_ARCH.conf.sh fi unset prefix } export -f load_autoconf # ------------------------------------------------------------------------------ # Load configuration with the following priorities: # 1) Those given on command line, if any # 2) /conf//.conf (Hostname based and specific) # 2) /conf/.conf (Hostname based and specific) # 3) /conf/init.conf.sh (Generic default, for testing) load_configuration() { # -------------------------------------------------------------------------- # Get list of possible files to load when REALM is not declared get_files() { for d in $MYPATH/conf/*; do if [[ -d $d ]]; then find $d -maxdepth 1 -name "$HOSTNAME.conf.sh" fi done } if [[ -n $CONFFILES ]]; then local f= for f in $CONFFILES; do prnt I "Loading $f manually specified." if [[ -s $f ]]; then . $f else prnt E "The $f file doesn't exists or is empty." die 6 --force fi done unset f else prnt I "Loading configuration..." if [[ -z $REALM ]]; then prnt W "REALM is undeclared, trying to scan configuration subdirectories for this host..." local found_realms=$(get_files) case "$(echo $found_realms | wc -w)" in "0") : # We do nothing as we'll check for other scenario ;; "1") export REALM="$(basename $(dirname $found_realms))" local auto_realm="$REALM" ;; *) prnt E "More than one file correspond to that host. This is ambigous and need to be fixed." prnt m "You can fix that situation with one of those actions:" prnt m "\t * Declare a REALM variable with the actual domain name of the host." prnt m "\t * Give manually the configuration file using the --file option." prnt m "\t * Configure the domain name of the host." die 20 --force ;; esac fi if [[ -e $MYPATH/conf/$REALM/$HOSTNAME.conf.sh ]]; then prnt I "A specific configuration will be used." local cnffile=$MYPATH/conf/$REALM/$HOSTNAME.conf.sh if [[ -n $auto_realm && $REALM != $auto_realm ]]; then prnt E "The domain name in the confinguration file don't correspond to the detected domain through directory structure." die 21 --force fi elif [[ -e $MYPATH/conf/$HOSTNAME.conf.sh ]]; then prnt I "A specific configuration will be used." local cnffile=$MYPATH/conf/$HOSTNAME.conf.sh else if [[ -e $MYPATH/conf/init.conf.sh ]]; then prnt I "A generic configuration will be used." local cnffile=$MYPATH/conf/init.conf.sh else prnt E "No configuration found, impossible to continue." die 6 --force fi fi prnt I "Loading $cnffile ..." . $cnffile fi } export -f load_configuration # ------------------------------------------------------------------------------ # Load pre and post actions for package manager load_prepost_actions() { local prepost= for prepost in $MYPATH/prepost.d/*.sh; do prnt I "Loading prepost actions in $prepost ..." . $prepost done unset prepost } export -f load_prepost_actions # EOF