Задача:
Есть FreeBSD 6.1.
Надо построить web-сервер (Апач, особых альтернатив нет), с поддержкой php (в текущем приближении версии 5) и клиентом Оракл (сервер располагается физически на другой машине).
php-5.1.6 в текущей версии дерева портов,
неофициальный клиент для Оракл8 берётся там же (попутно на всякий случай поставил ещё порт oracle_odbc_driver).
В стандартно предусмотренном системой портов режиме php5 ставится без вопросов.
Но проблема в том, что эта конфигурация меня не устроивает.
При попытке же сконфигурировать с нужными опциями (модулем Апача 2.2.3, с поддержкой Ораклёвого клиента)
#./configure --with-openssl --enable-calendar --enable-mailparse --with-mod_charset --enable-ftp --with-oci8=/usr/local/oracle8-client/ --enable-safe-mode --enable-track_vars --enable-memory-limit --without-pear --with-xml --enable-trans-sid --enable-magic-qoutes --enable-url-includec --with-apache22 --without-mysql --enable-dbase --enable-sigchild --enable-force-cgi-redirect
/usr/local/oracle8-client//lib/libclntsh.a(sltst.o)(.text+0x196): In function `sltstcr': : undefined reference to `pthread_create' /usr/local/oracle8-client//lib/libclntsh.a(sltst.o)(.text+0x261): In function `sltstgetp': : undefined reference to `pthread_getschedparam' /usr/local/oracle8-client//lib/libclntsh.a(sltst.o)(.text+0x548): In function `sltstjn': : undefined reference to `pthread_join' /usr/local/oracle8-client//lib/libclntsh.a(sltst.o)(.text+0x639): In function `sltstkill': : undefined reference to `pthread_kill' /usr/local/oracle8-client//lib/libclntsh.a(sltst.o)(.text+0x755): In function `sltstsetp': : undefined reference to `pthread_getschedparam' /usr/local/oracle8-client//lib/libclntsh.a(sltst.o)(.text+0x7ba): In function `sltstsetp': : undefined reference to `pthread_setschedparam' /usr/local/oracle8-client//lib/libclntsh.a(sltst.o)(.text+0x7f6): In function `sltstspawn': : undefined reference to `pthread_attr_init' /usr/local/oracle8-client//lib/libclntsh.a(sltst.o)(.text+0x80e): In function `sltstspawn': : undefined reference to `pthread_attr_setdetachstate' /usr/local/oracle8-client//lib/libclntsh.a(sltst.o)(.text+0x826): In function `sltstspawn': : undefined reference to `pthread_create' /usr/local/oracle8-client//lib/libclntsh.a(sltst.o)(.text+0x8bb): In function `sltsttr': : undefined reference to `pthread_exit' /usr/local/oracle8-client//lib/libclntsh.a(sltsq.o)(.text+0x130): In function `SltsqSigFunc': : undefined reference to `pthread_exit' /usr/local/oracle8-client//lib/libclntsh.a(sepco.o)(.text+0x7d): In function `sepcoget_login': : undefined reference to `cuserid' /usr/local/oracle8-client//lib/libclntsh.a(sltspc.o)(.text+0x227): In function `sltspctimewait': : undefined reference to `pthread_cond_timedwait' /usr/local/oracle8-client//lib/libclntsh.a(sslts.o)(.text+0x3c): In function `ssltstraise': : undefined reference to `pthread_kill' *** Error code 1 Stop in /usr/ports/lang/php5/work/php-5.1.6.
/usr/src/lib/libpthread/
При попытке обращения к коллективному разуму ищется только эта статья.
Проблема в точности совпадает.
Все предложенные шаманства испробовал
Но решения в ней не даётся. :(
ЗЫ: Исходя состояния из дерева портов вариантов отличных от отката на php4 не будет?
ЗЗЫ: А вообще есть у меня такое подозрение, что с тех пор очень много чего изменилось, и я пытаюсь применить протухшие рецепты.
Последние комментарии
- OlegL, 17 декабря 2023 года в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
а ты попробуй конфигурить не вручную, а теми настройками что есть в соотв. порте. посмотри его Makefile, там должно быть. Если нужных настроек там нет, то надо подумать.
В смысле
Естественно пробовал.
Первым делом.
Желаемая детализация настройки в нём не обозначена.
Из-за чего собственно полез в конфигуряние ручками.
гм, я make config никогда не делал, я всегда делал make OPT_A=1 .. OPT_Z=1. Какие OPT_x за что отвечают я смотрел прямо в Makefile в директории порта.
Версию FreeBSD и порта для которого выполняется это условие в студию!
В /usr/ports/lang/php5/Makefile
Всякие
ОТСУТСТВУЮТ!!!
Изыскания показали, что я нашёл и установил другой порт с многообещающим названием:
(клиент Оракла тоже стоит).
Сейчас думаю на предмет необходимости пересборки php5 с его поддержкой (или будет работать без этого?)…
Anarchist, ты меня пугаешь…
Вот выдержка из /usr/ports/lang/php5/Makefile:
Какие могут быть вопросы? Ещё есть сомнения какие есть опции?! Или ты думал, что они так и называются OPT_A .. OPT_Z? :))
Это ты меня пугаешь!
Вопросы?..
Теперь я понимаю претензии к Слакварщикам… low level должно использовать там, где он необходим.
Перечисленный же тобой список опций не является полным и редактируется по
Значит я тебе помочь не могу… :)) уж какой есть, извини. :))
Слегка продвинулся.
Расписывать решение буду после того как разберусь окончательно.
На данном этапе проблема в следующем:
Вскрытие показало, что:
1. Искомый файл живёт в /usr/src/lib/libcompat/4.4/
2. Скрипт ./configure эту функцию не видит:
Вопрос: какое шаманское заклинание нужно произнести, чтобы скрипт ./configure подцепил эту функцию?
Вдруг кто подскажет?
гм, а хидер и сама либа установлены?
В смысле заголовок?
Согласно
достаточно stdio.h
(правда после просмотра содержимого этого файла закрались некоторые сомнения)
И какая библиотека?
libcompat?
libcompat.a живёт в /usr/lib/ и в нём упоминается cuserid
гм. а всё-таки сделай
Как и ожидалось (помнится проверял), команда:
указывает на
/usr/include/stdio.h
однако :)) забавно… может в ядро надо чего-нить вкомпилить? Там есть какие-то опции для совместимости с 4.3/4.4BSD…
Только в stdio.h лишь упоминание одной из констрант этой функции.
Само определение в /usr/src/lib/libcompat/4.4/cuserid.c
Handbook читал.
Конфиг GENERIC’а тоже.
Всё это есть.
Ничего перекомпиллять не надо.
Хотя есть некоторые сомнения относительно /boot/loader.conf…
На всякий случай поставил порт /usr/ports/misc/compat4x/.
Видимого эффекта тоже не возымело.
Вскрытие показало, что в руководстве по функции cuserid таки не наврали.
Действительно определение этой функции присутствует в библиотеке libcompat.
Но там забыли указать, что важна не только эта опция, но и её положение в командной строке.
Тестовый пример:
Но
Использование GNU make не помогает.
Попытка слинковать библиотеки перед компилляцией — тоже (правда ошибки при этом вылезают другие, момент, честно говоря не идентифицирован).
Проблема с сборкой вылечилась с помощью заклинания
FreeBSD 6.1, gcc-3.4.4.
Anarchist, респект и уважуха за дневник. Бум знать о граблях.
Это ещё не конец.
http://www.nixp.ru/articles/freebsd_apache_php_oracle
Правда пока надо учесть выявленные опечатки (перечислены здесь).
По здравом размышлении пришёл к выводу, что в статье пропущен один раздел.
А именно:
Предварительная проверка.
(вставить перед описанием проверки работоспособности)
Файл: check.php
Из одной строчки.
<?phpinfo();?>
После чего открывается любимым браузером страница check.php и анализируется содержимое.
А именно:
В секции
Configuration
Ищется раздел
oci8
Факт его наличия говорит о том, что PHP о существовании СУБД Оракл осведомлён.
В моём случае число строк этого раздела по сравнению с исходной системой возросло.
В моём случае содержание раздела следующее:
1. Базовый модуль.
OCI8 Support enabled
Revision $Revision: 1.269.2.18 $
Active Persistent Connections 0
Active Connections 0
Oracle Version 8.1
Compile-time ORACLE_HOME /usr/local/oracle8-client
Libraries Used no value
Temporary Lob support enabled
Collections support enabled
В исходной версии третья-четвёртая и две последние строки отсутствуют.
И полностью отсутствующий в исходной версии (правда не совсем понятно за счёт особенностей версии PHP или за счёт клиента) раздел:
Directive Local Value Master Value
oci8.default_prefetch 10 10
oci8.max_persistent -1 -1
oci8.old_oci_close_semantics 0 0
oci8.persistent_timeout -1 -1
oci8.ping_interval 60 60
oci8.privileged_connect Off Off
oci8.statement_cache_size 20 20
(при переносе я бы просил доработать форматирование до читаемого)
В процессе эксплуатации выяснился ещё один интересный момент:
При просмотре в СУБД Oracle информации об открытых сессиях (насколько я понял, представление v$session) в трёх полях (machine, program, module) пишется хуйня.
Предварительный поиск в Сети ответа на вопрос как задать правильные (в идеале: желаемые, т.е. произвольные) значения этих полей результата не дал.
Есть мнение, что сие — фича библиотеки и придётся смириться.
Но не хотелось бы.