Skip to main content

Instalar LibreNMS en Debian

Instalar libreNMS no se diferencia mucho de la instalación de otros paquetes basados en el stack LAMP (Linux, Apache, MySQL, PHP) como pueden ser Wordpress u otros.

Requisitos previos

Empezamos instalando una serie de paquetes básicos de Debian.

apt install apt-transport-https lsb-release ca-certificates wget

Instalamos las claves de los paquetes PHP de sury.

wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

Añadimos los repositorios de sury a la lista de paquetes de Debian

echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/sury-php.list

Realizamos un apt update para que se recoja la información de los nuevos repositorios

apt update

Instalación de paquetes

Procedemos a instalar los paquetes necesarios entre los que podemos ver python, snmp, fping, mariadb, etc

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 unzip whois

Creación del usuario

Crearemos un usuario libreNMS para que ejecute el paquete de libreNMS

useradd librenms -d /opt/librenms -M -r -s "$(which bash)"

Descarga de LibreNMS

Vamos a la carpeta opt y clonamos del repositorio de LibreNMS mediante git

cd /opt
git clone https://github.com/librenms/librenms.git

Permisos en la carpeta de LibreNMS

Procedemos a otorgar permisos al usuario librenms que hemos creado antes.

chown -R librenms:librenms /opt/librenms
chmod 771 /opt/librenms
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/

El comando setfacl  tendremos que usarlo si por lo que sea nos da en el futuro cualquier problema de permisos alguna de las carpetas o archivos de LibreNMS 

Instalar las dependencias de PHP

su - librenms
./scripts/composer_wrapper.php install --no-dev
exit

Como vemos hecho un su con el usuario librenms, hay que usar siempre esto para cualquier cosa que vayamos a realizar con librenms para evitar problemas

Zona horaria

Modificamos la zona horaria en PHP a través del php.ini

Recuerda modificar también la zona horaria en el sistema y configuramos ntp o chrony para mantener sincronizada la hora del sistema.

Configurar MariaDB

Procedemos a modificar los ajustes de MariaDB para nuestro sistema de monitorización LibreNMS

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

En la sección [mysqld] añadimos las siguientes líneas

innodb_file_per_table=1
lower_case_table_names=0

Reiniciamos MariaDB

systemctl enable mariadb
systemctl restart mariadb

Entramos en MariaDB para crear la base de datos

mysql -u root

Creamos la base de datos

CREATE DATABASE librenms CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

En este ejemplo usamos una base de datos llamada librenms y un usuario librenms, puedes usar cualquier nombre igual o diferente para la base de datos y el usuario.

Creamos el usuario y le otorgamos permisos

CREATE USER 'librenms'@'localhost' IDENTIFIED BY 'unapasswordsegura';
GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost';
exit

Configurar php-fpm

Para ello vamos a copiar el archivo de www para crear una versión específica para librenms

cp /etc/php/8.2/fpm/pool.d/www.conf /etc/php/8.2/fpm/pool.d/librenms.conf
vi /etc/php/8.2/fpm/pool.d/librenms.conf

Cambiamos en el archivo [www] por [librenms] y cambiamos el usuario y el grupo a librenms.

También cambiaremos el sock del listener de php

listen = /run/php-fpm-librenms.sock

Borramos el www.conf para ahorrar recursos de ejecución.

Configurar Nginx

Instalaremos nginx

apt install nginx

Ahora configuraremos nginx para nuestro librenms

vi /etc/nginx/sites-enabled/librenms.vhost

Introduciremos la siguiente configuración (recuerda cambiar el server_name por el tuyo )

server {
 listen      80;
 server_name librenms.eduardotaboada.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;
 }
}

Comprobamos que todo funciona

root@librenms:~# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Borramos el archivo por defecto de nginx, para que solo que de el de librenms y reiniciamos servicios

rm /etc/nginx/sites-enabled/default
systemctl reload nginx
systemctl restart php8.2-fpm