2010-06-13 2 views
12

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

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

Любая информация или «ошибки» об этом сценарии?

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

ответ

9

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

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

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

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

5

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

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

4

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

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

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

-1

Пожалуйста, найдите приведенный ниже URL, чтобы понять, как устанавливать модули для разных CPAN.

http://perllinux.blogspot.in/2014/08/multiple-perl-cpan-on-single-machine.html

И, да, разные verisons из Perl необходимо модули должны быть установлены на всех из них.

+0

Просьба указать или обобстить статью, а не просто ссылку. Таким образом, ваш ответ остается полезным, даже если источник исчезает. – Brian

+0

@ Гаутам Прашант: подведите итог статьи :) :) –

Смежные вопросы