Отмена перехода на зимнее время в Украине

Историческая справка:

20.09.2011:
Верховная Рада поддержала законопроект №8330 «Об изменении порядка исчисления времени на территории Украины», инициированный народным депутатом Олегом Надошей (фракция Партии регионов).

Чтоб ему жилось хорошо……
————————

ОТБОЙ!!!! Постановление отменили


————-

А теперь о проблемах которые возникнут в связи с уровнем интелектуального развития наших политиков:
1. Все кто купил билеты на самолет – трижды проверьте расписание 🙂
2. В международных компаниях могут возникнуть проблемы с синхронизацией событий +/-час
3. Придется привыкать к тому, что не все устройства с утра покажут одинаковое время
4. и еще кучка проблем с электросчетчиками, поездами дальнего следования и т.д.

В моем случае проблемы могут возникнуть с Linux-серверами, которые синхронизируют свои конфигурации и данные между собой.
Заходим на Gentoo и смотрим как он поведет себя в ноябре:

date --date='20111101'
вівторок, 1 листопада 2011 00:00:00 +0200


Вывод этой команды содержит часовой пояс на 1 ноября, в нашем случае это +0200, что соответствует зимнему времени. Так же некоторые версии date выдают информацию в таких форматах: (EET) (UTC+2)
Все три варианта нам не подходят, так как нам нужно иметь часовой пояс +0300, он же FET, он же UTC+3
Рассмотрим 2 варианта приведения в порядок времени

Обновление штатными средствами Gentoo

Обновляем дерево portage

emerge --sync

Смотрим какие версии timezone-data у нас доступны:

eix timezone-data

Нам нужна версия 2011k и выше. Ставим самый новый пакет

emerge -av /usr/portage/sys-libs/timezone-data/timezone-data-2011l.ebuild

Проверяем, что символическая ссылка localtime правильная:

ls -lah /etc/localtime
/etc/localtime -> /usr/share/zoneinfo/Europe/Kiev

Проверяем время:

date --date='20111101'
Втр Ноя  1 00:00:00 FET 2011

Вот теперь все хорошо, система останется в часовом поясе FET. Для уверености можно просмотреть правила перевода времени для Киева

zdump -v Europe/Kiev | grep 2011
Europe/Kiev  Sun Mar 27 00:59:59 2011 UTC = Sun Mar 27 02:59:59 2011 EET isdst=0
Europe/Kiev  Sun Mar 27 01:00:00 2011 UTC = Sun Mar 27 04:00:00 2011 FET isdst=0

Как видим, в 2011-м году в Украине не запланирован перевод времени в октябре.

Вариант №2. Ручная замена файлов timezone

Есть ситуации когда система очень давно не обновлялась и если начать обновление одного пакета, то он за собой потянет кучу зависимостей. Поэтому нужно по-тихому обновить timezone-data
Да, это не правильно, но такова жизнь 🙂
Смотрим откуда нужно скачать самый новый набор правил:

cat /usr/portage/sys-libs/timezone-data/timezone-data-2011l.ebuild

Ищем там переменную SRC_URI:

SRC_URI="ftp://elsie.nci.nih.gov/pub/tzdata${data_ver}.tar.gz
        ftp://munnari.oz.au/pub/tzdata${data_ver}.tar.gz
        ftp://elsie.nci.nih.gov/pub/tzcode${code_ver}.tar.gz
        ftp://munnari.oz.au/pub/tzcode${code_ver}.tar.gz
        mirror://gentoo/tzdata${data_ver}.tar.gz
        mirror://gentoo/tzcode${code_ver}.tar.gz"

Зачем это нужно? Читаем статейку Глобальная база данных часовых поясов закрыта по судебному иску
Выбираем любое зеркало и скачиваем

wget  ftp://munnari.oz.au/pub/tzdata2011l.tar.gz

Распаковываем:

tar -xvf tzdata2011l.tar.gz

Смотрим есть ли правила для Киева:

cat europe | grep -C 10 Kiev
Zone Europe/Kiev        2:02:04 -       LMT     1880
                        2:02:04 -       KMT     1924 May  2 # Kiev Mean Time
                        2:00    -       EET     1930 Jun 21
                        3:00    -       MSK     1941 Sep 20
                        1:00    C-Eur   CE%sT   1943 Nov  6
                        3:00    Russia  MSK/MSD 1990
                        3:00    -       MSK     1990 Jul  1 2:00
                        2:00    -       EET     1992
                        2:00    E-Eur   EE%sT   1995
                        2:00    EU      EE%sT   2011 Mar lastSun 1:00u
                        3:00    -       FET # Further-eastern European Time

И видим, что последний перевод времени запланирован на 2011год, значит все правильно
Компилируем новый набор файлов временных зон

zic europe

проверяем:

zdump -v Europe/Kiev | grep 2011
Europe/Kiev  Sun Mar 27 00:59:59 2011 UTC = Sun Mar 27 02:59:59 2011 EET isdst=0
Europe/Kiev  Sun Mar 27 01:00:00 2011 UTC = Sun Mar 27 04:00:00 2011 FET isdst=0

Теперь все в норме.
Если у Вас не прошли изменения, то нужно проверить есть-ли ссылка на файл зоны:

ls -la /etc/localtime
/etc/localtime -> /usr/share/zoneinfo/Europe/Kiev

Вот и все.
PS: Еще более простой способ. Выкладываем на фтп файл europe из архива tzdata и на сервере выполняем 3 команды:

wget ftp://10.0.0.1/tzdata/europe
zic europe
zdump -v Europe/Kiev | grep 2011

————————

ОТБОЙ!!!! Переходим на зимнее время! Постановление отменили


————-

В связи с переходом на зимнее время нужно использовать самый новый пакет tzdata2011m с часовыми поясами, который находится на сайте IANA