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