Неперевод часов 2011

Материал из MediaWiki
Перейти к навигации Перейти к поиску

Суть проблемы

Как известно, в РФ отменён перевод времени и мы остаёмся на летнем времени навсегда

Ссылка на закон - 107-ФЗ от 03.06.2011. Также см. Постановление правительства N725 августа 2011 г..

При этом, все современные операционные системы автоматически переводят время по известным им правилам. И если вовремя не изменить эти правила, 30 октября время в этих ОС отстанет на час.

история вопроса на википедии

Осталось полтора месяца. Тик-так, тик-так

FAQ

В: У меня синхронизация времени по NTP, как это повлияет на перевод времени?

О: Никак. По NTP в принципе не передаётся информация о временных зонах и летнем времени. UTC время на вашем компе будет синхронизировано, а localtime всё равно отстанет на час.


В: Мне надо беспокоиться?

О: Более-менее популярный дистрибутив Linux? Ставьте вовремя обновления, и никаких проблем не увидите.


В: А как у этих? Ну, которые поклоняются Балмеру

О: Везде одно и то же, а в Антарктиде ещё и холодно. У них тоже обновление вышло.

Практика: меняем правила

Linux

За временные зоны и daylight saving в linux отвечает проект tzdata . Уже вышла версия 2011h, в которой нет перевода времени для РФ

Если обновление для дистрибутива ещё не вышло (например, rhel 4, 5, 6) - собираем пакет вручную. Это не трудно. Ставим старый src.rpm, подкладываем новые исходники в SOURCE, чуть правим .spec файл.... Ловкость рук и никакого мошенничества (см. приложение 1) :) Помещаем собранный пакет в репозиторий и погнали. Надеюсь, у вас есть puppet/chef/cfengine/spacewalk ? :D

В debian нужный пакет уже есть в testing, всё проще :)


Проверить есть ли в /etc/localtime перевод времени можно так:

Проблема есть:

# zdump -v /etc/localtime  | grep 2011
/etc/localtime  Sat Mar 26 22:59:59 2011 UTC = Sun Mar 27 01:59:59 2011 MSK isdst=0 gmtoff=10800
/etc/localtime  Sat Mar 26 23:00:00 2011 UTC = Sun Mar 27 03:00:00 2011 MSD isdst=1 gmtoff=14400
/etc/localtime  Sat Oct 29 22:59:59 2011 UTC = Sun Oct 30 02:59:59 2011 MSD isdst=1 gmtoff=14400
/etc/localtime  Sat Oct 29 23:00:00 2011 UTC = Sun Oct 30 02:00:00 2011 MSK isdst=0 gmtoff=10800

Проблемы нет:

# zdump -v /etc/localtime | grep 2011
/etc/localtime  Sat Mar 26 22:59:59 2011 UTC = Sun Mar 27 01:59:59 2011 MSK isdst=0 gmtoff=10800
/etc/localtime  Sat Mar 26 23:00:00 2011 UTC = Sun Mar 27 03:00:00 2011 MSK isdst=0 gmtoff=14400

В зависимости от версии zdump (?) вывод может незначительно отличаться

The Attachmate Group SLES (Suse Linux Enterprise Server)

Для клиентов имеющих доступ к restricted обновлениям выпущены пакеты для поддерживаемых версий SLES (10.3, 10.4, 11 и 11.1), причём для 11 ветки доступны также обновления временных зон java в виде отдельного пакета.

AIX

Тут ждёт разочарование. Правим переменную TZ в /etc/environment и перезагружаемся. Для Москвы TZ=MSK-4

Для Новосибирска TZ=NSK-7, при этом правила перевода, если они были настроены, удаляются.

В версии 6.1 и более новых, где можно использовать базы Olson, понадобится патч от IBM которого пока (на 23.09.2011) нет. Вариант ручной правки описанный выше пока является единственным применимым.

HP-UX

Правим /usr/lib/tztab (man tztab), перезагрузка не нужна.

Сейчас там

# Western Russia (Moscow) Time, Western Russia (Moscow) Daylight Savings
# Time
WST-3WSTDST
0 3 25-31 3  1983-2038 0   WSTDST-4
0 2 24-30 9  1983-1995 0   WST-3
0 2 25-31 10 1996-2038 0   WST-3 

Нужно, если я не ошибся,

# Western Russia (Moscow) Time, Western Russia (Moscow) Daylight Savings
# Time
WST-3WSTDST
0 3 25-31 3  1983-2038 0   WSTDST-4
0 2 24-30 9  1983-1995 0   WST-3
0 2 25-31 10 1996-2038 0   WSTDST-4

Важно: Так как мы правили файл вручную, следующее обновление не перезапишет его автоматом. Искать файл из патча нужно будет в /usr/newconfig

http://h30499.www3.hp.com/t5/General/2011-Russian-DST-change/td-p/4832301

Oracle Solaris 10

Выпущен патч 146471-04, исправляющий наши временные зоны. Если я не ошибаюсь, доступ к патчу есть только у имеющих поддержку Oracle Solaris. Ставится через <patchadd>. После установки нужно либо перезагрузить систему, либо (если стоит патч 142909-17) можно использовать <tzreload>. Патч 146471-04 не включает в себя обновление временных зон java.

Приложение 1: Сборка tzdata-2011j в дистрибутивах, основанных на RHEL 5

wget http://mirror.yandex.ru/centos/5.6/os/SRPMS/tzdata-2010l-1.el5.src.rpm
rpm -Uhv tzdata-2010l-1.el5.src.rpm
cd /usr/src/redhat/SOURCE
rm tzdata2010* tzcode2010*
wget ftp://elsie.nci.nih.gov/pub/tzcode2011i.tar.gz ftp://elsie.nci.nih.gov/pub/tzdata2011j.tar.gz
cd ../SPEC

Правим tzdata.spec:

[root@xymon1 SPECS]# diff tzdata.spec.orig tzdata.spec
3,5c3,5
< Version: 2010l
< %define tzdata_version 2010l
< %define tzcode_version 2010l
---
> Version: 2011j
> %define tzdata_version 2011j
>  %define tzcode_version 2011i


Ставим необходимые пакеты для сборки (потом можно удалить):

yum install rpm-build java-1.6.0-openjdk-devel gcc make
rpmbuild -ba tzdata.spec

Готово, в /usr/src/redhat/RPMS/<архитектура>/ лежат rpm'ки