Publicado por: Luiz Sanches | Outubro 13, 2009

Meu script virou programa!

Livro Shell Script Profissional

Livro Shell Script Profissional

Foi no FISL 9.0 que conheci pessoalmente o Aurélio, não o cara do dicionário :p, mas a pessoa que motiva muitos shelleiros do Brasil a transformarem seus shell scripts em verdadeiros programas!

Trabalho com desenvolvimento web com php, apache, postgres e sempre que aparece uma oportunidade de fazer um shell script para desenrolar um problema, lá estou no site do Aurélio buscando informação. Foi baseado em um script que tenho em casa para sincronizar meu diretório home com um hd secundário que começou a idéia que descrevo logo a seguir:

Até um mês atrás a rotina dos analistas de testes era de copiar manualmente os arquivos fontes .php, baixados do Subversion em sua maquina local, para o servidor de Testes, via ssh. Tarefa repetitiva e cansativa que rendia muita dor de cabeça por, às vezes, esquecimento de alguns arquivos que o desenvolvedor não comunicava, ou até mesmo o analista não copiava. A confusão começava com aquela velha frase: “Na minha máquina tá funcionando!”. Era um panavoeiro só :) .

Já havíamos conversado algumas vezes sobre o uso do rsync para automatizar esta tarefa. Mas faltou tempo para implementar a idéia. No início de setembro “meti a cara no mato” e decidi começar o “scriptizinho” que baixa o código do repositório subversion e sincroniza com o servidor de testes, via rsync. Bom, mas porque não usar somente o Subversion? Para quem não conhece o Subversion, ele controla as cópias locais através de diretórios .svn em cada ramificação da árvore de um projeto. E não achei conveniente copiar estes diretórios para o servidor de testes. Outro problema é que trabalhamos com duas salas que representam Gerências de desenvolvimento, e uma não queria “mexer” com os arquivos da outra. Exemplo disso é que na minha sala trabalhamos com o módulo de Controle de Obras e na outra trabalham com Controle de Processos.

A solução foi criar arquivos de configuração para armazenar informações do projeto, gerências, módulos de cada gerência para não gerar confusão. O mês de setembro foi de intensa pesquisa e desenvolvimento da solução combinando subversion, rsync, dialog e sed. “Comi com farinha” o tutorial Dominando o sed. Utilizei o dialog para melhorar a usabilidade do programa, já que a maioria das pessoas não possuem conhecimentos de bash. Tudo o que eu precisava fazer para tratar strings nos arquivos, o sed me ajudou. Tanto que deu pra ajudar a equipe de suporte de redes com relaçao a extração e formatação de usuários LDAP.

Com o feedback das equipes, surgiram sugestões de melhorias para o script que faziam eu mergulhar cada vez mais na man-page do rsync, não dá para aprender tudo é claro, mas para cada necessidade que tínhamos, o rsync possuía um parâmetro específico: backup, log, lista de arquivos que não serão sincronizados, não copiar arquivos de controle de versão (.cvs, .svn, .git, etc.).

O nome do programa é sync2test e está hospedado no vivaolinux.

Como instalar:

  • Abrir um terminal no Linux ou putty no Windows.
  • Copiar o programa para o diretório do usuário no servidor ssh: scp -P <porta> sync2test <destino>. Exemplo: scp -P <porta> sync2test usuario@ip_servidor:~/
  • Digitar: ssh -p <porta_ssh> usuario@ip_servidor <enter> <depois a senha de acesso>. Exemplo: ssh -p <porta> usuario@ip_servidor
  • Se não conectou como root, transformar-se no próprio: sudo su
  • Criar o diretório /opt/sync2test: mkdir /opt/sync2test
  • Mover o programa para o diretório criado: mv sync2test /opt/sync2test
  • Mudar o proprietário do diretório: chown usuario.grupo /opt/sync2test
  • Mudar as permissões de acesso ao diretório: chmod 755 -R /opt/sync2test
  • Criar um link simbólico para o programa: ln -s /opt/sync2test/sync2test /usr/local/bin/sync2test
  • Volte a ser usuário comum: exit
  • Execute o programa: sync2test
  • Tecle <enter> no projeto siig.
  • Vão ser feitas perguntas de configuração do programa, caso não haja mudanças tecle <enter> em cada opção.

Servidor = ip do servidor
Diretório do Repositório = /var/svn/
Diretório de Destino = /var/www/
Nome de login no SVN
Senha do SVN
OBS.: Não esqueça das barras no final do caminho dos diretórios.

  • A seguir será feita a pergunta de de qual gerência o usuário pertence. Gerência em que trabalha (exemplo: GPI ou GPA)
  • A seguir poderá selecionar um módulo ou demais pastas do projeto.

Arquivos de Configuração
Os seguintes arquivos são criados na instalação do programa no diretório /opt/sync2test/

  • projetos: lista com o nome dos projetos, com o formato abaixo:

projeto:descrição do projeto

  • <projeto>_demais: lista de diretórios que são de uso geral do projeto, com o formato baixo:

/diretorio/opcao (onde d=somente o diretório, r=recursivamente)

  • <projeto>_completo: lista de diretórios de sincronização de todo o projeto, com o formato abaixo:

título:descrição:diretório de origem:diretório de destino

  • <projeto>_exclude: lista com diretório que não serão sincronizados, com o formato abaixo:

/diretório/subnível/

  • <projeto>_modulos: lista dos módulos de cada gerência, com o formato abaixo:

sigla da gerência:módulo:descrição do módulo

  • sync2test.conf: parâmetros que foram gravados na primeira execução do programa, com o formato abaixo:

VARIAVEL=”conteúdo”

Como utilizar:

  1. O usuário conecta via ssh, putty para usuários windows, no servidor de testes.
  2. Executa o comando sync2test.
  3. Na primeira vez que é executado, ele tem que informar qual a gerência que ele pertence.
  4. A partir daí é selecionado um projeto.
  5. Depois deve ser selecionado um módulo ou outros diretórios para sincronizar.
  6. Quando existir arquivos para serem atualizados de um módulo, primeiro é exibida a lista dos arquivos dos mesmos para o usuário selecionar os arquivos que não serão sincronizados.
  7. O código-fonte é baixado do repositório svn em um diretório temporário do usuário.
  8. Em seguida é sincronizado o diretório temporário com o diretório de destino do projeto.
  9. É gravado um log dos arquivos sincronizados no diretório do usuário.
  10. É feito um backup (bkp-<projeto>) dentro do diretório de destino com os arquivos que foram sincronizados.

nautilus_shellO script, quer dizer programa :p, ainda está na versão 0.18, mas já está em produção e aguardando feedback. Shell Script te dá poder e felxibilidade de fazer o que quiser com o sistema operacional.

Além do livro Shell Script Profissional, tive outras fontes de pesquisa:

http://wiki.softwarelivre.org/TWikiBar/WebHome

http://www.aurelio.net/shell/canivete.html

http://www.aurelio.net/shell/dialog/

http://www.aurelio.net/sed/

http://www.zago.eti.br/script/cut.html

http://www.zago.eti.br/ssh/ssh.html

http://www.zago.eti.br/sed.txt

http://www.devin.com.br/shell_script/

http://www.samba.org/ftp/rsync/rsync.html

http://www.unix.com/pt/shell-programming-scripting/13983-joining-lines-log-file.html

http://svnbook.red-bean.com/en/1.4/svn-book.html

Instalação no servidor:

  1. Abrir um terminal no Linux ou putty no Windows.

  2. Copiar o programa para o diretório do usuário no servidor ssh: scp -P <porta> sync2test <destino>

  • Exemplo: scp -P <porta> sync2test usuario@ip_servidor:~/

  1. Digitar: ssh -p <porta_ssh> usuario@ip_servidor <enter> <depois a senha de acesso>

  • Exemplo: ssh -p <porta> usuario@ip_servidor

  1. Se não conectou como root, transformar-se no próprio: sudo su

  2. Criar o diretório /opt/sync2test: mkdir /opt/sync2test

  3. Mover o programa para o diretório criado: mv sync2test /opt/sync2test

  4. Mudar o proprietário do diretório: chown usuario.grupo /opt/sync2test

  5. Mudar as permissões de acesso ao diretório: chmod 755 -R /opt/sync2test

  6. Criar um link simbólico para o programa: ln -s /opt/sync2test/sync2test /usr/local/bin/sync2test

  7. Volte a ser usuário comum: exit

  8. Execute o programa: sync2test

  9. Tecle <enter> no projeto siig.

  10. Vão ser feitas perguntas de configuração do programa, caso não haja mudanças tecle <enter> em cada opção.

  • Servidor = ip do servidor

  • Diretório do Repositório = /var/svn/

  • Diretório de Destino = /var/www/

  • Nome de login no SVN

  • Senha do SVN

  • OBS.: Não esqueça das barras no final do caminho dos diretórios.

  1. A seguir será feita a pergunta de de qual gerência o usuário pertence.

  • Gerência em que trabalha (exemplo: GPI ou GPA)

  1. A seguir poderá selecionar um módulo ou demais pastas do projeto.

  2. O processo realizado pelo programa segue abaixo:

  • O código-fonte é baixado do repositório svn em um diretório temporário do usuário.

  • Em seguida é sincronizado o diretório temporário com o diretório de destino do projeto.

  • É gravado um log dos arquivos sincronizados no diretório do usuário.

  • É feito um backup (bkp-<projeto>) dentro do diretório de destino com os arquivos que foram sincronizados.

Arquivos de Configuração

Os seguintes arquivos são criados na instalação do programa no diretório /opt/sync2test/

  1. projetos: lista com o nome dos projetos, com o formato abaixo:

  • projeto:descrição do projeto

  1. siig_demais: lista de diretórios que são de uso geral do projeto, com o formato baixo:

  • /diretorio/opcao (onde d=somente o diretório, r=recursivamente)

  1. siig_completo: lista de diretórios de sincronização de todo o projeto, com o formato abaixo:

  • título:descrição:diretório de origem:diretório de destino

  1. siig_exclude: lista com diretório que não serão sincronizados, com o formato abaixo:

  • /diretório/subnível/

  1. siig_modulos: lista dos módulos de cada gerência, com o formato abaixo:

  • sigla da gerência:módulo:descrição do módulo

  1. sync2test.conf: parâmetros que foram gravados na primeira execução do programa, com o formato abaixo:

  • VARIAVEL=”conteúdo”


Deixe uma resposta

Sua resposta:

Categorias