21

I'm writing scripts to automate setting up new slicehost installations. In a perfect world, after I started the script, it would just run, with no attention from me. I have succeeded, with one exception.

How do I set the timezone, in a permanent (survive reboot) and sane (adjust for standard and daylight savings time, so no just forcing the date) ... manner that doesn't require input from me?

Currently, I'm using

 dpkg-reconfigure tzdata

This doesn't seem to have any way to force parameters into it. It demands user input.


EDIT: I'm editing here, rather than commenting, since comments don't seem to allow code blocks.

Here's the actual code I ended up with, based on Rudedog's comment below. I also noticed that this doesn't update /etc/timezone. I'm not certain who uses that, but in case anybody does, I'm setting that too.

TIMEZONE="America/Los_Angeles"      
echo $TIMEZONE > /etc/timezone                     
cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime   # This sets the time
Tom
  • 213

7 Answers7

19

You should be able to do this with

cp /usr/share/zoneinfo/America/Los_Angeles /etc/localtime

Substitute the appropriate timezone in the above command.

Rudedog
  • 732
3

On Ubuntu 12.04 the following did the trick for me:

# http://manpages.ubuntu.com/manpages/precise/man7/debconf.7.html
export DEBCONF_NONINTERACTIVE_SEEN=true DEBIAN_FRONTEND=noninteractive
echo "Europe/Berlin" > /etc/timezone
dpkg-reconfigure tzdata
Schlomo
  • 131
  • 1
3

Try this:

echo "Europe/London" > /etc/timezone
dpkg-reconfigure -f noninteractive tzdata
Amadu Bah
  • 207
2

Update /etc/localtime symlink to point to correct timezone in /usr/share/zoneinfo/

ln -sf /usr/share/zoneinfo/$(tzselect) /etc/localtime
brent
  • 3,521
1

Ran into this myself. Here's a complete config for how to do this right (it's an aggregate of comments in here and this question):

#Set time zone and time
echo "tzdata tzdata/Areas select Europe" | debconf-set-selections
echo "tzdata tzdata/Zones/Europe select London" | debconf-set-selections
TIMEZONE="Europe/London"
echo $TIMEZONE > /etc/timezone
cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime
/usr/sbin/ntpdate pool.ntp.org
Synchro
  • 3,339
  • 6
  • 30
  • 40
0

tzdata uses debconf to answer that question, so you need to prepopulate it. There's several ways to do this, the easiest is to preseed the answer during installation. Beyond that you can set up a default database for debconf to use, see the debconf(7) manpage for how do that.

TRS-80
  • 2,579
-2

Also make sure that ntpd is installed and running.

yum install ntpd
ntpdate pool.ntp.org
service ntpd start
Iraklis
  • 478