null

Отмена перехода на зимнее время в ОС Solaris. Варианты.

 

Как известно, с принятием Федерального закона Российской Федерации от 03.06.2011г. № 107-ФЗ «Об исчислении времени» и Постановления Правительства Российской Федерации от 31.08.2011г. № 725 на территории Российской Федерации отменяется сезонный перевод часов и устанавливаются соответствующие часовые зоны и значения времени.

В связи с этим возникает ряд проблем с отключением пресловутого перехода на зимнее время в ОС  выполняющих его автоматически, в том числе и в ОС Solaris.

Существует несколько вариантов решения проблемы :

Установка специальных  патчей от производителя Oracle.

Для платформы Sparc :
Solaris 10 : 146470-04
Solaris 9 : 113225-29
Solaris 8 : 109809-17

Для платформы x86:
Solaris 10 : 146471-04
Solaris 9 : 116545-27
Solaris 8 : 109810-17

Данные патчи можно загрузить с сайта MOS  (My Oracle Support). Доступ к патчам предоставляется при наличии поддержки на ОС. Следует учесть, что Solaris 8 уже давно отправлен в EOSL, и получить доступ к соответствующим патчам есть возможность  только при наличии специальной программы поддержки  Vintage Support. 

Стоит обратить внимание, что патчи указанных ревизий (значений после "-" ) для Solaris 9 и 10 "работоспособны" с точки зрения решения проблемы с отменой перехода, чего не скажешь про их предыдущие версии.
Патчи для Solaris 8 (sparc и x86) решают проблему только "частично" - дело в том,   
что  разработчики патчей почему-то забыли положить в них бинарные файлы для зоны  Europe, положив только исходники этой зоны. Соответственно, необходима "ручная" компиляция зоны после установки патча при помощи zic:

#zic /usr/share/lib/zoneinfo/src/europe



и проверить, что зона актуальна  при помощи zdump, вывод должен быть таким :

#zdump -v Europe/Moscow|grep 2011
Europe/Moscow  Thu Oct 13 13:33:31 2011 UTC = Thu Oct 13 17:33:31 2011 MSK isdst=0
Europe/Moscow  Sat Mar 26 22:59:59 2011 UTC = Sun Mar 27 01:59:59 2011 MSK isdst=0
Europe/Moscow  Sat Mar 26 23:00:00 2011 UTC = Sun Mar 27 03:00:00 2011 MSK isdst=0



(Значение isdst должно быть равным 0)

Кроме того, можно проверить что файл зоны имеет дату,  когда была проведена компиляция зоны -
к примеру :

#ls -l /usr/share/lib/zoneinfo/Europe/Moscow
-rw-r--r--   1 root     other        558 Oct 13 17:31 /usr/share/lib/zoneinfo/Europe/Moscow



Изменение правил или зон с последующей их компиляцией.

Доступ к патчам есть далеко не у всех в виду отсутствия контрактов на поддержку ОС, не говоря уж про специальную программу  Vintage Support для Solaris 8. Однако решить проблему нужно всем.  В данном случае можно исправить вручную исходные файлы зон и скомпилировать их.

Возможны два подхода :

1)  Изменение правила (rule) для Russia 
2)  Изменение конкретной зоны (zone)

Рассмотрим первый подход :

Изначально последние четыре строки для правила Russia в файле /usr/share/lib/zoneinfo/src/europe выглядят следующим образом  :

Rule    Russia  1992    only    -        Sep     lastSat  23:00  0       -
Rule    Russia  1993    max     -        Mar     lastSun  2:00s  1:00    S
Rule    Russia  1993    1995    -        Sep     lastSun  2:00s  0       -
Rule    Russia  1996    max     -        Oct     lastSun  2:00s  0       -



Для того, что запретить переход  на зимнее время необходимо разрешить системе перейти на летнее время последний раз в 2011 году и разрешить обратную коррекцию ограничиваясь только 2010 годом, т. е.
 

Rule   Russia  1992    only    -       Sep     lastSat  23:00  0       -
Rule   Russia  1993    2011    -       Mar     lastSun  2:00s  1:00    S     
Rule   Russia  1993    1995    -       Sep     lastSun  2:00s  0       -
Rule   Russia  1996    2010    -       Oct     lastSun  2:00s  0       -   


(подробное описание всех полей можно найти  в  #man zic)

После внесения  изменений необходимо провести компиляцию при помощи zic
( zic /usr/share/lib/zoneinfo/src/europe) и проверить, что переход не планируется при помощи zdump (см. выше).

Данный подход является "глобальным" -  настройки для всех зон, которые используют правило Russia будут формироваться в соответствии с этим общим правилом.
Соответственно, такой подход наиболее простой - не нужно изменять настройки конкретных и или всех зон России. Однако некоторые зоны уже не относящиеся к России также соотносятся с правилом Russia, например Europe/Minsk :

# Zone  NAME            GMTOFF  RULES   FORMAT  [UNTIL]
Zone    Europe/Minsk    1:50:16 -       LMT     1880
                        1:50    -       MMT     1924 May 2 # Minsk Mean Time
                        2:00    -       EET     1930 Jun 21
                        3:00    -       MSK     1941 Jun 28
                        1:00    C-Eur   CE%sT   1944 Jul  3
                        3:00    Russia  MSK/MSD 1990
                        3:00    -       MSK     1991 Mar 31 2:00s
                        2:00    1:00    EEST    1991 Sep 29 2:00s
                        2:00    -       EET     1992 Mar 29 0:00s
                        2:00    1:00    EEST    1992 Sep 27 0:00s
                        2:00    Russia  EE%sT


    
(подробное описание всех полей можно найти  в  #man zic)

Таким образом, наиболее правильным решением оказывается изменение настроек для конкретной или всех зон относящихся только к России.
Это и есть второй подход, который хотелось бы рассмотреть на примере зоны Europe/Moscow :

Оригинальная конфигурация зоны выглядит следующим образом :

Zone Europe/Moscow      2:30:20  -       LMT        1880
                         2:30    -        MMT        1916 Jul  3 # Moscow Mean Time
                         2:30:48 Russia   %s         1919 Jul  1 2:00
                         3:00    Russia   MSK/MSD    1922 Oct
                         2:00    -        EET        1930 Jun 21
                         3:00    Russia   MSK/MSD    1991 Mar 31 2:00s
                         2:00    Russia   EE%sT      1992 Jan 19 2:00s
                         3:00    Russia   MSK/MSD



Для того, чтобы запретить переход на зимнее время, в данном случае необходимо разрешить смещение на +3 часа относительно  UTC только до  27 марта  2011 года  и выставить постоянное смещение относительно  UTC +4 и отключить правило Russia для этой зоны, так как правило  Russia  учитывает переход на зимнее время. Дополнительно  убирается  и определение аббревиатуры временной зоны MSD :
 

Zone Europe/Moscow      2:30:20 -        LMT         1880
                         2:30    -        MMT         1916 Jul  3 # Moscow Mean Time
                         2:30:48 Russia   %s          1919 Jul  1 2:00
                         3:00    Russia   MSK/MSD     1922 Oct
                         2:00    -        EET         1930 Jun 21
                         3:00    Russia   MSK/MSD     1991 Mar 31 2:00s
                         2:00    Russia   EE%sT       1992 Jan 19 2:00s
                         3:00    Russia   MSK/MSD     2011 Mar 27 2:00s
                         4:00    -        MSK


Аналогичные изменения делаются и для любой другой зоны.  Единственное отличие от  Europe/Moscow зоны (где standard и daylight - аббревиатура перечислены через "/" )  для всех других зон необходимо описывать "стандартную" аббревиатуру вместо "составной" вида XXX%sT,  например  :

Конфигурация зоны Europe/Volgograd ДО внесения  изменений :

Zone Europe/Volgograd   2:57:40 -      LMT        1920 Jan  3
                         3:00   -       TSAT       1925 Apr  6 # Tsaritsyn Time
                         3:00   -       STAT       1930 Jun 21 # Stalingrad Time
                         4:00   -       STAT       1961 Nov 11
                         4:00   Russia  VOL%sT     1989 Mar 26 2:00s # Volgograd T
                         3:00   Russia  VOL%sT     1991 Mar 31 2:00s
                         4:00   -       VOLT       1992 Mar 29 2:00s
                         3:00   Russia  VOL%sT



Конфигурация зоны Europe/Volgograd ПОСЛЕ внесения  изменений :
 

Zone Europe/Volgograd   2:57:40 -      LMT        1920 Jan  3
                         3:00   -       TSAT       1925 Apr  6 # Tsaritsyn Time
                         3:00   -       STAT       1930 Jun 21 # Stalingrad Time
                         4:00   -       STAT       1961 Nov 11
                         4:00   Russia  VOL%sT     1989 Mar 26 2:00s # Volgograd T
                         3:00   Russia  VOL%sT     1991 Mar 31 2:00s
                         4:00   -       VOLT       1992 Mar 29 2:00s
                         3:00   Russia  VOL%sT     2011 Mar 27 2:00s
                         4:00   -       VOLT
 



После внесения изменений, так же  как и в случае с "глобальным" изменением правила, необходимо провести компиляцию при помощи zic
( zic /usr/share/lib/zoneinfo/src/europe) и проверить, что переход не планируется при помощи zdump (см. выше).

Установка зоны GMT+/-X.

Ну  и наконец самым простым способом решить проблему отмены перехода на зимнее время  - это "включить" принудительное смещение по GMT, например GMT+4,для тех кто живет по московскому времени. (Подробнее  : #man  TIMEZONE)
Однако,  возникают вопросы с правильным отображением времен ранее созданных файлов со всеми отсюда вытекающими проблемами.
 

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

Коротко о себе:

Работаю в компании TUNE-IT в качестве инженера и преподавателя.

В сферу профессиональных интересов входит все,  что связано с "большими" и не очень серверами и СХД от Sun Microsystems/Oracle и кластерами на их основе, но по долгу службы занимаюсь чаще всего их диагностикой и ремонтом... 

Делюсь опытом и  наработанными навыками в рамках курсов по  соответствующим направлениям.

Ничего не найдено. n is 0