Ядро

Матеріал з NoDeny
Версія від 19:56, 29 жовтня 2016, створена Sv (обговорення | внесок) (Защищена страница «Ядро» ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено только администрат…)
Перейти до навігації Перейти до пошуку

NoDeny+ это не только веб-интерфейс. В фоне должны выполняться определенные действия, например, снятие абонплаты, подсчет трафика и т.д. Эти действия выполняет ядро биллинга: файл nokernel.pl

Ядро запускает модули, которые находятся в папке /usr/local/nodeny/kernel/. У каждого модуля есть конфигурационный файл с расширением cfg, в котором прописаны настройки, а также команда: следует или нет запускать данный модуль. Нет смысла запускать те модули, которые вам не нужны. В файле cfg за запуск отвечает переменная run, если она установлена в 1, то модуль запускается, если в 0 - нет:

run => 1,

Обратите внимание на структуру конфига: переменная => значение и в конце запятая.

Давайте получим список всех установленных модулей:

perl /usr/local/nodeny/nokernel.pl -L

YES напротив названия модуля означает, что модуль будет запускаться при старте ядра. Стартовать ядро необходимо так:

perl /usr/local/nodeny/nokernel.pl -d &

Здесь мы запустили ядро вручную и при перезагрузке оно само не запустится, поэтому необходимо прописать его старт в автозагрузку (я написал полный путь к интерпретатору perl, поскольку бывали случаи, что в некоторых системах при запуске rc.local не всегда устанавливались необходимые пути):

echo '/usr/bin/perl /usr/local/nodeny/nokernel.pl -d &' >> /etc/rc.local

Если вы ставили NoDeny по документации, то запуск в автозагрузке уже есть и лучше проверить, что нет дублирующего запуска:

cat /etc/rc.local

Если вдруг показало, что есть дубликат запуска nokernel.pl - удалите, но, внимание! На самом деле, допускается запуск нескольких ядер. Более того, иногда это необходимо.

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

Да, есть модули, которые могут тормозить. Например, заглушка. По сути - это вебсервер, написанный на перл. Когда у заблокированного абонента(тов) запущено много программ, которые делают запросы по http, эти все запросы идут на заглушку, которая будет непрерывно отвечать на них и просто не даст время на выполнение других модулей.

Также может забирать ресурсы модуль подсчета трафика (collectors), особенно если включена детализация.

Поэтому такие модули (cap, collectors), которые требуют ресурсы, необходимо запускать отдельной копией ядра:

perl /usr/local/nodeny/nokernel.pl -m=collectors -d &
perl /usr/local/nodeny/nokernel.pl -m=cap -d &

Главное не забыть:

  • установить переменную run => 0 для этих модулей
  • прописать в автозапуск в /etc/rc.local
  • в автозапуске должен быть запуск nokernel.pl без ключа -m только в одном экземпляре + возможно запуск нескольких ядер с ключем -m=имя модуля
  • не забыть указать ключ -d - это заставит лог писать в файл, а не выводить в консоль

Не забывайте, если конфиг начинается с подчеркивания - это фантом, если вы его отредактируете, скажем, измените переменную run, то при следующем запуске perl install.pl -x все изменения затрутся, поэтому менять надо файл modules/имя_модуля/create.kernel.имя_модуля.cfg

Не забывайте про логи в папке /usr/local/nodeny/logs/ из которых можно понять почему не запустилось ядро.

Кратко о модулях ядра

  • auth управляет авторизацией:
    • завершение авторизаций по таймауту. Если не включить модуль, то клиент, единожды авторизовавшись (авторизатором, pppoe и т.д), в админке будет авторизованным все время, не смотря на то, что давно уже отключился.
    • запись в лог авторизаций, благодаря чему можно узнать все сеансы подключений
    • освобождение динамических ip от привязки к клиентам, которые отключились
  • websession удаляет устаревшие сессии админки. Когда админ/клиент залогинился в админку, создается сессия, которая становится недействительной если не производится никаких действий определенный период времени. Время от времени нужно удалять такие сессии.
  • authserver принимает соединения от программ-авторизаторов. Если вы не используете такие программы - модуль следует отключить.
  • tmppays удаляет кредиты, срок которых завершен. Также восстанавливает границу отключения, если пришло время.
  • collectors опрашивает коллекторы сбора информации о трафике, обрабатывает ее и сохраняет в базе данных. В конфиге задаются тип коллектора и его параметры (адрес и т.д.). Также задаются общие параметры: период опроса и вести ли детализацию. Период опроса - это период, с которым информация будет сохраняться в базе данных, т.е информация записывается срезами, например, собирается минуту, группируется и сохраняется в БД.
  • system_clean удаляет устаревшую информацию. На данный момент - это удаление устаревшей информации по трафику. Время устаревания задается в настройках. Если вы ведете учет трафика клиентов и, что еще более важно, ведете детализацию по всем ip, с которым были соединения - вам необходимо удалять информацию о давнем трафике иначе рискуете получить переполнение диска. В зависимости от объема сети и ваших дисков установите время устаревания от 2 месяцев до года. Также модуль необходим при использовании блокирующих сообщений.
  • services завершает услуги, для которых пришло время, а также создает новую, если включен флаг автопродления.
  • balance переводит учетную запись в состояние "заблокирована", если баланс становится ниже границы отключения и установлен флаг "блокировать при лимите". Если упрощенно, то: блокирует клиентов с отрицательными балансами.
  • cap выводит «заглушку» когда доступ в интернет заблокирован клиенту.
  • dhcp - управляет авторизацией по dhcp
  • make_config - периодически создает конфигурационный файл, скажем, для какого-либо устройства. Предварительно требуется создание шаблона конфига иначе нет смысла запускать этот модуль
  • notifications - отправляет push-уведомления. Например, вы хотите, чтобы сообщения, которые вы отправляете абоненту, оперативно приходили к нему на смартфон и отображались в области уведомлений