201 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			201 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/perl
 | 
						|
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
 | 
						|
#(C)IBM Corp
 | 
						|
 | 
						|
#
 | 
						|
 | 
						|
#-----------------------------------------------------------------------------
 | 
						|
 | 
						|
=head1   odbcsetup 
 | 
						|
 | 
						|
 This postscript sets up the odbc for the database running on the Client 
 | 
						|
 machine usually the Service Node.
 | 
						|
 The xCAT service node client and the DB client should have already been
 | 
						|
 installed on the node, before this postscript is run. 
 | 
						|
=cut
 | 
						|
 | 
						|
#-----------------------------------------------------------------------------
 | 
						|
 | 
						|
BEGIN
 | 
						|
{
 | 
						|
    $::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
 | 
						|
}
 | 
						|
 | 
						|
# if AIX - make sure we include perl 5.8.2 in INC path.
 | 
						|
#       Needed to find perl dependencies shipped in deps tarball.
 | 
						|
if ($^O =~ /^aix/i) {
 | 
						|
	unshift(@INC, qw(/usr/opt/perl5/lib/5.8.2/aix-thread-multi /usr/opt/perl5/lib/5.8.2 /usr/opt/perl5/lib/site_perl/5.8.2/aix-thread-multi /usr/opt/perl5/lib/site_perl/5.8.2));
 | 
						|
}
 | 
						|
 | 
						|
use lib "$::XCATROOT/lib/perl";
 | 
						|
use strict;
 | 
						|
use xCAT::Utils;
 | 
						|
use xCAT::MsgUtils;
 | 
						|
 | 
						|
# MAIN
 | 
						|
 | 
						|
my $rc  = 0;
 | 
						|
my $cmd;
 | 
						|
 | 
						|
# setup some important variable
 | 
						|
 | 
						|
$::sdate = `/bin/date`;
 | 
						|
chomp $::sdate;
 | 
						|
 | 
						|
 | 
						|
my $msg;
 | 
						|
# get location of database
 | 
						|
$::databaseloc = $ENV{'DATABASELOC'};
 | 
						|
# check the /etc/xcat/cfgloc file to see if MySQL or DB2
 | 
						|
# if it is not here,  error out
 | 
						|
my $dbname = xCAT::Utils->get_DBName;
 | 
						|
if ($dbname eq "DB2")
 | 
						|
{
 | 
						|
    $msg = "odbcsetup:Setting up ODBC for DB2";
 | 
						|
    `logger -t xcat -p local4.info $msg`;
 | 
						|
    &setupdb2odbc;
 | 
						|
 | 
						|
}
 | 
						|
else
 | 
						|
{
 | 
						|
    if ($dbname eq "MYSQL")
 | 
						|
    {
 | 
						|
        $msg = "odbcsetup:Setting up ODBC for MYSQL";
 | 
						|
        `logger -t xcat -p local4.info $msg`;
 | 
						|
        &setupmysqlodbc;
 | 
						|
    }
 | 
						|
    else {
 | 
						|
      if ($dbname eq "PG")
 | 
						|
      {
 | 
						|
        $msg = "odbcsetup:Setting up ODBC for PostgreSQL";
 | 
						|
        `logger -t xcat -p local4.info $msg`;
 | 
						|
        &setupPGodbc;
 | 
						|
      } else {
 | 
						|
        $msg =
 | 
						|
          "odbcsetup:cfgloc file does not contain MySQL, DB2 or PG,  will not setup ODBC.";
 | 
						|
        `logger -t xcat -p local4.err  $msg`;
 | 
						|
        exit 1;
 | 
						|
      }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
exit 0;
 | 
						|
 | 
						|
#
 | 
						|
# Subroutines
 | 
						|
#
 | 
						|
 | 
						|
#####################################################
 | 
						|
#
 | 
						|
# setupdb2odbc
 | 
						|
#     runs the db2sqlsetup script and sets up the ODBC on the Client
 | 
						|
#
 | 
						|
#####################################################
 | 
						|
sub setupdb2odbc
 | 
						|
{
 | 
						|
    my $msg;
 | 
						|
    my $rc = 0;
 | 
						|
    my $cmd;
 | 
						|
    my $filename = "/etc/xcat/cfgloc";
 | 
						|
 | 
						|
    # get the info
 | 
						|
    my $xcatcfg;
 | 
						|
    my $cfgl;
 | 
						|
    open($cfgl, "<", $filename);
 | 
						|
    $xcatcfg = <$cfgl>;
 | 
						|
    close($cfgl);
 | 
						|
    chomp $xcatcfg;
 | 
						|
    my ($database, $instance, $password) = split('\|', $xcatcfg);
 | 
						|
    if ($::databaseloc) {
 | 
						|
      $cmd = "DATABASELOC=$::databaseloc $::XCATROOT/bin/db2sqlsetup -o -C";
 | 
						|
    } else {
 | 
						|
      $cmd = "$::XCATROOT/bin/db2sqlsetup -o -C";
 | 
						|
    }
 | 
						|
    $msg = "odbcsetup: Running Client ODBC setup. \"$cmd\"\n";
 | 
						|
    `logger -t xcat -p local4.info $msg`;
 | 
						|
 | 
						|
    $rc = &runcmd($cmd);
 | 
						|
 | 
						|
    $msg = "odbcsetup: Client ODBC setup finished.\n";
 | 
						|
    `logger -t xcat -p local4.info  $msg`;
 | 
						|
 | 
						|
    return $rc;
 | 
						|
 | 
						|
}
 | 
						|
#####################################################
 | 
						|
#
 | 
						|
# setupmysqlodbc
 | 
						|
#     runs the mysqlsetup script and sets up the ODBC on the Client
 | 
						|
#
 | 
						|
#####################################################
 | 
						|
sub setupmysqlodbc
 | 
						|
{
 | 
						|
    my $msg;
 | 
						|
    my $rc = 0;
 | 
						|
    my $cmd;
 | 
						|
    $cmd = "$::XCATROOT/bin/mysqlsetup -o";
 | 
						|
    $msg = "odbcsetup: Running Client ODBC setup. \"$cmd\"\n";
 | 
						|
    `logger -t xcat -p local4.info $msg`;
 | 
						|
 | 
						|
    $rc = &runcmd($cmd);
 | 
						|
 | 
						|
    $msg = "odbcsetup: Client ODBC setup finished.\n";
 | 
						|
    `logger -t xcat -p local4.info $msg`;
 | 
						|
 | 
						|
    return $rc;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
#####################################################
 | 
						|
#
 | 
						|
# setupPGodbc
 | 
						|
#     runs the pgsqlsetup script and sets up the ODBC on the Client
 | 
						|
#
 | 
						|
#####################################################
 | 
						|
sub setupPGodbc
 | 
						|
{
 | 
						|
    my $msg;
 | 
						|
    my $rc = 0;
 | 
						|
    my $cmd;
 | 
						|
    $cmd = "$::XCATROOT/bin/pgsqlsetup -o";
 | 
						|
    $msg = "odbcsetup: Running Client ODBC setup. \"$cmd\"\n";
 | 
						|
    `logger -t xcat -p local4.info $msg`;
 | 
						|
 | 
						|
    $rc = &runcmd($cmd);
 | 
						|
 | 
						|
    $msg = "odbcsetup: Client ODBC setup finished.\n";
 | 
						|
    `logger -t xcat -p local4.info $msg`;
 | 
						|
 | 
						|
    return $rc;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
#
 | 
						|
# run the command
 | 
						|
#
 | 
						|
sub runcmd
 | 
						|
{
 | 
						|
    my ($cmd) = @_;
 | 
						|
    my $rc = 0;
 | 
						|
 | 
						|
    $cmd .= ' 2>&1';
 | 
						|
 | 
						|
    # my $outref = [];
 | 
						|
    # @$outref = `$cmd`;
 | 
						|
 | 
						|
    $::outref = [];
 | 
						|
    $::outref = `$cmd`;
 | 
						|
    if ($?)
 | 
						|
    {
 | 
						|
        $rc = $? >> 8;
 | 
						|
        if ($rc > 0)
 | 
						|
        {
 | 
						|
            my $msg = "odbcsetup:\"$cmd\" returned rc=$rc \"$::outref\"\n";
 | 
						|
            print $msg;
 | 
						|
            `logger -t xcat -p local4.err $msg`;
 | 
						|
            return 1;
 | 
						|
        }
 | 
						|
    }
 | 
						|
    return 0;
 | 
						|
}
 |