Entorno de configuración
Este artículo fue elaborado utilizando la distribución Slackware en su versión 15.0. Muchas distribuciones modernas de Linux emplean el comando timedatectl para configuraciones de fecha, hora y zona horaria; sin embargo, este comando no será abordado en este documento. Slackware utiliza comandos más tradicionales, que deberían funcionar correctamente en la mayoría de las distribuciones Linux actuales.
Introducción
La zona horaria de Linux se define a través del archivo /etc/localtime, pero es posible configurarla tanto globalmente como para un usuario específico utilizando la variable de entorno TZ. Para usuarios individuales, puede definirse en el archivo ~/.bashrc, mientras que para todo el sistema, puede configurarse en /etc/profile o, en algunas distribuciones, en /etc/environment.
El comando date se utiliza para mostrar o configurar manualmente la fecha y hora en Linux, mientras que el comando ntpdate utiliza el protocolo NTP para realizar una sincronización puntual del horario con otros ordenadores en la red a través del puerto 123/UDP. Por otro lado, el daemon ntpd se encarga de mantener la sincronización continua del reloj del sistema con servidores NTP.
UTC vs Localtime
UTC es el estándar de hora global, no considera zonas horarias ni horario de verano, y la misma hora UTC se utiliza en cualquier lugar del mundo. Localtime es la zona horaria específica de la ubicación donde se está configurando el sistema.
Zona horaria
La zona horaria en Linux se define utilizando la base de datos de zonas horarias proporcionada y mantenida por IANA. En Slackware, el paquete que contiene esta lista es glibc-zoneinfo, y la información de las zonas se organiza en el directorio /usr/share/zoneinfo/ por regiones (como "America", "Europe", "Asia").
$ bash
ls /usr/share/zoneinfo/
Dentro de las carpetas de regiones están los archivos de zona con el nombre de ciudades (como "Sao_Paulo", "Buenos_Aires", "Los_Angeles"). Para visualizar una zona horaria específica, utilice el comando:
$ bash
zdump /usr/share/zoneinfo/America/Los_Angeles
Para cambiar la zona horaria:
# bash
ln -sf /usr/share/zoneinfo/America/Buenos_Aires /etc/localtime
Opcionalmente, puede utilizarse el comando timeconfig en Slackware para crear la configuración anterior. Elija la opción "NO" y luego encuentre su localidad en la lista proporcionada. Recuerde utilizar el usuario root.
Pruebe con el comando date para verificar si se ha aplicado la nueva zona horaria. Si el cambio no funciona, puede ser que la zona horaria esté siendo definida por la variable de entorno TZ. Esta variable tiene prioridad, permitiendo definir zonas horarias diferentes por usuario. Para manipular la variable en tiempo de ejecución, utilice:
# bash
# Verificar el valor de TZ echo $TZ America/Buenos_Aires # Eliminar el valor de TZ unset TZ # Cambiar el valor de TZ export TZ=America/Sao_Paulo
Para que el cambio sea permanente, la variable TZ debe configurarse en el archivo ~/.bashrc. Agregue la siguiente línea:
~/.bashrc
export TZ=America/Buenos_Aires
Esta configuración es individual para el usuario. Para recargar el archivo .bashrc con los cambios realizados:
$ bash
. ~/.bashrc
# o
source ~/.bashrc
Para usar la variable a nivel de sistema, puede configurarse en /etc/profile utilizando la misma línea del archivo bashrc. Alternativamente, puede establecerse en /etc/environment, pero en este archivo no debe incluirse el comando export.
/etc/environment
TZ=America/Sao_Paulo
Sincronizando el reloj con un servidor NTP remoto
Para actualizar la hora a través de un servidor en internet, es necesario contar con el paquete ntp, el cual se puede instalar en Slackware utilizando el comando slackpkg.
# bash
# Sincronizando la hora ntpdate pool.ntp.org 5 May 00:41:05 ntpdate[3132]: step time server 201.49.148.135 offset 6.872209 sec
En la mayoría de los casos, se recomienda utilizar pool.ntp.org para encontrar un servidor NTP (o 0.pool.ntp.org, 1.pool.ntp.org, etc., si necesita múltiples servidores). El sistema intentará seleccionar automáticamente los servidores más cercanos a usted.
Al ejecutar el comando ntpdate, la hora se actualizará en el momento de la ejecución. Para mantener el reloj sincronizado, utilice el servicio ntpd. Primero, edite el archivo de configuración /etc/ntp.conf y descomente las líneas como se muestra a continuación:
/etc/ntp.conf
# Servidores NTP, liste uno o más para sincronización
server 0.pool.ntp.org iburst
server 1.pool.ntp.org iburst
server 2.pool.ntp.org iburst
server 3.pool.ntp.org iburst
Luego, otorgue permiso de ejecución al script /etc/rc.d/rc.ntpd e inicie el servicio con los siguientes comandos:
# Shell
# Otorgue permiso de ejecución chmod +x /etc/rc.d/rc.ntpd # Inicie el servicio /etc/rc.d/rc.ntpd start
Para realizar una prueba, cambie manualmente la fecha utilizando el comando date como se demostró anteriormente. Tenga en cuenta que la hora no se corregirá de inmediato; existe un intervalo de verificación predeterminado que varía entre 64 segundos (mínimo) y 1024 segundos (máximo).
Estos valores pueden ajustarse configurando los parámetros maxpoll y minpoll. Para más información, consulte el manual: man ntp.conf.
Después de cambiar la fecha, espere al menos 17 minutos (1024 segundos) para que la hora se corrija automáticamente. Alternativamente, puede reiniciar manualmente el servicio para forzar la corrección inmediata utilizando el siguiente comando:
# Shell
# Reiniciando el servicio
/etc/rc.d/rc.ntpd restart
Reloj del hardware
El reloj del hardware es un dispositivo electrónico que mide el paso del tiempo, también conocido como RTC. Es la hora que se muestra en la BIOS o UEFI de los ordenadores.
Para evitar inconsistencias en sistemas de arranque dual (dual boot) con diferentes instalaciones de Linux en el mismo ordenador, es necesario configurar correctamente el reloj del hardware, definiendo si utiliza la hora local (localtime) o basada en UTC.
Este procedimiento debe realizarse solo una vez para garantizar que la zona horaria esté configurada correctamente. A continuación, se muestra cómo consultar el reloj del hardware y cómo definir la zona horaria:
# Shell
# Consultar la hora del reloj del hardware
hwclock --show
# Shell
# Definir la zona horaria como local hwclock --systohc --localtime # o hwclock -w -l
# Shell
# Definir la hora basada en UTC hwclock --systohc --utc # o hwclock -w -u
Referencias
La fuente principal para este artículo fue el manual (man page) disponible en Slackware Linux.