sábado, 28 de noviembre de 2009

Controlando el horario de verano en Solaris

Solaris 10 viene configurado con cambios de horario de verano automáticos (daylight saving time), basados en archivos de configuración predefinidos con fecha y hora del cambio para cada región.

Puede ocurrir, como ya pasó este año en Brasil, que el gobierno decida adelantar dicha fecha y entonces eso puede darnos algunos problemas si nos toma desprevenidos. Dependiendo del negocio, algunos sistemas en producción no deben alterar el horario, otros en cambio, deben hacerlo estrictamente según la normativa oficial.

Para tener el control, tenemos que verificar la configuración en Solaris y ver que está de acuerdo con nuestros intereses.


COMO ALTERAR LA CONFIGURACION DEL HORARIO DE VERANO


Paso 1 - Verificar la zona horaria del servidor

Siempre logueados como root, leemos el archivo TIMEZONE y buscamos el valor de la variable TZ al final del archivo:

cat /etc/TIMEZONE

TZ=Brazil/East


Paso 2 - Hacer un backup de la configuración actual (por si acaso)

cd /usr/share/lib/zoneinfo
cd Brazil (o la region que corresponda según el Paso 1)
cp East East.backup

Tal vez encontremos un archivo .zic, con alguna configuración que alguien ya hizo, es aconsejable darle una ojeada y ver si nos sirve para el paso 4.


Paso 3 - Verificar configuración del horario de verano, según el TZ encontrado en el Paso 1

zdump -v Brazil/East | grep 20

Encontraremos varias líneas del tipo:

Brazil/East Sat Nov 28 18:31:41 2009 UTC = Sat Nov 28 15:31:41 2009 BRT isdst=0

Para cada año aparece la correspondencia entre el horario universal (UTC) y el de nuestra región. El ultimo parámetro indica si se trata de horario de verano (isdst=1) o no (isdst=0), por tanto debe haber una diferencia de una hora menos cuando isdst=1.
O sea que si vivimos en UMT-3, en el horario de verano vamos a tener UMT-2.

Verificar se coincide con el cambio oficial programado para el corriente año.


Paso 4 - Crear un archivo .zic con las alteraciones deseadas

Crear un nuevo archivo llamado config_dst.zic con el siguiente contenido:

Rule Brazil 2009 only - Oct 11 00:00 1 S
Rule Brazil 2009 only - Oct 20 00:00 0 -

Zone Brazil/East -3:00 Brazil BR%sT

(fin del archivo)

En el paso 2 decíamos que tal vez ya exista un archivo .zic en el directorio, en ese caso podemos agregar nuestras líneas arriba del todo, así no perdemos el resto de las configuraciones. Cuidado que no existan otras definiciones para el mismo año, porque pueden entrar en conflicto.

La última línea indica el nombre del archivo de configuración, y en que directorio se encuentra. También define el indicador de horario de verano que veremos cuando usemos el comando date. Este será BRST en horario de verano, y BRT en horario normal.


Paso 5 - Aplicar la nueva configuración con el comando zic

zic config_dst.zic


Paso 6 - Esperar la fecha prevista y verificar

Con el comando date, verificaremos que el horario es el correcto y el tipo de horario es BRST, tal como lo configuramos.