#!/bin/sh #---------------------------------------------------------------------------- # /var/install/bin/pre-setup-services-rsyslogd-logfileview-menu # # Creation: 2011-05-08 hbfl # Last Update: $Id$ # # Copyright (c) 2011-2022 the eisfair team, team(at)eisfair(dot)org # # Original: pre-setup-system-logfileview-menu # Modified for rsyslogs package # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. #---------------------------------------------------------------------------- . /var/install/include/eislib . /etc/config.d/rsyslogd #exec 2>/tmp/$(basename ${0})-trace$$.log #set -x # --------------------------------------------------------------------------- # get logfile compression extension from compresscmd in /etc/logrotate.conf # --------------------------------------------------------------------------- get_logfile_comp_extension () { # compresscmd including path compresscmd=$(grep ^compresscmd /etc/logrotate.conf | cut -f2 -d' ') # strip path compresscmd=$(echo $compresscmd | sed "s/.*\///") case "$compresscmd" in 'xz') # xz compression comp_extension='xz' ;; '') # default gzip comp_extension='gz' ;; *) # unknown ;; esac } # --------------------------------------------------------------------------- # get logfile target from rsyslogd config file # --------------------------------------------------------------------------- get_logfile_entry () { show_target='' dyna_file_actions='' # build target list in $show_target idx=1 while [ ${idx} -le ${RSYSLOGD_RULE_N} ] do eval active='${RSYSLOGD_RULE_'${idx}'_ACTIVE}' if [ "${active}" = "yes" ] then eval target='${RSYSLOGD_RULE_'${idx}'_ACTION}' # check actions default is 'false' is_file='false' is_dynafile='false' act_char_1=${target:0:1} act_char_1to2=${target:0:2} case "${act_char_1}" in '|') # | named pipe true ;; '@') # remote host true ;; '~') # discard true ;; '-') # -/ => file or -? => dynafile if [ "$act_char_1to2" = '-?' ] then # dynafile is_dynafile='true' else # file # strip - sign target=${target:1} is_file='true' fi true ;; '/') # / => file # check /dev/ later is_file='true' true ;; '?') # ? => dynafile is_dynafile='true' true ;; '>') # database true ;; '^') # shell execute true ;; *) # user list ;; esac if [ ${is_dynafile} = 'true' ] then if [ -z "${dyna_file_actions}" ] then dyna_file_actions="$idx" else dyna_file_actions="${dyna_file_actions} $idx" fi fi if [ ${is_file} = 'true' ] then # check for devices like /dev/console if echo "${target}" | grep -qv '^/dev/' then if [ -z "${show_target}" ] then show_target="${target}" else show_target="${show_target} ${target}" fi fi fi fi idx=$(/usr/bin/expr ${idx} + 1 ) done echo "dyna_file_actions=$dyna_file_actions" > /tmp/apapap } # --------------------------------------------------------------------------- # create logfile view entry # --------------------------------------------------------------------------- create_logfile_view_menu () { # don't use filename for menu names but use a sub#### idx=1 { for l_file in ${show_target} do l_mesg=$(basename "${l_file}") # don't mask * #l_file=$(echo "${l_file}" | sed 's#\*#\\\*#g') # remove mask l_mesg=$(echo "${l_mesg}" | sed 's#\\##g') echo ""View ${l_mesg}"" echo ""View older ${l_mesg}"" idx=`expr $idx + 1` done # Check for dynafile actions if [ -n "${dyna_file_actions}" ] then for act_action in ${dyna_file_actions} do eval rule_name='${RSYSLOGD_RULE_'${act_action}'_NAME}' [ -n "$rule_name" ] && act_description="$rule_name" || act_description="$act_action" echo ""View files of dynafile rule ${act_description}"" done fi } >> /var/install/menu/setup.services.rsyslogd.logfileview.menu } # --------------------------------------------------------------------------- # create logfile view header # --------------------------------------------------------------------------- create_logfile_view_menu_header () { { echo "Logfile view" echo "rsyslogd" echo "" echo "" } > /var/install/menu/setup.services.rsyslogd.logfileview.menu chmod 0644 /var/install/menu/setup.services.rsyslogd.logfileview.menu } # --------------------------------------------------------------------------- # create sub logfile menu # --------------------------------------------------------------------------- create_sub_logfile_view_menu () { # don't use filename for menu names but use a sub#### idx=1 for l_file in ${show_target} do l_dir=$( dirname "${l_file}" ) l_mesg=$( basename "${l_file}" ) fields=$( expr 1 + $( echo ${l_mesg} | awk -F. '{ print NF }' )) l_file=$( echo "${l_mesg}" | sed 's#\*#\\\*#g' ) logfiles=$( find ${l_dir} -maxdepth 1 -name "${l_file}.*" | sort -t. -n -k${fields} ) logfiles=$( echo "${logfiles}" | sed 's#\*#\\\*#g' ) { # remove mask l_mesg=$(echo "${l_mesg}" | sed 's#\\##g') l_mesg=$(echo "${l_mesg}" | sed 's#\\##g') echo "Logfile ${l_mesg} view" echo "rsyslogd" echo "" echo "" for t_file in ${logfiles} do t_mesg=$(basename "${t_file}") # don't mask * #t_file=$(echo "${t_file}" | sed 's#\*#\\\*#g') # remove mask t_file=$(echo "${t_file}" | sed 's#\\##g') # remove mask t_mesg=$(echo "${t_mesg}" | sed 's#\\##g') echo ""View ${t_mesg}"" done } > /var/install/menu/setup.services.rsyslogd.logfileview.sub${idx}.menu chmod 0644 /var/install/menu/setup.services.rsyslogd.logfileview.sub${idx}.menu idx=`expr $idx + 1` done } # --------------------------------------------------------------------------- # create logfile menues for dynafiles # --------------------------------------------------------------------------- create_logfile_dyn_menues () { # Check for dynafile actions if [ -n "${dyna_file_actions}" ] then for act_action in ${dyna_file_actions} do eval target='${RSYSLOGD_RULE_'${act_action}'_ACTION}' # remove act_char_1=${target:0:1} act_char_1to2=${target:0:2} # strip - sign [ "${act_char_1}" = '-' ] && target=${target:1} # strip question mark target=${target:1} # strip target remove % and all follewing chars target=$(echo ${target} | sed 's/%.*//') # remove chars following the last / target=$(echo ${target} | sed 's/[a-zA-Z0-9_]*$//') # remove slash at end of string target=$(echo ${target} | sed -e 's,/$,,') # compressext .xz files=$(find $target -type f | grep -v "\.${comp_extension}\$" | sort) { echo "Logfile(s) in $target/" echo "rsyslogd" echo "" echo "" for act_file in $files do l_msg=$(echo $act_file | sed "s|^${target}/||") echo ""View $l_msg"" done } > /var/install/menu/setup.services.rsyslogd.logfileview.dyn${act_action}.menu chmod 0644 /var/install/menu/setup.services.rsyslogd.logfileview.dyn${act_action}.menu done fi } # --------------------------------------------------------------------------- # main # --------------------------------------------------------------------------- if [ "${START_RSYSLOGD}" = "yes" ] then get_logfile_comp_extension get_logfile_entry create_logfile_view_menu_header create_logfile_view_menu create_sub_logfile_view_menu create_logfile_dyn_menues else create_logfile_view_menu_header mecho mecho --warn "START_RSYSLOGD => no" mecho anykey fi # --------------------------------------------------------------------------- # end # ---------------------------------------------------------------------------