自动化 dpkg-reconfigure tzdata

自动化 dpkg-reconfigure tzdata

我正在使用 puppet 来管理一组 Debian 服务器。我需要更改集群中每台机器的时区。正确的 Debian 方法是使用dpkg-reconfigure tzdata。但我似乎只能在使用对话框时才能更改它。有没有办法从 shell 中自动执行此操作,这样我就可以编写一个 Exec 来简化此操作?

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

任何意见均感激不尽!

答案1

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

dpkg-reconfigure 将把当前系统设置视为福音,因此只需像平常一样更改时区,然后使用非交互式标志运行它

例如,我需要将我所在的位置改为“Europe/Dublin”:

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

显然,这也允许您使用 puppet/cfengine 随意分发 /etc/timezone。

编辑:

在 @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

答案2

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

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

答案3

你应该能够使用debconf-设置-选择预设配置。安装 debconf-utils 并debconf-get-selections | grep tzdata在正确配置的系统上运行,以找出要设置的内容。

答案4

sudo EDITOR='sed -Ei "
    s|tzdata/Areas=.+|tzdata/Areas=\"Asia\"|;
    s|tzdata/Zones/Asia=.+|tzdata/Zones/Asia=\"Shanghai\"|
    "' dpkg-reconfigure -f editor tzdata

相关答案:如何在 Debian/Ubuntu 上以非交互方式设置语言环境?

相关内容