Quem na área de TI nunca ficou absolutamente travado em algum problema aparentemente ridículo, que atire a primeira pedra. Este post é dedicado aos meus irmãos phpzeiros, que hospedam sites no Bluehost e tem a intenção de instalar um repositório SVN no servidor. Se você não se encaixa nesse perfil, sinta-se a vontade para ignorar as linhas abaixo. Se você é um de nós, hoje é seu dia de sorte, meu amigo. O que você lerá abaixo é o resultado de horas e horas de ralação, inconformação, raiva, perseverança e, por fim, felicidade.
Bem, vou poupa-los dos detalhes sórdidos dessa empreitada, pois daria pra escrever um livro a respeito. Então resumindo, eu precisava criar um repositório SVN no meu servidor do Bluehost quando descobri que eles (do provedor) não dão suporte a esse serviço. Isso, só para contextualizar, significa que:
- É preciso instalar o SVN manualmente a partir dos sources, usando o acesso SSH (se você não tem acesso SSH, vai ter que solicitar ao helpdesk);
- Não será possível usar as portas do servidor e nem o módulo do apache para acessar o repositório;
- O repositório só poderá ser acessado por um único usuário: o próprio usuário do SSH.
Esse último aspecto é o que eu considero o pior se você tem uma equipe de desenvolvimento. Mas é melhor isso do que não ter controle de versão.
Como não sou de recusar um bom desafio, eis que me debrucei sobre o Nautilus (meu notebook) a fim de desvendar mais esse mistério dos sete mares cibernéticos (haja poesia esdrúxula, tá lôco).
O primeiro osso duro foi instalar o benedeto SVN no servidor. Vejam como é simples:
- Instale o PuTTy na sua máquina e acesse o servidor;
-
Crie uma pasta e baixe os sources do SVN e suas dependências:
| 1 | $ mkdir src |
| 2 | $ cd src |
| 3 | $ wget http://subversion.tigris.org/downloads/subversion− 1.6.15.tar.gz |
| 4 | $ wget http://subversion.tigris.org/downloads/subversion− deps−1.6.15.tar.gz |
-
Descompacte os arquivos:
| 1 | $ tar –xzvf subversion− 1.6.15.tar.gz |
| 2 | $ tar –xzvf subversion−deps− 1.6.15.tar.gz |
| 3 | $ cd subversion− 1.6.15 |
-
Configure, compile, instale (isso tá parecendo música do Daft Punk):
| 1 | $ ./configure −−prefix=$HOME/usr −−without−berkeley−db −−without−apxs −−without−apache −−with−ssl LDFLAGS="−L/lib64" −−disable−mod−activation |
| 2 | $ make |
| 3 | $ make install |
Note que o caminho padrão da instalação foi alterado com a opção –prefix=$HOME/usr. Isso deve ser feito para que a compilação e instalação dos executáveis transcorram sem problemas de permissão.
-
Agora os executáveis do SVN estarão disponíveis na pasta usr/bin da raiz do usuário. Então inclua esse caminho no PATH do seu ambiente editando o arquivo .bash_profile:
O conteúdo do arquivo deve ficar mais ou menos assim:
| 01 | # .bash_profile |
| 02 | |
| 03 | # Get the aliases and functions |
| 04 | if [ −f ~/.bashrc ]; then |
| 05 | . ~/.bashrc |
| 06 | fi |
| 07 | |
| 08 | # User specific environment and startup programs |
| 09 | PATH=$PATH:$HOME/usr/bin |
| 10 | |
| 11 | export PATH |
| 12 | unset USERNAME |
-
Desconecte e reconecte no servidor para o PATH fazer efeito. Agora crie uma pasta e instancie o repositório:
| 1 | $ mkdir svn_repo |
| 2 | $ cd svn_repo |
| 3 | $ svnadmin create [projetox] |
Onde [projetox] é o nome do seu repositório.
Feito isso, vamos para o segundo osso. Agora é preciso configurar o método de acesso ao repositório, usando um túnel SSH (o único disponível no nosso caso). O procedimento a seguir vale para quem usa Windows (aqui eu usei o Windows 7 Home Premium). Quem usa Linux é esperto o suficiente para saber adaptar o procedimento, de forma que não entrarei nesse mérito.
- Instale o TortoiseSVN (pode ser outro cliente svn, eu prefiro esse);
-
Crie um par de chaves pública/privada usando o PuTTyGen, que vem com o PuTTY, configurado para SSH2-RSA. Salve as chaves em algum lugar do seu HD (em arquivos separados, obviamente).
Aqui cabe uma dica. Ao gerar as chaves você tem a opção de configurar um passphrase. Esse passphrase serve para melhorar a segurança do SSH. Contudo, toda vez que você fizer alguma operação com o SVN o Tortoise vai pedir essa senha (a pain in the ass, como diriam os americanos). Se você deixar em branco, isso não vai acontecer, mas nem pense em deixar sua chave-privada cair em mãos malévolas.
- No painel de controle do BlueHost, acesse o ícone SSH/Shell Access que fica no box Security. Clique no botão Manage SSH Keys e mande gerar um par de chaves qualquer. Não se preocupe com a configuração das chaves, na verdade elas não devem ser usadas, pois o mecanismo de cifragem usado não é compatível com o Tortoise nem com o PuTTY (Murphy é sempre fiel aos seus princípios).
-
Acesse o servidor usando o PuTTY. Na pasta .ssh deve ter os dois seguintes arquivos: authorized_keys e authorized_keys2. Esses arquivos foram criados no passo anterior, quando você mandou gerar as chaves no painel de controle. Esses são os arquivos da chave pública que, deduzo, configuram o acesso para SSH1 e SSH2 respectivamente.
Agora chegou a hora da verdade! Tudo o que foi feito até agora foi feito para chegar nesse momento, o momento da vitória. Você deve editar esses arquivos e substituir todo seu conteúdo por isso:
| 1 | command="~/usr/bin/svnserve −t" ssh−rsa [chave−publica] |
onde [chave-publica] é a chave pública que você gerou no PuTTYGen. Mas note que a chave-publica não é todo o conteúdo do arquivo gerado pelo PuTTYGen. Na verdade o arquivo gerado tem o seguinte formato:
| 1 | −−−− BEGIN SSH2 PUBLIC KEY −−−− |
| 2 | Comment: "rsa−key−AAAAMMDD" |
| 3 | [chave−publica] |
| 4 | −−−− END SSH2 PUBLIC KEY −−−− |
Copie somente a [chave-publica] (sem as quebras de linha). Agora é só correr pro abraço…
-
Na sua máquina local, edite o arquivo C:\User\Username\AppData\Roaming\Subversion\config e na sessão [tunnels] adicione a seguinte linha:
| 1 | ssh = C:/Program Files/TortoiseSVN/bin/TortoisePlink.exe −i C:/[caminho/para/a/chave−privada] /[arquivo.da.chave.privada] |
onde [caminho/para/a/chave-privada] é o… ah, vcs entenderam!
-
Daqui já deve ser possível fazer um checkout do seu repositório usando o TortoiseSVN. O endereço que deve ser usado para isso deve seguir esse padrão:
| 1 | svn+ssh://[usuario ssh]@[domínio.com]/[caminho do repositorio]/ |
onde [usuario ssh] é o seu login no Bluehost, [domínio.com] o endereço do seu domínio e [caminho do repositorio] é o caminho do seu repositório relativo a raiz do servidor (ex: /home4/user1/svn_repo/projetox). E pronto! Alegria total!
Eu uso o Zend Studio para desenvolver em PHP. É uma IDE baseada no Eclipse que já vem preparada para esse ambiente. Ela vem com o plugin Subclipse para integrar com o SVN. Apesar de essa história toda ter se originado da tentativa de fazer controle de versão com o ZS, eu ainda não consegui fazer com que essa integração (Eclipse/SVN) funcione. Mas eu ainda não zerei todas as possibilidades. O Subclipse dessa versão vem com o driver do SVNKit. Aparentemente existe um bug nesse driver quando configuramos o acesso ao repositório usando o SSH com chave publica-privada. A outra opção seria usar o driver nativo, o javaHL. Como ele não veio instalado na minha IDE eu ainda não tive tempo de testar, mas pelo que li em vários fóruns (e bota vários nisso) parece que pode dar certo. Assim que eu tiver feito o teste, atualizarei o post.
É isso aí meus amigos. Entre mortos e feridos salvaram-se todos. Se quiserem mais informação a respeito, listo abaixo alguns endereços que me ajudaram bastante nessa empreitada.
http://www.bluehostforum.com/showthread.php?12099-Setting-up-Subversion-on-Bluehost
http://www.bluehostforum.com/archive/index.php/t-8191.html
http://www.woodwardweb.com/java/howto_configure.html
VN:F [1.9.17_1161]
Rating: 0.0/5 (0 votes cast)