git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@7757 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			258 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			258 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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
 | |
| isRsyslog=0
 | |
| isC3=0
 | |
| 
 | |
| config_Rsyslog_C3()
 | |
| {
 | |
|   isReceiving=0
 | |
|   isLocal=$1
 | |
| 
 | |
|   if [ -f /etc/xCATMN ] || [ -f /etc/xCATSN ]
 | |
|   then 
 | |
|     isReceiving=1
 | |
|   fi
 | |
| 
 | |
|   if [ ! -f $2.XCATORIG ]; then
 | |
|     cp -f $2 $2.XCATORIG
 | |
|   else
 | |
|     cat $2 > $2.XCATORIG
 | |
|   fi
 | |
| 
 | |
|   grep "xCAT settings" $conf_file 2>&1 1> /dev/null
 | |
|   if [ $? -eq 0 ]; then
 | |
|        sed "/# xCAT settings/,$ d" $2 >/tmp/sed.tmp
 | |
|        cat /tmp/sed.tmp >$2
 | |
|   fi
 | |
| 
 | |
|   echo "# xCAT settings" >> $2
 | |
|   #enable to receive remote logging
 | |
|   if [ $isReceiving -eq 1 ]; then
 | |
|       sed 's/^\#\(\s\)*\$ModLoad\(\s\)*imudp.so/\$ModLoad imudp.so/' $2 >/tmp/sed.tmp
 | |
|       cat /tmp/sed.tmp >$2
 | |
|       sed 's/^\#\(\s\)*\$UDPServerRun/\$UDPServerRun/' $2 >/tmp/sed.tmp
 | |
|       cat /tmp/sed.tmp >$2
 | |
|   fi
 | |
| 
 | |
|   #enable to send the logging to master
 | |
|   if [ $isLocal -eq 1 ]; then
 | |
|        touch  /var/log/messages  
 | |
|   else
 | |
|       sed 's/^\(\*\..*\)/\#\1/' $2 >/tmp/sed.tmp
 | |
|       cat /tmp/sed.tmp >$2
 | |
|       sed 's/^\(news\|local7\|mail\|authpriv\|cron\|kern\)\./\#\1\./' $2 >/tmp/sed.tmp 
 | |
|       cat /tmp/sed.tmp >$2
 | |
|       echo "*.* @$master" >> $2
 | |
|   fi 
 | |
| }
 | |
| 
 | |
| #echo "NTYPE=$NTYPE,OSVER=$OSVER,OSTYPE=$OSTYPE"
 | |
| 
 | |
| if [[ $NTYPE = service ]]; then 
 | |
|   isSN=1
 | |
| fi
 | |
| 
 | |
| if [[ $OSTYPE = linux* ]]; then
 | |
|   if [[ $OSVER = fedora* ]] || [[ $OSVER = rhels5* ]] || [[ $OSVER = rhel6* ]] || [[ $OSVER = rhels6* ]] || [[ -f /etc/fedora-release ]] || [[ -f /etc/redhat-release ]]; then
 | |
|     if [ -e /etc/rsyslog.conf ]; then
 | |
|       conf_file="/etc/rsyslog.conf"
 | |
|       sysconfig="/etc/sysconfig/rsyslog"
 | |
|       init="/etc/init.d/rsyslog"
 | |
|       isRsyslog=1
 | |
|     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
 | |
| 
 | |
|   #check if it is ryslog version 3, it has totally different settings in /etc/syslog.cong
 | |
|   if [ $isRsyslog -eq 1 ]; then
 | |
|     grep "SYSLOGD_OPTIONS" $sysconfig | grep -e "[\-c 3|\-c3|\-c4|\-c 4]" 2>&1 1> /dev/null
 | |
|     if [ $? -eq 0 ]; then
 | |
|       isC3=1
 | |
|     fi
 | |
|   fi
 | |
|   
 | |
|   #no need to change anything for rsyslog version 3 for /etc/sysconf/rsyslog
 | |
|   if [ $isC3 -eq 0 ]; then 
 | |
|     if [ -f /etc/xCATMN ]; then
 | |
|       #on MN: make the syslogd be able to receive remote logs 
 | |
|       awk  '{if($0 ~ /^SYSLOGD_OPTIONS=|^SYSLOGD_PARAMS=/) {
 | |
|             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=|^SYSLOGD_PARAMS=/) {
 | |
|               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=|^SYSLOGD_PARAMS=/) {
 | |
|               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
 | |
| fi  
 | |
| 
 | |
| 
 | |
| #syslog-ng has different way of enabling log forwarding
 | |
| if [ $ng -eq 1 ]; then
 | |
|   if [ $isSN -eq 1 -o -f /etc/xCATMN ]; then
 | |
|     if [ ! -f $conf_file.XCATORIG ];  then
 | |
|        cp -f $conf_file $conf_file.XCATORIG
 | |
|     fi
 | |
|     sed 's/#udp(ip("0.0.0.0/udp(ip("0.0.0.0/' $conf_file >/tmp/sed.tmp
 | |
|     cat /tmp/sed.tmp >$conf_file
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| 
 | |
| 
 | |
| #now handling where the logs go
 | |
| goLocal=0;
 | |
| if [ -f /etc/xCATMN ]; then
 | |
|   goLocal=1
 | |
| else 
 | |
|   if [ $isSN -eq 1 ]; then
 | |
|      if [[ $SVLOGLOCAL -eq 1 ]]; then
 | |
|        goLocal=1  
 | |
|      fi
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| if [ $isC3 -eq 1 ]; then 
 | |
|   config_Rsyslog_C3 $goLocal $conf_file
 | |
| else
 | |
|   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 2>&1 1> /dev/null
 | |
|       if [ $? -eq 0 ]; then
 | |
| 	  sed "/# xCAT settings/,$ d" $conf_file >/tmp/sed.tmp
 | |
|       cat /tmp/sed.tmp >$conf_file
 | |
|       fi
 | |
| 
 | |
|       if [ $isLinux -eq 0 ]; then # aix
 | |
|           echo "# xCAT settings" >> $conf_file
 | |
|           echo "*.debug   /var/log/messages  rotate 1024K files 5" >> $conf_file
 | |
|       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 2>&1 1> /dev/null
 | |
|       if [ $? -eq 0 ]; then
 | |
| 	  sed "/# xCAT settings/,$ d" $conf_file >/tmp/sed.tmp
 | |
|       cat /tmp/sed.tmp >$conf_file
 | |
|       fi
 | |
|       echo "# xCAT settings" >> $conf_file
 | |
|       echo "destination loghost { udp(\"$master\"); };" >> $conf_file
 | |
|       echo 'log { source(src); destination(loghost); };' >> $conf_file
 | |
|     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
 | |
|       if [ $isLinux -eq 0 ]; then
 | |
|         echo "*.debug @$master" >> $conf_file
 | |
|       else
 | |
|         echo "*.* @$master" >> $conf_file
 | |
|       fi
 | |
|     fi
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| #restart the syslog daemon to take the new conf file settings
 | |
| if [ $isLinux -eq 0 ]; then
 | |
|   PARSE_SRC_STATE="-e1d;s/.* \([a-zA-Z0-9]*\)$/\1/"
 | |
|   state=$(LC_ALL=C lssrc -s syslogd | LC_ALL=C sed "$PARSE_SRC_STATE")
 | |
|   if [[ -n "$state" && "$state" = "active" ]];then
 | |
|      stopsrc -s syslogd
 | |
|   fi
 | |
|      
 | |
|   #wait for syslogd to fully started
 | |
|   RETRY_LIMIT=30          # number of 2 second retry intervals (60 second total)
 | |
|   let i=$RETRY_LIMIT
 | |
|   while :
 | |
|   do
 | |
|       ret=`LC_ALL=C startsrc -s syslogd 2>&1`
 | |
|       if [[ $ret == *PID* ]];then
 | |
|         break
 | |
|       fi
 | |
| 
 | |
|       i=$((i - 1))
 | |
|       if (( i > 0 ));then
 | |
|           sleep 2
 | |
|       else
 | |
|           break
 | |
|       fi
 | |
|   done
 | |
| else 
 | |
|   $init restart
 | |
| fi
 | |
| 
 | |
| #keep a record
 | |
| logger -t xCAT "Install: syslog setup"
 | |
| exit 0
 |