How-To :: remoção manual de módulos CPAN


Aqui veremos na distro Slackware (porém, isso serve para qualquer distro) a remoção de módulos CPAN por diferentes meios.

Porque removê-los?

Em meu caso, remover os módulos CPAN se apoia ao fato de que já empacotei os mesmos tanto no Debian, quanto no Slackware, portanto não preciso de um mesmo módulo instalado em 2 locais diferentes (todos vistos na imagem abaixo) no Slackware e de alguns para o caso do Debian.

Este slideshow necessita de JavaScript.

O que nos leva ao tópico do post é a dificuldade em remover tais módulos sem o uso de algum módulo extra do CPAN! oras, se quero deixar meu sistema limpo vou instalar mais trecos nele?, parecia que sim até que…

Soluções:

Antes de começar informo que o foco deste tutorial é o uso do CPAN como root e não rodando-o localmente como usuário normal local::lib, se este for o seu caso as coisas mudam de figura.

Abaixo veremos diferentes métodos para remover os tais módulos.

1. o modo certo.

rsrs, caso alguém saiba como remover tais módulos do jeito correto, por favor me avisem! kkk

2. via script.

Via script podemos criar um script perl, contendo o seguinte:

# uninstall_perl_module.pl from PerlTricks.com

use 5.14.2;
use ExtUtils::Installed;
use ExtUtils::Packlist;

# Exit unless a module name was passed
die ("Error: no Module::Name passed as an argument. E.G.\n\t perl $0 Module::Name\n") unless $#ARGV == 0;

my $module = shift @ARGV;

my $installed_modules = ExtUtils::Installed->new;

# iterate through and try to delete every file associated with the module
foreach my $file ($installed_modules->files($module)) {
    print "removing $file\n";
    unlink $file or warn "could not remove $file: $!\n";
}

# delete the module packfile
my $packfile = $installed_modules->packlist($module)->packlist_file;
print "removing $packfile\n";
unlink $packfile or warn "could not remove $packfile: $!\n";

# delete the module directories if they are empty
foreach my $dir (sort($installed_modules->directory_tree($module))) {
    print("removing $dir\n");
    rmdir $dir or warn "could not remove $dir: $!\n";
}

O script acima foi publicado originalmente em:

How to cleanly uninstall a Perl module

Salve-o com o nome que quiser, aqui atribui o nome uninstall_perl_module.pl tal como apresentado no link acima, salvei-o em /usr/local/bin e dei-lhe permissão de execução.

Logue-se como root, e entre no shell CPAN e instale os módulos ExtUtils::Installed e ExtUtils::Packlist.

$ su
# perl -MCPAN -e shell
cpan[1]> install ExtUtils::Installed
cpan[2]> install ExtUtils::Packlist
cpan[3]> exit
# exit
$ exit

Este slideshow necessita de JavaScript.

Daí, caso saiba qual módulo remover, use como exemplo:

$ sudo perl /usr/local/bin/uninstall_perl_module.pl App::cpanminus

remove-build-modules-CPAN-003

Bem… resolve, mas não acho que ficou legal!

3. o modo tosco.

O modo tosco seria acessar a pasta do módulo geralmente salva em #.cpan/build, como em /root/.cpan/build/File-DesktopEntry-0.08-rvcloY/, e rodar um:

# make uninstall

Somente isso já lhe daria o caminho das pedras, digo, quem remover, exemplo:

root@slackware~/.cpan/build/File-DesktopEntry-0.08-rvcloY # make uninstall

Uninstall is unsafe and deprecated, the uninstallation was not performed.
We will show what would have been done.

unlink /usr/local/share/man/man3/File::DesktopEntry.3
unlink /usr/local/share/perl5/File/DesktopEntry.pm
unlink /usr/local/lib/perl5/auto/File/DesktopEntry/.packlist

Uninstall is unsafe and deprecated, the uninstallation was not performed.
Please check the list above carefully, there may be errors.
Remove the appropriate files manually.
Sorry for the inconvenience.

root@slackware~/.cpan/build/File-DesktopEntry-0.08-rvcloY # 

Como visto acima, todas as linhas começadas por unlink referem-se ao que foi instalado. Infelizmente o make uninstall não fará o trabalho para você, daí bastaria remover cada arquivo individualmente:

# rm -fv /usr/local/share/man/man3/File::DesktopEntry.3
# rm -fv /usr/local/share/perl5/File/DesktopEntry.pm
# rm -fv /usr/local/lib/perl5/auto/File/DesktopEntry/.packlist

E pronto! mas há um jeitinho melhor…

4. o modo bruto.

No modo dos brutos, as coisas funcionam perfeitamente seja removendo apenas um módulo CPAN como o ExtUtils:

$ find /usr/local/lib/perl5/auto/ExtUtils/ -name '*.packlist' -exec cat >> remove_extutils.txt {} \;
$ cat remove_extutils.txt | xargs -l1 sudo rm -fv
$ sudo rm -rf /usr/local/share/perl5/ExtUtils
$ sudo rm -rf /usr/local/lib/perl5/auto/ExtUtils

Este slideshow necessita de JavaScript.

Ou todos os módulos instalados via CPAN:

$ find /usr/local/lib/perl5/auto/ -name '*.packlist' -exec cat >> remove_modules.txt {} \;
$ cat remove_modules.txt | xargs -l1 sudo rm -fv
$ sudo rm -rf /usr/local/lib/perl5
$ sudo rm -rf /usr/local/share/perl5

Este slideshow necessita de JavaScript.

Querendo passar um pente-fino em /usr/local, podemos remover pastas vazias e checar se ficou algo estranho em /usr/local/bin com:

$ du -h /usr/local/lib/perl5
$ du -h /usr/local/share/perl5
$ du -h /usr/local/share/man
$ du -h /usr/local/man
$ sudo rm -rf /usr/local/lib/perl5
$ sudo rm -rf /usr/local/share/perl5
$ sudo rm -rf /usr/local/man
$ ls /usr/local/bin/
término da limpeza.
término da limpeza.

* obviamente sugiro que verifique todas as pastas acima antes de removê-las, isso porque às vezes instalamos pacotes da maneira tradicional: ./configure && make && make install e quando não especificamos a opção –prefix= do ./configure é para /usr/local onde geralmente esses programas são instalados!

E caso queira ganhar mais algum espaço em disco, remova também as pastas .cpan e .cpanplus no diretório do root:

$ sudo rm -rf /root/.cpanplus
$ sudo rm -rf /root/.cpan

Sistema limpo, divirtam-se… o mlocate agradece!

IntÉ!

Anúncios
How-To :: remoção manual de módulos CPAN

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s