Неперевод часов 2011
Суть проблемы
Как известно, в РФ отменён перевод времени и мы остаёмся на летнем времени навсегда
Ссылка на закон - 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'ки