automate dpkg-reconfigure tzdata

41,429

Solution 1

You need to specify the frontend as `noninteractive' and it will save your current settings.

dpkg-reconfigure will take the current system settings as gospel, so simply change your timezone the way you would normally and run it with the non-interactive flag

e.g. for me to change to "Europe/Dublin" where I am:

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

Obviously this allows you to use puppet/cfengine as you like to distribute /etc/timezone also.

EDIT:

after @gertvdijk comment pointing to https://bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1554806 and @scruss answer you will probably have to do it like this in most modern distributions:

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

Solution 2

Since the accepted answer no longer works (Debian Jessie, April 2017), an approach modified from @gertvdijk's comment link appears to do the job now:

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

Solution 3

You should be able to use debconf-set-selections to preset the configuration. Install debconf-utils and run debconf-get-selections | grep tzdata on a properly configured system to figure out what to set it too.

Solution 4

You can also use the recipe from the (now defunct) Puppet wiki (archive) which replaces /etc/localtime with the appropriate zoneinfo file from /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"
    }
}

I'm not sure if dpkg-reconfigure does anything extra, but I have used the above recipe and it works perfectly.

Share:
41,429

Related videos on Youtube

Elrond
Author by

Elrond

Updated on September 17, 2022

Comments

  • Elrond
    Elrond over 1 year

    I'm using puppet to admin a cluster of debian servers. I need to change the timezone of each machine on the cluster. The proper debian way to do this is to use dpkg-reconfigure tzdata. But I can only seem to change it if I use the dialog. Is there some way to automate this from the shell so I can just write an Exec to make this easy?

    If not, I think the next best way would probably be to have puppet distribute /etc/timezone and /etc/localtime with the correct data across the cluster.

    Any input appreciated!

    • Dan Dascalescu
      Dan Dascalescu about 5 years
      Note that the currently accepted answer has been wrong since 2017. The correct answer is this one.
  • Elrond
    Elrond almost 10 years
    For things that are debconf based, this should work. But tzdata prefers the config from /etc/timezone. So this does not work on an already installed (wheezy) system.
  • spinkus
    spinkus over 9 years
    man tzselect: "Note that tzselect will not actually change the timezone for you. Use 'dpkg-reconfigure tzdata' to achieve this."
  • NDBoost
    NDBoost over 9 years
    as an alternative to changing permissions, you could do something like this. echo 'Europe/Dublin' | sudo tee /etc/timezone > /dev/null
  • MartyMacGyver
    MartyMacGyver over 8 years
    For completeness, another way to echo via sudo is sudo bash -c 'echo "Europe/Dublin" > /etc/timezone'
  • gertvdijk
    gertvdijk over 7 years
    Heads up! Newer Ubuntu/Debian versions don't work this way anymore. Behaviour changed. bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1554806