System administration
23 November 2011

Ручное обновление базы данных часовых поясов в старых дистрибутивах Линукс

From Sandbox
Все может быть, что данная заметка пригодится тем суркам-администраторам, которые до сих пор (о, ужас!) не перевели системные часы своих серверов, позволив умным машинам установить зимнее время. Да, конечно, мы-то с Вами к таким не относимся и вовремя пропатчили свою любимую ОС, под которой крутится успешно не один сайт.

Но все это касается операционных систем свежих версий, именно для них вовремя появились соответствующие обновления. Но что же делать с динозаврами, с теми машинами, которые испытанно, годами, служат нам верой и правдой, а мы так и не сподобились обновить на них ОС?

Обновим на них базу данных временных поясов вручную.
Это несложно и именно об этом пойдет речь в этой заметке.

Ручное обновление приводится на примере дистрибутива Линукс Fedora 8 (думаю, пример будет также применим и к дистрибутивам Red Hat и CentOS). Именно под этой системой трудится веб-сервер на одной из машин, за которой я присматриваю.

Итак, логинимся под обыкновенным пользователем по SSH и смотрим текущее время (оно берется из файла /etc/localtime) и, сразу же, текущий установленный часовой пояс:

[user@server ~]$ date
Fri Nov 18 18:59:57 MSK 2011
[user@server ~]$ cat /etc/sysconfig/clock | grep ZONE
ZONE="Europe/Moscow"

Здесь мы машинально смотрим на свои «соломенные», видим отставание на один час и тут же проверяем был ли осуществлен переход на зимнее время наверняка:

[user@server ~]$ zdump -v /etc/localtime | grep 2011
Europe/Moscow  Sat Mar 26 22:59:59 2011 UTC = Sun Mar 27 01:59:59 2011 MSK isdst=0 gmtoff=10800
Europe/Moscow  Sat Mar 26 23:00:00 2011 UTC = Sun Mar 27 03:00:00 2011 MSD isdst=1 gmtoff=14400
Europe/Moscow  Sat Oct 29 22:59:59 2011 UTC = Sun Oct 30 02:59:59 2011 MSD isdst=1 gmtoff=14400
Europe/Moscow  Sat Oct 29 23:00:00 2011 UTC = Sun Oct 30 02:00:00 2011 MSK isdst=0 gmtoff=10800

Строки с октябрьской датой подтверждают факт ненужного теперь перевода на зимнее время (подробный пост про это сделал хабрапользователь GreyCat).

Чтобы поправить ситуацию идем на сайт IANA (The Internet Assigned Numbers Authority) — именно там теперь публикуются обновленные файлы The Time Zone Database (базы данных временных поясов известную также среди сисадминов как tz database или zoneinfo database) и скачиваем файл tzdata, содержащего последние обновления. Для скачивания удобней воспользоваться утилитами наподобие wget или curl (что найдется под рукой), а не браузером:

[user@server ~]$ wget http://www.iana.org/time-zones/repository/releases/tzdata2011n.tar.gz
или
[user@server ~]$ curl -O www.iana.org/time-zones/repository/releases/tzdata2011n.tar.gz

Тут же распакуем содержимое скачанного файла tzdata (можно в тот же каталог, куда скачали):

[user@server ~]$ tar xzf tzdata2011n.tar.gz

И, наконец, самое главное.
Компилируем файл временных поясов europe в бинарный вид и тут же делаем ключевой файл /etc/localtime символической ссылкой на соответствующий поясу файл (в данном случае пояс Europe/Moscow), иначе система не узнает о том, что мы обновили содержимое базы.

Данная команда потребует прав суперпользователя, поэтому исполнять ее нужно от имени root:

[root@server user]$ zic europe
[root@server user]$ ln -sf --suffix=.backup /usr/share/zoneinfo/Europe/Moscow /etc/localtime

На этом — всё! Смотрим время, теперь выводится все правильно:

[root@server user]$ date
Fri Nov 18 20:14:37 MSK 2011

+15
25k 75
Comments 34
Top of the day