Neste artigo iremos conferir se o seu sistema Linux está preparado para o horário de verão 2018. Neste ano houveram modificações importantes no início do horário de verão devido às eleições 2018 conforme noticiado nos sites como o UOL e R7.

Seu sistema Linux está preparado para o horário de verão 2018?

O banco de dados de zonas de tempo (Time Zone Database)

Primeiramente, a “IANA – Internet Assigned Numbers Authority” é uma organização mundial responsável por coordenar alguns dos principais elementos que mantêm a Internet funcionando adequadamente. Ela padroniza um banco de dados com o histórico das zonas de tempo, que também é atualizado periodicamente para refletir as alterações feitas pelos órgãos políticos aos limites do fuso horário e para as regras de horário de verão. Este banco de dados é conhecido como “tz” ou “zoneinfo“.

As distribuições Linux acabam adequando esse banco de dados para os seus sistemas. Eles são conhecidos como pacotes “tzdata“. Abaixo os respectivos links dos arquivos “tzdata“ das principais distribuições Linux disponíveis atualmente:

Arch Linux, CentOS, Debian, Fedora, Linux Mint, Red Hat, Ubuntu

O /usr/share/zoneinfo/

Este “banco de dados de zonas de tempo” nada mais é que um conjunto de diretórios e arquivos divididos por continentes, zonas UTC e locais de referência que ficam disponíveis na pasta /usr/share/zoneinfo/

Vamos pegar por exemplo a listagem de São Paulo, localizado em /usr/share/zoneinfo/America/Sao_Paulo

Estes arquivos não são visualizáveis como arquivos de texto portanto comandos como cat, vim, nano, grep não funcionarão. Então é necessário utilizar o comando zdump para visualizar as informações:

zdump -v /usr/share/zoneinfo/America/Sao_Paulo

Surgirá uma lista dos horários de verão para os próximos anos. No exemplo abaixo, em um CentOS 7, pegarei somente do ano de 2018 utilizando o pipe grep 2018:

zdump -v /usr/share/zoneinfo/America/Sao_Paulo | grep 2018

Repare que para o horário de verão 2018, que atualmente está definido como dia 04/11/2018, ou seja, o nosso sistema já está atualizado:

/usr/share/zoneinfo/America/Sao_Paulo Sun Nov 4 02:59:59 2018 UTC = Sat Nov 3 23:59:59 2018 - 03 isdst=0 gmtoff=-10800 /usr/share/zoneinfo/America/Sao_Paulo Sun Nov 4 03:00:00 2018 UTC = Sun Nov 4 01:00:00 2018 -02 isdst=1 gmtoff=-7200

Portanto no dia 03 de novembro de 2018 às 23:59:59, o sistema automaticamente irá para o dia 04 de novembro de 2018 às 01:00:00.

Caso não esteja atualizado, é necessário atualizar o nosso pacote tzdata:

Para família Red Hat (Red Hat, CentOS, Fedora, etc):

yum update tzdata

Para família Debian (Debian, Ubuntu, Kali Linux, entre outros):

apt-get install tzdata

O arquivo /etc/localtime

Na maioria das distribuições, é no arquivo /etc/localtime onde é apontado qual a listagem de horários atuais. Ele pode ser ou uma cópia do arquivo localizado em /usr/share/zoneinfo/ ou um link simbólico direto para este arquivo. No exemplo abaixo, no CentOS 7, já temos um hyperlink apontado para o arquivo /usr/share/zoneinfo/America/Sao_Paulo:

Caso não esteja, podemos atualizar de 3 formas:

Copiando o arquivo /usr/share/zoneinfo para /etc/localtime

Neste caso, basta copiar o arquivo do /usr/share/zoneinfo/America/Sao_Paulo para /etc/localtime com o comando “cp“:

cp -f /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime # -f : Modo forçado, não pergunta se deseja sobrescrever o arquivo.

Observação: Algumas distribuições já fazem isso automaticamente ao atualizar o pacote tzdata.

Forçando um link simbólico do /usr/share/zoneinfo para /etc/localtime

Executar o comando abaixo para criar um link simbólico de /etc/localtime para /usr/share/zoneinfo/America/Sao_Paulo:

ln -sf /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime # -s : Opção para link simbólico # -f : Força a criação do link simbólico

Utilizando o comando timedatectl set-timezone

Caso a instalação do seu sistema Linux foi feita no padrão (com o timezone 0 – GMT 0), é necessário modificar o timezone para o timezone -3 (GMT -3) que é a zona onde está localizado as áreas afetadas pelo horário brasileiro de verão. Este comando só está disponível nos sistemas Linux mais atuais, como por exemplo CentOS 7, Debian 9 e Fedora 28 (systemD):

timedatectl set-timezone America/Sao_Paulo

Este comando executa exatamente a criação do link simbólico para o /etc/localtime conforme passo anterior.

Em resumo, esperamos que este artigo auxilie na verificação se o seu sistema Linux está preparado para o horário de verão 2018.

Até a próxima!