automatizar dpkg-reconfigure tzdata

60

Estoy usando Puppet para administrar un grupo de servidores Debian. Necesito cambiar la zona horaria de cada máquina en el clúster. La forma debian adecuada de hacer esto es usar dpkg-reconfigure tzdata. Pero solo puedo cambiarlo si uso el cuadro de diálogo. ¿Hay alguna forma de automatizar esto desde el shell para que pueda escribir un Exec para facilitar esto?

Si no, creo que la siguiente mejor forma sería tener una distribución de títeres /etc/timezoney /etc/localtimecon los datos correctos en todo el clúster.

Cualquier entrada apreciada!

Elrond
fuente
Tenga en cuenta que la respuesta actualmente aceptada ha sido incorrecta desde 2017 . La respuesta correcta es esta .
Dan Dascalescu

Respuestas:

92

Debe especificar la interfaz como "no interactiva" y guardará su configuración actual.

dpkg-reconfigure tomará la configuración actual del sistema como gospel, así que simplemente cambie su zona horaria como lo haría normalmente y ejecútela con el indicador no interactivo

por ejemplo, para que yo cambie a "Europa / Dublín" donde estoy:

# echo "Europe/Dublin" > /etc/timezone    
# dpkg-reconfigure -f noninteractive tzdata

Obviamente, esto le permite usar puppet / cfengine como quiera distribuir / etc / timezone también.

Philip Reynolds
fuente
55
Como alternativa a cambiar los permisos, puede hacer algo como esto. echo 'Europe/Dublin' | sudo tee /etc/timezone > /dev/null
Gorelativo
3
Para completar, otra forma de hacer eco a través de sudo essudo bash -c 'echo "Europe/Dublin" > /etc/timezone'
MartyMacGyver
66
¡Aviso! Las versiones más recientes de Ubuntu / Debian ya no funcionan de esta manera. El comportamiento cambió. bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1554806
gertvdijk
21

Dado que la respuesta aceptada ya no funciona (Debian Jessie, abril de 2017), un enfoque modificado desde el enlace de comentarios de @ gertvdijk parece hacer el trabajo ahora:

sudo ln -fs /usr/share/zoneinfo/Europe/Dublin /etc/localtime
sudo dpkg-reconfigure -f noninteractive tzdata
scruss
fuente
1
Esta debería ser la respuesta aceptada hoy en día.
Dan Dascalescu
Genial, esto funciona de
maravilla
5

Debería poder usar debconf-set-selections para preestablecer la configuración. Instale debconf-utils y ejecútelo debconf-get-selections | grep tzdataen un sistema configurado correctamente para averiguar qué configurarlo también.

Zoredache
fuente
1
Para cosas que están basadas en debconf, esto debería funcionar. Pero tzdata prefiere la configuración de / etc / timezone. Por lo tanto, esto no funciona en un sistema ya instalado (wheezy).
Elrond
3

También puede usar la receta del (ahora extinto) Puppet wiki ( archivo ) que reemplaza /etc/localtimecon el archivo zoneinfo apropiado de /usr/share/zoneinfo: -

class timezone {
    package { "tzdata":
        ensure => installed
    }
}

class timezone::central inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source => "file:///usr/share/zoneinfo/US/Central",
    }
}

class timezone::eastern inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source => "file:///usr/share/zoneinfo/US/Eastern"
    }
}

class timezone::pacific inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source => "file:///usr/share/zoneinfo/US/Pacific"
    }
}

class timezone::mountain inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source =>
             "file:///usr/share/zoneinfo/US/Mountain"
    }
}

No estoy seguro de si dpkg-reconfigure hace algo extra, pero he usado la receta anterior y funciona perfectamente.

phred
fuente
-3

Es muy simple y solo necesita escribir un comando y responder las preguntas simples.
entonces corre:

/usr/bin/tzselect
f4a65fa46s5fa
fuente
1
man tzselect: "Tenga en cuenta que tzselect en realidad no cambiará la zona horaria por usted. Utilice 'dpkg-reconfigure tzdata' para lograr esto".
spinkus