自动化dpkg-reconfigure tzdata


60

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

如果不是这样,我认为,未来最好的办法可能是让木偶分发/etc/timezone/etc/localtime与整个集群正确的数据。

任何输入表示赞赏!


需要注意的是目前公认的答案都是错的,因为2017年。正确的答案是这个
Dan Dascalescu

Answers:


92

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

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

例如,让我更改为“ Europe / Dublin”,我所在的位置:

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

显然,这使您可以使用puppet / cfengine来分配/ etc / timezone。


5
作为更改权限的替代方法,您可以执行以下操作。 echo 'Europe/Dublin' | sudo tee /etc/timezone > /dev/null
gorelative 2015年

3
为了完整性,通过sudo回显的另一种方式是sudo bash -c 'echo "Europe/Dublin" > /etc/timezone'
MartyMacGyver

6
小心!较新的Ubuntu / Debian版本不再能以这种方式工作。行为已改变。bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1554806
gertvdijk

21

由于已接受的答案不再起作用(Debian Jessie,2017年4月),因此从@gertvdijk的注释链接修改的方法现在似乎可以完成工作:

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

1
这应该是当今公认的答案。
Dan Dascalescu

太好了,这很有效
infomaniac

5

您应该能够使用debconf-set-selections来预设配置。安装debconf-utils并debconf-get-selections | grep tzdata在配置正确的系统上运行,以弄清楚对其进行设置的内容。


1
对于基于debconf的东西,这应该起作用。但是tzdata更喜欢/ etc / timezone中的配置。因此,这不适用于已安装(轻巧)的系统。
Elrond

3

您也可以使用从(现已解散)的配方木偶维基存档),它取代/etc/localtime与适当的时区信息文件/usr/share/zoneinfo: -

class timezone {
    package { "tzdata":
        ensure => installed
    }
}

class timezone::central inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source => "file:///usr/share/zoneinfo/US/Central",
    }
}

class timezone::eastern inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source => "file:///usr/share/zoneinfo/US/Eastern"
    }
}

class timezone::pacific inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source => "file:///usr/share/zoneinfo/US/Pacific"
    }
}

class timezone::mountain inherits timezone {
    file { "/etc/localtime":
        require => Package["tzdata"],
        source =>
             "file:///usr/share/zoneinfo/US/Mountain"
    }
}

我不确定dpkg-reconfigure是否还有其他功能,但是我使用了上面的配方,它可以完美地工作。


-3

它非常简单,只需要键入命令并回答简单的问题即可。
然后运行:

/usr/bin/tzselect

1
man tzselect:“请注意,tzselect实际上不会为您更改时区。使用'dpkg-reconfigure tzdata'可以实现这一点。”
spinkus 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.