自动化 dpkg-reconfigure tzdata

66 debian puppet dpkg timezone debconf

我正在使用 puppet 来管理一组 debian 服务器。我需要更改集群上每台机器的时区。执行此操作的正确 debian 方法是使用dpkg-reconfigure tzdata. 但是如果我使用对话框,我似乎只能改变它。有什么方法可以从 shell 自动执行此操作,以便我可以编写一个 Exec 来简化此操作?

如果没有,我认为下一个最好的方法可能是让 puppet 分发/etc/timezone/etc/localtime在整个集群中使用正确的数据。

任何输入表示赞赏!

Phi*_*lds 97

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

dpkg-reconfigure 会将当前系统设置作为福音,因此只需按照正常方式更改时区并使用非交互式标志运行它

例如,让我更改为“欧洲/都柏林”,我所在的位置:

# echo "Europe/Dublin" > /etc/timezone    
# dpkg-reconfigure -f noninteractive tzdata
Run Code Online (Sandbox Code Playgroud)

显然,这允许您也可以像分发 /etc/timezone 一样使用 puppet/cfengine。

编辑:

在@gertvdijk 评论指向https://bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1554806和 @scruss回答之后,您可能必须在大多数现代发行版中这样做:

$ sudo ln -fs /usr/share/zoneinfo/Europe/Dublin /etc/localtime
$ sudo dpkg-reconfigure -f noninteractive tzdata
Run Code Online (Sandbox Code Playgroud)

  • 当心!较新的 Ubuntu/Debian 版本不再以这种方式工作。行为改变了。https://bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1554806 (8认同)
  • 作为更改权限的替代方法,您可以执行以下操作。`回声'欧洲/都柏林' | 须藤 tee /etc/timezone > /dev/null` (5认同)
  • 为了完整起见,另一种通过 sudo 回显的方法是`sudo bash -c 'echo "Europe/Dublin" > /etc/timezone'` (3认同)

小智 35

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

sudo ln -fs /usr/share/zoneinfo/Europe/Dublin /etc/localtime
sudo dpkg-reconfigure -f noninteractive tzdata
Run Code Online (Sandbox Code Playgroud)