Outils
Sommaire |
Mise place d'un environnement de développement/débuggage PHP/MySQL associé à un LCS (VM ou LCS de test)
Introduction
L'utilisation d'un IDE facilite le développement d'applications (coloration syntaxique, auto-complétion de code, etc .. ) et dans le cas de Netbeans/xdebug (d'autres aussi certainement) cela permet de faire du débuggage ( mise en place de points d'arrêts, visualisation de la valeur des variables, exécution du script " pas à pas",etc ... ) ainsi que du profiling (mesure de performance des scripts ).
Davantage d'informations sur Netbeans PHP : http://www.netbeans.org/features/php/index.html
Comme on utilisera un LCS distant, il n'est donc pas utile d'avoir un serveur web installé sur votre machine (machine hôte)
Ce document présente :
- la mise en oeuvre de l'IDE Netbeans sur une Debian ou un Mac OS
- l'installation et la configuration de xdebug sur un LCS "distant"
Installation de Netbeans PHP
Téléchargement ici : http://www.netbeans.org/downloads/index.html L'installation est classique et ne pose pas de problème.
Configuration de la machine hôte
Pour exécuter les scripts sur le LCS (ici 192.168.53.5), il est nécessaire de "monter" sur la machine hôte (celle où il y a Netbeans d'installé), le répertoire du LCS hébergeant les scripts. On utilise pour ça sshfs.
Sur un hôte Debian
(pour Ubuntu, ça ne doit pas être très différent)
En root :
- Installer sshfs. Cela installera en dépendance le module fuse
debian:~#apt-get update debian:~#apt-get install sshfs
- Ajouter fuse dans les modules à charger au démarrage
debian:~#echo fuse >> /etc/modules
- Pour le charger pour la session en cours
debian:~#modprobe fuse
- Ajoutez vous au groupe fuse
debian:/# adduser misterphi fuse
En utilisateur non root :
- Créer un répertoire local dans lequel on montera le répertoire "distant"
misterphi@debian:~$ mkdir dir_lcs
- Monter le répertoire distant (192.168.53.5 = IP du Lcs)
misterphi@debian:~$ sshfs root@192.168.53.5:/usr/share/lcs/Plugins/ dir_lcs/ root@192.168.53.5's password:
- Vérifier le "montage"
misterphi@debian:~$ ls dir_lcs Claroline Logs plugins_commun.php plugins_dispo.php plugins_install.php plugins_refecran.php Images phpinfo.php plugins_desinstallation.php plugins_installation.php plugins_maj.php Uploadtmp
- Pour info, on démonte le répertoire par :
misterphi@debian:~$fusermount -u dir_lcs
Sur un hôte Mac OS (Leopard ou Snow-leopard)
- Installer Macfuse, vous trouverez un .dmg ici : http://macfuse.googlecode.com/files/MacFUSE-2.0.3%2C2.dmg
- Installer sshfs , vous trouverez un .dmg ici : http://www.macupdate.com/download.php/23721/sshfs-2.5.1.dmg
Dans un terminal :
- Créer un répertoire local
macbook-de-philippe-leclerc:~ misterphi$ mkdir dir_lcs
- Monter le répertoire "distant"(192.168.53.5 = IP du Lcs)
macbook-de-philippe-leclerc:~ misterphi$ ./mount_sshfs root@192.168.53.5:/usr/share/lcs/Plugins dir_lcs/
- Vérifier le "montage"
macbook-de-philippe-leclerc:~ misterphi$ ls dir_lcs/ Agendas Uploadtmp plugins_commun.php plugins_install.php Claroline index.php plugins_desinstall.php plugins_installation.php Images phpinfo.php plugins_desinstallation.php plugins_installes.php Logs plugins_activation.php plugins_dispo.php plugins_maj.php
- Pour info, on démonte avec umount
macbook-de-philippe-leclerc:~ misterphi$ umount dir_lcs
Sur un hôte Mac OS (Lion)
- MacFuse ne fonctionne plus sous Lion, pire même, il ne se désinstalle pas ! Si vous envisagez de passer de Snow-léopard à Lion, désinstallez le donc avant.
- Pour le désinstaller sous Snow-léopard ->Préférences système -> MacFuse -> remove
- Pour le désinstaller sous Lion, il faut préalablement, dans le fichier /Library/Filesystems/fusefs.fs/Support/uninstall-macfuse-core.sh, remplacer OS_RELEASE=`/usr/bin/uname -r` par OS_RELEASE="10.0.0" puis ->Préférences système -> MacFuse -> remove
- Installer Fuse4x. On trouve un dmg ici
- Installer Fuse4X_SSHFS. On trouve un sshfs-****.zip ici. Le dézipper à la racine, donc il faut être root (sudo su)
- Pour monter, par exemple, le partage Plugins du LCS distant dans le repertoire dir_lcs du mac
sshfs root@IP_LCS:/usr/share/lcs/Plugins dir_lcs -odefer_permissions
- Pour démonter le partage
umount dir_lcs
Installation de xdebug sur le LCS
- Méthode 1 :
- Pour un LCS Lenny, télécharger ftp://debian.crdp.ac-caen.fr/debian/tools/lenny/xdebug.so et le mettre dans /usr/lib/php5/20060613+lfs/
- Pour un LCS Squeeze, télécharger ftp://debian.crdp.ac-caen.fr/debian/tools/squeeze/xdebug.so et le mettre dans /usr/lib/php5/20090626+lfs/
- Méthode PEAR et PECL :
sudo apt-get -y install php-pear php5-dev build-essential sudo pecl install xdebug
- Créer le fichier de configuration apache : /etc/php5/apache2/conf.d/xdebug.ini
Collez y le contenu ci-dessous (après avoir supprimé une des 2 premières lignes, et modifié la valeur de xdebug.remote_host)
zend_extension=/usr/lib/php5/20060613+lfs/xdebug.so (pour un Lenny) zend_extension=/usr/lib/php5/20090626+lfs/xdebug.so (pour un Squeeze) [debug] ; Remote settings xdebug.remote_autostart=off xdebug.remote_enable=on xdebug.remote_handler=dbgp xdebug.remote_mode=req xdebug.remote_host=############### PENSEZ A METTRE L'IP DE LA MACHINE HOTE (même LAN que le LCS)##### xdebug.remote_port=9000 ; General xdebug.auto_trace=off xdebug.collect_includes=on xdebug.collect_params=on xdebug.collect_return=on xdebug.default_enable=on xdebug.extended_info=1 xdebug.manual_url=http://www.php.net xdebug.show_local_vars=1 xdebug.show_mem_delta=1 xdebug.max_nesting_level=100 ;xdebug.idekey= ; Trace options xdebug.trace_format=1 xdebug.trace_output_dir=/usr/share/lcs/Plugins/debug xdebug.trace_options=1 xdebug.trace_output_name=trace ; Profiling xdebug.profiler_append=1 xdebug.profiler_enable=0 xdebug.profiler_enable_trigger=1 xdebug.profiler_output_dir=/usr/share/lcs/Plugins/debug xdebug.profiler_output_name=cachegrind.out
Paramètres importants :
- xdebug.remote_enable : marche/arrêt du debugger
- xdebug.remote_host : ip de votre machine (debian ou MacBook) sur le LAN du LCS (192.168.53.1 pour cet exemple)
Pour faire du profiling, mettre à ON les paramètres xdebug.auto_trace et xdebug.profiler_enable. ATTENTION, les fichiers trace et cachegrind.out qui sont générés dans le répertoire indiqué dans xdebug.trace_output_dir et xdebug.profiler_output_dir grossissent TRES vite et atteignent rapidement plusieurs Go !! Donc ne pas oublier de les remettre à OFF !!
Pour + d'infos sur les paramètres xdebug : http://www.xdebug.org/docs/all_settings
- Redémarrer Apache2
Lcsphil:~#/etc/init.d/apache2 restart
- Tester l'installation de xdebug
php -i | grep 'xdebug support'
doit répondre
xdebug support => enabled
C'est terminé sur le LCS
Exemple d'utilisation de Netbeans
Création d'un projet à partir du plugin Cdt installé sur le LCS "distant"
- Lancer Netbeans
- File -> New project
- Indiquer le chemin du répertoire contenant les fichiers
- Indiquer l'URL du projet SUR LE LCS
- Cliquer sur Finish pour créer le "projet", on obtient :
Dès lors, vous travaillez directement avec les fichiers qui sont sur le LCS "distant"
Pour les tests qui suivent, connectez vous d'abord en Admin sur le LCS
Test du fonctionnement de l'ensemble Netbeans/xdebug/LCS
- Dans la fenêtre suivante cocher Do not show....
- En cliquant sur Debug, ça doit ouvrir la page d'administration de Cdt dans le navigateur
Test de débuggage
On va placer un point d'arrêt sur le script index.php et visualiser la valeur de variables
- Cliquer sur le n° de la ligne 40 pour y placer un point d'arrêt.
- Sélectionner une à une les variables $user["nom"],$user["fullname"],$login et avec un clic droit "New watch". D'où la nécessité d'être connecté sur le LCS, pour que ces variables soient définies.
- Vous devez obtenir :
- Recliquer sur
. Cette fois, le chargement de la page dans le navigateur doit être interrompu (page vide)
- En revenant dans Netbeans, on remarque que le script est arrêté en ligne 40, et la valeur des variables est affichée
- CE QUI EST ENORME :
- Avec la souris, survolez une variable simple dans le script ($login par exemple) et vous voyez sa valeur dans une "bulle".
- Pour les variables plus complexes (indexées par exemple) ou les fonctions , il faut les surligner et placer le curseur dessus. Essayez avec la fonction phpversion() à la ligne 23.
- Clic droit sur une variable, Find Usages localise l'utilisation la variable dans tous les scripts du projet
- Dans le menu Versionning ->Local history, on peut voir toutes les versions enregistrées du fichier, ainsi que les diffs. Et bien sûr revenir à une version antérieure !
- Lorsque le script est arrêté, vous pouvez grâce aux boutons suivants faire du "point d'arrêt à point d'arrêt", du "pas à pas", etc ...
et bien d'autres choses que je vous laisse découvrir.
Profiling
Pour faire du profiling, il faut :
- Installer Kcachegrind et graphviz sur votre machine. Pour Debian, les paquets existent et s'intallent avec un apt-get install. Pour Mac, il faut installer Kcachegrind avec fink car il fait partie de KDE ( pas encore testé, mais j'en connais un qu'il l'a fait).
- Mettre à ON les paramètres xdebug.auto_trace et xdebug.profiler_enable, redemarrer l'indien
- Ouvrir avec Kcachegrind le fichier /usr/share/lcs/Plugins/debug/cachegrind.out ( le chemin est spécifié dans le php.ini (voir plus haut))
Conclusion
Pour les utilisations postérieures il suffira de
- Démarrer le LCS
- Monter le répertoire distant
- Lancer Netbeans
- Ouvrir le projet
- et bosser ....
Doc à compléter. N'hésitez pas
Configuration réseau d'un LCS virtuel
Introduction
Le point "délicat" pour installer un LCS virtuel est la configuration réseau du LCS. Comme c'est un serveur, on ne peut pas le mettre en DHCP, il faut donc paramètrer l'IP et la passerelle en fonction de ses besoins.
Les logiciels de virtualisation (Vmware, Virtual box,...) offre 2 "réglages réseau" utilisables avec un LCS virtuel : PONT (Bridge) et NAT. Le 3ème HOST-ONLY ne présente pas d'intérêt puisque dans ce mode, la machine virtuelle n'a pas accès à Internet.
Mode PONT
- Le LCS virtuel est vu comme une machine physique du LAN.
- Le LCS virtuel a accès à Internet
- Toutes les machines du LAN ont accès au LCS virtuel par son adresse IP
Mais si on connecte la machine hôte (celle où est installé le logiciel de virtualisation) sur un autre réseau, ça ne fonctionne PLUS.
Ce mode est donc préconisé pour une utilisation sur une machine type "ordinateur de bureau"
Configuration réseau du LCS virtuel : il faut lui attribuer une IP compatible avec le LAN, et donner l'IP du routeur LAN comme passerelle.
Exemple en mode PONT :
Mode NAT
- Le LCS n'est pas visible depuis le LAN
- SEULE la machine hôte a accès au LCS virtuel (ce n'est pas un problème pour faire des tests ou du développement)
- Le LCS virtuel a accès à Internet via la machine hôte
Mais si on connecte la machine hôte (celle où est installé le logiciel de virtualisation) sur un autre réseau, ça fonctionne ENCORE .
Ce mode est donc préconisé pour une utilisation sur une machine type "ordinateur portable"
La difficulté pour ce mode est de trouver l'IP du routeur virtuel, pour configurer la passerelle du LCS virtuel.
Pour un vmware installé sur un Mac os, on la trouve dans le fichier Library/Application\ Support/VMware\ Fusion/vmnet8/nat.conf
Pour un vmware installé sur une Debian, on la trouve dans /etc/vmware/vmnet8/nat/nat.conf
# Linux NAT configuration file [host] # NAT gateway address ip = 192.168.53.2
Pour trouver l'IP de vmnet8, il suffit de faire un ifconfig
Configuration réseau du LCS virtuel : Il faut lui attribuer une IP compatible avec vmnet8, et donner l'IP du routeur virtuel NAT comme passerelle.
Exemple en mode NAT :
Installation d'un LCS virtuel
- Installer un logiciel de virtualisation (VMwareserver, Virtual Box, ..)
- Télécharger une iso de type debian-*****-i386-netinst.iso ici http://www.debian.org/distrib/netinst
- Créer une nouvelle machine virtuelle type "Autre noyau Linux 2.6.x"
- Dans les réglages de la VM, affecter le fichier iso comme lecteur CD/DVD
- Choisir le mode réseau PONT ou NAT selon vos besoins
- Démarrer la nouvelle machine virtuelle. A l'invite Debian, n'appuyez sur aucune touche, passez à l'étape ci-dessous.
- Suivre la procédure décrite ici http://lcs.crdp.ac-caen.fr/dilcs/ . (Dans le formulaire de saisie, adapter les adresses ip à votre réseau. Avec l'exemple décrit dans cette page, on remplacera tous les 10.0.0.x par 192.168.53.x pour le mode NAT, ou 192.168.2.x pour le mode PONT)
Une fois la procédure lancée, allez boire un coup au café du coin. A votre retour, vous n'aurez plus qu'à redémarrer la VM pour avoir un LCS tout neuf.
Si par malchance vous obtenez l'écran suivant, c'est que la configuration réseau de votre LCS virtuel n'est pas bonne. Relisez attentivement les paragraphes précédents !!!











