powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Установка Apache+Perl+Oracle Oracle LINUX 7.6
23 сообщений из 23, страница 1 из 1
Установка Apache+Perl+Oracle Oracle LINUX 7.6
    #39822232
selyukm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Может, сможете мне помочь?
Ситуация такая: Oracle enterprise linux 7.6, Oracle 12.1.
В системе линукс 2 юзера: root и oracle.
Нужно настроить выгрузку отчета в браузере: клиент входит на страничку http://IP-сервера/, вводит период времени и жмет показать результат. В это время запускается perl — скрипт, коннектится к БД Oracle и выгружает данные.

МОЯ ПРОБЛЕМА:
пишу простейший скрипт perl:
#!/usr/bin/perl
print «Content-type: text/html\n\n»;
print «Hello, World.»;

Далее запускаю его так:
cd /var/www/cgi-bin/
perl test.pl

и получаю результат.
Далее набираю в браузере
http://192.168.56.107/cgi-bin/test.pl
И в браузере тоже получаю результат.

Пишу второй скрипт:

#!/usr/bin/perl -W
use DBI;

# $ENV{ORACLE_HOME}=»/home/orcl/app/oracle/product/11.2.0.4″;
# $ENV{NLS_LANG}=»AMERICAN_CIS.CL8MSWIN1251″;

my $db=»192.168.56.107″;
my $dbsid=»test»;
my $dbuser=»system»;
my $dbpass=»123456″;

$db = DBI->connect(«dbi:Oracle:host=$db;sid=$dbsid», $dbuser, $dbpass);

$sql0=$db->prepare(qq{
select * from m
});
$sql0->execute();

while(@row=$sql0->fetchrow_array){
print $row[0].»\n»;
}

Далее запускаю его так:
cd /var/www/cgi-bin/
perl test.pl
и получаю результат.
Но как только пытаюсь его в браузере запустить
http://10.16.29.105/cgi-bin/test2.pl
, то в браузере чистая страница, и ошибка в логах апача:
install_driver(Oracle) failed: Can’t locate DBD/Oracle.pm in @INC (@INC contains: /home/oracle/perl5/lib/perl5/x86_64-linux-thread-multi/DBD/ /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at (eval 3) line 3.

__________________________________________________
Что я делал:
(под root)установка apache:
yum install -y httpd

(под root)добавляем в автозагрузку
systemctl enable httpd

(под root)запускаем:
systemctl start httpd

(под root)проверяем
netstat -tulnp | grep httpd

(под root)(если в браузере не заходит на сайт)
iptables -F

(под root)
yum install -y cpan

(под oracle)
cpan
дать полные права на папку /usr
cpan> install CGI
cpan> install DBI
cpan> install YAML
cpan> install DBD::Oracle

Причем, после установки каждого модуля в cpan везде было make Makefile.pl — OK
только были предупреждения при установке install DBD::Oracle
Unable to connect to database.
Я даже пробовал во второй скрипт добавить
use lib = /…..(путь к Oracle.pm)
и все равно эта же ошибка.
...
Рейтинг: 0 / 0
Установка Apache+Perl+Oracle Oracle LINUX 7.6
    #39822274
selyukm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
selyukm http://10.16.29.105/cgi-bin/test2.pl

192.168.56.107 верный.
...
Рейтинг: 0 / 0
Установка Apache+Perl+Oracle Oracle LINUX 7.6
    #39822914
bdmalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Can’t locate DBD/Oracle.pm in @INC

IMHO,как-то вы кривовато пакет Оракловый проинсталлировали.
Попробуйте явным образом прописать в скрипте путь, где он проинсталлирован - думаю поможет..
...
Рейтинг: 0 / 0
Установка Apache+Perl+Oracle Oracle LINUX 7.6
    #39823608
selyukm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bdmalex,
добрый день!!!!
Вот и у меня эти же проблемы.
Сегодня весь день игрался с путями.
Чуйка мне подсказывает, что надо правильно в bash_profile заполнить 2 параметра: LD_LIBRARY_PATH и PERL5LIB
Как только начинаю что-то менять и для ORACLE_HOME, то получаю при выполнении sqlplus "not found".
DBD

Причем все сделал как в статье: проблема как и у автора, далее она пропадала, но итог такой:
или проблема с Oracle.pm или Oracle.so ((((
Ну и в командной строке скрипт без проблем подключается к БД и выводит результат.
Если бы кто скинул свои настройки путей.
...
Рейтинг: 0 / 0
Установка Apache+Perl+Oracle Oracle LINUX 7.6
    #39824380
selyukm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Помоему, я нашел в чем проблема: сервис апач стартует не под моим юзером(orcl) из-под которого юзается oracle, а под root.

потому что если пишу
под orcl:
cd /var/www/cgi-bin
perl test.pl
то все ОК, коннектится к бд и выводит содержимое таблицы БД.
А если пишу под root:
cd /var/www/cgi-bin
perl test.pl
то вываливает сразу ту же ошибку, что и в логе апача:
can't load oracle.so .....11.1

Не знаю как под orcl запустить апач, в httpd.conf есть настройка под кем запускать, прописал там orcl юзер и группа вместо apache и не помогло.
...
Рейтинг: 0 / 0
Установка Apache+Perl+Oracle Oracle LINUX 7.6
    #39824828
selyukm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
снес cpan и все модули.
Добавил в .bash_profile рута oracle_home и ld_library_path такие же как и у юзера oracle.
Далее установил и под рутом и под oracle все модули cpan.
В итоге perl test.pl отрабатывает ОК и под рутом и под oracle. Но в браузере все равно 500 ошибка и Oracle.so бла-бла-бла
(((((
...
Рейтинг: 0 / 0
Установка Apache+Perl+Oracle Oracle LINUX 7.6
    #39825472
selyukm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пробовал менять первую строчку самого скрипта
#!/usr/bin/perl на другие всевозможные варианты.
Почти всегда в командной строке скрипт выполняется, а вот в логе апача одно из трех:
(2) no such file or directory
(13) permission denied
(8)exec format error.
...
Рейтинг: 0 / 0
Установка Apache+Perl+Oracle Oracle LINUX 7.6
    #39825475
selyukm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Происходящее не поддается ни какой логике!
1)если бы были какие проблемы с DBD или другими модулями Perl, то скрипт бы не отрабатывал и не выводил результаты из БД в командной строке.
2)если бы были проблемы с Apache, то не отрабатывал бы в браузере простейший perl скрипт "Hello world"
3) теория нехватки прав тоже отпала: сейчас скрипт отрабатывает в командной строке как под обычным юзером oracle, так и под root
...
Рейтинг: 0 / 0
Установка Apache+Perl+Oracle Oracle LINUX 7.6
    #39825731
selyukm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас попробовать копировать файлик libclntsh.so.12.1 из $ORACLE_HOME/lib в папки /usr и им подобные.
И счас уже ругается на другой файл из $ORACLE_HOME/lib libipc1.so для Oracle.so.
Такое чувство, что все файлы из $ORACLE_HOME/lib ищет в /usr/....
...
Рейтинг: 0 / 0
Установка Apache+Perl+Oracle Oracle LINUX 7.6
    #39825842
bdmalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я конечно дико извиняюсь, но если смотреть оба скрипта, так как вы написали...то понятно почему второй скрипт у вас не пашет в браузере

Где, строка для браузера во втором скрипте:

print «Content-type: text/html\n\n»;

?
...
Рейтинг: 0 / 0
Установка Apache+Perl+Oracle Oracle LINUX 7.6
    #39826016
selyukm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Добавил строку с Content-type, ничего не изменилось.
Я вчера проштудировал 22 главу книги "Secret ORACLE" Norbert Debes. Там написано, что надо правильно настроить perl5lib, path, ld_library_path.
Потратил полдня на перебор всевозможных комбинаций этих переменных.
Снес модули и cpan.Только начинаю что-то менять и не ставятся через CPAN модули и все крашится.
Короче, у меня в командной строке работает только с такими параметрами:
export PATH=$ORACLE_HOME/perl:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
perl5lib вообще не установлен.
Короче, проблема остается: Oracle.so из usr/local/lib64/perl5/auto/DBD/Oracle/Oracle.so не видит файлики *.so из $ORACLE_HOME/lib.
Я вчера libclntsh.so.12.1 покопировал почти во все папки, уже на него не ругается. А ругается на следующий libipc1.so.....

Скрипт:
#!/usr/bin/perl
# RCS: $Header: /var/www/cgi-bin/test.pl v1.0
# Perl DBI/DBD::Oracle Example
use strict;
use DBI;
print "Content-type: text/html\n\n";

$ENV{NLS_LANG}="AMERICAN_CIS.CL8MSWIN1251";

my $db="192.168.56.107";
my $dbsid="test";
my $dbuser="system";
my $dbpass="123456";
my $sql0;
my @row;
$db = DBI->connect("dbi:Oracle:host=$db;sid=$dbsid", $dbuser, $dbpass);

$sql0=$db->prepare(qq{
select * from m
});
$sql0->execute();

while(@row=$sql0->fetchrow_array){
print $row[0]."\n";
}
...
Рейтинг: 0 / 0
Установка Apache+Perl+Oracle Oracle LINUX 7.6
    #39826402
selyukm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Значит, у меня так:
ORACLE_HOME=/u01/app/oracle/product/12.1.dbhome_1
Устранил ошибку "Can't load Oracle.so for libclntsh.so.12.1/libipc1.so/libnnz12.so/..."
Все вот эти файлики libclntsh.so.12.1/libipc1.so/libnnz12.so лежат в
ORACLE_HOME=/u01/app/oracle/product/12.1.dbhome_1/lib
И их подкинул в папку /usr/lib64.
Сам этот Oracle.so одинаковых версий есть в /usr/local/.. и ORACLE_HOME, но берется именно из /usr/local/.

Но сейчас у меня другая ошибка:
ERROR OCIEnvNlsCreate. Check ORACLE_HOME (Linux) env var or path (windows) and or NLS settings, permissions.
...
Рейтинг: 0 / 0
Установка Apache+Perl+Oracle Oracle LINUX 7.6
    #39827135
selyukm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Короче, я только счас обратил внимание, что для DBD::Oracle устанавливают Oracle client. А у меня установлен только Oracle server.
По идее вот в чем причина всех бед. Установлю клиент и попробую.
...
Рейтинг: 0 / 0
Установка Apache+Perl+Oracle Oracle LINUX 7.6
    #39830760
selyukm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел тему, что предустановленный в системе(/usr/bin/perl) перл лучше не использовать.
Я скачал и установил в отдельную папку другую версию с помощью опции PREFIX=/u01/app/perl

Пишу which perl
и показывает
/usr/bin/perl
(версия 5.16.3)

Пишу /u01/app/perl/bin/perl -v
и показывает мою версию 5.20

Далее стартую простейший перл скрипт:
#!/u01/app/perl/bin/perl -w
print "Content-type: text/html\n\n";
print "Perl работает!";

И в cmd он отрабатывает (в cmd вообще все равно на первую строку, только для апача это важно).
А в браузере не работает, permission denied.

Возникло 2 вопроса:
Как заставить работать мой установленный перл, а не системный.
И как заставить его искать *.so файлики не в /usr/lib64, где их нету, а в ORACLE_HOME/lib?
...
Рейтинг: 0 / 0
Установка Apache+Perl+Oracle Oracle LINUX 7.6
    #39831833
Фотография nexoma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пишу по памяти, лет 12 назад это было.
да, апач запускается от юзера apache.
там где-то в конфиг файлах надо прописывать оракловые пути.

либо как-то так:

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
#!/bin/env perl

BEGIN {
   $ENV{'ORACLE_BASE'} = "/usr/lib/oracle";
   $ENV{'ORACLE_HOME'} = "$ENV{'ORACLE_BASE'}/11.2/client64";
   $ENV{'LD_LIBRARY_PATH'} = "$ENV{'ORACLE_HOME'}";
   $ENV{'TNS_ADMIN'} = $ENV{'ORACLE_HOME'}
};

use DBI;
#use DBD::Oracle;
use CGI;

my $q = new CGI();
print $q->header();
print $q->start_html("Oracle Test");
print "Hello World!";
print $q->p(`which perl`);
print $q->p("PATH: " . $ENV{'PATH'}) . "\n";
print $q->p("ORACLE_BASE: " . $ENV{'ORACLE_BASE'}) . "\n";
print $q->p("ORACLE_HOME: " . $ENV{'ORACLE_HOME'}) . "\n";
print $q->p("LD_LIBRARY_PATH: " . $ENV{'LD_LIBRARY_PATH'}) . "\n";
print $q->p("TNS_ADMIN: " . $ENV{'TNS_ADMIN'}) . "\n";

print "\n";





вот еще нашлось про конфиг файл апача:

When I see this problem, I automatically think, Oh, the Oracle libs aren't being located by the system.
Edit /etc/ld.so.conf and add the value of $ORACLE_home/lib (the directory that has libclntsh.so.8 in it) eg
/usr/local/oracle/8.1.5/lib

Then run /sbin/ldconfig to update Linux's idea of where things are, and stop and start the server.
ALSO, ensure that ORACLE_HOME and preferably ORACLE_SID are explicitly provided to your perl stuff:

in httpd.conf
PerlPassEnv ORACLE_HOME
THIS CAN BITE YOU! If your httpd startup script doesn't have the oracle environment loaded, you may have to fix that as well:
at the top of /etc/rc.d/init.d/httpd
# Source function library.
. /etc/rc.d/init.d/functions <!-- already there -->

# Source Oracle environment <!-- you add these lines -->
ORAENV_ASK=NO
ORACLE_SID=stats
. /usr/bin/oraenv



вот с этими вариантами и работайте.
...
Рейтинг: 0 / 0
Установка Apache+Perl+Oracle Oracle LINUX 7.6
    #39831835
Фотография nexoma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Установка Apache+Perl+Oracle Oracle LINUX 7.6
    #39831836
Фотография nexoma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://httpd.apache.org/docs/2.4/mod/mod_env.html

Apache Module mod_env - SetEnv Directive
...
Рейтинг: 0 / 0
Установка Apache+Perl+Oracle Oracle LINUX 7.6
    #39832299
selyukm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Я немного изменил Ваш скрипт: убрал полностью блок begin.
Короче, в командной строке печатает все переменные, а через браузер только те, которые прописаны в httpd.conf.
...
Рейтинг: 0 / 0
Установка Apache+Perl+Oracle Oracle LINUX 7.6
    #39832517
Фотография nexoma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вероятно, вы не поняли.

блок begin как раз помогает. он как бы подставляет системные переменные без которых не работает ваш скрипт, не находя Oracle.
...
Рейтинг: 0 / 0
Установка Apache+Perl+Oracle Oracle LINUX 7.6
    #39832519
Фотография nexoma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а потом уже спокойно используете DBI, ошибок быть не должно.
...
Рейтинг: 0 / 0
Установка Apache+Perl+Oracle Oracle LINUX 7.6
    #39833163
selyukm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
добрый всем день!
Я победил проблему сам, методом тыка. Жду ваших комментов.
Напомню, в системе 2 юзера root и обычный orcl, под которым ставился и работает sql.
Вот что я сделал:
1) скачал instantclient (у меня 12.1 версия database):
instantclient-basic-linux.x64-12.1.0.2.0.zip
instantclient-sdk-linux.x64-12.1.0.2.0.zip
instantclient-sqlplus-linux.x64-12.1.0.2.0.zip
Распаковал все в одну папку instantclient_12_1
2) Скопировать содержимое папки instantclient_12_1(не саму папку) в /usr/lib64
Дать права 0777 на папку usr (иначе не установятся модули cpan под юзером orcl)
Положить тестовый скрипт в /var/www/cgi-bin/
Дать права 0777 на папку www и подпапки с файлами
Проверить доступность sqlplus под юзером, под которым будете ставить модули.
3) (под root) yum install -y cpan
4) запуск cpan (под orcl)
cpan
3 раза enter (для автонастройки) и на добавление путей PERL5LIB: "add to .bash file?" набрать No
5) установка модулей
cpan> install CGI
cpan> install DBI
cpan> install YAML
cpan> install DBD::Oracle
6) тест
проверка в командной строке:
perl /var/www/cgi-bin/test.pl
Проверка в браузере
http://192.168.56.112/cgi-bin/test.pl

Шапка скрипта такая:
#!/usr/bin/perl -w
#use strict;
use DBI;
use DBD::Oracle;
use CGI qw(:standard);
print("Content-type: text/html\n\n");
my $db="192.168.56.112";
my $dbsid="test";
my $dbuser="system";
my $dbpass="123456";
$db = DBI->connect("dbi:Oracle:host=$db;sid=$dbsid", $dbuser, $dbpass);
И все работает!!!!!!!
...
Рейтинг: 0 / 0
Установка Apache+Perl+Oracle Oracle LINUX 7.6
    #39833169
selyukm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я читал, что не рекомендуется использовать предустановленный в систему перл, а ставить свой в другое место. Также не рекомендуется использовать библиотеки oracle из dbhome_1, т к если админ обновит oracle, все это перестанет работать. Т е надо юзать instantclient, указав к нему путь.
Но у меня все это в упор не работает: что бы я ни делал, всегда берется Oracle.so именно дефолтный, а не мой и ни в какую не находит оракловые библиотеки мои.

*очень важный момент: положить instantclient файлы до начала установки модулей, т к они связываются в процессе установки и потом подкинуть их "не покатит".
...
Рейтинг: 0 / 0
Установка Apache+Perl+Oracle Oracle LINUX 7.6
    #39835447
selyukm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Также получилось установить Perl в свой локальный каталог.
Спасибо всем за помощь.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Установка Apache+Perl+Oracle Oracle LINUX 7.6
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]