我正在使用 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
答案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