miércoles, 19 de septiembre de 2007

Compilación e Instalación de Zona de Tiempo para linux para adaptar el cambio del nuevo Huso Horario de Venezuela a GMT-4:30 Fedora - Red Hat

Elaborado por: Ing. Ender Alexander Mujica Díaz (emujica AT cantv.net)

Nota: Este procedimiento fue probado en una maquina con Fedora Core 6, sin embargo, debe ser compatible con todos los sistemas que manejen el formato tzfile para la definición de zonas de tiempo.

Modificar y compilar una zona de tiempo:

Fedora y muchas otras distribuciones de Linux y BSD incluyen archivos de zonas de tiempo en el directorio /usr/share/zoneinfo, el cual es parte del paquete libc6. En Fedora Core 6 de la maquina instalada donde se realizó y probó este procedimiento se encontraba instalada la librería glibc versión 2.5-3 (glibc-2.5-3).

1.- Validar que esté instalado el paquete de utilidades y definiciones de zona de tiempo:

$rpm -qa grep tzdata

2.- Si no se encuentra instalado proceda a bajarlo. Puede usar yum en el caso de Fedora

$ yum install tzdata*

3.- Descargar las fuentes de la libreria glibc-2.5-3 de uno de los mirror de fedora (http://mirror.aarnet.edu.au/pub/fedora/linux/core/6/source/SRPMS/glibc-2.5-3.src.rpm). Por defecto no vienen instaladas.

4.- Validar si está creado el directorio /usr/src/redhat/SOURCES/ de lo contrario proceder a crearlo.

$ mkdir /usr/src/redhat/SOURCES/

5.- Instalar las fuentes de la librería:

$ rpm -Uvh glibc-2.5-3.src.rpm

6.- Esta se quedará instalada en el directorio /usr/src/redhat/SOURCES/ y en el encontrará archivo glibc-2.5-20061008T1257.tar.bz2

7.- Ingresar al directorio /usr/src/redhat/SOURCES/

$ cd sr/src/redhat/SOURCES/

8.- Descomprimir el archivo glibc-2.5-20061008T1257.tar.bz2:

$tar xvfj glibc-2.5-20061008T1257.tar.bz2

9.- Ingresar al directorio timezone dentro del directorio glibc-2.5-20061008T1257 creado al descomprimirse

$cd glibc-2.5-20061008T1257/timezone

10.- Copiar el archivo "southamerica" a al directorio /tmp, en donde se realizarán los cambios al archivo y se compilará.

$cp southamerica /tmp/

11.-Ingresar al directorio /tmp

$cd /tmp

12.- Editar el archivo "southamerica"

$ vi southamerica

13.- Buscar a la etiqueta #Venezuela y debajo de ella cambiar la línea:

-4:00 - VET

Por estas líneas:

-4:00 - VET 2007 Sep 22

-4:30 - VET

14.- La definición de la zona America/Caracas deberá quedar así:

# Venezuela

# Zone NAME GMTOFF RULES FORMAT [UNTIL]

Zone America/Caracas -4:27:44 - LMT 1890

-4:27:40 - CMT 1912 Feb 12 # Caracas Mean Time?

-4:30 - VET 1965 # Venezuela Time

-4:00 - VET 2007 Sep 23

-4:30 - VET

15.- Compilar el archivo de zonas para Suramérica para ello ejecutar el comando:

$/usr/sbin/zic -d /tmp /tmp/southamerica

16.- Esto generará los siguientes directorios dentro de /tmp

America/ Atlantic/ Pacific/

17.- Ejecutar el siguiente comando para ver la definición de la zona para Caracas.

$zdump -v /tmp/America/Caracas

18.- Aparecerán todas las definiciones de horario que se han tenido para Venezuela a partir de 1901 y la que se ha modificado siguiendo este procedimiento:

/tmp/America/Caracas Fri Dec 13 20:45:52 1901 UTC = Fri Dec 13 16:18:12 1901 VET isdst=0 gmtoff=-16060

/tmp/America/Caracas Sat Dec 14 20:45:52 1901 UTC = Sat Dec 14 16:18:12 1901 VET isdst=0 gmtoff=-16060

/tmp/America/Caracas Mon Feb 12 04:27:39 1912 UTC = Sun Feb 11 23:59:59 1912 VET isdst=0 gmtoff=-16060

/tmp/America/Caracas Mon Feb 12 04:27:40 1912 UTC = Sun Feb 11 23:57:40 1912 VET isdst=0 gmtoff=-16200

/tmp/America/Caracas Fri Jan 1 04:29:59 1965 UTC = Thu Dec 31 23:59:59 1964 VET isdst=0 gmtoff=-16200

/tmp/America/Caracas Fri Jan 1 04:30:00 1965 UTC = Fri Jan 1 00:30:00 1965 VET isdst=0 gmtoff=-14400

/tmp/America/Caracas Sun Sep 23 03:59:59 2007 UTC = Sat Sep 22 23:59:59 2007 VET isdst=0 gmtoff=-14400

/tmp/America/Caracas Sun Sep 23 04:00:00 2007 UTC = Sat Sep 22 23:30:00 2007 VET isdst=0 gmtoff=-16200

/tmp/America/Caracas Mon Jan 18 03:14:07 2038 UTC = Sun Jan 17 22:44:07 2038 VET isdst=0 gmtoff=-16200

/tmp/America/Caracas Tue Jan 19 03:14:07 2038 UTC = Mon Jan 18 22:44:07 2038 VET isdst=0 gmtoff=-16200



19.- Encontrará dos definiciones para el año 2007.

/tmp/America/Caracas Sun Sep 23 03:59:59 2007 UTC = Sat Sep 22 23:59:59 2007 VET isdst=0 gmtoff=-14400

/tmp/America/Caracas Sun Sep 23 04:00:00 2007 UTC = Sat Sep 22 23:30:00 2007 VET isdst=0 gmtoff=-16200

En ellas se puede apreciar lo siguiente:

Sat Sep 22 23:59:59 2007 VET isdst=0 gmtoff=-14400, lo cual significa que se usará GMT-4 hasta el 22/09/2007 a las 23:59:59

Sat Sep 22 23:30:00 2007 VET isdst=0 gmtoff=-16200, lo cual significa que luego cambiará a GMT-4:30 y moverá la hora a las 23:30:00 transcurrido un segundo después.


Instalación de Nueva Zona ya compilada:

1.- Validar que la definición de zona de tiempo previamente configurada sea Venezuela/Caracas (VET) en /etc/localtime.

$zdump -v /etc/localtime

/etc/localtime Fri Dec 13 20:45:52 1901 UTC = Fri Dec 13 16:18:12 1901 VET isdst=0 gmtoff=-16060

/etc/localtime Sat Dec 14 20:45:52 1901 UTC = Sat Dec 14 16:18:12 1901 VET isdst=0 gmtoff=-16060

/etc/localtime Mon Feb 12 04:27:39 1912 UTC = Sun Feb 11 23:59:59 1912 VET isdst=0 gmtoff=-16060

/etc/localtime Mon Feb 12 04:27:40 1912 UTC = Sun Feb 11 23:57:40 1912 VET isdst=0 gmtoff=-16200

/etc/localtime Fri Jan 1 04:29:59 1965 UTC = Thu Dec 31 23:59:59 1964 VET isdst=0 gmtoff=-16200

/etc/localtime Fri Jan 1 04:30:00 1965 UTC = Fri Jan 1 00:30:00 1965 VET isdst=0 gmtoff=-14400

/etc/localtime Mon Jan 18 03:14:07 2038 UTC = Sun Jan 17 23:14:07 2038 VET isdst=0 gmtoff=-14400

/etc/localtime Tue Jan 19 03:14:07 2038 UTC = Mon Jan 18 23:14:07 2038 VET isdst=0 gmtoff=-14400

2.- Realizar un respaldo del archivo de zona de tiempo “Caracas” previamente existente, ubicado en el directorio /usr/share/zoneinfo/America a /tmp.

3.- Copiar el nuevo archivo de zona de tiempo “Caracas” en el directorio /usr/share/zoneinfo/America

$cp /tmp//America/Caracas /usr/share/zoneinfo/America/

4.- Actualizar la zona de tiempo actual que se ubica encuentra configurada en /etc/localtime, en este caso "Venezuela/Caracas" con el siguiente comando:

$tzdata-update Venezuela/Caracas

5.- Validar que la nueva definición esté instalada después de aplicar la actualización de la zona de tiempo.

$zdump -v /etc/localtime

/etc/localtime Fri Dec 13 20:45:52 1901 UTC = Fri Dec 13 16:18:12 1901 VET isdst=0 gmtoff=-16060

/etc/localtime Sat Dec 14 20:45:52 1901 UTC = Sat Dec 14 16:18:12 1901 VET isdst=0 gmtoff=-16060

/etc/localtime Mon Feb 12 04:27:39 1912 UTC = Sun Feb 11 23:59:59 1912 VET isdst=0 gmtoff=-16060

/etc/localtime Mon Feb 12 04:27:40 1912 UTC = Sun Feb 11 23:57:40 1912 VET isdst=0 gmtoff=-16200

/etc/localtime Fri Jan 1 04:29:59 1965 UTC = Thu Dec 31 23:59:59 1964 VET isdst=0 gmtoff=-16200

/etc/localtime Fri Jan 1 04:30:00 1965 UTC = Fri Jan 1 00:30:00 1965 VET isdst=0 gmtoff=-14400

/etc/localtime Sun Sep 23 03:59:59 2007 UTC = Sat Sep 22 23:59:59 2007 VET isdst=0 gmtoff=-14400

/etc/localtime Sun Sep 23 04:00:00 2007 UTC = Sat Sep 22 23:30:00 2007 VET isdst=0 gmtoff=-16200

/etc/localtime Mon Jan 18 03:14:07 2038 UTC = Sun Jan 17 22:44:07 2038 VET isdst=0 gmtoff=-16200

/etc/localtime Tue Jan 19 03:14:07 2038 UTC = Mon Jan 18 22:44:07 2038 VET isdst=0 gmtoff=-16200

6.- Finalmente, sólo quedará esperar a que llegué el día y la hora para que la maquina hará el resto del trabajo en función de la definición.

Nota: No deberá preocuparse por cambiar la hora de la maquina.



Distribución del archivo de zona de tiempo para Venezuela/Caracas:

1.- Si quiere aplicar el archivo de tiempo modificado para Venezuela/Caracas a otras maquinas con distribuciones de Linux o BSD redistribuir no será necesario que tenga que compilarlo nuevamente en cada una de ellas, sólo tiene que copiarlo a la maquina destino y seguir los pasos 1 a 6 de la sección anterior.

Pruebas a realizar antes de que llegue el momento de realizar el cambio de horario oficial.

Si quiere realizar una prueba de concepto y validación en una maquina que no se encuentre en un ambiente de producción puede adelantar el cambio y crear un archivo de zona de tiempo con una fecha y hora diferente a la establecida compilarlo e instalarlo según lo indicado en las secciones anteriores. Para ello debe hacer lo siguiente:

1.- En el punto 13 de la sección “Modificar y compilar una zona de tiempo”. Buscar a la etiqueta #Venezuela y debajo de ella cambiar la línea:

-4:00 - VET

Por estas líneas:

-4:00 - VET 2007 Mes Dia hh:mm:seg

-4:30 - VET

2- La definición de la zona America/Caracas deberá quedar así si el cambio, por ejemplo quieres que se realice a las 11:29:59 el día 19 de Septiembre de 2007

# Venezuela

# Zone NAME GMTOFF RULES FORMAT [UNTIL]

Zone America/Caracas -4:27:44 - LMT 1890

-4:27:40 - CMT 1912 Feb 12 # Caracas Mean Time?

-4:30 - VET 1965 # Venezuela Time

-4:00 - VET 2007 Sep 19 11:29:59

-4:30 - VET

3.- Luego deberá continuar con los pasos 14 a 19 de la misma sección y finalmente aplicar lo indicado en la sección “Instalación de Nueva Zona ya compilada” con la diferencia de que la fecha y hora del cambio se aplicaran según lo que haya indicado en el punto 1 se esta sección.



Anexos:

Links de interés:

http://www.redhat.com/support/resources/faqs/dst/

http://www.linuxquestions.org/questions/showthread.php?t=373263

http://mirror.aarnet.edu.au/pub/fedora/linux/core/6/source/SRPMS/

http://wiki.debian.org/TimeZoneChanges

Mayor detalle puede encontrarlo en el Manual del compilador de zona de tiempo “zic”:

$ man zic

Nota Final: Es posible que se requieran modificaciones menores a este documento si desea aplicar la compilación e instalación en otra distribución diferente a Fedora o RedHat.

No hay comentarios: