web-dev-qa-db-fra.com

automatiser dpkg-reconfigure tzdata

J'utilise marionnette pour administrer un cluster de serveurs Debian. J'ai besoin de modifier le fuseau horaire de chaque machine du cluster. La bonne façon pour Debian de le faire est d'utiliser dpkg-reconfigure tzdata. Mais je ne peux le changer que si j'utilise la boîte de dialogue. Existe-t-il un moyen d'automatiser cela à partir du Shell afin que je puisse simplement écrire un Exec pour rendre cela facile?

Sinon, je pense que la meilleure solution serait probablement de faire distribuer les marionnettes /etc/timezone et /etc/localtime avec les données correctes sur l'ensemble du cluster.

Toute contribution appréciée!

60
razor

Vous devez spécifier le frontend comme "non interactif" et il enregistrera vos paramètres actuels.

dpkg-reconfigure prendra les paramètres actuels du système comme un évangile, alors changez simplement votre fuseau horaire comme vous le feriez normalement et exécutez-le avec l'indicateur non interactif

par exemple. pour moi de changer pour "Europe/Dublin" où je suis:

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

Évidemment, cela vous permet d'utiliser également marionnette/cfengine comme vous le souhaitez pour distribuer/etc/timezone.

93
Philip Reynolds

Étant donné que le réponse acceptée ne fonctionne plus (Debian Jessie, avril 2017), une approche modifiée du lien commentaire de @ gertvdijk semble faire le travail maintenant:

Sudo ln -fs /usr/share/zoneinfo/Europe/Dublin /etc/localtime
Sudo dpkg-reconfigure -f noninteractive tzdata
24
scruss

Vous devriez pouvoir utiliser debconf-set-selections pour prédéfinir la configuration. Installez debconf-utils et exécutez debconf-get-selections | grep tzdata sur un système correctement configuré pour déterminer ce qu'il faut aussi régler.

5
Zoredache

Vous pouvez également utiliser la recette du (maintenant disparu) Puppet wiki ( archive ) qui remplace /etc/localtime avec le fichier zoneinfo approprié 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"
    }
}

Je ne sais pas si dpkg-reconfigure fait quelque chose de plus, mais j'ai utilisé la recette ci-dessus et cela fonctionne parfaitement.

3
phred