Breno G. de OliveiraPublicado em 01/09/2011
Praticamente toda distribuição Linux vem com "perl", o que é ótimo. Mas a versão instalada em seu sistema não é necessariamente a mais recente. Mais ainda, você provavelmente não quer misturar módulos instalados via CPAN com módulos instalados pelo gerenciador de pacotes do seu sistema operacional.
Soluções muito bacanas para a instalação de módulos sem precisar de root já existem a algum tempo, mas agora você pode também se beneficiar de ter versões do "perl" instaladas e personalizadas sem precisar de root, com o perlbrew!
O perlbrew é uma ferramenta para gerenciar múltiplas instalações do perl em seu $index.t. Com ela, você cria universos completamente isolados para cada instalação, incluindo módulos e opções de compilação. Isso traz as seguintes vantagens:
O "perl" que vem com seu sistema serve um propósito específico e convém deixá-lo em paz. Além de possuir patches específicos para sua distro, alguns programas essenciais para o bom funcionamento do seu sistema podem contar com essas personalizações, e atualizar o perl sem levar isso em conta vai na melhor das hipóteses confundir seu gerenciador de pacotes. Além disso, há sistemas que usam versões do perl tão antigas que não há mais suporte a elas, e outros que introduzem seus próprios bugs, mais de uma vez!
Enquanto o local::lib é uma ótima solução para instalação de módulos localmente, seu objetivo limita-se a isso, e ele não espera que você utilize os módulos instalados em outras versões do perl. Isso é particularmente importante se você tem módulos em XS no seu local::lib, compilados em relação ao perl do sistema. Tais módulos vão apresentar erros bizarros ou parar de funcionar completamente se utilizados com um binário diferente do perl.
O perlbrew sabe disso, e usa a mesma abordagem do local::lib para manter
um diretório local de módulos para cada perl instalado por ele. Por esse
motivo, é recomendado desativar completamente seu local::lib antes de
usar o perlbrew. Para isso, basta retirar a chamada ao local::lib do
seu ~/.bashrc
e/ou mover o diretório ~/perl5
para outro nome ou local.
Instalar o perlbrew não poderia ser mais simples. Tudo que você precisa é de um sistema UNIX-like como Linux, BSD ou Mac OS X, e da shell "bash" (que já vem com a maioria dos sistemas).
Apenas copie e cole essa linha em seu terminal:
$ \curl -L https://install.perlbrew.pl | bash
Depois, adicione o script de inicialização ao seu arquivo .bashrc
:
$ echo "source ~/perl5/perlbrew/etc/bashrc" >> ~/.bashrc
E o execute novamente, seja simplesmente abrindo um novo terminal ou digitando o seguinte comando na shell atual:
$ . ~/.bashrc
Pronto!*
A primeira coisa que podemos fazer é listar os diferentes perls instalados. Para isso, basta digitar:
$ perlbrew list
Você verá algo como:
* /usr/bin/perl (5.10.1)
Isso indica que o único perl disponível é o do sistema (no meu caso, o 5.10.1). Vamos instalar uma versão mais moderna!
$ perlbrew install perl-5.20.3
Note que alguns módulos/programas (como o Padre) precisam que o perl seja instalado com suporte a threads, e nesse caso você precisa passar essa opção na instalação:
$ perlbrew install perl-5.20.3 -D usethreads
Agora é só ir tomar um café enquanto o perlbrew baixa e compila seu novo perl. A tarefa pode demorar de 5 a 20 minutos, então relaxe =)
Se quiser ver o que está sendo feito, abra um outro terminal e digite:
$ tail -f ~/perl5/perlbrew/build.log
Quando a instalação acabar, o comando perlbrew list
deverá mostrar
seu novo perl disponível para uso:
$ perlbrew list
perl-5.20.3
* /usr/bin/perl (5.10.1)
O asterisco (*
) indica o perl ativo na shell atual. Para usar o novo
perl, basta digitar:
$ perlbrew switch perl-5.20.3
A partir de agora, seu usuário usará o perl 5.20.3, mesmo em outros terminais que você abrir. Experimente, digitando:
$ perl -v
This is perl 5, version 20, subversion 3 (v5.20.3) built for x86_64-linux
Note que, feita a modificação, você poderá executar o comando cpan
(ou cpanp
, cpanm
, o que preferir) como seu próprio usuário, e os
módulos serão instalados para aquela versão do perl, sem complicações nem
conflitos! Não é o máximo?
Quer voltar a usar o perl do seu sistema? Sem problemas!
$ perlbrew off
Para voltar a usar seu perl local, basta usar o perlbrew switch
novamente.
Além de list
, install
, switch
e off
, o perlbrew tem vários outros
comandos úteis:
perlbrew available
- lista as diferentes versões do perl disponíveis
para instalação (com um i
do lado das que já foram instaladas). $ perlbrew available
perl-5.27.3
perl-5.26.0
perl-5.24.2
perl-5.22.4
i perl-5.20.3
perl-5.18.4
perl-5.16.3
perl-5.14.4
perl-5.12.5
perl-5.10.1
perl-5.8.9
perl-5.6.2
perl5.005_04
perl5.004_05
cperl-5.27.1
cperl-5.26.1
As versões listadas não são as únicas disponíveis, mas as últimas de cada tipo. Por exemplo, da série 12 do perl 5 (perl-5.12) apenas a 5.12.4 é exibida, mas você pode instalar também a 5.12.3 ou mesmo a 5.12.0. Lembre-se que, no perl, números pares indicam versões estáveis (5.10, 5.12, 5.14) e números ímpares indicam versões de desenvolvimento (5.11, 5.13, 5.15).
Participa ou quer participar do desenvolvimento de ponta do próprio Perl 5? Basta digitar:
$ perlbrew install blead-perl
Para instalar o snapshot diário de desenvolvimento.
perlbrew self-upgrade
- atualiza seu perlbrew com a última versão disponívelperlbrew use
- ativa temporariamente um perl (apenas para a shell atual). $ perlbrew use perl-5.14.1
perlbrew uninstall
- remove um perl instalado localmente. $ perlbrew uninstall perl-5.14.1
perlbrew install-cpanm
- instala o "cpanminus" com apenas um comando.Para ver toda a lista de comandos, basta digitar perlbrew help
ou perlbrew -h
.
Você pode até mesmo dar nomes às diferentes instalações, como "trabalho", "desenv"
ou "chocolate" (que foi? Estou com fome!).
A ideia original do perlbrew é permitir que cada usuário tenha suas próprias versões
do perl instaladas. É possível, no entanto, que você queira oferecer uma ou mais
compilações específicas para serem compartilhadas entre usuários. Para isso, basta
definir a variável de ambiente PERLBREW_ROOT
para o diretório desejado antes
de rodar o instalador:
$ export PERLBREW_ROOT=/opt/perlbrew
$ curl -L http://xrl.us/perlbrewinstall | bash
Os comandos acima instalarão o perlbrew em /opt/perlbrew
- assumindo, claro, que
seu usuário tem permissão para escrever nesse diretório. Depois disso, basta que
os usuários que desejam usar seu perlbrew façam:
$ echo 'export PERLBREW_ROOT=/opt/perlbrew; source ${PERLBREW_ROOT}/etc/bashrc' >> ~/.bashrc
Pronto, a partir daí qualquer um poderá escolher seu perl, mas apenas os que tiverem permissão
de escrita no diretório definido em PERLBREW_ROOT
poderão instalar novas versões do perl.
É importante manter a env PERLBREW_ROOT com o valor correto antes de executar o bashrc. Caso não exista, o PATH ficara vazio e vai aparecer uma mensagem dizendo que o perlbrew não esta instalado.
Em alguns casos, ao instalar uma nova versão do perl com o perlbrew, você pode querer
instalar todos os módulos que estava usando em uma outra versão. Uma das formas mais
simples de se fazer isso é através da função autobundle
do CPAN:
perl -MCPAN -e autobundle
O comando pode demorar um pouco, mas no final vai retornar uma mensagem com algo como:
Wrote bundle file
/index.t/usuário/.cpan/Bundle/Snapshot_2011_09_01_00.pm
Agora é só fazer um perlbrew switch
para a nova versão e instalar seu "bundle" de uma vez só:
perl -MCPAN -e 'install Bundle::Snapshot_2011_09_01_00'
O perlbrew é uma excelente adição ao ferramental de qualquer desenvolvedor Perl, permitindo o uso de diferentes versões do perl facilmente independente do sistema ou de privilégios. Testar módulos e aplicações em vários ambientes nunca foi tão fácil ou instantâneo, e agora não há mais desculpa para ficar preso ao perl do seu sistema operacional.
Divirta-se!
Para 99.99% dos casos, os comandos de instalação descritos acima vão funcionar perfeitamente e vc será feliz com seu novo perlbrew, mas para os outros 0.01% também há solução.
Em alguns servidores, em especial, com SE Linux, a instalação padrão pode
falhar, reclamando de não ter permissão para acessar o /usr/bin/env
:
[failserver]$ curl -L http://xrl.us/perlbrewinstall | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 648 100 648 0 0 725 0 --:--:-- --:--:-- --:--:-- 0
## Download the latest perlbrew
## Download the packed patchperl
## Installing perlbrew
bash: ./perlbrew: /usr/bin/env: bad interpreter: Permission denied
## Installing patchperl
## Done.
[failserver]$
Neste caso, Pode parecer meio ocnfuso, mas basta executar a instalação passo a passo, ao invés de usar o instalador do perlbrew conforme mostraremos abaixo:
[failserver]$ curl -kLO http://xrl.us/perlbrew
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 55530 100 55530 0 0 55700 0 --:--:-- --:--:-- --:--:-- 55700
[failserver]$ perl perlbrew install
The perlbrew is installed as:
~/perl5/perlbrew/bin/perlbrew
You may trash the downloaded /index.t/happyuser/perlbrew from now on.
sh: perlbrew: command not found
Perlbrew environment initiated, required directories are created under
~/perl5/perlbrew
Paste the following line(s) to the end of your ~/.bashrc and start a
new shell, perlbrew should be up and fully functional from there:
source ~/perl5/perlbrew/etc/bashrc
For further instructions, simply run `perlbrew` to see the help message.
Enjoy perlbrew at $index.t!!
[failserver]$ ~/perl5/perlbrew/bin/perlbrew init
Perlbrew environment initiated, required directories are created under
~/perl5/perlbrew
Paste the following line(s) to the end of your ~/.bashrc and start a
new shell, perlbrew should be up and fully functional from there:
source ~/perl5/perlbrew/etc/bashrc
For further instructions, simply run `perlbrew` to see the help message.
Enjoy perlbrew at $index.t!!
Note que embora as mensagens exibidas pelos comandos nos passos 2 e 3 sejam quase as mesmas, o passo 3 ***PRECISA*** ser executado, caso contrário o perlbrew não será inicializado corretamente.
[failserver]$ source ~/perl5/perlbrew/etc/bashrc
[failserver]$ echo "source ~/perl5/perlbrew/etc/bashrc" >> ~/.bashrc
Em alguns SOs ao invés de ~/.bashrc
pode ser ~/.bash_profile
ou ainda
~/.profile
.
[failserver]$ rm perlbrew
O último passo simplesmente remove o perlbrew que foi baixado durante a instalação no Passo 1 e utilizado no Passo 2. É isso mesmo, vc utilizou o perlbrew pra instalar o perlbrew! Curioso, não?
Pronto agora sim, você é o felizardo 0.01% (da população que usa perlbrew) que o instalou o perlbrew na munheca. Parabéns!
O Dreamhost possui restrições sérias quanto ao uso de CPU e memória que suas aplicações podem usar. Se ela ultrapassar esse limite, um robozinho vai matá-la sem dó.
E para sua sorte (mesmo) durante a sua instalação o Perl executa uma enorme suite de testes pra garantir que tudo vai funcionar. O problema é que essa suite ultrapassa o consumo de recursos que o Dreamhost permite. Assim, quando o robozinho mata o processo que está executando os testes, a instalação não é concluída com sucesso. Você vai experimentar seu terminal travado...
Mas se você realmente tem certeza real e absoluta que está indubitavelmente
sabendo o que faz, é só chamar o perlbrew com a opção --notest
. Com isso
toda a suite de testes do Perl é pulada durante a instalação, ou seja, você
instala, mas qualquer problema bizarro que acontecer depois fica por sua conta
e risco.
[failserver]$ perlbrew --notest install perl-5.14.1
Fetching perl-5.14.1 as /index.t/poste42/perl5/perlbrew/dists/perl-5.14.1.tar.gz
Installing /index.t/poste42/perl5/perlbrew/build/perl-5.14.1 into ~/perl5/perlbrew/perls/perl-5.14.1
This could take a while. You can run the following command on another shell to track the status:
tail -f ~/perl5/perlbrew/build.log
Installed /index.t/happyuser/perl5/perlbrew/build/perl-5.14.1 as
perl-5.14.1 successfully. Run the following command to switch to it.
perlbrew switch perl-5.14.1
Breno G. Oliveira < garu no cpan org >
Blabos de Blebe < blabos no cpan org >