How-To :: criação de pacotes .deb a partir de módulos CPAN


Diferentemente do que falei no artigo sobre instalação de módulos CPAN no Debian, hoje e assim como no caso do obmenu-generator no Slackware, veremos como empacotar esses módulos de forma a deixar as coisas mais organizadas.

Construindo pacotes Debian

Para começar será necessário instalar os seguintes pacotes:

$ 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, por acaso todos de autoria de Daniel Șuteu, a.k.a Trizen, ou seja, scripts perl que dependem dos seguintes módulos CPAN:

Linux-DesktopFiles
Data-Dump
WWW-Mechanize

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 

Este slideshow necessita de JavaScript.

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/ 

Este slideshow necessita de JavaScript.

A partir desse ponto cada módulo será tratado por vez, 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 ..

Este slideshow necessita de JavaScript.

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 ..

Este slideshow necessita de JavaScript.

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 ..

Este slideshow necessita de JavaScript.

Se tudo correu bem, todos os novos pacotes 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

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
$ dpkg -L libdata-dump-perl
$ dpkg -L libwww-mechanize-perl

Que me apresentou o seguinte:

(edps@debian)─(✓)─(20:24:37, Sex Abr 17)
└─(~/perl-packages)─(16 files, 372Kb)─> 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

┌(edps@debian)─(✓)─(20:25:33, Sex Abr 17)
└─(~/perl-packages)─(16 files, 372Kb)─> 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

┌(edps@debian)─(✓)─(20:25:39, Sex Abr 17)
└─(~/perl-packages)─(16 files, 372Kb)─> 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

┌(edps@debian)─(✓)─(20:25:48, Sex Abr 17)
└─(~/perl-packages)─(16 files, 372Kb)─> 

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, 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 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:

http://pastebin.com/Dk4FtYTA

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:

OpenBox + obmenu-generator + obbowser + clyrics!
OpenBox + obmenu-generator + obbowser + clyrics!

Referências

Building Debian packages of Perl modules

Debian Perl FAQ

How to Install CPAN Modules

2.�Installing Perl Modules

Accessing CPAN with Debian GNU/Linux

Anúncios
How-To :: criação de pacotes .deb a partir 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