8-926-159-92-95

FreeBSD — перевод часов на зимнее время

Получаем расписание перевода часов на 2014 год:

zdump -v /etc/localtime | grep 2014

Если видим две строки с корректировкой часового пояса 26 октября, значит, обновление не требуется.

/etc/localtime  Sat Oct 25 21:59:59 2014 UTC = Sun Oct 26 01:59:59 2014 MSK isdst=0 gmtoff=14400
/etc/localtime  Sat Oct 25 22:00:00 2014 UTC = Sun Oct 26 01:00:00 2014 MSK isdst=0 gmtoff=10800

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

Обновление базы часовых поясов

Пакет zoneinfo отсутствует в бинарном репозитории, для обновления используем коллекцию портов, либо выполняем установку вручную.

Установка из коллекции портов

Обновляем коллекцию портов:

portsnap fetch && portsnap update || portsnap extract

Устанавливаем порт zoneinfo:

cd /usr/ports/misc/zoneinfo && make install clean

Установка базы часовых поясов вручную

Загружаем актуальную версию базы часовых поясов:

fetch ftp://ftp.iana.org/tz/tzdata-latest.tar.gz

Распаковываем архив:

mkdir tzdata 
cd tzdata
tar xzf ../tzdata-latest.tar.gz

Компилируем данные для Европы и Азии:

zic europe asia

Результат компиляции записывается непосредственно в папку назначения: /usr/share/zoneinfo. Проверяем, что файлы имеют текущую дату:

ls -l /usr/share/zoneinfo/Europe
ls -l /usr/share/zoneinfo/Asia

Настройка часового пояса

Выбираем часовой пояс с помощью установочного меню:

tzsetup

Выбранный в меню файл часового пояса автоматически копируется в /etc/localtime.

Тот же результат можно получить, скопировав файл вашего региона:

cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Или создав ссылку:

zic -l /usr/share/zoneinfo/Europe/Moscow

Проверяем:

zdump -v /etc/localtime | grep 2014

Если видим две строки с корректировкой часового пояса 26 октября, значит, база обновлена успешно.

/etc/localtime  Sat Oct 25 21:59:59 2014 UTC = Sun Oct 26 01:59:59 2014 MSK isdst=0 gmtoff=14400
/etc/localtime  Sat Oct 25 22:00:00 2014 UTC = Sun Oct 26 01:00:00 2014 MSK isdst=0 gmtoff=10800

Часы будут переведены 26 октября в 02:00 на час назад.

Проверяем часовой пояс по состоянию на 1 ноября 2014 года:

date -j 1411010000 '+%z %Z'

Для фактического тестирования перевода часов используем команду:

date 1410260154 '+%x %X %z %Z'

Часы будут установлены на 26 октября 01:54. Обратите внимание, часовой пояс не всегда интерпретируется корректно. Если время задано в новом часовом поясе, то перевода часов не произойдет. В этом случае, используйте значение 1410260059, но ждать перевода часов придется час.

Ждем наступления двух часов и проверяем время:

date '+%x %X %z %Z'

Часовой пояс должен быть изменен. Не забудьте восстановить текущее время.

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

Обновление часовых поясов выполняется путем замены системных файлов в папке /usr/share/zoneinfo. В случае, если система обновляется из исходников, то при установке патчей с пересборкой мира, файлы будут перезаписаны старыми версиями. Чтобы предотвратить перезапись файлов добавьте строку

WITHOUT_ZONEINFO="yes"

в /etc/src.conf. При переходе на новую версию системы, выпущенную после августа 2014 года, параметр

WITHOUT_ZONEINFO="yes"

необходимо будет удалить.

Обновление часовых поясов в PHP

PHP использует собственную базу часовых поясов, ее необходимо обновить отдельно.

Проверяем необходимость обновления базы, получаем часовой пояс на 1 ноября 2014 года, регион необходимо указать свой:

php -r 'date_default_timezone_set("Europe/Moscow"); echo "\n".date ("P",1414789200)."\n\n";'

Если видим неверный часовой пояс, приступаем к обновлению.

При установке PHP из пакета:

pkg install pecl-timezonedb

При установке PHP из портов:

cd /usr/ports/misc/pecl-timezonedb/
make install clean

Проверяем часовой пояс.

Если PHP работает в качестве модуля Apache, перезагружаем веб-сервер чтобы применить изменения:

service apache22 restart