Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Fuja da Gambiarra antes que ela te alcance!

Fuja da Gambiarra antes que ela te alcance!

Slides da minha apresentação sobre como evitar gambiarras em um ambiente corporativo.

Diogo Leal

April 25, 2015
Tweet

More Decks by Diogo Leal

Other Decks in Technology

Transcript

  1. O que é gambiarra? É o procedimento necessário para a

    configuração de um artefato improvisado
  2. cat /root/voltahttp.sh function ve_httpd() { tem=`ps ax | grep $1

    | grep "/usr/sbin/httpd -k start" | grep -v grep` if(test "X$tem" = "X"); then return 0 fi return 1 } if(ve_httpd "httpd");then echo Starting httpd /etc/rc.d/rc.httpd start fi
  3. crontab -l */5 * * * * ntpdate ntp.usp.br >

    /dev/null 2>&1 chkconfig --list |grep ntp ntpd 0:off 1:off 2:off 3:on 4:off 5:off 6:off ps aux |grep ntp ntp 2791 ... 0:22 ntpd -u ntp:ntp -p /var/run/ntpd.pid -g
  4. Rotina de Backup forçado 30 03 * * * /usr/bin/pkill

    -9 cdp 32 03 * * * /usr/bin/yum upgrade -y cdp-agent 40 03 * * * /usr/bin/cdp --get-module 50 03 * * * /etc/init.d/cdp-agent restart
  5. #!/usr/bin/perl if (length($ARGV[0] eq ' ')) { print("ERRO.0\n"); exit(0); }

    $dominio = $ARGV[0]; $RELVAR = `grep -v ^[:space:]*# /etc/aplicacao.conf | grep HOSTNAME | cut -f 2 -d=`;
  6. #!/usr/bin/perl system("cat /tmp/ip.$$/tsenha.txt | /usr/sbin/chpasswd"); system("rm /tmp/ip.$$/tsenha.txt"); mkdir("/var/www/$dominio",0750); mkdir("/var/www/$dominio/www",0755); system("mkdir

    -p /var/www/$REL/$dominio/"); system("mkdir -p /var/www/$REL/$dominio/logs"); system("/bin/chmod 750 /var/www/$REL/$dominio");
  7. ... system("cp -rp /etc/php.ini /etc/phprc/$dominio"); print "OK\n"; system("/etc/init.d/httpd reload 1>/dev/null

    2>/dev/null"); open(ARQ,">>/var/log/criadom.log"); printf ARQ "... :%02d:%02d - ativação OK \r\n",$dia,$mes+1,$ano+1900,$hora,$min,$seg,$dominio; close(ARQ);
  8. Organize a casa Defina um style guide para os códigos

    • The Pocoo Style Guide • pep-8 • Google Shell Style Guide
  9. Organize a casa Coloque tudo em um VCS • gitlab

    • gitweb • github • Bitbucket / Stash • etc
  10. Organize a casa Linguagem de programação é ferramenta • Shell

    Script também tem condicionais • Use system() com moderação Defina mensagens de erros nos códigos(e documente) Crie logs para as suas aplicações
  11. Organize a casa Verifique se os códigos estão de acordo

    com o style guide que foi definido • Shellcheck (para Bash) In backup_contas.sh line 14: LOCALBKP="/backup/$Dominio"; ^-- SC2034: LOCALBKP appears unused. Verify it or export it.
  12. In criacao_demo.sh line 4: source ../include/checa_usuario_zimbra.inc ^-- SC2039: #!/bin/sh was

    specified, but 'source' in place of '.' is not standard. In criacao_demo.sh line 6: if [ -z $1 ] || [ -z $2 ] ; then ^-- SC2086: Double quote to prevent globbing and word splitting. ^-- SC2086: Double quote to prevent globbing and word splitting.
  13. Organize a casa Defina a localização para os scripts e

    inclua no $PATH • /usr/share/SUA_EMPRESA/
  14. Organize a casa Permissões de acesso aos servidores por meritocracia.

    Desative sudo su - e sudo -i • /etc/pam.d/su • /etc/pam.d/sudo-i
  15. Organize a casa Automatize tudo que puder • CFengine (Rudder)

    • Ansible • Puppet • Chef • Fabric, capistrano • etc.
  16. Organize a casa Documente tudo o que for possível •

    Use uma wiki de preferência • Documentação de servidor não deve ser a mesma documentação da aplicação
  17. Organize a casa Esqueça planilhas e .txts, use sistemas apropriados

    para organizar ips, desenhos de redes e racks, etc. • Racktables