1

CentOS 7 YUM DB_RUNRECOVERY: Fatal error, run database recovery

Misteriosamente il comando yum smette di funzionare e riceviamo il seguente errore:

[root@00 ~]# yum upgrade
errore: rpmdb: BDB0113 Thread/process 12664/139742821894208 failed: BDB1507 Thread died in Berkeley DB library
errore: db5 errore(-30973) da dbenv->failchk: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
errore: impossibile aprire l'indice Packages utilizando db5 - (-30973)
errore: impossibile aprire il database dei pacchetti in /var/lib/rpm
CRITICAL:yum.main:

Error: rpmdb open failed

Per risolvere è sufficiente rimuovere  database RPM , eseguire il rebuild e scaricare tutta la lista dei mirrors.

Creiamo una directory temporanea dove appoggiare i file del DB, così in caso di insuccesso potremo ripristinare il database:

[root@00 ~]# mv /var/lib/rpm/__db* /tmp/

Ora lanciamo la ricostruzione:

[root@00 ~]# rpm --rebuilddb

E per finire facciamo pulizia:

[root@00 ~]# yum clean all

A questo punto possiamo provare lo yum update o upgrade per vedere se tutto è tornato nella norma.




Migrare Zabbix 5.0 da CentOS 7 LAMP a Debian 10 LEMP

Migrazione Zabbix 5.0 da un server CentOS 7 a Debian 10 Buster con Nginx e MySQL.

 

Iniziamo con una premessa: seguire questa procedura in produzione senza creare disservizio è possibile solo nel caso in cui si abbia un database esterno al server che ospita Zabbix. In caso contrario, il disservizio si presenterà nel momento in cui verrà spostato il database.

Per ambienti non troppo grandi in cui il server Zabbix è anche server SQL, è bene calcolare i tempi per eseguire il DUMP completo del DB e il relativo import nel nuovo server. In tal modo sarà possibile indicare nella dichiarazione di disservizio il tempo corretto.

Iniziamo subito con la preparazione del server Debian 10 come server stand alone. Durante l’installazione di Debian viene richiesta la scelta dell’ambiente, a quel punto dobbiamo togliere la spunta su “Ambiente Grafico” e metterla su “server ssh” per poter prendere accesso da remoto (se necessario). Dobbiamo selezionare solo “Sistema base” senza altri pacchetti, prestando attenzione a non selezionare “Server web” poiché di default viene installato Apache2.

Primo passo, quindi, installare WGET e il repository ZABBIX 5.0:

# apt update && apt install -y wget vim
# wget https://repo.zabbix.com/zabbix/5.0/debian/pool/main/z/zabbix-release/zabbix-release_5.0-1+buster_all.deb
# dpkg -i zabbix-release_5.0-1+buster_all.deb

Passiamo subito all’installazione di Zabbix 5.0:

# apt-get update && apt install zabbix-server-mysql zabbix-nginx-conf

Ora che abbiamo installato Zabbix 5.0, passiamo a NGINX, PHP 7.3 e MySQL (quest’ultimo se non abbiamo già un server dedicato per i database):

# apt install nginx php-fpm php-mysql

Ora creiamo il classico file info.php:

# vim /var/www/html/info.php

Inseriamo il codice seguente:

<?php phpinfo(); ?>

Ora apriamo il file /etc/nginx/sites-available/default e aggiungiamo le direttive per poter interpretare le pagine scritte in php:

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
}

Inoltre, cambiamo la porta di ascolto di NGINX così quando metteremo il virtualhost per Zabbix non andrà in conflitto con il default.

Sostituiamo queste direttive:

listen 80 default_server;
listen [::]:80 default_server;

con le seguenti:

listen 82 default_server;
listen [::]:82 default_server;

ed ora riavviamo NGINX:

# systemctl restart nginx

Verifichiamo il corretto funzionamento aprendo al url http://<P_SERVER>:82/info.php

Passiamo all’installzione del RDBMS MySQL:

# apt-get install gnupg
# wget https://dev.mysql.com/get/mysql-apt-config_0.8.16-1_all.deb
# dpkg -i mysql-apt-config_0.8.16-1_all.deb
# apt-get update
# apt-get install mysql-community-server
# systemctl status mysql.service

Procediamo con la sicurezza di base del db server con il seguente comando:

# mysql_secure_installation

Ora creiamo database ed utente per Zabbix:

# mysql -u root -p -e "CREATE DATABASE zabbix character set utf8 collate utf8_bin;"
# mysql -u root -p -e "CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'password';"
# mysql -u root -p -e "GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';"

Non ci resta che verificare la connessione al DB tramite il PHP, apriamo il nostro file info.php

# vim /var/www/html/info.php

ed inseriamo queste righe di php prestando attenzione nella valorizzazione delle fariabile alle prime righe:

<?php
$user = "zabbix";
$password = "password";
$database = "zabbix";
$table = "todo_list";
try {
$db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
echo "<h2>CONNESSIONE AL DATABASE AVVENUTA CON SUCCESSO</h2><ol>";
foreach($db->query("SELECT content FROM $table") as $row) {
echo "<li>" . $row['content'] . "</li>";
}
echo "</ol>";
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}

Qualora ci fossero problemi di connessione apriamo il fie mysqld.cnf:

# vim /etc/mysql/mysql.conf.d/mysqld.cnf

aggiungiamo la entry “default_authentication_plugin= mysql_native_password”  subito sotto “[mysqld]“:

[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
default_authentication_plugin= mysql_native_password

Verifichiamo il corretto funzionamento aprendo al url http://<P_SERVER>:82/info.php, a questo punto dovremmo vedere il messaggio “CONNESSIONE AL DATABASE AVVENUTA CON SUCCESSO“.

A questo punto abbiamo davanti due possibilità: provare Zabbix 5.0 prima di importare il DB dal server CentOS oppure iniziare la migrazione dei dati. In questo secondo caso, passare direttamente alla connessione al DB (punto successivo).

Scegliendo la prima opzione, invece, importiamo i dati di default di Zabbix:

# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

Connessione al DB

A questo punto abbiamo NGINX e PHP correttamente funzionanti, non resta che verificare l’installazione di ZABBIX 5.0: il primo passaggio è quello di configurare il file /etc/zabbix/zabbix.conf con gli stessi parametri che avevamo sul server CentOS.

Arrivati al momento dalla configurazione delle credenziali di connessione al DB possiamo scegliere tra le seguenti opzioni:

  • inserire i parametri del DB locale,
  • inserire i dati del DB del server CentOS,
  • inserire i parametri del DB centralizzato.

Dobbiamo inserire i dati di connessione qui:

vim /etc/zabbix/zabbix_server.conf

e sostituire le seguenti entry:

DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=password

Nel caso in cui avessimo scelto la prima opzione, cioè qualora avessimo inserito i parametri del DB locale, potremmo provare la nostra installazione di Zabbix accedendo con nome utente e password di default alla seguente url http://<P_SERVER>. Il nome utente è “Admin” e la password è “zabbix”.

Qualora avessimo scelto la seconda o la terza opzione, cioè nel caso in cui avessimo inserito i dati del DB del server CentOS o del DB centralizzato, vedremmo la GUI lavorare con i dati di esercizio pertanto l’accesso alla url http://<P_SERVER> avvverrebbe con le utenze di produzione. Prestare attenzione: si tratta di dati di esercizio.

SCENARIO RDBMS ESTERNO

La procedura è praticamente terminata, non ci resta che iniziare ad acquisire i dati invertendo gli IP tra Debian 10 e CentOS 7, in questo modo non dovremo modificare nessun proxy o agent.

SCENARIO MYSQL INTERNO

Andiamo sul server CentOS e fermiamo Zabbix in modo da interrompere la scrittura dei dati sul DB:

# systemctl stop zabbix-server

Lanciamo il comando mysqldump per esportare tutto il DB su di un file:

# mysqldump -u user_zabbix -ppassword_zabbix db_zabbix > zabbix_server.sql

Portiamo il file zabbix_server.sql sul nostro server Debianb 10:

# scp zabbix_server.sql utente@IP_Debian:/tmp

Torniamo su Debian 10,  fermiamo Zabbix ed importiamo il DB:

# systemctl stop zabbix-server
# mysql -u user_zabbix -ppassword_zabbix db_zabbix < zabbix_server.sql

Attendiamo il tempo di import del DB, una volta terminato avremo spostato ZABBIX 5.0 da CentOS a Debian 10. Non ci resta ora che iniziare ad acquisire i dati invertendo gli IP tra Debian 10 e CentOS 7 ed eseguire lo start di zabbix-server:

# systemctl start zabbix-server

Finito!

 

Articolo correlato: Upgrade Zabbix 4.4 to Zabbix 5.0 Cenots 7.X




Upgrade Zabbix 4.4 to Zabbix 5.0 Cenots 7.X

Questa guida descrive i passaggi per eseguire l’aggiornamento di Zabbix dalla versione 4.4 alla 5.0.

Il primo step è fermare Zabbix.

# systemctl stop zabbix-server

Creiamo un backup del database e dei file della release 4.2

# mysqldump -u user_zabbix -ppassword_zabbix db_zabbix > zabbix_server.sql
# mkdir /opt/zabbix-backup/
# cp /etc/zabbix/zabbix_server.conf /opt/zabbix-backup/
# cp /etc/httpd/conf.d/zabbix.conf /opt/zabbix-backup
# cp -R /usr/share/zabbix/ /opt/zabbix-backup/
# cp -R /usr/share/doc/zabbix-* /opt/zabbix-backup/

Installiamo il repostory per la versione 5.0:

# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm

Passiamo all’upgrade dei pacchetti:

# yum upgrade zabbix-server-mysql zabbix-web-mysql zabbix-agent

Per finire la configurazione di Apache, anche se potrebbe non essere necessaria:

# yum install zabbix-apache-conf

Abbiamo terminato, avviamo Zabbix 5.0

# systemctl start zabbix-server
# systemctl start zabbix-agent

A questo punto parte l’upgrde del DB, possiamo seguire lo stato di aggiornamento direttamente dal file di log:

tail -f /var/log/zabbix/zabbix_server.log

Aggiornamento completato, nuova release in funzione!

Articolo correlato: Migrare Zabbix 5.0 da Centos 7 LAMP e Debian 10 LEMP




How To LEMP su CentOS 7

How To: Installare Linux, Nginx, MySQL, PHP 7 (LEMP) su CentOS 7

 

Un ambiente LEMP a differenza dell’ambiente LAMP (Linux, Apache, MySQL, PHP) differisce per il web server ENGINX.

In questo HOW TO andremo a vedere come installare PHP 7 FPM con Nginx per avere le massime prestazioni.

Il primo passo da fare è disabilitare il SELINUX, la cosa migliore sarebbe configurarlo ad hoc, ma questa operazione va eseguite prima della messa in esercizio del server.

 

Primo step installare Nginx

Come primo passaggio installiamo il repository EPEL e IUS. Utilizziamo il comodissimo script messo a disposizione sul sito ius.io per fare prima. Il curl ci aiuta a scaricare il setup.

curl 'https://setup.ius.io/' -o setup-ius.sh

ora eseguiamo lo script:

bash setup-ius.sh

Ora possiamo installare NGINX

yum install nginx

avviamo il webserver con il comando systemctl

systemctl start nginx

ora possiamo provare puntando nel nostro browser

http://indirizzo_ip_del_server/

Se vedi questa pagina allora possiamo abilitare NGINX all’avvio del sistema, al BOOT:

systemctl enable nginx

 

Secondo Step installare MySQL

Abbiamo due possibilità, installare MySQL o MariaDB, sono la stessa cosa nati dallo stesso adre Ulf Michael Widenius noto anche come Monty.

In questa guida opteremo per MySQL, il comando è il seguente:

 

yum install mysql-server mysql

Ora passiamo alla prima configurazione del nostro RDBMS: start del demone:

service mysqld status

 

e poi messa in sicurezza di base:

mysql_secure_installation

Siamo pronti per abilitare anche MySQL al boot:

systemctl enable mysqld

Terzo Step installazione di PHP-FPM 7

Ora passiamo all’installazione dei PHP-FPM (FastCGI Process Manager) 7, l’ultima versione del php disponibile ad oggi eseguito sulla porta 9000:

 

yum install php70u-fpm-nginx php70u-cli php70u-mysqlnd

installato apriamo il file di configurazione e sostituiamo l’utente e i l gruppo d’esecuzione:

vim /etc/php-fpm.d/www.conf

 

; When POSIX Access Control Lists are supported you can set them using
; these options, value is a comma separated list of user/group names.
; When set, listen.owner and listen.group are ignored
;listen.acl_users = apache,nginx
;listen.acl_users = apache
listen.acl_users = nginx
;listen.acl_groups =

 

a questo punto riavviamo creiamo un vhosts, per prima cosa per tenere in ordine il nostro ambiente posizioniamo i file dei virtual hosts in una directory:

mkdir /etc/nginx/sites-available

 

passiamo al file nginx.conf l’istruzione di leggere il contenuto della nuova direcotry

 

vim /etc/nginx/nginx.conf
aggiungendo la riga

include /etc/nginx/sites-enabled/*;

 

;server {
listen 81.127.13.234:80;
server_name stat.lbit-solution.it;
location / {
try_files $uri $uri/ =404;
root /var/www/vhosts/lbit-solution.it/stat.lbit-solution.it/;
index index.php index.html index.htm;
}

error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/vhosts/lbit-solution.it/stat.lbit-solution.it/;
}

location ~ \.php$ {
root /var/www/vhosts/lbit-solution.it/stat.lbit-solution.it/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/vhosts/lbit-solution.it/stat.lbit-solution.it$fastcgi_script_name;
include fastcgi_params;
}
}

server {
listen 81.127.13.234:443 ssl;
server_name stat.lbit-solution.it;

### SSL cert files ###
ssl_certificate /var/www/vhosts/lbit-solution.it/ssl/stat.lbit-solution.it.crt;
ssl_certificate_key /var/www/vhosts/lbit-solution.it/ssl/stat.lbit-solution.it.key;

### Add SSL specific settings here ###

ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers RC4:HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
keepalive_timeout 60;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

### SSL log files ###
access_log /var/www/vhosts/lbit-solution.it/logs/stat.lbit-solution.it.ssl-access.log;
error_log /var/www/vhosts/lbit-solution.it/logs/stat.lbit-solution.it.ssl-error.log;

location / {
try_files $uri $uri/ =404;
root /var/www/vhosts/lbit-solution.it/stat.lbit-solution.it/;
index index.php index.html index.htm;
}

error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/vhosts/lbit-solution.it/stat.lbit-solution.it/;
}

location ~ \.php$ {
root /var/www/vhosts/lbit-solution.it/stat.lbit-solution.it/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/vhosts/lbit-solution.it/stat.lbit-solution.it$fastcgi_script_name;
include fastcgi_params;
}
}

Prepariamo le direcotry del virtual hosts:

mkdir -p /var/www/vhosts/lbit-solution.it/{ssl,logs,httpdocs,stat.lbit-solution.it}

E ora riavviamo php-fpm e Nginx


sudo systemctl restart php-fpm
sudo systemctl restart nginx