git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@1190 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			171 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			171 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env perl
 | 
						|
# 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=$ENV{MASTER};
 | 
						|
 | 
						|
#find syslog configuration files
 | 
						|
my $conf_file="/etc/syslog.conf";
 | 
						|
my $sysconfig="/etc/sysconfig/syslog";
 | 
						|
my $param="SYSLOGD_OPTIONS";
 | 
						|
my $init="/etc/init.d/syslog";
 | 
						|
my $ng=0;
 | 
						|
my $isSN=0;
 | 
						|
 | 
						|
if ($ENV{NTYPE} && ($ENV{NTYPE} =~ /service/i)) { $isSN=1; }
 | 
						|
 | 
						|
if ($^O =~ /^aix/i) {
 | 
						|
  $sysconfig="";  #AIX does not have this file
 | 
						|
  $init="";
 | 
						|
}
 | 
						|
elsif (($ENV{OSVER} && ($ENV{OSVER} =~ /fedora/i)) || (-f "/etc/fedora-release")) {
 | 
						|
  if (-e "/etc/rsyslog.conf") {
 | 
						|
    $conf_file="/etc/rsyslog.conf";
 | 
						|
    $sysconfig="/etc/sysconfig/rsyslog";
 | 
						|
    $init="/etc/init.d/rsyslog";
 | 
						|
  }
 | 
						|
} elsif (($ENV{OSVER} && ($ENV{OSVER} =~ /sles|suse/i)) || (-f "/etc/SuSE-release")) { 
 | 
						|
  #find out which syslog is used for SLES, syslog or syslog-ng
 | 
						|
  $result=`grep "^SYSLOG_DAEMON=" $sysconfig 2>&1`;
 | 
						|
  if ($result) {
 | 
						|
    if ($result =~ /syslog-ng/) {
 | 
						|
      $conf_file="/etc/syslog-ng/syslog-ng.conf";
 | 
						|
      $ng=1;
 | 
						|
    }
 | 
						|
  } 
 | 
						|
}
 | 
						|
 | 
						|
#handle sysconfig file to make remote loggling possible
 | 
						|
if (($sysconfig) && (-e $sysconfig)) { 
 | 
						|
  if (! -f "$sysconfig.XCATORIG") {
 | 
						|
    `cp -f $sysconfig $sysconfig.XCATORIG`;
 | 
						|
  }
 | 
						|
  open(FILE1, "<$sysconfig");
 | 
						|
  open(FILE2, ">$sysconfig.tmp");
 | 
						|
  while (readline(FILE1)) {
 | 
						|
    if (/^$param=/) {
 | 
						|
      if (-e "/etc/xCATMN") {
 | 
						|
        #on MN: make the syslogd be able to receive remote logs 
 | 
						|
	if ($_ !~ /-r/) { s/$param=\"/$param=\"-r /; }
 | 
						|
      } elsif ($isSN) {
 | 
						|
        #on SN: make the syslog be able to receive and forward remote logs
 | 
						|
	if ($_ !~ /-h/) { s/$param=\"/$param=\"-h /; }
 | 
						|
	if ($_ !~ /-r/) { s/$param=\"/$param=\"-r /; }
 | 
						|
      }
 | 
						|
      #turn off the time marker on all 
 | 
						|
      if ($_ !~ /-m0|-m 0/) { s/$param=\"/$param=\"-m 0 /; }
 | 
						|
    }
 | 
						|
    print FILE2 $_;
 | 
						|
  }
 | 
						|
  close(FILE1);
 | 
						|
  close(FILE2);
 | 
						|
  `mv -f $sysconfig.tmp $sysconfig`;   
 | 
						|
}
 | 
						|
 | 
						|
#syslog-ng has different way of enabling log forwarding
 | 
						|
if (($ng) && ($isSN)) {
 | 
						|
  if (! -f "$conf_file.XCATORIG") {
 | 
						|
    `cp -f $conf_file $conf_file.XCATORIG`;
 | 
						|
  }
 | 
						|
  open(FILE1, "<$conf_file");
 | 
						|
  open(FILE2, ">$conf_file.tmp");
 | 
						|
  while (readline(FILE1)) {
 | 
						|
    s/\#udp\(ip\(\"0.0.0.0/udp\(ip\(\"0.0.0.0/;
 | 
						|
    print FILE2 $_;
 | 
						|
  }
 | 
						|
  close(FILE1);
 | 
						|
  close(FILE2);
 | 
						|
  `mv -f $conf_file.tmp $conf_file`;   
 | 
						|
} 
 | 
						|
 | 
						|
#now handling where the logs go
 | 
						|
my $goLocal=0;
 | 
						|
if (-e "/etc/xCATMN") {
 | 
						|
  $goLocal=1;
 | 
						|
} elsif ($isSN) {
 | 
						|
  $::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
 | 
						|
  require "$::XCATROOT/lib/perl/xCAT/Table.pm";
 | 
						|
  my $sitetab = xCAT::Table->new('site');
 | 
						|
  if ($sitetab) {
 | 
						|
    (my $ref) = $sitetab->getAttribs({key => 'svloglocal'}, value);
 | 
						|
     if ($ref and $ref->{value})   {
 | 
						|
	 if ($ref->{value} == 1) { $goLocal=1;}
 | 
						|
     }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
if ($goLocal) {
 | 
						|
  #making sure all the messages goes to /var/log/messages
 | 
						|
  `touch  /var/log/messages`; #log file must exist first
 | 
						|
  if (!$ng) {
 | 
						|
    if (! -f "$conf_file.XCATORIG") {
 | 
						|
      `cp -f $conf_file $conf_file.XCATORIG`;
 | 
						|
    }
 | 
						|
    `grep "xCAT settings" $conf_file`;
 | 
						|
    if ($?) {
 | 
						|
      if ($^O =~ /aix/i) {
 | 
						|
        `echo "\# xCAT settings" >> $conf_file`;
 | 
						|
        `echo "*.debug;*.crit;*.err;*.warning   /var/log/messages  rotate 1024K files 5" >> $conf_file`;
 | 
						|
      } 
 | 
						|
      #else {
 | 
						|
      #  `echo "\# xCAT settings" >> $conf_file`;
 | 
						|
      #  `echo "*.debug;*.crit;*.err;*.warning   /var/log/messages" >> $conf_file`;
 | 
						|
      #}
 | 
						|
    }
 | 
						|
  }
 | 
						|
}  else {
 | 
						|
  #now make the syslogd fowarding the messages to the the master
 | 
						|
  if ($ng) {
 | 
						|
    if (! -f "$conf_file.XCATORIG") {
 | 
						|
      `cp -f $conf_file $conf_file.XCATORIG`;
 | 
						|
    }
 | 
						|
    `grep "xCAT settings" $conf_file`;
 | 
						|
    if ($?) {
 | 
						|
      `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") {  `rm -f $conf_file`; }
 | 
						|
    else {  `mv -f $conf_file $conf_file.XCATORIG`;  }
 | 
						|
    `echo "\# xCAT settings" > $conf_file`;
 | 
						|
    `echo "*.* \@$master" > $conf_file`;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
#restart the syslog daemon to take the new conf file settings
 | 
						|
#print "init=$init\nconf_file=$conf_file\nsysconfig=$sysconfig\n";
 | 
						|
if ($^O =~ /aix/i) { `refresh -s syslogd`; }
 | 
						|
else {  `$init restart`; }
 | 
						|
 | 
						|
#keep a record
 | 
						|
`logger -t xcat "Install: syslog setup"`;
 | 
						|
 | 
						|
exit 0
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 |