Abstract
В процессе работы накапливается куча perl
модулей, часть установлена
ручками, часть через emerge
, часть вообще устанавливалась под предыдущими
версиями perl
… В результате начинаются конфликты при установке сложных
модулей типа Compress::Zlib
да и вообще не поймёшь какая версия
используется и как её обновить если нужно (в частности это касается DBI
,
который обычно ставится и ручками и через emerge
).
Список нужных модулей
Чтобы удалить ненужные модули нужно знать какие нужные. :) Для выяснения
этого вопроса я по своим серверам прогнал одну зверскую командочку по всем
каталогам где водятся perl
-скрипты:
rgrep --no-filename '\buse\s+[a-zA-Z0-9:_-]+\b' -size -100k |
perl -nle 'print for /\buse\s+([a-zA-Z0-9:_-]+)\b/' |
sort -u |
perl -ne 'eval "use $_;"; $@ ? warn($_) : print($_)' >needed_modules
Катарсис
emerge -aB perl
emerge -C $(qlist -C -I -v dev-perl/ | sed s,^,=,)
emerge -C perl
rm -rf /usr/lib/perl5/
rm -rf ~/.cpan* /var/tmp/.cpan*
emerge -K perl
emerge -uDNa world
Естественно, для последнего пункта неплохо чтобы у вас система была
уже обновлена и world не потянул за собой ещё сотню пакетов кроме
У меня
Из них мне действительно нужны |
Upgrade
Обновляем cpan
- не ручками же модули ставить… :)
В процессе он попросит себя настроить, кроме того он там попутает
зависимости Compress::Zlib
, из-за чего команду install Bundle::CPAN
придётся перезапускать несколько раз.
cpan
> install Bundle::CPAN # поставит всё кроме Compress::Zlib и Archive::Zip
Ctrl-D
cpan
> o conf commit
> install Bundle::CPAN # поставит Compress::Zlib и подвиснет в Archive::Zip
Ctrl-C
> install Bundle::CPAN # поставит Archive::Zip
Обновляем нужные модули из тех, которые уже поставил emerge
:
cpan
> install DBI
> install DBD::mysql # тесты не пройдут
> look DBD::mysql # нужно ручками задать параметры
perl Makefile.PL --testuser=root --testpassword=YOURPASS
Ctrl-D
> install DBD::mysql # теперь тесты пройдут, а если нет, то возможно вы
# забыли запустить:
# mysql_fix_privilege_tables YOURPASS
# после обновления mysql
Сносим Gentoo-шные - иначе будут юзаться они, хоть они и более старые и объясняем Gentoo что мы эти модули установили сами:
emerge -C dev-perl/DBD-mysql dev-perl/DBI
mkdir -p /etc/portage/profile
{ perl -le 'use DBI; print "dev-perl/DBI-", $DBI::VERSION';
perl -le 'use DBD::mysql; print "dev-perl/DBD-mysql-", $DBD::mysql::VERSION';
} >> /etc/portage/profile/package.provided
Обновляем уже установленные (в основном - идущие в комплекте с perl
) модули:
cpan
> upgrade
Судя по всему, в процессе этого апгрейда обновляется модуль
Pod::Man, который идёт в комплекте в perl, причём он заменяет файлы прямо в
/usr/lib/perl5/5.8.8/ , вместо того чтобы установить новую версию в
/usr/lib/perl5/site_perl/5.8.8/ .
И в результате perldoc Module::Name перестаёт выводить русский
(man Module::Name работает нормально). В принципе, вероятно, так и
задумано - невозможно корректно обработать что-либо кроме UTF8 в
POD-документации т.к. в ней невозможно задать кодировку, вот русский в
KOI8 и слетает. Но переводить всю документацию в UTF8 я пока не планирую,
поэтому рекомендую взять Man.pm шедший в
комплекте с perl-5.8.8 и положить его ручками в
/usr/lib/perl5/site_perl/5.8.8/Pod/ . |
Install
cpan
> install Compress::Zlib
> install version
> install Business::CreditCard
> install Crypt::RC4
> install Data::Alias
> install Digest::SHA1
> install GD
> install HTML::Parser
> install HTML::Strip
> install Inline
> install JavaScript::SpiderMonkey
> install JSON::XS
> install List::MoreUtils
> install LWP
> install Math::Pari
> install Module::Install
> install Export::Attrs
> install Smart::Comments
> install Term::ReadKey
> install Term::ReadLine::Gnu
> install Test::Differences
> install Test::Distribution
> install Test::Exception
> install Test::MockModule
> install Test::Pod
> install Test::Pod::Coverage
> install Regexp::Common
> install POWER::Utils
> install POWER::Utils::Resource
> install POWER::Utils::HexDump
> install POWER::Utils::IO
> install POWER::GPG
> install POWER::Email
> install POWER::LOG
> install POWER::iCGI
> install POWER::Tree
> install POWER::SQL
> install Regexp::Common::RealHTML
> install Regexp::Common::Fast
> install POWER::NB::IO
> install POWER::NB::Resolver
> install POWER::SSL
> install POWER::Multi::GET
> install POWER::Epoll
> install POWER::Event
> install POWER::Event::Timer
> install POWER::Event::IO