Имеется сервер с FreeBSD 8.2 amd64, с пересобраным ядром (ядерный ipfw,nat). Больше из конфигурации GENERIC ничего не менялось.
Firebird-client 2.0.7
Firebird-server 2.0.7_1
DBD-Interbase-0.48
Так получилось, что система 2 года не обновлялась и хорошо в принципе работала, но хотелось русский UTF8 в консоли и mc. Поправил локаль, решил поставить новую версию MC.
После
Код: Выделить всё
portsnap fetch update
мне сказали что куча софта устарело, ну и обновленный mc отказался ставиться. Решил обновить все разом (portupgrade -a), что и было роковой ошибкой.
Обновился perl, apache, php, firebird.
На сервере крутятся сайты, написанные на php и perl. И все бы ничего, конфиги подхватились, базы подхватились, на php все работает, с перловкой проблемы.
Раньше был порт p5-DBD-Interbase, сейчас его удалили из портов и пишут что ставить надо через CPAN.
Далее опишу примерный порядок действий и свои мысли:
1. ставим cpan, конфигаем его, заходим в shell
2. ставим DBI (install DBI) - встает без вопросов.
2. ставим DBD::InterBase (install DBD::InterBase) - в тесте просит указать путь к bin Firebird'а, по умолчанию стоит /usr/local/bin, файлы fb_inet_server и другие присутствуют, сервер запущен и даже клиентские приложения цепляются к базе и все корректно работает. Также указываем путь к lib (по умолчанию тоже верный), затем путь к базе, логин и пароль.
Результат - ошибка в Makefile.pl в строке 204, где происходит вызов процедуры gstat -user $user -password $password -h <путь_к_файлу>.
Начинаю копаться и выясняется что gstat нынче не в моде, сейчас он зовется fbstat. Как задать параметр при сборке в cpan так и не нашел, вытащил исходники, поправил руками в строке 202
Код: Выделить всё
gstat gstat.exe
на
Код: Выделить всё
fbstat fbstat.exe
Код: Выделить всё
perl Makefile.pl
Ну думаю победа! А-н нет...
make валит кучу ошибок, начинаются они с того, что в файле dbdimp.h подключается <ibase.h>. Лежит он в /usr/local/include, никого не трогает лежит... Но при сборке не подхватывается. Пало подозрение что надо задать параметр для make типа
Код: Выделить всё
--with-ib...=/usr/local/include
Костылем решил сделать так: скопировал в папку со скриптами ibase.h и в dbdimp.h в строке 68 указал
Код: Выделить всё
include "ibase.h"
вместо
Код: Выделить всё
include <ibase.h>
Следующими повалились ошибки в dbdimp.c. Undeclarated различных переменных... Т.к. после 2х суток беспрерывного ковыряния и попыток вылечить эту ересь разбираться в коде сильно уж не хотелось - стал комментить те условия, в которых были не объявленные переменные, а это строки: 114-116, 696-699, 1994-1995. В этих строках содержатся какие-то условия. В первом наборе определение чего-то и вывод на экран ( не критично как понимаю, ну не выведет он мне чем дальше займется - переживу). Во втором return result в зависимости от условия sv_yes или sv_no, а в третьем условие, касаемое perl_destruct_level. В общем комментирование помогло собраться модулю с парой warning и make install прошел нормально.
Сайт на перле заработал, есть коннект к базе и вроде даже все что нужно делается и правильно. Вопроса два:
1. Насколько критичны исправления в таком виде ( не просто же так этот код писали туда).
2. Что изначально было сделано не так, что отказался ставиться данный модуль? (ну кроме того, что было поставлено автоматическое обновление, которое наказало меня дополнительной работой)
p.s. локаль завелась после обновления mc
