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!