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)