Грохнулся хард, на котором был сайт и БД на 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/libLD_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?
попробуй переставить модули на которые ругается
cpan те в помащь )
>попробуй переставить модули на которые ругается
>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Результат нулевой...блин
[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
установил руками:
[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.,
осталась
вроде нашел, если скрипт
#!/usr/bin/perl
#
use Pg;print ('test perl script');
запускать от рута, то все ок, если от апача, то ошибка
>вроде нашел, если скрипт
>#!/usr/bin/perl
>#
>use Pg;
>
>print ('test perl script');
>запускать от рута, то все ок, если от апача, то ошибкаТы Pg переставлял ил DBD::Pg? Это такто два разных модуля.
и то и тоот рута заработало, от апача нет :(
Проверь что на новой машине апач не в чруте.
Напиши или найди простой скрипт на перле, имитирующий шелл через веб и посмотри что ему видно и с какими правами, не забудь защитить его от мира.
>Проверь что на новой машине апач не в чруте.
>Напиши или найди простой скрипт на перле, имитирующий шелл через веб и
>посмотри что ему видно и с какими правами, не забудь защитить
>его от мира.разобрался, прав не хватало
>>Проверь что на новой машине апач не в чруте.
>>Напиши или найди простой скрипт на перле, имитирующий шелл через веб и
>>посмотри что ему видно и с какими правами, не забудь защитить
>>его от мира.
>
>разобрался, прав не хваталоСтолкнулся с такой же проблемой. Дело не в правах, а в том, что библиотека 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.