diff --git a/build/hpux/hc_hpux_platform/hc_hpux_platform.psf b/build/hpux/hc_hpux_platform/hc_hpux_platform.psf index 4c9f83c..c0888d6 100644 --- a/build/hpux/hc_hpux_platform/hc_hpux_platform.psf +++ b/build/hpux/hc_hpux_platform/hc_hpux_platform.psf @@ -61,7 +61,7 @@ This is the OS/platform plugin package" directory ../../sources/lib/platform/hp-ux=/opt/hc/lib/platform/hp-ux file -m 755 check_hpux_autopath.sh file -m 755 check_hpux_cdsf_cluster.sh - file -m 755 check_hpux_drd_status.sh + file -m 755 check_hpux_drd_status.sh file -m 755 check_hpux_file_age.sh file -m 755 check_hpux_file_change.sh file -m 755 check_hpux_fs_mounts.sh @@ -72,7 +72,8 @@ This is the OS/platform plugin package" file -m 644 check_hpux_hpvm_vpar_status.sh file -m 755 check_hpux_httpd_status.sh file -m 755 check_hpux_kernel_params.sh - file -m 755 check_hpux_kernel_usage.sh + file -m 755 check_hpux_kernel_usage.sh + file -m 755 check_hpux_lunpaths.sh file -m 755 check_hpux_named_status.sh file -m 755 check_hpux_ntp_status.sh file -m 755 check_hpux_patch_version.sh diff --git a/configs/etc/check_hpux_patch_version.conf.dist b/configs/etc/check_hpux_patch_version.conf.dist index 47cb0f5..d4c2aec 100644 --- a/configs/etc/check_hpux_patch_version.conf.dist +++ b/configs/etc/check_hpux_patch_version.conf.dist @@ -6,6 +6,11 @@ # [default: indicates hardcoded script values if no value is defined here] #****************************************************************************** +# specify whether to also log passed health checks +# (warning: this may rapidly grow the HC log) +# [default: no] +log_healthy=yes + # OE version that should be checked (version string as displayed by 'swlist') # [default: none] required_oe="" @@ -14,7 +19,11 @@ required_oe="" # [default: none] required_patches="" +# check that all installed filesets are configured? +# [default: yes] +check_filesets=yes + #****************************************************************************** # End of FILE -#****************************************************************************** \ No newline at end of file +#****************************************************************************** diff --git a/sources/lib/platform/aix/check_aix_file_change.sh b/sources/lib/platform/aix/check_aix_file_change.sh index e75108c..888698e 100644 --- a/sources/lib/platform/aix/check_aix_file_change.sh +++ b/sources/lib/platform/aix/check_aix_file_change.sh @@ -65,6 +65,11 @@ typeset _TMP_EXCL_FILE="${TMP_DIR}/.$0.tmp_excl.$$" set -o noglob # no file globbing # set local trap for clean-up +trap "[[ -f ${_TMP1_FILE} ]] && rm -f ${_TMP1_FILE} >/dev/null 2>&1; + [[ -f ${_TMP2_FILE} ]] && rm -f ${_TMP2_FILE} >/dev/null 2>&1; + [[ -f ${_TMP_INCL_FILE} ]] && rm -f ${_TMP_INCL_FILE} >/dev/null 2>&1; + [[ -f ${_TMP_EXCL_FILE} ]] && rm -f ${_TMP_EXCL_FILE} >/dev/null 2>&1; + return 0" 0 trap "[[ -f ${_TMP1_FILE} ]] && rm -f ${_TMP1_FILE} >/dev/null 2>&1; [[ -f ${_TMP2_FILE} ]] && rm -f ${_TMP2_FILE} >/dev/null 2>&1; [[ -f ${_TMP_INCL_FILE} ]] && rm -f ${_TMP_INCL_FILE} >/dev/null 2>&1; diff --git a/sources/lib/platform/hp-ux/check_hpux_cdsf_cluster.sh b/sources/lib/platform/hp-ux/check_hpux_cdsf_cluster.sh index 3121a2a..c125fc0 100644 --- a/sources/lib/platform/hp-ux/check_hpux_cdsf_cluster.sh +++ b/sources/lib/platform/hp-ux/check_hpux_cdsf_cluster.sh @@ -97,7 +97,7 @@ then log_hc "$0" 1 "cDSF conflict found for ${_CDSF_DEV}" done else - if (( _LOG_HEALTHY > 0)) + if (( _LOG_HEALTHY > 0 )) then log_hc "$0" 0 "no cDSF conflicts found" fi diff --git a/sources/lib/platform/hp-ux/check_hpux_drd_status.sh b/sources/lib/platform/hp-ux/check_hpux_drd_status.sh index c1239cb..3cae0da 100644 --- a/sources/lib/platform/hp-ux/check_hpux_drd_status.sh +++ b/sources/lib/platform/hp-ux/check_hpux_drd_status.sh @@ -26,6 +26,7 @@ # @(#) HISTORY: # @(#) 2018-05-11: initial version [Patrick Van der Veken] # @(#) 2018-05-20: added dump_logs() [Patrick Van der Veken] +# @(#) 2018-10-18: changed boot status [Patrick Van der Veken] # ----------------------------------------------------------------------------- # DO NOT CHANGE THIS FILE UNLESS YOU KNOW WHAT YOU ARE DOING! #****************************************************************************** @@ -36,7 +37,7 @@ function check_hpux_drd_status # ------------------------- CONFIGURATION starts here ------------------------- typeset _CONFIG_FILE="${CONFIG_DIR}/$0.conf" typeset _DRD_BIN="/opt/drd/bin/drd" -typeset _VERSION="2018-05-18" # YYYY-MM-DD +typeset _VERSION="2018-10-18" # YYYY-MM-DD typeset _SUPPORTED_PLATFORMS="HP-UX" # uname -s match # ------------------------- CONFIGURATION ends here --------------------------- @@ -135,16 +136,16 @@ then _BOOTED_DISK=$(grep "Booted Disk:" ${HC_STDOUT_LOG} 2>/dev/null | cut -f2 -d'(' | cut -f1 -d ')') _ACTIVE_DISK=$(grep "Activated Disk:" ${HC_STDOUT_LOG} 2>/dev/null | cut -f2 -d'(' | cut -f1 -d ')') - # check clone status: after a fresh clone -> booted == activated == original + # check boot status: after a fresh clone -> booted == activated == original if [[ "${_ORIGINAL_DISK}" = "${_BOOTED_DISK}" ]] && [[ "${_ORIGINAL_DISK}" = "${_ACTIVE_DISK}" ]] && [[ "${_BOOTED_DISK}" = "${_ACTIVE_DISK}" ]] then - _MSG="clone disk ${_CLONE_DISK} was correctly created" + _MSG="host was booted from original disk (${_ACTIVE_DISK})" log_hc "$0" 0 "${_MSG}" else - _MSG="clone disk ${_CLONE_DISK} was probably not correctly created" - log_hc "$0" 1 "${_MSG}" + _MSG="host was booted from clone disk (${_ACTIVE_DISK})" + log_hc "$0" 0 "${_MSG}" fi # check EFI status diff --git a/sources/lib/platform/hp-ux/check_hpux_drd_status0.sh b/sources/lib/platform/hp-ux/check_hpux_drd_status0.sh deleted file mode 100644 index 3cae0da..0000000 --- a/sources/lib/platform/hp-ux/check_hpux_drd_status0.sh +++ /dev/null @@ -1,277 +0,0 @@ -#!/usr/bin/env ksh -#****************************************************************************** -# @(#) check_hpux_drd_status.sh -#****************************************************************************** -# @(#) Copyright (C) 2018 by KUDOS BVBA (info@kudos.be). All rights reserved. -# -# This program is a free software; you can redistribute it and/or modify -# it under the same terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details -#****************************************************************************** -# -# DOCUMENTATION (MAIN) -# ----------------------------------------------------------------------------- -# @(#) MAIN: check_hpux_drd_status -# DOES: see _show_usage() -# EXPECTS: see _show_usage() -# REQUIRES: data_space2comma(), data_get_lvalue_from_config(), data_date2epoch(), -# data_lc(), data_strip_space(), data_strip_outer_space(), -# dump_logs(), init_hc(), log_hc(), warn() -# -# @(#) HISTORY: -# @(#) 2018-05-11: initial version [Patrick Van der Veken] -# @(#) 2018-05-20: added dump_logs() [Patrick Van der Veken] -# @(#) 2018-10-18: changed boot status [Patrick Van der Veken] -# ----------------------------------------------------------------------------- -# DO NOT CHANGE THIS FILE UNLESS YOU KNOW WHAT YOU ARE DOING! -#****************************************************************************** - -# ----------------------------------------------------------------------------- -function check_hpux_drd_status -{ -# ------------------------- CONFIGURATION starts here ------------------------- -typeset _CONFIG_FILE="${CONFIG_DIR}/$0.conf" -typeset _DRD_BIN="/opt/drd/bin/drd" -typeset _VERSION="2018-10-18" # YYYY-MM-DD -typeset _SUPPORTED_PLATFORMS="HP-UX" # uname -s match -# ------------------------- CONFIGURATION ends here --------------------------- - -# set defaults -(( ARG_DEBUG != 0 && ARG_DEBUG_LEVEL > 0 )) && set ${DEBUG_OPTS} -init_hc "$0" "${_SUPPORTED_PLATFORMS}" "${_VERSION}" -typeset _ARGS=$(data_space2comma "$*") -typeset _ARG="" -typeset _MSG="" -typeset _STC=0 -typeset _RC=0 -typeset _CHECK_CLONE="" -typeset _CHECK_SYNC="" -typeset _CLONE_MAX_AGE=30 -typeset _SYNC_MAX_AGE=30 -typeset _CLONE_DISK="" -typeset _ORIGINAL_DISK="" -typeset _ACTIVE_DISK="" -typeset _BOOTED_DISK="" -typeset _NOW_EPOCH="" -typeset _EFI_CLONE="" -typeset _EFI_ORIGINAL="" -typeset _CLONE_DATE="" -typeset _CLONE_YEAR="" -typeset _CLONE_MONTH="" -typeset _CLONE_DAY="" -typeset _CLONE_HOUR="" -typeset _CLONE_MINUTE="" -typeset _CLONE_SECOND="" -typeset _CLONE_EPOCH="" -typeset _SYNC_DATE="" -typeset _SYNC_YEAR="" -typeset _SYNC_MONTH="" -typeset _SYNC_DAY="" -typeset _SYNC_HOUR="" -typeset _SYNC_MINUTE="" -typeset _SYNC_SECOND="" -typeset _SYNC_EPOCH="" - -# handle arguments (originally comma-separated) -for _ARG in ${_ARGS} -do - case "${_ARG}" in - help) - _show_usage $0 ${_VERSION} ${_CONFIG_FILE} && return 0 - ;; - esac -done - -# handle configuration file -[[ -n "${ARG_CONFIG_FILE}" ]] && _CONFIG_FILE="${ARG_CONFIG_FILE}" -if [[ ! -r ${_CONFIG_FILE} ]] -then - warn "unable to read configuration file at ${_CONFIG_FILE}" - return 1 -fi -# read required configuration values -_CHECK_CLONE=$(_CONFIG_FILE="${_CONFIG_FILE}" data_get_lvalue_from_config 'check_clone') -if [[ -z "${_CHECK_CLONE}" ]] -then - # default - _CHECK_CLONE="yes" -fi -_CLONE_MAX_AGE=$(_CONFIG_FILE="${_CONFIG_FILE}" data_get_lvalue_from_config 'clone_age') -_CHECK_SYNC=$(_CONFIG_FILE="${_CONFIG_FILE}" data_get_lvalue_from_config 'check_sync') -if [[ -z "${_CHECK_SYNC}" ]] -then - # default - _CHECK_SYNC="yes" -fi -_SYNC_MAX_AGE=$(_CONFIG_FILE="${_CONFIG_FILE}" data_get_lvalue_from_config 'sync_age') - -# get drd status -if [[ ! -x ${_DRD_BIN} ]] -then - warn "${_DRD_BIN} is not installed here" - return 1 -else - log "executing {${_DRD_BIN}} ..." - # drd outputs on STDERR - ${_DRD_BIN} status >${HC_STDOUT_LOG} 2>&1 - _RC=$? -fi - -# check drd status -if (( _RC == 0 )) && (( $(grep -c -E -e ".*Information succeeded.*" ${HC_STDOUT_LOG} 2>/dev/null) > 0 )) -then - # convert NOW to epoch (pass date values as unquoted parameters) - #_NOW_EPOCH=$(data_date2epoch "$(date '+%Y')" "$(date '+%m')" "$(date '+%d')" "$(date '+%H')" "$(date '+%M')" "$(date '+%S')") - _NOW_EPOCH=$(data_date2epoch $(date '+%Y %m %d %H %M %S')) - - # get devices - _ORIGINAL_DISK=$(data_strip_space "$(grep "Original Disk:" ${HC_STDOUT_LOG} 2>/dev/null | cut -f2 -d':')") - _CLONE_DISK=$(data_strip_space "$(grep 'Clone Disk:' ${HC_STDOUT_LOG} 2>/dev/null | cut -f2 -d':')") - - _BOOTED_DISK=$(grep "Booted Disk:" ${HC_STDOUT_LOG} 2>/dev/null | cut -f2 -d'(' | cut -f1 -d ')') - _ACTIVE_DISK=$(grep "Activated Disk:" ${HC_STDOUT_LOG} 2>/dev/null | cut -f2 -d'(' | cut -f1 -d ')') - - # check boot status: after a fresh clone -> booted == activated == original - if [[ "${_ORIGINAL_DISK}" = "${_BOOTED_DISK}" ]] && - [[ "${_ORIGINAL_DISK}" = "${_ACTIVE_DISK}" ]] && - [[ "${_BOOTED_DISK}" = "${_ACTIVE_DISK}" ]] - then - _MSG="host was booted from original disk (${_ACTIVE_DISK})" - log_hc "$0" 0 "${_MSG}" - else - _MSG="host was booted from clone disk (${_ACTIVE_DISK})" - log_hc "$0" 0 "${_MSG}" - fi - - # check EFI status - _EFI_CLONE=$(data_strip_outer_space "$(grep 'Clone EFI Partition:' ${HC_STDOUT_LOG} 2>/dev/null | cut -f2 -d':')") - if [[ "${_EFI_CLONE}" = "AUTO file present, Boot loader present" ]] - then - _MSG="clone disk ${_CLONE_DISK} has a bootable EFI partition" - log_hc "$0" 0 "${_MSG}" - else - _MSG="clone disk ${_CLONE_DISK} does not have a bootable EFI partition" - log_hc "$0" 1 "${_MSG}" - fi - _EFI_ORIGINAL=$(data_strip_outer_space "$(grep 'Original EFI Partition:' ${HC_STDOUT_LOG} 2>/dev/null | cut -f2 -d':')") - if [[ "${_EFI_ORIGINAL}" = "AUTO file present, Boot loader present" ]] - then - _MSG="original disk ${_ORIGINAL_DISK} has a bootable EFI partition" - log_hc "$0" 0 "${_MSG}" - else - _MSG="original disk ${_ORIGINAL_DISK} does not have a bootable EFI partition" - log_hc "$0" 1 "${_MSG}" - fi - - # check clone age - if [[ $(data_lc "${_CHECK_CLONE}") = "yes" ]] - then - # e.g.: 05/10/18 16:52:21 METDST (always in US format) - _CLONE_DATE=$(data_strip_outer_space "$(grep 'Clone Creation Date:' ${HC_STDOUT_LOG} 2>/dev/null | cut -f2- -d':')") - - if [[ "${_CLONE_DATE}" != "None" ]] - then - # split into year/month/day/hour/minute/second - _CLONE_YEAR=$(print "${_CLONE_DATE}" | awk '{ print $1 }' 2>/dev/null | cut -f3 -d'/') - _CLONE_MONTH=$(print "${_CLONE_DATE}" | awk '{ print $1 }' 2>/dev/null | cut -f1 -d'/') - _CLONE_DAY=$(print "${_CLONE_DATE}" | awk '{ print $1 }' 2>/dev/null | cut -f2 -d'/') - - _CLONE_HOUR=$(print "${_CLONE_DATE}" | awk '{ print $2 }' 2>/dev/null | cut -f1 -d':') - _CLONE_MINUTE=$(print "${_CLONE_DATE}" | awk '{ print $2 }' 2>/dev/null | cut -f2 -d':') - _CLONE_SECOND=$(print "${_CLONE_DATE}" | awk '{ print $2 }' 2>/dev/null | cut -f3 -d':') - - # convert _CLONE_DATE to epoch - _CLONE_EPOCH=$(data_date2epoch "20${_CLONE_YEAR}" "${_CLONE_MONTH}" "${_CLONE_DAY}" "${_CLONE_HOUR}" "${_CLONE_MINUTE}" "${_CLONE_SECOND}") - - # check age - if (( _CLONE_EPOCH > (_NOW_EPOCH - (_CLONE_MAX_AGE * 24 * 60 * 60)) )) - then - _MSG="clone age is younger than ${_CLONE_MAX_AGE} days [${_CLONE_DATE}]" - log_hc "$0" 0 "${_MSG}" - else - _MSG="clone age is older than ${_CLONE_MAX_AGE} days [${_CLONE_DATE}]" - log_hc "$0" 1 "${_MSG}" - fi - else - _MSG="clone has not yet been created" - log_hc "$0" 1 "${_MSG}" - fi - else - log "not checking age of clone (see ${_CONFIG_FILE})" - fi - - # check sync age - if [[ $(data_lc "${_CHECK_SYNC}") = "yes" ]] - then - # e.g.: 05/10/18 16:52:21 METDST (always in US format) - _SYNC_DATE=$(data_strip_outer_space "$(grep 'Last Sync Date:' ${HC_STDOUT_LOG} 2>/dev/null | cut -f2- -d':')") - - if [[ "${_SYNC_DATE}" != "None" ]] - then - # split into year/month/day/hour/minute/second - _SYNC_YEAR=$(print "${_SYNC_DATE}" | awk '{ print $1 }' 2>/dev/null | cut -f3 -d'/') - _SYNC_MONTH=$(print "${_SYNC_DATE}" | awk '{ print $1 }' 2>/dev/null | cut -f1 -d'/') - _SYNC_DAY=$(print "${_SYNC_DATE}" | awk '{ print $1 }' 2>/dev/null | cut -f2 -d'/') - - _SYNC_HOUR=$(print "${_SYNC_DATE}" | awk '{ print $2 }' 2>/dev/null | cut -f1 -d':') - _SYNC_MINUTE=$(print "${_SYNC_DATE}" | awk '{ print $2 }' 2>/dev/null | cut -f2 -d':') - _SYNC_SECOND=$(print "${_SYNC_DATE}" | awk '{ print $2 }' 2>/dev/null | cut -f3 -d':') - - # convert _SYNC_DATE to epoch - _SYNC_EPOCH=$(data_date2epoch "20${_SYNC_YEAR}" "${_SYNC_MONTH}" "${_SYNC_DAY}" "${_SYNC_HOUR}" "${_SYNC_MINUTE}" "${_SYNC_SECOND}") - - # check age - if (( _SYNC_EPOCH > (_NOW_EPOCH - (_SYNC_MAX_AGE * 24 * 60 * 60)) )) - then - _MSG="sync age is younger than ${_SYNC_MAX_AGE} days [${_SYNC_DATE}]" - log_hc "$0" 0 "${_MSG}" - else - _MSG="sync age is older than ${_SYNC_MAX_AGE} days [${_SYNC_DATE}]" - log_hc "$0" 1 "${_MSG}" - fi - else - _MSG="sync has not yet been executed" - log_hc "$0" 1 "${_MSG}" - fi - else - log "not checking age of sync (see ${_CONFIG_FILE})" - fi -else - _MSG="unable to run command: {${_DRD_BIN}}" - log_hc "$0" 1 "${_MSG}" - # dump debug info - (( ARG_DEBUG != 0 && ARG_DEBUG_LEVEL > 0 )) && dump_logs - return 1 -fi - -return 0 -} - -# ----------------------------------------------------------------------------- -function _show_usage -{ -cat <<- EOT -NAME : $1 -VERSION : $2 -CONFIG : $3 with: - check_clone= - clone_age= - check_sync= - sync_age= -PURPOSE : Checks whether the DRD clone was correctly created - Checks for correct EFI partitions - Checks the age of the DRD clone and/or sync - -EOT - -return 0 -} - -#****************************************************************************** -# END of script -#****************************************************************************** diff --git a/sources/lib/platform/hp-ux/check_hpux_file_age.sh b/sources/lib/platform/hp-ux/check_hpux_file_age.sh index 78b8f5b..99f1dde 100644 --- a/sources/lib/platform/hp-ux/check_hpux_file_age.sh +++ b/sources/lib/platform/hp-ux/check_hpux_file_age.sh @@ -55,6 +55,7 @@ typeset _FILE_NAME="" typeset _FILE_DIR="" # set local trap for cleanup +trap "[[ -f ${_REF_FILE} ]] && rm -f ${_REF_FILE} >/dev/null 2>&1; return 0" 0 trap "[[ -f ${_REF_FILE} ]] && rm -f ${_REF_FILE} >/dev/null 2>&1; return 1" 1 2 3 15 # handle arguments (originally comma-separated) @@ -63,46 +64,46 @@ do case "${_ARG}" in help) _show_usage $0 ${_VERSION} ${_CONFIG_FILE} && return 0 - ;; + ;; esac done # handle configuration file [[ -n "${ARG_CONFIG_FILE}" ]] && _CONFIG_FILE="${ARG_CONFIG_FILE}" -if [[ ! -r ${_CONFIG_FILE} ]] +if [[ ! -r ${_CONFIG_FILE} ]] then warn "unable to read configuration file at ${_CONFIG_FILE}" return 1 fi - + # perform check cat ${_CONFIG_FILE} | grep -v -E -e '^$' -e '^#' | while read _ENTRY do # field split _FILE_PATH=$(print "${_ENTRY%%;*}") _FILE_AGE=$(print "${_ENTRY##*;}") - + # split file/dir - _FILE_NAME=$(print "${_FILE_PATH##*/}") - _FILE_DIR=$(print "${_FILE_PATH%/*}") - + _FILE_NAME=$(print "${_FILE_PATH##*/}") + _FILE_DIR=$(print "${_FILE_PATH%/*}") + # check config if [ \( -z "${_FILE_PATH}" \) -a \( -z "${_FILE_AGE}" \) ] then warn "missing values in configuration file at ${_CONFIG_FILE}" - return 1 + return 1 fi case "${_FILE_AGE}" in +([0-9])*(.)*([0-9])) # numeric, OK ;; - *) + *) # not numeric warn "invalid file age value '${_FILE_AGE}' in configuration file at ${_CONFIG_FILE}" - return 1 + return 1 ;; esac - + # calculate reference timestamp & set reference file (once only) if (( _DO_REF == 0 )) then @@ -110,29 +111,29 @@ do if (( $? != 0 )) then warn "failed to query reference time (Perl)" - return 1 + return 1 fi touch -amt "${REF_TIME}" ${_REF_FILE} >>${HC_STDOUT_LOG} 2>>${HC_STDERR_LOG} if (( $? != 0 )) then warn "failed to create reference time ${TMP_DIR}" - return 1 + return 1 fi _DO_REF=1 fi -sleep 60 +sleep 60 # perform check if [[ ! -r "${_FILE_PATH}" ]] then _MSG="unable to read or access requested file at ${_FILE_PATH}" - _STC=1 + _STC=1 else # age check AGE_CHECK=$(find "${_FILE_DIR}" -type f -name "${_FILE_NAME}" -newer ${_REF_FILE}) if (( $? != 0 )) then warn "unable to execute file age test for ${_FILE_PATH}" - return 1 + return 1 fi if [[ -z "${AGE_CHECK}" ]] then @@ -142,7 +143,7 @@ sleep 60 _MSG="file age of ${_FILE_AGE} has not expired on ${_FILE_PATH}" fi fi - + # handle unit result log_hc "$0" ${_STC} "${_MSG}" _STC=0 diff --git a/sources/lib/platform/hp-ux/check_hpux_file_change.sh b/sources/lib/platform/hp-ux/check_hpux_file_change.sh index 26b689c..5ceb672 100644 --- a/sources/lib/platform/hp-ux/check_hpux_file_change.sh +++ b/sources/lib/platform/hp-ux/check_hpux_file_change.sh @@ -65,6 +65,11 @@ typeset _TMP_EXCL_FILE="${TMP_DIR}/.$0.tmp_excl.$$" set -o noglob # no file globbing # set local trap for clean-up +trap "[[ -f ${_TMP1_FILE} ]] && rm -f ${_TMP1_FILE} >/dev/null 2>&1; + [[ -f ${_TMP2_FILE} ]] && rm -f ${_TMP2_FILE} >/dev/null 2>&1; + [[ -f ${_TMP_INCL_FILE} ]] && rm -f ${_TMP_INCL_FILE} >/dev/null 2>&1; + [[ -f ${_TMP_EXCL_FILE} ]] && rm -f ${_TMP_EXCL_FILE} >/dev/null 2>&1; + return 0" 0 trap "[[ -f ${_TMP1_FILE} ]] && rm -f ${_TMP1_FILE} >/dev/null 2>&1; [[ -f ${_TMP2_FILE} ]] && rm -f ${_TMP2_FILE} >/dev/null 2>&1; [[ -f ${_TMP_INCL_FILE} ]] && rm -f ${_TMP_INCL_FILE} >/dev/null 2>&1; diff --git a/sources/lib/platform/hp-ux/check_hpux_ovpa_status.sh b/sources/lib/platform/hp-ux/check_hpux_ovpa_status.sh index edbee89..557a691 100644 --- a/sources/lib/platform/hp-ux/check_hpux_ovpa_status.sh +++ b/sources/lib/platform/hp-ux/check_hpux_ovpa_status.sh @@ -26,6 +26,7 @@ # @(#) 2016-12-01: more standardized error handling [Patrick Van der Veken] # @(#) 2018-07-10: added log_healthy hc_arg [Patrick Van der Veken] # @(#) 2018-08-30: added config file + check list for daemons [Patrick Van der Veken] +# @(#) 2018-10-22: small fixes [Patrick Van der Veken] # ----------------------------------------------------------------------------- # DO NOT CHANGE THIS FILE UNLESS YOU KNOW WHAT YOU ARE DOING! #****************************************************************************** @@ -35,7 +36,7 @@ function check_hpux_ovpa_status { # ------------------------- CONFIGURATION starts here ------------------------- typeset _CONFIG_FILE="${CONFIG_DIR}/$0.conf" -typeset _VERSION="2018-08-30" # YYYY-MM-DD +typeset _VERSION="2018-10-22" # YYYY-MM-DD typeset _SUPPORTED_PLATFORMS="HP-UX" # uname -s match typeset _OVPA_BIN="/opt/perf/bin/perfstat" # ------------------------- CONFIGURATION ends here --------------------------- @@ -47,6 +48,7 @@ typeset _ARGS=$(data_space2comma "$*") typeset _ARG="" typeset _MSG="" typeset _STC=0 +typeset _CFG_HEALTHY="" typeset _LOG_HEALTHY=0 typeset _OVPA_MATCH=0 typeset _OVPA_VERSION="" @@ -90,14 +92,13 @@ else # convert commas and strip quotes _OVPA_DAEMONS=$(data_comma2space $(data_dequote "${_OVPA_DAEMONS}")) fi -log "checking daemons: ${_OVPA_DAEMONS} ..." _CFG_HEALTHY=$(_CONFIG_FILE="${_CONFIG_FILE}" data_get_lvalue_from_config 'log_healthy') case "${_CFG_HEALTHY}" in yes|YES|Yes) _LOG_HEALTHY=1 ;; *) - # do not override hc_arg + # do not override hc_arg (( _LOG_HEALTHY > 0 )) || _LOG_HEALTHY=0 ;; esac @@ -127,6 +128,7 @@ else fi # do OVPA status checks +log "checking daemons: ${_OVPA_DAEMONS} ..." for _OVPA_DAEMON in ${_OVPA_DAEMONS} do # anchored grep here! diff --git a/sources/lib/platform/hp-ux/check_hpux_patch_version.sh b/sources/lib/platform/hp-ux/check_hpux_patch_version.sh index 043ec05..171c737 100644 --- a/sources/lib/platform/hp-ux/check_hpux_patch_version.sh +++ b/sources/lib/platform/hp-ux/check_hpux_patch_version.sh @@ -25,7 +25,7 @@ # @(#) HISTORY: # @(#) 2018-05-11: initial version [Patrick Van der Veken] # @(#) 2018-05-20: added dump_logs() [Patrick Van der Veken] -# @(#) 2018-05-20: added dump_logs() [Patrick Van der Veken] +# @(#) 2018-10-22: added check on fileset state [Patrick Van der Veken] # ----------------------------------------------------------------------------- # DO NOT CHANGE THIS FILE UNLESS YOU KNOW WHAT YOU ARE DOING! #****************************************************************************** @@ -39,7 +39,7 @@ typeset _SWLIST_BIN="/usr/sbin/swlist" typeset _SWLIST_OPTS="" typeset _SHOW_PATCHES_BIN="/usr/contrib/bin/show_patches" typeset _SHOW_PATCHES_OPTS="" -typeset _VERSION="2018-05-20" # YYYY-MM-DD +typeset _VERSION="2018-10-22" # YYYY-MM-DD typeset _SUPPORTED_PLATFORMS="HP-UX" # uname -s match # ------------------------- CONFIGURATION ends here --------------------------- @@ -50,8 +50,13 @@ typeset _ARGS=$(data_space2comma "$*") typeset _ARG="" typeset _MSG="" typeset _STC=0 +typeset _CFG_HEALTHY="" +typeset _LOG_HEALTHY=0 typeset _OE_VERSION="" typeset _PATCH_LINE="" +typeset _CHECK_FILESETS="" +typeset _FILESET="" +typeset _FILESET_LINE="" typeset _PATCHES="" typeset _PATCH="" @@ -65,6 +70,20 @@ do esac done +# log_healthy +(( ARG_LOG_HEALTHY > 0 )) && _LOG_HEALTHY=1 +if (( _LOG_HEALTHY > 0 )) +then + if (( ARG_LOG > 0 )) + then + log "logging/showing passed health checks" + else + log "showing passed health checks (but not logging)" + fi +else + log "not logging/showing passed health checks" +fi + # handle configuration file [[ -n "${ARG_CONFIG_FILE}" ]] && _CONFIG_FILE="${ARG_CONFIG_FILE}" if [[ ! -r ${_CONFIG_FILE} ]] @@ -80,6 +99,33 @@ then # convert commas and strip quotes _PATCHES=$(data_comma2space $(data_dequote "${_PATCH_LINE}")) fi +if [[ -z "${_CHECK_FILESETS}" ]] +then + # default + _CHECK_FILESETS="yes" +fi +_CFG_HEALTHY=$(_CONFIG_FILE="${_CONFIG_FILE}" data_get_lvalue_from_config 'log_healthy') +case "${_CFG_HEALTHY}" in + yes|YES|Yes) + _LOG_HEALTHY=1 + ;; + *) + # do not override hc_arg + (( _LOG_HEALTHY > 0 )) || _LOG_HEALTHY=0 + ;; +esac + +# check required tools +if [[ ! -x ${_SWLIST_BIN} ]] +then + warn "${_SWLIST_BIN} is not installed here" + return 1 +fi +if [[ ! -x ${_SHOW_PATCHES_BIN} ]] +then + warn "${_SHOW_PATCHES_BIN} is not installed here" + return 1 +fi # get and check OE version if [[ -n "${_OE_VERSION}" ]] @@ -162,6 +208,32 @@ else warn "required patches will not be checked (not configured in ${_CONFIG_FILE})" fi +# get and check (all) filesets +if [[ "${_CHECK_FILESETS}" = "yes" ]] +then + _SWLIST_OPTS="-a state -l fileset" + log "executing {${_SWLIST_BIN}} with options: ${_SWLIST_OPTS}" + print "=== swlist ({$_SWLIST_OPTS}) ===" >>${HC_STDOUT_LOG} + ${_SWLIST_BIN} ${_SWLIST_OPTS} >>${HC_STDOUT_LOG} 2>${HC_STDERR_LOG} + + if (( $? == 0 )) + then + grep -E -e "installed[[:space:]]*$" ${HC_STDOUT_LOG} 2>/dev/null |\ + while read _FILESET_LINE + do + _FILESET=$(print "${_FILESET_LINE}" | awk '{print $1}' 2>/dev/null) + _MSG="fileset ${_FILESET} is not in a configured state" + log_hc "$0" 1 "${_MSG}" + done + else + _MSG="unable to run command: {${_SWLIST_BIN}}" + log_hc "$0" 1 "${_MSG}" + # dump debug info + (( ARG_DEBUG != 0 && ARG_DEBUG_LEVEL > 0 )) && dump_logs + return 1 + fi +fi + return 0 } diff --git a/sources/lib/platform/hp-ux/check_hpux_sg_cluster_config.sh b/sources/lib/platform/hp-ux/check_hpux_sg_cluster_config.sh index 64016e7..2f7f19d 100644 --- a/sources/lib/platform/hp-ux/check_hpux_sg_cluster_config.sh +++ b/sources/lib/platform/hp-ux/check_hpux_sg_cluster_config.sh @@ -37,7 +37,7 @@ typeset _VERSION="2016-12-01" # YYYY-MM-DD typeset _SUPPORTED_PLATFORMS="HP-UX" # uname -s match typeset _SG_DAEMON="/usr/lbin/cmcld" # rubbish that cmgetconf outputs to STDOUT instead of STDERR -typeset _SG_CMGETCONF_FILTER="Permission denied|Number of configured" +typeset _SG_CMGETCONF_FILTER="Permission denied|Number of configured" # ------------------------- CONFIGURATION ends here --------------------------- # set defaults @@ -58,6 +58,7 @@ typeset _CLUSTER_PARAM="" typeset _CLUSTER_VALUE="" # set local trap for cleanup +trap "rm -f ${_CLUSTER_RUN_FILE}.* ${_CLUSTER_CFG_FILE}.* >/dev/null 2>&1; return 0" 0 trap "rm -f ${_CLUSTER_RUN_FILE}.* ${_CLUSTER_CFG_FILE}.* >/dev/null 2>&1; return 1" 1 2 3 15 # handle arguments (originally comma-separated) @@ -66,13 +67,13 @@ do case "${_ARG}" in help) _show_usage $0 ${_VERSION} ${_CONFIG_FILE} && return 0 - ;; + ;; esac done # handle configuration file [[ -n "${ARG_CONFIG_FILE}" ]] && _CONFIG_FILE="${ARG_CONFIG_FILE}" -if [[ ! -r ${_CONFIG_FILE} ]] +if [[ ! -r ${_CONFIG_FILE} ]] then warn "unable to read configuration file at ${_CONFIG_FILE}" return 1 @@ -91,7 +92,7 @@ then fi # check serviceguard status & gather cluster information from running cluster (compressed lines) -if [[ ! -x ${_SG_DAEMON} ]] +if [[ ! -x ${_SG_DAEMON} ]] then warn "${_SG_DAEMON} is not installed here" return 1 @@ -115,10 +116,10 @@ do BEGIN { found = 0; needle = "^\["cluster"\]" } # skip blank lines - /^\s*$/ { next; } + /^\s*$/ { next; } # skip comment lines - /^#/ { next; } - + /^#/ { next; } + # end marker ( $0 ~ /^\[.*\]/ && found ) { found = 0; @@ -157,13 +158,13 @@ do else _MSG="'${_CLUSTER_PARAM} (${_CLUSTER_VALUE} ...)' is configured for ${_CLUSTER_INSTANCE}" fi - + # handle unit result log_hc "$0" ${_STC} "${_MSG}" _STC=0 done <${_CLUSTER_CFG_FILE}.${_CLUSTER_INSTANCE} done - + # remove working files rm -f ${_CLUSTER_RUN_FILE}.* ${_CLUSTER_CFG_FILE}.* >/dev/null 2>&1 @@ -180,7 +181,7 @@ CONFIG : $3 PURPOSE : Checks the configuration of Serviceguard cluster (SG 11.16+) (comparing serialized strings from the plugin configuration file to the running cluster configuration) - + EOT return 0 diff --git a/sources/lib/platform/hp-ux/check_hpux_sg_package_config.sh b/sources/lib/platform/hp-ux/check_hpux_sg_package_config.sh index 21e33ed..20bcd80 100644 --- a/sources/lib/platform/hp-ux/check_hpux_sg_package_config.sh +++ b/sources/lib/platform/hp-ux/check_hpux_sg_package_config.sh @@ -37,7 +37,7 @@ typeset _VERSION="2016-12-01" # YYYY-MM-DD typeset _SUPPORTED_PLATFORMS="HP-UX" # uname -s match typeset _SG_DAEMON="/usr/lbin/cmcld" # rubbish that cmgetconf outputs to STDOUT instead of STDERR -typeset _SG_CMGETCONF_FILTER="Permission denied|Number of configured" +typeset _SG_CMGETCONF_FILTER="Permission denied|Number of configured" # ------------------------- CONFIGURATION ends here --------------------------- # set defaults @@ -63,16 +63,17 @@ do case "${_ARG}" in help) _show_usage $0 ${_VERSION} ${_CONFIG_FILE} && return 0 - ;; + ;; esac done # set local trap for cleanup +trap "rm -f ${_PKG_RUN_FILE}.* ${_PKG_CFG_FILE}.* >/dev/null 2>&1; return 0" 0 trap "rm -f ${_PKG_RUN_FILE}.* ${_PKG_CFG_FILE}.* >/dev/null 2>&1; return 1" 1 2 3 15 # handle configuration file [[ -n "${ARG_CONFIG_FILE}" ]] && _CONFIG_FILE="${ARG_CONFIG_FILE}" -if [[ ! -r ${_CONFIG_FILE} ]] +if [[ ! -r ${_CONFIG_FILE} ]] then warn "unable to read configuration file at ${_CONFIG_FILE}" return 1 @@ -91,7 +92,7 @@ then fi # check serviceguard status & gather package information from running cluster (compressed lines) -if [[ ! -x ${_SG_DAEMON} ]] +if [[ ! -x ${_SG_DAEMON} ]] then warn "${_SG_DAEMON} is not installed here" return 1 @@ -115,10 +116,10 @@ do BEGIN { found = 0; needle = "^\["package"\]" } # skip blank lines - /^\s*$/ { next; } + /^\s*$/ { next; } # skip comment lines - /^#/ { next; } - + /^#/ { next; } + # end marker ( $0 ~ /^\[.*\]/ && found ) { found = 0; @@ -157,13 +158,13 @@ do else _MSG="'${_PKG_PARAM} (${_PKG_VALUE} ...)' is configured for ${_PKG_INSTANCE}" fi - + # handle unit result log_hc "$0" ${_STC} "${_MSG}" _STC=0 done <${_PKG_CFG_FILE}.${_PKG_INSTANCE} done - + # remove working files rm -f ${_PKG_RUN_FILE}.* ${_PKG_CFG_FILE}.* >/dev/null 2>&1 diff --git a/sources/lib/platform/hp-ux/check_hpux_syslog.sh b/sources/lib/platform/hp-ux/check_hpux_syslog.sh index e704e16..9d30c8f 100644 --- a/sources/lib/platform/hp-ux/check_hpux_syslog.sh +++ b/sources/lib/platform/hp-ux/check_hpux_syslog.sh @@ -57,16 +57,17 @@ do case "${_ARG}" in help) _show_usage $0 ${_VERSION} ${_CONFIG_FILE} && return 0 - ;; + ;; esac done # set local trap for cleanup +trap "[[ -f ${_TMP_FILE} ]] && rm -f ${_TMP_FILE} >/dev/null 2>&1; return 0" 0 trap "[[ -f ${_TMP_FILE} ]] && rm -f ${_TMP_FILE} >/dev/null 2>&1; return 1" 1 2 3 15 # handle configuration file [[ -n "${ARG_CONFIG_FILE}" ]] && _CONFIG_FILE="${ARG_CONFIG_FILE}" -if [[ ! -r ${_CONFIG_FILE} ]] +if [[ ! -r ${_CONFIG_FILE} ]] then warn "unable to read configuration file at ${_CONFIG_FILE}" return 1 @@ -104,7 +105,7 @@ fi print "## this file is not date sorted! Do not edit manually!" >${_STATE_FILE} (( $? > 0 )) && { warn "failed to create new state file at ${_STATE_FILE}" - return 1 + return 1 } log "created new state file at ${_STATE_FILE}" } @@ -126,20 +127,20 @@ then sort -u ${HC_STDOUT_LOG} ${_STATE_FILE} >${_TMP_FILE} (( $? > 0 )) && { warn "failed to sort temporary state file" - return 1 + return 1 } if (( ARG_LOG != 0 )) then mv ${_TMP_FILE} ${_STATE_FILE} >/dev/null 2>&1 (( $? > 0 )) && { warn "failed to move temporary state file to permanent state file ${_STATE_FILE}" - return 1 + return 1 } fi else _MSG="no new SYSLOG messages found" fi - + # handle results log_hc "$0" ${_STC} "${_MSG}" diff --git a/sources/lib/platform/linux/check_linux_file_change.sh b/sources/lib/platform/linux/check_linux_file_change.sh index 058f770..d20016a 100644 --- a/sources/lib/platform/linux/check_linux_file_change.sh +++ b/sources/lib/platform/linux/check_linux_file_change.sh @@ -69,7 +69,12 @@ set -o noglob # no file globbing trap "[[ -f ${_TMP1_FILE} ]] && rm -f ${_TMP1_FILE} >/dev/null 2>&1; [[ -f ${_TMP2_FILE} ]] && rm -f ${_TMP2_FILE} >/dev/null 2>&1; [[ -f ${_TMP_INCL_FILE} ]] && rm -f ${_TMP_INCL_FILE} >/dev/null 2>&1; - [[ -f ${_TMP_EXCL_FILE} ]] && rm -f ${_TMP_EXCL_FILE} >/dev/null 2>&1; + [[ -f ${_TMP_EXCL_FILE} ]] && rm -f ${_TMP_EXCL_FILE} >/dev/null 2>&1; + return 0" 0 +trap "[[ -f ${_TMP1_FILE} ]] && rm -f ${_TMP1_FILE} >/dev/null 2>&1; + [[ -f ${_TMP2_FILE} ]] && rm -f ${_TMP2_FILE} >/dev/null 2>&1; + [[ -f ${_TMP_INCL_FILE} ]] && rm -f ${_TMP_INCL_FILE} >/dev/null 2>&1; + [[ -f ${_TMP_EXCL_FILE} ]] && rm -f ${_TMP_EXCL_FILE} >/dev/null 2>&1; return 1" 1 2 3 15 # handle arguments (originally comma-separated) @@ -78,13 +83,13 @@ do case "${_ARG}" in help) _show_usage $0 ${_VERSION} ${_CONFIG_FILE} && return 0 - ;; + ;; esac done - + # handle configuration file [[ -n "${ARG_CONFIG_FILE}" ]] && _CONFIG_FILE="${ARG_CONFIG_FILE}" -if [[ ! -r ${_CONFIG_FILE} ]] +if [[ ! -r ${_CONFIG_FILE} ]] then warn "unable to read configuration file at ${_CONFIG_FILE}" return 1 @@ -132,29 +137,29 @@ fi >${_STATE_FILE} (( $? > 0 )) && { warn "failed to create new state file at ${_STATE_FILE}" - return 1 + return 1 } log "created new state file at ${_STATE_FILE}" } >${_TMP_INCL_FILE} (( $? > 0 )) && { warn "failed to create temporary file at ${_TMP_INCL_FILE}" - return 1 + return 1 } >${_TMP_EXCL_FILE} (( $? > 0 )) && { warn "failed to create temporary file at ${_TMP_EXCL_FILE}" - return 1 + return 1 } >${_TMP1_FILE} (( $? > 0 )) && { warn "failed to create temporary file at ${_TMP1_FILE}" - return 1 + return 1 } >${_TMP2_FILE} (( $? > 0 )) && { warn "failed to create temporary file at ${_TMP2_FILE}" - return 1 + return 1 } # build list of configured objects: inclusion @@ -171,7 +176,7 @@ do ;; esac fi - + # expand directories if [[ -d ${_INCL_OBJECT} ]] then @@ -195,7 +200,7 @@ do ;; esac fi - + # expand directories if [[ -d ${_EXCL_OBJECT} ]] then @@ -217,7 +222,7 @@ do _STC=0 _MSG="" _IS_NEW=0 - + # object to check must be a file (and be present) if [[ ! -f ${_FILE_TO_CHECK} ]] then @@ -226,18 +231,18 @@ do log_hc "$0" ${_STC} "${_MSG}" continue fi - + # read entry from state file _STATE_FILE_LINE=$(grep -E -e "^${_FILE_TO_CHECK}\|" ${_STATE_FILE} 2>/dev/null) if [[ -n "${_STATE_FILE_LINE}" ]] then # field 1 is the file name _STATE_FILE_TYPE=$(print "${_STATE_FILE_LINE}" | cut -f2 -d'|' 2>/dev/null) - _STATE_FILE_CKSUM=$(print "${_STATE_FILE_LINE}" | cut -f3 -d'|' 2>/dev/null) + _STATE_FILE_CKSUM=$(print "${_STATE_FILE_LINE}" | cut -f3 -d'|' 2>/dev/null) else _IS_NEW=1 fi - + # compute new checksum (keep the same type as before) if (( _IS_NEW == 0 )) then @@ -282,14 +287,14 @@ do _STC=1 fi fi - + # check for failed checksums if [[ -z "${_FILE_CKSUM}" ]] then _MSG="did not receive checksum (openssl/cksum) for ${_FILE_TO_CHECK}" - _STC=1 + _STC=1 fi - + # bounce failures back and jump to next file if (( _STC != 0 )) then @@ -303,7 +308,7 @@ do if [[ "${_STATE_FILE_CKSUM}" != "${_FILE_CKSUM}" ]] then _MSG="${_FILE_TO_CHECK} has a changed checksum [${_FILE_TYPE}]" - _STC=1 + _STC=1 else _MSG="${_FILE_TO_CHECK} has the same checksum [${_FILE_TYPE}]" _STC=0 @@ -312,10 +317,10 @@ do _MSG="${_FILE_TO_CHECK} is a new file [${_FILE_TYPE}]" _STC=0 fi - + # save entry to temp file printf "%s|%s|%s\n" "${_FILE_TO_CHECK}" "${_FILE_TYPE}" "${_FILE_CKSUM}" >>${_TMP2_FILE} - + # report with curr/exp values log_hc "$0" ${_STC} "${_MSG}" "${_FILE_CKSUM}" "${_STATE_FILE_CKSUM}" done <${_TMP1_FILE} @@ -329,7 +334,7 @@ then mv ${_TMP2_FILE} ${_STATE_FILE} >/dev/null 2>&1 (( $? > 0 )) && { warn "failed to move temporary state file" - return 1 + return 1 } fi @@ -352,18 +357,18 @@ CONFIG : $3 with formatted stanzas: incl: excl: PURPOSE : a KISS file integrity checker (like AIDE). Supports includes and excludes - of files and directories (automatically expanded). Excludes have a higher - priority than includes. Integrity checks will only be performed on files. + of files and directories (automatically expanded). Excludes have a higher + priority than includes. Integrity checks will only be performed on files. Will detect changed, new & deleted files (but not when deleted files - occur in an expanded directory tree). If you wish to detect deleted files: - use only direct file references in the configuration file. Uses by preference - openssl for hash calculation, with cksum as fall-back). + occur in an expanded directory tree). If you wish to detect deleted files: + use only direct file references in the configuration file. Uses by preference + openssl for hash calculation, with cksum as fall-back). Updated and deleted files will cause a HC failure, new files will not. - CAVEAT EMPTOR: use only to check a relatively small number of files. + CAVEAT EMPTOR: use only to check a relatively small number of files. Processing a big number of files is likely to take - ages and probably will cause the plugin to time out + ages and probably will cause the plugin to time out (see HC_TIME_OUT). YMMV. - + EOT diff --git a/sources/lib/platform/linux/check_linux_hpacucli.sh b/sources/lib/platform/linux/check_linux_hpacucli.sh index 8ef315e..75622c3 100644 --- a/sources/lib/platform/linux/check_linux_hpacucli.sh +++ b/sources/lib/platform/linux/check_linux_hpacucli.sh @@ -57,6 +57,7 @@ typeset _DO_ACU_LOGL=1 typeset _DO_CHECK=0 # set local trap for cleanup +trap "[[ -f ${_TMP_FILE} ]] && rm -f ${_TMP_FILE} >/dev/null 2>&1; return 0" 0 trap "[[ -f ${_TMP_FILE} ]] && rm -f ${_TMP_FILE} >/dev/null 2>&1; return 1" 1 2 3 15 # handle arguments (originally comma-separated) @@ -65,13 +66,13 @@ do case "${_ARG}" in help) _show_usage $0 ${_VERSION} ${_CONFIG_FILE} && return 0 - ;; + ;; esac done # handle configuration file [[ -n "${ARG_CONFIG_FILE}" ]] && _CONFIG_FILE="${ARG_CONFIG_FILE}" -if [[ ! -r ${_CONFIG_FILE} ]] +if [[ ! -r ${_CONFIG_FILE} ]] then warn "unable to read configuration file at ${_CONFIG_FILE}" return 1 @@ -88,7 +89,7 @@ case "${_DO_ACU_CTRL}" in 0|1) # on/off, OK ;; - *) + *) # set default warn "illegal value for 'do_acu_controller' in ${_CONFIG_FILE}, using default" _DO_ACU_CTRL=1 @@ -99,7 +100,7 @@ case "${_DO_ACU_ENCL}" in 0|1) # on/off, OK ;; - *) + *) # set default warn "illegal value for 'do_acu_enclosure' in ${_CONFIG_FILE}, using default" _DO_ACU_ENCL=1 @@ -110,7 +111,7 @@ case "${_DO_ACU_PHYS}" in 0|1) # on/off, OK ;; - *) + *) # set default warn "illegal value for 'do_acu_physical' in ${_CONFIG_FILE}, using default" _DO_ACU_PHYS=1 @@ -121,7 +122,7 @@ case "${_DO_ACU_LOGL}" in 0|1) # on/off, OK ;; - *) + *) # set default warn "illegal value for 'do_acu_logical' in ${_CONFIG_FILE}, using default" _DO_ACU_LOGL=1 @@ -137,7 +138,7 @@ then fi # check for HP tools -if [[ ! -x ${_HPACUCLI_BIN} || -z "${_HPACUCLI_BIN}" ]] +if [[ ! -x ${_HPACUCLI_BIN} || -z "${_HPACUCLI_BIN}" ]] then warn "${_HPACUCLI_BIN} is not installed here" return 1 @@ -156,7 +157,7 @@ then _MSG="failure in controller" _STC_COUNT=$(( _STC_COUNT + 1 )) # handle unit result - log_hc "$0" 1 "${_MSG}" + log_hc "$0" 1 "${_MSG}" done print "=== ACU controller(s) ===" >>${HC_STDOUT_LOG} cat ${_TMP_FILE} >>${HC_STDOUT_LOG} @@ -173,12 +174,12 @@ then # non-numeric warn "found RAID controller at illegal slot?: ${_SLOT_NUM}" ;; - esac + esac done else warn "${_HPACUCLI_BIN}: do_acu_controller check is not enabled" fi - + # ENCLOSURE(s) if (( _DO_ACU_ENCL != 0 )) then @@ -195,7 +196,7 @@ then _MSG="failure in enclosure for controller ${_CTRL_SLOT}" _STC_COUNT=$(( _STC_COUNT + 1 )) # handle unit result - log_hc "$0" 1 "${_MSG}" + log_hc "$0" 1 "${_MSG}" done print "=== ACU enclosure(s) ===" >>${HC_STDOUT_LOG} cat ${_TMP_FILE} >>${HC_STDOUT_LOG} @@ -220,15 +221,15 @@ then _MSG="failure in physical drive(s) for controller ${_CTRL_SLOT}" _STC_COUNT=$(( _STC_COUNT + 1 )) # handle unit result - log_hc "$0" 1 "${_MSG}" + log_hc "$0" 1 "${_MSG}" done print "=== ACU physical drive(s) ===" >>${HC_STDOUT_LOG} cat ${_TMP_FILE} >>${HC_STDOUT_LOG} done else warn "${_HPACUCLI_BIN}: do_acu_physical check is not enabled" - fi - + fi + # LOGICAL DRIVE(s) if (( _DO_ACU_LOGL != 0 )) then @@ -245,14 +246,14 @@ then _MSG="failure in logical drive(s) for controller ${_CTRL_SLOT}" _STC_COUNT=$(( _STC_COUNT + 1 )) # handle unit result - log_hc "$0" 1 "${_MSG}" + log_hc "$0" 1 "${_MSG}" done print "=== ACU logical drive(s) ===" >>${HC_STDOUT_LOG} cat ${_TMP_FILE} >>${HC_STDOUT_LOG} done else warn "${_HPACUCLI_BIN}: do_acu_logical check is not enabled" -fi +fi # report OK situation if (( _STC_COUNT == 0 )) diff --git a/sources/lib/platform/linux/check_linux_hpasmcli.sh b/sources/lib/platform/linux/check_linux_hpasmcli.sh index 12d980b..8402792 100644 --- a/sources/lib/platform/linux/check_linux_hpasmcli.sh +++ b/sources/lib/platform/linux/check_linux_hpasmcli.sh @@ -62,6 +62,7 @@ typeset _THRES_VALUE="" typeset _TEMP_UNIT="" # set local trap for cleanup +trap "[[ -f ${_TMP_FILE} ]] && rm -f ${_TMP_FILE} >/dev/null 2>&1; return 0" 0 trap "[[ -f ${_TMP_FILE} ]] && rm -f ${_TMP_FILE} >/dev/null 2>&1; return 1" 1 2 3 15 # handle arguments (originally comma-separated) @@ -70,7 +71,7 @@ do case "${_ARG}" in help) _show_usage $0 ${_VERSION} ${_CONFIG_FILE} && return 0 - ;; + ;; esac done diff --git a/sources/lib/platform/linux/check_linux_hplog.sh b/sources/lib/platform/linux/check_linux_hplog.sh index 1f31fdd..2c029d8 100644 --- a/sources/lib/platform/linux/check_linux_hplog.sh +++ b/sources/lib/platform/linux/check_linux_hplog.sh @@ -55,6 +55,9 @@ typeset _SEVERITY_ENTRY="" typeset _EVENT_ENTRY="" # set local trap for cleanup +trap "[[ -f ${_TMP1_FILE} ]] && rm -f ${_TMP1_FILE} >/dev/null 2>&1 + [[ -f ${_TMP2_FILE} ]] && rm -f ${_TMP2_FILE} >/dev/null 2>&1 + return 0" 0 trap "[[ -f ${_TMP1_FILE} ]] && rm -f ${_TMP1_FILE} >/dev/null 2>&1 [[ -f ${_TMP2_FILE} ]] && rm -f ${_TMP2_FILE} >/dev/null 2>&1 return 1" 1 2 3 15 @@ -65,13 +68,13 @@ do case "${_ARG}" in help) _show_usage $0 ${_VERSION} ${_CONFIG_FILE} && return 0 - ;; + ;; esac done - + # handle configuration file [[ -n "${ARG_CONFIG_FILE}" ]] && _CONFIG_FILE="${ARG_CONFIG_FILE}" -if [[ ! -r ${_CONFIG_FILE} ]] +if [[ ! -r ${_CONFIG_FILE} ]] then warn "unable to read configuration file at ${_CONFIG_FILE}" return 1 @@ -93,7 +96,7 @@ else _HPLOG_SEVERITIES="^" print "${_SEVERITIES_LINE}" | tr ',' '\n' 2>/dev/null | while read -r _SEVERITY_ENTRY do - _HPLOG_SEVERITIES="${_HPLOG_SEVERITIES}(([0-9]+)\s*${_SEVERITY_ENTRY})|" + _HPLOG_SEVERITIES="${_HPLOG_SEVERITIES}(([0-9]+)\s*${_SEVERITY_ENTRY})|" done # delete last 'OR' _HPLOG_SEVERITIES=${_HPLOG_SEVERITIES%?} @@ -121,7 +124,7 @@ ${_HPLOG_BIN} -v >${HC_STDOUT_LOG} 2>>${HC_STDERR_LOG} print "## this file sorted! Do not edit manually!" >${_STATE_FILE} (( $? > 0 )) && { warn "failed to create new state file" - return 1 + return 1 } log "created new state file at ${_STATE_FILE}" } @@ -139,7 +142,7 @@ do _MSG="${_EVENT_ENTRY}" _STC_COUNT=$(( _STC_COUNT + 1 )) # handle unit result - log_hc "$0" 1 "${_MSG}" + log_hc "$0" 1 "${_MSG}" done <${_TMP2_FILE} if (( _STC_COUNT > 0 )) then @@ -149,8 +152,8 @@ then sort -u ${_TMP1_FILE} ${_TMP2_FILE} >${_STATE_FILE} 2>/dev/null (( $? > 0 )) && { warn "failed to sort temporary state file" - return 1 - } + return 1 + } else _MSG="no new HPLOG messages found" fi diff --git a/sources/lib/platform/linux/check_linux_hpssacli.sh b/sources/lib/platform/linux/check_linux_hpssacli.sh index a52d82b..5fad0c2 100644 --- a/sources/lib/platform/linux/check_linux_hpssacli.sh +++ b/sources/lib/platform/linux/check_linux_hpssacli.sh @@ -57,6 +57,7 @@ typeset _DO_SSA_LOGL=1 typeset _DO_CHECK=0 # set local trap for cleanup +trap "[[ -f ${_TMP_FILE} ]] && rm -f ${_TMP_FILE} >/dev/null 2>&1; return 0" 0 trap "[[ -f ${_TMP_FILE} ]] && rm -f ${_TMP_FILE} >/dev/null 2>&1; return 1" 1 2 3 15 # handle arguments (originally comma-separated) @@ -65,13 +66,13 @@ do case "${_ARG}" in help) _show_usage $0 ${_VERSION} ${_CONFIG_FILE} && return 0 - ;; + ;; esac done # handle configuration file [[ -n "${ARG_CONFIG_FILE}" ]] && _CONFIG_FILE="${ARG_CONFIG_FILE}" -if [[ ! -r ${_CONFIG_FILE} ]] +if [[ ! -r ${_CONFIG_FILE} ]] then warn "unable to read configuration file at ${_CONFIG_FILE}" return 1 @@ -88,7 +89,7 @@ case "${_DO_SSA_CTRL}" in 0|1) # on/off, OK ;; - *) + *) # set default warn "illegal value for 'do_ssa_controller' in ${_CONFIG_FILE}, using default" _DO_SSA_CTRL=1 @@ -99,7 +100,7 @@ case "${_DO_SSA_ENCL}" in 0|1) # on/off, OK ;; - *) + *) # set default warn "illegal value for 'do_ssa_enclosure' in ${_CONFIG_FILE}, using default" _DO_SSA_ENCL=1 @@ -110,7 +111,7 @@ case "${_DO_SSA_PHYS}" in 0|1) # on/off, OK ;; - *) + *) # set default warn "illegal value for 'do_ssa_physical' in ${_CONFIG_FILE}, using default" _DO_SSA_PHYS=1 @@ -121,7 +122,7 @@ case "${_DO_SSA_LOGL}" in 0|1) # on/off, OK ;; - *) + *) # set default warn "illegal value for 'do_ssa_logical' in ${_CONFIG_FILE}, using default" _DO_SSA_LOGL=1 @@ -137,7 +138,7 @@ then fi # check for HP tools -if [[ ! -x ${_HPSSACLI_BIN} || -z "${_HPSSACLI_BIN}" ]] +if [[ ! -x ${_HPSSACLI_BIN} || -z "${_HPSSACLI_BIN}" ]] then warn "${_HPSSACLI_BIN} is not installed here" return 1 @@ -156,7 +157,7 @@ then _MSG="failure in controller" _STC_COUNT=$(( _STC_COUNT + 1 )) # handle unit result - log_hc "$0" 1 "${_MSG}" + log_hc "$0" 1 "${_MSG}" done print "=== SSA controller(s) ===" >>${HC_STDOUT_LOG} cat ${_TMP_FILE} >>${HC_STDOUT_LOG} @@ -173,12 +174,12 @@ then # non-numeric warn "found RAID controller at illegal slot?: ${_SLOT_NUM}" ;; - esac + esac done else warn "${_HPSSACLI_BIN}: do_ssa_controller check is not enabled" fi - + # ENCLOSURE(s) if (( _DO_SSA_ENCL != 0 )) then @@ -195,7 +196,7 @@ then _MSG="failure in enclosure for controller ${_CTRL_SLOT}" _STC_COUNT=$(( _STC_COUNT + 1 )) # handle unit result - log_hc "$0" 1 "${_MSG}" + log_hc "$0" 1 "${_MSG}" done print "=== SSA enclosure(s) ===" >>${HC_STDOUT_LOG} cat ${_TMP_FILE} >>${HC_STDOUT_LOG} @@ -220,15 +221,15 @@ then _MSG="failure in physical drive(s) for controller ${_CTRL_SLOT}" _STC_COUNT=$(( _STC_COUNT + 1 )) # handle unit result - log_hc "$0" 1 "${_MSG}" + log_hc "$0" 1 "${_MSG}" done print "=== SSA physical drive(s) ===" >>${HC_STDOUT_LOG} cat ${_TMP_FILE} >>${HC_STDOUT_LOG} done else warn "${_HPSSACLI_BIN}: do_ssa_physical check is not enabled" -fi - +fi + # LOGICAL DRIVE(s) if (( _DO_SSA_LOGL != 0 )) then @@ -245,14 +246,14 @@ then _MSG="failure in logical drive(s) for controller ${_CTRL_SLOT}" _STC_COUNT=$(( _STC_COUNT + 1 )) # handle unit result - log_hc "$0" 1 "${_MSG}" + log_hc "$0" 1 "${_MSG}" done print "=== SSA logical drive(s) ===" >>${HC_STDOUT_LOG} cat ${_TMP_FILE} >>${HC_STDOUT_LOG} done else warn "${_HPSSACLI_BIN}: do_ssa_logical check is not enabled" -fi +fi # report OK situation if (( _STC_COUNT == 0 )) diff --git a/sources/lib/platform/linux/check_linux_process_limits.sh b/sources/lib/platform/linux/check_linux_process_limits.sh index 674a3ee..d44e750 100644 --- a/sources/lib/platform/linux/check_linux_process_limits.sh +++ b/sources/lib/platform/linux/check_linux_process_limits.sh @@ -66,6 +66,7 @@ typeset _USER_PS_PID="" typeset _USER_PS_COMM="" # set local trap for cleanup +trap "rm -f ${_INSTANCE_RUN_FILE}.* >/dev/null 2>&1; return 0" 0 trap "rm -f ${_INSTANCE_RUN_FILE}.* >/dev/null 2>&1; return 1" 1 2 3 15 # handle arguments (originally comma-separated) @@ -92,7 +93,7 @@ case "${_CFG_HEALTHY}" in _LOG_HEALTHY=1 ;; *) - # do not override hc_arg + # do not override hc_arg (( _LOG_HEALTHY > 0 )) || _LOG_HEALTHY=0 ;; esac @@ -320,14 +321,14 @@ then awk -v f="${_LIMIT_FIELD}" '{ print $f}' 2>/dev/null) _MSG_BIT="${_LIMIT_PID}/${_LIMIT_USER}/${_LIMIT_PROCESS}" ;; - "Max processes") + "Max processes") case "${_LIMIT_TYPE}" in soft) _LIMIT_COMMAND="ulimit -a" ;; hard) _LIMIT_COMMAND="ulimit -Ha" - ;; + ;; esac _LIMIT_VALUE=$(su - ${_LIMIT_USER} -c "${_LIMIT_COMMAND}" 2>/dev/null |\ grep -i "max user processes" 2>/dev/null | sed -s "s/max user processes//g" 2>/dev/null |\ @@ -337,8 +338,8 @@ then warn "${_LIMIT_TYPE}: unable to gather limits information (${_LIMIT_USER})" return 1 fi - _MSG_BIT="${_LIMIT_USER}" - ;; + _MSG_BIT="${_LIMIT_USER}" + ;; esac # check limit value -> threshold if [[ "${_LIMIT_VALUE}" = "unlimited" ]] diff --git a/sources/lib/platform/linux/check_linux_sg_cluster_config.sh b/sources/lib/platform/linux/check_linux_sg_cluster_config.sh index a1a9fc4..8d160e2 100644 --- a/sources/lib/platform/linux/check_linux_sg_cluster_config.sh +++ b/sources/lib/platform/linux/check_linux_sg_cluster_config.sh @@ -37,7 +37,7 @@ typeset _VERSION="2018-05-21" # YYYY-MM-DD typeset _SUPPORTED_PLATFORMS="Linux" # uname -s match typeset _SG_DAEMON="/opt/cmcluster/bin/cmcld" # rubbish that cmgetconf outputs to STDOUT instead of STDERR -typeset _SG_CMGETCONF_FILTER="Permission denied|Number of configured" +typeset _SG_CMGETCONF_FILTER="Permission denied|Number of configured" # ------------------------- CONFIGURATION ends here --------------------------- # set defaults @@ -59,6 +59,7 @@ typeset _CLUSTER_PARAM="" typeset _CLUSTER_VALUE="" # set local trap for cleanup +trap "rm -f ${_CLUSTER_RUN_FILE}.* ${_CLUSTER_CFG_FILE}.* >/dev/null 2>&1; return 0" 0 trap "rm -f ${_CLUSTER_RUN_FILE}.* ${_CLUSTER_CFG_FILE}.* >/dev/null 2>&1; return 1" 1 2 3 15 # handle arguments (originally comma-separated) @@ -67,13 +68,13 @@ do case "${_ARG}" in help) _show_usage $0 ${_VERSION} ${_CONFIG_FILE} && return 0 - ;; + ;; esac done # handle configuration file [[ -n "${ARG_CONFIG_FILE}" ]] && _CONFIG_FILE="${ARG_CONFIG_FILE}" -if [[ ! -r ${_CONFIG_FILE} ]] +if [[ ! -r ${_CONFIG_FILE} ]] then warn "unable to read configuration file at ${_CONFIG_FILE}" return 1 @@ -92,7 +93,7 @@ then fi # check serviceguard status & gather cluster information from running cluster (compressed lines) -if [[ ! -x ${_SG_DAEMON} ]] +if [[ ! -x ${_SG_DAEMON} ]] then warn "${_SG_DAEMON} is not installed here" return 1 @@ -118,10 +119,10 @@ do BEGIN { found = 0; needle = "^\["cluster"\]" } # skip blank lines - /^\s*$/ { next; } + /^\s*$/ { next; } # skip comment lines - /^#/ { next; } - + /^#/ { next; } + # end marker ( $0 ~ /^\[.*\]/ && found ) { found = 0; @@ -160,7 +161,7 @@ do else _MSG="'${_CLUSTER_PARAM} (${_CLUSTER_VALUE} ...)' is configured for ${_CLUSTER_INSTANCE}" fi - + # handle unit result log_hc "$0" ${_STC} "${_MSG}" _STC=0 diff --git a/sources/lib/platform/linux/check_linux_sg_package_config.sh b/sources/lib/platform/linux/check_linux_sg_package_config.sh index 4ff981d..11bdee1 100644 --- a/sources/lib/platform/linux/check_linux_sg_package_config.sh +++ b/sources/lib/platform/linux/check_linux_sg_package_config.sh @@ -37,7 +37,7 @@ typeset _VERSION="2018-05-21" # YYYY-MM-DD typeset _SUPPORTED_PLATFORMS="Linux" # uname -s match typeset _SG_DAEMON="/opt/cmcluster/bin/cmcld" # rubbish that cmgetconf outputs to STDOUT instead of STDERR -typeset _SG_CMGETCONF_FILTER="Permission denied|Number of configured" +typeset _SG_CMGETCONF_FILTER="Permission denied|Number of configured" # ------------------------- CONFIGURATION ends here --------------------------- # set defaults @@ -59,6 +59,7 @@ typeset _PKG_PARAM="" typeset _PKG_VALUE="" # set local trap for cleanup +trap "rm -f ${_PKG_RUN_FILE}.* ${_PKG_CFG_FILE}.* >/dev/null 2>&1; return 0" 0 trap "rm -f ${_PKG_RUN_FILE}.* ${_PKG_CFG_FILE}.* >/dev/null 2>&1; return 1" 1 2 3 15 # handle arguments (originally comma-separated) @@ -67,13 +68,13 @@ do case "${_ARG}" in help) _show_usage $0 ${_VERSION} ${_CONFIG_FILE} && return 0 - ;; + ;; esac done # handle config file [[ -n "${ARG_CONFIG_FILE}" ]] && _CONFIG_FILE="${ARG_CONFIG_FILE}" -if [[ ! -r ${_CONFIG_FILE} ]] +if [[ ! -r ${_CONFIG_FILE} ]] then warn "unable to read configuration file at ${_CONFIG_FILE}" return 1 @@ -92,7 +93,7 @@ then fi # check serviceguard status & gather package information from running cluster (compressed lines) -if [[ ! -x ${_SG_DAEMON} ]] +if [[ ! -x ${_SG_DAEMON} ]] then warn "${_SG_DAEMON} is not installed here" return 1 @@ -118,10 +119,10 @@ do BEGIN { found = 0; needle = "^\["package"\]" } # skip blank lines - /^\s*$/ { next; } + /^\s*$/ { next; } # skip comment lines - /^#/ { next; } - + /^#/ { next; } + # end marker ( $0 ~ /^\[.*\]/ && found ) { found = 0; @@ -160,13 +161,13 @@ do else _MSG="'${_PKG_PARAM} (${_PKG_VALUE} ...)' is configured for ${_PKG_INSTANCE}" fi - + # handle unit result log_hc "$0" ${_STC} "${_MSG}" _STC=0 done <${_PKG_CFG_FILE}.${_PKG_INSTANCE} done - + # remove working files rm -f ${_PKG_RUN_FILE}.* ${_PKG_CFG_FILE}.* >/dev/null 2>&1 @@ -181,7 +182,7 @@ NAME : $1 VERSION : $2 CONFIG : $3 PURPOSE : Checks the configuration of Serviceguard package parameters (SG 11.16+) - (comparing serialized strings from the HC configuration file to the + (comparing serialized strings from the HC configuration file to the running cluster configuration) EOT