суперсервера inetd/xinetd в своих целях

Настройка, программирование, распределённые вычисления

Модераторы: Olej, bellic, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

суперсервера inetd/xinetd в своих целях

Непрочитанное сообщение Olej » 23 апр 2012, 20:45

Это тема - продолжение того, что названо в viewtopic.php?f=9&t=1661#p3702:
А вот ещё 2 статьи:
- Сеть IP - когда писать программы лень
- Сервер TCP/IP... много серверов хороших и разных
... это я написал по поводу простого использования inetd году в ... 2003-м (? или чуть раньше ... это ещё отрабатывалось в ОС QNX).
P.S. удивило, что поиск по фразе "много серверов хороших и разных" показал, что статья эта за прошедшие годы растиражирована по интернет в десятках, если не сотнях экземпляров...
Поскольку а). по этим поводам мне не раз приходилось обращаться и б). за 10 лет кое-что поменялось (но мало) и в). всё это отрабатывалось в ОС QNX + хотелось бы адаптировать к Linux - то решил я такую ревизию собрать в отдельные темы (для себя).
Если кому интересно будет - пользуйтесь.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: суперсервера inetd/xinetd в своих целях

Непрочитанное сообщение Olej » 23 апр 2012, 20:47

Как я там, в исходной теме, позже успел дописать:
Olej писал(а): P.P.S. (дописано позже)
Вот самые лучшие экземпляры этих статей, на сайте журнала СТА Изображение :
http://www.cta.ru/online/online_progr-nets.htm
- для скачивания: здесь и текст, и примеры архивом, и всё с нормальной разметкой... в отличие от десятков пыанэрски-подростковых сайтов, которые покопировали "абы було".
- то в качестве исходного материала 10 летней давности берём именно эти файлы с журнала СТА.

Заметно поменялось что? 2 пункта:
- адаптировать это не под строго выдерживающую стандарты POSIX OS QNX, а под "колхозную" OS Linux, где к стандартам API достаточно вольное отношение...
- всё это использовать не через inetd, а через xinetd, который за эти годы стал постфактум-стандарт в Linux.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: суперсервера inetd/xinetd в своих целях

Непрочитанное сообщение Olej » 23 апр 2012, 21:00

Собираем материалы по конфигурированию xinetd (я много работал раньше с inetd, но в xinetd его заменившего многое поменялось).

1.
Установка и кофигурирование xinetd
Файл конфигурации xinetd - /etc/xinetd.conf (по умолчанию) отличается по синтаксису от файла конфигурации inetd.
- у меня в рабочем дистрибутиве (Fedora 15) конф. фал /etc/xinetd.conf, после определения ряда общих констант-параметров, ссылается на каталог - но это обычная практика:

Код: Выделить всё

includedir /etc/xinetd.d
- а все входящие в xinetd.conf текстовые секции (то, что было строками в inetd.conf) представлены отдельными файлами в этом каталоге, которые обрабатываются последовательно:

Код: Выделить всё

[root@notebook etc]# tree /etc/xinetd.d 
/etc/xinetd.d
├── chargen-dgram
├── chargen-stream
├── cvs
├── daytime-dgram
├── daytime-stream
├── discard-dgram
├── discard-stream
├── echo-dgram
├── echo-stream
├── pure-ftpd
├── rsync
├── tcpmux-server
├── tftp
├── time-dgram
├── time-stream
└── xproftpd

0 directories, 16 files
2. это из man (только я не обнаружил из какой UNIX-системы man)
http://lantan.chat.ru/xinetd.html
УПРАВЛЕНИЕ XINETD

xinetd выполняет определенные действия при получении определенных сигналов. Действия ассоциированные с соответствующими сигналами могут быть переопределены путем редактирования config.h и последующей компиляции.

SIGUSR1
вызывает мягкую переконфигурацию, это означает что xinetd перечитывает файл конфигурации и подстраивается под изменения.
SIGUSR2
вызывает жесткую переконфигурацию, это значит то же самое что и мягкая переконфигурация за исключением того что все серверы для сервисов которые стали недоступны принудительно завершаются. Контроль доступа заново выполняется для выполняющихся серверных процессов, путем проверки удаленного хоста, времени доступа и количества выполняющихся серверов. Если число выполняющихся процессов превышает заданное, произвольным образом выбранные процессы убиваются что бы число оставшихся удовлетворяло поставленному условию. Так же если флаг INTERCEPT был сброшен или установлен, все серверы обеспечивающие этот сервис завершаются. Все это выполняется для того что бы после жесткой реконфигурации не осталось не одного работающего процесса обрабатывающего запросы с адресов не соответствующих критериям контроля доступа. .
SIGQUIT
приводит к завершению программы.
SIGTERM
завершает все выполняющиеся серверы перед завершением xinetd.
SIGHUP
приводит к генерации дампа внутреннего состояния (по умолчанию файл дампа /tmp/xinetd.dump; что бы сменить отредактируйте config.h и перекомпилируйте).
SIGIOT
вызывает проверку внутренней целостности что бы проверить что структуры данных используемые программой не повреждены. После завершения проверки xinetd генерирует сообщение о результате проверки.
При реконфигурации лог-файлы закрываются и вновь открываются. Это позволяет удалять старые логи.
http://lantan.chat.ru/xinetd.conf.html - конфигурирование, более чем достаточно.

3. Управление Internet-службами → Управление сетевыми службами: описание демона xinetd
4. Суперсервер и IPv6
5. Миграция с inetd на xinetd

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: суперсервера inetd/xinetd в своих целях

Непрочитанное сообщение Olej » 24 апр 2012, 00:38

Olej писал(а): Заметно поменялось что? 2 пункта:
- адаптировать это не под строго выдерживающую стандарты POSIX OS QNX, а под "колхозную" OS Linux, где к стандартам API достаточно вольное отношение...
- всё это использовать не через inetd, а через xinetd, который за эти годы стал постфактум-стандарт в Linux.
Итак, по п.1
Программный код того, что станет теперь полноценным TCP сервером станет выглядеть так:

Код: Выделить всё

#include <iostream>
#include <iomanip>
using namespace std;
#include <stdlib.h>
#include <stdio.h>

int main( void ) {
   char buf[ 80 ];
   // установить построчный режим ввода, но и это не обязательно…
   setvbuf( stdout, NULL, _IOLBF, 0 ); // или setlinebuf( stdout );
   while( true ) {
      cin >> buf;
      cout << buf << endl;
   }
   return EXIT_SUCCESS;
}
- всё! это параллельный многопоточный (точнее многопроцессный - fork) сервер, пока только эхо-сервер;
- я его специально выписал на С++, чтобы: а). смешнее было, б). чтоб соответствовало старой редакции, но в). более того, чтобы проследить прозрачность через большее число подключаемых .so библиотек.
- и не нужно вам, товарищи программисты, уродоваться с сокетами и их параметрами ;-)

Теперь дополнительно:

1. в конец где-то /etc/services допишем

Код: Выделить всё

[olej@notebook etc]$ tail -n2 /etc/services  
mycopy          50000/tcp               #my echo service
mycopy          50000/udp              #my echo service
- теперь мы определили новую сетевую службу (даже 2).

2. в каталоге /etc/xinetd.d создадим новый файл (имя его, предполагаю, не имеет никакого значения), пока в него достаточно вписать:

Код: Выделить всё

[root@notebook xinetd.d]# cat /etc/xinetd.d/mycopy 
service mycopy
{
    disable = no
    protocol = tcp
    wait = no
    user = olej
    server = /home/olej/2012_WORK/OWN.BOOKS/examples.DRAFT/my.net/inetd/mycopy
}
- это весьма грубо, особенно относительно пути server, да и user тоже ... но мы это обыграем попозже...

3. запускаем или перезапускаем сам xinetd:

Код: Выделить всё

[root@notebook xinetd.d]# /etc/init.d/xinetd restart
Restarting xinetd (via systemctl):                         [  OK  ]
[root@notebook xinetd.d]# ps -A | grep xinetd
12507 ?        00:00:00 xinetd
4. если нужно заставить xinetd перечитать конфигурацию (подправляли /etc/xinetd.d/mycopy), посылаем ему сигнал :

Код: Выделить всё

[root@notebook xinetd.d]# kill -SIGHUP 12507
[root@notebook xinetd.d]# ps -A | grep xinetd
12507 ?        00:00:00 xinetd
- в этом месте в многих описаниях xinetd ошибка, или описания к старым версиям, или к другим ОС ... здесь всё как у inetd.

Большинство этих действий потребуют прав root!

Теперь мы готовы работать со своим сервером:

Код: Выделить всё

[olej@notebook ~]$ telnet 127.0.0.1 50000
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
123
123
asdf
asdf
^]

telnet> close
Connection closed.
P.S. изменения относительно 10-летней давности - малозначительны! ;-)
Вложения
my.net.tgz
(3.75 КБ) 561 скачивание

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: суперсервера inetd/xinetd в своих целях

Непрочитанное сообщение Olej » 25 апр 2012, 01:58

Olej писал(а): - и не нужно вам, товарищи программисты, уродоваться с сокетами и их параметрами ;-)
В соседней здесь теме много серверов хороших и разных один из вариантов сервера - на использовании xinetd. Тестирование времени реакции (а там используется наихудший случай, когда сервер подымается на одну ретрансляцию после чего обрубает соединение, как это делает HTTP-сервер) даёт значение в 10 раз хуже, но самого наилучшего случая, когда параллельный сервер обрабатывает запросы в потоках! Для многих и многих практических целей это вполне достаточный результат.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: суперсервера inetd/xinetd в своих целях

Непрочитанное сообщение Olej » 27 апр 2012, 21:08

Я полностью переписал эту давнюю статью + все к ней примеры, адаптировав всё это а). к Linux, б). к xinetd вместо inetd.
TcpSimpl-new.tgz
(25.19 КБ) 635 скачиваний
- это текст.

xinetd.1.tgz
(135.04 КБ) 657 скачиваний
- а это архив примеров.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: суперсервера inetd/xinetd в своих целях

Непрочитанное сообщение Olej » 05 май 2012, 16:38

Olej писал(а): Я полностью переписал эту давнюю статью + все к ней примеры, адаптировав всё это а). к Linux, б). к xinetd вместо inetd.
Статью В.Костромин выложил в публикациях сайта: "Сеть IP — когда писать программы лень".

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: суперсервера inetd/xinetd в своих целях

Непрочитанное сообщение Olej » 05 май 2012, 18:02

Olej писал(а):
Olej писал(а): Я полностью переписал эту давнюю статью + все к ней примеры, адаптировав всё это а). к Linux, б). к xinetd вместо inetd.
Статью В.Костромин выложил в публикациях сайта: "Сеть IP — когда писать программы лень".
+ показал обсуждение этой публикации на LOR.

Как им статья попала в обсуждение + то, что эта гопота с LOR вообще что-то читает, кроме себя любимых в своей тусне, (ну, на худой конец, хоть бы газеты ... в клозете ;-) ) - это для меня стало большой неожиданностью ;-)

Но то, что там из публики LOR 7 отзывов на сейчас высказаны типа:
Познавательно.
- уже хорошо, не зря я этот текст перелопачивал - как минимум, 7-м человекам это как-то на пользу пригодится.

Но на что обратило внимание это обсуждение в LOR, это то, что они так и не поняли, что этот текст делался - исключительно для программиста-разработчика, а никак не на администратора или какого-то юзера... Именно разработчику, в качестве напоминания, как простейшим путём и минимальными затратами наделать себе тест-серверов, которые будут "подыгрывать" нужные ответы в ходе разработки программ реального сетевого проекта.

Этот текст первоначально и был написан по ходу разработки реального ("железного") проекта в QNX (где средств тестирования и диагностики будет поменьше доступных) ... Если кому приходилось ездить пригородным ж/д сообщением в Севастополе, Одессе, Львове - то вот те турникеты, которые считывают и регистрируют штрих-кодовые билетики, и контролируют их совместно с сервером продаж
билетов - это и есть тот проект, при отработке которого на разных его этапах массово использовались вот такие подыгрывающие сервера, замещающие реальные но отсутствующие компоненты системы. Вот такой техникой тест-серверов удалось очень сильно подтолкнуть развитие того проекта. И вот тогда в полу-шутку и была написана эта статья.

Я теперь смотрю, что в ней ни слова не сказано в качестве какого инструмента предлагается посмотреть на эту технику.
И в этом моё упущение, конечно.
Потому, что когда на LOR пишут, что в качестве сервера можно и утилиту cat использовать, то они совершенно правы ... в своём видении предмета. Но в качестве инструмента, применительно к предполагаемой области использования, здесь совершенно "до фени" кого использовать, вопрос здесь в том как использовать!

homecluster
Писатель
Сообщения: 23
Зарегистрирован: 24 окт 2012, 20:23
Контактная информация:

Re: суперсервера inetd/xinetd в своих целях

Непрочитанное сообщение homecluster » 29 окт 2012, 22:29

Olej писал(а): Потому, что когда на LOR пишут...
Дался вам этот LOR. Красивое название и никчёмная публика. Может мы вернёмся к теме дистрибутива для персонального суперкомпьютера?

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: суперсервера inetd/xinetd в своих целях

Непрочитанное сообщение Olej » 30 окт 2012, 16:25

homecluster писал(а):
Olej писал(а):Потому, что когда на LOR пишут...

Дался вам этот LOR. Красивое название и никчёмная публика.
Мне "до фени" конкретно LOR ... как, впорочем, и всякий другой околокомпьютерный тусняк.
Мне интересно только позитивные отзывы, и то, что предлагаемые мной к обсуждению программные техники оказались полезны и интересны хотя бы одному разработчику.
homecluster писал(а):Может мы вернёмся к теме дистрибутива для персонального суперкомпьютера?
Вернёмся :lol: ... : Помогите поднять кластер.
Только разговор принимает такой оборот, что тема для такого обсуждения должна бы быть другая и называться по-другому.

Ответить

Вернуться в «Сети»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 10 гостей