[debian] installation de virtualbox

Rajouter à /etc/apt/sources.list :


deb http://www.virtualbox.org/debian etch non-free

Importer et ajouter la clé :


# wget -q http://www.virtualbox.org/debian/innotek.asc -O- | apt-key add -

Mettre à jour et installer :


# aptitude update
# aptitude install virtualbox

Pour finir :


# adduser arnaud vboxusers
# chmod 666 /dev/vboxdrv

[debian] Installer Apache 2, PHP5 et Mysql5

Installation d’Apache version 2, PHP5 et Mysql5 :


# aptitude install apache2 php5 libapache2-mod-php5 mysql-server php5-mysql

Pour sécuriser (un minimum) le serveur mysql, on s’y connecte (en chosissant la base de données préexsitante s’appelant « mysql ») :

# mysql mysql

On supprime les utilisateurs qui ne servent pas…Je garde seulement root@localhost et debian-sys-maint@localhost…

mysql> DELETE FROM user WHERE user='root' AND host<>'localhost';

Ensuite on met un mot de passe pour root!!!
1) Soit :

mysql> UPDATE user SET password=PASSWORD("mon_mot_de_passe") WHERE user='root';

2) ou bien :

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mon_mot_de_passe');
mysql> FLUSH PRIVILEGES;

Afin de gérer les bases de données mysql, on peut installer phpmyadmin afin de le faire via une interface web…

Installation de phpmyadmin :

Pré-requis :

# aptitude install mcrypt php5-mcrypt

On continue :
1) soit avec aptitude :

# aptitude install phpmyadmin

Et voilà !!! Pour vérifier que « phpmyadmin » fonctionne, il suffit de saisir l’url suivante dans un navigateur :
http://localhost/phpmyadmin

2) soit en téléchargeant l’archive .zip sur le site officiel de phpmyadmin. Ensuite, on peut l’extraire, au plus simple, à la racine du serveur web /var/www/, et, l’on renomme le répertoire extrait avec un nom plus court.. par exemple « phpmyadmin » (au lieu de PhpMyAdmin-versionX.Y.Z). Puis on édite le fichier /var/www/phpmyadmin/config.sample.inc.php et on donne une valeur à l’attribut « blowfish_secret ».

Par exemple :

$cfg['blowfish_secret'] = 'tourterellemagique'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

Enfin on renomme ce fichier en config.inc.php.. et voilà.. on peut tester phpmyadmin dans un navigateur..

[debian] Upgrade sarge vers etch

Remplacer « sarge » par « etch » dans « /etc/apt/sources.list »,

Puis, récupèrer les listes de packages Etch :


[ root@localhost root] # apt-get update

Il reste à mettre à jour la distribution :


[ root@localhost root] # apt-get dist-upgrade

[debian] Configurer le proxy pour apt-get

Rajouter, la ligne suivante dans le fichier /etc/apt/apt.conf (s’il n’existe pas le créer) :

Acquire::http::Proxy « http://192.168.0.1:3128 »;

192.168.0.1 est votre serveur proxy
3128 le port d’écoute http du proxy.

EDIT:
On peut également généraliser la config du proxy pour toutes les applis avec des « exports »:

export http_proxy=http://ip:port
export ftp_proxy=ftp://ip:port

Synchronisation avec Rsync

Objectif: Synchroniser le répertoire /home de la machine B.lenorcy.fr avec celui de A.lenorcy.fr (le /home de B.lenorcy.fr va évoluer et devenir la copie conforme du /home de la machine A.lenorcy.fr).

Sur A.lenorcy.fr :


[root@A ~]# more /etc/rsyncd.conf
# fichier de configuration pour rsync
        motd file = /etc/motd
        max connexions = 1
        syslog facility = local3
        uid = root
        gid = root
        hosts allow = B.lenorcy.fr
#
        [home]
           comment  = arborescence des home a synchroniser
           path = /home
           read only = yes
           list = yes

La section [home] est en read only pour plus de sécurité…

Lancement du démon :


[root@A ~]# /etc/init.d/rsync start

Sur B.lenorcy.fr, on peut indiquer à rsync d’exlure quelques fichiers en créant par exemple le fichier /tmp/exlude suivant :


[root@B ~]# more /tmp/exclude
toto.txt
titi.pdf

Sur B.lenorcy.fr, on lance rsync :


[root@B ~]# /usr/bin/rsync -ravz A.lenorcy.fr::home /home  --delete --exclude-from=/tmp/exclude

Plugin Nagios pour vérifier la charge CPU

Ce plugin est écrit en Perl et utilise la commande sar. Cette commande donne le pourcentage moyen d’idle des 10 dernières minutes.

Problèmes :
– Il est inutile de faire des vérifications (check) avec un intervalle inférieur à 10 minutes…
– Entre minuit et 0h10 la commande sar n’affiche pas de moyenne -> on utilise la comme top qui donne une valeur quasi-instantamnée (moyenne sur un court intervalle)

check_cpu.pl :


#!/usr/bin/perl
# check_cpu.pl [warn] [critical]
sub print_help ();
sub print_usage ();
$PROG = "check_cpu";
if  ( @ARGV[0] eq "" || @ARGV[1] eq "" )
{
    print_usage ();
    exit 0;
}
$idle = `sar | /usr/bin/tail -n 2 | /usr/bin/head -n 1 | /bin/sed 's/  */ /g' | cut -d' ' -f7 | /bin/sed 's/,/./g'`;
if ($idle eq "n")
{
# entre 0h00 et 0h10 la commande 'sar' n'est pas a jour...
$idle = `top -b -n 1 | grep "Cpu(s)" | cut -d' ' -f11 | sed s/%//g`;
}
$warning = @ARGV[0];
$critical = @ARGV[1];
$STATE_CRITICAL = 2;
$STATE_OK = 0;
$STATE_WARNING = 1;
$cpu = 100-$idle;

if ( $cpu >= $critical ){
        printf "Charge CPU CRITICAL - use : %g%",$cpu;
        printf " idle : %g%n",$idle;
        exit $STATE_CRITICAL
        ;;
}

if ( $cpu >= $warning ){
        printf "Charge CPU WARNING - use : %g%",$cpu;
        printf " idle : %g%n",$idle;
        exit $STATE_WARNING
        ;;
}else{
        printf "Charge CPU OK - use : %g%",$cpu;
        printf " idle : %g%n",$idle;
        exit $STATE_OK
        ;;
}

sub print_help ()

{
        print($PROG,': 1.0');
}

sub print_usage ()

{
print_help();
printf "nnUsage : check_cpu.pl [warn] [critical]n";
}

Ncftp pour échanger des fichiers entre 2 serveurs

Pour transférer des fichiers d’un serveur A vers un serveur B, je n’ai, parfois, pas d’autre alternative que d’utiliser ftp.
Voici un exemple de scripts shell (un sur A et l’autre sur B) permettant simplement le transfert automatisé de fichiers.

/usr/local/scripts/envoi-fichiers.sh sur le serveur A :


#!/bin/sh
#  toutes les nuits on va envoyer des fichiers via ncftp sur ftp anonymous
cd /home/moi/mesfichiers
tar cvf monarchive.tar *
/usr/bin/ncftp monftp.mondomaine.fr << EOF
cd echange
bin
put -f monarchive.tar
quit
EOF

Dans le cron du serveur A :

######## On envoie les fichiers a 6h0 ################
0 6 * * * /usr/local/scripts/envoi-fichiers.sh > /dev/null 2>&1

/usr/local/scripts/recup-fichiers.sh sur le serveur B :


#!/bin/sh
#  toutes les nuits on recupere via ncftp sur ftp anonymous
cd  /home/moi/mesfichiers
/usr/bin/ncftp monftp.mondomaine.fr << EOF
cd echange
bin
get  monarchive.tar
quit
EOF
tar xvf  monarchive.tar

Dans le cron du serveur B :


######## On recupere les fichiers a 6h15 ################
15 6 * * * /usr/local/scripts/recup-fichiers.sh > /dev/null 2>&1

Comment détecter la distribution Linux sur laquelle on est…

Voici le script suivant (adapté d’après ce site) :


#!/bin/sh
# Detects which OS and if it is Linux then it will detect which Linux Distribution.

OS=`uname -s`
REV=`uname -r`
MACH=`uname -m`

GetVersionFromFile()
{
        VERSION=`cat $1 | tr "n" ' ' | sed s/.*VERSION.*= // `
}

if [ "${OS}" = "SunOS" ] ; then
        OS=Solaris
        ARCH=`uname -p`
        OSSTR="${OS} ${REV}(${ARCH} `uname -v`)"
elif [ "${OS}" = "AIX" ] ; then
        OSSTR="${OS} `oslevel` (`oslevel -r`)"
elif [ "${OS}" = "Linux" ] ; then
        KERNEL=`uname -r`
        if [ -f /etc/fedora-release ] ; then
                DIST='Fedora'
                PSUEDONAME=`cat /etc/fedora-release | sed s/.*(// | sed s/)//`
                REV=`cat /etc/fedora-release | sed s/.*release // | sed s/ .*//`
        elif [ -f /etc/redhat-release ] ; then
                DIST='RedHat'
                PSUEDONAME=`cat /etc/redhat-release | sed s/.*(// | sed s/)//`
                REV=`cat /etc/redhat-release | sed s/.*release // | sed s/ .*//`
        elif [ -f /etc/SuSE-release ] ; then
                DIST=`cat /etc/SuSE-release | tr "n" ' '| sed s/VERSION.*//`
                REV=`cat /etc/SuSE-release | tr "n" ' ' | sed s/.*= //`
        elif [ -f /etc/mandrake-release ] ; then
                DIST='Mandrake'
                PSUEDONAME=`cat /etc/mandrake-release | sed s/.*(// | sed s/)//`
                REV=`cat /etc/mandrake-release | sed s/.*release // | sed s/ .*//`
        elif [ -f /etc/debian_version ] ; then
                DIST="Debian `cat /etc/debian_version`"
                REV=""

        fi
        if [ -f /etc/UnitedLinux-release ] ; then
                DIST="${DIST}[`cat /etc/UnitedLinux-release | tr "n" ' ' | sed s/VERSION.*//`]"
        fi

        OSSTR="${OS} ${DIST} ${REV} (${PSUEDONAME} ${KERNEL} ${MACH})"

fi

Exemple d’utilisation :


[root@menthe lenorcy]# sh detect_distro.sh
Linux Fedora 3 (Heidelberg 2.6.12-1.1381_FC3smp i686)

Authentification LDAP pour l’interface Web de Nagios

L’idée est d’avoir un .htaccess permettant l’authentification avec LDAP afin d’accéder à l’interface web de Nagios (version 2.0).

Extrait de mon httpd.conf (apache version 2.2) :


ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"


   Options ExecCGI
   AllowOverride All
   Order allow,deny
   Allow from all


Alias /nagios "/usr/local/nagios/share"


   Options None
   AllowOverride All
   Order allow,deny
   Allow from all


Création du .htaccess dans /usr/local/nagios/share et dans /usr/local/nagios/sbin :


AuthName "Controle d'acces"
AuthType Basic
AuthBasicProvider ldap
AuthBasicAuthoritative On
AuthzGroupFileAuthoritative On
AuthLDAPCompareDNOnServer on
AuthLDAPURL ldap://annuaire.mon-domaine.fr/ou=people,dc=mon-domaine,dc=fr?uid?sub?(objectClass=posixAccount)
require ldap-filter |(uid=utilisateur1)(uid=utilisateur2)(uid=utilisateur3)

Je modifie le cgi.cfg de la sorte :


use_authentication=1
#default_user_name=nagios
authorized_for_system_information=utilisateur1,utilisateur2,utilisateur3
authorized_for_configuration_information=utilisateur1,utilisateur2,utilisateur3
authorized_for_all_services=utilisateur1,utilisateur2,utilisateur3
authorized_for_all_hosts=utilisateur1,utilisateur2,utilisateur3

#Autorisation de l'execution de commandes via l'interface de nagios
#authorized_for_system_commands=nagiosadmin,nagios
#authorized_for_all_service_commands=nagiosadmin
#authorized_for_all_host_commands=nagiosadmin