Подтвердить что ты не робот

У разных версий Perl требуются разные установки модуля CPAN?

У нас есть ферма серверов, и мы медленно переходим к новой версии Perl (5.12.1). В настоящее время мы работаем 5.8.5. ОС также будет обновлена ​​с RedHat 4 до RedHat 5, но RedHat 5 все еще вернется на Perl 5.8.8. Таким образом, некоторое время в нашем исходном дереве мы будем поддерживать две версии Perl.

Мне сказали установить новую версию Perl в наше исходное дерево, а также все модули CPAN, которые мы в настоящее время используем. Мне действительно сказали "скомпилировать" модули с правильной версией Perl. Я смущен этим. Могут ли некоторые модули конфигурировать себя по-разному для разных версий Perl? Учитывая это, я предполагаю, что я должен настроить каталог CPAN для каждой версии Perl в нашем дереве?

Любая информация или "gotchas" об этом сценарии?

Изменить: в качестве дополнительного вопроса будет ли работать тот же каталог cpan (указанный в ~/.cpan) для обоих деревьев, или мне нужно связать в разных каталогах, когда я работаю на разных деревьях (установка модулей)?

4b9b3361

Ответ 1

Любые модули perl, которые используют XS (скомпилированный C-код, динамически загружаемый), будут, как правило, работать только с той же версией perl, с которой они были скомпилированы. Это происходит по двум причинам:

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

Причина вторая заключается в том, что API perl может меняться между основными версиями, поэтому даже если вы должны были копировать библиотеки в соответствующий каталог, они могут работать или не работать в зависимости от того, какие функции они используют, и насколько отличаются две версии perl. Между 5.8 и 5.12 существуют существенные различия, которые могут нарушить почти весь код.

Это вообще не относится к чистым модулям Perl; они могут быть скопированы свободно с очень небольшим исключением. Это проблема только с XS.

Ответ 2

Некоторые модули perl компилируются и привязываются к системным библиотекам. Если вы обновляете свою ОС, есть вероятность, что эти библиотеки больше не присутствуют, что приведет к неправильной работе этих модулей или вообще не будет запущено. Поэтому рекомендуется перекомпилировать ваши модули perl.

Если вы переустановите новую версию perl с нуля в своей новой системе, вам не будет никаких проблем, так как во время установки будут использоваться правильные заголовки и библиотеки.

Ответ 3

Это не будет версия Perl, которая является проблемой, но лежащей в основе платформы. Redhat4 и Redhat5 намного отличаются от Perl 5.8.5 и 5.8.8. Фактически, если вы обнаружите разницу между этими версиями, это, вероятно, ошибка.

RH4 и RH5 имеют разные наборы библиотек, а собственные расширения perl должны быть перекомпилированы в отношении этих библиотек. Если вы сохраните эти скомпилированные деревья в исходном репозитории, вам действительно понадобятся 2 дерева. Если вы хотите этого избежать, вы можете "статически компилировать", но это становится крайне беспорядочным и может сильно повлиять на объем памяти и связанные с ней времена загрузки script, не рекомендуется (и во многих случаях даже не возможно).

Лучшим решением будет установка script, которая загружает/компилирует/устанавливает копии из CPAN и сохраняет исходное дерево без этих артефактов. Вы все же можете решить, хотите ли вы сделать это как часть установки на целевой машине или как часть создания двоичного пакета перед установкой на целевой машине.