Официальный форум СВД Встраиваемые Системы
10 Декабря, 2016, 07:56:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1] 2   Вниз
  Печать  
Автор Тема: OpenNTPD для QNX4  (Прочитано 5586 раз)
Олег Большаков
Администратор
Житель форума

Сообщений: 2934



WWW
« : 04 Ноября, 2010, 21:43:02 »

OpenNTPD для QNX4



OpenNTPD -- это системный сервис Unix реализующий Network Time Protocol (NTP, сетевой протокол службы времени) для синхронизации локальных часов компьютерной системы с удалёнными серверами NTP. Также может выступать в качестве NTP-сервера для NTP-совместимых клиентов.

OpenNTPD преимущественно разрабатывается Хеннингом Брауэром (Henning Brauer) как часть проекта OpenBSD. Цели проекта -- безопасность (отсутствие возможностей для уязвимостей), лёгкая настройка, достаточная точность для большинства применений и исходный код, который может распространяться под лицензией BSD. Переносимая версия, как и для OpenSSH, разрабатывается как дочерний проект, который добавляет переносимость кода к OpenBSD версии и выпускается отдельно. Переносимая версия разрабатывается Дарреном Такером (Darren Tucker).


OpenNTPD 3.9p1

Существует специально подготовленная переносимая версия OpenNTPD, на данный момент это OpenNTPD 3.9p1. Эта версия уже должна поддерживать QNX4, что указано в документации. Но, по всей видимости, сборка должна осуществляться компилятором и утилитами GNU, что не всегда удобно. Ниже описывается процесс сборки при помощи OpenWatcom в среде Linux с использованием TCP/IP 5.0. Можно рассматривать нижеследующее описание как мини-курс по работе с OpenWatcom.

1. Подготовка исходных кодов

Скачиваем архив openntpd-3.9p1.tar.gz с официального сайта. Также понадобится патч исходных кодов для QNX4. В исходный код пришлось внести незначительные изменения, в основном касающиеся системы сборки. Распаковываем исходный код и накладываем патч следующими командами:

Код:
$ tar zxf openntpd-3.9p1.tar.gz
$ cd openntpd-3.9p1
$ zcat ../openntpd-3.9p1-qnx4.patch.gz | patch -p1

2. Конфигурация

Код:
$ CC=wacc CFLAGS=-D__QNX__ LDFLAGS=-lsocket ./configure --host=i386-unknown-qnx \
--prefix=/usr --sbindir=/usr/bin --sysconfdir=/etc --with-privsep-user=ntp

Здесь CC=wacc указывает компилятор Си, сам скрипт wacc можно скачать в этой теме. CFLAGS=-D__QNX__ -- специально определяем макрос __QNX__, как это было бы при сборке в самом QNX4.  LDFLAGS=-lsocket -- указывает необходимость линковки библиотеки socket. Параметр --host=i386-unknown-qnx -- указывает на то, что будет производиться кроссплатформенная сборка. Следующие три параметра задают соответственно каталог для установки, каталог для системных исполняемых файлов (задаём /usr/bin, т.к. в QNX4 нет /usr/sbin) и каталог для конфигурационных файлов. В опции --with-privsep-user задаём пользователя ntp (вместо _ntp). После выполнения команды configure будут созданы необходимые заголовочные и make файлы.

3. Сборка

Как ни странно, сборка осуществляется достаточно просто:

Код:
$ make

4. Подготовка дистрибутива

Сначала надо сделать предварительную установку:

Код:
$ make install prefix=../openntpd/usr sbindir=../openntpd/usr/bin sysconfdir=../openntpd/etc STRIP_OPT=

Специально переопределяются переменные prefix, sbindir и sysconfdir, чтобы установка прошла в каталог ../openntpd . Значения этих переменных аналогичны соответствующим ключам указываемым скрипту configure. Переменная STRIP_OPT устанавливается в пустую строку, иначе при выполнении команды make install установочный скрипт будет пытаться удалить отладочную информацию и завершится с ошибкой.

Переходим в каталог ../openntpd и готовим установочный дистрибутив:

Код:
$ cd ../openntpd
$ tar --owner=root --group=root -zcf ../openntpd-3.9p1-qnx4-bin-`date +%Y%m%d`.tar.gz *

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

5. Установка дистрибутива

Скопируйте файл openntpd-3.9p1-qnx4-bin-20101107.tar.gz в корневую директорию QNX4 и выполните от пользователя root:

Код:
# cd /
# /etc/install -u openntpd-3.9p1-qnx4-bin-20101107.tar.gz

После этого необходимо добавить пользователя ntp в систему, для этого добавляем в файл /etc/group:

Код:
ntp::201:

В файл /etc/passwd добавляем:

Код:
ntp::201:201::/usr/ntp:/bin/false

Создаём домашний каталог пользователя ntp:

Код:
# mkdir /usr/ntp
# chmod 700 /usr/ntp

Также необходимо добавить две следующие строчки в файл /etc/services:

Код:
ntp             123/tcp         # Network Time Protocol
ntp             123/udp         # Network Time Protocol

Для работы OpenNTPD необходимо установить сервис PRNGD, этот процесс описан в соответствующей теме. После этого можно запустить prngd и ntpd, например, так:

Код:
# prngd /etc/egd-pool
# ntpd


Ссылки

 - Официальный сайт
 - Описание в википедии + engl
 - Дистрибутив OpenNTPD 3.9p1 для QNX4
 - Патч OpenNTPD 3.9p1 для QNX4
 - PRNGD для QNX4
 - Настройка OpenWatcom для QNX4
 - Утилита wacc
« Последнее редактирование: 19 Ноября, 2010, 14:40:38 от Олег Большаков » Записан

zh
Пользователь

Сообщений: 13


« Ответ #1 : 19 Ноября, 2010, 14:37:01 »

По ссылкам:
 - Дистрибутив OpenNTPD 3.9p1 для QNX4
 - Патч OpenNTPD 3.9p1 для QNX4
выдает:
"Запрашиваемая страница не найдена.
Вы попали сюда по ошибке. Предлагаем Вам перейти на Главную страницу сайта."
Записан
Олег Большаков
Администратор
Житель форума

Сообщений: 2934



WWW
« Ответ #2 : 19 Ноября, 2010, 14:41:31 »

zh, спасибо за замечание. Исправил ссылки.
Записан

coder
Интересующийся

Сообщений: 9


« Ответ #3 : 11 Февраля, 2014, 09:23:11 »

Здравствуйте

Я собрал ntpd, следуя Вашим подсказкам и компилятора 1.9.1 под Слакой 12.

При компиляции возникла только одна ошибка:
inet_pton.c: Symbol 'INADDRSZ' has not been declared.

В интернете нашёл http://svn.apache.org/repos/asf/apr/apr/trunk/network_io/unix/inet_pton.c
#ifndef INADDRSZ
#define INADDRSZ 4
#endif

Этой константы почему-то нигде в исходниках нет.

При запуске "моей" версии ntpd возникает ошибка
fatal: PRNG is not seeded: Connection refused
и размер "моей" - 69671 байт, в то время как Ваша имеет размер 73357 байт и работает прекрасно.

Подскажите, пожалуйста, в чём может быть причина, кроме компилятора?
Записан
Олег Большаков
Администратор
Житель форума

Сообщений: 2934



WWW
« Ответ #4 : 11 Февраля, 2014, 15:23:52 »

Так сходу сложно сказать, в чём может быть причина. Насколько помню, я использовал OpenWatcom более старой версии, 1.8 или 1.7. Не думаю, что дело в этом. Но, на всякий случай, попробуйте собрать при помощи старой версии компилятора.

Макрос INADDRSZ Вы опредилили правильно. Это размер адреса IPv4 в байтах.

Судя по ошибке, проблема в подключении к сервису prngd. Наша сборка работает при тех же самых условиях (запущен prngd, запуск выполняется от root)?

Если наша сборка работает прекрасно, то с какой целью Вы пересобираете OpenNTPD?
Записан

coder
Интересующийся

Сообщений: 9


« Ответ #5 : 12 Февраля, 2014, 04:57:12 »


Мы обнаружили, что если сервер времени и qnx-машины расположены "рядом",
из-за короткого пинга время на qnx-машинах не подводится,
и в syslog появляются строки:

ntpd[82]: reply from 192.168.1.36: negative delay -0.00228
ntpd[82]: reply from 192.168.1.36: negative delay -0.00064
ntpd[82]: reply from 192.168.1.36: negative delay -0.00069

В то же время, если сервер расположен "дальше", время подводится
замечательно (в нашем эксперименте 2 минуты отставания скорректируются за 5 часов):

ntpd[81]: peer 172.22.255.254 now valid
ntpd[81]: adjusting local clock by 169.234.s
ntpd[81]......
ntpd[81]: adjusting local clock by -0.612378s
ntpd[81]: clock is now synced

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

Записан
coder
Интересующийся

Сообщений: 9


« Ответ #6 : 12 Февраля, 2014, 04:59:34 »

Так сходу сложно сказать, в чём может быть причина. Насколько помню, я использовал OpenWatcom более старой версии, 1.8 или 1.7. Не думаю, что дело в этом. Но, на всякий случай, попробуйте собрать при помощи старой версии компилятора.

Макрос INADDRSZ Вы опредилили правильно. Это размер адреса IPv4 в байтах.

Судя по ошибке, проблема в подключении к сервису prngd. Наша сборка работает при тех же самых условиях (запущен prngd, запуск выполняется от root)?

Если наша сборка работает прекрасно, то с какой целью Вы пересобираете OpenNTPD?


Да, ровно при тех же самых условиях. Менял только файл ntpd.
Записан
kukabu
Пользователь

Сообщений: 44


« Ответ #7 : 12 Февраля, 2014, 09:01:25 »

а вас не смущает отрицательное значение пинга? что-то тут явно не так
Записан
coder
Интересующийся

Сообщений: 9


« Ответ #8 : 13 Февраля, 2014, 06:34:30 »

а вас не смущает отрицательное значение пинга? что-то тут явно не так

Не только у меня отрицательное значение.

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=680464

Цитировать
Dear Maintainer,

I am getting "negative delay" syslog messages for NTP servers that are
nearby.  For servers that are further away, things work normally.


Here is a syslog excerpt:

Jul  5 23:46:36 grif ntpd[5407]: peer 59.106.180.168 now valid
Jul  5 23:49:00 grif ntpd[5407]: peer 140.109.1.10 now invalid
Jul  5 23:53:47 grif ntpd[5407]: reply from 137.189.4.10: negative delay -0.000106s, next query 3039s
Jul  6 00:12:05 grif ntpd[5407]: peer 59.124.196.84 now valid
Jul  6 00:21:19 grif ntpd[5407]: peer 59.124.196.84 now invalid
Jul  6 00:31:31 grif ntpd[5407]: reply from 118.143.17.82: negative delay -0.000090s, next query 3213s
Jul  6 00:40:42 grif ntpd[5407]: peer 140.109.1.10 now valid
Jul  6 00:44:25 grif ntpd[5407]: reply from 137.189.4.10: negative delay -0.000137s, next query 3274s
Jul  6 01:13:58 grif ntpd[5407]: peer 59.124.196.84 now valid
Jul  6 01:25:33 grif ntpd[5407]: reply from 118.143.17.82: negative delay -0.000109s, next query 3145s

(137.189.4.10 and 118.143.17.82 are both close to me, ping-time-wise.)

I think I have tracked down the problem as follows:

When the client's clock has coarse resolution, e.g. when clocksource is
"jiffies" (giving 4ms clock ticks when CONFIG_HZ=250), and the NTP server
has very good ping time to the client, it is not uncommon to have received a
response from the server before the client gets a clock tick.

In such cases, T4 == T1, so the delay calculated by (T4 - T1) - (T3 - T2)
will always be negative.

Ironically, this only happens for servers that are close by, i.e.
theoretically better for the client.  If the ping time to the server is
sufficiently large, say more than 4ms, the client's clock will have a chance
to tick before getting the server's response, thus T4 > T1, and so delay
calculation works as intended

Кстати, запускаю на виртуалке , QNX 4.25 последняя
Записан
coder
Интересующийся

Сообщений: 9


« Ответ #9 : 13 Февраля, 2014, 06:43:43 »

Собрал с помощью компилятора Open Watcom 1.7.1, ошибка та же
fatal: PRNG is not seeded: Connection refused

Файл bsd-arc4random.c в папке openbsd-compat:


Код:

static int
RAND_status(void)
{
int i;
socklen_t len;
struct sockaddr_un sa;

if (randfd >= 0 && randtype != none)
return 1;

/* search for an entropy source */
for (i = 0; entropy_dev[i].device != NULL && randtype == none; i++ ) {
randdev = entropy_dev[i].device;
switch (entropy_dev[i].type) {
case dev:
randfd = open(randdev, O_RDONLY);
if (randfd >= 0) /* success */
randtype = entropy_dev[i].type;
break;
case egd:
if ((randfd = socket(PF_UNIX, SOCK_STREAM, 0)) == -1) {
log_warn("socket");
break;
}
memset((void *)&sa, 0, sizeof(sa));
sa.sun_family = AF_UNIX;
strlcpy(sa.sun_path, randdev, sizeof(sa.sun_path));
len = sizeof(sa);
if (connect(randfd, (struct sockaddr*)&sa, len) == -1) {
close(randfd);
randfd = -1;
} else {
randtype = entropy_dev[i].type;
}
break;
default:
fatal("RAND_status internal error");
}
}

if (randfd >= 0 && randtype != none)
return 1;
return(0);
}
В цикле перебирается 6 устройств, 3 dev, 3 egd, ни с одним не соединяется, и фунция RAND_status возвращает всегда ноль.

Мне кажется, что дело в каких-то библиотеках, которых у меня нет.
Записан
Олег Большаков
Администратор
Житель форума

Сообщений: 2934



WWW
« Ответ #10 : 13 Февраля, 2014, 19:39:22 »

Провели небольшое расследование. Похоже влияет версия библиотеки socket, с которой собирается OpenNTPD. Убедитесь, что линкуется библиотека из TCP/IP 5.
Записан

coder
Интересующийся

Сообщений: 9


« Ответ #11 : 14 Февраля, 2014, 06:53:27 »

Провели небольшое расследование. Похоже влияет версия библиотеки socket, с которой собирается OpenNTPD. Убедитесь, что линкуется библиотека из TCP/IP 5.

А как это сделать, подскажите, пожалуйста
Записан
Андрей Сеньков
Администратор
Опытный пользователь

Сообщений: 262



WWW
« Ответ #12 : 14 Февраля, 2014, 15:28:31 »

Провели небольшое расследование. Похоже влияет версия библиотеки socket, с которой собирается OpenNTPD. Убедитесь, что линкуется библиотека из TCP/IP 5.

А как это сделать, подскажите, пожалуйста

Я бы начал с проверки того, что в системе запущен TCP/IP стек версии 5.0 или 5.10, например, следующим образом:
Код:
# sin ve | grep Tcpip
//1/*/usr/ucb/Tcpip     Tcpip        5.10A   Nov 11 2010

Компоненты  среды исполнения tcprt версии 5.1 и инструментарий tcptk версии  5.0 могут быть установлены с инсталляционного диска QNX 4 Product Suite 2011.

После установки runtime и toolkit компонентов можно проверить корректность ссылок:
Код:
# ls -l /usr/tcp*

/usr/tcprt:
total 38
drwxrwxr-x  4 root      root           4096 Mar 22  2011 .
drwxrwxr-x 15 root      root           4096 Mar 22  2011 ..
drwxrwxr-x  5 root      root           4096 Mar 22  2011 4.25
drwxrwxr-x  5 root      root           4096 Mar 22  2011 5.10
lrwxrwxrwx  1 root      root             15 Mar 22  2011 current -> /usr/tcprt/5.10
-rwxr-xr--  1 root      root           2259 Nov 13  2010 switch.tcpip

/usr/tcptk:
total 33
drwxrwxr-x  4 root      root           4096 Mar 22  2011 .
drwxrwxr-x 15 root      root           4096 Mar 22  2011 ..
drwxrwxr-x  4 root      root           4096 Mar 22  2011 4.25
drwxrwxr-x  4 root      root           4096 Mar 22  2011 5.0
lrwxrwxrwx  1 root      root             14 Mar 22  2011 current -> /usr/tcptk/5.0

Записан

coder
Интересующийся

Сообщений: 9


« Ответ #13 : 17 Февраля, 2014, 04:56:38 »




Обновлюсь.
Скажите пожалуйста, когда указывается файл в опциях компилятора -lsocket  имеется в виду socket.lib ? Как из него узнать, какая это версия Tcpip?
Записан
Василий Дмитриев
Опытный пользователь

Сообщений: 295



« Ответ #14 : 17 Февраля, 2014, 09:24:56 »

Батенька, так у Вас рантайм сокет новенький, а компилитесь вы со старым. Может тут собака зарыта?
Записан

Санкции! Запрещаю Бараку Обаме и членам конгресса США читать мои посты!
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2016 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 26 Ноября, 2016, 04:21:42