Chronos Inside
05 maio, 2007
  Arrumando a casa (Planet GentooBR)

Estou voltando a ativa com o Planet GentooBR e resolvi colocar ordem na casa. Conforme e-mail enviado a membros esta semana retirei (temporariamente se os membros acertarem a situação) do planet blogs com conteúdo inadequado ou sem a tag gentoobr/gentoo.

Os blogs do Indiox, AngusYoung e o meu ficaram, os blogs do Hélder, Renata e Enderson foram desabilitados.

O do Hélder (HMBR) por estar com conteúdo em inglês, o da Renata e do Enderson por não conter a tag Gentoo/GentooBR.

Os membros estão sendo comunicados por e-mail e espero retornarem o mais rápido possível.

Enquanto isto, ai vem novidades.

Em breve estarei com dominio e blog próprio e poderei contar com espaço próprio para escrever artigos para o planet :), isso é ótimo, existem dezenas de coisas que eu tenho em mente para escrever.

Em adendo, eu o Hélder estamos nos tornando oficialmente responsáveis (assim que nos transferirem os dados de acesso) pelo www.gentoobr.org. Quem sabe não teremos um Drupal e um sistema melhor para notícias :).

Fiquem no aguardo, abraços, Chronos.

Marcadores:

 
24 agosto, 2006
  Na sua opinião, o que lhe daria maior motivação para trabalhar em uma empresa?
Hoje me perguntaram o seguinte:

>* Na sua opinião, o que lhe daria maior motivação para trabalhar
> em uma empresa?


E ai segue minha resposta:

Bons projetos, remuneração saudável, pessoas amigas que formem um bom time de desenvolvimento, rotatividade entre projetos.

Bons projetos são importantes para não cansar os funcionários, ninguém gosta de trabalhar mais que dois meses em um projeto ruim, chato, mal planejado mas trabalharia seguramente bem mais tempo em um projeto praseroso que inspirasse desafios e elevasse o conhecimento do time.

A remuneração saudável mina a chance do funcionário ficar preocupado com questões financeiras podendo demandar mais atenção a empresa.

Boas pessoas no time de desenvolvimento, com os quais você trabalha todo dia são essenciais para se manter um projeto andando e fazer a empresa andar pra frente, pessoas chatas, mal humoradas, folgadas, etc minam a chance do time se dar bem e consequentemente atrasa o projeto e diminui a qualidade da empresa.

A rotatividade de projetos evita que o desenvolvedor enjoe de fazer a mesma coisa além de fazer o desenvolvedor conhecer melhor todos os projetos da empresa e aumentar seu conhecimento. Ela pode em alguns casos ser compensada pela evolução do projeto, adicionando mais coisas a ele e isto torna praseroso o trabalho.


A empresa onde trabalho esta evoluindo, as pessoas trabalhando aqui atualmente são ótimas pessoas, sei que isto é difícil por ai. Infezlimente ela peca nos outros pontos que coloquei.

Minha pergunta é, da para colocar 1 entre 15 empresa de TI no brasil que tem este ambiente?
 
11 agosto, 2006
  Testando requisições http/https.
Ele fala por si só.


  1 #!/bin/bash
  2 clear
  3 # Este script testa requisições http/https a scripts/aplicativos na web. A idéia
  4 # é verificar se os servidores web (ou de outro tipo) estão ativos.
  5 # Através do lynx ele faz uma requisição (usando a opção --dump para ter a
  6 # saida no shell) e consegue salvar os códigos de acesso http (através da opção
  7 # --eror-file) em um arquivo. Este arquivo é usado para dizer se o acesso está
  8 # ok ou não.
  9 #
 10 # Autor: Felipe Rafael Prenholato <chronos@gentoobr.org>
 11 # IRC: nick chronos in #gentoo-br or #sancalivre at irc.freenode.net
 12 # Data: 23 de Julho de 2006.
 13 #
 14 # Este script está coberto sobre a licença GPLv2 e disponível via
 15 # pedido por e-mail. Qualquer alteração por favor envie para o criador
 16 # do script. Podem publica-lo onde quiserem, apenas sitem o autor.
 17 
 18 #                           #
 19 # --- VARIAVEIS GLOBAIS --- #
 20 #                           #
 21 
 22 # Debug flag
 23 DEBUG=0
 24 
 25 # Definindo diretório temporário.
 26 if [ -d /tmp ] && [ -w /tmp ] && [ -r /tmp ]
 27 then
 28     TMPDIR='/tmp'
 29 elif [ -d /var/tmp ] && [ -w /var/tmp ] && [ -r /var/tmp ]
 30 then
 31     TMPDIR='/var/tmp'
 32 else 
 33     echo "O script precisa do diretório /tmp ou /var/tmp com direito de escrita    e leitura para funcionar."
 34     exit 1
 35 fi
 36 
 37 # STATUS_FILE, este arquivo serve para definir o status das URLs.
 38 # Quando seu valor for 1 é porque esta funcionando (as requests estão ok),
 39 # quando for 0, é porque há problemas.
 40 STATUS_FILE="$TMPDIR/${0##*\/}_status_file_for_FOO.tmp"
 41 
 42 # error-file usado no lynx, de man lynx, opção --error-file:
 43 #
 44 #  -error_file=FILE
 45 #       define a file where Lynx will report HTTP access codes.
 46 #
 47 LYNX_ERROR_FILE="$TMPDIR/${0##*\/}_lynx_error_file_FOO.tmp"
 48 
 49 # Montanto string do Lynx.
 50 LYNX="$(which lynx) --error-file=ERROR_FILE --dump URL"
 51 
 52 # Lista de URLs, separadas por espaço.
 53 URLS="http://urlo1/foobar.php http://666.166.299.131/exe/mpg.exe
 54 http://localhost/phpinfo.php"
 55 
 56 # Lista de e-mails, separadas por espaço.
 57 EMAILS="chronos@gentoobr.org"
 58 
 59 #                   #
 60 #  --- FUNÇÕES ---  #
 61 #                   #
 62 
 63 # sendMail(ASSUNTO,MENSAGEM)
 64 sendMail () {
 65 
 66     # Definindo variaveis.
 67     local ASS
 68     local MSG
 69     local ENCODING
 70 
 71     # $1 = ASS e $2 = MSG, se não existirem, não manda nada.
 72     if [ -n "$1" ] && [ -n "$2" ]
 73     then
 74         ASS="$1"
 75         MSG="$2"
 76     else
 77         return 1 # ASS e MSG são obrigatórios.
 78     fi
 79 
 80     # Debug
 81     if [ "$DEBUG" = "1" ]
 82     then
 83         echo "--- Enviando e-email ---"
 84         echo "Assunto: "
 85         echo -e $ASS
 86         echo
 87         echo "Mensagem: "
 88         echo -e $MSG
 89         echo "--- / Enviando e-email ---"
 90     fi
 91 
 92     # Encoding default é en_US-ISO-8859-1, mas o cara pode colocar o que quiser
 93     # :).
 94     if [ -n "$3" ]
 95     then
 96         ENCODING="$3"
 97     else
 98         ENCODING="en_US.ISO-8859-1"
 99     fi
100 
101     #return 0 # hack para testes.
102     # Enviando o E-Mail.
103     if LC_ALL="$ENCODING" echo -e "$MSG" | mail -s "$ASS" $EMAILS
104     then
105         return 0 # Foi enviado na boa.
106     else
107         return 2 # O envio do e-mail deu problema.
108     fi
109 
110 }
111 
112 testStatusFile () {
113 
114     # Return codes
115     # 1 - Não foi passado o arquivo
116     # 0 - Arquivo criado com valor 0
117     # 2 - Arquivo está com valor 0
118     # 3 - Arquivo está com valor 1
119 
120     local statusfile
121     if [ -n "$1" ] 
122     then
123         statusfile=$1
124     else
125         return 1 # não foi passado o status file.
126     fi
127     
128     if ! [ -s $statusfile ]
129     then
130         echo 0 > $statusfile
131         return 0
132     fi
133 
134     [ "$(<$statusfile)" = "0" ] && return 2
135 
136     [ "$(<$statusfile)" = "1" ] && return 3
137 
138 }
139 
140 #                           #
141 # --- CORPO DO PROGRAMA --- #
142 #                           #
143 
144 for url in ${URLS};
145 do
146     
147     # Acertando variÃveis temporárias (para cada url elas ficam diferentes).
148     TMP_STATUS_FILE="${STATUS_FILE/FOO/${url##*\/}}"
149     TMP_LYNX_ERROR_FILE="${LYNX_ERROR_FILE/FOO/${url##*\/}}"
150     TMP_LYNX=${LYNX/URL/$url} && TMP_LYNX=${TMP_LYNX/ERROR_FILE/$TMP_LYNX_ERROR_FILE}
151     
152     # Fazendo request da url.
153     $TMP_LYNX &>/dev/null
154 
155     if [ "$?" = "1" ]
156     then
157 
158         EXITCODE=1
159         testStatusFile $TMP_STATUS_FILE
160         if [ "$?" = "0" ] || [ "$?" = "2" ]
161         then
162 
163             echo 1 > $TMP_STATUS_FILE
164 
165             MSG="\n Ocorreu um erro com o Lynx, não foi possível negociar a requisição com o servidor."
166             MSG="$MSG\n Pode ser possível que o micro não esteja ligado ou o serviço responsável não esteja de pé."
167             MSG="$MSG\n É ainda possível que não haja conexão com a internet ou existam outros problemas na conexão."
168             MSG="$MSG\n"
169 
170             ASS="Problemas na conexão com $url"
171 
172             sendMail "$ASS" "$MSG"
173 
174         fi
175 
176     else
177 
178         # Pegando protocolo e código de retorno do arquivo.
179         PROTOCOL=$(grep STATUS $TMP_LYNX_ERROR_FILE | cut -d"=" -f2 | cut -d" " -f1)
180         CODE=$(grep STATUS $TMP_LYNX_ERROR_FILE | cut -d"=" -f2 | cut -d" "   -f2)
181         
182         # Testando códigos
183         case "$CODE" in
184 
185             2??)
186 
187             # Códigos 2XX são códigos de sucesso.
188             echo 0 > $TMP_STATUS_FILE
189             
190             ;;
191 
192             4??)
193                 
194             EXITCODE=1
195             testStatusFile $TMP_STATUS_FILE
196             if [ "$?" = "0" ] || [ "$?" = "2" ]
197             then
198                 
199                 echo 1 > $TMP_STATUS_FILE
200                 
201                 case "$CODE" in
202                     
203                     
204                     403)
205 
206                     MSG="\n Acesso proibido a $url.\n Erro código 403, protocolo $PROTOCOL"
207                     ASS="Erro de cliente na url $url, erro 403."
208                     sendMail "$ASS" "$MSG"
209 
210                     ;;
211                     
212                     404)
213 
214                     MSG="\n O arquivo da url $url não foi encontrado.\n Erro código 404, protocolo $PROTOCOL"
215                     ASS="Erro de cliente na url $url, erro 404."
216                     sendMail "$ASS" "$MSG"
217 
218                     ;;
219                     
220                     408)
221 
222                     MSG="\n Timeout de requisição para url $url.\n Erro código 408, protocolo $PROTOCOL"
223                     ASS="Erro de cliente na url $url, erro 408."
224                     sendMail "$ASS" "$MSG"
225 
226                     ;;
227                     
228                     *)
229 
230                     MSG="\n O erro $CODE aconteceu com a url $url.\nVerifique a lista de erros HTTP em http://en.wikipedia.org/wiki/HTTP_error_codes ou http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html para ver qual é o erro."
231                     ASS="Erro de cliente na url $url, erro $CODE."
232                     sendMail "$ASS" "$MSG"
233 
234                     ;;
235 
236                 esac
237 
238             fi
239 
240             ;;
241 
242             5??)
243                 
244             EXITCODE=1
245             testStatusFile $TMP_STATUS_FILE
246             if [ "$?" = "0" ] || [ "$?" = "2" ]
247             then
248                 
249                 echo 1 > $TMP_STATUS_FILE
250                 
251                 case "$CODE" in
252                     
253                     
254                     500)
255 
256                     MSG="\n Erro interno de servidor para $url.\n Erro código 500, protocolo $PROTOCOL"
257                     ASS="Erro de servidor na url $url, erro 500."
258                     sendMail "$ASS" "$MSG"
259 
260                     ;;
261                     
262                     502)
263 
264                     MSG="\n Bad Gateway para $url.\n Erro código 502, protocolo $PROTOCOL"
265                     ASS="Erro de servidor na url $url, erro 502."
266                     sendMail "$ASS" "$MSG"
267 
268                     ;;
269                     
270                     503)
271 
272                     MSG="\n Serviço não disponível para $url.\n Erro código 503, protocolo $PROTOCOL"
273                     ASS="Erro de servidor na url $url, erro 503."
274                     sendMail "$ASS" "$MSG"
275 
276                     ;;
277                     
278                     *)
279 
280                     MSG="\n O erro $CODE aconteceu com a url $url.\nVerifique a lista de erros HTTP em http://en.wikipedia.org/wiki/HTTP_error_codes ou http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html para ver qual é o erro."
281                     ASS="Erro de servidor na url $url, erro $CODE."
282                     sendMail "$ASS" "$MSG"
283 
284                     ;;
285 
286                 esac
287 
288             fi
289 
290             ;;
291 
292             *)
293 
294             EXITCODE=1
295             testStatusFile $TMP_STATUS_FILE
296             if [ "$?" = "0" ] || [ "$?" = "2" ]
297             then
298 
299                 echo 1 > $TMP_STATUS_FILE
300 
301                 MSG="\n O erro $CODE aconteceu com a url $url.\nVerifique a lista de erros HTTP em http://en.wikipedia.org/wiki/HTTP_error_codes ou http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html para ver qual é o erro."
302                 ASS="Erro na url $url, erro $CODE."
303                 sendMail "$ASS" "$MSG"
304 
305             fi
306 
307             ;;
308 
309         esac
310 
311     fi
312         
313     # Debug
314     if [ "$DEBUG" = "1" ]
315     then
316         echo "URL: $url"
317         echo "TMP_STATUS_FILE: $TMP_STATUS_FILE"
318         echo "TMP_LYNX_ERROR_FILE: $TMP_LYNX_ERROR_FILE"
319         echo "TMP_LYNX: $TMP_LYNX"
320         echo "PROTOCOL: $PROTOCOL"
321         echo "CODE: $CODE"
322         echo "SAIDA DO LYNX: $foo"
323         echo
324         echo "-----------------"
325         echo
326     fi
327 
328     # Deletando TMP_LYNX_ERROR_FILE
329     rm $TMP_LYNX_ERROR_FILE &>/dev/null
330     
331     # Limpando variaveis.
332     unset -v url TMP_STATUS_FILE TMP_LYNX_ERROR_FILE TMP_LYNX foo MSG ASS SEND_MAIL_FAIL PROTOCOL CODE
333 
334 done
335 
336 [ "$EXITCODE" = "1" ] && exit 1
337 exit 0

Roda no cron.

Exemplo:


# testa requisiÃÃes a determinadas URLS e envia alertas.
# a lista de URLS e E-MAILS devem ser alteradas no SCRIPT.
*/10 * * * * ~/bin/testerequest &>/dev/null
 
  Assasinando bashs de outros usuários, mas só como root.
Bem, certo dia da minha vida, tive que kickar um sysadmin do servidor que eu estava instalando um portal pq ele realmente estava me atrapalhando.

Me bateu uma luz (por causa do mesmo sysadmin) hoje e fiz uma coisa legal, segue abaixo um script para kickar todos os usuários que não seja o que vc passar ou kickar o que vc passar, pegando principalmente por IP/Maquina deles.


 1 #!/bin/bash
 2 
 3 # a ideia eh matar todos os bashs menos o seu, impossibilitando alguem
 4 # de atrapalhar o servico.
 5 
 6 # o script eh dedicado a um homem chamado Jomar.
 7 
 8 # Este script eh licenciado sobre a GPLv2 e toda alteracao devera ser
 9 # publicada e enviada se possivel ao criador.
10 
11 # Autor:
12 # Felipe Prenholato
13 # chronos@gentoobr.org
14 
15 QUEM=$1
16 EXPULSAR=$2
17 
18 if [ "$EXPULSAR" == "S" ]
19 then
20     GREP="grep"
21 elif [ "$EXPULSAR" == "N" ]
22 then
23     GREP="grep -v"
24 else
25     echo "Use: mata [IP|NOME_MAQUINA] [S|N]"
26     echo "O segundo argumento define se o cara vai ser expulso ou se ele fica no micro."
27     exit 1
28 fi
29 
30 | grep "^[a-z]" | ${GREP} "$QUEM" | tr -s '\t' ' ' | cut -d' ' -f2 > /tmp/tmpmata
31 
32 for e in $(cat /tmp/tmpmata);
33 do
34 
35     PROCESSOS=$(ps aux | grep bash | grep $e | tr -s '\t' ' ' | cut -d' ' -f 2)
36     
37     kill -9 $PROCESSOS
38 
39 done


Use com cuidado e por sua conta. Isto pode causar demissão por justa causa ou te arranjar um grande problema.

Ele em um while true rodando impede que qq ser vivo que não seja do seu IP/Maquina entre via ou terminal.

EU NÃO ME RESPONSABILIZO!
 
21 junho, 2006
  Alertar caso servidores caiam!
Ai em baixo meu script pingping. Ele vai alertar os emails quando algum servidor parar. Leia ele :).

 1 #!/bin/sh
 2 # Este script pinga servidores na lista da variavel SERVIDORES e envia
 3 # emails para os emails da lista da variavel LISTA_EMAILS alertando caso
 4 # eles caiam. O script só alerta se na última vez que ele testou o
 5 # servidor estiver em pé ou se o servidor não foi testado ainda.
 6 #
 7 # Autor: Felipe Rafael Prenholato <chronos@gentoobr.org>
 8 # IRC: nick chronos in #gentoo-br or #sancalivre at irc.freenode.net
 9 # Data: 21 de Junho de 2006.
10 #
11 # Este script está coberto sobre a licença GPLv2 e disponível via
12 # pedido por e-mail. Qualquer alteração por favor envie para o criador
13 # do script.
14 
15 
16 # Variavel SERVIDORES: lista de servidores separados por espaço.
17 # Se colocar nomes em vez de IPs certifique-se de que o servidor em que o script
18 # rodar resolva o ip.
19 SERVIDORES="chicobento portalabipti"
20 
21 # Variavel LISTA_EMAILS: lista de emails separados por espaço
22 LISTA_EMAILS="felipe.prenholato@mzo.com.br patrick@mzo.com.br paulo@mzo.com.br deivid@mzo.com.br felipe@nemo.intranet.mzo.com.br"
23 #LISTA_EMAILS="chronos@gentoobr.org felipe@nemo.intranet.mzo.com.br felipe.prenholato@mzo.com.br"
24 
25 # Formato da data a ser enviada no e-mail.
26 data=$(date +"%T de %d/%m/%Y")
27 
28 # função que pinga o servidor e envia email.
29 ping_server() {
30 
31     # variaveis locais usadas
32     local pingreturn
33     local serversts
34     local TMPFILE
35     local server
36 
37     server=$1
38     TMPFILE="/tmp/ping_$server.tmp"
39 
40     # Debug
41     #echo "Servidor: $server"
42     #echo "Arquivo temporario: $TMPFILE"
43     
44     # pinga servidor e pega retorno.
45     ping -c3 $server &>/dev/null;
46     pingreturn=$?;
47     
48     # Debug
49     #echo "Ping retornou $pingreturn para $server"
50 
51     # Se pingreturn for 0 o servidor está de pé.
52     if [ "$pingreturn" == "0" ]
53     then
54         echo "1" > $TMPFILE
55     fi
56 
57     # Se pingreturn for 1 o servidor não foi pingado.
58     if [ "$pingreturn" == "1" ]
59     then
60     
61         # Se $TMPFILE não existir cria ele.
62         if ! [ -e $TMPFILE ]
63         then
64             # Debug
65             #echo "$TMPFILE não existe, criando com valor 1."
66             echo "1" > $TMPFILE
67         fi
68         
69         # pega status do servidor, 1 é pingado, 0 é não pingado.
70         serversts=$(cat $TMPFILE)
71 
72         # Debug
73         #echo "Valor de $TMPFILE: $serversts"
74         
75         # se ele estava de pé (valor 1) caiu agora, grava valor 0 em
76         # $TMPFILE e manda email.
77         if [ "$serversts" == "1" ]
78         then
79             
80             echo "0" > $TMPFILE
81             msg="Servidor $server fora do ar em $data. Contatar responsavéis."
82             ass="Servidor $server fora do ar."
83             LC_ALL="en_US.ISO-8859-1" echo "$msg" | mail -s "$ass" $LISTA_EMAILS
84 
85         fi
86     
87     fi
88 
89 }
90 
91 # roda ping_server para cada servidor.
92 for e in $(echo $SERVIDORES);
93 do
94     ping_server $e;
95 done

Ele precisa ser instalado em um servidor que possa pingar os demais e enviar emails. Versões antigas do postfix não vão funcionar, tem q suportar a opção -a no comando mail, seu uso é:
./script
coloque no cron e fique de boa ;-)
 
putz...precisa disso. Bem, aqui quero falar muito pouco sobre minha vida pessoal, e principalmente sobre programação, linux, e coisas relacionadas. tem espaço ainda para bike, que eu amo!

ARCHIVES
fevereiro 2006 / março 2006 / abril 2006 / junho 2006 / agosto 2006 / maio 2007 /


Powered by Blogger