3 ######################################################################
4 # SQL-Ledger, Accounting Software Installer
5 # Copyright (c) 2002, Dieter Simader
7 # Web: http://www.sql-ledger.org
9 #######################################################################
13 if ($ENV{HTTP_USER_AGENT}) {
15 This does not work yet!
16 use $0 from the command line";
20 $lynx = `lynx -version`; # if LWP is not installed use lynx
21 $gzip = `gzip -V 2>&1`; # gz decompression utility
22 $tar = `tar --version 2>&1`; # tar archiver
23 $latex = `latex -version`;
25 @source = ( "http://www.sql-ledger.org/source",
26 "http://www.sql-ledger.com/source",
27 "http://abacus.sql-ledger.org/source",
28 "http://pluto.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 or specify a filename.
42 perl $0 <filename>\n";
47 die "Not a SQL-Ledger archive\n" if ($filename !~ /^sql-ledger/);
50 $version =~ s/sql-ledger-(\d+\.\d+\.\d+).*$/$1/;
55 if (!$filename && -f "VERSION") {
56 # get installed version from VERSION file
63 $newinstall = !$version;
69 # is this windows? only used for downloading the right code
70 $windows = ($^O =~ /MS/) ? '/windows' : '';
76 if ($httpd = `find /etc /usr/local/etc -type f -name 'httpd.conf'`) {
78 $webowner = `grep "^User " $httpd`;
79 $webgroup = `grep "^Group " $httpd`;
84 ($null, $webowner) = split / /, $webowner;
85 ($null, $webgroup) = split / /, $webgroup;
92 $install = "\ninstall $version from (f)ile\n";
95 # check for latest version
100 $install .= "\n(r)einstall $version\n";
104 if ($version && $latest_version) {
105 if (!$filename && $version le $latest_version) {
106 if (substr($version, 0, rindex($version, ".")) eq substr($latest_version, 0, rindex($latest_version, "."))) {
107 $install .= "\n(u)pgrade to $latest_version\n";
113 $install .= "\n(i)nstall $latest_version (from Internet)\n" if $latest_version;
115 $install .= "\n(d)ownload $latest_version (no installation)" unless $filename;
120 SQL-Ledger Accounting Installation
137 print qq|\nEnter httpd owner [$webowner] : |;
140 $webowner = $web if $web;
142 print qq|\nEnter httpd group [$webgroup] : |;
145 $webgroup = $web if $web;
156 $latest_version = $version;
174 sub get_latest_version {
176 print "Checking for latest version number .... ";
179 print "skipping, filename supplied\n";
184 foreach $source (@source) {
186 $host =~ s/(\w\/).*/$1/g;
188 print "\nTrying $host ... ";
190 $latest_version = LWP::Simple::get("$source/latest_version");
192 if ($latest_version) {
200 print "\nYou must have either lynx or LWP installed";
204 foreach $source (@source) {
206 $host =~ s/(\w\/).*/$1/g;
208 print "\nTrying $host ... ";
209 $ok = `lynx -dump -head $source/latest_version`;
210 if ($ok = ($ok =~ s/HTTP.*?200 OK//g)) {
211 $latest_version = `lynx -dump $source/latest_version`;
212 chomp $latest_version;
221 chomp $latest_version;
222 if ($latest_version) {
230 sub get_source_code {
234 if ($latest_version) {
236 $latest_version = "sql-ledger-${latest_version}.tar.gz";
239 print "Downloading $latest_version .... ";
241 foreach $source (@source) {
243 $host =~ s/(\w\/).*/$1/g;
245 print "\nTrying $host .... ";
248 $err = LWP::Simple::getstore("$source$windows/$latest_version", "$latest_version");
251 $ok = `lynx -dump -head $source$windows/$latest_version`;
252 $err = !($ok =~ s/HTTP.*?200 OK//);
255 $err = system("lynx -dump $source$windows/$latest_version > $latest_version");
268 die "Cannot get $latest_version";
281 $latest_version = $filename;
283 $latest_version = &get_source_code;
289 open(FH, "sql-ledger.conf.default");
293 grep { s/^\$latex.*/\$latex = 0;/ } @f;
295 open(FH, ">sql-ledger.conf");
299 $alias = $absolutealias = $ENV{'PWD'};
302 $httpddir = `dirname $httpd`;
304 $filename = "sql-ledger-httpd.conf";
306 # do we have write permission?
307 if (!open(FH, ">>$httpddir/$filename")) {
308 open(FH, ">$filename");
313 Alias /$alias/ $absolutealias/
314 <Directory $absolutealias>
316 AddHandler cgi-script .pl
317 Options ExecCGI Includes FollowSymlinks
322 <Directory $absolutealias/users>
329 print FH $directives;
333 This is a new installation.
339 Webserver directives were written to $filename
341 Copy $filename to $httpddir and add
346 Include $httpddir/$filename
350 Don't forget to restart your webserver!
355 WARNING: permissions for templates, users, css and spool directory
356 could not be set. Login as root and set permissions
358 # chown -hR :$webgroup users templates css spool
359 # chmod 771 users templates css spool
366 if (!(`grep "^# SQL-Ledger" $httpd`)) {
368 open(FH, ">>$httpd");
373 Include $httpddir/$filename
378 Webserver directives were written to
386 # send SIGHUP to httpd
387 if ($f = `find /var -type f -name 'httpd.pid'`) {
391 system("kill -s HUP $pid");
397 # if this is not root, check if user is part of $webgroup
399 if ($permset = ($) =~ getgrnam $webgroup)) {
400 `chown -hR :$webgroup users templates css spool`;
401 chmod 0771, 'users', 'templates', 'css', 'spool';
406 `chown -hR $webowner:$webgroup users templates css spool`;
407 chmod 0771, 'users', 'templates', 'css', 'spool';
410 unlink "sql-ledger.conf.default";
414 while ($a !~ /(Y|N)/) {
415 print qq|\nDisplay README (Y/n) : |;
418 $a = ($a) ? uc $a : 'Y';
421 @args = ("more", "doc/README");
431 die "Error: gzip not installed\n" unless ($gzip);
432 die "Error: tar not installed\n" unless ($tar);
436 # ungzip and extract source code
437 print "Decompressing $latest_version ... ";
439 if (system("gzip -df $latest_version")) {
440 print "Error: Could not decompress $latest_version\n";
447 # strip gz from latest_version
448 $latest_version =~ s/\.gz//;
451 print "Unpacking $latest_version ... ";
452 if (system("tar -xf $latest_version")) {
453 print "Error: Could not unpack $latest_version\n";
457 # now we have a copy in sql-ledger
458 if (system("tar -cf $latest_version -C sql-ledger .")) {
459 print "Error: Could not create archive for $latest_version\n";
463 if (system("tar -xf $latest_version")) {
464 print "Error: Could not unpack $latest_version\n";
469 print "cleaning up ... ";
473 # replace shebang if this is windows
474 &shebang if $windows;
482 sub create_lockfile {
484 if (-d "$userspath") {
485 open(FH, ">$userspath/nologin");
494 unlink "$latest_version";
495 unlink "$userspath/members.default" if (-f "$userspath/members.default");
502 sub remove_lockfile { unlink "$userspath/nologin" if (-f "$userspath/nologin") };
508 @perlfiles = grep /\.pl/, readdir DIR;
511 foreach $file (@perlfiles) {
521 print FH "#!c:\\perl\\bin\\perl\n";