URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 83156
[ Назад ]

Исходное сообщение
"Perl + Postgres"

Отправлено R4z0R , 02-Дек-08 10:04 
Грохнулся хард, на котором был сайт и БД на Postgresql 8.1, данные восстановили и закинули в БД в другую директорию (бд была в /pgsql а стало в /usr/local/pgsql), путь в /etc/init.d/postgresql исправил на новый, все запускается. Теперь про запуск сайта - сайт сделан на perl и использует для коннекта DBD::Pg, при запуске выдает ошибку: Internal Server Error, в логах такая запись:
install_driver(Pg) failed: Can't load '/usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/auto/DBD/Pg/Pg.so' for module DBD::Pg: libpq.so.4: cannot open shared object file: No such file or directory at /usr/lib/perl5/5.8.5/i386-linux-thread-multi/DynaLoader.pm line 230
хотя сам файл по такому пути есть. Теперь подробности:

[root@web /]# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/X11R6/lib
/usr/local/pgsql/lib
/usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/auto/DBD/Pg

[root@web /]# echo $POSTGRES_LIB
/usr/local/pgsql/lib

LD_LIBRARY_PATH - не определена,
и после установки cpan -i DBD::Pg, модуль perl-DBD-Pg в списке не появился:

[root@web /]# rpm -qa | grep perl
perl-libxml-enno-1.02-31
perl-5.8.5-12.1
perl-DBI-1.40-8
perl-HTML-Tagset-3.03-30
perl-XML-SAX-0.12-7
perl-5.8.5-24.RHEL4
perl-XML-Parser-2.34-5
perl-Crypt-SSLeay-0.51-5
perl-Parse-Yapp-1.05-32
perl-libwww-perl-5.79-5
perl-XML-Encoding-1.01-26
perl-Net-DNS-0.48-1
perl-XML-NamespaceSupport-1.08-6
perl-XML-Twig-3.13-6
perl-DateManip-5.42a-3
perl-URI-1.30-4
perl-DBD-MySQL-2.9004-3.1
perl-HTML-Parser-3.35-6
perl-XML-Dumper-0.71-2
perl-Digest-HMAC-1.01-13
perl-Convert-ASN1-0.18-3
perl-LDAP-0.31-5
perl-XML-LibXML-1.58-1
perl-libxml-perl-0.07-30
perl-Digest-SHA1-2.07-5
perl-XML-LibXML-Common-0.13-7
perl-Filter-1.30-6
perl-Time-HiRes-1.55-3
perl-XML-Grove-0.46alpha-27

Что нужно сделать, чтобы perl приконектился к Pg?


Содержание

Сообщения в этом обсуждении
"Perl + Postgres"
Отправлено Pahanivo , 02-Дек-08 10:12 
попробуй переставить модули на которые ругается
cpan те в помащь )



"Perl + Postgres"
Отправлено R4z0R , 02-Дек-08 10:26 
>попробуй переставить модули на которые ругается
>cpan те в помащь )

пробовал cpan -i DBD::Pg - не помогло, или надо по другому? ОСь - RHEL4, создал скрипт:

test.pl

#!/usr/bin/perl -w

use Storable;
foreach my $list(@INC){
        print "$list :\n";
        my $ll = `ls -aF $list | grep -i \.pm`;
        print "$ll\n\n";
}
exit(0);

Выполнил
./test.pl | grep -i pg

Результат нулевой...блин


"Perl + Postgres"
Отправлено R4z0R , 02-Дек-08 11:03 
[root@web /]# cpan -i Pg
дает ошибку:
Running make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-Iblib/lib" "-Iblib/arch" test.pl
Can't call method "errorMessage" on an undefined value at test.pl line 99.
make: *** [test_dynamic] Error 255
  /usr/bin/make test -- NOT OK
Running make install
  make test had returned bad status, won't install without force



"Perl + Postgres"
Отправлено R4z0R , 02-Дек-08 11:34 
установил руками:
[root@web pgsql_perl5-1.9.0]# perl Makefile.PL
Configuring Pg
Remember to actually read the README file !
OS: linux
Checking if your kit is complete...
Looks good
Writing Makefile for Pg
[root@web pgsql_perl5-1.9.0]# make
cp Pg.pm blib/lib/Pg.pm
AutoSplitting blib/lib/Pg.pm (blib/lib/auto/Pg)
/usr/bin/perl /usr/lib/perl5/5.8.5/ExtUtils/xsubpp  -typemap /usr/lib/perl5/5.8.5/ExtUtils/typemap -typemap typemap  Pg.xs > Pg.xsc && mv Pg.xsc Pg.c
gcc -c  -I/usr/local/pgsql/include -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -O2 -pipe -m32 -march=i386 -mtune=pentium4   -DVERSION=\"1.9.0\" -DXS_VERSION=\"1.9.0\" -fPIC "-I/usr/lib/perl5/5.8.5/i386-linux-thread-multi/CORE"   Pg.c
Running Mkbootstrap for Pg ()
chmod 644 Pg.bs
rm -f blib/arch/auto/Pg/Pg.so
gcc  -shared -L/usr/local/lib Pg.o  -o blib/arch/auto/Pg/Pg.so   -L/usr/local/pgsql/lib -lpq
chmod 755 blib/arch/auto/Pg/Pg.so
cp Pg.bs blib/arch/auto/Pg/Pg.bs
chmod 644 blib/arch/auto/Pg/Pg.bs
Manifying blib/man3/Pg.3pm
[root@web pgsql_perl5-1.9.0]# make install
Installing /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/auto/Pg/Pg.bs
Installing /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/auto/Pg/Pg.so
Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
Installing /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/Pg.pm
Installing /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/auto/Pg/autosplit.ix
Installing /usr/share/man/man3/Pg.3pm
Writing /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/auto/Pg/.packlist
Appending installation info to /usr/lib/perl5/5.8.5/i386-linux-thread-multi/perllocal.pod

все вроде ок, тестовый скрипт не ругается

#!/usr/bin/perl
#
use Pg;

print ('test perl script');

выдает test perl script, но ошибка install_driver(Pg) failed: Can't load '/usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/auto/DBD/Pg/Pg.so' for module DBD::Pg: libpq.so.4: cannot open shared object file: No such file or directory at /usr/lib/perl5/5.8.5/i386-linux-thread-multi/DynaLoader.pm line 230.,
осталась



"Perl + Postgres"
Отправлено R4z0R , 02-Дек-08 12:41 
вроде нашел, если скрипт
#!/usr/bin/perl
#
use Pg;

print ('test perl script');
запускать от рута, то все ок, если от апача, то ошибка


"Perl + Postgres"
Отправлено Pahanivo , 02-Дек-08 13:48 
>вроде нашел, если скрипт
>#!/usr/bin/perl
>#
>use Pg;
>
>print ('test perl script');
>запускать от рута, то все ок, если от апача, то ошибка

Ты Pg переставлял ил DBD::Pg? Это такто два разных модуля.


"Perl + Postgres"
Отправлено R4z0R , 02-Дек-08 13:50 
и то и то

от рута заработало, от апача нет :(


"Perl + Postgres"
Отправлено angra , 02-Дек-08 15:54 
Проверь что на новой машине апач не в чруте.
Напиши или найди простой скрипт на перле, имитирующий шелл через веб и посмотри что ему видно и с какими правами, не забудь защитить его от мира.

"Perl + Postgres"
Отправлено R4z0R , 02-Дек-08 16:56 
>Проверь что на новой машине апач не в чруте.
>Напиши или найди простой скрипт на перле, имитирующий шелл через веб и
>посмотри что ему видно и с какими правами, не забудь защитить
>его от мира.

разобрался, прав не хватало


"Perl + Postgres"
Отправлено HiTek , 16-Май-09 20:47 
>>Проверь что на новой машине апач не в чруте.
>>Напиши или найди простой скрипт на перле, имитирующий шелл через веб и
>>посмотри что ему видно и с какими правами, не забудь защитить
>>его от мира.
>
>разобрался, прав не хватало

Столкнулся с такой же проблемой. Дело не в правах, а в том, что библиотека libpq.so не загружена. О решении данной проблемы можно прочитать в README самого модуля DBD::Pg.

Необходимо сделать следующее:
1. прописать путь к директории содержащей библиотеку libpq.so в /etc/ld.so.conf
2. запустить /sbin/ldconfig

Вот выдержка из самого ридми.

DBD::Pg uses the libpq library that comes with Postgres. If the shared libpq
library is not available, DBD::Pg will error with a message that
usually mentions a file names libpq.so, like this:

    Can't load './blib/arch/auto/DBD/Pg/Pg.so' for module DBD::Pg: libpq.so.5: cannot open
    shared object file: No such file or directory at .../DynaLoader.pm line 230.

This means that the libraries are not installed in a place where the system
can find them when it tries to load the Pg.so file. On some systems, you
can run /sbin/ldconfig -v to see a list of shared modules, or just search
the system for the file with "locate libpq.so". If it exists but is not being
loaded, you may need to add the directory it is in to /etc/ld.so.conf file
and run the ldconfig command. Otherwise, you may need to add the path to
the environment variable LD_LIBRARY_PATH.