Módulos CPAN no Debian e distros GNU/Linux em geral

Tratará este arquivo, sobre como utilizar de diferentes formas os módulos CPAN no Debian, seja manualmente, via CPAN, via CPANminus ou empacotando. Referente às demais distros, tanto a forma manual, quanto ao CPAN e em último caso, ao CPANminus (se disponível nos repositórios) também se aplicam.

[ Hits: 16.588 ]

Por: edps em 27/04/2015 | Blog: https://edpsblog.wordpress.com/


Empacotando módulos CPAN no Debian



Este caso é o que recomendo para qualquer usuário de distro, assim com o próprio gerenciador de pacotes da distro. No caso, slackpkg para o Slackware e apt-get|aptitude|dpkg para o Debian, posso facilmente retornar o estado inicial de minha distro, removendo os pacotes dos módulos que criei.

Slackware

Não irei exemplificar aqui os pacotes do Slackware, porque na verdade são templates criadas para o SlackBuilds, o empacotamento e instalação dos módulos citados podem ser vistos em meu blog:

Debian

Agora, em se tratando de Debian, trate logo de instalar os seguintes pacotes:
  • build-essential;
  • devscripts;
  • dpkg-dev;
  • equivs;
  • dh-make-perl.

sudo apt-get update
sudo apt-get install build-essential devscripts dpkg-dev equivs dh-make-perl

Os sources

Aqui, tomarei como exemplo 3 extras que uso bastante em meu OpenBox (obmenu-generator, obbrowser e clyrics), por acaso todos de autoria de Daniel Șuteu, citado na introdução, ou seja, scripts perl que dependem dos seguintes módulos CPAN:
Então, direto ao que interessa, baixemos os sources e descompactemos os mesmos:

mkdir perl-packages && cd perl-packages
wget -nv https://cpan.metacpan.org/authors/id/T/TR/TRIZEN/Linux-DesktopFiles-0.09.tar.gz
wget -nv http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/Data-Dump-1.22.tar.gz
wget -nv http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/WWW-Mechanize-1.74.tar.gz
tar xf Linux-DesktopFiles-0.09.tar.gz
tar xf Data-Dump-1.22.tar.gz
tar xf WWW-Mechanize-1.74.tar.gz

Em seguida, usamos o "dh-make-perl" para debianizar os módulos CPAN:

dh-make-perl Linux-DesktopFiles-0.09/
dh-make-perl Data-Dump-1.22/
dh-make-perl WWW-Mechanize-1.74/

A partir desse ponto, cada módulo será tratado individualmente, comecemos pelo pacote que me levou a criar meu primeiro SlackBuild, o Linux-DesktopFiles. Entre em seu diretório e use o "dch" para modificar os campos AUTOR e EMAIL (se desejar, isso é opcional), caso queira pule para o passo seguinte.

Linux-DesktopFiles

cd Linux-DesktopFiles-0.09/
dch -e

Se não pulou o passo anterior, modifique a linha AUTOR e EMAIL, salve e feche o arquivo, daí, crie e instale o meta-pacote de dependências:

mk-build-deps
sudo dpkg -i liblinux-desktopfiles-perl-build-deps_0.09-1_all.deb

Pronto, agora basta iniciar o empacotamento:

dpkg-buildpackage -us -uc -b

Após a conclusão, instale o novo pacote:

sudo dpkg -i ../liblinux-desktopfiles-perl_0.09-1_all.deb
cd..

Data-Dump

Passemos para o 2º caso, o Data-Dump. Entre em seu diretório, modifique a linha AUTOR e EMAIL se desejar, salve e feche o arquivo, crie e instale o meta-pacote de dependências:

cd Data-Dump-1.22/
dch -e
mk-build-deps
sudo dpkg -i liblinux-desktopfiles-perl-build-deps_0.09-1_all.deb

Daí, empacote e instale o novo pacote:

dpkg-buildpackage -us -uc -b
sudo dpkg -i ../liblinux-desktopfiles-perl_0.09-1_all.deb
cd ..

WWW-Mechanize

E enfim o 3º caso, o WWW-Mechanize, tudo exatamente igual ao descrito anteriormente:

cd WWW-Mechanize-1.74/
dch -e
mk-build-deps
sudo dpkg -i libwww-mechanize-perl-build-deps_1.74-1_all.deb
dpkg-buildpackage -us -uc -b
sudo dpkg -i ../libwww-mechanize-perl_1.74-1_all.deb
cd ..

Se tudo correu bem, todos os novos pacotes ".deb" e os arquivos ".changes" estarão na raiz da pasta "perl-packages", o conteúdo desses arquivos ".changes" serão parecidos com isto:

Format: 1.8
Date: Fri, 17 Apr 2015 20:03:01 -0300
Source: liblinux-desktopfiles-perl
Binary: liblinux-desktopfiles-perl
Architecture: all
Version: 0.09-1
Distribution: unstable
Urgency: low
Maintainer: edps
Changed-By: NOME_DO_SUJEITO
Description:
liblinux-desktopfiles-perl - Get and parse the Linux desktop files.
Changes:
liblinux-desktopfiles-perl (0.09-1) unstable; urgency=low
.
   * Initial Release.
Checksums-Sha1:
f119fff5d588223db82c4821f19ad1bed9ec90b9 14664 liblinux-desktopfiles-perl_0.09-1_all.deb
Checksums-Sha256:
8758f1a3249626ea11afe1288c8341bf877d606cc60981b099e3386765dc19b5 14664 liblinux-desktopfiles-perl_0.09-1_all.deb
Files:
5480fbdb54f0f78bb6982d8cfad5f02b 14664 perl optional liblinux-desktopfiles-perl_0.09-1_all.deb

(Que bunitinhu, com md5 e tudo!)

Se estiver curioso, você pode listar o que foi instalado com:

dpkg -l liblinux-desktopfiles-perl
dpkg -l libdata-dump-perl
dpkg -l libwww-mechanize-perl

Cujo resultado foi isso:

| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Nome             Versão       Arquitectura  Descrição
+++-================-=============-=============-=====================================
ii  liblinux-desktop 0.09-1        all           Get and parse the Linux desktop files

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Nome             Versão       Arquitectura  Descrição
+++-================-=============-=============-=====================================
ii  libdata-dump-per 1.22-1        all           Pretty printing of data structures

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Nome             Versão       Arquitectura  Descrição
+++-================-=============-=============-=====================================
ii  libwww-mechanize 1.74-1        all           Handy web browsing in a Perl object


Ou pode listar o conteúdo dos pacotes assim:

dpkg -L liblinux-desktopfiles-perl /.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/liblinux-desktopfiles-perl
/usr/share/doc/liblinux-desktopfiles-perl/README
/usr/share/doc/liblinux-desktopfiles-perl/copyright
/usr/share/doc/liblinux-desktopfiles-perl/changelog.gz
/usr/share/doc/liblinux-desktopfiles-perl/changelog.Debian.gz
/usr/share/man
/usr/share/man/man3
/usr/share/man/man3/Linux::DesktopFiles.3pm.gz
/usr/share/perl5
/usr/share/perl5/Linux
/usr/share/perl5/Linux/DesktopFiles.pm


dpkg -L libdata-dump-perl
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/libdata-dump-perl
/usr/share/doc/libdata-dump-perl/README
/usr/share/doc/libdata-dump-perl/copyright
/usr/share/doc/libdata-dump-perl/changelog.gz
/usr/share/doc/libdata-dump-perl/changelog.Debian.gz
/usr/share/man
/usr/share/man/man3
/usr/share/man/man3/Data::Dump.3pm.gz
/usr/share/man/man3/Data::Dump::Filtered.3pm.gz
/usr/share/man/man3/Data::Dump::Trace.3pm.gz
/usr/share/perl5
/usr/share/perl5/Data
/usr/share/perl5/Data/Dump
/usr/share/perl5/Data/Dump/Trace.pm
/usr/share/perl5/Data/Dump/Filtered.pm
/usr/share/perl5/Data/Dump/FilterContext.pm
/usr/share/perl5/Data/Dump.pm


dpkg -L libwww-mechanize-perl
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/libwww-mechanize-perl
/usr/share/doc/libwww-mechanize-perl/copyright
/usr/share/doc/libwww-mechanize-perl/changelog.gz
/usr/share/doc/libwww-mechanize-perl/changelog.Debian.gz
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/mech-dump.1p.gz
/usr/share/man/man3
/usr/share/man/man3/WWW::Mechanize::Examples.3pm.gz
/usr/share/man/man3/WWW::Mechanize::Image.3pm.gz
/usr/share/man/man3/WWW::Mechanize.3pm.gz
/usr/share/man/man3/WWW::Mechanize::Cookbook.3pm.gz
/usr/share/man/man3/WWW::Mechanize::FAQ.3pm.gz
/usr/share/man/man3/WWW::Mechanize::Link.3pm.gz
/usr/share/perl5
/usr/share/perl5/WWW
/usr/share/perl5/WWW/Mechanize
/usr/share/perl5/WWW/Mechanize/Cookbook.pod
/usr/share/perl5/WWW/Mechanize/Link.pm
/usr/share/perl5/WWW/Mechanize/Examples.pod
/usr/share/perl5/WWW/Mechanize/Image.pm
/usr/share/perl5/WWW/Mechanize/FAQ.pod
/usr/share/perl5/WWW/Mechanize.pm
/usr/bin
/usr/bin/mech-dump


Explicando os motivos

Diferentemente de bash scripts, scripts perl tendem em sua maioria a requerer algo, no caso módulos, que às vezes não estão incluídos na instalação padrão do Perl e visando deixar as coisas mais limpas, digamos num caso de remoção, bastaria usar o apt-get para remover todos os traços do que foi instalado e remover manualmente os scripts que uso:

sudo apt-get --purge remove liblinux-desktopfiles-perl libdata-dump-perl libwww-mechanize-perl
sudo rm -fv /usr/local/bin/clyrics
sudo rm -fv /usr/local/bin/obbrowser
sudo rm -fv /usr/local/bin/obmenu-generator

Já usando o CPAN, ou o pacote CPANminus, sei como instalar os módulos, mas não como removê-los apropriadamente pelo CPAN, assim o sistema às vezes fica "sujo", noutras corrompe o que estava funcionando bem. Como no caso do Slackware, onde o pacote sbotools deixou de funcionar.

Aos interessados em instalar os módulos acima da forma tradicional, bastaria isto:

su
# perl -MCPAN -e shell

cpan> install Bundle::CPAN
cpan> reload cpan
cpan> install Data::Dump
cpan> install Linux::DesktopFiles
cpan> install WWW::Mechanize
cpan> exit

# exit
exit

Ou, com o CPANminus assim:

sudo cpan install Data::Dump
sudo cpan install Linux::DesktopFiles
sudo cpan install -f WWW::Mechanize

Dos scripts que uso aqui, o "obbrowser" (que lista as pastas de sua $HOME direto do obmenu-generator, é o único que tem uma das dependências que já faz parte dos repos Debian, o pacote libfile-mimeinfo-perl, o qual só descobri após tê-lo substituído pelo pacote que criei seguindo seguindo o esquema aqui apresentado. A diferença gritante está na versão dos pacotes, enquanto que o meu é a 0.27-1, o dos repos Debian ainda é o 0.16-1, o log de todo o empacotamento (dos 4 novos pacotes) está disponível no link abaixo:
Então, vimos aqui que com um pouco de esforço e pesquisa dá para manter um sistema Debian limpo e um OpenBox confortável e de fácil uso como esse:
Linux: Módulos CPAN no Debian e distros GNU/Linux em geral

Referência


Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Usando da forma tradicional
   3. Via shell CPAN
   4. Via CPANminus
   5. Empacotando módulos CPAN no Debian
   6. Removendo módulos CPAN manualmente
   7. Conclusão
Outros artigos deste autor

Personalidades do mundo Open Source

kernel-ck para Arch Linux

Executando máquinas virtuais diretamente no GDM

O .bashrc de meu Debian

Vida nova para o Kurumin 7

Leitura recomendada

Programando em Perl (parte 2)

Comparação entre Tcl e Perl

Programando em Perl (parte 1)

Um pouco de PERL

Perl e MySQL

  
Comentários
[1] Comentário enviado por fabio em 27/04/2015 - 11:01h

Perl é o que há! Sempre foi minha linguagem predileta. Muitas ferramentas e outras linguagens utilizam o modelo de expressões regulares do Perl.

[2] Comentário enviado por edps em 27/04/2015 - 18:14h


[1] Comentário enviado por fabio em 27/04/2015 - 11:01h

Perl é o que há! Sempre foi minha linguagem predileta. Muitas ferramentas e outras linguagens utilizam o modelo de expressões regulares do Perl.


Obrigado pelo comentário, a mim (um leigo) me parece ser bem mais fácil de se trabalhar com Perl do que com outras linguagens a começar pelo fato de que seus módulos ajudam bastante.

Um abraço.

[3] Comentário enviado por mineirobr em 30/04/2015 - 10:18h

Para instalar o cpanminus pode fazer assim:
$ cpan App::cpanminus

depois para instalar os módulos:
$ cpanm Nome::Do::Modulo

cpanminus é muito mais rápido para instalar módulos e você pode instalar módulos que estão no github.

[4] Comentário enviado por edps em 30/04/2015 - 11:18h


[3] Comentário enviado por mineirobr em 30/04/2015 - 10:18h

Para instalar o cpanminus pode fazer assim:
$ cpan App::cpanminus

depois para instalar os módulos:
$ cpanm Nome::Do::Modulo

cpanminus é muito mais rápido para instalar módulos e você pode instalar módulos que estão no github.


Obrigado pelo complemento.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts