Переинсталляция perl модулей
Dec. 23rd, 2013 12:32 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
После апгрейда перла с версии на версию возникает проблема с 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
.