Hi Joe,

Thanks for reporting (I had to dig your mail out of my spam box, due to
GMail failing to validate if it was sent by Yahoo's mail servers, hence my
somewhat late answer).

On Mon, Sep 7, 2015 at 2:21 AM, Joe Hunt <joehunt1...@yahoo.com> wrote:

> I've been trying to install LedgerSMB 1.4.15 on Slackware Linux.
>
> Slackware64 14.1 patched
> Linux kernel 3.10.17
> perl v5.18.1
> Apache httpd 2.4.16
> PostgreSQL 9.4.4
>
> I entered http://localhost/ledgersmb/setup.pl in my web browser address
> box.  The initial page displayed and I entered the postgresql superuser
> name and password and the database name and clicked the login button.  The
> "confirm operation" page displays with "Logged in as postgres" "Database
> does not exist" and "Create database?" and I click the yes button.
>

Very nice! Could you write up the steps you had to take on Slackware to get
to this point?


> This results in the error
> "Base schema failed to load at
> /usr/local/share/perl5/LedgerSMB/Database.pm line 622.
> dbversion: 1.4.15, company: "
>
> Looking at the log file, I see "sh: psql: command not found".  This
> clearly indicates a problem with the path setting.
>
> My ledgersmb.conf does contain in the [environment] section the correct
>
> PATH=/bin:/usr/bin:/usr/local/bin:/usr/local/pgsql/bin
>
> setting which includes the correct location of the psql binary.
>
> So, looking at the source files, I see that the pertinent files are
> ledgersmb/LedgerSMB/Sysconfig.pm and ledgersmb/LedgerSMB/Database.pm.
>
> In Database.pm, in the definition of exec_script is the statement
>
> local %ENV;
>
> My understanding is that this has the effect of clobbering the PATH
> environment variable.  The code proceeds to define environment variables
> for PGUSER, PGPASSWORD, PGDATABASE, PGHOST, and PGPORT (the latter 2 having
> been saved in variables in Sysconfig.pm.  But, the PATH has never been
> recovered.  This can be tested within the exec_script definition in
> Database.pm by saving the PATH and then printing the values to the log file.
>
> (/usr/local/ledgersmb/LedgerSMB/Database.pm is the patched version which I
> also copied to
> /usr/local/share/perl5/LedgerSMB and to
> /usr/local/ledgersmb/blib/lib/LedgerSMB)
>
>
Yup. It completely empties the environment. This wasn't the intention of
the change when it was put in place, though.

I have the following patch ready to be committed and included into 1.4.16:

diff -r 1acaae026188 LedgerSMB/Database.pm
--- a/LedgerSMB/Database.pm Sun Aug 30 19:30:09 2015 +0200
+++ b/LedgerSMB/Database.pm Fri Sep 11 08:14:10 2015 +0000
@@ -139,12 +139,11 @@
 sub base_backup {
     my $self = shift @_;

-    local %ENV; # Make sure that - when leaving the scope - %ENV is
restored
-    $ENV{PGUSER} = $self->{username};
-    $ENV{PGPASSWORD} = $self->{password};
-    $ENV{PGDATABASE} = $self->{company_name};
-    $ENV{PGHOST} = $LedgerSMB::Sysconfig::db_host;
-    $ENV{PGPORT} = $LedgerSMB::Sysconfig::db_port;
+    local $ENV{PGUSER} = $self->{username};
+    local $ENV{PGPASSWORD} = $self->{password};
+    local $ENV{PGDATABASE} = $self->{company_name};
+    local $ENV{PGHOST} = $LedgerSMB::Sysconfig::db_host;
+    local $ENV{PGPORT} = $LedgerSMB::Sysconfig::db_port;

     my @t = localtime(time);
     $t[4]++;
@@ -185,12 +184,11 @@
 sub db_backup {
     my $self = shift @_;

-    local %ENV; # Make sure that - when leaving the scope - %ENV is
restored
-    $ENV{PGUSER} = $self->{username};
-    $ENV{PGPASSWORD} = $self->{password};
-    $ENV{PGDATABASE} = $self->{company_name};
-    $ENV{PGHOST} = $LedgerSMB::Sysconfig::db_host;
-    $ENV{PGPORT} = $LedgerSMB::Sysconfig::db_port;
+    local $ENV{PGUSER} = $self->{username};
+    local $ENV{PGPASSWORD} = $self->{password};
+    local $ENV{PGDATABASE} = $self->{company_name};
+    local $ENV{PGHOST} = $LedgerSMB::Sysconfig::db_host;
+    local $ENV{PGPORT} = $LedgerSMB::Sysconfig::db_port;

     my @t = localtime(time);
     $t[4]++;
@@ -695,14 +693,11 @@
 sub exec_script {
     my ($self, $args) = @_;

-
-    local %ENV;
-
-    $ENV{PGUSER} = $self->{username};
-    $ENV{PGPASSWORD} = $self->{password};
-    $ENV{PGDATABASE} = $self->{company_name};
-    $ENV{PGHOST} = $LedgerSMB::Sysconfig::db_host;
-    $ENV{PGPORT} = $LedgerSMB::Sysconfig::db_port;
+    local $ENV{PGUSER} = $self->{username};
+    local $ENV{PGPASSWORD} = $self->{password};
+    local $ENV{PGDATABASE} = $self->{company_name};
+    local $ENV{PGHOST} = $LedgerSMB::Sysconfig::db_host;
+    local $ENV{PGPORT} = $LedgerSMB::Sysconfig::db_port;

     open (LOG, '>>', $args->{log});
     if ($args->{errlog}) {


Could you verify that this fixes your problem?


Thanks!




-- 
Bye,

Erik.

http://efficito.com -- Hosted accounting and ERP.
Robust and Flexible. No vendor lock-in.
------------------------------------------------------------------------------
_______________________________________________
Ledger-smb-users mailing list
Ledger-smb-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ledger-smb-users

Reply via email to