Переходим на зимнее время
Переходим на зимнее время

26 октября 2014 года в 02:00 в большинстве регионов России состоится очередное изменение во времени: мы переходим на постоянное зимнее время (часы переводятся на час назад).

Если бы речь шла о наручных или настенных часах, то вся проблема свелась бы к ручному переводу стрелок. Так почему в компьютерах все сложно и требуются какие-то обновления? Или не требуются? Давайте разберемся.

Немного теории

В 2011 году по постановлению президента Медведева Россия перешла на постоянное летнее время, в результате чего Москва находится в часовом поясе GMT+4, а Екатеринбург в GMT+6. Что это за цифры? Вы наверняка знаете, что наш земной шар делится на условные временные зоны. Нулевой меридиан, проходящий через английский город Гринвич, имеет нулевую временную зону (GMT+0). Двигаясь на восток в сторону Японии временные зоны получают положительное смещение времени, то есть когда в Гринвиче полночь, в Москве 4 часа утра (GMT+4), а в Екатеринбурге 6 утра (GMT+6). Двигаясь от Гринвича на запад мы получаем отрицательное смещение времени, поэтому когда в Гринвиче полночь, в Нью-Йорке еще только 20 часов вечера предыдущего дня (GMT-4).

Большинство операционных систем для представления времени используют довольно простую схему: за начальную точку отсчета берется так называемое UNIX Epoch или 1 января 1970 года 00 часов по Гринвичу. Любое другое время внутри компьютера представлено в виде количества секунд, прошедшего с момента UNIX Epoch. Например, 23 октября 2014 года 00:00 по Гринвичу хранится как число 1414000800 - именно столько секунд прошло с момента UNIX Epoch. В итоге получается довольно простая арифметика: в сутках 24 часа, поэтому чтобы получить 00 часов 24 октября, нужно к 1414000800 прибавить 24*60*60=86400 секунд. Все просто, казалось бы. Но нет. Дело в том, что не в каждых сутках 24 часа. Поскольку 26 октября 2014 года мы должны перевести часы на час назад, между 00 часов 26 октября и 00 часов 27 октября в большинстве городов России всего 23 часа.

Для того, чтобы функции работы со временем могли учитывать переходы между летним и зимним временем, была разработана специальная база данных - timezone database (tzdata) или Olson database. В этой базе данных хранятся сведения о локальных переводах времени для различных территорий. Понятно, что между Гринвичем и GMT+6 всегда будет 6 часов разницы, но вот между Гринвичем и Екатеринбургом 25 октября 2014 года 6 часов разницы, а с 26 октября - 5 часов. То есть, 26 октября Екатеринбург “переезжает” из GMT+6 в GMT+5. Фактически же локальные временные зоны обозначаются не через смещение GMT, а имеют наименования типа Asia/Yekaterinburg или Europe/Moscow, поэтому правильнее для Екатеринбурга указывать временную зону именно так: Asia/Yekaterinburg.

Итак, теперь, когда вы освоили теорию, давайте ответим на вопрос: можно ли просто перевести часы в компьютере или на сервере. Возникает два варианта:

  1. Вы вручную меняете временную зону вашего сервера на GMT+5 (для Екатеринбурга). Тогда с 26 октября ваш сервер будет показывать правильное время. Но для всех предыдущих дат время будет смещено на час. Например, если у вас на сайте есть раздел с новостями и у вас в понедельник, 20 октября в 10 утра была опубликована какая-то новость, то после такого перевода часов эта новость будет отображаться как опубликованная в 9 утра. Почему? Вспомните что мы рассказывали по количество секунд, прошедшее с UNIX Epoch. Оно не изменилось, а вот смещение GMT стало другим. Является ли отображение времени у предыдущих дат для вас проблемой или нет - решать вам.
  2. Необходимо произвести обновление базы данных tzdata в вашей системе, чтобы в нем появилась запись о том, что правительство РФ решило перевести стрелки часов 26 октября 2014. Если это сделать, то тогда все временные отметки, сделанные как до 26 октября, так и после, будут иметь правильное время.

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

Обновление системного tzdata

(Все приведенные ниже команды необходимо выполнять на вашем VDS от имени суперпользователя, либо добавлять sudo в начале команд.)

Для обновления пакета tzdata в свежих версиях Debian и Ubuntu необходимо выполнить:

apt-get update
apt-get install tzdata

Если у вас Debian squeeze (как это проверить описано в начале раздела Обновление php ниже), эта операционная система на данный момент устарела. Ее стандартные репозитории с июня этого года больше не обновляются. Но для архитектур IA-32 и x86-64 еще какое-то время будет обновляться репозиторий squeeze-lts. Если вы по каким-то причинам не можете перейти на актуальную версию операционной системы, но вам нужны обновления, вам следует добавить этот репозиторий:

grep -q 'squeeze-lts' /etc/apt/sources.list || echo "deb http://ftp.us.debian.org/debian squeeze-lts main non-free contrib" >> /etc/apt/sources.list

и выполнить:

apt-get update
apt-get -t squeeze-lts install tzdata

После обновления данного пакета, необходимо, чтобы об этих изменениях узнали все запущенные постоянно сервисы (или демоны), такие как cron, syslog, apache, nginx, mysql, postfix, dovecot и другие. Для этого их нужно перезапустить:

service имя_сервиса restart

Где вместо “имя сервиса” необходимо последовательно подставить имена перезагружаемых сервисов. Либо вы можете просто перезагрузить операционную систему командой

reboot

Обновление php

Язык программирования PHP с версии 5.1 использует свою собственную версию tzdata. Если у вас облачный VDS с предустановленной связкой LAMP (linux+apache+mysql+php) или связкой nginx + PHP, то у вас стоит PHP из стандартного debian-репозитория, в котором используется патч, принуждающий PHP использовать системную базу tzdata. В этом случае никаких дополнительных действий производить не нужно.

Если вы используете VDS с нашей панелью управления, то у вас установлены несколько версий php нашей сборки, в том числе те, которые не поддерживаются текущим дистрибутивом debian, по этому, эти пакеты используют встроенный в php tzdata.

Для начала надо определить, какая у вас версия ОС Debian, и какие версии php в ней установлены.

cat /etc/debian_version

Скорее всего, здесь будет присутствовать слово squeeze или wheezy, либо указан номер версии цифрами. Если первая цифра 6 - то это squeeze, если 7 - wheezy.

Запомним этот результат. Далее, проверим, что у вас прописан наш репозиторий. Если нет, пропишем. Выполните следующую команду:

grep '^deb http://noc.netangels.ru/debian' -R /etc/apt

были ли найдены какие-либо результаты? Результатом поиска может быть одна или несколько строк, либо ничего. Например, вы можете получить следующие строки:

/etc/apt/sources.list.d/netangels-wheezy.list:deb http://noc.netangels.ru/debian wheezy main
/etc/apt/sources.list.d/netangels-unstable.list:deb http://noc.netangels.ru/debian unstable main

Надо удостовериться, что в одной из строк результата после адреса указанного репозитория (“noc.netangels.ru/debian”) идет верное имя вашего дистрибутива, полученное на предыдущем шаге.

В случае, если такая строка не нашлась или если в результате поиска вообще ничего не было найдено, необходимо добавить нужный репозиторий в систему:

echo "deb http://noc.netangels.ru/debian wheezy main" > /etc/apt/sources.list.d/netangels.list

(Если у вас squeeze, а не wheezy, необходимо заменить в этой команде wheezy на squeeze.)

Обновим данные о содержимом репозитория

apt-get update

Далее узнаем, какие у вас установлены версии php. Команда

dpkg -l | grep php5 | awk '{print $2}'

выведет список версий php и их расширений. Версии ниже 5.1 нас не интересуют, т.к. с ними ничего делать не нужно (они используют системную tzdata). В результате выполнения этой команды у вас должен получиться список, аналогичный приведенному ниже (номера версий, их количество и список установленных расширений могут различаться)

php5.2.1
php5.2.17-apc
php5.2.17-eaccelerator
php5.2.17-ffmpeg
php5.2.17-geoip
php5.2.17-imagick
php5.2.17-memcache
php5.2.17-timezonedb
php5.2.17-xcache
php5.2.17-xdebug
php5.3.23
php5.3.23-apc
php5.3.23-dbase
php5.3.23-eaccelerator
php5.3.23-ffmpeg
php5.3.23-geoip
php5.3.23-imagick
php5.3.23-memcache
php5.3.23-xcache
php5.3.23-xdebug
php5.4.13
php5.4.13-apc
php5.4.13-dbase
php5.4.13-geoip
php5.4.13-imagick
php5.4.13-memcache
php5.4.13-xcache
php5.4.13-xdebug

Для версий с php5.1 по php5.5 нужно обратить внимание на их подверсии. В приведенном выше списке мы видим, что установлены версии php5.2, php5.3 и php5.4, а именно, подверсии php5.2.17, php5.3.23 и php5.4.13, а также расширения для этих версий.

На данный момент последними сборками являются следующие:

php5.1.6
php5.2.17
php5.3.29
php5.4.32
php5.5.16

Если у вас используются версии php5.1 и/или php5.2 и установлены именно эти сборки (php5.1.6 и php5.2.17), то для этих версий достаточно всего лишь обновить пакеты php5.1.6-timezonedb и php5.2.17-timezonedb

apt-get install php5.1.6-timezonedb php5.2.17-timezonedb

Если ваши установленные сборки отличаются от указанных выше, вам необходимо поставить последнюю сборку со всеми необходимыми вам расширениями (естественно, это нужно делать только для тех версий, которые у вас уже установлены. То есть, если у вас например не установлена версия 5.1, то нет необходимости обновлять эту версию).

apt-get install php5.1.6 php5.1.6-eaccelerator php5.1.6-timezonedb
apt-get install php5.2.17 php5.2.17-apc php5.2.17-eaccelerator php5.2.17-ffmpeg php5.2.17-geoip php5.2.17-imagick php5.2.17-memcache php5.2.17-timezonedb php5.2.17-xcache php5.2.17-xdebug

Для версий php5.3, php5,4, php5.5 актуальными сборками являются php5.3.29, php5.4.32 и php5.5.16. Если у вас стоят именно эти сборки, то достаточно лишь обновить пакеты php5.3.29 php5.4.32 php5.5.16 (здесь timezonedb не собрана в виде отдельного модуля, как для версий php5.1 и php5.2)

apt-get install php5.3.29 php5.4.32 php5.5.16

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

apt-get install php5.3.17 php5.3.17-apc php5.3.17-dbase php5.3.17-eaccelerator php5.3.17-ffmpeg php5.3.17-geoip php5.3.17-imagick php5.3.17-memcache php5.3.17-xcache php5.3.23 php5.3.23-apc php5.3.23-dbase php5.3.23-eaccelerator php5.3.23-ffmpeg php5.3.23-geoip php5.3.23-imagick php5.3.23-memcache php5.3.23-xcache php5.3.23-xdebug php5.3.28 php5.3.28-apc php5.3.28-dbase php5.3.28-eaccelerator php5.3.28-ffmpeg php5.3.28-geoip php5.3.28-imagick php5.3.28-memcache php5.3.28-xcache php5.3.28-xdebug php5.3.29 php5.3.29-apc php5.3.29-dbase php5.3.29-eaccelerator php5.3.29-ffmpeg php5.3.29-geoip php5.3.29-imagick php5.3.29-memcache php5.3.29-xcache php5.3.29-xdebug
apt-get install php5.4.13 php5.4.13-apc php5.4.13-dbase php5.4.13-geoip php5.4.13-imagick php5.4.13-memcache php5.4.13-xcache php5.4.13-xdebug php5.4.24 php5.4.24-apc php5.4.24-dbase php5.4.24-geoip php5.4.24-imagick php5.4.24-memcache php5.4.24-xcache php5.4.24-xdebug php5.4.32 php5.4.32-apc php5.4.32-dbase php5.4.32-geoip php5.4.32-imagick php5.4.32-memcache php5.4.32-xcache php5.4.32-xdebug php5.4.7 php5.4.7-apc php5.4.7-dbase php5.4.7-geoip php5.4.7-imagick php5.4.7-memcache php5.4.7-xcache
apt-get install php5.5.0 php5.5.0-dbase php5.5.0-geoip php5.5.0-imagick php5.5.0-memcache php5.5.0-xdebug php5.5.16 php5.5.16-dbase php5.5.16-geoip php5.5.16-imagick php5.5.16-memcache php5.5.16-xdebug php5.5.8 php5.5.8-dbase php5.5.8-geoip php5.5.8-imagick php5.5.8-memcache php5.5.8-xdebug

(нужно выполнить эту операцию только для нужных версий, а также, вы можете не устанавливать заведомо не нужные вам расширения просто убрав их из списка установки)

По окончании работ необходимо выполнить скрипт /usr/bin/update-php. Он настроит необходимые ссылки, чтобы если у вас в панели выбрана версия php5.3, она указывала именно на последнюю сборку этой версии php5.3.29, а не на более старые.

С 2003 года
Надежность.
Нам доверяют десятки тысяч компаний и разработчиков
18 лет
Предоставляем услуги профессионального хостинга
35 000
Клиентов доверяют нам размещение своих сайтов
99.99%
Подтвержденный uptime
наших серверов хостинга
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты