Прошедшие выходные отмечены проблемами с хронометражем в системе GPS

Источник: vestnik-glonass.ru

Все вправе использовать компьютеры для чего угодно. Можно этого не знать, если вы не системный или сетевой администратор, но безопасность, идентификация, сети – всё, что заставляет интернет работать, зависит от точного хронометража. Некоторые системы полагаются на устройства GPS и «демон» («процесс-демон», присоединённая программа) GPSD для определения точного времени, и в GPSD была обнаружена неприятная ошибка, которая должна была проявиться 24 октября 2021 года. Если её не исправить заранее, она бы переключила ваше время на март 2002 года, и ваша система вышла бы из строя с громким бумом. Как это происходит поясняет Стивен Дж. Воган-Николс на страницах издания ZDNet.

Земное время не является абсолютным. Скорость вращения Земли меняется в зависимости от геологических событий. Служба International Systems Service вращения и координат Земли (IERS) отслеживает это, и каждые несколько лет добавляет високосную секунду в год. Это делается по всемирному координированному времени (UTC), которое является стандартной системой всемирного времени. UTC используется сетевым протоколом времени в интернете (NTP). В свою очередь, NTP используется для синхронизации всех подключённых к интернету устройств друг с другом.

Как NTP узнает, который час? Путем синхронизации серверов NTP с атомными часами. Протокол NTP основан на иерархии уровней, где каждому уровню присваивается номер, называемый стратой. Серверы Stratum 1 (первичные) на самом нижнем уровне напрямую синхронизируются с национальными службами времени через спутник, радио или модем. Серверы уровня 2 (вторичные) синхронизируются с серверами уровня 1 и так далее. Обычно клиенты и серверы NTP подключаются к серверам Stratum 2.

Пока всё хорошо, но как серверы уровня 1 синхронизируются с часами? Многие из них используют GPSD. Этот сервисный «демон» отслеживает местоположение, курс, скорость одного или нескольких GPS-навигаторов, и для наших целей наиболее важным элементом, который он отслеживает, является время. Этот код, который представляет собой смесь связываемой служебной библиотеки C, класса-оболочки C++ и модуля Python, как и все программы, содержит изрядную долю ошибок.

Недавно было обнаружено, что ошибка в коде проверки работоспособности отката времени (также известного как «перенос недели GPS»), запланированного на ноябрь 2038 года, вместо этого сработает в это воскресенье и приведет к вычитанию 1024 из номера недели 24 октября 2021 года. Другими словами, многие компьютеры ожидает быстрый и резкий улёт в март 2002 года.

Как выразился Стивен Уильямс, обнаруживший ошибку: «У меня есть чувство, что рано утром будут некоторые «интересные моменты», когда группа серверов NTP первого уровня в мире, использующих GPSD, отправится в долгое странное путешествие обратно в 2002 г.».

Сопровождающий GPSD Гэри Миллер признал наличие проблемы, и в код было внесено исправление. Если быть точным, исправление было в выпуске GPSD 3.23 в августе 2021 года. Итак, в чём проблема, если исправление уже внесено?

Проблем две. Во-первых, исправление не будет перенесено в предыдущие выпуски. Если вы всё ещё используете старую версию, возможно, вам не повезло. Во-вторых, как заметил Миллер, не все дистрибутивы «собирают обновления GPSD или передают свои исправления. [Это] очень грустно для меня». Таким образом, то, что ваша операционная система обновлена, не означает, что она будет иметь необходимое исправление GPSD. Миллер предлагает вам проверить это и сделать это самостоятельно: «Я [собираюсь] прибегнуть к изречению Грега K.H.: все пользователи должны обновляться».

Какова же таинственная первопричина всей этой суматохи, связанной с переносом данных на неделю GPS? Это проблема устаревшего GPS. Номер недели GPS сигнала GPS использует 10-битный код с максимальным значением 1023. Это означает, что каждые 19,7 года номер недели GPS обнуляется. Или, как заметил Миллер: «Этот код – 1024-недельная деформация, ожидающая своего часа».

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