
Rapaz, finalmente estou voltando a escrever por aqui. A coisa tava difícil. Muita coisa pra fazer e ao mesmo tempo nada pra fazer ! Entenderam ? Não ?! Nem eu .. mas vamos ao que interessa.
Estava eu em um belo dia de sol ( aqui em Palmas todo dia é dia de Sol e que SOL ) trabalhando e olhando os logs de alguns servidores que mantenho quando para minha surpresa notei que todos estavam com os horários diferentes. Qual o problema disso ?! O problema, é que se o meu chefe me pedisse para fazer uma auditoria e ver quem foi que acessou tal site e cruzar esta informação com o horário de login da máquina, eu taria LASCADO. Deu para vislumbrar a coisa toda ? Então… fui a batalha.
Como diacho eu sincronizo os relógios das máquinas ?!?!
E depois que consegui vei a pergunta:
Como é que eu faço para esta P&*%^ saber que aqui eu não uso Horário de Verão ?!
Essa foi minha pergunta. Ai lembrei do protocolo NTP, que serve exatamente para isso.
Segundo a Wikipédia, em url http://pt.wikipedia.org/wiki/NTP :
“Network Time Protocol (NTP) é um protocolo desenvolvido sob o modelo TCP/IP para permitir a sincronização dos relógios dos sistemas de uma rede de computadores. O NTP assume especial relevo em organizações cujas operações devam ser compatibilizadas em termo de timestamp.
A sincronização dos relógios é feita por requisição, mediante um cliente que questiona periodicamente um servidor. Utiliza-se a porta UDP 123 como camada de transporte. O protocolo especifica desvios e outras formas de calcular o atraso induzido na comunicação, tal como a própria latência da transmissão.”
Sabendo disso achei um artigo muito bom que explica Como Montar um Servidor NTP. Segui os passos iniciais e coloquei o meu servidor para rodar. O meu arquivo de configuração /etc/ntp.conf , ficou assim :
#Nao permite alteracao por parte de servidores externos
restrict default nomodify notrap noquery#permite controle total a partir da interface local
restrict 127.0.0.1# Libera acesso a rede local
restrict xxx.xxx.xxx.xxx mask xxx.xxx.xxx.xxx nomodify notrapdriftfile /var/lib/ntp/drift/ntp.drift # path for drift file
logfile /var/log/ntp # alternate log file
# Servidor para sincronizar o relógio
# Será usado em ordem
# o pcdsh05.on.br e stratum 1 todos os outros são stratum 2
server pcdsh05.on.br
server ntp.cais.rnp.br
server ntp.puc-rio.br
server ntp1.pucpr.br
server ntp.pop-rs.rnp.br
Observação: Como o servidor era um Suse Linux rodando o NOES (Novell Enterprise Server) o serviço NTP, chama-se XNTPD e existe uma diretiva no arquivo de configuração /etc/sysconfig/xntp que precisa ser alterada para que o mesmo utilize o /etc/ntp.conf. Deve-se colocar em AUTO a diretiva XNTPD_INITIAL_NTPDATE , como mostra o cabeçalho do arquivo.
## Path: Network/NTP
## Description: Network Time Protocol (NTP) server settings
## Type: string
## Default: AUTO-2
## ServiceRestart: xntpd
#
# Usually it's a good idea to get the current time and date
# from some other ntp server, before the local xntpd is started.
# - Set XNTPD_INITIAL_NTPDATE="AUTO" to query ALL servers listed
# in the configuration file (/etc/ntp.conf).
# - Set XNTPD_INITIAL_NTPDATE="AUTO-{NUMBER}" to query the first {NUMBER}
# servers listed in the configuration file. E.g. "AUTO-2".
# Otherwise provide a space-separated list of ntp servers to query, or
# set XNTPD_INITIAL_NTPDATE="" to do no initial query at all.
#
XNTPD_INITIAL_NTPDATE="AUTO"
Feita as devidas configurações, basta reiniciar o serviço, no caso do SUSE NOES, /etc/init.d/xntpd restart. Vale salientar que o mesmo demora alguns minutos para sincronizar com os servidores na internet.
O último passo é configurar os máquinas clientes para sincronizarem com o nosso server.
Se sua máquina for um UBUNTU, basta clicar com o botão direito sobre a data e escolher AJUSTAR DATA E HORA. Será pedida a senha do administrador e na janela que aparecer , na opção de configuração, escolher : Manter sincronizado com servidores na Internet. Na opção Servidores de Horário, clicar em Selecionar servidores e adicionar o IP do seu servidor. Pronto! :D
Se sua máquina estiver rodando um Windows, clique com o botão direito sobre a data e escolha ajustar data e hora. Na janela que aparecer, clique na guia Horário na Internet e marque a opção: Sincronizar automaticamente com um servidor de horário na Internet e em Servidor digite o IP do seu servidor NTP. Em seguida clique em Atualizar Agora. Se por algum motivo ele disser que não pode sincronizar, que está com raiva, de mal, e não faz isso nem a pau, como aconteceu comigo, tenha calma e não quebre o seu computador, é apenas o Windows. :D Então, se vc usa o windows XP ou 2000, menos mal, vá na linha de comando e digite :
net stop w32time
net time /setsntp:SERVIDOR
net start w32time
Agora, se a máquina que vc está querendo sincronizar for um servidor, o processo é análogo ao que fizemos para configurar o serviço NTP anteriormente, só temos que configurar para que ele busque o horário em nosso servidor de hora e não na Internet, ou ainda, criar um pequeno script, como mostrado abaixo e colocá-lo no cron para que ele execute de hora em hora ou na frequência que você desejar.
Pequeno Script:
#!/bin/sh
ntpdate
Configuração no /etc/ntp.conf caso deseje utilizar o serviço ntp para sincronizar
driftfile /var/lib/ntp/drift/ntp.drift # path for drift file
logfile /var/log/ntp # alternate log file
server
Bem pessoal, é o seguinte. Depois de todo este trabalho quase destruo meu terminal devido a não conseguir dizer uma coisa tão simples para o server: EU NÃO TOU USANDO HORÁRIO DE VERÃO P&%$#@! :D
Depois de muito fuçar aqui e ali, recorrer muito ao ORÁCULO DA INFORMAÇÃO, vulgo Google, acabei descobrindo várias coisinhas interessantes.
” A time zone is a region of the Earth that has adopted the same standard time, usually referred to as the local time “
Ou seja, na verdade ele altera o seu Fuso Horário. Sabe aquela história de o seu horário ser GMT - 3 ou GMT - 2 ?! Então é isso. Ao entrar em horário de verão ele altera o seu timezone de GMT - 3, caso você esteja neste fuso horário, para GMT - 2, o que aparentemente significa adiantar uma hora no seu relógio como gosta de anunciar os jornais ;D.
Mais informações sobre timezone: http://en.wikipedia.org/wiki/Timezone
Um é o chamado Hardware Clock, que é aquele que funciona independentemente de qualquer programa, SO, etc. Também conhecido como Real Time Clock, RTC, BIOS Clock, CMOS Clock. Pense num bicho conhecido! :D O outro é o System Time que é um relógio que, digamos, tem dentro do kernel do linuxe é controlado por interrupções. Quando você inicia o linux ele ajusta o System Time com o Hardware Clock e depois disso esqueçe este último, por isso podemos ter dois horários na mesma máquina! :D Você pode usar o comando hwclock para ajustar o seu Hardware Clock. Cuidado! O date só modifica o System Clock. Sacou ?! :D
Para saber mais um pouco digite : man hwclock
Tá tudo bem! Mas e dai ?! E dai meu amigo, que esta história toda me levou a descobrir que o linux trata as zonas (GMT-3, GMT-2, etc etc etc ), através de arquivos de timezone, que são arquivos que servem para dizer se existem alterações nas mesmas em determinados períodos do ano, como acontece com o Horário de Verão. O seu fuso horário , ou seja, timezone, é regido pelo arquivo /etc/timezone, que é um arquivo binário! Tou avisando logo antes que você tente olhar dentro do bicho! :D
Este arquivo pode ser modificado para a sua realidade. No meu caso o mesmo já vinha definido para alterar o Fuso Horário para GMT - 2, quando o horário de verão começou a valer. E este era meu problema, pois aqui, nós não temos horário de verão. Então, toda vez que eu alterava a hora, virava e mexia, ele adiantava o relógio.
Vamos a luta. Alterar o nosso aquivo /etc/timezone para que ele não altere o nosso relógio na vigência do horário de verão.
1 - Crie um arquivo .zic, com qualquer nome, dentro de um diretório qualquer (no meu caso eu criei dentro de /usr/share/zoneinfo/Brazil/, que é onde ficam os arquivos de timezone).
vim timeZoneSemHorarioVerao.zic
2 - Dentro deste arquivo coloque o conteúdo abaixo e salve.
Rule Brazil 2007 only - Nov 5 00:00 0 -
Rule Brazil 2008 only - Feb 25 00:00 0 -
Zone Brazil/East -3:00 Brazil BR%sT
Explicação:
Primeira e Segunda linhas:
Rule = Regra
Brazil = Nome da regra que estamos criando
2007 = Ano em que a regra terá validade
only = Indica que a regra vale apenas para este ano
- = - (é isso mesmo. Um sinal de menos e pronto! )
Nov = Mês em que a regra começa a valer
5 = Dia do mês em que a regra começa a valer
00:00 = Hora do dia em que a regra começa a valer
0 = Aqui vai a quantidade de tempo que será acrescentado ao fuso. Se fosse para valer o horário de verão colocaríamos 1, o que faria o GMT - 3 , passar para GMT - 2 , afinal, lembrando da matemática do jardim de infância, -3 + 1 = -2Terceira Linha
Zone = Indica que é um arquivo de zona.
Brazil/East = Nome do fuso horário.
- 3:00 = Quantidade de horas que deve ser adicionada ao nosso relógio.
Brazil = Nome da Regra criada na linha 1 e 2
BR%sT = Formato que será usado para abreviação do fuso horário. BRT = Brazilian Time (horário Normal) , BRST = Brazilian Saving Time (Horário de Verão). Digiter o comando date e veja que lá vai aparecer BRT ou BRST após o horário.Caso queira se aprofundar: man zic
Olha só como ficaria o arquivo se tivesse que configurar para dizer ao linux para mudar o meu fuso se o horário de verão começasse dia 05 de novembro e acabasse dia 25 de fevereiro.
Rule Brazil 2007 only - Nov 05 00:00 1 S
Rule Brazil 2008 only - Feb 25 00:00 0 -
Se tiver a curiosidade de querer saber como está configurado o seu arquivo de zonas e verificar quando é que começa e acaba o horário de verão, digite:
zdump -v Brazil/East
3 - BACKUP! SEMPRE BACKUP! Para não chorar depois da M%$#@ feita. Copiemos o arquivo /usr/share/zoneinfo/Brazil/East.
cp /usr/share/zoneinfo/Brazil/East /usr/share/zoneinfo/Brazil/East.ORIGINAL
4 - Criemos o arquivo de timezone: zic
zic timeZoneSemHorarioVerao.zic
Após isso o arquivo /usr/share/zoneinfo/Brazil/East será atualizado.
5 - Último passo. Copiar o novo arquivo East para o lugar do localtime
cp /usr/share/zoneinfo/Brazil/East /etc/localtime
Para ver se tá tudo beleza basta usar o comando date e verificar a hora. :D Também dá para usar o zdump. Neste caso, vc deve obter algo do tipo :
Brazil/East Fri Dec 13 20:45:52 1901 UTC = Fri Dec 13 17:45:52 1901 BRT isdst=0 gmtoff=-10800
Brazil/East Sat Dec 14 20:45:52 1901 UTC = Sat Dec 14 17:45:52 1901 BRT isdst=0 gmtoff=-10800
Brazil/East Mon Jan 18 03:14:07 2038 UTC = Mon Jan 18 00:14:07 2038 BRT isdst=0 gmtoff=-10800
Brazil/East Tue Jan 19 03:14:07 2038 UTC = Tue Jan 19 00:14:07 2038 BRT isdst=0 gmtoff=-10800
Observe que apesar de você ter especificado os anos e tudo mais eles não aparecem ai. Bem, ao meu ver, é porque simplesmente não tem horário de verão para você ! :D
Acho que é só pessoal.
Ops. Ia esquecendo. Referência Bibliográfica. :D Ou vocês acham que aprendi tudo isso sozinho só tendo idéias ?! :D :D Tenho que dar os créditos :D
http://www.dicas-l.com.br/dicas-l/20061001.php
http://bazar2.conectiva.com.br/pipermail/linux-br/2007-October/045034. html
http://listas.csirt.pop-mg.rnp.br/pipermail/infoseg/2006-October/00154 2.html

7 Responses
solano
Novembro 21st, 2007 at 7:06 pm
1Finalmente consegui entender o tal do timezone, arquivo .zic, etc.
Valeu pelo artigo.
Bridi
Novembro 21st, 2007 at 9:38 pm
2Para os debian-like, sugiro a instalação do pacote tz-brasil. Esse trabalho do .zic tá prontinho, é instalar e nada mais…
Saulo
Novembro 21st, 2007 at 11:45 pm
3Belo artigo, linguagem irreverente mas bem explicado! parabens ao autor!
Felipe
Novembro 22nd, 2007 at 8:04 am
4Parabéns pelo artigo!
Bom método de escrita.
Saudações Livres.
Antonio Cesar
Junho 17th, 2008 at 8:07 am
5Olá, bom dia. Estou a fazer um trabalho na faculdade justamente sobre o NTP. Terei de falar sobre este protocolo de forma aprofundada e gostaria de saber de você se consegue para mim um bom material sobre o assunto de forma ainda mais detalhada do que postou aqui, incluindo algum vídeo de ilustração, etc.
Agradeço muito pela atenção!
rafael
Agosto 11th, 2008 at 11:22 am
6Diego, eu fiz o que você falou para sincronizar o wndows com meu servidor ntp, beleza ele atualizou, mais tenho uma duvida depois que ele atualizou se por algum motivo eu mudar minha hora ou ela mudar sozinha o meu windows não faz a atualização sozinho tenho que ir sempre la e clicar em atualizar agora, voçê sabe o porque disso?
Benites
Outubro 16th, 2008 at 5:30 pm
7Teste e funcionou beleza, texto bem explicado até em detalhes, muito obrigado… Valeu
RSS feed for comments on this post · TrackBack URI
Leave a reply
Significado: Guardar algo para futura consulta. Muito utilizado na informática para arquivar acessos a informações ou serviços para futuras auditorias. Logo, quando dá alguma m*#$%& , o administrador do site vira pro lado, pensa Fu#$*@ e vai logo consultar os últimos logs para ver o que foi que houve.
O ÚltimoLOG surgiu desta idéia de guardar tudo. Os últimos lampejos de criatividade, as últimas idéias, as mais recentes descobertas, ou seja, tudo que for legal para uma futura consulta e o mais importante, tudo em prol de compartilhar o conhecimento. Espero que gostem. ;D
Assine e Acompanhe!
Assine e receba todas as atualizaçõesou Receba por email:
Categorias
Arquivos
Links
Meta
Calendário
Artigos Recentes
Últimos Comentários
Mais comentados
ÚltimoLOG is proudly powered by WordPress - BloggingPro theme by: Design Disease