mardi 21 février 2012

Installation et utilisation du client serveur NX sur Ubuntu 11.10

Pour lancer depuis un PC (client) des applications sur un autre ordinateur (serveur), il y a la bonne vieille méthode du X forwarding :

Une fois ssh correctement configuré, il suffit sur la machine client de lancer un petit ssh -X user@serveur, et une fois dans le shell ssh, de lancer n'importe quelle application, et magie, son affichage est déporté sur le client, même si elle s'exécute sur le serveur !

Ca fonctionne du tonnerre, mais si vous accédez à un ordinateur par l'intermédiaire d'une liaison un peu faiblarde, ce n'est pas très réactif.

Il existe d'autres méthodes (notamment dans l'ordre de popularité rdp, vnc, xdmcp), mais aucune d'entre elle n'arrive à la hauteur de la solution NoMachine en terme de rapidité d'affichage.

Ci-dessous les détails de l'installation de la solution NX de NoMachine en version Free Edition (open source).
Il existe une version payante qui offre de nombreuses utilisations supplémentaires, mais dans le cadre d'une utilisation personnelle, la version gratuite est largement suffisante.

Installation de la solution NX

Coté serveur
Récupérer les packages sur le site de NoMachine (aller dans NX Free Edition For Linux), et installer dans l'ordre (je ne sais pas si c'est encore valable, mais là aussi, je n'ai pas testé l'installation dans un autre ordre et n'ai jamais rencontré de problèmes) : client, node, server (même pas sûr que le client soit nécessaire, mais bon, je ne suis pas à 5-6 Mo d'espace disque près non plus)
sudo dpkg -i nxclient_3.5.0-7_i386.deb
sudo chmod 755 /usr/lib/cups/backend/ipp
sudo dpkg -i nxnode_3.5.0-7_i386.deb
sudo dpkg -i nxserver_3.5.0-9_i386.deb


Coté client
le client suffit :
sudo dpkg -i nxclient_3.5.0-7_i386.deb
sudo chmod 755 /usr/lib/cups/backend/ipp

Et voilà !!
Dans les applicatons sur le client, une entrée NX Client for Linux est créée, il suffit de donner l'adresse ip du serveur, les informations d'utilisateur, et zou, c'est parti!

Avantages de la solution NX par rapport à du vnc :
C'est beaucoup plus rapide. A titre d'exemple, je suis actuellement dans le train, connecté à internet via mon téléphone, et je viens de réaliser l'installation de la solution, et l'utilisation du client NX est possible (c'est pas du LAN, mais c'est réellement utilisable).
Il est possible de déconnecter une session, et de la réouvrir plus tard, pendant ce temps les applications  lancées auront continué leur travail, à la mode "screen" ou "byobu" (surcouche de screen que je vous conseille fortement).
Coté gestion des sessions, on retrouve les mêmes fonctionnalités que rdp (Accès bureau à distance sous windows), il est possible de lister les sessions, de s'y connecter, de les terminer...

lundi 20 février 2012

Sauvegarder la configuration de plusieurs serveurs linux

Lorsque l'on a plusieurs serveurs linux à gérer, il faut aussi sauvegarder leur configuration. L'idéal étant d'automatiser un maximum de choses possibles, voici ce qui va être mis en place :

  1. Chaque serveur ira tous les jours, télécharger une version d'un script de sauvegarde centralisé, qui contient toutes les commandes permettant de sauvegarder la configuration d'un serveur.
    Ce script étant centralisé, il ne peut contenir que les commandes communes à tous les serveurs, cela permet de n'avoir qu'un script à maintenir.
    Il doit aussi permettre de sauvegarder des éléments spécifiques à chaque serveur.
  2. Pour cela, chaque serveur aura un autre script de sauvegarde local, qui ne contiendra que les commandes de sauvegarde spécifiques. Ces commandes seront appelées par le script général.
Voila pour les principes... En avant pour un exemple de mise en place :




Mise en place du script sur chaque serveur à sauvegarder

  • créer un fichier /root/bin/mmv_sauveSystem.sh
  • ce fichier contiendra le code suivant :
# recupère la dernière version du script centralisé
rsync -v -rlt -z panoramix::Backups/script /root/bin/
# rend le script centralisé exécutable
chmod +x /root/bin/script/saveSystem.sh
# l'exécute
/root/bin/script/saveSystem.sh

  • il suffit ensuite de paramétrer le lancement quotidien de ce script 
    crontab -e
    ajouter la ligne 10 5 * * * /root/bin/mmv_sauveSystem.sh


L'avantage ici, est qu'un script qui sera lancé par tous les serveurs linux est stocké sur un partage nfs, il suffira si l'on veut modifier le script de sauvegarde pour l'ensemble des serveurs, de le modifier à un seul endroit.

Evidemment, sur certains serveurs, il faudra compléter le script de sauvegarde général, par un script spécifique au serveur concerné. Rien de plus simple dans notre cas : le script commun vérifie la présence sur le serveur en cours de sauvegarde, d'un script " /root/bin/mmv_sauvegardes.sh", et le lance s'il existe. C'est donc dans ce script qu'il faudra paramétrer les sauvegardes particulières à chaque serveur, s'il y en a.


Contenu du script de sauvegarde

#!/bin/bash

# Fichier stocké sur le serveur de sauvegarde (\\panoramix\Backup-Siege\script)
# ce fichier est téléchargé toutes les nuits par TOUS les serveurs linux, et est
# ensuite exécuté.
# Cela permet de centraliser dans un seul fichier toutes les opérations de sauvegardes
# communes aux serveurs linux
#
# Il est appelé de la manière suivante depuis les serveurs linux :
#    [root@front1 bin 10:19]# cat /root/bin/mmv_sauveSystem.sh
#    rsync -v -rlt -z 10.1.1.23::Backups/script /root/bin/
#    chmod +x /root/bin/script/saveSystem.sh
#    /root/bin/script/saveSystem.sh
# et crontab -l
# 10 5 * * * /root/bin/mmv_sauveSystem.sh
#

nom=`hostname -s`:`basename $0`
# Send all output to a logfile and supress input
typeset LOG=/var/log/resalys/${nom}.log
[[ -t 1 ]] && echo "Writing to logfile '$LOG'."
exec >> $LOG 2>&1
exec < /dev/null 2<&1

rapport="Erreurs :"

####################################################################################
# Déploiements de mises à jour a une date donnée
####################################################################################

datedujour=`date +"%Y%m%d"`
if [ $datedujour = "20100507" ] || [ $datedujour = "20100508" ] ;
then
       
        # commandes qui ne seront exécutées qu'à une date donnée

fi

####################################################################################
# SAUVEGARDES COMMUNES A TOUS LES SERVEURS LINUX
####################################################################################

# scripts mmv
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde des scripts mmv /root/bin" ;
rsync -v -rlt -z --delete /root/bin/             panoramix::Backups/`hostname -s`/root_bin
[ $? -ne 0 ] && rapport=$rapport" 1"
# crontab de root
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de la crontab root" ;
rsync -v -rlt -z --delete /var/spool/cron/         panoramix::Backups/`hostname -s`/var_spool_cron
[ $? -ne 0 ] && rapport=$rapport" 2"
# configuration de la rotation des logs
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de la config /etc/logrotate.d" ;
rsync -v -rlt -z --delete /etc/logrotate.d/     panoramix::Backups/`hostname -s`/etc_logrotate.d
[ $? -ne 0 ] && rapport=$rapport" 3"
# configurations apaches
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de la config apache /etc/httpd" ;
rsync -v -rlt -z --delete /etc/httpd/             panoramix::Backups/`hostname -s`/etc_httpd
[ $? -ne 0 ] && rapport=$rapport" 4"
# configuration samba
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de la config samba /etc/samba" ;
rsync -v -rlt -z --delete /etc/samba/             panoramix::Backups/`hostname -s`/etc_samba
[ $? -ne 0 ] && rapport=$rapport" 5"
# configuration du systeme de fichiers
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de /etc/fstab" ;
rsync -v -rlt -z --delete /etc/fstab             panoramix::Backups/`hostname -s`/etc_fstab
[ $? -ne 0 ] && rapport=$rapport" 6"
# configuration des exports nfs
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de /etc/exports" ;
rsync -v -rlt -z --delete /etc/exports             panoramix::Backups/`hostname -s`/etc_exports
[ $? -ne 0 ] && rapport=$rapport" 7"
# configuration des demons
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde des /etc/initab" ;
rsync -v -rlt -z --delete /etc/inittab             panoramix::Backups/`hostname -s`/etc_inittab
[ $? -ne 0 ] && rapport=$rapport" 8"
# configuration du resolver (man resolver)
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde du resolver /etc/resolv.conf" ;
rsync -v -rlt -z --delete /etc/resolv.conf         panoramix::Backups/`hostname -s`/etc_resolv.conf
[ $? -ne 0 ] && rapport=$rapport" 9"
# configuration des hotes
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de /etc/hosts" ;
rsync -v -rlt -z --delete /etc/hosts             panoramix::Backups/`hostname -s`/etc_hosts
[ $? -ne 0 ] && rapport=$rapport" 10"

# configuration de l'authentification AD
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de l'authentification AD" ;
rsync -v -rlt -z --delete /etc/krb5.conf         panoramix::Backups/`hostname -s`/etc_krb5.conf
[ $? -ne 0 ] && rapport=$rapport" 11"
rsync -v -rlt -z --delete /etc/nsswitch.conf     panoramix::Backups/`hostname -s`/etc_nsswitch.conf
[ $? -ne 0 ] && rapport=$rapport" 12"
rsync -v -rlt -z --delete /etc/sudoers             panoramix::Backups/`hostname -s`/etc_sudoers
[ $? -ne 0 ] && rapport=$rapport" 13"
rsync -v -rlt -z --delete /etc/pam.d/             panoramix::Backups/`hostname -s`/etc_pam.d
[ $? -ne 0 ] && rapport=$rapport" 14"
rsync -v -rlt -z --delete /etc/security/         panoramix::Backups/`hostname -s`/etc_security
[ $? -ne 0 ] && rapport=$rapport" 15"

# repositories yum
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde des repository yum" ;
rsync -v -rlt -z --delete /etc/yum.conf         panoramix::Backups/`hostname -s`/etc_yum.conf
[ $? -ne 0 ] && rapport=$rapport" 16"
rsync -v -rlt -z --delete /etc/yum.repos.d/     panoramix::Backups/`hostname -s`/etc_yum.repos.d
[ $? -ne 0 ] && rapport=$rapport" 17"

# scripts utiles
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde de .bashrc et .screenrc" ;
rsync -v -rlt -z --delete /root/.bashrc         panoramix::Backups/`hostname -s`/root_dot_bashrc
[ $? -ne 0 ] && rapport=$rapport" 18"
rsync -v -rlt -z --delete /root/.screenrc         panoramix::Backups/`hostname -s`/root_dot_screenrc
[ $? -ne 0 ] && rapport=$rapport" 19"

# parametrages centreon / nagios
echo `date +"%Y%m%d %H%M%S"`:$nom:" Sauvegarde des paramétrages centreon nagios" ;
rsync -v -rlt -z --delete /usr/local/nagios/etc/         panoramix::Backups/`hostname -s`/usr_local_nagios_etc
[ $? -ne 0 ] && rapport=$rapport" 20"
rsync -v -rlt -z --delete /usr/local/nagios/libexec/         panoramix::Backups/`hostname -s`/usr_local_nagios_libexec
[ $? -ne 0 ] && rapport=$rapport" 21"


####################################################################################
# mise à jour du fichier permettant a centreon de verifier si la sauvegarde est correcte
####################################################################################

# si le rapport contient des erreurs, on indique KO dans le fichier de contrôle
if [ "${rapport}" != "Erreurs :" ] ;
then
    echo `date +"%Y%m%d %H%M%S"`:$nom:"Le rapport contient des erreurs" ;
    echo "ko --- " > /root/bin/dateSauvegarde
    echo $rapport >> /root/bin/dateSauvegarde
else
    echo `date +"%Y%m%d %H%M%S"`:$nom:"Il n'y a pas eu d'erreurs pendant la sauvegarde" ;
    echo "ok" > /root/bin/dateSauvegarde
fi


####################################################################################
# SAUVEGARDES PARTICULIERES AU SERVEUR : lancé après pour pouvoir amender le rapport
#  de sauvegarde precedent si necessaire
####################################################################################

# Si le fichier /root/bin/mmv_sauvegardes.sh existe, on le lance
if [ -f /root/bin/mmv_sauvegardes.sh ] ;
then
    echo `date +"%Y%m%d %H%M%S"`:$nom:"Un script de sauvegarde local existe, on le lance : /root/bin/mmv_sauvegardes.sh" ;
    [ ! -x /root/bin/mmv_sauvegardes.sh ] && chmod +x /root/bin/mmv_sauvegardes.sh
    /root/bin/mmv_sauvegardes.sh
    [ $? -ne 0 ] && rapport=$rapport" 99"
else
    echo `date +"%Y%m%d %H%M%S"`:$nom:"Aucun script de sauvegarde specifique a ce serveur trouve" ;
fi

# copie du fichier de rapport de sauvegarde sur le serveur de sauvegarde
rsync -v -rlt -z --delete /root/bin/dateSauvegarde panoramix::Backups/`hostname -s`/dateSauvegarde

Script spécifique à un serveur donné

Et voici un exemple de script spécifique à un serveur contenant des bases mysql :

#/bin/sh
# mmv_sauvegardes.sh
# script fermant les connexions a la base et lancant le backup de la base et le dbmaintenance
nom=`basename $0`

# Send all output to a logfile and supress input
typeset LOG=/var/log/mmv_sauvegardes.log
[[ -t 1 ]] && echo "Writing to logfile '$LOG'."
exec >> $LOG 2>&1
exec < /dev/null 2<&1

# -----------------------------------------------
# backup des bases
# -----------------------------------------------
echo `date +"%Y%m%d %H%M%S"`:$nom:" DEBUT DU SRIPT DE SAUVEGARDE"

# sauvegarde de glpi
echo `date +"%Y%m%d %H%M%S"`:$nom:" lancement des dumps de glpidb"
mysqldump --add-drop-table --lock-tables -u XXX -pXXX --databases glpidb > /usr/local/lib/backups/mmv_backup_glpi_`date +"%Y%m%d"`.sql

# suppression des anciens fichiers de backup
echo `date +"%Y%m%d %H%M%S"`:$nom:" nettoyage anciens dumps"
find /usr/local/lib/backups/ -type f  -mtime +7 | xargs rm -f

# copie de certains fichiers sur le serveur de sauvegarde
echo `date +"%Y%m%d %H%M%S"`:$nom:" copie glpi sur panoramix"
rsync -v -rlt -z --delete /var/www/html/glpi/ panoramix::Backups/tintin/glpi

echo `date +"%Y%m%d %H%M%S"`:$nom:" copie des dumps sur panoramix"
rsync -v -rlt -z --delete /usr/local/lib/backups/ panoramix::Backups/tintin/bases

echo `date +"%Y%m%d %H%M%S"`:$nom:" FIN DU SCRIPT"






samedi 18 février 2012

Désactiver le pavé tactile sur un portable


Sur certains ordinateurs portables, on dispose à la fois d'un pavé tactile et d'un "batonnet" (stick) entre les touches G et H.

Lorsque l'on écrit au kilomètre (si si ça m'arrive), le pouce va parfois effleurer le pavé tactile, et pouf, le curseur de la souris se déplace, et on écrit ailleurs que prévu... Très très très embêtant :-)

Touchpad Indicator est un utilitaire qui permet d'éviter de perdre du temps.

Pour l'installer (fonctionne aussi sous kde), il suffit de... l'installer :


sudo add-apt-repository ppa:atareao/atareao
sudo apt-get update
sudo apt-get install touchpad-indicator

Il n'y a plus qu'à le lancer, une petite icone se logera dans la liste des icônes, vous permettant de configurer l'utilitaire :


Et voila!

Configuration de thunderbird pour le développement d'extension

Le développement sur mon pc portable est assez difficile vu la taille de l'écran, j'ai donc dû réinstaller l'environnement de développement pour thunderbird sur mon PC fixe.
Voici les différentes étapes pour mettre en place un environnement de développement d'extension Thunderbird. Ces informations sont (plus) détaillées sur le MDN

Créer un profil de développement

lancer TB avec le choix des profils :
/usr/bin/thunderbird -no-remote -P dev

Faire "Créer un nouveau profil". (l'appeler dev) Cela permettra de bidouiller Thunderbird sans modifier le comportement du profil par défaut.

Modifier certaines préférences de TB

Aller dans Options / Préférences / Avancé / Editeur de configuration. Pour les préférences n'existant pas, il faut les créer.

  • javascript.options.showInConsole = true. Envoie les erreurs sur la console
  • nglayout.debug.disable_xul_cache = true. Supprime le cache XUL pôur éviter de relancer thunderbird à chaque modification des XUL (ça marche moyen chez moi)
  • browser.dom.window.dump.enabled = true. Permet d'utiliser dump() pour écrire dans la console
  • javascript.options.strict = true. ça, ça se passe de commentaires
  • devtools.chrome.enabled = true. This enables to run JavaScript code snippets in the chrome context of the Scratchpad from the Tools menu. Don't forget to switch from content to chrome as context.
  • extensions.logging.enabled = true. This will send more detailed information about installation and update problems to the Error Console.
  • nglayout.debug.disable_xul_fastload = true. normalement inutile car permettait de contourner un bug corrigé depuis, mais par prudence on le garde
  • dom.report_all_js_exceptions = true. See Exception logging in JavaScript for details.

Installer des extensions qui vont nous faciliter la vie

En l'occurence, voici ce que j'ai installé... J'essayerai d'écrire quelques mots sur l'utilisation de chacune de ces extensions.

  • Console2
  • DOM inspector
  • Event Spy
  • Extension TEst
  • Javascript Debugger

En enfin... Faire un lien vers votre répertoire de développement

Créer un fichier pointeur vers l'espace de développement dans le répertoire "extensions" du profil utilisé pour le dev:

Fichier ~/.thunderbird/vnltdsp0.default/extensions/toodledoSend@cmege.fr
Contenu : /home/cmege/Documents/01.Perso/Developpement/Geany/ToodledoSend/

Bien, maintenant on est paré, c'est parti pour le développement !

jeudi 16 février 2012

Mise à jour de GLPI en 0.8.5

GLPI (Gestion Libre de Parc Informatique) est un excellent logiciel open source, qui permet de gérer toute la partie support d'un service informatique.

Il dispose des fonctionnalités principales suivantes :
  • Gestion du parc : inventaire des machines, imprimantes, matériels variés
  • Gestion des incidents : suivi des déclarations d'incidents des utilisateurs, et de leur résolution
  • Et d'un tas d'autres fonctions (remontée automatique de l'inventaire par couplage avec des logiciels comme OCS Inventory, est complètement multi-entités...) mais je vous laisse découvrir sa puissance directement sur le site web du projet 
Bref, je ne veux pas vous faire la publicité de ce logiciel, mais uniquement indiquer la manière de mettre à jour une version.
En l’occurrence, nous allons passer de la version 0.8.2 à la version 0.8.5. Avant tout, vérifiez que vos sauvegardes quotidiennes (vous en avez, bien sûr) ont correctement fonctionné, notamment en ce qui concerne la base de données...
Bien, on se retrousse les manches et on y va :
  1. Petite sauvegarde du répertoire existant
    -> cd /var/www/html
    -> on vérifie que l'on a assez de place pour notre sauvegarde
    -> df -h (donne la place restante)
    -> du -hs glpi (donne la taille du répertoire glpi)
    -> cp -R glpi gpli-0.8.2 (recopie le répertoire glpi)
  2. Mise à jour avec la version suivante (ici téléchargée dans /tmp)
    -> tar xvzf glpi-0.80.5.tar.gz (on décompresse la nouvelle version)
  3. Changement du propriétaire des répertoires
    -> chown -R apache:apache glpi
  4. Et voila! Il ne reste plus qu'à se connecter à glpi, et suivre les instructions pour la mise à jour de la base de données