Suite au précédent plugin munin pour Mysql qui indique les ouvertures de table, il manquait une information pour aider à l’optimisation de mysql: Savoir quelle table provoque les ouvertures: voila le code qui donne ces informations:


#!/bin/sh
#
# Plugin to monitor the number of opened tables on a mysql-server.
#
# Parameters:
#
# 	config
# 	autoconf
#
# Configuration variables
#
#	mysqlopts    - Options to pass to mysql
#
# $Log$
# Revision 1.0  2009/05/1 1:04 ffwill
#
#%# family=auto
#%# capabilities=autoconf

MYSQLOPTS="$mysqlopts"
MYSQL=${mysql:-mysql}
BDD="database list you want monitoring"
TMPFILE="/tmp/munin.mysql_open_tables_by_database"

if [ "$1" = "autoconf" ]; then
        $MYSQL --version 2>/dev/null >/dev/null
        if [ $? -eq 0 ]
        then
                $MYSQL $MYSQLOPTS -e 'show open tables' 2>/dev/null >/dev/null
                if [ $? -eq 0 ]
                then
                        echo yes
                        exit 0
                else
                        echo "no (could not connect to mysql)"
                fi
        else
                echo "no (mysqladmin not found)"
        fi
        exit 1
fi

if [ "$1" = "config" ]; then
	echo 'graph_title MySQL Open table by database'
	echo 'graph_vlabel Open Tables'
	echo 'graph_category mysql'
	echo 'graph_args --base 1000'
	num=0;
	for i in $BDD; do
		echo 'opentables_'$i'.label '$i
		echo 'opentables_'$i'.min 0'
#        	echo 'opentables'$i'.type DERIVE'
                if [ $num = "0" ]
		then
			echo 'opentables_'$i'.draw AREA'
                else
			echo 'opentables_'$i'.draw STACK'
		fi
		num=1;
	done
	exit 0
fi

$MYSQL $MYSQLOPTS -e 'show open tables' 2>/dev/null 1>$TMPFILE

echo $result

for i in $BDD; do
	res=`grep $i $TMPFILE  | wc -l`
	echo 'opentables_'$i'.value '$res

done

Et pour télécharger le plugin c’est ici ou ici

Vous en avez marre que quand vous ouvrez un pop up, une image,… dans un onglet de firefox celui-ci est redimensionné à la taille de cette image, alors:

  1. aller dans About:config
  2. je ferai attention promis
  3. filtrer avec dom.disable_window_move_resize
  4. double-cliquer sur la variable afin de la passer a true.

serveur X11 distant

Lors de la mise en place d’un serveur, il peut arriver que certains outils nécessitent obligatoirement un environnement graphique pour s’exécuter, par exemple la partie administration de [search]Funambol[/search].

Sur un serveur classique, il n’y a pas de serveur graphique, et surtout le serveur n’est pas forcement  au même endroit que vous…

On va donc installé un système d’affichage distant grâce à X11.

Coté serveur:

Pour rediriger les commandes vers un serveur X11  distant, on va installer un serveur X11 virtuel xvfb, et un gestionnaire de terminal X11 xdm

sudo apt-get install xvfb xdm xfonts-base

Ensuite éditer /etc/X11/xdm/Xservers . Remplacer la ligne

:0 local /usr/X11R6/bin/X vt7 -dpi 100 -nolisten tcp

par

:0 local /usr/X11R6/bin

et faites:

/etc/init.d/xdm restart

pour lancer le gestionaire de terminaux.

coté client:

Si votre poste client est sous linux taper simplement dans un ligne de commande:

ssh <votre serveur>-Y

-Y permet de valider le transfer X11.

sous windows avec Putty aller dans les option et valider le forward X11

Lors de migration sous linux il peut apparaitre des problèmes pour reconnaitre la bonne résolution de l’écran. Cela est peut être du à la reconnaissance des fréquences de rafraichissement. Suite à une migration de mon ordinateur principal sous ubuntu j’ai eu quelques problème pour régler la résolution d’un de mes écran IISonic, Je partage ici le méthode de résolution. si un réglage avec l’outil fournit par nVidia:

sudo sudo nvidia-settings

ne résout pas le problème, alors régler l’écran mal reconnut au plus proche de la résolution souhaité, dans mon cas 1024×768:

réglage résolution d'un ecran sous Ubuntu-linux avec les drivers Nvidia

réglage résolution d'un ecran sous Ubuntu-linux avec les drivers Nvidia

Le plus simple pour avoir ces valeur est de faire un petit retour sous Windows, et de récupérer ces valeurs dans le menu de votre écran. Il y’en a deux: rafraichissement vertical et rafraichissement horizontal. (il existe bien sur un petit programme sous linux ddcprobe pour les obtenir sous linux, mais il ne donnait aucun résultat dans mon cas). Retourner sous linux et éditer le fichier /etc/X11/xorgf.conf, vous trouverez une section Monitor qui ressemble à cela, par écran installé sur votre système: le premier écran bien reconnut: Section « Monitor » Identifier « Configured Monitor » EndSection et le second le IISOnic

Section "Monitor"
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "CRT-0"
    HorizSync       28.085.0
    VertRefresh     43.085.0
EndSection

Vérifier que les deux intervalles HorizSync 28.0 – 85.0 et et VertRefresh 43.0 – 85.0 contiennent bien les valeurs  relevées sous Windows. Ensuite dans la section screen qui ressemble à cela:

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "TwinView" "1"
    Option         "TwinViewXineramaInfoOrder" "DFP-1"
    Option         "metamodes" "CRT: 1024×768 +1680+0, DFP: nvidia-auto-select +0+0; CRT: NULL, DFP: nvidia-auto-select +0+0"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

Sur la ligne « metamodes » modifier les informations de votre écran mal reconnut sous la forme x_

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "TwinView" "1"
    Option         "TwinViewXineramaInfoOrder" "DFP-1"
    Option         "metamodes" "CRT: <strong>10280×1024_75</strong> +1680+0, DFP: nvidia-auto-select +0+0; CRT: NULL, DFP: nvidia-auto-select +0+0"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

Ce tuto s’inspire fortement de la discutions de ce thread des forums d’OVH. Après quelques passages de robots sur le serveur dont les intentions sont mauvaise; Il recherche sur le serveur des scripts qui possèdent des failles afin d’être exploité par le propriétaire du robot.

L’idéal est de ne pas avoir de scripts avec des failles connu, donc complètement à jours… utopique n’est-ce pas…

Une première méthode pour conter ces recherches  est de supprimer tous les accès à [search]apache[/search] sans non de domaine ou mauvais nom de domaine: (cas des wildcard avec [search]dyndns[/search] par exemple). En effet aucun utilisateur arriveront sur votre sites en utilisant l’IP de votre machine…. Par contre il peut arriver que des utilisateurs se trompent de nom de domaine donc faites attention…

Commencer par faire un dossier vide:

sudo mkdir /var/empty

Maintenant on va créer un serveur virtuel qui récupère tous les nom de domaine qui ne sont pas déclaré. Dans /etc/apache2/sites-avaible/default, mettre:

<VirtualHost *>
        DocumentRoot /var/empty/
        <Directory /var/empty>
              Order Deny,
              Allow Deny from All
        </Directory>
</VirtualHost>

tous les autre sites garde la forme:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName ffwill.homelinux.com

        ……
</VirtualHost>

recharger apache:

sudo /etc/init.d/apache2 reload

Maintenant tous les robots qui accèdent à votre serveur n’utilisant pas un bon nom de domaine ou votre adresse IP se verra refoulé.

Une autre étape est de rajouter ces « attaques » dans le système de détection de [search]fail2ban[/search].
Pour cela on va rajouter une section dans /etc/fail2ban/jail.conf:

[apache_nodnsuse]
enabled = true
port    = http,https
filter  = apache-nodnsuse
logpath = /var/log/apache*/*error.log
maxretry = 1

dans le cas de DNS avec wildcard, éviter de mettre « maxretry » à 1.
puis on rajoute le filtre correspondant /etc/fail2ban/filter.d/apache_nodnsuse.conf qui contiendra:

[Definition]
failregex = [[]client []] client denied by server configuration: /var/empty/.*
ignoreregex=

En vue d’optimiser mon serveur MySql j’ai réalisé un nouveau plugin. Affin d’optimiser les requêtes sql, MySQL garde ouvert toutes les dernière tables utilisées. Ceci permet d’éviter d’ouvrir et de fermer continuellement une table qui fait l’objet de requêtes régulières. Afin de savoir si le nombre de table qui restent ouvertes est suffisant j’ai fait un petit script qui affiche le nombre d’ouverture de nouvelle table. Ces chiffres sont disponibles dans phpmyadmin dans l’onglet Etat Opened_tables, cependant ce chiffre il représente l’ensemble des ouvertures depuis le démarrage du serveur: pas trèsparlant! Le code s’inspire fortement des autres plugins munin pour mysql voici le code:


#!/bin/sh
#
# Plugin to monitor the number of opened tables on a mysql-server.
#
# Parameters:
#
#       config
#       autoconf
#
# Configuration variables
#
#       mysqlopts    - Options to pass to mysql
#
# $Log$
# Revision 1.0  2009/05/1 1:04 ffwill
#
#%# family=auto
#%# capabilities=autoconf

MYSQLOPTS="$mysqlopts"
MYSQLADMIN=${mysqladmin:-mysqladmin}

if [ "$1" = "autoconf" ]; then
$MYSQLADMIN --version 2>/dev/null >/dev/null
if [ $? -eq 0 ]
then
$MYSQLADMIN $MYSQLOPTS status 2>/dev/null >/dev/null
if [ $? -eq 0 ]
then
echo yes
exit 0
else
echo "no (could not connect to mysql)"
fi
else
echo "no (mysqladmin not found)"
fi
exit 1
fi

if [ "$1" = "config" ]; then
echo 'graph_title MySQL Open table'
echo 'graph_vlabel Open Tables/s'
echo 'graph_category mysql'
echo 'opentables.label mysql open tables'
echo 'opentables.min 0'
echo 'opentables.type DERIVE'
echo 'graph_args --base 1000'
exit 0
fi

/usr/bin/printf "opentables.value "
($MYSQLADMIN $MYSQLOPTS status 2>/dev/null || echo 'a a a U') | awk '{print $11}'

le résultat:

Plugin munin: Louverture de table mysql

Plugin munin: L'ouverture de table mysql

Plugin munin: Louverture de table mysql

Plugin munin: L'ouverture de table mysql

Et pour télécharger le plugin c’est ici ou ici

J’ai tenté d’utiliser QTCreator à partir des dépôts mais il manque les sources de QT et est donc non utilisable directement….

J’ai donc téléchargé QtCreator avec la librairie Qt pré-compilé directement sur le site de QtSoftware

La version 32 bits

la version 64 bits

comme indiqué sur le site l’installation se fait facilement avec:

chmod u+x qt-sdk-linux-x86_64-opensource-2009.02.bin

puis

./qt-sdk-linux-x86_64-opensource-2009.02.bin

ensuite si vous chercher directement à compiler un projet d’exemple vous risquer de tomber sur une erreur du type:

/usr/bin/ld: cannot find -lfreetype

ou encore

/usr/bin/ld: cannot find -lgobject-2.0
/usr/bin/ld: cannot find -lSM
/usr/bin/ld: cannot find -lrender

c’est qu’il manque des librairies de développement sur votre système, dans mon cas il a fallut installer en plus (cela dépend de ce que vous avez installer auparavant…):

libfreetyper6-dev libglib2.0-dev libsm-dev libXrender-dev libfontconfig-dev

donc un

sudo apt-get install libfreetyper6-dev libglib2.0-dev libsm-dev libXrender-dev libfontconfig-dev

vous pouvez utiliser le gestionnaire de paquets,

ou cliquer simplement sur ce lien: apt://libfreetype6-dev,libglib2.0-dev,libsm-dev,libxrender-dev,libfontconfig-dev, qui installera tous ce qu’il faut.

(testé et fonctionnel sous Ubuntu Linux Jaunty Jackalope 9.04)

Édit: 7/08/2009: pour compiler les projets contenant de l’OpenGl vous aurez besoin de: mesa-common-dev, pour vous éviter:

 erreur: GL/gl.h : Aucun fichier ou dossier de ce type

Après avoir bidouiller mon serveur sous Ubuntu-Server depuis plus d’un an, J’ai eu envie de passer mon ordinateur principal sous Linux cette ordinateur servant principalement d’ordinateur de loisir multimédia et de développement (faut bien assumer son status de geek…)

Mes billets trouverons leurs places dans deux nouvelles catégories:  Ubuntu tous les jours et Développement sous Ubuntu

Voila un nouveau script pour le [search]monitoring de Neuf Box[/search] avec munin: J’ai mis quelques temps avant de le diffuser. En effet il y’ avait un problème de détection de client non connecté qui se remarque par le nombre de client total qui ne vaut pas la somme des clients sur les différents réseau lan2 lan3 lan4 et Wifi (wlan0). Mais depuis quelques temps plus aucun bug… A vérifier….

Voila le plus important le code du script:

#!/bin/sh
##############################################################################
##                     DESCRIPTION                                          ##
##############################################################################
#
#  Ce script reupère les donnée sur la page "detecttion des intrusions" et
#formate ces donnée pour munin
#utilise XMLStarlet
#apt-get install xmlstarlet
#
#le script comprent les commandes:
#  -> autoconf
#  -> config
#  -> <vide>
##############################################################################
##                     Variable de configuration                            ##
##############################################################################

#l‘adresse ip du modem routeur TELE2
IP_NEUFBOX="192.168.1.1"

#############################################################################
##                CONSTANTE POUR FACILITE L’EVOLUTION DU SCRIPT            ##
#############################################################################
#
#ces constantes sont là pour s‘adapter à d’eventuelles modifications
#du firmware du modem ou pour permetre au script d‘évoluer
#

#page de l’interface WEB qui liste les info de la neuf
PAGE_INFO="/stb/info"

#fichier temporaire ou sera stocké cette page pour faire les traitements
PAGE_FILE="/tmp/temp.munin.neufboxV4.stb.info"

# PORTS diponible sur la neufbox
PORTS="lan2 lan3 lan4 wlan0"

#############################################################################
##                          SCRIPT                                         ##
#############################################################################

getfile()
{
  wget -q -O"$PAGE_FILE" "http://$IP_NEUFBOX$PAGE_INFO"
}

if [ "$1" = "autoconf" ]; then
    #on recupère la page
    getfile
    #on verifie que c‘est la bonne page avec son titre
    ret=$(grep "<lan>" "$PAGE_FILE" | wc -l)
       if [ "$ret" > "0" ] ; then
                echo yes
                exit 0
        else
                echo no
                exit 1
        fi
fi

if [ "$1" = "config" ]; then
     echo ‘graph_title NeufBox Clients Counts
     echo ‘
graph_args –base 1000 -l 0 -u 1
     echo ‘
graph_vlabel Clients Count
     echo ‘
graph_category NEUFBOXV4
     for s in $PORTS
         do
             echo "$s"’
.label ‘"$s"
             if [ "$s" = "lan2" ]; then
                echo "$s"’
.draw AREA
             else
                echo "$s"’
.draw STACK
             fi
         done
     echo ‘
total.label total
     echo ‘
total.draw LINE1
     exit 0
fi

if ! [ -f $PAGE_FILE ]; then
  getfile
elif [ $(expr `date '+%s'` -  `date -r $PAGE_FILE '+%s'`) -ge 250 ]; then
  getfile
fi

#repartition des ports
port_used=$(xmlstarlet sel  -T -t -m /info/lan/client -v "port" -n $PAGE_FILE)

#echo $port_used

for s in $PORTS
    do
        ret=$(echo $port_used | grep -o $s | wc -l)
        echo "$s"’.value ‘$ret
    done

#nombre de clients total
nbclient=$(xmlstarlet sel  -t -v "count(//info/lan/client)" $PAGE_FILE)

echo ‘total.value ‘$nbclient

Et pour télécharger le plugin c’est ici ou ici.

Le résultat en image:

Le resultat en temps réel c’est ici.

Voici le deuxième plugins pour le [search]monitoring de Neuf Box[/search]: celui-ci consulte les status des différents éléments de la neuf box: la ligne DSL, le PPP ( »connexion avec internet »), et la VOIP (le téléphone), Ce plugin marche comme le précédent basé sur la page: http://192.168.1.1/stb/info.

Voici le code du plugin:

(sous license GNU-GPL)

#!/bin/sh
##############################################################################
##                     DESCRIPTION                                          ##
##############################################################################
#
#  Ce script reupère les donnée sur la page "detecttion des intrusions" et
#formate ces donnée pour munin
#utilise XMLStarlet
#apt-get install xmlstarlet
#
#le script comprent les commandes:
#  -> autoconf
#  -> config
#  -> <vide>

##############################################################################
##                     Variable de configuration                            ##
##############################################################################

#l‘adresse ip du modem routeur TELE2
IP_NEUFBOX="192.168.1.1"

#############################################################################
##                CONSTANTE POUR FACILITE L’EVOLUTION DU SCRIPT            ##
#############################################################################
#
#ces constantes sont là pour s‘adapter à d’eventuelles modifications
#du firmware du modem ou pour permetre au script d‘évoluer
#

#page de l’interface WEB qui liste les info de la neuf
PAGE_INFO="/stb/info"

#fichier temporaire ou sera stocké cette page pour faire les traitements
PAGE_FILE="/tmp/temp.munin.neufboxV4.stb.info"

#services suportant le champ status
# la voip est traité part
SERVICES="dsl ppp voip"

#############################################################################
##                          SCRIPT                                         ##
#############################################################################

getfile()
{
  wget -q -O"$PAGE_FILE" "http://$IP_NEUFBOX$PAGE_INFO"
}

if [ "$1" = "autoconf" ]; then
    #on recupère la page
    getfile
    #on verifie que c‘est la bonne page avec son titre
    ret=$(grep "status" "$PAGE_FILE" | wc -l)
       if [ "$ret" > "0" ] ; then
                echo yes
                exit 0
        else
                echo no
                exit 1
        fi
fi

if [ "$1" = "config" ]; then
     echo ‘graph_title NeufBox Status
     echo ‘
graph_args –base 1000 -l 0 -u 1
     echo ‘
graph_vlabel Status 1:up 0:down
     echo ‘
graph_category NEUFBOXV4
     for s in $SERVICES
         do
             echo "$s"’
_status.label ‘"$s"
             echo "$s"’
_status.min 0
             echo "$s"’
_status.max 1
         done
     exit 0
fi

if ! [ -f $PAGE_FILE ]; then
  getfile
elif [ $(expr `date '+%s'` -  `date -r $PAGE_FILE '+%s'`) -ge 250 ]; then
  getfile
fi

for s in $SERVICES
    do
        if [ "$s" = "voip" ]; then
            ret=$(xmlstarlet sel -t -v  "/info/voip/linestatus" $PAGE_FILE)
        else
            ret=$(xmlstarlet sel -t -v  "/info/$s/status" $PAGE_FILE)
        fi
        if [ "$ret" = "up" ]; then
            echo "$s"’_status.value 1
        else
            echo "$s"’
_status.value 0
        fi
    done

Et pour télécharger le plugin c’est ici ou ici.

Et le resultat en image:

(rien de pertinent: y’a pas de problème donc tous les status restent à UP=1)

localhostlocaldomain-neufboxv4_status-day

et le resultat en temps réel.