From 1c786259ac2390364473e8c06ff7d33f527a59f9 Mon Sep 17 00:00:00 2001 From: einhverfr Date: Mon, 11 Sep 2006 03:04:47 +0000 Subject: accepted David Ginneken's patch on the setup.pl git-svn-id: https://ledger-smb.svn.sourceforge.net/svnroot/ledger-smb/trunk@64 4979c152-3d1c-0410-bac9-87ea11338e46 --- setup.pl | 638 +++++++-------------------------------------------------------- 1 file changed, 67 insertions(+), 571 deletions(-) (limited to 'setup.pl') diff --git a/setup.pl b/setup.pl index 81d9b244..acceebec 100755 --- a/setup.pl +++ b/setup.pl @@ -20,6 +20,15 @@ # ####################################################################### +# Next bunch of lines are to check to see if they have the cpan module installed. +my $cpan=0; +eval { + use CPAN; +}; +if (!$@){ + $cpan = 1; +} + $| = 1; if ($ENV{HTTP_USER_AGENT}) { @@ -29,552 +38,33 @@ use $0 from the command line"; exit; } -$lynx = `lynx -version`; # if LWP is not installed use lynx -$gzip = `gzip -V 2>&1`; # gz decompression utility -$tar = `tar --version 2>&1`; # tar archiver -$latex = `latex -version`; - -%checkversion = ( www => 3, abacus => 4, pluto => 5, neptune => 8 ); - -%source = ( - 1 => { url => "http://voxel.dl.sourceforge.net/sourceforge/sql-ledger", site => "New York, U.S.A", locale => us }, - 2 => { url => "http://easynews.dl.sourceforge.net/sourceforge/sql-ledger", site => "Arizona, U.S.A", locale => us }, - 3 => { url => "http://www.sql-ledger.com/source", site => "California, U.S.A", locale => us }, - 4 => { url => "http://abacus.sql-ledger.com/source", site => "Toronto, Canada", locale => ca }, - 5 => { url => "http://pluto.sql-ledger.com/source", site => "Edmonton, Canada", locale => ca }, - 6 => { url => "http://ufpr.dl.sourceforge.net/sourceforge/sql-ledger", site =>"Brazil", locale => br }, - 7 => { url => "http://surfnet.dl.sourceforge.net/sourceforge/sql-ledger", site => "The Netherlands", locale => nl }, - 8 => { url => "http://neptune.sql-ledger.com/source", site => "Ireland", locale => ie }, - 9 => { url => "http://kent.dl.sourceforge.net/sourceforge/sql-ledger", site => "U.K", locale => uk }, - 10 => { url => "http://ovh.dl.sourceforge.net/sourceforge/sql-ledger", site => "France", locale => fr }, - 11 => { url => "http://mesh.dl.sourceforge.net/sourceforge/sql-ledger", site => "Germany", locale => de }, - 12 => { url => "http://citkit.dl.sourceforge.net/sourceforge/sql-ledger", site => "Russia", locale => ru }, - 13 => { url => "http://optusnet.dl.sourceforge.net/sourceforge/sql-ledger", site => "Sydney, Australia", locale => au }, - 14 => { url => "http://nchc.dl.sourceforge.net/sourceforge/sql-ledger", site => "Taiwan", locale => tw }, - 15 => { url => "http://jaist.dl.sourceforge.net/sourceforge/sql-ledger", site => "Japan", locale => jp } - ); - -$userspath = "users"; # default for new installation - -eval { require "sql-ledger.conf"; }; - -$filename = shift; -chomp $filename; - -$newinstall = 1; - -# is LWP installed -eval { require LWP::Simple; }; -$lwp = !($@); - -unless ($lwp || $lynx || $filename) { - die "You must have either lynx or LWP installed or specify a filename. -perl $0 \n"; -} - -if ($filename) { - # extract version - die "Not a SQL-Ledger archive\n" if ($filename !~ /^sql-ledger/); - - $version = $filename; - $version =~ s/sql-ledger-(\d+\.\d+\.\d+).*$/$1/; - -} - -if (-f "VERSION") { - # get installed version from VERSION file - open(FH, "VERSION"); - @a = ; - close(FH); - $version = $a[0]; - chomp $version; - - $newinstall = !$version; - - if (! -f "sql-ledger.conf") { - $newinstall = 1; - } -} - -$webowner = "nobody"; -$webgroup = "nogroup"; - -if ($httpd = `find /etc /usr/local/etc -type f -name 'httpd.conf'`) { - chomp $httpd; - $webowner = `grep "^User " $httpd`; - $webgroup = `grep "^Group " $httpd`; - - chomp $webowner; - chomp $webgroup; - - ($null, $webowner) = split / /, $webowner; - ($null, $webgroup) = split / /, $webgroup; - -} - -if ($confd = `find /etc /usr/local/etc -type d -name 'apache*/conf.d'`) { - chomp $confd; -} - -system("tput clear"); - -if ($filename) { - $install = "\ninstall $version from (f)ile\n"; -} - -# check for latest version -&get_latest_version; -chomp $latest_version; - -if (!$newinstall) { - - $install .= "\n(r)einstall $version\n"; - -} - -if ($version && $latest_version) { - if ($version lt $latest_version) { - $install .= "\n(u)pgrade to $latest_version\n"; - } -} - - -$install .= "\n(i)nstall $latest_version (from Internet)\n" if $latest_version; - -$install .= "\n(d)ownload $latest_version (no installation)" unless $filename; - - print qq| - - - LedgerSMB Accounting and ERP Installation - - - -$install - - -Enter: |; - -$a = ; -chomp $a; - -exit unless $a; -$a = lc $a; - -if ($a !~ /d/) { - - print qq|\nEnter httpd owner [$webowner] : |; - $web = ; - chomp $web; - $webowner = $web if $web; - - print qq|\nEnter httpd group [$webgroup] : |; - $web = ; - chomp $web; - $webgroup = $web if $web; - -} - -if ($a ne 'f') { - system("tput clear"); - - # choose site - foreach $item (sort { $a <=> $b } keys %source) { - $i++; - print qq|$i. $source{$item}{site}\n|; - } - - $site = "1"; - - print qq|\nChoose Location [$site] : |; - $b = ; - chomp $b; - $site = $b if $b; -} - -if ($a eq 'd') { - &download; -} -if ($a =~ /(i|u)/) { - &install; -} -if ($a eq 'r') { - $latest_version = $version; - &install; -} -if ($a eq 'f') { - &install; -} - -exit; -# end main - - -sub download { - - &get_source_code; - -} - - -sub get_latest_version { - - print "Checking for latest version number .... "; - - if ($filename) { - print "skipping, filename supplied\n"; - return; - } - - if ($lwp) { - foreach $source (qw(pluto www abacus neptune)) { - $url = $source{$checkversion{$source}}{url}; - print "\n$source{$checkversion{$source}}{site} ... "; - - $latest_version = LWP::Simple::get("$url/latest_version"); - - if ($latest_version) { - last; - } else { - print "not found"; - } - } - } else { - if (!$lynx) { - print "\nYou must have either lynx or LWP installed"; - exit 1; - } - - foreach $source (qw(pluto www abacus neptune)) { - $url = $source{$checkversion{$source}}{url}; - print "\n$source{$checkversion{$source}}{site} ... "; - $ok = `lynx -dump -head $url/latest_version`; - if ($ok = ($ok =~ s/HTTP.*?200 //)) { - $latest_version = `lynx -dump $url/latest_version`; - last; - } else { - print "not found"; - } - } - die unless $ok; - } - - if ($latest_version) { - print "ok\n"; - 1; - } - -} - - -sub get_source_code { - - $err = 0; - - @order = (); - push @order, $site; - - for (sort { $a <=> $b } keys %source) { - push @order, $_; - } - - if ($latest_version) { - # download it - chomp $latest_version; - $latest_version = "sql-ledger-${latest_version}.tar.gz"; - - print "\nStatus\n"; - print "Downloading $latest_version .... "; - - foreach $key (@order) { - print "\n$source{$key}{site} .... "; - - if ($lwp) { - $err = LWP::Simple::getstore("$source{$key}{url}/$latest_version", "$latest_version"); - $err -= 200; - } else { - $ok = `lynx -dump -head $source{$key}{url}/$latest_version`; - $err = !($ok =~ s/HTTP.*?200 //); - - if (!$err) { - $err = system("lynx -dump $source{$key}{url}/$latest_version > $latest_version"); - } - } - - if ($err) { - print "failed!"; - } else { - last; - } - - } - - } else { - $err = -1; - } - - if ($err) { - die "Cannot get $latest_version"; - } else { - print "ok!\n"; - } - - $latest_version; - -} - - -sub install { - - if ($filename) { - $latest_version = $filename; - } else { - $latest_version = &get_source_code; - } - - &decompress; - - if ($newinstall) { - open(FH, "sql-ledger.conf.default"); - @f = ; - close(FH); - unless ($latex) { - grep { s/^\$latex.*/\$latex = 0;/ } @f; - } - open(FH, ">sql-ledger.conf"); - print FH @f; - close(FH); - - $alias = $absolutealias = $ENV{'PWD'}; - $alias =~ s/.*\///g; - - $httpddir = `dirname $httpd`; - if ($confd) { - $httpddir = $confd; - } - chomp $httpddir; - $filename = "sql-ledger-httpd.conf"; - - # do we have write permission? - if (!open(FH, ">>$httpddir/$filename")) { - open(FH, ">$filename"); - $norw = 1; - } - - $directives = qq| -Alias /$alias $absolutealias/ - - AllowOverride All - AddHandler cgi-script .pl - Options ExecCGI Includes FollowSymlinks - Order Allow,Deny - Allow from All - - - - Order Deny,Allow - Deny from All - - -|; - - print FH $directives; - close(FH); - - print qq| -This is a new installation. - -|; - - if ($norw) { - print qq| -Webserver directives were written to $filename - -Copy $filename to $httpddir -|; - - if (!$confd) { - print qq| and add -# SQL-Ledger -Include $httpddir/$filename - -to $httpd -|; - } - - print qq| and restart your webserver!\n|; - - if (!$permset) { - print qq| -WARNING: permissions for templates, users, css and spool directory -could not be set. Login as root and set permissions - -# chown -hR :$webgroup users templates css spool -# chmod 771 users templates css spool - -|; - } - +# Make sure they have the required perl modules installed. +my @req_modules=(qw(DBI + DBD::Pg +)); +foreach my $module(@req_modules){ + print "Checking for: $module ...\t"; + my @results=&check_module($module); + print "$results[1]\n"; + next if($results[0]); # Passed, no need to continue.. + if ($cpan == 1){ + # Can try to install the module.. + print "\n\nWould you like to try and install this package ($module) through CPAN? (Y/N) [Y]:"; + $response=; + if(($response=~/y/i) or ($response eq "\n")){ + my $inst_obj = CPAN::Shell->install($module); + @results=&check_module($module); + if(!$results[0]){ + print "\n\nCould not install $module using CPAN.\n"; + die "Please try to install this module manually\n"; + } } else { - - print qq| -Webserver directives were written to - - $httpddir/$filename -|; - - if (!$confd) { - if (!(`grep "^# SQL-Ledger" $httpd`)) { - - open(FH, ">>$httpd"); - - print FH qq| - -# SQL-Ledger -Include $httpddir/$filename -|; - close(FH); - - } - } - - if (!$>) { - # send SIGHUP to httpd - if ($f = `find /var -type f -name 'httpd.pid'`) { - $pid = `cat $f`; - chomp $pid; - if ($pid) { - system("kill -s HUP $pid"); - } - } - } - } - } - - # if this is not root, check if user is part of $webgroup - if ($>) { - if ($permset = ($) =~ getgrnam $webgroup)) { - `chown -hR :$webgroup users templates css spool`; - chmod 0771, 'users', 'templates', 'css', 'spool'; - `chown :$webgroup sql-ledger.conf`; + die "Please install the $module perl module and retry the setup.\n"; } } else { - # root - `chown -hR 0:0 *`; - `chown -hR $webowner:$webgroup users templates css spool`; - chmod 0771, 'users', 'templates', 'css', 'spool'; - `chown $webowner:$webgroup sql-ledger.conf`; - } - - chmod 0644, 'sql-ledger.conf'; - unlink "sql-ledger.conf.default"; - - &cleanup; - - while ($a !~ /(Y|N)/) { - print qq|\nDisplay README (Y/n) : |; - $a = ; - chomp $a; - $a = ($a) ? uc $a : 'Y'; - - if ($a eq 'Y') { - @args = ("more", "doc/README"); - system(@args); - } - } - -} - - -sub decompress { - - die "Error: gzip not installed\n" unless ($gzip); - die "Error: tar not installed\n" unless ($tar); - - &create_lockfile; - - # ungzip and extract source code - print "Decompressing $latest_version ... "; - - if (system("gzip -df $latest_version")) { - print "Error: Could not decompress $latest_version\n"; - &remove_lockfile; - exit; - } else { - print "done\n"; - } - - # strip gz from latest_version - $latest_version =~ s/\.gz//; - - # now untar it - print "Unpacking $latest_version ... "; - if (system("tar -xf $latest_version")) { - print "Error: Could not unpack $latest_version\n"; - &remove_lockfile; - exit; - } else { - # now we have a copy in sql-ledger - if (system("tar -cf $latest_version -C sql-ledger .")) { - print "Error: Could not create archive for $latest_version\n"; - &remove_lockfile; - exit; - } else { - if (system("tar -xf $latest_version")) { - print "Error: Could not unpack $latest_version\n"; - &remove_lockfile; - exit; - } else { - print "done\n"; - print "cleaning up ... "; - `rm -rf sql-ledger`; - print "done\n"; - } - } - } -} - - -sub create_lockfile { - - if (-d "$userspath") { - open(FH, ">$userspath/nologin"); - close(FH); + # Can't try to install the module.. + die "Please install the $module perl module and retry the setup.\n"; } - -} - - -sub cleanup { - - unlink "$latest_version"; - unlink "$userspath/members.default" if (-f "$userspath/members.default"); - - &remove_lockfile; - -} - - -sub remove_lockfile { unlink "$userspath/nologin" if (-f "$userspath/nologin") }; - - -# -# Web: http://sourceforge.net/projects/ledger-smb/ -# -####################################################################### - -# This script is awaiting rewriting to work with LedgerSMB -# -print "This script should not be used with LedgerSMB in this release.\n\n"; -exit; - -$| = 1; - -if ($ENV{HTTP_USER_AGENT}) { - print " -This does not work yet! -use $0 from the command line"; - exit; } $lynx = `lynx -version`; # if LWP is not installed use lynx @@ -585,21 +75,18 @@ $latex = `latex -version`; %checkversion = ( www => 3, abacus => 4, pluto => 5, neptune => 8 ); %source = ( - 1 => { url => "http://voxel.dl.sourceforge.net/sourceforge/sql-ledger", site => "New York, U.S.A", locale => us }, - 2 => { url => "http://easynews.dl.sourceforge.net/sourceforge/sql-ledger", site => "Arizona, U.S.A", locale => us }, - 3 => { url => "http://www.sql-ledger.com/source", site => "California, U.S.A", locale => us }, - 4 => { url => "http://abacus.sql-ledger.com/source", site => "Toronto, Canada", locale => ca }, - 5 => { url => "http://pluto.sql-ledger.com/source", site => "Edmonton, Canada", locale => ca }, - 6 => { url => "http://ufpr.dl.sourceforge.net/sourceforge/sql-ledger", site =>"Brazil", locale => br }, - 7 => { url => "http://surfnet.dl.sourceforge.net/sourceforge/sql-ledger", site => "The Netherlands", locale => nl }, - 8 => { url => "http://neptune.sql-ledger.com/source", site => "Ireland", locale => ie }, - 9 => { url => "http://kent.dl.sourceforge.net/sourceforge/sql-ledger", site => "U.K", locale => uk }, - 10 => { url => "http://ovh.dl.sourceforge.net/sourceforge/sql-ledger", site => "France", locale => fr }, - 11 => { url => "http://mesh.dl.sourceforge.net/sourceforge/sql-ledger", site => "Germany", locale => de }, - 12 => { url => "http://citkit.dl.sourceforge.net/sourceforge/sql-ledger", site => "Russia", locale => ru }, - 13 => { url => "http://optusnet.dl.sourceforge.net/sourceforge/sql-ledger", site => "Sydney, Australia", locale => au }, - 14 => { url => "http://nchc.dl.sourceforge.net/sourceforge/sql-ledger", site => "Taiwan", locale => tw }, - 15 => { url => "http://jaist.dl.sourceforge.net/sourceforge/sql-ledger", site => "Japan", locale => jp } + 1 => { url => "http://voxel.dl.sourceforge.net/sourceforge/ledger-smb", site => "New York, U.S.A", locale => 'us' }, + 2 => { url => "http://easynews.dl.sourceforge.net/sourceforge/ledger-smb", site => "Arizona, U.S.A", locale => 'us' }, + 3 => { url => "http://ufpr.dl.sourceforge.net/sourceforge/ledger-smb", site =>"Brazil", locale => 'br' }, + 4 => { url => "http://surfnet.dl.sourceforge.net/sourceforge/ledger-smb", site => "The Netherlands", locale => 'nl' }, + 5 => { url => "http://http://kent.dl.sourceforge.net/sourceforge/ledger-smb", site => "U.K", locale => 'uk' }, + 6 => { url => "http://ovh.dl.sourceforge.net/sourceforge/ledger-smb", site => "France", locale => 'fr' }, + 7 => { url => "http://mesh.dl.sourceforge.net/sourceforge/ledger-smb", site => "Germany", locale => 'de' }, + 8 => { url => "http://citkit.dl.sourceforge.net/sourceforge/ledger-smb", site => "Russia", locale => 'ru' }, + 9 => { url => "http://optusnet.dl.sourceforge.net/sourceforge/ledger-smb", site => "Sydney, Australia", locale => 'au' }, + 10 => { url => "http://nchc.dl.sourceforge.net/sourceforge/ledger-smb", site => "Taiwan", locale => 'tw' }, + 11 => { url => "http://jaist.dl.sourceforge.net/sourceforge/ledger-smb", site => "Japan", locale => 'jp' }, + 12 => { url => "http://heanet.dl.sourceforge.net/sourceforge/ledger-smb", site => "Ireland", locale => 'ie' } ); $userspath = "users"; # default for new installation @@ -622,10 +109,10 @@ perl $0 \n"; if ($filename) { # extract version - die "Not a LedgerSMB archive\n" if ($filename !~ /^sql-ledger/); + die "Not a Ledger-SMB archive\n" if ($filename !~ /^ledger-smb/); $version = $filename; - $version =~ s/sql-ledger-(\d+\.\d+\.\d+).*$/$1/; + $version =~ s/ledger-smb-(\d+\.\d+\.\d+).*$/$1/; } @@ -744,19 +231,28 @@ if ($a eq 'd') { &download; } if ($a =~ /(i|u)/) { - &install; + &install_smb; } if ($a eq 'r') { $latest_version = $version; - &install; + &install_smb; } if ($a eq 'f') { - &install; + &install_smb; } exit; # end main +sub check_module{ + my($module)=@_; + eval "use $module"; + if(!$@){ + return 1, "Ok"; + }else{ + return 0, "FAILED",$@; + } +} sub download { @@ -829,7 +325,7 @@ sub get_source_code { if ($latest_version) { # download it chomp $latest_version; - $latest_version = "sql-ledger-${latest_version}.tar.gz"; + $latest_version = "ledger-smb-${latest_version}.tar.gz"; print "\nStatus\n"; print "Downloading $latest_version .... "; @@ -872,7 +368,7 @@ sub get_source_code { } -sub install { +sub install_smb { if ($filename) { $latest_version = $filename; @@ -901,7 +397,7 @@ sub install { $httpddir = $confd; } chomp $httpddir; - $filename = "sql-ledger-httpd.conf"; + $filename = "ledger-smb-httpd.conf"; # do we have write permission? if (!open(FH, ">>$httpddir/$filename")) { @@ -943,7 +439,7 @@ Copy $filename to $httpddir if (!$confd) { print qq| and add -# SQL-Ledger +# Ledger-SMB Include $httpddir/$filename to $httpd @@ -972,13 +468,13 @@ Webserver directives were written to |; if (!$confd) { - if (!(`grep "^# SQL-Ledger" $httpd`)) { + if (!(`grep "^# LedgerSMB" $httpd`)) { open(FH, ">>$httpd"); print FH qq| -# SQL-Ledger +# LedgerSMB Include $httpddir/$filename |; close(FH); @@ -1062,8 +558,8 @@ sub decompress { &remove_lockfile; exit; } else { - # now we have a copy in sql-ledger - if (system("tar -cf $latest_version -C sql-ledger .")) { + # now we have a copy in ledger-smb + if (system("tar -cf $latest_version -C ledger-smb .")) { print "Error: Could not create archive for $latest_version\n"; &remove_lockfile; exit; @@ -1075,7 +571,7 @@ sub decompress { } else { print "done\n"; print "cleaning up ... "; - `rm -rf sql-ledger`; + `rm -rf ledger-smb`; print "done\n"; } } -- cgit v1.2.3