Но все это касается операционных систем свежих версий, именно для них вовремя появились соответствующие обновления. Но что же делать с динозаврами, с теми машинами, которые испытанно, годами, служат нам верой и правдой, а мы так и не сподобились обновить на них ОС?
Обновим на них базу данных временных поясов вручную.
Это несложно и именно об этом пойдет речь в этой заметке.
Ручное обновление приводится на примере дистрибутива Линукс 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

