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.

C091e4c500d0da8ab9d61d5193ca2ba7?s=128

Diogo Leal

April 25, 2015
Tweet

Transcript

  1. Gambiarra Diogo Leal diogo @ diogoleal .com ngcast.com.br

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

    configuração de um artefato improvisado
  3. Motivação

  4. O que já vi por ai...

  5. crontab -l */1 * * * * /root/voltahttp.sh >> /dev/null

    2>&1
  6. 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
  7. 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
  8. cat /etc/passwd cvalente:x:2827:100::/home/cvalente:/bin/bash cvalente-r:x:0:0::/home/cvalente:/bin/bash

  9. 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
  10. #!/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=`;
  11. #!/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");
  12. ... 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);
  13. echo 3 > /proc/sys/vm/drop_caches Limpeza de cache de memória

  14. cat /etc/rc.d/rc.local ... touch /var/lock/subsys/local /etc/init.d/firewall start echo "Inicializando interface

    dedicada" /sbin/ifconfig eth0:1 200.111.111.111 netmask 255.255.255.0
  15. O padrão não pode ser diferente

  16. Organize a casa Defina um style guide para os códigos

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

    • gitweb • github • Bitbucket / Stash • etc
  18. 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
  19. 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.
  20. 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.
  21. pyflakes pyflakes bin/libs/*.py bin/libs/apache.py:162: undefined name 'self' bin/libs/dbhost.py:9: 'StringIO' imported

    but unused bin/libs/dbhost.py:10: redefinition of unused 'rpyc' from line 6
  22. Organize a casa Defina a localização para os scripts e

    inclua no $PATH • /usr/share/SUA_EMPRESA/
  23. 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
  24. Organize a casa Automatize tudo que puder • CFengine (Rudder)

    • Ansible • Puppet • Chef • Fabric, capistrano • etc.
  25. 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
  26. Organize a casa Esqueça planilhas e .txts, use sistemas apropriados

    para organizar ips, desenhos de redes e racks, etc. • Racktables
  27. Organize a casa Use monitoria reativa e com histórico •

    Zabbix
  28. Obrigado! Diogo Leal diogo @ diogoleal . com