dpkg-reconfigure tzdata的非交互式方法
当我第一次安装一个Ubuntu服务器,我确定我aptitude install tzdata
,然后dpkg-reconfigure tzdata
以便我正确设置我的时区。
我正在尝试使用脚本自动化我的服务器设置,并注意到这种types的自动引发了一个扳手,因为它需要与用户干预的交互式会话。
有没有办法使用dpkg-reconfigure而不是交互式的?
我为你find了以下细节。
https://serverfault.com/a/84528
编辑:(从上面的链接复制和粘贴…)
您需要将前端指定为“非交互式”,它将保存您当前的设置。
dpkg-reconfigure将把当前的系统设置作为福音,所以简单的改变你的时区就像你通常的方式一样,用非交互的标志运行它
例如,对于我来说,在我所在的地方换成“欧洲/都柏林”
# echo "Europe/Dublin" > /etc/timezone # dpkg-reconfigure -f noninteractive tzdata
显然,这可以让你使用puppet / cfengine来分配/ etc / timezone。
sw水的答案不是如何正确完成的。 如果你想要无人看pipe/脚本化的dpkg软件包configuration,那么你想使用debconf preseeding机制。
在你的情况下,这意味着你必须做到以下几点:
-
设置以下环境variables以避免debconf试图询问用户的任何问题:
export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true
-
然后用下面的preseed.txt文件(或其他你想要的设置)预先设置debconf:
tzdata tzdata/Areas select Europe tzdata tzdata/Zones/Europe select Berlin
-
您通过运行以下设置上述预先选定的文件:
debconf-set-selections /your/preseed.txt
-
您现在可以通过
apt
安装tzdata(如果尚未安装),或运行dpkg-reconfigure
。 最后,tzdata将根据您在debconf预先定义的文件中指定的内容进行设置。
请记住,您可以使用debconf preseeding自动化更多。 例如在我的种子,我总是设置:
locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8 locales locales/default_environment_locale select en_US.UTF-8
您可以通过运行debconf-get-selections
来检查当前系统的debconf设置。 输出应该给你一些关于你能够使用debconf preseeding自动化的系统configuration的一些想法。
在16.04有一个错误( https://bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1554806 ,在写这个答案的时候没有修复),导致/etc/timezone
的内容是在运行dpkg-reconfigure -f noninteractive tzdata
时用旧值覆盖。 修复如下(从上面的错误报告):
$ sudo ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime $ sudo dpkg-reconfigure --frontend noninteractive tzdata Current default time zone: 'America/New_York' Local time is now: Mon Feb 20 07:30:33 EST 2017. Universal Time is now: Mon Feb 20 12:30:33 UTC 2017. $ cat /etc/timezone America/New_York
无需手动更改/etc/timezone
的内容。 这在Ubuntu 16.04.2 LTS上适用于我。
推进乔什的回答; 设置debconf db值并在运行之前删除/etc/{localtime,timezone}
dpkg-reconfigure
: –
$ echo "tzdata tzdata/Areas select Europe" > some/file.txt $ echo "tzdata tzdata/Zones/Europe select Berlin" >> some/file.txt $ sudo debconf-set-selections some/file.txt $ sudo rm /etc/timezone $ sudo rm /etc/localtime $ sudo dpkg-reconfigure -f noninteractive tzdata Current default time zone: 'Europe/Berlin' Local time is now: Thu Sep 1 17:13:16 CEST 2016. Universal Time is now: Thu Sep 1 15:13:16 UTC 2016.
这种方法是已知的工作: –
- Ubunty Trusty(14.04.5 LTS)