3 ######################################################################
4 # SQL-Ledger, Accounting Software Installer
5 # Copyright (c) 2002, Dieter Simader
7 # Email: dsimader@sql-ledger.org
8 # Web: http://www.sql-ledger.org
10 #######################################################################
14 if ($ENV{HTTP_USER_AGENT}) {
16 This does not work yet!
17 use $0 from the command line";
21 $lynx = `lynx -version`; # if LWP is not installed use lynx
22 $gzip = `gzip -V 2>&1`; # gz decompression utility
23 $tar = `tar --version 2>&1`; # tar archiver
24 $latex = `latex -version`;
26 @source = ( "http://unc.dl.sourceforge.net/sourceforge/sql-ledger",
27 "http://www.sql-ledger.org/source",
28 "http://abacus.sql-ledger.org/source" );
30 $userspath = "users"; # default for new installation
32 eval { require "sql-ledger.conf"; };
37 eval { require LWP::Simple; };
40 unless ($lwp || $lynx || $filename) {
41 die "You must have either lynx or LWP installed
42 or specify a filename.
48 die "Not a SQL-Ledger archive\n" if ($filename !~ /^sql-ledger/);
51 $version =~ s/sql-ledger-(\d+\.\d+\.\d+).*$/$1/;
56 if (!$filename && -f "VERSION") {
57 # get installed version from VERSION file
64 $newinstall = !$version;
73 if ($httpd = `find /etc /usr/local/etc -type f -name 'httpd.conf'`) {
75 $webowner = `grep "^User " $httpd`;
76 $webgroup = `grep "^Group " $httpd`;
77 $serverroot = `grep "^ServerRoot " $httpd`;
83 ($null, $webowner) = split / /, $webowner;
84 ($null, $webgroup) = split / /, $webgroup;
85 ($null, $serverroot) = split / /, $serverroot;
87 $serverroot =~ s/"//g;
94 $install = "\ninstall $version from (f)ile\n";
97 # check for latest version
102 $install .= "\n(r)einstall $version\n";
106 if ($version && $latest_version) {
107 if (!$filename && $version ne $latest_version) {
108 if (substr($version, 0, rindex($version, ".")) eq substr($latest_version, 0, rindex($latest_version, "."))) {
109 $install .= "\n(u)pgrade to $latest_version\n";
115 $install .= "\n(i)nstall $latest_version (from Internet)\n" if $latest_version;
117 $install .= "\n(d)ownload $latest_version (no installation)" unless $filename;
122 SQL-Ledger Accounting Software Installation
137 if ($newinstall && ($a =~ /(i|r|f)/)) {
139 print qq|\nEnter httpd owner [$webowner] : |;
142 $webowner = $web if $web;
144 print qq|\nEnter httpd group [$webgroup] : |;
147 $webgroup = $web if $web;
158 $latest_version = $version;
180 sub get_latest_version {
182 print "Checking for latest version number .... ";
185 print "skipping, filename supplied\n";
190 foreach $source (@source) {
192 $host =~ s/(\w\/).*/$1/g;
194 print "\nTrying $host ... ";
196 $latest_version = LWP::Simple::get("$source/latest_version");
198 if ($latest_version) {
206 print "\nYou must have either lynx or LWP installed";
210 foreach $source (@source) {
212 $host =~ s/(\w\/).*/$1/g;
214 print "\nTrying $host ... ";
215 $ok = `lynx -dump -head $source/latest_version`;
216 if ($ok = ($ok =~ s/HTTP.*?200 OK//g)) {
217 $latest_version = `lynx -dump $source/latest_version`;
218 chomp $latest_version;
227 chomp $latest_version;
228 if ($latest_version) {
236 sub get_source_code {
240 if ($latest_version) {
242 $latest_version = "sql-ledger-${latest_version}.tar.gz";
245 print "Downloading $latest_version .... ";
247 foreach $source (@source) {
249 $host =~ s/(\w\/).*/$1/g;
251 print "\nTrying $host .... ";
254 $err = LWP::Simple::getstore("$source/$latest_version", "$latest_version");
257 $ok = `lynx -dump -head $source/$latest_version`;
258 $err = !($ok =~ s/HTTP.*?200 OK//);
261 $err = system("lynx -dump $source/$latest_version > $latest_version");
274 die "Cannot get $latest_version";
287 $latest_version = $filename;
289 $latest_version = &get_source_code;
297 Don't forget to upgrade the datasets!
299 Load the admin panel in your web browser
304 # if this is not root, check if user is part of $webgroup
306 if ($permset = ($) =~ getgrnam $webgroup)) {
307 `chown -R :$webgroup *`;
310 `chown -R $webowner:$webgroup *`;
313 chmod 0771, 'users', 'templates';
315 open(FH, "sql-ledger.conf.default");
319 grep { s/^\$latex.*/\$latex = 0;/ } @f;
321 open(FH, ">sql-ledger.conf");
325 $alias = $absolutealias = $ENV{'PWD'};
328 $httpddir = `dirname $httpd`;
330 $filename = "sql-ledger-httpd.conf";
332 # do we have write permission?
333 if (!open(FH, ">>$httpddir/$filename")) {
334 open(FH, ">$filename");
339 Alias /$alias/ $absolutealias/
340 <Directory $absolutealias>
342 AddHandler cgi-script .pl
343 Options ExecCGI Includes FollowSymlinks
348 <Directory $absolutealias/users>
355 print FH $directives;
359 This is a new installation.
365 Webserver directives were written to $filename
367 Copy $filename to $httpddir and add
370 # strip serverroot off httpddir
371 $httpddir =~ s/$serverroot\///;
374 Include $httpddir/$filename
378 Don't forget to restart your webserver!
383 WARNING: permissions for templates and users directory
384 could not be set. Login as root and set permissions
386 # chown $webowner:$webgroup users templates
387 # chmod 771 users templates
394 if (!(`grep "^# SQL-Ledger" $httpd`)) {
395 # append Include directive
396 $httpddir =~ s/$serverroot\///;
398 open(FH, ">>$httpd");
403 Include $httpddir/$filename
408 Webserver directives were written to
416 # send SIGHUP to httpd
417 $pid = `cat /var/run/httpd.pid`;
419 system("kill -s HUP $pid") if $pid;
423 unlink "sql-ledger.conf.default";
427 while ($a !~ /(Y|N)/) {
428 print qq|\nDisplay README (Y/n) : |;
431 $a = ($a) ? uc $a : 'Y';
434 @args = ("more", "doc/README");
444 die "Error: gzip not installed\n" unless ($gzip);
445 die "Error: tar not installed\n" unless ($tar);
449 # ungzip and extract source code
450 print "Decompressing $latest_version ... ";
452 if (system("gzip -df $latest_version")) {
453 print "Error: Could not decompress $latest_version\n";
460 # strip gz from latest_version
461 $latest_version =~ s/\.gz//;
464 print "Unpacking $latest_version ... ";
465 if (system("tar -xf $latest_version")) {
466 print "Error: Could not unpack $latest_version\n";
470 # now we have a copy in sql-ledger
471 if (system("tar -cf $latest_version -C sql-ledger .")) {
472 print "Error: Could not create archive for $latest_version\n";
476 if (system("tar -xf $latest_version")) {
477 print "Error: Could not unpack $latest_version\n";
482 print "cleaning up ... ";
491 sub create_lockfile {
493 if (-d "$userspath") {
494 open(FH, ">$userspath/nologin");
504 unlink "$latest_version";
505 unlink "$userspath/members.default" if (-f "$userspath/members.default");
512 sub remove_lockfile { unlink "$userspath/nologin" if (-f "$userspath/nologin") };
517 $latest_version = &get_patch;
523 # if this is not root, check if user is part of $webgroup
525 if ($permset = ($) =~ getgrnam $webgroup)) {
526 `chown -R :$webgroup *`;
529 `chown -R $webowner:$webgroup *`;
532 chmod 0771, 'users', 'templates';
537 Don't forget to upgrade your datasets and read
538 the upgrade file in the doc directory.
552 $patchfile = "patch-${latest_version}.tar.gz";
555 print "Downloading $patchfile .... ";
557 foreach $source (@source) {
559 $host =~ s/(\w\/).*/$1/g;
561 print "\nTrying $host .... ";
564 $err = LWP::Simple::getstore("$source/$patchfile", "$patchfile");
567 $ok = `lynx -dump -head $source/$patchfile`;
568 $err = !($ok =~ /HTTP.*?200 OK/);
571 $err = system("lynx -dump $source/$patchfile > $patchfile");
584 print "Cannot get $patchfile\n";