С течением времени системные часы компьютера имеют тенденцию отставать. Network Time Protocol - Сетевой Протокол Времени (NTP) является одним из способов вести точное системное время. Если системное время в операционной системе OpenBSD не синхронизировано с NTP server, то могут возникнуть проблемы в работе программного обеспечения используемого на различных серверах и рабочих станциях.
Многие сервисы Интернет опираются или сильно зависят от точности системных часов компьютеров. К примеру, веб-сервер может получать запрос на посылку файла, который был недавно модифицирован. В локальной сети необходимо, чтобы часы компьютеров, совместно использующих файлы, были синхронизированы, чтобы время модификации файлов устанавливалось правильно. Такие службы, как cron, также зависят от правильности установки системных часов, поскольку запускают команды в определенное время.
Так например при использовании OpenBSD в условиях не синхронизированного с NTP server системного времени (часов), при установке CMS Drupal могут возникать такие ошибки:
Install site http://drupal6.loc/install.php?locale=en&profile=default&op=start&id=1 user warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ORDER BY fit DESC LIMIT 0, 1' at line 1 query: SELECT * FROM menu_router WHERE path IN () ORDER BY fit DESC LIMIT 0, 1 in /home/drupal/drupal6/includes/menu.inc on line 316. user warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ORDER BY fit DESC LIMIT 0, 1' at line 1 query: SELECT * FROM menu_router WHERE path IN () ORDER BY fit DESC LIMIT 0, 1 in /home/drupal/drupal6/includes/menu.inc on line 316.
Эта ошибка возникает при использовании всех браузеров кроме FireFox, при этом также во всех браузерах кроме FireFox невозможно авторизироватся в CMS Drupal, авторизация проходит без ошибок но, снова видна главная страница с формой авторизации!
Проблема заключается в разном времени установленном на локальной и виртуальной машине. Так например на виртуальной машине установлено время "Sun Dec 4 09:25:18 EET 2011", а на локальной "Fri Dec 30 09:35:18 EET 2011".
Казалось бы причем тут настройки времени к ошибке "You have an error in your SQL syntax" но, увы - это такой себе БАГ в Drupal-e которого нет в Joomla. Подробнее про этот Drupal-овский БАГ можно почитать тут:
А относительно невозможности авторизации в Drupal-e то, получается, что кукиш устанавливаемый из OpenBSD с датой "Dec 4 09:25:18 EET 2011" сразу же дохнет на локальной где дата "Dec 30 09:25:18 EET 2011" (разница в 26-ть дней), а с FireFox видимо другая политика кукишей.
Как видим неверная настройка часовой зоны (timezone) и системного времени в OpenBSD местами даёт о себе знать и поэтому сейчас мы займемся её настройкой и синхронизацией с NTP server в OpenBSD
Настройка часового пояса (timezone) в OpenBSD
Предварительно можно отредактировать текущую дату и время в БИОСе, далее создадим ссылку на нужный нам файл часового пояса, если не создано во время установки:
ln -fs /usr/share/zoneinfo/Europe/Kiev /etc/localtime #или скопируем его, что не желательно: cp /usr/share/zoneinfo/Europe/Kiev /etc/localtime
Наверное не сложно догадаться, что полный список файлов часовых зон в OpenBSD можно полистать по адресу: ls /usr/share/zoneinfo/
Синхронизация системного времени с NTP server в OpenBSD
Демон ntpd специально предназначен для установки и поддержания системного времени в синхронизации со стандартными серверами времени в Интернете. По умолчанию для распределения времени используется протокол SNTP (порт 123 UDP) версии 4 (RFC 2030), а для получения поддерживается совместимость с версиями протокола NTP 3 (RFC-1305), а также 1 и 2 (RFC-1059 и RFC-1119).
По умолчанию в OpenBSD демон ntpd отключен (NTP (Network Time Protocol) Pool DNS system), а если он включен то автоматически выбирает тот сервер синхронизации системного времени, который ближе всего к вашему месту расположения но, если вы хотите явно указать сервер синхронизации времени, тогда используйте следующие имена хостов для вашего месторасположения:
Area: HostName: ---------------------------------------------- Worldwide pool.ntp.org Asia asia.pool.ntp.org Europe europe.pool.ntp.org North America north-america.pool.ntp.org Oceania oceania.pool.ntp.org South America south-america.pool.ntp.org
Демон синхронизации времени в OpenBSD, демон ntpd может быть сконфигурирован для автоматического запуска во время загрузки ОС установкой флага "ntpd_flags" в файле "/etc/rc.conf.local", выглядеть это должно следующим образом:
vi /etc/rc.conf.local ntpd_flags="-s"
Флаг "-s" позволит немедленно синхронизировать время (часы) при очередном запуске/перезагрузке системы и в дальнейшем позволяет исправлять время в течении длительного периода, исключая необходимость управлять rdate(8), при этом создается файл "/var/db/ntpd.drift".
Нужно взять во внимание, что если файл "/var/db/ntpd.drift" был создан вручную и в нем отсутствуют данные, то при запуске демона "ntpd" будет выдана ошибка: "ntpd can't read /var/db/ntpd.drift". Файл "/var/db/ntpd.drift" содержит данные о поправке времени:
-9.171948e-05
Настройки демона "ntpd" хранятся в файле "/etc/ntpd.conf", как правило его дополнительная конфигурация не требуется:
vi /etc/ntpd.conf # $OpenBSD: ntpd.conf,v 1.11 2009/05/18 16:13:48 stevesk Exp $ # sample ntpd configuration file, see ntpd.conf(5) # Addresses to listen on (ntpd does not listen by default) #listen on * # sync to a single server #server ntp.example.org # use a random selection of NTP Pool Time Servers # see http://support.ntp.org/bin/view/Servers/NTPPoolServers servers pool.ntp.org # use a specific local timedelta sensor (radio clock, etc) #sensor nmea0 # use all detected timedelta sensors #sensor * ~
Следует заметить, что в конфигурационный файл "/etc/ntpd.conf" (man ntpd.conf) не предусматривает указание директивы "driftfile", определяющей путь к файлу "ntpd.drift", что позволяется в FreeBSD!:
driftfile /var/db/ntpd.drift
Параметр driftfile задает файл, который используется для хранения смещения частоты системных часов. Программа ntpd(8) использует его для автоматической компенсации естественного смещения часов, позволяя ему поддерживать достаточно правильную настройку, даже если он на некоторый период отключается от внешнего источника информации о времени.
Параметр driftfile задает, какой файл используется для сохранения информации о предыдущих ответах от серверов NTP, которые вы используете. Этот файл содержит внутреннюю информацию для NTP. Он не должен изменяться никакими другими процессами.
Для одноразовой коррекции системного времени (часов) можно использовать команду "ntpd -s" или "rdate":
ntpd -s rdate -s pool.ntp.org
Команда "rdate" использует Time protocol. Это протокол описан в RFC868 и очень устарел. В ответ на обращение в 37-й порт выдается целое число - количество секунд, которое прошло от первого января 1900 года.
Перед одноразовой синхронизацией системного времени (часов) с помощью команды "rdate" можно предварительно проверить время на удалённом сервере командой:
rdate -p ntp.colocall.net
Для того чтобы другие компьютеры в вашей локальной сети могли синхронизировать время с вашей основной OpenBSD машиной через "Time protocol" нужен рабочий демон "timed", который включается в файле "vi /etc/rc.conf.local" установкой флага:
timed_flags=""
Интервал синхронизации системного времени с NTP server в OpenBSD
Демон ntpd периодически (с настроенным интервалом) обменивается сообщениями с одним или несколькими серверами NTP, доступными в Интернете (или в локальной сети). Если разница времени между локальным хостом и сервером NTP превышает 1000 секунд, то требуется вмешательство оператора для ручной установки времени. При этом в лог пишется panic-сообщение, и демон прекращает работу. Опция -g отменяет такое поведение (время синхронизируется при любой разнице времени), однако если синхронизация была неуспешной (разница во времени превышает 1000 секунд), ntpd все равно прекращает работу.
Это описание демона В OpenBSD для синхронизации системного времени используется OpenNTPD у которого довольно скудная документация Вероятно, что для выяснения интервала коррекции системного времени демоном "ntpd" придется обращаться к астрологам либо самому гадать на картах или кофейной гуще но, мы пойдём другим путём :)
Для синхронизации системного времени с NTP server в OpenBSD с нужным нам интервалом мы добавим команду "ntpd -s" в планировщик заданий (cron):
crontab -e # time synchronization with NTP server each 60 minutes */60 * * * * ntpd -s
Статья применима к операционным системам:
- OpenBSD 4.x
- OpenBSD 5.x