Configurando mudanças de horário de verão
Comumente o Brasil apresenta alterações na agenda para entrada / saída do horário de verão. Infelizmente, nem sempre as distribuições Linux conseguem soltar uma correção em tempo hábil (embora deveriam, pois as mudanças são conhecidas pelo menos com uma semana de antecedência...), forçando aos administradores a reconfiguração manual de seus sistemas.
Este documento tem por objetivo apresentar a sintaxe para correção do horário de verão de 2002, que foi mudado de 13 de outubro para 03 de novembro, devido às eleições.
Procedimento de configuração
Pré-requisitos:
- Acesso de superusuário à máquina
- Pacote da glibc versão 2.2.5 ou superior (o procedimento talvez precise ser adaptado para versões anteriores)
- Editor de textos para edição local ou alguma maneira de enviar um arquivo para a máquina que terá a correção
Procedimento
Gerando as regras
O arquivo /etc/localtime contém informações binárias a respeito da configuração do relógio da máquina. Estas informações referem-se à zona de fuso-horário que a máquina está sujeita, bem como início e término do horário de verão, se aplicável.
Um arquivo texto contendo as regras que serão compiladas deverá ser criado. O arquivo pode ter qualquer nome e usaremos o exemplo de fuso-2002. Para o ano de 2002, especificamente, as regras que nos interessam no momento são:
Rule Brazil 2002 only - Nov Sun>=3 00:00 1 D Rule Brazil 2003 only - Feb Sun>=16 00:00 0 S Zone Brazil/East -3:00 Brazil BR%sT
O formato deste arquivo é extremamente simples mas, como quase tudo no Unix / Linux, extremamente eficiente e versátil. A documentação do zic (man zic) fornece maiores informações a respeito da sintaxe e possíveis combinações. Neste momento será suficiente a explicação das regras acima.
Uma regra possui a seguinte sintaxe
Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
ou seja, é sempre iniciada pela palavra "Rule", seguida do nome do conjunto de regras da qual esta é parte.
Os campos FROM e TO indicam o ano de início e de término cobertos por esta regra. A palavra reservada only, no campo TO, indica que a regra é válida apenas para o ano especificado no campo FROM.
Os demais campos até o campo SAVE apenas indicam quando a regra será aplicada.
O campo SAVE informa a quantia de horas que deve ser adicionada no dia e hora especificados. No início do horário de verão adicionamos uma hora ao relógio.
O último campo, LETTER/S será utilizado pela regra de fuso, descrita abaixo.
Uma regra de fuso tem a seguinte forma:
Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
A palavra "Zone" é obrigatória, para indicar que esta linha irá tratar de uma zona de fuso horário.
O campo NAME indica o nome do fuso horário. Este nome será usado na criação do arquivo binário, após a compilação. Ele será criado relativamente ao diretório /usr/share/zoneinfo.
O campo GMTOFF indica o offset, ou seja, o deslocamento em relação a UTC para a obtenção da hora padrão.
O campo RULES/SAVE possui o nome da regra ("Rule") que deve ser aplicada a este fuso horário.
O campo FORMAT possui a abreviação que deve aparecer após a indicação da hora. Aqui o uso de "%s" fará com que o último campo da regra seja substituído no lugar de "%s". No nosso caso, fora do horário de verão teríamos "BRST" e no horário de verão "BRDT".
Compilando as regras
De posse de nosso arquivo fuso-2002 basta que executemos, como superusuário, o comando
zic fuso-2002
para que o arquivo /usr/share/zoneinfo/Brazil/East seja atualizado.
Implementando as mudanças
Depois de compilado, basta que copiemos o arquivo gerado (/usr/share/zoneinfo/Brazil/East) como /etc/localtime.
As mudanças têm efeito imediatamente.
Uma nota quanto a interfaces gráficas e seus relógios: pode ser necessário reiniciar a aplicação de relógio se a mesma não consulta o sistema.
Fontes utilizadas
- Página de manual do zic
Dados deste documento
Autor: Jorge Godoy
Data: 12 de outubro de 2002
Última atualização: 12 de outubro de 2002