Печать
Просмотров: 9827

Многие наверняка в курсе, что в этом году в России отменен переход на летнее время. Что это нам дает? Что 30 октября этого года время не изменится.

За часовые пояса в Linux отвечает так называемая tz database - пакет tzdata. Для большинства дистрибутивов возможно будет достаточно обновить этот пакет (соответсующие исправления внесены в версию 2011i). Если же такого обновления для вашего дистрибутива не вышло, самый простой способ использовать Etс/GMT+4 или, если вы не ищете легких путей, перекомпилировать файл зоны. Об этом варианте и пойдет речь далее.

Для начала убедимся что наш файл зоны не актуален и система переведет время:

suntechnic@ulspo:~$ zdump -v /usr/share/zoneinfo/Europe/Moscow |grep 2011
/usr/share/zoneinfo/Europe/Moscow  Sat Mar 26 22:59:59 2011 UTC = Sun Mar 27 01:59:59 2011 MSK isdst=0 gmtoff=10800
/usr/share/zoneinfo/Europe/Moscow  Sat Mar 26 23:00:00 2011 UTC = Sun Mar 27 03:00:00 2011 MSD isdst=1 gmtoff=14400
/usr/share/zoneinfo/Europe/Moscow  Sat Oct 29 22:59:59 2011 UTC = Sun Oct 30 02:59:59 2011 MSD isdst=1 gmtoff=14400
/usr/share/zoneinfo/Europe/Moscow  Sat Oct 29 23:00:00 2011 UTC = Sun Oct 30 02:00:00 2011 MSK isdst=0 gmtoff=10800

Итак, 30 октября все пройдет по старому расписанию.

Для начала сделаем резервную копию:

suntechnic@ulspo:~$ cp /usr/share/zoneinfo/Europe/Moscow \
/usr/share/zoneinfo/Europe/Moscow.bkp

Получаем последнюю версию tz database отсюда:

suntechnic@ulspo:~$ cd /tmp
suntechnic@ulspo:/tmp$ wget http://ulspo.ru/files/linux/time/tzdata2011k.tar.gz
suntechnic@ulspo:/tmp$ mkdir /tmp/tzdata2011k
suntechnic@ulspo:/tmp$ tar xfv tzdata2011k.tar.gz -C /tmp/tzdata2011k

Ну а теперь собственно компиляция:

suntechnic@ulspo:/tmp$ cd /tmp/tzdata2011k
suntechnic@ulspo:/tmp/tzdata2011k$ zic -d zoneinfo europe
suntechnic@ulspo:/tmp/tzdata2011k$ cp /tmp/tzdata2011k/zoneinfo/Europe/Moscow \
/usr/share/zoneinfo/Europe/Moscow

Не забудьте проверить файл /etc/localtime, если это ссылка на файл Moscow, то всё нормально, а если это просто файл, то нужно его заменить новым файлом:

suntechnic@ulspo:~$ mv /etc/localtime /etc/localtime.bkp
suntechnic@ulspo:~$ ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Проверяем результат:

suntechnic@ulspo:~$ zdump -v /usr/share/zoneinfo/Europe/Moscow |grep 2011
/usr/share/zoneinfo/Europe/Moscow  Sat Mar 26 22:59:59 2011 UTC = Sun Mar 27 01:59:59 2011 MSK isdst=0 gmtoff=10800
/usr/share/zoneinfo/Europe/Moscow  Sat Mar 26 23:00:00 2011 UTC = Sun Mar 27 03:00:00 2011 MSK isdst=0 gmtoff=14400

Далее нужно выставить хранение аппаратного времени в системе UTC. Для этого откроем файл любым простым текстовым редактором:

suntechnic@ulspo:~$ joe /etc/sysconfig/clock

...и выставим указанный параметр UTC:

ZONE="Europe/Moscow"
UTC=true
ARC=false

Если часы системные выставлены так как надо, то выполняем следующую команду, которая запишет в аппаратные часы (BIOS) время в UTC:

suntechnic@ulspo:~$ hwclock --systohc --utc

или аналогично:

suntechnic@ulspo:~$ hwclock -wu

После произведённых действий компьютер можно перегрузить и удостовериться, что время никуда не убегает.

Если часы сместятся на 4 часа вперёд. Далее просто выставим нужное время командой date -s hh:mm:ss.