Сборка PHP5 с поддержкой Oracle 10g

kohral

Guest
Сборка PHP5 с поддержкой Oracle 10g

Здравствуйте!
Есть небольшая проблема. Использую Fedora Core 4, поставил Oracle 10.1.0. Все работает, все ок.

Но понадобилось собрать PHP с возможностью работы с ораклом. Скачал пакет PHP-5.0.4-10.3.src.rpm с fedora.redhat.com.

Насколько я понял там php.spec вообще под Oracle не заточен, либо кое-как (через макросы) заточен под Oracle Instant Client. Мне бы хотелось получить полноценный модуль php-oci8.rpm, чтобы можно было полноценно работать с СУБД

Перепробовал массу всяких рекомендаций вроде --with-oci8=$ORACLE_HOME и им подобных, но каждый раз выдавались сообщения об ошибках :(( Поэтому и решил попросить помощи на форуме.

Буду очень признателен за практические рекомендации по сборке PHP5 из src.rpm с поддержкой Oracle 10g
 

tony2001

TeaM PHPClub
какие сообщения?
какая в результате строка ./configure ?
где стоит Оракл?
чему равна переменная среды $ORACLE_HOME ?
 

kohral

Guest
1.Сообщения разные, чаще всего вот так
.....
checking for string.h... (cached) yes
checking for char... yes
checking size of char... configure: error: cannot compute sizeof (char), 77
See `config.log' for more details.
ошибка: Неверный код возврата из /var/tmp/rpm-tmp.16803 (%build)


Ошибки сборки пакетов:
Неверный код возврата из /var/tmp/rpm-tmp.16803 (%build)
....
2. --cache-file=../config.cache \
--with-libdir=%{_lib} \
--with-config-file-path=%{_sysconfdir} \
--with-config-file-scan-dir=%{_sysconfdir}/php.d \
--disable-debug \
--with-pic \
--disable-rpath \
--with-bz2 \
--with-curl \
--with-exec-dir=%{_bindir} \
--with-freetype-dir=%{_prefix} \
--with-png-dir=%{_prefix} \
--enable-gd-native-ttf \
--without-gdbm \
--with-gettext \
--with-gmp \
--with-iconv \
--with-jpeg-dir=%{_prefix} \
--with-openssl \
--with-png \
--with-pspell \
--with-expat-dir=%{_prefix} \
--with-pcre-regex=%{_prefix} \
--with-zlib \
--with-layout=GNU \
--enable-exif \
--enable-ftp \
--enable-magic-quotes \
--enable-sockets \
--enable-sysvsem --enable-sysvshm --enable-sysvmsg \
--enable-track-vars \
--enable-trans-sid \
--enable-yp \
--enable-wddx \
--with-pear=/usr/share/pear \
--with-kerberos \
--enable-ucd-snmp-hack \
--with-unixODBC=shared,%{_prefix} \
--enable-memory-limit \
--enable-shmop \
--enable-calendar \
--enable-dbx \
--enable-dio \
--with-mime-magic=%{_datadir}/file/magic.mime \
--without-sqlite \
--with-libxml-dir=%{_prefix} \
--with-xml \
--with-oci8=$ORACLE_HOME \

Этот кусочек php.spec, то что вы имели ввиду?
3. /opt/oracle/product/10.1.0/
4. см 3
 

tony2001

TeaM PHPClub
Profic
дык. впереди планеты всей.

kohral
поставьте нормальный GCC из 3-й ветки.
ваша проблема к Ораклу и PHP отношения не имеет, проблема в GCC4.
 

kohral

Guest
Я могу ошибаться, но до этого я использовал FC3 и там тоже были вроде бы такие же вилы.
А не может это быть из-за того, что в начале в php.spec написана всякая ерунда вроде
%define with_oci8 %{?_with_oci8:1}%{!?_with_oci8:0}
......
.....
%if %{with_oci8}
%package oci8
Group: Development/Languages
Summary: A module for PHP applications that use OCI8 databases.
Provides: php_database
BuildRequires: oracle-instantclient-devel >= 10
Requires: php = %{version}-%{release}
Provides: php_database
AutoReq: 0
Requires: oracle-instantclient-basic >= 10

а?

Все-таки мне почему-то кажется, что здесь фигня в php.spec...
 

tony2001

TeaM PHPClub
попробуй собрать просто исходники (см. /usr/src/redhat/BUILD/php-...).
будет та же самая ошибка, без или с --with-oci8.
 

kohral

Guest
пробовал. без --with-oci8 все отлично собирается
 

tony2001

TeaM PHPClub
не верю.
checking size of char... configure: error: cannot compute sizeof (char), 77 - эта проверка в ./configure выполняется всегда, вне зависимости от включения/выключения oci8.

либо у тебя ошибка другая, либо ты что-то путаешь.
 

kohral

Guest
ну не знаю. привел ошибку прямо с терминала.
Вот еще что. Писал в буржуйский форум на oracle.com там привели такой вот вариант
Install
oracle-instantclient-basic-10.1.0.3-1.i386.rpm
oracle-instantclient-devel-10.1.0.3-1.i386.rpm

then rebuild php with
rpmbuild --with oci8 --rebuild php-*.src.rpm
and install the required rpms (use yum).

If you get errors, post the last few lines and command before the error.

Говорят, что так должно железно работать, но тут такая тема oracle-instant-client-basis у меня есть, а вот oracle-instant-cdevel нет. А он нужен.
Глянул сюда http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html
но тут есть только basis, а где devel скачать?

И еще вопрос: а клиент мне по любому будет нужен?
 

tony2001

TeaM PHPClub
>ну не знаю. привел ошибку прямо с терминала.
значит, не ту ошибку привёл.

>Вот еще что. Писал в буржуйский форум на oracle.com там привели такой вот вариант
>then rebuild php with
>rpmbuild --with oci8 --rebuild php-*.src.rpm

с OIC надо вообще другую опцию ./configure использовать:
--with-oci8-instant-client
это подробно описано в мануале: [m]oci8[/m]

>но тут есть только basis, а где devel скачать?
*Instant Client Package - SDK: Additional header files and an example makefile for
developing Oracle applications with Instant Client

-~{}~ 11.07.05 14:38:

>И еще вопрос: а клиент мне по любому будет нужен?
если у тебя на той же машине стоит сервер c либами OCI, то отдельно ставить клиента нет смысла.
 

kohral

Guest
> если у тебя на той же машине стоит сервер c либами OCI:
на той же

> значит, не ту ошибку привёл
ну так там до этого все в порядке...

Может как-нить скинуть целый файл PHP.SPEC?
 

tony2001

TeaM PHPClub
зачем?
причем тут spec?
я же говорю - во-первых, никакого отношения эта ошибка к oci8 не имеет, во-вторых, ты используешь не ту опцию используешь.
в-третьих, там же написано - подробности в config.log.
что в config.log ?
 

tony2001

TeaM PHPClub
по шагам:
1) cd /usr/src/redhat/BUILD/php-...
2) ./configure --with-oci8-instant-client
3) make

на каком этапе возникает ошибка, какая она? (скопировать текст + строк 5 до него)
 

kohral

Guest
2. ./configure --with-oci8-instant-client
- если так, то натыкается, на то что нет пакета devel (пишет, что не найдены SDK)

а если ./configure --with-oci8=$ORACLE_HOME, то все окей и даже дальнейший Make тоже работает
 

tony2001

TeaM PHPClub
теперь возьми ту строку, которую использует spec (она есть вверху config.log) и попробуй сконфигурить с ней.

не получается - убирай оттуда подозрительные опции.
например, --cache-file=../config.cache и --with-pic мне глаз мозолят.
 

kohral

Guest
ок.
попробую.
а после make я делаю make install и рестартю apache, а затем проверяю уже непосредственно скрипт, работающий с Oracle, так?
 

tony2001

TeaM PHPClub
совершенно необязательно делать make install
достаточно выполнить скрипт с sapi/cli/php - command-line бинарником.
 

kohral

Guest
Нашел.
Компилятор спотыкался о директиву --disable-rpath . Если ее убрать, то --with-oci8=$ORACLE_HOME компилируется нормально
 
Сверху