Problèmes sur CentOS 6

Comment les résoudres ?

Parmis les problèmes relatifs à la gestion de serveur centos 6 ou 7 , on se retrouve souvent avec des situations où la documentation est éparpillée partout sur internet et donc ouvre la voie vers des heures de recherches infructueuses, cet article va servir à centraliser les erreurs rencontrées et leurs solutions.

Je dispose d'un VPS avec une connection SSH , ce vps est une machine virtuelle faisant fonctionner centos6.

Problème d'édition du fichier resolv.conf

Parmis les problèmes que nous retrouvons souvent il y a l'édition du fichier /etc/resolv.conf qui est automatiquement réécrit par networkmanager, l'interface graphique et l'administrateur système généralement bloque l'édition de ce fichier. Il va va falloir contourner cette protection :

On créé un fichier resolv.home qui va réécrire le fichier resolv.conf au démarrage de la distribution centos. Les serveurs de noms nameserver sont personnalisables, par défaut networkmanager utilise généralement celui de google 8.8.8.8.

nano /etc/resolv.home 
# Generated by NetworkManager 
# ifcfg files in /etc/sysconfig/network-scripts like so: 
# # DNS1=xxx.xxx.xxx.xxx 
# DNS2=xxx.xxx.xxx.xxx # correspond aux serveur de nom les plus proches sur opennic
option rotate
nameserver 75.127.14.107
nameserver 198.100.146.51

Sauvegarder puis quitter.

Création d'un script shell permettant de hooker (détourner) le processus de réécriture du fichier resolv.conf .

nano /etc/hooks.sh 
#/bin/bash
service network stop
cp /etc/resolv.home /etc/resolv.conf
service network start

Sauvegarder puis quitter , changer les droits de lecture et d'execution sur le fichier hooks.sh. chmod a+x /etc/hooks.sh

On peut aussi rajouter un hook à la fonction de dhclient qui permet de réécrire automatiquement le fichier resolv.conf.

nano /etc/dhclient-enter-hooks 
#!/bin/sh 
make_resolv_conf() { 
echo "ne rien faire au fichier resolv.conf"
}

Sauvegarder puis quitter, on rajoute les droits d'execution au script précédent.

chmod a+x /etc/dhclient-enter-hooks

On test notre fichier hooks.sh sh /etc/hooks.sh

On ajoute notre fichier au démarrage du système , ce fichier sera exécuté une fois tous les services exécutés si nous le relions au lien symbolique rc.local .

echo sh /etc/hooks.sh >> /etc/rc.local 

Base de donnée mysql trop volumineuse, fichier ibdata trop grand.

Un problème redondant à l'utilisation de base de données volumineuse est le fichier innodb qui stocke la structure des base qui s'agrandit au fur et à mesure que un utilisateur effectuera des requêtes sur votre bdd. Dans le cas ou vous avez une base de donnée de 6millions d'enregistrements, comme c'est le cas avec les base de données IP, on constate rapidement une utilisation de CPU et un dossier cache qui se rempli en quelques heures. Pour palier à ce problème on va effectuer un dump de notre base de donnée, exécuter quelques commandes SQL et réinsérer notre bdd dans la base MYSQL.

On édites le fichie my.cnf et on rajoute la ligne suivante.

nano /etc/my.cnf [mysqld] innodb_file_per_table

Sauvegarder puis quitter et redémarrez le service mysql.

service mysql restart

On va effectuer un dump (une extraction) de la base de donnée.Remplacez [données] par celles qui correspondent avec votre configuration.

mysqldump -u [username] -p[root_password] [database_name] > dumpfilename.sql

On arrete le daemon mysql, supprimes le fichier log et ibdata et recréé notre base

/etc/init.d/mysqld stop
 rm /var/lib/mysql/ibdata1 
 rm /var/lib/mysql/ib_logfile

/etc/init.d/mysqld start

On recréé notre base de donnée comme avant le nettoyage.

mysql mysql> create database [database_name]

On réinsère notre base de donnée SQL

mysql -u [username]-p[root_password] [database_name] < dumpfilename.sql

On active l'option mysql innodb_fast_shutdown pour empêcher au fichier ibdata de prendre du volume inutilement.

mysql> SET GLOBAL innodb_fast_shutdown = 1;

Problèmes d'espaces insuffisant CentOS 6

Voici les commandes shell qui permettent d'identifier avec le terminal quels sont les fichiers les plus volumineux sur votre distribution centos.

Retrouver les fichier d'une taille supérieure à 1024kb dans le répertoire /

find / -mount -size +1024k -type f -exec ls -la {} \;|sort -rnb -k

Ou

du -x / |sort -rnb |more

Ou

find / -type f -size +1024k -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'

Ou en utilisant une astuce perl

 du -k | sort -n | perl -ne 'if ( /^(\d+)\s+(.*$)/){$l=log($1+.1);$m=int($l/log(1024)); printf ("%6.1f\t%s\t%25s %s\n",($1/(2**(10*$m))),(("K","M","G","T","P")[$m]),"*"x (1.5*$l),$2);}'