Instalando módulos do CPAN via local::lib
Instalar módulos do CPAN em máquinas onde você não tem permissão de root é muito simples. Utilizando o módulo local::lib do próprio CPAN, você pode criar uma instalação local na qual os módulos são instalados no seu próprio home.
Configurando o cpan
Para isso, basta chamar um terminal e digitar o comando cpan. Ele vai mostrar uma pequena mensagem de apresentação e perguntar se você gostaria de deixá-lo configurar tudo automaticamente. Para a maioria dos casos a configuração automática é suficiente, no entanto eu vou configurar algumas opções por mim mesmo, então vou responder ‘no’.
Would you like me to configure as much as possible automatically? [yes] no
A primeira opção que eu vou responder diferente da default é a que define a política de pré-requisitos (<prerequisites_policy>). Ela define o que o cpan deve fazer ao se deparar com um módulo que possui um dependência. O default é ‘ask’ (perguntar).
<prerequisites_policy> Policy on building prerequisites (follow, ask or ignore)? [ask] follow
Eu vou modificar para ‘follow’ (seguir). Assim, quando o cpan encontrar um módulo que possui alguma dependência, ao invés de me perguntar, ele vai tentar instalá-la automaticamente. Isso é extremamente útil durante instalações longas com uma árvore de dependências grande como a do Catalyst.
<build_requires_install_policy> Policy on installing 'build_requires' modules (yes, no, ask/yes, ask/no)? [ask/yes] yes
Na sequência vem a pergunta sobre a instalação de dependências de build dos módulos. Eu vou alterar de ‘ask/yes’ para ‘yes’ para que as dependências de build também sejam instaladas. O default era perguntar e sugerir sim como resposta.
A seguir vem uma sequência de perguntas sobre ferramentas que o cpan normalmente usa. Eu aproveito esse momento para checar se alguma está faltando e então instalá-la.
<bzip2> Where is your bzip2 program? [/bin/bzip2] <gzip> Where is your gzip program? [/bin/gzip]
Várias opções depois, a próxima que eu modifico é o charset default de ISO-8859-1 para UTF-8.
The next option deals with the charset (aka character set) your terminal supports. In general, CPAN is English speaking territory, so the charset does not matter much but some CPAN have names that are outside the ASCII range. If your terminal supports UTF-8, you should say no to the next question. If it expects ISO-8859-1 (also known as LATIN1) then you should say yes. If it supports neither, your answer does not matter because you will not be able to read the names of some authors anyway. If you answer no, names will be output in UTF-8. <term_is_latin> Your terminal expects ISO-8859-1 (yes/no)? [yes] no
O cpan vai te perguntar se ele pode se conectar à internet para baixar a lista de repositórios. Ele é bem educado quanto às coisas que ele precisa fazer, por isso estamos configurando opções que o deixem mais independente. Responda yes e aguarde ele baixar a lista de servidores.
Depois de se comunicar com os servidores default, ele te pergunta sobre quais repositórios você quer configurar em três etapas. Primeiro pergunta o continente, depois o país e por último o próprio repositório. É possível escolher mais de uma opção simultaneamente. Eu escolhi para continentes América do Sul e América do Norte, para países Brasil, Chile e Estados Unidos e por último alguns repositórios em cada país. Fique à vontade para escolher quantos e quais quiser.
Pronto. Agora você está no shell do cpan.
Instalando o módulo local::lib
O próximo passo é instalar e configurar o módulo local::lib. Para isso digite no shell do cpan o comando:
cpan[1]> look local::lib
Isso vai fazer com o que o cpan baixe o módulo mas não instale-o automaticamente. Ao invés disso ele vai abrir um novo shell no diretório local onde ele desempacotou o módulo local::lib.
Neste shell, faça o bootstrap com os seguintes comandos:
catalyst@spectro:~/.cpan/build/local-lib-1.004003-UyX2wf$ perl Makefile.PL \ --bootstrap && make test && make install
Por último mas não menos importante é preciso exportar algumas variáveis de ambiente. Para isso saia do shell atual (Ctrl+D), saia do shell do cpan (bye ou quit) e execute no bash o seguinte comando:
echo 'eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)' >>~/.bashrc
Isso vai adicionar os comandos que exportam as variáveis de ambiente ao final do seu arquivo .bashrc, e então a cada login elas serão automaticamente exportadas.
Force a re-execução do seu bashrc ou faça logout e login novamente
catalyst@spectro:~$ . ~/.bashrc
Certifique-se que as variáveis de ambiente foram configuradas ou coisas estranhas podem acontecer. Entenda por “coisas estranhas” qualquer coisa diferente do funcionamento correto. Algumas podem ser realmente bizarras.
catalyst@spectro:~$ env | grep perl PERL5LIB=/home/catalyst/perl5/lib/perl5:/home/catalyst/perl5/lib/perl5... MODULEBUILDRC=/home/catalyst/perl5/.modulebuildrc PATH=/home/catalyst/perl5/bin:/usr/local/bin:/usr/bin:/bin:/usr/games PERL_MM_OPT=INSTALL_BASE=/home/catalyst/perl5 catalyst@spectro:~$
Retocando a maquiagem
Agora, antes de começar a instalar módulos, é uma boa atualizar o próprio módulo CPAN.pm. Atente para as maiúsculas e minúsculas.
catalyst@spectro:~$ cpan CPAN ... Installing /home/catalyst/perl5/bin/cpan Writing /home/catalyst/perl5/lib/perl5/i486-linux-gnu-thread-multi/auto... Appending installation info to /home/catalyst/perl5/lib/perl5/i486-linux... ANDK/CPAN-1.9402.tar.gz /usr/bin/make install -- OK Warning (usually harmless): 'YAML' not installed, will not store persist... catalyst@spectro:~$
Depois da instalação da nova versão do CPAN.pm, note que ele está avisando que o módulo YAML não está instalado. Para deixar tudo redondinho vamos intalá-lo também.
catalyst@spectro:~$ cpan YAML ... Writing /home/catalyst/perl5/lib/perl5/i486-linux-gnu-thread-multi/auto/Y... Appending installation info to /home/catalyst/perl5/lib/perl5/i486-linux... INGY/YAML-0.68.tar.gz /usr/bin/make install -- OK CPAN: YAML loaded ok (v0.68) Going to read 1 yaml file from /home/catalyst/.cpan/build/ DONE Restored the state of none (in 0.0265 secs) catalyst@spectro:~$
Agora sim. Vamos dar uma conferida onde foi parar o módulo YAML recém instalado:
catalyst@spectro:~$ ls ~/perl5/lib/perl5 CPAN CPAN.pm i486-linux-gnu-thread-multi local Test YAML YAML.pm catalyst@spectro:~$
Ele foi instalado dentro de uma árvore de diretórios criada no home do usuário corrente. Tudo isso sem pedir a senha de root uma única vez.
Conclusão
Instalar módulos do CPAN localmente sem precisar de senha de root é muito fácil. Isso é extremamente útil em máquinas onde você tem apenas permissão de usuário comum, como em servidores de hospedagem.
Uma outra vantagem é que para levar os mesmos módulos para outra máquina (com a mesma arquitetura) basta copiar o diretório perl5 que você acabou de criar, já que todos os módulos estão instalados dentro dele, bem como adicionar o comando que exporta as variáveis de ambiente na máquina destino. Isso também é bastante útil quando você tem um servidor de hospedagem que não te dá acesso a um shell.
Links (in)úteis
Comments
5 Responses to “Instalando módulos do CPAN via local::lib”
Leave a Reply


Estou te devendo uma cerveja!
Então, buy me a beer!
Então Blabos, também estou te devendo uma cerva.
próximo ES?
Blabos tb te devo uma cerva, quem sabe num proximo ES. Roteiro tranquilo demais de seguir esse que vc escreveu.
[...] de configurar o aplicativo cpan para instalar módulos localmente com a local::lib, o primeiro passo para configurar o mirror é instalar e configurar o módulo CPAN::Mini e seus [...]