LINUX.ORG.RU

Ubuntu server 11.10+LAMP-server+perl


0

1

Здравствуйте уважаемые формумчане. возникла проблема:

Есть Ubuntu server. Так же на нем стоит LAMP-server (ставился сразу с установкой ОС). (MySql+web+php) не сервере стоит asterisk. На астериск установлена CRM система. (asterCC) при запуске одного из perl скриптов появляется ошибка:

sudo /opt/asterisk/scripts/astercc/astercc

install_driver(mysql) failed: Can't load 'auto/DBD/mysql/mysql.so' for module DBD::mysql: auto/DBD/mysql/mysql.so: невозможно открыть разделяемый объектный файл: Нет такого файла или каталога at /</opt/asterisk/scripts/astercc/astercc>DynaLoader.pm line 214. at perlapp line 642 Perhaps a required shared library or dll isn't installed where expected at astercc.pl line 1640

По ошибке видно, что mysql не может запустить свой модуль mysql.so. 2 дня гугления ответов толком не дали кроме одного: не хватает модуля libmysqlclient.so.

чтобы проверить подключается ли libmysqlclient.so запустил ldd для mysql.so:

linux-gate.so.1 => (0xb787d000) libmysqlclient.so.16 => /usr/lib/libmysqlclient.so.16 (0xb7667000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb74eb000) libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb74cf000) libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb74a5000) libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb7490000) /lib/ld-linux.so.2 (0xb787e000)

Как видно нужная либа есть.

я уже всю голову сломал себе что не так и что не может подключить к себе этот скрипт.

Прошу помощи. Заранее спасибо

P.S. совсем забыл написать: права доступа 777 применены ко всем нужным папкам и файлам.

Ответ на: комментарий от AITap

Та ldd что в главном сообщении как раз ldd /usr/lib/perl5/auto/DBD/mysql/mysql.so На всякий случай повторюсь (тем более отформатировав читается понятнее):

linux-gate.so.1 => (0xb7847000)

libmysqlclient.so.16 => /usr/lib/libmysqlclient.so.16 (0xb7631000)

libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb74b5000)

libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb7499000)

libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb746f000)

libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb745a000)

/lib/ld-linux.so.2 (0xb7848000)

ovoshlook
() автор топика
Ответ на: комментарий от AITap

strace -f perl сделал. Правда вызова библиотеки нужной так и не нашел.

затем сделал еще strace -f /opt/asterisk/scripts/astercc/astercc (то есть не от perl)

В этот раз он мне показал что помимо всего прочего не может найти файл или libmysqlclient.so.15 . Не находит потому что его и нет. есть толкьо 16. Сделал ссылку по именем libmysqlclient.so.15 на libmysqlclient.so.16: система стала ее находить. Видимо asterсс 0,21 не настолько новая на сколько новая ubuntu server 11.10 и LAMP server в ее дистре.

еще насторожило вот это:

stat64(«/opt/asterisk/scripts/astercc/lib/auto/DBD/mysql», 0x912fc00) = -1 ENOENT (No such file or directory)

stat64(«/opt/asterisk/scripts/astercc/auto/DBD/mysql», 0x912fc00) = -1 ENOENT (No such file or directory)

stat64(«auto/DBD/mysql/mysql.bs», 0x912fc00) = -1 ENOENT (No such file or directory)

open(«auto/DBD/mysql/mysql.so», O_RDONLY) = -1 ENOENT (No such file or directory)

То есть он ищет mysql.so совсем не там где она должна быть получается (лежит то она в /usr/lib/perl5/auto/DBD/mysql/mysql.so)

сейчас при вызове strace там файлов которые не находит astercc еще очень много... Видимо придется провести целый вечер за созданием ссылок для нужных файлов.

За strace спасибо. Не знал о такой утилите. если есть подстказки как упростить задачу линкования системы буду брагодарен вам.

ovoshlook
() автор топика
Ответ на: комментарий от ovoshlook

То есть он ищет mysql.so совсем не там где она должна быть получается (лежит то она в /usr/lib/perl5/auto/DBD/mysql/mysql.so)

В принципе, это нормально, если он её в конечном счёте находит (посмотрите, например, на выхлоп strace любая_системная_утилита_с_кучей_зависимостей). Для убыстрения запуска таких вещей иногда бывает полезно переставить записи в ld.so.conf.

strace -f perl сделал. Правда вызова библиотеки нужной так и не нашел.
затем сделал еще strace -f /opt/asterisk/scripts/astercc/astercc (то есть не от perl)

А что говорит head -n1 /opt/asterisk/scripts/astercc/astercc? Выполнялся ли ldconfig после установки CRM-системы?

AITap ★★★★★
()
Ответ на: комментарий от AITap

В принципе, это нормально, если он её в конечном счёте находит (посмотрите, например, на выхлоп strace любая_системная_утилита_с_кучей_зависимостей). Для убыстрения запуска таких вещей иногда бывает полезно переставить записи в ld.so.conf.

Вот. А у меня к сожалению не находит. Записи в ld.so.conf я переставлял да и вообще достаточно долго бился с этой проблемой.

А что говорит head -n1 /opt/asterisk/scripts/astercc/astercc? Выполнялся ли ldconfig после установки CRM-системы?

Сегодня посмотрю. Просто установки как таковой у этой системы и нет. По большому счету эта система- это набор скриптов и web морда поверх астера. Руками конфигурируются .conf файлы да и все. То есть она не собирает инфу о ОС и где что ей искать-нужно указывать ручками. К сожалению только недавно это понял так как устанавливаю ее впервые.

ovoshlook
() автор топика
Ответ на: комментарий от AITap

В общем после добавления ссылок в нужные директории проблема перешла вот в эту фазу:

install_driver(mysql) failed: DBD::mysql object version 4.019 does not match bootstrap parameter 4.018 at /</opt/asterisk/scripts/astercc/astercc>DynaLoader.pm line 234.

Где то в общем версии не сопоставляются. В mysql.pm я нашел указание на версию 4.019 изменил значение на 4.018, но к сожалению это не помогло.

вопрос. Где еще могут указываться версии?

ovoshlook
() автор топика
Ответ на: комментарий от ovoshlook

Такое впечатление, что помимо установленного в системе где-то валяется ещё один Perl и всему мешает.

AITap ★★★★★
()
Ответ на: комментарий от AITap

Тут не совсем удобно смотреть но тем не менее. Вот всё что сожержит упоминание о перле. Да и я сам на машину кроме астера и нужных ему пакетов не ставил перл. LAMP-сервер установлен при установке ОС. Он же и подтянул перл скорее всего. find / -name perl

/usr/lib/perl

/usr/bin/perl

/usr/share/perl

/usr/share/lintian/overrides/perl

/usr/share/doc/perl

/etc/perl

/etc/bash_completion.d/perl

/etc/bash_completion.d/helpers/perl

/etc/apparmor.d/abstractions/perl

find / -name perl5

/usr/lib/perl5

/usr/share/perl5

ovoshlook
() автор топика
Ответ на: комментарий от AITap

astercc любым редактором открывается как набор непонятных символов. Хотя с кодировкой вроде все норм... Может как то открыть с определенной кодировкой? В nano --help ни слова об этом...

ovoshlook
() автор топика
Ответ на: комментарий от ovoshlook

astercc любым редактором открывается как набор непонятных символов

Значит, он - бинарник. Но ведёт себя, как perl, и сообщения об ошибках у него perl'овые.

Не совсем понятно, что тут можно сделать, кроме установки (откуда?) более старых версий разных библиотек. Может быть, сменить используемый CRM?

AITap ★★★★★
()
Ответ на: комментарий от AITap

Да сменить я уже думал. просто хотелось все таки именно этот добить и понять все же что к чему... Если идеи появятся то дайте знать и спасибо за помощь.

ovoshlook
() автор топика
Ответ на: комментарий от Deleted

LAMP ставился при установке системы. но есть не ручками. Я уже думал было об этом. мол ламп как то не правильно обновил перл и пошло поехало. Руками не пробывал ставить. Хотя мысль такая уже была.

ovoshlook
() автор топика
Ответ на: комментарий от Deleted

Я кстати нашел почему может возникать такая ошибка сошласования: она возникает если в файлах mysql.pm и mysql.so разные версии DBD::mysql указаны, но у меня они одинаковые. Кстати на моем компе 2 файла mysql.so

/usr/lib/php5/20090626+lfs/mysql.so

/usr/lib/perl5/auto/DBD/mysql/mysql.so

Но в первом файле нет ни слова о версии. (если только там не другая кодировка)

ovoshlook
() автор топика
Ответ на: комментарий от Deleted

Переставил сервак LAMP руками... Проблема осталась... НО! я нашел файл который соделжит не ту версию (этот mysql.so находится в tmp папке и при каждом запуске создается заново) Есть идеи как это победить? в отчаянии уже честно говоря...

ovoshlook
() автор топика
Ответ на: комментарий от Deleted

Тем не менее лежит там mysql.so в котором есть упоминание о версии 4.018. Остальные же файлы с версией 4.019... то есть вопрос:

При конфигурировании asterCC для запуска файла astercc я создаю симлинк на mysql.so котороый находится в директорри perl (/usr/lib/perl5/auto/DBD/mysql/mysql.so). без этого симлинка astercc не находит эти файл. В этом файле указывается версия 4.019, которая указана в файле mysql.pm .

Вопрос: Почему же тогда при запуске astercc запускается не файл с версией 4.019 а файл с версией 4.018. Почему он создается в /tmp и как сделать чтобы запускался все-таки нужный mysql.so если симлинк к нему уже прописан и трейс показывает что именно этот mysql.so с версией 4.019 astercc видит при запуске?

ovoshlook
() автор топика
Ответ на: комментарий от ovoshlook

Я не так хорошо знаю Ubuntu-специфичные вопросы, но, как мне кажется, такое поведение не совсем корректно, точнее, совсем некорректно.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.