O Futuro é a Liberdade

Discussões sobre Software Livre e Sociedade

Coisas legais que dá pra fazer com SL – Backup com controle de versão

Posted by Paulo em 05/10/2011

No software livre descobre-se uma nova possibilidade a cada dia. Com este post vou inaugurar uma série “Coisas legais que dá pra fazer com Software Livre“, onde vou colocar soluções para problemas cotidianos que podem ser resolvidas rápida e facilmente no Linux e e utilizando Software Livre.

O primeiro post da série será:

Backup com controle de versão para usuários domésticos e pequenas empresas

Desde que conheci e comecei a utilizar serviços online de backup com controle de versão, como o Dropbox, Ubuntu One, SlideShare, Zumodrive, Wuala, entre outros, uma coisa sempre me incomodou: a dependência de um provedor. Se você não estiver satisfeito com seu provedor, terá um trabalho considerável para transferir seus arquivos de um provedor para outro. Instalar um novo cliente, adaptar-se às limitações e características do novo serviço, etc. Se precisar de mais espaço do que os parcos 1 a 5 GB que oferecem para contas gratuitas, você tem três opções: ou paga a franquia, ou abre mais de uma conta, ou abre várias contas em provedores diferentes. Cada um desses métodos tem sua vantagem e uma série de desvantagens.

Uma característica extremamente útil, mas raramente utilizada de alguns desses serviços é a possibilidade de recuperar versões anteriores de arquivos. Assim, se por algum motivo um determinado arquivo for alterado, ou tiver parte das informações perdidas, é possível recuperar versões anteriores dele, evitando ter de refazer todo o trabalho. Pode parecer insignificante, mas isso já evitou que eu perdesse dados importantes e únicos, algumas vezes. Uma amiga minha que trabalha na revisão de teses e dissertações utiliza esse recurso do Dropbox para recuperar os textos, sempre que o computador (um antigo notebook Acer) dá problema.

Então comecei a pensar como seria uma ferramenta que pudesse ser instalada uma só vez, que fizesse o controle de versões e fosse independente de provedor. Ou seja, eu poderia tanto contratar um provedor na internet, como utilizar um computador doméstico como “servidor”, onde pudesse guardar meus arquivos. Se decidisse mudar o local de armazenamento, bastaria configurar a ferramenta para apontar para o novo local e pronto! Sem complicações…

Ou quase: Passei alguns meses procurando uma aplicação que fosse ao mesmo tempo, fácil de usar e eficiente. Após várias tentativas, inclusive tentando fazer uma eu mesmo, encontrei duas promissoras ferramentas em Software Livre, que podem fazer o serviço.

Uma é o Syncany, desenvolvido em Java, esse aplicativo pode ser instalado em praticamente qualquer plataforma (Linux, Mac, Windows, Unix, Sun, Android, etc). Ele também pode conectar-se a praticamente qualquer serviço de armazenamento, pago ou gratuito, através da inclusão de perfis. No entanto, o Syncany ainda está numa fase muito inicial de desenvolvimento, e o site oficial informa que ainda não há uma versão estável para download. Há uma versão “alpha” disponível no Launchpad, mas é segura apenas para os desenvolvedores.

Outra ferramenta que promete é o SparkleShare. Apesar de não oferecer a versatilidade oferecida pelo Syncany, com relação à variedade de serviços e métodos de conexão, o SparkleShare está num estágio mais avançado de desenvolvimento, que permite já obter algum resultado prático. Ele utiliza conexões ssh criptografadas, autenticação por chaves criptográficas e controle de versões através do git. E é com ele que faremos nossa primeira experiência.

Mãos à obra!

A primeira coisa a decidir é que tipo de servidor utilizaremos. Podemos utilizar um servidor próprio, em nossa própria rede local. Há a possibilidade de utilização de um servidor privado remoto, no entanto ele deverá oferecer a possibilidade de controle de versões através do Git (ou incluso no pacote, ou instalado pelo usuário, no caso, você). Há também três outras possibilidades: Criar uma conta no Github ou no Gitorious que são repositórios de arquivos gratuitos para projetos de software livre, que oferecem também serviços pagos de hospedagem de arquivos. Ou, caso você seja um desenvolvedor do Projeto Gnome, a opção de configurar o repositório do projeto (o que não é o caso da imensa maioria de nós, portanto vamos deixar essa opção de lado).

Vamos configurar um serviço a ser utilizado em um servidor particular, que pode ser um computador doméstico, um servidor de uma pequena empresa, ou um servidor privado pago na internet. O importante dessa máquina é que tenha alguma distribuição Linux rodando (não é necessária a interface gráfica), de preferência Ubuntu ou semelhante, como Debian, Mint, etc., pois os passos abaixo serão baseados nelas.

Configurando o servidor.

Se você tem uma máquina encostada, que não usa, e está prestes a dar um sumiço nela pra desocupar espaço, pense de novo. Essa máquina pode ser usada como um pequeno servidor de backup de arquivos na sua rede local, seja em casa, seja na sua empresa. Em 40 minutos é possível instalar uma distribuição Linux nela e deixá-la pronta para ser usada. Como sua função será, simplesmente de armazenar arquivos, não é necessário que seja uma máquina poderosa. Basta que tenha um disco rígido que suporte seu volume de arquivos. Na minha opinião, uma máquina com 256MB ou 512MB de memória e um processador antigo qualquer, serve muito bem para a tarefa. Também não é necessário que ela possua teclado, mouse e monitor, a não ser é claro, para a instalação do sistema operacional. Toda a administração pode ser feita pela rede, sem acesso direto à máquina. Num próximo post, ensinarei como instalar e configurar um servidor doméstico em 1 hora… Aguardem!

É importante, porém não necessário, que cada usuário da sua rede tenha sua conta separada no servidor. Assim, você garante que as coisas ficarão organizadas. Portanto, configure um usuário para cada pessoa que utilizará o sistema de backup.

Após instalado o sistema operacional, instale o pacote para permitir o acesso remoto pela rede openssh-server, através do comando abaixo:


Note duas coisas:

  • Seu usuário deverá ter privilégios de administrador, pois o comando pedirá senha para instalar o pacote.
  • O nome do servidor do exemplo acima é CMI-server-02, mas ele não aparecerá na rede com esse nome, mas com seu endereço IP. Você poderá descobrir através do comando ifconfig eth0, caso a interface de rede que você esteja utilizando para conectar seu servidor à rede seja a placa de rede ethernet (cabo UTP e conector RJ45).

Após instalado, esse pacote permitirá que todo o resto da configuração seja feita por acesso remoto, e você pode desligar o teclado, mouse e monitor do computador.

Assumindo que seu computador de trabalho esteja com o sistema operacional Ubuntu, Debian ou semelhantes, instale o pacote openssh-client, caso ainda não esteja instalado. Ele pode ser instalado pela Central de Programas, pelo Gerenciador de Pacotes Synaptic, ou pelo terminal, através do comando sudo apt-get install openssh-client.

Crie uma chave criptográfica para acessar seu servidor remoto sem senha através do comando:

Não digite nada. Apenas tecle Enter nas perguntas feitas pelo programa, até que ele volte para o prompt do terminal. Após isso, copie a chave para o seu servidor com o comando:

Note que utilizo o endereço IP do servidor, não o nome. Note também que o usuário que configurei no computador remoto é o mesmo da minha máquina local (pslima). Isso não é obrigatório, mas ajuda a se organizar. Será solicitada uma senha, que é a senha que você configurou para esse usuário no seu servidor. Essa será a única vez que essa conexão solicitará senha.

No seu computador de trabalho, acesse remotamente o seu novo servidor. Abra uma janela do terminal e digite o comando destacado na primeira linha abaixo:


Note que não foi necessário digitar uma senha. A autenticação foi feita através das chaves criptografadas que geramos anteriormente. A última linha exibe o prompt de comando do servidor, ou seja, a partir desse momento, qualquer comando que for digitado nessa tela, será executado no servidor.

Agora vamos instalar os pacotes necessários para que nosso servidor funcione como servidor de backup com controle de versões. Instale o pacote git-core no servidor:

Digite a senha do seu usuário no servidor, que deve ter direitos administrativos para a instalação de pacotes.

Agora vamos escolher um nome para o seu repositório. Por exemplo, “Meu_repositorio”. Evite utilizar espaços ou caracteres especiais (acentos, cedilha, etc.) no nome. Vamos criar o repositório onde o SparkleShare armazenará as informações do histórico dos arquivos (e os arquivos em si, também) através do comando destacado na primeira linha abaixo:

Note que a resposta do comando informa que foi criado um diretório de nome Meu_repositorio dentro do diretório do usuário.

Pronto! Nosso servidor está configurado. Vamos passar para a configuração da nossa máquina de trabalho.

Configurando o computador cliente.

Supondo que seu computador rode Ubuntu, configure os repositórios PPA do SparkleShare com os comandos abaixo. Dá pra configurar via interface gráfica, mas é um processo muito mais lento e complicado do que copiar e colar os comandos abaixo no terminal.

sudo add-apt-repository ppa:warp10/sparkleshare 
sudo apt-get update 
sudo apt-get install sparkleshare libwebkit1.1-cil git-core python-nautilus

Lembre-se de que seu usuário deve possuir direitos para instalar programas no sistema, pois será necessário digitar uma senha. Caso você não esteja usando o Ubuntu, ou não haja um pacote para a sua versão, o pacote .deb do programa pode ser baixado do endereço http://sparkleshare.org/linux-downloads/. Há versões para Windows, MacOS e Android, mas não tratarei delas nesse post.

Após instalar, basta carregar o programa no menu Aplicativos > Internet > SparkleShare. Ou via terminal, através do comando sparklsshare start. No método do terminal, há um bug que dá a impressão que ele trava a seção, mas basta apertar a tecla Enter que o prompt é liberado. Um ícone do programa aparecerá na bandeja do sistema (perto do relógio).

Na primeira vez que o programa é executado, aparecerá uma tela solicitando um nome e um endereço de e-mail. Essa tela aparecerá apenas uma vez. Digite as informações solicitadas e clique em Próximo. A janela será fechada.

Caso não apareça mais nenhuma tela, entre novamente no programa. Dessa vez a tela anterior não será exibida, mas aparecerá um ícone  na bandeja do sistema. No meu computador, apareceu outro bug que faz com que o ícone que deveria aparecer na bandeja do sistema não seja encontrado e apareça no seu lugar. Isso não impede o funcionamento do programa.

Clique uma vezno ícone do SparkleShare e serão exibidas algumas opções:

A primeira opção, SparkleShare, abre a pasta local do SparkleShare, que o programa cria automaticamente no diretório padrão do usuário.

Logo abaixo, aparece a lista de repositórios configurados.

A segunda opção, Incluir pasta remota, é onde vamos configurar os repositórios remotos. Clicando-se nela, aparecerá a seguinte tela:

Como estamos configurando um repositório em um servidor na rede local, escolheremos a primeira opção. As outras opções poderão ser discutidas em posts futuros.

Digite o usuário e endereço do servidor no campo No meu próprio servidor, no formato indicado na figura acima, e digite o local onde configurou o repositório no servidor (Veja a seção Configurando o servidor acima). Clique em Sincronizar.

A tela abaixo será exibida e, caso o repositório esteja vazio, será fechada logo em seguida. Caso contrário, o tempo de fechamento vai depender do tamanho do repositório.

Caso apareça a tela abaixo, significa que você digitou o nome do usuário errado, ou não o digitou. Ou ainda, colocou senha quando gerou a chave criptográfica (veja o item Configurando o servidor acima)

Caso haja algum problema, será exibida a tela seguinte:

Caso o repositório seja sincronizado com sucesso, ele aparecerá na lista de repositórios do ícone na bandeja do sistema. Será criada uma pasta, com o nome do repositório dentro da pasta SparkleShare do usuário. A tela abaixo será exibida:

A partir desse momento, qualquer arquivo colocado na pasta /home/[usuário]/SparkleShare/[Repositório], no caso acima em /home/pslima/SparkleShare/Novo_repositorio/, será automaticamente salva na pasta do repositório no servidor. Toda alteração no arquivo também será sincronizada. Você terá acesso ao histórico dos arquivos através da opção Show Recent Events disponível no ícone do SparkleShare na bandeja do sistema. Abaixo, está a visualização da tela e da respectiva pasta local do repositório (clique na imagem para ver em tamanho maior).

No entanto, não espere encontrar o arquivo no repositório do servidor. O programa salva o arquivo no formato do Git, portanto, você não terá acesso direto a ele no servidor. Será necessário utilizar o SparkleShare, ou comandos diretos do Git para manipular os arquivos no servidor. O motivo para isso é que, como o servidor é um local para guardar os arquivos, não para manipulá-los, não há a necessidade de mantê-los em dois formatos diferentes, que ocupariam o dobro do espaço, ou mais, para o armazenamento. Para saber mais sobre o Git, veja esse interessante post: http://blog.interlinked.org/tutorials/git.html.

Por outro lado, é possível combinarmos a utilização de uma ferramenta que faça o backup local, com outra que faça o sincronismo remoto. Veja mais abaixo um exemplo prático.

Incrementando a automatizando.

Algumas coisas podemos automatizar, para que não precisemos guardar comandos. Por exemplo: se quisermos, daqui a dois meses, incluir um repositório novo, teremos de lembrar os comandos de conexão e de criação do repositório no servidor. Para facilitar essa tarefa, podemos fazer um script em bash que faça isso por nós.

Script para a criação de repositórios:

Vamos criar um script chamado cria-rep.sh, cujo conteúdo será o abaixo:

#!/bin/bash # # Script para criação de novo repositório git em um servidor remoto. # # Utilização: # # ./cria-rep.sh [nome-do-repositório] [usuário] [servidor] # ssh $2@$3 git init --bare $1

Copie e cole o script acima num editor de texto simples (como o Gedit) e salve-o com o nome cria-rep.sh em um local da sua conveniência. Lembre-se de alterar as permissões do arquivo para permitir a execução. Para isso, clique com o botão direito do mouse sobre o arquivo e escolha a opção Propriedades. Na aba Permissões, marque a opção Executar e feche a janela.

Para executá-lo, abra uma janela do terminal, entre na pasta onde salvou o script, e digite ./cria-rep.sh [nome-do-repositório] [usuário] [servidor]. Por exemplo, no caso do servidor configurado acima, o comando seria:

Logo em seguida, adicione o Rep-novo na lista do SparkleShare, como mostrado na seção anterior, Configurando o computador cliente.

Utilizando o SparkleShare em conjunto com o DropboxUbuntu OneSlideShareZumodriveWuala e outros.

Agora que temos nosso servidor particular de backup e controle de versões, porque não lançar mão de mais segurança? Afinal de contas, Seguro morreu de velho e Prevenido ainda está vivo 🙂

Para isso, basta colocar o diretório do seu serviço de sincronização na nuvem dentro da pasta local de um dos repositórios do SparkleShare. Por exemplo, se você utiliza o Dropbox, sabe que ele cria uma pasta chamada Dropbox no diretório do usuário. É possível escolher outro local dentro das preferências do Dropbox. Escolha um local que fique dentro da pasta de um dos repositórios do Sparkle Share. Assim, seus arquivos estarão disponíveis no Dropbox, e também salvos no seu servidor particular. Dá pra utilizar vários serviços simultaneamente e sincronizar todos num mesmo repositório no servidor local.

Conclusão.

A utilização de serviços de sincronismo é um recurso extremamente útil nos dias de hoje. A impossibilidade de se transferir arquivos de um serviço para outro e as limitações de espaço gratuito, aliada a altos custos de contratação de espaços adicionais pode tornar viável uma solução doméstica que permita, ao mesmo tempo, aumentar o espaço de armazenamento e combinar os espaços gratuitos de diversas ferramentas. Os benefícios adicionais são o aumento da segurança e integridade dos dados, utilizando mais de um local para armazenamento simultâneo, o controle de versões, que permite a recuperação de versões anteriores de um arquivo, e o aproveitamento de computadores antigos que teriam o lixo como destino.

As desvantagens (sim, elas existem!!!): O Git não foi originalmente para trabalhar com arquivos binários. Apesar de funcionar com eles, a sincronização de arquivos binários muito grandes, como filmes, deve ser feita com cuidado. Isso porque ele vai consumir todos os recursos de memória e processamento que estiverem disponíveis, por longos períodos de tempo (com longos, quero dizer horas, ou dias). Portanto, se você tem a necessidade de armazenar esses arquivos, há duas possibilidades: Utiliza o SFTP ou algum tipo de compartilhamento de pastas no servidor para transferir esses arquivos. A desvantagem disso é que perde-se o controle de versões, o que não chega a ser um problema já que a grande maioria das pessoas não edita esses filmes, apenas os assiste.

O SparkleShare ainda está em desenvolvimento e é uma ferramenta estágio “Alpha”, ou seja, ainda não está madura o suficiente para aplicações de grande porte. Mas está suficientemente funcional para permitir aplicações domésticas e de pequeno porte. Vale a pena experimentar.

Referências.

http://www.webupd8.org/2011/03/set-up-sparkleshare-with-your-own.html

http://www.webupd8.org/2011/03/install-sparkleshare-in-ubuntu-via-ppa.html

http://www.webupd8.org/2011/06/stable-sparkleshare-02-released-with.html

http://sparkleshare.org/

https://github.com/hbons/SparkleShare/wiki/How-to-set-up-your-own-server

http://www.webupd8.org/2011/01/rabbitvcs-perfect-tortoisesvn.html

Uma resposta to “Coisas legais que dá pra fazer com SL – Backup com controle de versão”

  1. Que tutorial bacana!!

    parabéns!

    murillo

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

 
%d blogueiros gostam disto: