#!/bin/sh # IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html #------------------------------------------------------------------------------- #=head1 syslog #=head2 syslog command that setsup the syslogd for MS, SV and nodes. # On MS, it makes sure all the xCAT messages goes to /var/log/messages file, # it enables syslogd receving logs from remote machies. # On MS, it sends all the messages to MS, # it enables syslogd receving logs from remote nodes. # On node, it sends all the messages its master. # Input: none, it takes the following environment variables: # OSVER: possible values are sles10, fedora8, redhat5, aix etc. #=cut #------------------------------------------------------------------------------- master=$MASTER conf_file="/etc/syslog.conf" sysconfig="/etc/sysconfig/syslog" init="/etc/init.d/syslog" ng=0 isSN=0 isLinux=1 #echo "NTYPE=$NTYPE,OSVER=$OSVER,OSTYPE=$OSTYPE" if [[ $NTYPE = service ]]; then isSN=1 fi if [[ $OSTYPE = linux* ]]; then if [[ $OSVER = fedora* ]] || [[ -f /etc/fedora-release ]]; then if [ -e /etc/rsyslog.conf ]; then conf_file="/etc/rsyslog.conf" sysconfig="/etc/sysconfig/rsyslog" init="/etc/init.d/rsyslog" fi else if [[ $$OSVER = sles* ]] || [[ $$OSVER = suse* ]] || [[ -f /etc/SuSE-release ]]; then #find out which syslog is used for SLES, syslog or syslog-ng result=`grep "^SYSLOG_DAEMON=" $sysconfig 2>&1` if [[ $result = *syslog-ng* ]]; then conf_file="/etc/syslog-ng/syslog-ng.conf" ng=1 fi fi fi else sysconfig= #AIX does not have this file isLinux=0; fi #echo "isSN=$isSN, isLinux=$isLinux, ng=$ng" #echo "sysconfig=$sysconfig, confgile=$conf_file" #handle sysconfig file to make remote loggling possible if [ $isLinux -eq 1 ] && [ -a $sysconfig ]; then if [[ ! -f "$sysconfig.XCATORIG" ]]; then cp -f $sysconfig $sysconfig.XCATORIG fi if [ -f /etc/xCATMN ]; then #on MN: make the syslogd be able to receive remote logs awk '{if($0 ~ /^SYSLOGD_OPTIONS=/) { if ($0 !~ /-r/) {sub(/\"$/, " -r\"", $0)} if (($0 !~ /-m0/) && ($0 !~/-m 0/)) { sub(/\"$/, " -m 0\"", $0)} print $0} else { print $0}}' $sysconfig > $sysconfig.tmp else if [ $isSN -eq 1 ]; then #on SN: make the syslog be able to receive and forward remote logs awk '{if($0 ~ /^SYSLOGD_OPTIONS=/) { if ($0 !~ /-r/) {sub(/\"$/, " -r\"", $0)} if ($0 !~ /-h/) {sub(/\"$/, " -h\"", $0)} if (($0 !~ /-m0/) && ($0 !~/-m 0/)) { sub(/\"$/, " -m 0\"", $0)} print $0} else { print $0}}' $sysconfig > $sysconfig.tmp else ##turn off the time marker on all awk '{if($0 ~ /^SYSLOGD_OPTIONS=/) { if (($0 !~ /-m0/) && ($0 !~/-m 0/)) { sub(/\"$/, " -m 0\"", $0)} print $0} else {print $0}}' $sysconfig > $sysconfig.tmp fi fi mv -f $sysconfig.tmp $sysconfig fi #syslog-ng has different way of enabling log forwarding if [ $ng -eq 1 -a $isSN -eq 1 ]; then if [ ! -f $conf_file.XCATORIG ]; then cp -f $conf_file $conf_file.XCATORIG fi sed -i 's/#udp(ip("0.0.0.0/udp(ip("0.0.0.0/' $conf_file fi #now handling where the logs go goLocal=0; if [ -f /etc/xCATMN ]; then goLocal=1 else if [ $isSN -eq 1 ]; then tmp=`tabdump site |grep svloglocal | awk -F , '{print $2}'` if [[ $tmp = "0" ]]; then goLocal=1 fi fi fi if [ $goLocal -eq 1 ]; then #making sure all the messages goes to /var/log/messages touch /var/log/messages if [ $ng -eq 0 ]; then if [ ! -f $conf_file.XCATORIG ]; then cp -f $conf_file $conf_file.XCATORIG fi grep "xCAT settings" $conf_file if [ $? -gt 0 ]; then if [ $isLinux -eq 0 ]; then # aix echo "# xCAT settings" >> $conf_file echo "*.debug;*.crit;*.err;*.warning /var/log/messages rotate 1024K files 5" >> $conf_file fi fi fi else #now make the syslogd fowarding the messages to the the master if [ $ng -eq 1 ]; then if [ ! -f $conf_file.XCATORIG ]; then cp -f $conf_file $conf_file.XCATORIG fi grep "xCAT settings" $conf_file if [ $? -gt 0 ]; then echo "# xCAT settings" >> $conf_file echo "destination loghost { udp(\"$master\"); };" >> $conf_file echo 'log { source(src); destination(loghost); };' >> $conf_file fi else if [ -f $conf_file.XCATORIG ]; then rm -f $conf_file else mv -f $conf_file $conf_file.XCATORIG fi echo "# xCAT settings" > $conf_file echo "*.* @$master" >> $conf_file fi fi #restart the syslog daemon to take the new conf file settings if [ $isLinux -eq 0 ]; then refresh -s syslogd else $init restart fi #keep a record logger -t xcat "Install: syslog setup" exit 0