Author: arkurth
Date: Thu Jun 18 18:19:47 2009
New Revision: 786194

URL: http://svn.apache.org/viewvc?rev=786194&view=rev
Log:
VCL-164
Added bin/install_perl_libs.pl script. It attempts to download and install the 
Perl modules required for vcld to run.

Added:
    incubator/vcl/trunk/managementnode/bin/install_perl_libs.pl

Added: incubator/vcl/trunk/managementnode/bin/install_perl_libs.pl
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/bin/install_perl_libs.pl?rev=786194&view=auto
==============================================================================
--- incubator/vcl/trunk/managementnode/bin/install_perl_libs.pl (added)
+++ incubator/vcl/trunk/managementnode/bin/install_perl_libs.pl Thu Jun 18 
18:19:47 2009
@@ -0,0 +1,147 @@
+#!/usr/bin/perl -w
+##############################################################################
+# $Id: $
+##############################################################################
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+###############################################################################
+
+=head1 NAME
+
+install_perl_libs.pl - Script to install VCL Perl module dependencies
+
+=head1 SYNOPSIS
+
+ perl install_perl_libs.pl
+
+=head1 DESCRIPTION
+
+ This script downloads and installs the Perl modules which are required for the
+ VCL management node code to run.
+ 
+ Module source packages (.tar.gz files) are downloaded to /tmp/perl-modules.
+
+=cut
+
+##############################################################################
+use strict;
+use warnings;
+use diagnostics;
+
+my $download_directory= '/tmp/perl-modules';
+if (-e $download_directory) {
+       #unlink $download_directory;
+}
+mkdir $download_directory;
+
+my @module_urls = (
+       
'http://search.cpan.org/CPAN/authors/id/M/MA/MARKOV/MailTools-2.04.tar.gz',
+       
+       
'http://search.cpan.org/CPAN/authors/id/T/TM/TMTM/Class-Data-Inheritable-0.08.tar.gz',
+       
'http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/Devel-StackTrace-1.20.tar.gz',
+       
'http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/Exception-Class-1.26.tar.gz',
+       
'http://search.cpan.org/CPAN/authors/id/J/JD/JDHEDDEN/Object-InsideOut-3.52.tar.gz',
+       
+       
'http://search.cpan.org/CPAN/authors/id/K/KW/KWILLIAMS/Module-Build-0.30.tar.gz',
+       
'http://search.cpan.org/CPAN/authors/id/H/HA/HACKER/Net-XMPP-1.02.tar.gz',
+       
'http://search.cpan.org/CPAN/authors/id/A/AG/AGROLMS/GSSAPI-0.26.tar.gz',
+       
'http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/Digest-SHA1-2.12.tar.gz',
+       
'http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/Digest-HMAC-1.01.tar.gz',
+       
'http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/Authen-SASL-2.12.tar.gz',
+       
'http://search.cpan.org/CPAN/authors/id/R/RE/REATMON/XML-Stream-1.22.tar.gz',
+       
'http://search.cpan.org/CPAN/authors/id/R/RE/REATMON/Net-Jabber-2.0.tar.gz',
+       
+       'http://search.cpan.org/CPAN/authors/id/I/IN/INGY/YAML-0.68.tar.gz',
+       
+       'http://search.cpan.org/CPAN/authors/id/R/RJ/RJRAY/RPC-XML-0.64.tar.gz',
+       'http://www.cpan.org/modules/by-module/XML/XML-Parser-2.36.tar.gz',
+       'http://www.cpan.org/modules/by-module/Crypt/Crypt-SSLeay-0.57.tar.gz',
+       
+       'http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.609.tar.gz',
+       
+       
'http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/libwww-perl-5.827.tar.gz',
+);
+
+# Loop through each URL
+for my $url (@module_urls) {
+       print "URL: $url\n";
+       
+       my ($module_filename) = $url =~ /([^\/]+)$/;
+       print "Module filename: $module_filename\n";
+       
+       my ($module_name) = $url =~ /([^\/]+)\.tar\.gz$/;
+       print "Module name: $module_name\n";
+       
+       my ($module_package) = $module_name =~ /([^\/]+)-[\d\.]+$/;
+       $module_package =~ s/-/::/g;
+       
+       # Fix module package names
+       if ($module_name =~ /libwww-perl/) {
+               $module_package = "Bundle::LWP";
+       }
+       elsif ($module_name =~ /MailTools/) {
+               $module_package = "Mail::Mailer";
+       }
+       elsif ($module_name =~ /TimeDate/) {
+               $module_package = "Date::Parse";
+       }
+       print "Module package: $module_package\n";
+       
+       if (!module_installed($module_package)) {
+               run_command("rm -rf $download_directory/*$module_name*");
+               run_command("wget --directory-prefix=$download_directory $url");
+               run_command("tar -xzf $download_directory/$module_filename -C 
$download_directory");
+               run_command("cd $download_directory/$module_name && perl 
Makefile.PL");
+               run_command("cd $download_directory/$module_name && make");
+               ##run_command("cd $download_directory/$module_name && make 
test");
+               my $install_exit_status = run_command("cd 
$download_directory/$module_name && make install");
+               if ($install_exit_status ne '0') {
+                       print "$module_name: installation failed, make install 
exit status is $install_exit_status\n";
+                       exit 1;
+               }
+       }
+       
+       print 
"==============================================================================\n";
+}
+
+exit  0;
+
+sub module_installed {
+       my $module_package = shift;
+       
+       print "Checking if $module_package is installed\n";
+       
+       my $output = `perl -M$module_package -e '' 2>&1`;
+       my $exit_status = $? >> 8;
+       
+       if ($output !~ /Can't locate/i) {
+               print "Module is already installed: $module_package\n";
+               return 1;
+       }
+       else {
+               print "Module is NOT already installed: $module_package\n";
+               return 0;
+       }
+}
+
+sub run_command {
+       my $command = shift;
+       
+       #print "--------------------------------------------------\n";
+       print "running command: $command\n";
+       system $command; 
+       my $exit_status = $? >> 8;
+       return $exit_status;
+}


Reply via email to