# # LRZ prerequisite checker for globus workshop # #----------- list of packages which are to be checked %check = ( 'java' => { 'vmin' => '1.4.2', 'vcheck' => 'java -version', 'vaccept' => '(java [Vv]ersion.{0,2}1\.4\.[2-9].*)|(java [Vv]ersion.{0,2}1\.[5-9].*)|(java [Vv]ersion.{0,2}[2-9]\..*)' }, 'ant' => { 'vmin' => '1.5.1', 'vcheck' => 'ant -version', 'vaccept' => '([Vv]ersion 1\.5\.[1-9].*)|([Vv]ersion 1\.[6-9].*)|([Vv]ersion [2-9]\..*)' }, 'gcc' => { 'vmin' => '3.3', 'vcheck' => 'gcc --version', 'vaccept' => '(gcc.{0,7}3\.[3-9].*)|(gcc.{0,7}[4-9].*)' }, 'gtar' => { 'vmin' => '2.4', 'vcheck' => 'tar --version', 'vaccept' => '(tar \(GNU tar\) 1\.15\.[1-9][0-9]*)|(tar \(GNU tar\) 1\.1[6-9]*)|(tar \(GNU tar\) 1\.[2-9][0-9].*)|(tar \(GNU tar\) 1\.[1-9][0-9]{2}.*)|(tar \(GNU tar\) [2-9].*)' }, 'sed' => { 'vmin' => '3.02', 'vcheck' => 'sed --version', 'vaccept' => '(.*sed [Vv]ersion 3\.0[2-9])|(.*sed [Vv]ersion 3\.[1-9][0-9].*)|(.*sed [Vv]ersion [4-9].*)' }, 'zlib' => { 'vmin' => '1.1.4', 'vcheck' => 'bzip2 -h', 'vaccept' => '(.*Version.*)' }, 'gmake' => { 'vmin' => '3.74', 'vcheck' => 'make --version', 'vaccept' => '(GNU Make.{0,9} 3\.7[5-9].*)|(GNU Make.{0,9} 3\.[8-9][0-9].*)|(GNU Make.{0,9} 3\.[1-9][0-9]{2}.*)|(GNU Make.{0,9} [4-9].*)' }, 'sudo' => { 'vmin' => '1.6.7', 'vcheck' => 'sudo -V', 'vaccept' => '(Sudo [Vv]ersion 1\.6\.[7-9])|(Sudo [Vv]ersion 1\.6\.[1-9][0-9].*)|(Sudo [Vv]ersion 1\.[7-9].*)|(Sudo [Vv]ersion 1\.[1-9][0-9].*)|(Sudo [Vv]ersion [2-9].*)' }, 'wget' => { 'vmin' => '1.8.2', 'vcheck' => 'wget --version', 'vaccept' => '(GNU Wget 1\.8\.[2-9].*)|(GNU Wget 1\.8\.[1-9][0-9].*)|(GNU Wget 1\.8\.[1-9][0-9].*)|(GNU Wget 1\.9.*)|(GNU Wget 1\.[1-9][0-9].*)|(GNU Wget [2-9].*)' }, 'postgres' => { 'vmin' => '7.1', 'vcheck' => 'postgres --version', 'vaccept' => '(postgres \(PostgreSQL\) 7\.[1-9].*)|(postgres \(PostgreSQL\) [8-9].*)|(postgres \(PostgreSQL\) [1-9][0-9].*)' }, 'perl' => { 'vmin' => '5.005', 'vcheck' => 'perl --version', 'vaccept' => '(perl.{0,11}5\.00[5-9].*)|(perl.{0,11}5\.0[1-9].*)|(perl.{0,11}5\.[1-9].*)|(perl.{0,3}6.*)' } ); #---------- run version checks, print all to stdout if ($ARGV[0]) { print "-"x80; print "\n"; } $java15=0; $ant16=0; foreach $package (keys %check) { if ($ARGV[0]) { print "checking $package; command: $check{$package}{'vcheck'}\n"; } else { print "checking $package...\n"; } open (IN, "$check{$package}{'vcheck'} 2>&1 |"); $check{$package}{'ok'} = 0; while () { if (m/.*$check{$package}{'vaccept'}.*/) { $check{$package}{'ok'} = 1; $check{$package}{'vinfo'} = $1; } if ($ARGV[0]) { print "$_"; } # this is special for java and ant if ($package eq "java") { if (m/.*(java version.{0,2}1\.[5-9].*)|(java version.{0,2}[2-9]\..*).*/) { $java15=1; } } elsif ($package eq "ant") { if (m/.*(version 1\.6\.[1-9].*)|(version 1\.[7-9].*)|(version [2-9]\..*).*/) { $ant16=1; } } # end: this is special for java and ant } if ($ARGV[0]) { print "-"x80; print "\n"; } } #---------- print results print "\n", "="x50, "\nRESULT:\n"; print " package min. version OK?\n"; print "-"x50; print "\n"; foreach $package (keys %check) { printf "%15s %14s %8s\t%s\n", $package, ">= $check{$package}{'vmin'}", $check{$package}{'ok'}>0?"yes":"NO"; } if ($java15 > 0 && $ant16 == 0 && $check{'ant'}{'ok'} > 0) { print "WARNING: you are using Java >= 1.5 in combination with ant < 1.6.1\n"; print " please upgrade ant to a version >= 1.6.1\n"; } print "="x50, "\n";