Переинсталляция perl модулей
Dec. 23rd, 2013 12:32 pmПосле апгрейда перла с версии на версию возникает проблема с xs модулями,
не входящими в поставку из-за изменения abi, и они требуют перекомпиляции.
Например, при апдейте Fedora19 -> Fedora20 перл поменялся с 5.16.3 на 5.18.1.
Если не использовались пакеты модулей из репозитория, а инсталлировались
напрямую из cpan, то необходимо найти все xs модули, и перекомпилировать их.
Для упрощения процедуры, небольшой скрипт:
Примерно такой результат, видно, что модули threads, re::engine::Lua
и re::engine::Plugin требуют перекомпиляции. Команда
сделает это.
В разных ОС разные места, куда ставятся несистемные модули,
в Fedora это /usr/local/{share,lib}/perl5, в других может быть
другое место, можно посмотреть на
куда указывают
не входящими в поставку из-за изменения abi, и они требуют перекомпиляции.
Например, при апдейте Fedora19 -> Fedora20 перл поменялся с 5.16.3 на 5.18.1.
Если не использовались пакеты модулей из репозитория, а инсталлировались
напрямую из cpan, то необходимо найти все xs модули, и перекомпилировать их.
Для упрощения процедуры, небольшой скрипт:
# grep -Ern "(bootstrap|XSLoader)" /usr/local/{share,lib}/perl5 | \
perl -lne 'm#^/usr/local/(?:share|lib)/perl5/(.+?)\.pm:# && $h{ $1 =~ s#/#::#gr }++;
END{ print join "\n", keys %h }' | \
while read mod; do perl -M$mod -e "print \$mod::VERSION"; done
EGIN failed--compilation aborted.
Perl API version v5.16.0 of threads does not match v5.18.0 at /usr/share/perl5/XSLoader.pm line 92.
Compilation failed in require.
BEGIN failed--compilation aborted.
Perl API version v5.16.0 of re::engine::Lua does not match v5.18.0 at /usr/share/perl5/XSLoader.pm line 92.
BEGIN failed--compilation aborted at /usr/local/lib/perl5/re/engine/Lua.pm line 13.
Compilation failed in require.
BEGIN failed--compilation aborted.
Use of uninitialized value $mod::VERSION in print at -e line 1.
Using an array as a reference is deprecated at /usr/local/lib/perl5/Crypt/GOST.pm line 101.
Perl API version v5.16.0 of re::engine::Plugin does not match v5.18.0 at /usr/share/perl5/XSLoader.pm line 92.
BEGIN failed--compilation aborted at /usr/local/lib/perl5/re/engine/Plugin.pm line 14.
Compilation failed in require.
BEGIN failed--compilation aborted.
...
Примерно такой результат, видно, что модули threads, re::engine::Lua
и re::engine::Plugin требуют перекомпиляции. Команда
# cpan -f threads re::engine::Lua re::engine::Plugin
сделает это.
В разных ОС разные места, куда ставятся несистемные модули,
в Fedora это /usr/local/{share,lib}/perl5, в других может быть
другое место, можно посмотреть на
perl -V:config_args,куда указывают
-Dsitelib и -Dsitearch.
no subject
Date: 2013-12-23 11:01 am (UTC)no subject
Date: 2013-12-23 11:13 am (UTC)no subject
Date: 2013-12-23 11:17 am (UTC)no subject
Date: 2013-12-23 11:18 am (UTC)no subject
Date: 2013-12-23 11:52 am (UTC)Ъ-решение - использовать системный package manager, т.е. собирать из CPAN системные пакеты. Это умеет, например, CPANPLUS
no subject
Date: 2013-12-23 11:55 am (UTC)Надо будет попробовать.