git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/branches/2.7@13148 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			320 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			320 lines
		
	
	
		
			9.6 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
 | |
| 
 | |
| # pmatch determines if 1st argument string is matched by 2nd argument pattern
 | |
| 
 | |
| pmatch ()
 | |
| {
 | |
|   case $1 in
 | |
|     $2) return 0;;  # zero return code means string matched by pattern
 | |
|   esac
 | |
| 
 | |
|   return 1          # non-zero return code means string not matched by pattern
 | |
| }
 | |
| 
 | |
| # is_lsb_ubuntu exit status indicates whether system appears to be Ubuntu.
 | |
| # Using required /etc/lsb-release file, instead of optional lsb_release command.
 | |
| 
 | |
| is_lsb_ubuntu ()
 | |
| {
 | |
|     awk '
 | |
|         (match($0, "^[ \t]*DISTRIB_ID=") == 1) {    # A DISTRIB_ID line
 | |
|             id = substr($0, RLENGTH + 1)            # Save its value
 | |
|         }
 | |
| 
 | |
|         END {
 | |
|             # Examine last DISTRIB_ID value to see if Ubuntu indicated
 | |
| 
 | |
|             if (match(id, "^(Ubuntu|\"Ubuntu\")[ \t]*$") == 1) {
 | |
|                 exit 0    # Ubuntu
 | |
|             }
 | |
|             exit 1        # Not Ubuntu
 | |
|         }
 | |
| 
 | |
|     ' /etc/lsb-release >/dev/null 2>&1
 | |
| 
 | |
|     # Routine exit status is exit status of the last command -- the awk script.
 | |
|     #
 | |
|     #   Note: if /etc/lsb-release does not exist, the exit status indicates
 | |
|     #         failure (not Ubuntu), which is the correct outcome.
 | |
| }
 | |
| 
 | |
| config_Rsyslog_C3()
 | |
| {
 | |
|   isReceiving=0
 | |
|   isLocal=$1
 | |
| 
 | |
|   if [ -f /etc/xCATMN ] ||  [ $isSN -eq 1 ] 
 | |
|   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  
 | |
|   #enable the MN to log all the logs from CN and MN itself
 | |
|        sed 's/\(^[^\#].*\/var\/log\/messages\)/\#\1/g' $2 >/tmp/sed.tmp
 | |
|        cat /tmp/sed.tmp >$2
 | |
|        echo "*.debug  /var/log/messages" >> $2
 | |
|   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 [ "$(uname -s)" = "Linux" ]; then
 | |
|   if ( pmatch $OSVER "fedora*" ) || ( pmatch $OSVER "rhels5*" ) || ( pmatch $OSVER "rhel6*" ) || ( pmatch $OSVER "rhels6*" ) || [ -f /etc/fedora-release ] || [ -f /etc/redhat-release ] || ( pmatch $OSVER "ubuntu*" ) || ( is_lsb_ubuntu ); 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 ( pmatch $OSVER "sles*" ) || ( pmatch $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 ( pmatch $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 ] && [ -e $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 [ -n "$SVLOGLOCAL" ] && [ $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
 | |
|     
 | |
|     #Ubuntu doesn't have sysconfig 
 | |
|     # so configuring the MN to receive UDP connections here.
 | |
|     if ( pmatch $OSVER "ubuntu*" ) || ( is_lsb_ubuntu ); then
 | |
|       egrep \('^\$UDPServerRun 514'\|'^\$ModLoad imudp'\) $conf_file > /dev/null 2>&1;
 | |
|       if [ $? -eq 1 ]; then
 | |
|         echo "\$ModLoad imudp" >> $conf_file;
 | |
|         echo "\$UDPServerRun 514" >> $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
 | |
|       #comment out the line that logs to localhost
 | |
|       sed -i '/destination messages/s/^/#/'  $conf_file
 | |
|       sed -i '/destination(messages)/s/^/#/'  $conf_file
 | |
|       sed -i '/destination warn/s/^/#/'  $conf_file
 | |
|       sed -i '/destination(warn)/s/^/#/'  $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
 | |
|         if ( pmatch $OSVER "ubuntu*" ) || ( is_lsb_ubuntu ); then
 | |
|           echo "\$ModLoad imuxsock" >> $conf_file
 | |
|           echo "*.* @$master" >> $conf_file
 | |
|         else
 | |
|           echo "*.* @$master" >> $conf_file
 | |
|         fi 
 | |
|       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)
 | |
|   i=$RETRY_LIMIT
 | |
|   while :
 | |
|   do
 | |
|       ret=`LC_ALL=C startsrc -s syslogd 2>&1`
 | |
|       if ( pmatch $ret "*PID*" ); then
 | |
|         break
 | |
|       fi
 | |
| 
 | |
|       i=$((i - 1))
 | |
|       if [ $i -gt 0 ]; then
 | |
|           sleep 2
 | |
|       else
 | |
|           break
 | |
|       fi
 | |
|   done
 | |
| else 
 | |
|   $init restart
 | |
| fi
 | |
| 
 | |
| #keep a record
 | |
| logger -t xCAT "Install: syslog setup"
 | |
| exit 0
 |