Инструменты пользователя

Инструменты сайта


raspberry_pi:pi_4_model_b:raspberry_pi_os:librenms:installation

Установка LibreNMS на Raspberry Pi OS (64-bit)

Достаточно долгое время у меня работал поток NodeRED, вполне успешно мониторивший сеть и отправляющий мне уведомления, когда что-то отваливалось. Но к нему у меня была одна претензия – не было панели управления и ситуативного мониторинга, а пилить ее с помощью плагина node-red-dashboard мне совершенно не хотелось! В итоге решился и пошел искать…

Сперва остановился на Icinga 2, но, вдоволь намучившись с установкой и все же запустив ее на 64-битной системе, обнаружил, что это не совсем то, что я ожидал – «из коробки» оно не работает совершенно! Мало того, что помимо ядра нужно ставить Icinga Web 2, дабы хоть что-то видеть, так еще и Icinga Director, чтобы управлять всем этим не залезая в консоль и конфиги! И все это устанавливается с собирается исключительно с матом… моим матом на всех знакомых и не очень языках! К слову, Icinga Director я так полностью и не уговорил работать… Но не суть, т.к. к тому времени я понял, что это пустая трата времени и средства не соответствуют задаче, т.к. мало поставить, нужно еще и настроить, а при первом взгляде на все это… становится печально.

Выругавшись, пошел искать дальше и, как позже выяснилось, угадал, т.к. LibreNMS меня более чем удовлетворила! – ставится не без труда, но вполне быстро и «из коробки» имеет все, что мне нужно1)!

Установка и настройка

Как оказалось, в официальной документации нет варианта инструкции по установке LibreNMS на Debian 11 вместе c Apache2), поэтому в процессе я вел заметки, чтобы собрать все воедино.

Но потом почесал репу, снес Apache и поставил Nginx, что отразил в сей инструкции!

Зависимости

В репозитории Debian 11 (bullseye) нет PHP 8.x, максимально, что там есть на сегодня, это 7.4, а LibreNMS требуется версия PHP не ниже 8.1. Соответственно, для начала нужно подключить дополнительный репозиторий, а потом установить зависимости:

  1. переключаемся в привилегированный режим

    sudo -s
  2. загружаем открытый ключ

    wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
  3. открываем новый файл конфигурации «apt»

    nano /etc/apt/sources.list.d/sury-php.list

    и добавляем в него, сохраняем, закрываем

    deb https://packages.sury.org/php/ bullseye main
  4. обновляем индекс пакетов

    apt update
  5. устанавливаем зависимости

    1. для Nginx

      apt install acl curl fping git graphviz imagemagick mariadb-client mariadb-server mtr-tiny nginx-full nmap php-cli php-curl php-fpm php-gd php-gmp php-json php-mbstring php-mysql php-snmp php-xml php-zip python3-dotenv python3-pymysql python3-redis python3-setuptools python3-systemd python3-pip rrdtool snmp snmpd whois
    2. для Apachae2

      apt install acl curl apache2 fping git graphviz imagemagick libapache2-mod-fcgid mariadb-client mariadb-server mtr-tiny nmap php-cli php-curl php-fpm php-gd php-gmp php-json php-mbstring php-mysql php-snmp php-xml php-zip rrdtool snmp snmpd whois python3-pymysql python3-dotenv python3-redis python3-setuptools python3-systemd python3-pip

:!: Тут стоит отметить, что я намеренно ставлю версию 8.1, а не последнюю3), т.к. при первоначальной установке я столкнулся с проблемой – сыпались стили web-интерфейса, не показывались графики и на каждом углу были предупреждения типа «Exception: Creation of dynamic property … is deprecated». В общем, погуглив немного, я предположил, что это проблема версии PHP. И частично это оказалось верно – после понижения версии, большая часть предупреждений исчезла, но не все и web-интерфейс не начал нормально работать.

FIXME Позже я, конечно, разобрался, что проблема была в опрометчиво установленном мной переключателе «reporting.dump_errors» в «Global Settings» → «System» → «Reporting», но версию уже менять не стал. Поэтому, скорее всего, можно ставить последнюю, используя оригинальную строку.

FIXME Если web-интерфейс LibreNMS дико долго загружается, особенно, там, где есть графики, на вкладке «Alet Rules» или «Global Settings», и непонятно что, а всякие php-fpm и прочие Nginx'ы настроены на самую великую производительность и вы в конец заебались… посмотрите, может у вас тоже включена галочка «Error reporting» на странице «About LibreNMS»?!! Если это так, попробуйте… ну так, случайно ее выключить и отчистить кэш… Я офигел!.. Одни маты, чо…

LibreNMS

  1. Добавляем пользователя «librenms» с указанием домашнего каталога

    useradd librenms -d /opt/librenms -M -r -s "$(which bash)"
  2. меняем каталог и клонируем LibreNMS из GitHub4)

    cd /opt && git clone https://github.com/librenms/librenms.git
  3. меняем группу и владельца

    chown -R librenms:librenms /opt/librenms && chmod 771 /opt/librenms
  4. устанавливаем ACL

    setfacl -d -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/
    setfacl -R -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/

PHP

  1. Заходим под пользователем librenms

    su - librenms
  2. устанавливаем дополнительные зависимости PHP5) и выходим

    ./scripts/composer_wrapper.php install --no-dev && exit
  3. устанавливаем часовой пояс для PHP, раскомментировав параметр «date.timezone» и установив значение в формате «Asia/Vladivostok»6) в секции «[Date]» в двух файлах7)

    nano /etc/php/8.2/fpm/php.ini
    nano /etc/php/8.2/cli/php.ini

MySQL

  1. Открываем конфигурацию MariaDB

    nano /etc/mysql/mariadb.conf.d/50-server.cnf

    и в конце секции «[mysqld]» добавляем, сохраняем, закрываем

    innodb_file_per_table=1
    lower_case_table_names=0
  2. активируем и перезапускаем службу БД

    systemctl enable mariadb && systemctl restart mariadb
  3. открываем консоль MySQL

    mysql -u root -p
  4. добавляем новую базу данных, создаем пользователя с паролем «password»8) и даем ему все разрешения на эту базу

    CREATE DATABASE librenms CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    CREATE USER 'librenms'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost';
    FLUSH PRIVILEGES;
  5. выходим из консоли

    exit

PHP-FPM

Клонируем9) конфигурацию по умолчанию и открываем ее

cp /etc/php/8.2/fpm/pool.d/www.conf /etc/php/8.2/fpm/pool.d/librenms.conf && nano /etc/php/8.2/fpm/pool.d/librenms.conf
  1. меняем название секции «[www]» на «[librenms]»,
  2. меняем пользователя и группу на «librenms»,
  3. меняем прослушиваемый сокет на «listen = /run/php-fpm-librenms.sock».

FIXME Дополнительно можно исправить следующие настройки10):

pm = dynamic
pm.max_children = 50
pm.start_servers = 7
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.process_idle_timeout = 10s
pm.max_requests = 500

После этих корректировок из логов пропали предупреждения:

  • «[25-Mar-2023 15:01:02] WARNING: [pool librenms] server reached pm.max_children setting (5), consider raising it» и
  • «[25-Mar-2023 16:41:31] WARNING: [pool librenms] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 0 idle, and 5 total children».

Web-сервер

По сути, на маленьких проектах работают совершенно одинаково, поэтому…

Nginx

  1. Создаем конфигурацию

    nano /etc/nginx/sites-enabled/librenms.vhost
  2. добавляем в нее, делая правки по желанию и знаниям11), сохраняем, закрываем

    server {
     listen      80;
     server_name librenms.example.com;
     root        /opt/librenms/html;
     index       index.php;
    
     charset utf-8;
     gzip on;
     gzip_types text/css application/javascript text/javascript application/x-javascript image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
     location / {
      try_files $uri $uri/ /index.php?$query_string;
     }
     location ~ [^/]\.php(/|$) {
      fastcgi_pass unix:/run/php-fpm-librenms.sock;
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      include fastcgi.conf;
     }
     location ~ /\.(?!well-known).* {
      deny all;
     }
    }
  3. удаляем конфигурацию по умолчанию

    rm /etc/nginx/sites-enabled/default
  4. перезапускаем Nginx и FPM

    systemctl restart nginx php8.2-fpm

Apache

  1. Создаем конфигурацию

    nano /etc/apache2/sites-available/librenms.conf
  2. добавляем в нее, делая правки по желанию и знаниям12), сохраняем, закрываем

    <VirtualHost *:80>
      DocumentRoot /opt/librenms/html/
      ServerName  librenms.example.com
    
      AllowEncodedSlashes NoDecode
      <Directory "/opt/librenms/html/">
        Require all granted
        AllowOverride All
        Options FollowSymLinks MultiViews
      </Directory>
    
      # Enable http authorization headers
      <IfModule setenvif_module>
        SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
      </IfModule>
    
      <FilesMatch ".+\.php$">
        SetHandler "proxy:unix:/run/php-fpm-librenms.sock|fcgi://localhost"
      </FilesMatch>
    </VirtualHost>
  3. отключаем конфигурацию по умолчанию, активируем модули и включаем нашу конфигурацию

    a2dissite 000-default && a2enmod proxy_fcgi setenvif rewrite && a2ensite librenms.conf
  4. перезапускаем Apache и FPM

    systemctl restart apache2 php8.2-fpm

Прочее

  1. Добавляем конфигурацию автозавершения командной строки

    ln -s /opt/librenms/lnms /usr/bin/lnms
    cp /opt/librenms/misc/lnms-completion.bash /etc/bash_completion.d/
  2. добавляем конфигурацию Cron

    cp /opt/librenms/librenms.nonroot.cron /etc/cron.d/librenms
  3. добавляем конфигурацию ротации лог-файлов

    cp /opt/librenms/misc/librenms.logrotate /etc/logrotate.d/librenms
  4. выходим из пользователя «root»

    exit

Завершение настройки

Все! Осталось перейти по адресу сервера браузером и завершить настройку. В конце соглашаемся с прохождением проверки13) и доделываем, что оно просит.

Резервное копирование

Для резервного копирования можно использовать этот скрипт с такой конфигурацией14):

files.txt
/etc/cron.d/librenms
/etc/php/8.2/fpm/php.ini
/etc/php/8.2/cli/php.ini
/etc/mysql/mariadb.conf.d/50-server.cnf
/etc/php/8.2/fpm/pool.d/librenms.conf
/etc/nginx/sites-enabled/librenms.vhost
/etc/syslog-ng/conf.d/librenms.conf
/etc/snmp/snmpd.conf
/etc/default/rrdcached
/etc/snmp/mysql.cnf
/etc/apt/apt.conf.d/10periodic
/etc/snmp/smart.config
/etc/snmp/systemd.json
/opt/librenms/rrd
/opt/librenms/.env
/opt/librenms/config.php

:!: Обратите внимание, что в этот список входят файлы конфигураций дополнительных компонентов, упомянутых в других статьях из раздела ниже.

mysqldbs.txt
librenms

Другие статьи

Дисклеймер

  • Использование материалов данной базы знаний разрешено на условиях лицензии, указанной внизу каждой страницы! При использовании материалов активная гиперссылка на соответствующую страницу данной базы знаний обязательна!
  • Автор не несет и не может нести какую либо ответственность за последствия использования материалов, размещенных в данной базе знаний. Все материалы предоставляются по принципу «как есть». Используйте их исключительно на свой страх и риск.
  • Все высказывания, мысли или идеи автора, размещенные в материалах данной базе знаний, являются исключительно его личным субъективным мнением и могут не совпадать с мнением читателей!
  • При размещении ссылок в данной базе знаний на интернет-страницы третьих лиц автор не несет ответственности за их техническую функциональность (особенно отсутствие вирусов) и содержание! При обнаружении таких ссылок, можно и желательно сообщить о них в комментариях к соответствующей статье.
1)
В моих приоритетах, главное – ICMP и бонусом SNMP, который я все же развернул и доволен, как слон кучей прикольных графиков!
2)
А поставить что-то более-менее сложное на *nix без инструкции и не задолбаться в конец… это надо быть супер-пупер-профессионалом, которым я, увы, не являюсь.
3)
На сегодня это 8.2.
4)
На сегодня, это версия 23.2.0.
5)
Если используется прокси-сервер или есть ошибки с подключением, смотрим обходной путь тут.
6)
Возможные значения указаны тут.
7)
Обратите внимание, что путь отличается в зависимости от версии PHP!
8)
Естественно, нужно заменить на свой!
9)
Опять же – разные пути для разных версий PHP!
10)
По рекомендациям из Интернетов.
11)
Без всего этого, достаточно поправить только «server_name».
12)
Без всего этого, достаточно поправить только «ServerName».
13)
Если что, туда можно попасть через меню или по прямой ссылке «http://server-addr/validate».

Обсуждение

Ваш комментарий:
S R R U D A P C K Y F Y U T F᠎ G
 
Последнее изменение: 2023/05/13 12:24 — Николай Солошин