自动执行dpkg-reconfigure tzdata

我使用puppetpipe理一个debian服务器集群。 我需要更改群集上每台机器的时区。 正确的debian方法是使用dpkg-reconfigure tzdata 。 但是,如果我使用对话框,我似乎只能改变它。 有没有办法从shell自动化这个,所以我可以写一个Exec来简化这个过程?

如果不是的话,我认为下一个最好的方法可能是让puppet在整个群集中分配正确的数据/etc/timezone/etc/localtime

任何input赞赏!

您需要将前端指定为“非交互式”,它将保存您当前的设置。

dpkg-reconfigure将把当前的系统设置作为福音,所以简单的改变你的时区就像你通常的方式一样,用非交互的标志运行它

例如,对于我来说,在我所在的地方换成“欧洲/都柏林”

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

显然,这可以让你使用puppet / cfengine来分配/ etc / timezone。

您应该可以使用debconf-set-selections来预设configuration。 安装debconf-utils并运行debconf-get-selections | grep tzdata debconf-get-selections | grep tzdata在一个正确configuration的系统上找出设置它的方法。

由于接受的答案不再有效(Debian Jessie,2017年4月),从@ gertvdijk的评论链接修改过的方法似乎现在可以完成这项工作:

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

您也可以使用(现已停用的) Puppet wiki ( 归档文件 )中的配方,将/etc/localtimereplace为/usr/share/zoneinfo相应的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" } } 

我不知道如果dpkg-reconfigure做了额外的事情,但是我已经使用了上面的配方,它完美的工作。

它非常简单,只需键入命令并回答简单的问题。
然后运行:

 /usr/bin/tzselect