<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Eolya Consulting &#187; Productivité</title>
	<atom:link href="http://www.eolya.fr/category/productivite/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.eolya.fr</link>
	<description>Moteurs de recherche d&#039;entreprise et verticaux</description>
	<lastBuildDate>Thu, 24 Nov 2011 10:52:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Mercurial et Bitbucket &#8211; Workflow default &amp; stable</title>
		<link>http://www.eolya.fr/2011/11/20/mercurial-et-bitbucket-workflow-default-stable/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mercurial-et-bitbucket-workflow-default-stable</link>
		<comments>http://www.eolya.fr/2011/11/20/mercurial-et-bitbucket-workflow-default-stable/#comments</comments>
		<pubDate>Sun, 20 Nov 2011 22:29:54 +0000</pubDate>
		<dc:creator>dominique</dc:creator>
				<category><![CDATA[Productivité]]></category>
		<category><![CDATA[Technique]]></category>
		<category><![CDATA[Bitbucket]]></category>
		<category><![CDATA[mercurial]]></category>

		<guid isPermaLink="false">http://www.eolya.fr/?p=1189</guid>
		<description><![CDATA[Ce document est un mémento des commandes et de leurs enchainements lors de l&#8217;utilisation d&#8217;un dépôt local et d&#8217;un dépôt central hébergé sur Bitbucket. Le principe de travail est basé sur un fonctionnement avec 2 branches : default et stable. La branche &#171;&#160;default&#160;&#187; est la branche de développement qui est toujours la plus à jour [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.zoonix.fr/uploads/2011/01/mercurial-logo.png"><img class="alignleft size-full wp-image-689" title="logo_small" src="http://www.zoonix.fr/uploads/2011/01/mercurial-logo.png" alt="" /></a>Ce document est un mémento des commandes et de leurs enchainements lors de l&#8217;utilisation d&#8217;un dépôt local et d&#8217;un dépôt central hébergé sur Bitbucket. Le principe de travail est basé sur un fonctionnement avec 2 branches : default et stable.</p>
<p>La branche &laquo;&nbsp;default&nbsp;&raquo; est la branche de développement qui est toujours la plus à jour (HEAD dans le monde svn).</p>
<p>La branche &laquo;&nbsp;stable&nbsp;&raquo; est la branche contenant uniquement des versions stables. Le contenu de la branche &laquo;&nbsp;stable&nbsp;&raquo; correspond à la dernière release officielle. On utilise cette branche pour la correction de bugs urgents (hotfix).</p>
<p>Les actions Mercurial sont réalisées au moyen de la commande &laquo;&nbsp;hg&nbsp;&raquo;. Certaines actions concernent le dépôt local (interactions entre les sources et le dépôt local),  d&#8217;autres concernent le dépôt central (interactions entre le dépôt local et le dépôt central). Les commandes locales seront indiquées en bleu et les autres en rouge.</p>
<p>Pour l&#8217;exemple, le projet s&#8217;appelle &laquo;&nbsp;HelloWorld&nbsp;&raquo;. Le but est de commencer avec les 2 dépôt (local et central) synchronisés.</p>
<p><strong><span style="text-decoration: underline;">Cas 1 : le projet est totalement nouveau, il n&#8217;y a ni dépôt local, ni dépôt central</span></strong></p>
<p>Créer un dépôts &laquo;&nbsp;HelloWord&nbsp;&raquo; central sur Bitbucket</p>
<p>On obtient l&#8217;url d&#8217;accès au dépot : ssh://hg@bitbucket.org/bejean/helloworld</p>
<p>Créer un dépôt local</p>
<pre>$ mkdir /Projects/HelloWord
$ cd /Projects/HelloWord
$ <span style="color: #0000ff;">hg init</span></pre>
<p><span style="text-decoration: underline;"><strong>Cas 2 : le projet existe dans un dépôt central</strong></span></p>
<p>Créer un dépôt local et récupérer les sources du dépot central.</p>
<pre>$ mkdir /Projects/HelloWord
$ cd /Projects/HelloWord
$ <span style="color: #0000ff;">hg init</span></pre>
<pre>$ hg clone ssh://hg@bitbucket.org/bejean/helloworld</pre>
<p>(cette commande met à jour à la fois le dépôt local et les sources, elle devrait être bleue et rouge)</p>
<p><span style="text-decoration: underline;"><strong>Cas 3 : le projet existe dans un dépôt local</strong></span></p>
<p>Créer un dépôt central.<br />
On obtient l&#8217;url d&#8217;accès au dépôt : ssh://hg@bitbucket.org/bejean/helloworld</p>
<p>Se placer dans le dépôt local et envoyer les sources dans le dépôt central.</p>
<pre>$ cd /Projects/HelloWord
$ <span style="color: #ff0000;">hg push ssh://hg@bitbucket.org/bejean/helloworld</span></pre>
<p>Pour la suite de cet article, nous supposons que l&#8217;on est dans le cas 1. On a alors nos dépôts créés mais vides.</p>
<p><span style="text-decoration: underline;"><strong>Configuration</strong></span></p>
<p>Afin de ne pas devoir spécifier l&#8217;url du dépôt central pour toutes les commandes qui interagissent entre le dépôt local et le dépôt central (en rouge), nous allons commencer par configurer notre dépôt local.</p>
<p>On édite le fichier &laquo;&nbsp;hgrc&nbsp;&raquo; du dépôt.</p>
<pre>$ cd /Projects/HelloWord
$ vi .hg/hgrc</pre>
<p>et on ajoute la section suivante :</p>
<pre>[paths]
default = ssh://hg@bitbucket.org/bejean/helloworld</pre>
<p><span style="text-decoration: underline;"><strong>Début de développement</strong></span></p>
<p>Commençons à travailler dans notre environnent local. On créer un fichier en local</p>
<pre>$ cd /Projects/HelloWord
$ touch readme.txt</pre>
<p>hg status indique que le fichier est inconnu dans le dépôt local</p>
<pre>$ <span style="color: #0000ff;">hg status</span>
? readme.txt</pre>
<p>On ajoute le fichier dans le dépôt local</p>
<pre>$ <span style="color: #0000ff;">hg add readme.txt</span></pre>
<p>hg status indique que le fichier est connu dans le dépôt local mais pas à jour</p>
<pre>$ <span style="color: #0000ff;">hg status</span>
A readme.txt</pre>
<p>On met a jour le fichier dans le dépôt local</p>
<pre>$ <span style="color: #0000ff;">hg commit -m "Premiere version du fichier" readme.txt</span></pre>
<p>hg status n&#8217;indique plus de fichier inconnus ou non à jour.</p>
<p>hg branches indique maintenant qu&#8217;il existe une branche &laquo;&nbsp;default&nbsp;&raquo;</p>
<pre>$ <span style="color: #0000ff;">hg branches</span>
default                        0:621365c7850a</pre>
<p>Le dépôt central n&#8217;est toujours pas au courant du contenu du dépôt local. On envoi nos modifications dans le dépôt central.</p>
<pre>$ <span style="color: #ff0000;">hg push</span>
pushing to ssh://hg@bitbucket.org/bejean/helloworld
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
remote: bb/acl: bejean is allowed. accepted payload.</pre>
<p>La copie d&#8217;écran si dessous montre que le dépot central est à jour avec une branche &laquo;&nbsp;default&nbsp;&raquo;</p>
<p><a href="http://www.eolya.fr/wp-content/uploads/2011/11/bitbucket_1.png"><img class="aligncenter size-full wp-image-1193" title="bitbucket_1" src="http://www.eolya.fr/wp-content/uploads/2011/11/bitbucket_1.png" alt="" width="511" height="229" /></a></p>
<p><span style="text-decoration: underline;"><strong>Publication d&#8217;une première version stable (v1.0) : branches et tags</strong></span></p>
<p>On considère que cette version des sources du projet est la première version stable. Il faut donc maintenant :</p>
<p>1/ tagger la version</p>
<pre>$ <span style="color: #0000ff;">hg tag v1.0</span></pre>
<p>2/ créer une branche &laquo;&nbsp;stable&nbsp;&raquo; qui soit le reflet de la branche &laquo;&nbsp;default&nbsp;&raquo;</p>
<pre>$ <span style="color: #0000ff;">hg branch stable</span>
$ <span style="color: #0000ff;">hg commit -m "branch stable"</span></pre>
<p>Afficher les tags, les branches et la branche active.</p>
<pre>$ <span style="color: #0000ff;">hg tags</span>
tip                                2:88b63958bb97
v1.0                               0:621365c7850a</pre>
<pre>$ <span style="color: #0000ff;">hg branches</span>
stable                         2:88b63958bb97
default                        1:6d1c947c8a95 (inactive)</pre>
<pre>$ <span style="color: #0000ff;">hg branch</span>
stable</pre>
<p>On met à jour le dépôt central avec la nouvelle branche.</p>
<pre>$ <span style="color: #ff0000;">hg push --new-branch</span></pre>
<p>Voici un schéma qui récapitule les différentes actions et les différents flux.</p>
<p><a href="http://www.eolya.fr/wp-content/uploads/2011/11/graph_1.png"><img class="aligncenter size-full wp-image-1212" title="graph_1" src="http://www.eolya.fr/wp-content/uploads/2011/11/graph_1.png" alt="" width="519" height="375" /></a></p>
<p>Attention, à cette étape, la branche active est &laquo;&nbsp;stable&nbsp;&raquo;. Il faut revenir à la branche &laquo;&nbsp;default&nbsp;&raquo;, pour coder de nouvelles fonctionnalités.</p>
<pre>$ <span style="color: #0000ff;">hg update default</span>
$ <span style="color: #0000ff;">hg branch</span>
default</pre>
<p><span style="text-decoration: underline;"><strong>Le développement continu &#8230;</strong></span></p>
<p>On modifie le fichier readme.txt et la commande hg status nous le confirme.</p>
<pre>$ <span style="color: #0000ff;">hg status</span>
M readme.txt</pre>
<p>on commit les modifications dans le dépôt local</p>
<pre>$ <span style="color: #0000ff;">hg commit -m "Ajout d'une fonction"</span></pre>
<p>On peut vérifier les modifications locales transférables dans le dépôt central.</p>
<pre>$ <span style="color: #ff0000;">hg outgoing</span>
comparaison avec ssh://hg@bitbucket.org/bejean/helloworld
searching for changes
changeset:   3:2b9ef639a08b
tag:         tip
parent:      1:6d1c947c8a95
user:        Dominique Bejean &lt;dominique.bejean@eolya.fr&gt;
date:        Sat Nov 19 20:16:49 2011 +0100
summary:     Ajout d'une fonction</pre>
<p>Si ces modifications sont terminées, on peut les mettre à disposition des autres développeurs dans le dépôt central</p>
<pre>$ <span style="color: #ff0000;">hg push</span></pre>
<p>De même on peut vérifier les modifications faites dans le dépôt central (par d&#8217;autres développeurs) et pouvant être récurées. Dans notre cas, il n&#8217;y en a pas.</p>
<pre>$ <span style="color: #ff0000;">hg incoming</span>
comparaison avec ssh://hg@bitbucket.org/bejean/helloworld
searching for changes
aucun changement trouvé</pre>
<p>Régulièrement, on récupère dans notre dépôt local les modifications faites par les autres développeurs et disponibles dans le dépôt central.</p>
<pre>$ <span style="color: #ff0000;">hg pull</span>
$ <span style="color: #0000ff;">hg update</span></pre>
<p><span style="text-decoration: underline;"><strong>Publication d&#8217;un nouvelle version (v2.0)</strong></span></p>
<p>La publication d&#8217;une nouvelle version implique de :</p>
<p>1/ tagger la branche active (default)</p>
<pre>$ <span style="color: #0000ff;">hg tag v2.0</span></pre>
<p>2/ mettre à jour la stable (merger default dans stable)</p>
<pre>$ <span style="color: #0000ff;">hg update stable</span>
$ <span style="color: #0000ff;">hg merge default</span></pre>
<p>(gérer les conflits. il ne devrait pas y en avoir si les hotfixs fait dans stable ont systématiquement été mergés dans default)</p>
<pre>$ <span style="color: #0000ff;">hg commit -m "merge from default"</span></pre>
<p>3/ revenir dans la branche de développement</p>
<pre>$ <span style="color: #0000ff;">hg update default</span></pre>
<p><span style="color: #000000;">Le diagramme suivant illustre les séquences de commandes durant le cycle de production d&#8217;une nouvelle version :</span></p>
<p><span style="color: #0000ff;"><a href="http://www.eolya.fr/wp-content/uploads/2011/11/graph_3.png"><img class="aligncenter size-full wp-image-1238" title="graph_3" src="http://www.eolya.fr/wp-content/uploads/2011/11/graph_3.png" alt="" width="552" height="620" /></a></span></p>
<p>&nbsp;</p>
<p><span style="text-decoration: underline;"><strong>Correction d&#8217;un bug dans la version stable</strong></span></p>
<p>1/ se placer dans la version stable</p>
<pre>$ <span style="color: #0000ff;">hg update stable</span></pre>
<p>2/ corriger le bug</p>
<pre>$ vi readme.txt</pre>
<p>3/ commiter la correction</p>
<pre>$ <span style="color: #0000ff;">hg commit -m "v2.0 fixe"</span></pre>
<p>4/ revenir à la branche default</p>
<pre>$ <span style="color: #0000ff;">hg update default</span></pre>
<p>5/ merger la correction de la branche stable et résoudre les potentiels conflits</p>
<pre>$ <span style="color: #0000ff;">hg merge stable</span>
$ vi readme.txt
$ <span style="color: #0000ff;">hg resolve -m readme.txt</span>
$ <span style="color: #0000ff;">hg commit -m "merge resolve"</span>
$ rm readme.txt.orig</pre>
<p>&nbsp;</p>
<p>Comme référence, on trouve les 2 diagrammes suivants sur le site <a href="http://ivy.fr/" target="_blank">ivy.fr</a> (licence Creative Commons Attribution 3.0 Unported).</p>
<pre><a href="http://www.eolya.fr/wp-content/uploads/2011/11/Mercurial-QuickStart-v1.0-120dpi.png"><img class="aligncenter size-full wp-image-1219" title="Mercurial-QuickStart-v1.0-120dpi" src="http://www.eolya.fr/wp-content/uploads/2011/11/Mercurial-QuickStart-v1.0-120dpi.png" alt="" width="528" height="408" /></a></pre>
<pre><a href="http://www.eolya.fr/wp-content/uploads/2011/11/Mercurial-Usage-v1.0-120dpi.png"><img class="aligncenter size-full wp-image-1220" title="Mercurial-Usage-v1.0-120dpi" src="http://www.eolya.fr/wp-content/uploads/2011/11/Mercurial-Usage-v1.0-120dpi.png" alt="" width="528" height="408" /></a></pre>
<p>Un autre diagramme (trouvé sur le site <a href="http://secretgeek.net/mercurial_flow.asp" target="_blank">secretGeek</a>) qui indique un workflow basic. Le point 6 (qui n&#8217;est pas systématique) doit être suivi d&#8217;un &laquo;&nbsp;hg up&nbsp;&raquo;.</p>
<p><a href="http://www.eolya.fr/wp-content/uploads/2011/11/mercurial_workflow_image.png"><img class="aligncenter size-full wp-image-1224" title="mercurial_workflow_image" src="http://www.eolya.fr/wp-content/uploads/2011/11/mercurial_workflow_image.png" alt="" width="459" height="374" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.eolya.fr/2011/11/20/mercurial-et-bitbucket-workflow-default-stable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Git et Subversion : quand plus rien ne va</title>
		<link>http://www.eolya.fr/2011/09/17/git-et-subversion-quand-plus-rien-ne-va/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=git-et-subversion-quand-plus-rien-ne-va</link>
		<comments>http://www.eolya.fr/2011/09/17/git-et-subversion-quand-plus-rien-ne-va/#comments</comments>
		<pubDate>Sat, 17 Sep 2011 17:00:43 +0000</pubDate>
		<dc:creator>dominique</dc:creator>
				<category><![CDATA[Productivité]]></category>
		<category><![CDATA[Technique]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.eolya.fr/?p=1103</guid>
		<description><![CDATA[Les plugins WordPress sont livrés dans le directory WordPress au moyen d&#8217;un repository SVN. A chaque nouvelle version du plugin, on en commit les sources et on les tags, ce qui provoque l’apparition de la nouvelle version sur le site WordPress. Afin de gérer les sources du plugin et de travailler en équipe, on peut [...]]]></description>
			<content:encoded><![CDATA[<p>Les plugins WordPress sont livrés dans le <a href="http://wordpress.org/extend/plugins/" target="_blank">directory WordPress</a> au moyen d&#8217;un repository <a href="http://subversion.apache.org/" target="_blank">SVN</a>. A chaque nouvelle version du plugin, on en commit les sources et on les tags, ce qui provoque l’apparition de la nouvelle version sur le site WordPress.</p>
<p>Afin de gérer les sources du plugin et de travailler en équipe, on peut utiliser un outil de gestion de source tel que <a href="http://git-scm.com/">Git</a> et utiliser <a href="https://github.com/">Github</a> comme repository central. Pour la passerelle Git vers SVN, on utilise alors la commande <strong>git svn</strong> et ses différentes actions.</p>
<p>Je ne décrirai pas ici comment fonction SVN et Git. Par contre, je souhaite expliquer comment j&#8217;ai pu résoudre un problème de mise à jour du repository SVN de WordPress lors de la livraison d&#8217;une nouvelle version d&#8217;un plugin.</p>
<p>Donc, après des modifications du plugin, je commit et je mets à jours github. Les commandes successives sont en simplifiant :</p>
<pre>git commit ...
git push origin master</pre>
<p>&nbsp;</p>
<p>Jusque là tout va bien !</p>
<p>Après ceci, je veux mettre à jour le repoitory svn de WordPress puis tagger une nouvelle version du plugin et là patatra !</p>
<pre>git svn dcommit
    Committing to http://plugins.svn.wordpress.org/browse-content-by-my-solr-server/trunk ...
    Merge conflict during commit: File or directory 'browse-content-by-my-solr-server.php' is
    out of date; try updating: resource out of date; try updating at
    /usr/local/git/libexec/git-core/git-svn line 579</pre>
<p>&nbsp;</p>
<p>Que ce fichier soit &laquo;&nbsp;out of date&nbsp;&raquo;, je n&#8217;en doute pas car je l&#8217;ai bien modifié en local et après avoir mis à jour le repository github, c&#8217;est le repository SVN que je veux mettre à jour avec la commande &laquo;&nbsp;git svn dcommit&nbsp;&raquo; . J&#8217;ai l&#8217;impression que j&#8217;ai manqué quelque chose comme une opération &laquo;&nbsp;pull&nbsp;&raquo; en provenance de SVN et d&#8217;un &laquo;&nbsp;rebase&nbsp;&raquo; dans la foulée. Mais, étant le seul à travailler sur ce plugin, personne d&#8217;autre n&#8217;a fait évoluer le repository SVN parallèlement à mes modifications locales. Mystère !</p>
<p>Après de longues recherches sur cette erreur et aucune solution qui ne me permette de commiter et tagger dans svn, je trouve cet article qui me permet de repartir de zéro: <a href="http://danielbachhuber.com/2010/09/29/how-to-properly-use-git-with-wordpress-org-subversion/" target="_blank">http://danielbachhuber.com/2010/09/29/how-to-properly-use-git-with-wordpress-org-subversion/</a></p>
<p>La manipulation décrite rétablie le répertoire de travail local avec le contenu du SVN WordPress qui contient toujours la version précédente du plugin, puis, réinjecte les modifications qui sont dans le repository sur github. En gros, les étapes sont :</p>
<ol>
<li>sauvegarder les derniers developpements locaux (tar &#8230;) et mettre tout cela de coter au cas où &#8230;</li>
<li>recloner le repository svn en local dans un répertoire travail vierge</li>
<li>récupérer la dernière version github qui est à jour avec les dernières modifications (mais sauvegardées par ailleurs au cas où)</li>
<li>commiter sous svn et tagger</li>
</ol>
<p>&nbsp;</p>
<p>Et dans la pratique, cela donne :</p>
<p>* Recréer le répertoire local de travail</p>
<pre>cd &lt;wordpress plugin dir&gt;
rm -rf browse-content-by-my-solr-server
mkdir browse-content-by-my-solr-server</pre>
<p>&nbsp;</p>
<p>* Récupérer dans SVN le numéro de révision correspondant au dernier commit fait.</p>
<pre>svn log https://plugins.svn.wordpress.org/browse-content-by-my-solr-server/</pre>
<pre>------------------------------------------------------------------------
 r436435 | dbejean | 2011-09-11 20:06:54 +0200 (Dim, 11 sep 2011) | 1 line</pre>
<pre>Create tag 1.1.0
 ------------------------------------------------------------------------
 r436432 | dbejean | 2011-09-11 19:58:50 +0200 (Dim, 11 sep 2011) | 1 line</pre>
<pre>template 3
...</pre>
<p>On ne retient pas r436435 qui a été créé par une commande &laquo;&nbsp;git svn tag&nbsp;&raquo;, mais r436432.</p>
<p>&nbsp;</p>
<p>* Cloner le repository SVN dans le répertoire local de travail :</p>
<pre>git svn clone -s -r436432 https://plugins.svn.wordpress.org/browse-content-by-my-solr-server/
cd browse-content-by-my-solr-server
git svn fetch</pre>
<p>Note : &laquo;&nbsp;-s&nbsp;&raquo; est un raccourci pour   &laquo;&nbsp;-t tags -b branches -T trunk&nbsp;&raquo;</p>
<p>&nbsp;</p>
<p>* Ré-associer le répertoire local de travail au repository Github</p>
<pre>git remote add -f origin git@github.com:bejean/browse-content-by-my-solr-server.git
git checkout origin/master *
git add *
git commit -m "Updated from GitHub"</pre>
<p>&nbsp;</p>
<p>* Commiter et tagguer la nouvelle version du plugin dans le SVN WordPress</p>
<pre>git svn rebase
git svn dcommit
git svn tag "x.x.x"</pre>
<p>&nbsp;</p>
<p>Et voilà le plugin est livré !</p>
<p>Il ne me reste plus qu&#8217;à trouver ce qui a provoqué cette erreur afin quelle ne se reproduise plus.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eolya.fr/2011/09/17/git-et-subversion-quand-plus-rien-ne-va/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Migration de Vmware Server 2.0 vers vSphere Hypervisor (ESXi 4.1)</title>
		<link>http://www.eolya.fr/2011/05/10/migration-de-vmware-server-2-0-vers-vsphere-hypervisor-esxi-4-1/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=migration-de-vmware-server-2-0-vers-vsphere-hypervisor-esxi-4-1</link>
		<comments>http://www.eolya.fr/2011/05/10/migration-de-vmware-server-2-0-vers-vsphere-hypervisor-esxi-4-1/#comments</comments>
		<pubDate>Tue, 10 May 2011 22:24:58 +0000</pubDate>
		<dc:creator>dominique</dc:creator>
				<category><![CDATA[Productivité]]></category>
		<category><![CDATA[vmware]]></category>
		<category><![CDATA[ESXi]]></category>
		<category><![CDATA[vSphere Hypervisor]]></category>

		<guid isPermaLink="false">http://www.zoonix.fr/?p=895</guid>
		<description><![CDATA[Dans l&#39;article Vmware server 2.0 sur h&#244;te OpenSuse 11.1 64 bits d&#39;avril 2009, j&#39;expliquais comment installer&#160;Vmware Server 2.0 sur un serveur h&#244;te OpenSuse 11.1 64 bits. Devant prochainement commander plusieurs nouveaux serveurs chez OVH, j&#39;envisage une solution Vmware vSphere Hypervisor qui remplace Vmware Server 2.0 comme solution de virtualisation gratuite. Afin de me faire la [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="vmware" class="alignleft size-full wp-image-233" height="46" src="http://www.zoonix.fr/uploads/2009/04/vmware.jpg" title="vmware" width="96" />Dans l&#39;article <a href="http://www.zoonix.fr/2009/04/26/vmware-server-20-sur-hote-opensuse-111-64-bits/">Vmware server 2.0 sur h&ocirc;te OpenSuse 11.1 64 bits</a> d&#39;avril 2009, j&#39;expliquais comment installer&nbsp;<strong>Vmware Server 2.0</strong> sur un serveur h&ocirc;te <strong>OpenSuse 11.1 64 bits</strong>. Devant prochainement commander plusieurs nouveaux serveurs chez OVH, j&#39;envisage une solution <strong>Vmware vSphere Hypervisor</strong> qui remplace Vmware Server 2.0 comme solution de virtualisation gratuite. Afin de me faire la main sur cette version, j&#39;ai d&eacute;cid&eacute; de migrer mon serveur Vmware Server 2.0 sous OpenSuse vers vSphere Hypervisor.<span id="more-895"></span></p>
<p>La premi&egrave;re chose a v&eacute;rifier avent de se lancer dans l&#39;installation de Vmware vSphere Hypervisor, c&#39;est <a href="http://www.vmware.com/resources/compatibility/search.php">la compatibilit&eacute; mat&eacute;rielle de votre serveur</a>. Par exemple, les 2 cartes r&eacute;seaux de la carte m&egrave;re ASUS P6T Deluxe V2 ne sont pas compatibles. J&#39;ai du les d&eacute;sactiver et utiliser &agrave; la place une carte r&eacute;seau <strong>Intel PRO 1000 GT PCI</strong>.&nbsp;</p>
<p>Les &eacute;tapes de la migration sont:</p>
<ul>
<li><a href="https://www.vmware.com/tryvmware/index.php?p=free-esxi&amp;lp=1">t&eacute;l&eacute;charger vSphere Hypervisor</a> sur le site Vmware et r&eacute;cup&eacute;rer une cl&eacute; de licence gratuite</li>
<li>r&eacute;cup&eacute;ration de toutes les vm h&eacute;berg&eacute;es sur le serveur OpenSuse sur un disque de backup. Ce disque doit &ecirc;tre accessible depuis un poste Windows XP ou Seven car les images qui s&#39;y trouvent serviront pour leur r&eacute;installation sur le serveur&nbsp;vSphere Hypervisor.</li>
<li>installation de&nbsp;vSphere Hypervisor. Suivre <a href="http://www.tuto-it.fr/InstallationVMwareESXi.php">ce guide</a> sur le site <strong>Tuto-IT</strong>. Apres l&#39;&eacute;tape imp&eacute;rative du choix d&#39;un mot de passe (le client vSphere ne peut pas se connecter au serveur sans mot de passe), il faut absolument en profiter pour autoriser les acc&egrave;s SSH &agrave; ESXi. Pour cela, aller dans le menu &quot;Troubleshooting options&quot;.</li>
<li>installation du client vSphere sur un poste Windows</li>
<li>installation Vmware vCenter Converter Standalone sur un poste Windows</li>
<li>importation des machine virtuelles</li>
</ul>
<p><strong>Probl&egrave;mes rencontr&eacute;s lors de l&#39;importation de mes machines virtuelles</strong></p>
<p><meta charset="utf-8" />Dans le r&eacute;capitulatif pr&eacute;-conversion, bien v&eacute;rifier que le disque dure est de type &quot;L&eacute;ger&quot; et non pas &quot;Plat&quot;. En mode &quot;Plat&quot;, la totalit&eacute; de l&#39;espace disque est pr&eacute;-allou&eacute; dans le datastore.</p>
<p>Vmware vCenter Converter ne reconnait pas automatiquement les distributions Debian. J&#39;ai du manuellement modifier le type de distribution en indiquant Debian 5.0 64 bits (pour Lenny et Squeeze). Plus tard, dans le&nbsp;client vSphere, la mise &agrave; jour automatique des Vmware tools se passera sans aucun soucis dans le mode automatique.</p>
<p><meta charset="utf-8" /></p>
<p>Je n&#39;ai pas r&eacute;ussi &agrave; importer 2 clients Windows XP Pro qui &eacute;taient dans Vmware Server 2.0. J&#39;ai du utiliser une machine virtuelle Windows XP qui tourne sous Vmware Fusion. J&#39;y ai remplac&eacute; le fichier vmdk par ceux des VM que je ne r&eacute;ussissais pas &agrave; importer.&nbsp;</p>
<p><strong>Les backups</strong></p>
<p>Dans vSphere Hypervisor, il n&#39;y a pas de solution de backup int&eacute;gr&eacute;e. Je vous conseille les scripts <strong>ghettoVCB</strong> disponibles sur le site de Vmware (du s&eacute;rieux donc) :</p>
<ul>
<li><a href="http://communities.vmware.com/docs/DOC-8760">sauvegarde</a></li>
<li><a href="http://communities.vmware.com/docs/DOC-10595">restauration</a></li>
</ul>
<p><strong>Templates</strong></p>
<p>Il n&#39;y a pas non plus de solution de VM Template que l&#39;on peut cloner pour mettre en place rapidement un nouveau serveur.</p>
<p>Pour contourner ce probl&egrave;me, j&#39;ai import&eacute; ma VM Debian 6.0 de base et je l&#39;ai nomm&eacute;e &quot;_TEMPLATE_DEBIAN_60_64B&quot;. Cette VM n&#39;a pas vocation &agrave; &ecirc;tre allum&eacute;e sauf une fois pour la mettre &agrave; jour (&quot;aptitude update&quot; et &quot;aptitude upgrade&quot;) et mettre &agrave; jour les Vmvare tools. &nbsp;</p>
<p>Pour d&eacute;ployer un nouveau serveur, je me connecte en ssh &agrave; ESXi, je copie le r&eacute;pertoire de la VM template sous un autre nom dans le m&ecirc;me datastore ou dans un autre. Puis, j&#39;enregistre la nouvelle VM dans ESXi avec la commande suivante :</p>
<p><span style="font-family:courier new,courier,monospace;">/bin/vim-cmd solo/registervm &lt;chemin_complet_du_fichier_vmx_de_la_vm_a_activer&gt;</span></p>
<p><meta charset="utf-8" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.eolya.fr/2011/05/10/migration-de-vmware-server-2-0-vers-vsphere-hypervisor-esxi-4-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mercurial : la gestion de source qui me convient</title>
		<link>http://www.eolya.fr/2011/01/23/mercurial-la-gestion-de-source-qui-me-convient-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mercurial-la-gestion-de-source-qui-me-convient-2</link>
		<comments>http://www.eolya.fr/2011/01/23/mercurial-la-gestion-de-source-qui-me-convient-2/#comments</comments>
		<pubDate>Sun, 23 Jan 2011 16:59:40 +0000</pubDate>
		<dc:creator>dominique</dc:creator>
				<category><![CDATA[Productivité]]></category>
		<category><![CDATA[hg]]></category>
		<category><![CDATA[mercurial]]></category>

		<guid isPermaLink="false">http://www.zoonix.fr/?p=751</guid>
		<description><![CDATA[Cela fait un certain temps que je veux utiliser une solution de gestion de sources pour mes développements. J&#8217;ai longtemps tourné en rond autour d&#8217;une solution Subversion intégrée dans Eclipse avec les plugins Subversive ou Subclipse. Après plusieurs tentatives au fils des mois, je ne suis jamais parvenu à utiliser Subversion au quotidien et j&#8217;ai [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.zoonix.fr/uploads/2011/01/mercurial-logo.png"><img class="alignleft size-full wp-image-689" title="logo_small" src="http://www.zoonix.fr/uploads/2011/01/mercurial-logo.png" alt="" /></a>Cela fait un certain temps que je veux utiliser une solution de gestion de sources pour mes développements. J&#8217;ai longtemps tourné en rond autour d&#8217;une solution <a href="http://subversion.tigris.org/" target="_blank">Subversion</a> intégrée dans <a href="http://www.eclipse.org/" target="_blank">Eclipse</a> avec les plugins <a href="http://www.eclipse.org/subversive/" target="_blank">Subversive</a> ou <a href="http://subclipse.tigris.org/" target="_blank">Subclipse</a>. Après plusieurs tentatives au fils des mois, je ne suis jamais parvenu à utiliser Subversion au quotidien et j&#8217;ai abandonné à chaque fois. En fait, j&#8217;ai trouvé cette solution trop contraignante pour 4 raisons : ma volonté de l&#8217;utiliser depuis Eclipse, l&#8217;obligation d&#8217;installer un serveur subversion, ne pas travailler en équipe sur des sources communs et le fait de faire un apprentissage de l&#8217;outil seul.</p>
<p>Depuis quelques semaines je collabore à un projet qui nécessite un travail en équipe et qui impose donc un outil de gestion de sources. N&#8217;ayant pas le choix, j&#8217;ai bien du m&#8217;y mettre et avec l&#8217;assistance de mes partenaires de travail, ça c&#8217;est finalement passé vite et plutôt facilement. Cet outil, c&#8217;est <a href="http://mercurial.selenic.com/" target="_blank">Mercurial</a> (également appelé Hg). <span id="more-751"></span></p>
<p>Je ne vais pas vous faire ici une étude comparée de Subversion et de Mercurial car ceci est déjà très bien fait sur le blog <a href="http://blog.pilotsystems.net/2009/05/tutorial-francais-mercurial-hg" target="_blank">PilotSystems</a>. Je dirai juste que contrairement à Subversion qui utilise un dépôt unique centralisé par tous les développeurs, Mercurial utilise 2 types de dépôt : un dépôt local et un dépôt central. L&#8217;avantage de ce système dans mon cas est que pour la plupart de mes projets, le dépôt local me suffit car je travail seul. Le dépôt local permet toutes les opérations dont on a besoin au minimum : commit, update revert, diff, tags, branch, &#8230;</p>
<p>Un autre point à l&#8217;avantage de Mercurial est que le dépot local est constitué d&#8217;une arborescence de fichiers simples à sauvegarder et que les sources ne sont pas pollués par des fichiers cachés dans chaque répertoires des sources.</p>
<p>Je n&#8217;utilise par Mercurial depuis Eclipse mais soit en ligne de commandes (il n&#8217;y a pas tant de commandes que ça) soit avec l&#8217;interface graphique<a href="http://jasonfharris.com/machg/" target="_blank"> MacHG</a>.</p>
<h3>Tutoriaux et arcticles</h3>
<p>Voici les bons tutoriaux que j&#8217;ai trouvé (par ordre de préférence) :</p>
<ul>
<li><a href="http://hginit.com/" target="_blank">HGInit : a Mercurial tutorial</a></li>
<li><a href="http://blog.pilotsystems.net/2009/05/tutorial-francais-mercurial-hg" target="_blank">Un tutorial en français sur l&#8217;utilisation de Mercurial</a></li>
<li><a href="http://hgbook.red-bean.com/read/index.html" target="_blank">Mercurial : the definitive guide<br />
</a></li>
</ul>
<p>Une très bonne série d&#8217;articles par <a href="http://stevelosh.com/" target="_blank">Steve Losh</a> sur l&#8217;utilisation des branches :</p>
<ul>
<li><a href="http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/" target="_blank">A Guide to Branching in Mercurial</a></li>
<li><a href="http://stevelosh.com/blog/2010/02/mercurial-workflows-branch-as-needed/" target="_blank">Mercurial Workflows: Branch As Needed</a></li>
<li><a href="http://stevelosh.com/blog/2010/05/mercurial-workflows-stable-default/" target="_blank">Mercurial Workflows: Stable &amp; Default</a></li>
<li><a href="http://stevelosh.com/blog/2010/06/mercurial-workflows-translation-branches/" target="_blank">Mercurial Workflows: Translation Branches<br />
</a></li>
</ul>
<h3>Outils de Merge et de Diff</h3>
<p>Tout d&#8217;abord, configurer l&#8217;outil de comparaison (diff) et d&#8217;assistance au merge. En ligne de commande, par défaut, il n&#8217;y a pas d&#8217;outil de diff et de merge actif et avec MacHg par défaut, c&#8217;est <strong>Filemerge</strong> qui est utilisé si <strong>XCode</strong> est installé. Le problème avec Filemerge, c&#8217;est qu&#8217;il ne réussi pas toujours à afficher les différences et qu&#8217;il ne peut pas comparer simultanément 3 versions d&#8217;un même fichier pour gérer efficacement les merges.</p>
<p>J&#8217;ai donc choisi d&#8217;installer <a href="http://www.sourcegear.com/diffmerge/" target="_blank">Diffmerge</a>. La procédure d&#8217;installation est bien documentée et simple (dans le fichier Readme). Il faut bien aller jusqu&#8217;au bout en installant les scripts de lancement en ligne de commande. Pour l&#8217;intégration à Mercurial, cela se passe dans le fichier <strong>~/.hgrc</strong> et c&#8217;est également bien documenté sur <a href="http://mercurial.selenic.com/wiki/DiffMerge" target="_blank">le wiki de Mercurial</a>. Pour une utilisation avec MacHg, il faut aller sur l&#8217;onglet &laquo;&nbsp;Advanced&nbsp;&raquo; des préférences de MacHg. Positionner les options de la zone &laquo;&nbsp;Merge and Diff Tool&nbsp;&raquo; comme indiqué dans la copie d&#8217;écran ci-dessous.</p>
<p style="text-align: center;"><a href="http://www.zoonix.fr/uploads/2011/01/Capture-d’écran-2011-01-24-à-09.43.231.png"><img title="MacHg" src="http://www.zoonix.fr/uploads/2011/01/Capture-d’écran-2011-01-24-à-09.43.231.png" alt="MacHg" /></a></p>
<p>&nbsp;</p>
<h3>Gestion des mots de passe par dépot</h3>
<p>Lors d&#8217;un accès aux dépôts centralisés, il est demandé un login. Il est possible de stocker ces login par dépôt dans le fichier <strong>~/.hgrc</strong>. Tout se passe dans la section &laquo;&nbsp;[auth]&nbsp;&raquo; comme indiqué dans cet exemple.</p>
<pre>[auth]
bb1.prefix = https://sources.depot1.org/
bb1.username = dominique
bb1.password = xxxx

bb2.prefix = https://sources.depot2.net/
bb2.username = dom
bb2.password = yyyy

...

bbN.prefix = https://sources.depotNN.fr/
bbN.username = domi
bbN.password = zzzz</pre>
<p>&nbsp;</p>
<p><span style="text-decoration: underline;"><strong>Mise à jour du 19 septembre 2011 :</strong></span></p>
<p>Depuis l&#8217;écriture de cet article, j&#8217;ai également travaillé avec <strong>Git</strong> un autre outils de gestion de source. Tout comme Mercurial, Git est une solution comportant un  dépôt local et et un dépôt central. Bien que le principe soit le même, les commandes varient sensiblement et je trouve finalement Git plus complexe à utiliser que Mercurial. Je suis entre autre perturbé par l&#8217;absence de commandes simples similaire à hg incoming et hg outgoing.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eolya.fr/2011/01/23/mercurial-la-gestion-de-source-qui-me-convient-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mac OS X et outils de développement</title>
		<link>http://www.eolya.fr/2009/12/20/mac-os-x-et-outils-de-developpement/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mac-os-x-et-outils-de-developpement</link>
		<comments>http://www.eolya.fr/2009/12/20/mac-os-x-et-outils-de-developpement/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 23:27:08 +0000</pubDate>
		<dc:creator>dominique</dc:creator>
				<category><![CDATA[Mac OS]]></category>
		<category><![CDATA[Productivité]]></category>
		<category><![CDATA[Technique]]></category>

		<guid isPermaLink="false">http://www.zoonix.fr/?p=401</guid>
		<description><![CDATA[Le but est de pouvoir d&#233;velopper sous Mac OX (Snow Leopard) des applications AMP (Apache / MySQL / PHP) et des applications Java (dont des servlets dans Tomcat). Dans cet article sont abord&#233;es les installations de Apache, PHP, MySQL, Java, Tomcat et Eclipse. &#160; &#160; Xcode C&#39;est la premi&#232;re &#233;tape incontournable pour disposer d&#39;un environnement [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.zoonix.fr/uploads/2009/12/icon_xcode_20090824.png"><img alt="icon_xcode_20090824" class="alignleft size-full wp-image-437" height="106" src="http://www.zoonix.fr/uploads/2009/12/icon_xcode_20090824.png" title="icon_xcode_20090824" width="91" /></a></p>
<p>Le but est de pouvoir d&eacute;velopper sous Mac OX (Snow Leopard) des applications AMP (Apache / MySQL / PHP) et des applications Java (dont des servlets dans Tomcat). Dans cet article sont abord&eacute;es les installations de Apache, PHP, MySQL, Java, Tomcat et Eclipse.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3>Xcode</h3>
<p>C&#39;est la premi&egrave;re &eacute;tape incontournable pour disposer d&#39;un environnement de d&eacute;veloppement sous Mac OS. Xcode est disponible sur le DVD de Snow Leopard, mais la derni&egrave;re version &agrave; jour est disponible gratuitement sur le site de Apple (http://developer.apple.com/products/membership.html). Xcode inclut les outils minimums pour cr&eacute;er et debugger des applications pour Mac (ou iPhone).</p>
<h3><span id="more-401"></span>Java</h3>
<p>Pour Java, il n&#39;y a rien &agrave; faire puisque le JDK 1.6 est inclus dans Snow Leopard.</p>
<h3>MySQL</h3>
<p>Pour install&eacute; MySQL, j&#39;ai suivi la proc&eacute;dure d&eacute;crite dans cette page &quot;<a href="http://hivelogic.com/articles/installing-mysql-on-mac-os-x" target="_blank">Installing MySQL on Mac OS X</a>&quot;. Je l&#39;ai juste appliqu&eacute;e &agrave; une version 5.0.88.</p>
<p>A noter cette article &eacute;galement qui d&eacute;crit en plus la cr&eacute;ation d&#39;un user mysql &quot;<a href="http://www.malisphoto.com/tips/mysql-on-os-x.html" target="_blank">Compiling and Installing MySQL 5 on Mac OS X Leopard</a>&quot;</p>
<h3>Apache</h3>
<p>Comme pour Java, il n&#39;y a rien &agrave; faire puisque Apache 2.2 est install&eacute; avec Snow Leopard (Partage web).</p>
<h3>PHP</h3>
<p>Apache est install&eacute; avec Snow Leopard donc en toute logique PHP l&#39;est &eacute;galement (mais n&#39;est pas actif dans Apache par d&eacute;faut). Le probl&egrave;me (pas forc&eacute;ment pour tout le monde) est qu&#39;il s&#39;agit de la version 5.3 et que j&#39;ai besoin de la version 5.2.x. Il faut donc downgrader PHP.</p>
<h4>Activation de Php 5.3 dans Apache</h4>
<p>Il suffit de d&eacute;commenter la ligne suivante dans /etc/apache2/httpd.conf.</p>
<pre>#LoadModule php5_module        libexec/apache2/libphp5.so</pre>
<h4>Downgrader Php en version 5.2.x</h4>
<p>Pour cela, soit on utilise une distribution 5.2.x pour Mac OS toute pr&ecirc;te, soit on compile soit m&ecirc;me Php. Pour utiliser une distribution toutes pr&ecirc;te de Php 5.2.9 pour Mac OS, on se rend sur le site de <a href="http://www.entropy.ch/home/welcome.php" target="_blank">Marc Liyanage</a>. Outre <a href="http://www.entropy.ch/software/macosx/php/" target="_blank">la page sur les distributions de Php pour Mac OS</a>, ce site fournit des informations sur Mac OS en g&eacute;n&eacute;ral, MySQL, Java et Perl.</p>
<p class="title">J&#39;ai choisi de compiler moi m&ecirc;me Php afin de disposer d&#39;une version &agrave; jour (5.2.11). Pour cela, je me suis principalement bas&eacute; sur cet article &quot;<a href="http://pixelchimp.net/blog/pixel-chimp/reverting-php-53-5210-snow-leopard" target="_blank">Reverting PHP 5.3 to 5.2.10 on Snow Leopard</a>&quot;. Le seul changement que j&#39;ai apport&eacute; &agrave; la proc&eacute;dure d&eacute;crite concerne la configuration de la compilation de Php. J&#39;ai utilis&eacute; cette ligne de commande afin d&#39;activer entre autres l&#39;option sockets.</p>
<pre class="title">./configure
&nbsp;&nbsp;&nbsp; --prefix=/usr/local/php5
&nbsp;&nbsp;&nbsp; --with-apxs2
&nbsp;&nbsp;&nbsp; --enable-pdo
&nbsp;&nbsp;&nbsp; --enable-ftp
&nbsp;&nbsp;&nbsp; --enable-mbstring
&nbsp;&nbsp;&nbsp; --enable-mbregex
    --enable-soap
&nbsp;&nbsp;&nbsp; --enable-sockets
&nbsp;&nbsp;&nbsp; --enable-gd-native-ttf
&nbsp;&nbsp;&nbsp; --enable-cli
&nbsp;&nbsp;&nbsp; --with-freetype-dir=/usr/local/lib
&nbsp;&nbsp;&nbsp; --with-t1lib=/usr/local/lib
&nbsp;&nbsp;&nbsp; --with-gd
&nbsp;&nbsp;&nbsp; --with-zlib
&nbsp;&nbsp;&nbsp; --with-jpeg-dir=/usr/local/lib
&nbsp;&nbsp;&nbsp; --with-png-dir=/usr/local/lib
&nbsp;&nbsp;&nbsp; --with-curl
&nbsp;&nbsp;&nbsp; --with-mcrypt
&nbsp;&nbsp;&nbsp; --with-pdo_mysql=/usr/local/mysql
&nbsp;&nbsp;&nbsp; --with-mysql=/usr/local/mysql/
&nbsp;&nbsp;&nbsp; --with-mysqli=/usr/local/mysql/bin/mysql_config
&nbsp;&nbsp;&nbsp; --without-iconv</pre>
<p class="title">Je regrette de n&#39;avoir pas r&eacute;ussi &agrave; installer et activer la librairie iconv &agrave; cause d&#39;une erreur de compilation. Normalement, la solution est dans <a href="http://bugs.php.net/bug.php?id=49267" target="_blank">cette page</a>, mais pour moi, cela n&#39;a pas (encore) fonctionn&eacute;.</p>
<p>Durant mes recherches, j&#39;ai &eacute;galement trouv&eacute; ces articles int&eacute;ressants :</p>
<ul>
<li><a href="http://www.malisphoto.com/tips/php-on-os-x.html#Anchor-Backup" target="_blank">Enabling, Compiling and Installing PHP 5 on Mac OS X Leopard</a></li>
<li><a href="http://adylitica.com/2009/11/24/installing-amp-apache-mysql-php-on-mac-os-x-10-6-snow-leopard/" target="_blank">Installing AMP (Apache, MySQL, PHP) on Mac OS X 10.6 Snow Leopard</a></li>
</ul>
<p>Note : pour l&#39;installation de soap.so, voir&nbsp;<a href="http://www.bdoran.co.uk/2010/08/03/installing-php-soap-on-osx-leopard-10-6-4/" target="_blank">http://www.bdoran.co.uk/2010/08/03/installing-php-soap-on-osx-leopard-10-6-4/</a></p>
<h3>Tomcat</h3>
<p>On trouve beaucoup d&#39;articles d&eacute;crivant l&#39;installation de Tomcat sous Mac OS. Pour des raisons de compatibilit&eacute;s avec les serveurs Tomcat que je g&egrave;re et pour lesquels je d&eacute;veloppe, je souhaite installer une version 5.5. Je me suis bas&eacute; sur cet article : <a href="http://philatwarrimoo.blogspot.com/2009/08/apache-tomcat-55-installation-on-mac-os.html" target="_blank">Apache Tomcat 5.5 Installation on Mac OS-X Leopard 10.5.x</a>.</p>
<p>De mon cot&eacute;, j&#39;ai install&eacute; Tomcat dans /opt/apache-tomcat-5.5.28. J&#39;ai &eacute;galement changer le port d&#39;&eacute;coute de Tomcat de 8080 &agrave; 8180 comme sous Debian. La version de Java install&eacute;e avec Snow Leopard est la 1.6 donc dans startup.sh, les variables JAVA_HOME et CATALINA_HOME sont les suivantes :</p>
<pre>export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/
export CATALINA_HOME=/opt/apache-tomcat-5.5.28</pre>
<p>Durant mes recherches, j&#39;ai &eacute;galement trouv&eacute; ces articles int&eacute;ressants :</p>
<ul>
<li><a href="http://www.malisphoto.com/tips/tomcatonosx.html" target="_blank">Installing Apache Tomcat 6 on Mac OS X Leopard</a></li>
<li><a href="http://wiki.apache.org/tomcat/TomcatOnMacOS" target="_blank">Running Tomcat on Macintosh OS X</a></li>
</ul>
<p>Dans ce dernier article est expliqu&eacute; comment faire afin que Tomcat d&eacute;marre automatiquement comme un demon. Il y plusieurs solutions et j&#39;ai choisi la suivante :</p>
<p>1. Positionner les variables d&#39;environnement JAVA_HOME et CATALINA_HOME au d&eacute;but du script /opt/apache-tomcat-5.5.28/bin/catalina.sh</p>
<p>2. Cr&eacute;er un fichier /Library/LaunchDaemons/org.apache.tomcat.plist qui contient ceci.</p>
<pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot;
&quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
&lt;plist version=&quot;1.0&quot;&gt;
&lt;dict&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key&gt;Disabled&lt;/key&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;false/&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key&gt;Label&lt;/key&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;string&gt;org.apache.tomcat&lt;/string&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key&gt;ProgramArguments&lt;/key&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;array&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;string&gt;/opt/apache-tomcat-5.5.28/bin/catalina.sh&lt;/string&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;string&gt;run&lt;/string&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/array&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key&gt;RunAtLoad&lt;/key&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;true/&gt;
&lt;/dict&gt;
&lt;/plist&gt;
</pre>
<p>et lui affecter le bon propri&eacute;taire :</p>
<pre>sudo chown root:wheel /Library/LaunchDaemons/org.apache.tomcat.plist</pre>
<p>Le d&eacute;marrage et l&#39;arr&ecirc;t manuel de Tomcat se font ainsi :</p>
<pre>sudo launchctl load /Library/LaunchDaemons/org.apache.tomcat.plist</pre>
<pre>sudo launchctl unload /Library/LaunchDaemons/org.apache.tomcat.plist
</pre>
<h3>Eclipse pour Java et Php</h3>
<p>Pour l&#39;installation de Eclipse, ma source d&#39;informations est cet article <a href="http://blog.zvikico.com/2009/10/installing-eclipse-galileo-on-mac-os-x.html" target="_blank">Installing Eclipse Galileo on Mac OS X</a>, mais on peut &eacute;galement regarder du cot&eacute; de la distribution <a href="http://www.poweredbypulse.com/index.php" target="_blank">Pulse</a>.</p>
<h4>Java</h4>
<p>La proc&eacute;dure est simple :</p>
<p>1. Sur <a href="http://eclipse.org/downloads/" target="_blank">la page de t&eacute;l&eacute;chargement de Eclipse</a>,&nbsp; r&eacute;cup&eacute;rer la version Cocoa 32 bits de &quot;Eclipse IDE for Java EE Developers&quot; ou de &quot;Eclipse IDE for Java Developers&quot; et d&eacute;compresser l&#39;archive r&eacute;cup&eacute;r&eacute;e. Un r&eacute;pertoire &quot;eclipse&quot; est cr&eacute;&eacute;.</p>
<p>2. Cr&eacute;er un r&eacute;pertoire /Applications/Dev et y copier le r&eacute;pertoire &quot;eclipse&quot; issue de la d&eacute;compression de l&#39;archive.</p>
<h4>Php</h4>
<p>Pour la version Php de Eclipse (Eclipse for PHP Developers), la proc&eacute;dure est exactement la m&ecirc;me. Avant de copier dans /Applications/dev le r&eacute;pertoire cr&eacute;&eacute; par la d&eacute;compression de l&#39;archive, je le renomme &quot;eclipse php&quot;.</p>
<h4>Xdebug pour Php</h4>
<p>Pour Eclipse Php, il est n&eacute;cessaire d&#39;installer le composant de debuggage Xdebug.</p>
<p>Sur la page <a href="http://aspn.activestate.com/ASPN/Downloads/Komodo/RemoteDebugging/" target="_blank">http://aspn.activestate.com/ASPN/Downloads/Komodo/RemoteDebugging/</a>, on t&eacute;l&eacute;charge dans la section &quot;Komodo 5.2 Remote Debugging Packages&quot; le module &quot;PHP Remote Debugging&quot; pour Mac OS X. Une fois d&eacute;compress&eacute;, l&#39;archive contient la librairy xdebug.so pour diff&eacute;rentes versions de Php.</p>
<p>Dans un terminal ex&eacute;cuter la commande qui suit (sur une seule ligne) en rempla&ccedil;ant les &quot;x&quot; par les valeurs correspondants &agrave; la version que vous aurez t&eacute;l&eacute;charg&eacute;e :</p>
<pre>sudo cp ~/Downloads/Komodo-PHPRemoteDebugging-5.2.x-xxxxx-macosx/5.2/xdebug.so
/usr/local/php5/include/php/ext/</pre>
<p>Dans php.ini (/usr/local/php5/lib/php.ini), ajoutez les lignes suivantes &agrave; la fin du fichier&nbsp;:</p>
<pre>zend_extension=/usr/local/php5/include/php/ext/xdebug.so

[Xdebug]
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_autostart=1
xebug.remote_handler=dbgp
</pre>
<p>Red&eacute;marrez Apache (Pr&eacute;f&eacute;rences Syst&egrave;me -&gt; partage -&gt; partage web).</p>
<p>&nbsp;</p>
<h3>Sites utiles</h3>
<ul>
<li><a href="http://www.entropy.ch/home/welcome.php" target="_blank">http://www.entropy.ch/home/welcome.php</a></li>
<li><a href="http://blog.zvikico.com/" target="_blank">http://blog.zvikico.com/</a></li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eolya.fr/2009/12/20/mac-os-x-et-outils-de-developpement/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Introduction à Solr &#8211; Installation et configuration (2)</title>
		<link>http://www.eolya.fr/2009/05/10/introduction-a-solr-installation-et-configuration-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=introduction-a-solr-installation-et-configuration-2</link>
		<comments>http://www.eolya.fr/2009/05/10/introduction-a-solr-installation-et-configuration-2/#comments</comments>
		<pubDate>Sun, 10 May 2009 22:57:47 +0000</pubDate>
		<dc:creator>dominique</dc:creator>
				<category><![CDATA[Lucene / Solr]]></category>
		<category><![CDATA[Moteur de recherche]]></category>
		<category><![CDATA[Productivité]]></category>
		<category><![CDATA[Technique]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[Solr]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://www.zoonix.fr/?p=271</guid>
		<description><![CDATA[Dans les précédents articles consacrés à Solr, j&#8217;en décris les principes (Présentation de Lucene Solr) et  comment installer et configurer de façon très basique Solr afin de pouvoir indexer et rechercher dans le jeu de données de test fourni dans la distribution (Introduction à Solr &#8211; Installation et configuration (1)). Dans ce nouvel article, je [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.zoonix.fr/uploads/2008/09/solr.png"><img class="alignleft size-medium wp-image-83" title="solr" src="http://www.zoonix.fr/uploads/2008/09/solr.png" alt="" width="86" height="44" /></a>Dans les précédents articles consacrés à <strong>Solr</strong>, j&#8217;en décris les principes (<a href="http://www.zoonix.fr/2008/09/18/presentation-de-lucene-solr/">Présentation de Lucene Solr</a>) et  comment installer et configurer de façon très basique <strong>Solr </strong>afin de pouvoir indexer et rechercher dans le jeu de données de test fourni dans la distribution (<a href="http://www.zoonix.fr/2008/12/08/introduction-a-solr-installation-et-configuration-1/">Introduction à Solr &#8211; Installation et configuration (1)</a>).</p>
<p>Dans ce nouvel article, je vais expliquer plus en détail les points suivants :</p>
<ul>
<li>Le contenu de la distribution</li>
<li>Les fichiers de configuration</li>
<li>Comment gérer plusieurs indexes ?</li>
<li>Comment gérer plusieurs applications ?</li>
</ul>
<p><span id="more-271"></span></p>
<h3>Le contenu de la distribution</h3>
<p>Une fois récupérée et décompressée dans un répertoire, la distribution de Solr contient différents répertoires.</p>
<table border="0">
<tbody>
<tr>
<td style="background-color: #dcdcdc;" colspan="3"><strong>Client</strong></td>
</tr>
<tr>
<td style="width: 20px;"></td>
<td colspan="2">Des API clientes pour Java (solrj) et Ruby (solr-ruby). Il existe en fait des solutions d&#8217;intégration avec d&#8217;autres langages (Perl, PHP, Python, C#, &#8230;). Une liste est disponible <a href="http://wiki.apache.org/solr/IntegratingSolr" target="_blank">ici </a>sur le wiki de Solr.</td>
</tr>
<tr>
<td style="background-color: #dcdcdc;" colspan="3"><strong>Contrib</strong></td>
</tr>
<tr>
<td style="width: 20px;"></td>
<td colspan="2">
<p>Des outils qui contribuent à étendre les fonctionnalités de Solr. Dans la distribution 1.3.0, il s&#8217;agit uniquement de l&#8217;outil dataimporthandler pour l&#8217;importation et l&#8217;indexation de données issues d&#8217;une base de données.</p>
<p>Dans les versions futures, il pourrait s&#8217;agir également d&#8217;un outil d&#8217;extraction du contenu de documents Office ou PDF (basé sur Tika), d&#8217;une intégration avec <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">Jsdoc Toolkit</a> et d&#8217;une intégration avec le <a href="http://velocity.apache.org/engine/index.html" target="_blank">framework Velocity</a>.</p>
</td>
</tr>
<tr>
<td style="background-color: #dcdcdc;" colspan="3"><strong>Dist</strong></td>
</tr>
<tr>
<td style="width: 20px;"></td>
<td colspan="2">Les binaires issus de la compilation des sources de <strong>Solr </strong>et les librairies dont dépend <strong>Solr</strong>.</td>
</tr>
<tr>
<td style="background-color: #dcdcdc;" colspan="3"><strong>Docs</strong></td>
</tr>
<tr>
<td style="width: 20px;"></td>
<td colspan="2">La documentation de <strong>Solr</strong></td>
</tr>
<tr>
<td style="background-color: #dcdcdc;" colspan="3"><strong>Example</strong></td>
</tr>
<tr>
<td style="width: 20px;"></td>
<td colspan="2">Des exemples de mise en oeuvre et le nécessaire pour exécuter Solr avec Jetty. Les principaux sous-répertoires sont :</td>
</tr>
<tr>
<td></td>
<td colspan="2"><strong>Multicore</strong></td>
</tr>
<tr>
<td></td>
<td style="width: 20px;"></td>
<td>Exemple de paramétrage en mode multi-core afin de gérer des applications et des index multiples dans une même webapp du serveur J2EE.</td>
</tr>
<tr>
<td></td>
<td colspan="2"><strong>Solr</strong></td>
</tr>
<tr>
<td></td>
<td style="width: 20px;"></td>
<td>Exemple de répertoire &laquo;&nbsp;Home&nbsp;&raquo; de Solr et fichiers de configuration par défaut.</td>
</tr>
<tr>
<td></td>
<td colspan="2"><strong>Webapps</strong></td>
</tr>
<tr>
<td></td>
<td style="width: 20px;"></td>
<td>Le fichier war à déployer dans la serveur J2EE et utiliser par le lanceur jetty fourni en exemple.</td>
</tr>
<tr>
<td style="background-color: #dcdcdc;" colspan="3"><strong>Lib</strong></td>
</tr>
<tr>
<td style="width: 20px;"></td>
<td colspan="2">Les librairies java dont dépend <strong>Solr</strong></td>
</tr>
<tr>
<td style="background-color: #dcdcdc;" colspan="3"><strong>Src</strong></td>
</tr>
<tr>
<td style="width: 20px;"></td>
<td colspan="2">Les sources de <strong>Solr</strong></td>
</tr>
</tbody>
</table>
<p>Mettre en place un environnement d&#8217;exécution de Solr à partir des éléments de la distribution est très simple. Il faut :</p>
<ol>
<li>créer un  environnement d&#8217;exécution en copiant le répertoire &laquo;&nbsp;/example/solr&nbsp;&raquo;, sous par exemple &laquo;&nbsp;/opt/solr&nbsp;&raquo; sous Linux ou &laquo;&nbsp;c:/solr&nbsp;&raquo; sous windows </li>
<li>copier le fichier solr.war contenu dans le répertoire webapps des exemples vers le répertoire approprié du serveur d&#8217;application (répertoire webapps par exemple pour Tomcat)</li>
<li>configurer le serveur d&#8217;application pour qu&#8217;il soit lancé avec la variable d&#8217;environnement solr.home.home pointant vers le répertoire  d&#8217;exécution (par exemple : -Dsolr.solr.home=/opt/solr) et le redémarrer</li>
</ol>
<p>Dans le répertoire pointé par la variable d&#8217;environnement &laquo;&nbsp;solr.solr.home&nbsp;&raquo;, on retrouve donc les répertoires &laquo;&nbsp;bin&nbsp;&raquo; (scripts utilitaires pour un environnement Linux), &laquo;&nbsp;conf&nbsp;&raquo; (fichiers de configuration) et &laquo;&nbsp;data&nbsp;&raquo; (y sera entre autres localisés l&#8217;index Lucene des données indexées).</p>
<h3>Les fichiers de configuration</h3>
<p>Les fichiers de configuration sont localisés dans le répertoire &laquo;&nbsp;/conf&nbsp;&raquo;. Il s&#8217;agit principalement de solrconfig.xml et schema.xml.</p>
<h4>solrconfig.xml</h4>
<p>Il s&#8217;agit du fichier qui contient l&#8217;essentiel des paramètres liés au fonctionnement de Solr et plus particulièrement des paramètres de l&#8217;API Lucene qu&#8217;utilise Solr (longueur maximale d&#8217;une champs, taille des buffer mémoire, fréquence de commit, &#8230;) . Ce fichier est très bien auto-documenté et fait l&#8217;objet <a href="http://wiki.apache.org/solr/SolrConfigXml" target="_blank">d&#8217;un document a part entière dans le wiki Solr</a>.</p>
<h4>schema.xml</h4>
<p>Il s&#8217;agit du fichier qui décrit comment seront indexées les données dans Solr. Il définit les types de données, les champs, les manipulations sur les données lors de l&#8217;indexation, les champs obligatoires, le champ de requête par défaut, &#8230;</p>
<p>Ce fichier est très bien auto-documenté et fait l&#8217;objet <a href="http://wiki.apache.org/solr/SchemaXml" target="_blank">d&#8217;un document a part entiere dans le wiki Solr</a>.</p>
<h5>Exemple de déclaration d&#8217;un type</h5>
<p>&lt;fieldType name=”string” class=”solr.StrField” sortMissingLast=”true” omitNorms=”true”/&gt;</p>
<p>Ce type a pour nom &laquo;&nbsp;string&nbsp;&raquo;, il sera pris en charge lors de l&#8217;indexation par la classe &laquo;&nbsp;solr.StrField&nbsp;&raquo;, lors d&#8217;un tri du résultat sur ce champ, les documents ne le possédant pas seront positionnés en dernier (sortMissingLast=&nbsp;&raquo;true&nbsp;&raquo;) et lors de l&#8217;indexation les informations de normalisation basées sur la taille du champ seront calculées et stockées (omitNorms=&nbsp;&raquo;true&nbsp;&raquo;).</p>
<h5>Exemple de déclaration d&#8217;un champ</h5>
<p>Les données indexées dans <strong>Solr </strong>par le service d&#8217;indexation sont contenues dans un <a href="http://fr.wikipedia.org/wiki/Datagramme" target="_blank">datagramme </a>de type XML. Lorsque Solr traite ce datagramme, il rapproche le nom de chaque élément XML avec le nom d&#8217;un champ. Il manipule alors la donnée associé à cet élément comme cela est défini par la définition du champ.</p>
<p>&lt;field name=”word” type=”string” indexed=”true” stored=”true”/&gt;</p>
<p>Ce champ est du type &laquo;&nbsp;string&nbsp;&raquo; (donc il hérite des propriétés de ce type). Il est indexé (donc les recherches peuvent porter sur son contenu) et les données de ce champs sont stokées (donc elles peuvent être récupérées au moment de l&#8217;affichage d&#8217;une liste de résultats par exemple).</p>
<p>D&#8217;autres paramètres importants peuvent également être définis lors de la déclaration d&#8217;un champ. Il s&#8217;agit de la méthode d&#8217;analyse lors de &#8216;indexation ou de la recherche. La méthode d&#8217;analyse permet de définir comment seront traitées les données du champ, à savoir son mode de découpage en mots (tokenizer) et les filtres qui lui seront appliqués (filter). Les filtres permettent par exemple de supprimer les mots vides, de mettre tous les mots en minuscule, de convertir les mots accentués en leurs équivalents sans accent, &#8230;</p>
<h5>Exemple de déclaration d&#8217;un champ dynamique</h5>
<p>Une déclaration de champ dynamique permet d&#8217;associer un traitement à des éléments du datagramme XML même si ces derniers ne sont pas spécifiquement déclarés comme champs.</p>
<p>&lt;dynamicField name=”*_s”  type=”string”  indexed=”true”  stored=”true”/&gt;</p>
<p>Tout élément du datagramme XML dont le nom se termine par &laquo;&nbsp;_s&nbsp;&raquo;, est considéré comme un élément de nom &laquo;&nbsp;string&nbsp;&raquo;.</p>
<h3>Comment gérer plusieurs indexes ?<br />
</h3>
<p>Par défaut, une instance Solr ne peut manipuler qu&#8217;un index. Comment faire si mon application doit permettre l&#8217;indexation de plusieurs types de données comme par exemple un annuaire de personnes et les messages d&#8217;un forum de discussion ?</p>
<p>Jusqu&#8217;à la version de 1.2 de Solr, il existait 2 solutions : associer un type à chaque document dans l&#8217;index (personne, message, &#8230;) ou utiliser plusieurs webapps dans le serveur J2EE et les faire pointer vers des environnements différents (-D=solr.solr.home=&#8230;). L&#8217;association d&#8217;un type à chaque document permet lors de la recherche de filtrer la liste de résultats en se limitant aux documents d&#8217;un ou plusieurs types. Utiliser plusieurs webapps permet d&#8217;utiliser un index distinct pour chaque type de documents.</p>
<p>Avec la version 1.3 de Solr est apparue la notion de &laquo;&nbsp;SolrCore&nbsp;&raquo; multiples. Un &laquo;&nbsp;SolrCore&nbsp;&raquo; est un environnement complet Solr (configuration et index) qui est exécuté par une webapps du serveur j2EE. Il est donc possible au moyen d&#8217;une seule webapps Solr de gérer plusieurs &laquo;&nbsp;SolrCore&nbsp;&raquo;. les SolrCore sont déclarés dans un fichier XML &laquo;&nbsp;solr.xml&nbsp;&raquo; localisé dans le répertoire solr.solr.home associé à la webapp. <br class="spacer_" /></p>
<h4>Exemple d&#8217;un environnement mono-core</h4>
<p>solr.solr.home=/opt/solr</p>
<p>Les répertoires d&#8217;installation sont organisés comme ceci :</p>
<pre>/opt
    /solr
        /bin
        /conf
        /data
        /webapps
            solr.war
</pre>
<p>Pour un paramétrage de Tomcat au moyen de JNDI, on place dans le répertoire conf/Calalina/localhost de Tomcat, le fichier solr.xml suivant :</p>
<pre>&lt;Context docBase="/opt/solr/webapps/solr.war" debug="0" crossContext="true" &gt;
    &lt;Environment
        name="solr/home"
        type="java.lang.String"
        value="/opt/solr/" override="true" /&gt;
&lt;/Context&gt;
</pre>
<p>Les urls d&#8217;accès à l&#8217;administration et aux web service Solr sont :</p>
<table border="1">
<tbody>
<tr>
<td>Administration</td>
<td>=&gt;</td>
<td>http://&lt;server&gt;:&lt;port&gt;/solr/admin/</td>
</tr>
<tr>
<td>Indexation / suppression</td>
<td>=&gt;</td>
<td>http://&lt;server&gt;:&lt;port&gt;/solr/update</td>
</tr>
<tr>
<td>Recherche</td>
<td>=&gt;</td>
<td>http://&lt;server&gt;:&lt;port&gt;/solr/select</td>
</tr>
</tbody>
</table>
<h4>Exemple d&#8217;un environnement multi-core</h4>
<p>solr.solr.home=/opt/solr</p>
<p>Les répertoires d&#8217;installation sont organisés comme ceci :</p>
<pre>/opt
    /solr
        solr.xml
        /core0
            /bin
            /conf
            /data
        /core1
            /bin
            /conf
            /data
        /webapps
            solr.war
</pre>
<p>Pour un paramétrage de Tomcat au moyen de JNDI, on place dans le répertoire conf/Calalina/localhost de Tomcat, le fichier solr.xml suivant :</p>
<pre>&lt;Context docBase="/opt/solr/webapps/solr.war" debug="0" crossContext="true" &gt;
    &lt;Environment
        name="solr/home"
        type="java.lang.String"
        value="/opt/solr/" override="true" /&gt;
&lt;/Context&gt;</pre>
<p>Dans le répertoire pointé par solr.solr.home, on place de féchier solr.xml suivant :</p>
<pre>&lt;solr persistent="true" sharedLib="lib"&gt;
    &lt;cores adminPath="/admin/cores"&gt;
        &lt;core name="core0" instanceDir="core0" /&gt;
        &lt;core name="core1" instanceDir="core1" /&gt;
    &lt;/cores&gt;
&lt;/solr&gt;
</pre>
<p>Les urls d&#8217;accès à l&#8217;administration et aux web service Solr des cores 0 et 1 sont :</p>
<table border="1">
<tbody>
<tr>
<td valign="top">Administration</td>
<td valign="top">=&gt;</td>
<td valign="top">http://&lt;server&gt;:&lt;port&gt;/solr/core0/admin/ </p>
<p>http://&lt;server&gt;:&lt;port&gt;/solr/core1/admin/</td>
</tr>
<tr>
<td valign="top">Indexation / suppression</td>
<td valign="top">=&gt;</td>
<td valign="top">http://&lt;server&gt;:&lt;port&gt;/solr/core0/update </p>
<p>http://&lt;server&gt;:&lt;port&gt;/solr/core1/update</td>
</tr>
<tr>
<td valign="top">Recherche</td>
<td valign="top">=&gt;</td>
<td valign="top">http://&lt;server&gt;:&lt;port&gt;/solr/core0/select  </p>
<p>http://&lt;server&gt;:&lt;port&gt;/solr/core1/select</td>
</tr>
</tbody>
</table>
<h3>Comment gérer plusieurs applications ?</h3>
<p>Imaginons que vous souhaitez indexer des données issues de différentes applications, pour l&#8217;exemple, un outil de gestion de contenu (ECM) et un forum de discussion. Chacune de ces applications nécessitant l&#8217;indexation de 2 types de données totalement différentes, pour l&#8217;exemple, des utilisateurs et des documents (ECM) ou des messages (forum).</p>
<p>Dans ce cas, je propose d&#8217;utiliser une webapp par application et un core par type de données.</p>
<p>On a donc un environnement comme celui-ci :</p>
<p>solr.solr.home=/opt/solr</p>
<p>Les répertoires d&#8217;installation sont organisés comme ceci :</p>
<pre>/opt
    /solr
        /ecm
            solr.xml
            /utilisateurs
                /bin
                /conf
                /data
            /documents
                /bin
                /conf
                /data
        /forum
            solr.xml
            /utilisateurs
                /bin
                /conf
                /data
            /messages
                /bin
                /conf
                /data
        /webapps
            solr.war
</pre>
<p>Pour un paramétrage de Tomcat au moyen de JNDI, on place dans le répertoire conf/Calalina/localhost de Tomcat, le fichier ecm.xml suivant :</p>
<pre>&lt;Context docBase="/opt/solr/webapps/solr.war" debug="0" crossContext="true" &gt;
    &lt;Environment
        name="solr/home"
        type="java.lang.String"
        value="/opt/solr/ecm" override="true" /&gt;
&lt;/Context&gt;</pre>
<p>et le fichier forum.xml suivant :</p>
<pre>&lt;Context docBase="/opt/solr/webapps/solr.war" debug="0" crossContext="true" &gt;
    &lt;Environment
        name="solr/home"
        type="java.lang.String"
        value="/opt/solr/forum" override="true" /&gt;
&lt;/Context&gt;</pre>
<p>Dans le répertoire &laquo;&nbsp;/opt/solr/ecm&nbsp;&raquo;, on place de féchier solr.xml suivant :</p>
<pre>&lt;solr persistent="true" sharedLib="lib"&gt;
    &lt;cores adminPath="/admin/cores"&gt;
        &lt;core name="utilisateurs" instanceDir="utilisateurs" /&gt;
        &lt;core name="documents" instanceDir="documents" /&gt;
    &lt;/cores&gt;
&lt;/solr&gt;
</pre>
<p>Dans le répertoire &laquo;&nbsp;/opt/solr/forum&nbsp;&raquo;, on place de féchier solr.xml suivant :</p>
<pre>&lt;solr persistent="true" sharedLib="lib"&gt;
    &lt;cores adminPath="/admin/cores"&gt;
        &lt;core name="utilisateurs" instanceDir="utilisateurs" /&gt;
        &lt;core name="messages" instanceDir="messages" /&gt;
    &lt;/cores&gt;
&lt;/solr&gt;
</pre>
<p>Les urls d&#8217;accès à l&#8217;administration et aux web service Solr de l&#8217;application ECM sont :</p>
<table border="1">
<tbody>
<tr>
<td valign="top">Administration</td>
<td valign="top">=&gt;</td>
<td valign="top">http://&lt;server&gt;:&lt;port&gt;/ecm/utilisteurs/admin/ </p>
<p>http://&lt;server&gt;:&lt;port&gt;/ecm/documents/admin/</td>
</tr>
<tr>
<td valign="top">Indexation / suppression</td>
<td valign="top">=&gt;</td>
<td valign="top">http://&lt;server&gt;:&lt;port&gt;/ecm/utilisteurs/update </p>
<p>http://&lt;server&gt;:&lt;port&gt;/ecm/documents/update</td>
</tr>
<tr>
<td valign="top">Recherche</td>
<td valign="top">=&gt;</td>
<td valign="top">http://&lt;server&gt;:&lt;port&gt;/ecm/utilisteurs/select  </p>
<p>http://&lt;server&gt;:&lt;port&gt;/ecm/documents/select</td>
</tr>
</tbody>
</table>
<p>Les urls d&#8217;accès à l&#8217;administration et aux web service Solr de l&#8217;application Forum sont :</p>
<table border="1">
<tbody>
<tr>
<td valign="top">Administration</td>
<td valign="top">=&gt;</td>
<td valign="top">http://&lt;server&gt;:&lt;port&gt;/forum/utilisteurs/admin/ </p>
<p>http://&lt;server&gt;:&lt;port&gt;/forum/messages/admin/</td>
</tr>
<tr>
<td valign="top">Indexation / suppression</td>
<td valign="top">=&gt;</td>
<td valign="top">http://&lt;server&gt;:&lt;port&gt;/forum/utilisteurs/update </p>
<p>http://&lt;server&gt;:&lt;port&gt;/forum/messages/update</td>
</tr>
<tr>
<td valign="top">Recherche</td>
<td valign="top">=&gt;</td>
<td valign="top">http://&lt;server&gt;:&lt;port&gt;/forum/utilisteurs/select  </p>
<p>http://&lt;server&gt;:&lt;port&gt;/forum/messages/select</td>
</tr>
</tbody>
</table>
<p>Sous Linux, une optimisation peut être de factoriser le répertoire &laquo;&nbsp;bin&nbsp;&raquo; de chaque core car il contient exactement les mêmes scripts. On place un répertoire &laquo;&nbsp;bin&nbsp;&raquo; dans &laquo;&nbsp;/opt/solr&nbsp;&raquo; et dans chaque core, on créer un lien symbolique nommé &laquo;&nbsp;bin&nbsp;&raquo; et qui pointe sur &laquo;&nbsp;/opt/solr/bin&nbsp;&raquo;.</p>
<p>Pour synthétiser les différents cas de figure lors du choix d&#8217;une configuration de Solr, voici un tableau récapitulatif.</p>
<table border="1">
<tbody>
<tr valign="top">
<td valign="top">Une seule application avec un seul type de données à indexer</td>
<td>=&gt;</td>
<td valign="top">1 webapp, pas de SolrCore</td>
</tr>
<tr valign="top">
<td>Une seule application avec plusieurs types de données très similaires. Par exemple, des articles de presse, des dossiers, des rapport, des études, &#8230; qui ont tous des meta-données communes (titre, auteur, date de publication et contenu)</td>
<td>=&gt;</td>
<td>1 webapp, pas de SolrCore mais une donnée qualifiant le type permettant le filtrage de la liste de résultat sur une ou plusieurs de ces valeurs.</td>
</tr>
<tr valign="top">
<td>Une seule application avec plusieurs types de données sans similarité (documents, utilisateurs, &#8230;)</td>
<td>=&gt;</td>
<td>1 webapp et des SolsCore pour indexer les différents types de données dans des index disctincts</td>
</tr>
<tr valign="top">
<td>Plusieurs applications (ECM, Forum, messagerie).</td>
<td>=&gt;</td>
<td>1 webapp par application avec ou sans SolrCore multiple en fonction des données à indexer pour chacune des applications (voir les cas précédents)</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.eolya.fr/2009/05/10/introduction-a-solr-installation-et-configuration-2/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Choisir un Framework Javascript</title>
		<link>http://www.eolya.fr/2009/05/04/choisir-un-framework-javascript/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=choisir-un-framework-javascript</link>
		<comments>http://www.eolya.fr/2009/05/04/choisir-un-framework-javascript/#comments</comments>
		<pubDate>Mon, 04 May 2009 08:24:24 +0000</pubDate>
		<dc:creator>dominique</dc:creator>
				<category><![CDATA[Productivité]]></category>
		<category><![CDATA[Technique]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[extjs]]></category>
		<category><![CDATA[framwork]]></category>
		<category><![CDATA[indeed]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[scriptaculous]]></category>
		<category><![CDATA[yui]]></category>

		<guid isPermaLink="false">http://www.zoonix.fr/?p=242</guid>
		<description><![CDATA[Je me suis récemment intéressé aux frameworks Javascript et j&#8217;ai chercher à savoir lequel mérite le plus que l&#8217;on investise du temps à son apprentissage. J&#8217;ai commencé par rechercher des comparatifs techniques et des commentaires sur les blogs. Les 3 candidats qui émergent sont : jQuery, Prototype et le semble-t-il prometteur MooTools. Je suis alors [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-246" title="javascript" src="http://www.zoonix.fr/uploads/2009/05/javascript.png" alt="javascript" width="81" height="81" />Je me suis récemment intéressé aux frameworks Javascript et j&#8217;ai chercher à savoir lequel mérite le plus que l&#8217;on investise du temps à son apprentissage. J&#8217;ai commencé par rechercher des comparatifs techniques et des commentaires sur les blogs. Les 3 candidats qui émergent sont : <a href="http://jquery.com/" target="_blank">jQuery</a>, <a href="http://www.prototypejs.org/" target="_blank">Prototype </a>et le semble-t-il prometteur <a href="http://mootools.net/">MooTools</a>.</p>
<p><span id="more-242"></span>Je suis alors tombé sur <a href="http://www.indeed.com/jobtrends?q=dojo%2C+extjs%2C+jquery%2C+mootools%2C+scriptaculous%2C+yui" target="_blank">ce graphique</a> qui montre l&#8217;évolution dans le temps du pourcentage d&#8217;annonces qui contiennent le nom d&#8217;un de ces frameworks. Si le but est de trouver un emploi ou des prestations, pourquoi ne pas choisir le Framework le plus demandé sur le marché de l&#8217;emploi ?</p>
<p>Le graphique est fourni par le site <a href="http://fr.indeed.com/" target="_blank">indeed.com</a> qui est un moteur de recherche sur un grand nombre de sites spécialisés dans les offres d&#8217;emploi. Il montre l&#8217;évolution des citations dans les offres d&#8217;emplois des Frameworks suivants : <a href="http://www.dojotoolkit.org/" target="_blank">dojo</a>, <a href="http://extjs.com/" target="_blank">extjs</a>, <a href="http://jquery.com/" target="_blank">jquery</a>, <a href="http://mootools.net/" target="_blank">mootools</a>, <a href="http://script.aculo.us/" target="_blank">scriptaculous</a> et <a href="http://developer.yahoo.com/yui/" target="_blank">yui</a>. Le framework Prototype n&#8217;est pas cité mais cela n&#8217;aurait pas de sens puisque ce terme générerait beaucoup de bruit de par son utilisation dans bien d&#8217;autres domaines que les frameworks Javascript. Pour évaluer la popularité de ce dernier, je pense qu&#8217;il faut considérer le courbe de scriptaculous car ce dernier est basé sur Prototype et généralement utilisé en complément de ce dernier.</p>
<p>D&#8217;après les différents commentaires que j&#8217;ai pu lire la préférence des utilisateurs semble être : 1) jQuery et 2) Prototype. Le graphique confirme cette tendance.</p>
<p>Ce graphique est issue de la fonction &laquo;&nbsp;<strong>Job trends</strong>&nbsp;&raquo; de <strong>indeed.com</strong> (malheureusement non disponible pour les offres purement françaises). Vous pouvez utiliser cette fonction pour bien d&#8217;autres termes que ceux relatifs au Frameworks javascripts.</p>
<p>Et pour ceux que ça intéresse de savoir qui sont les auteurs ou inventeurs de certains de ces frameworks, c&#8217;est <a href="http://www.vinch.be/blog/2007/03/05/quelques-visages-qui-se-cachent-derriere-les-technologies-web-partie-2-les-nouveaux-du-web-20/" target="_blank">ici</a>.<br class="spacer_" /></p>
<p><br class="spacer_" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.eolya.fr/2009/05/04/choisir-un-framework-javascript/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Vmware server 2.0 sur hôte OpenSuse 11.1 64 bits</title>
		<link>http://www.eolya.fr/2009/04/26/vmware-server-20-sur-hote-opensuse-111-64-bits/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=vmware-server-20-sur-hote-opensuse-111-64-bits</link>
		<comments>http://www.eolya.fr/2009/04/26/vmware-server-20-sur-hote-opensuse-111-64-bits/#comments</comments>
		<pubDate>Sun, 26 Apr 2009 22:19:45 +0000</pubDate>
		<dc:creator>dominique</dc:creator>
				<category><![CDATA[Productivité]]></category>
		<category><![CDATA[Technique]]></category>
		<category><![CDATA[vmware]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[openSUSE]]></category>
		<category><![CDATA[shrink]]></category>
		<category><![CDATA[vmdk]]></category>
		<category><![CDATA[vmrun]]></category>

		<guid isPermaLink="false">http://www.zoonix.fr/?p=180</guid>
		<description><![CDATA[&#160; Dans cet article, j&#8217;explique la mise en place d&#8217;une configuration puissante afin d&#8217;héberger des serveurs virtuels sous Vmware server 2.0. Les points abordés sont : Choix d&#8217;un système d&#8217;exploitation pour le serveur Vmware Installation de Linux sur le serveur vmware Installation de Vmware server 2.0 Installation des Vmware tools dans les machines invités (guest) [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p><img class="alignleft size-full wp-image-233" title="vmware" src="http://www.zoonix.fr/uploads/2009/04/vmware.jpg" alt="vmware" width="96" height="46" />Dans cet article, j&#8217;explique la mise en place d&#8217;une configuration puissante afin d&#8217;héberger des serveurs virtuels sous Vmware server 2.0. Les points abordés sont :</p>
<ul>
<li>Choix d&#8217;un système d&#8217;exploitation pour le serveur Vmware</li>
<li>Installation de Linux sur le serveur vmware</li>
<li>Installation de Vmware server 2.0</li>
<li>Installation des Vmware tools dans les machines invités (guest)</li>
<li>Sauvegardes des machines virtuelles</li>
<li>Réduction de la taille (shrink) des disques virtuels vmdk</li>
</ul>
<p><span id="more-180"></span></p>
<h3>Choix d&#8217;un système d&#8217;exploitation</h3>
<p>Pour ce serveur hôte Vmware, j&#8217;ai choisi d&#8217;utiliser openSUSE 11.1 64 bits comme système d&#8217;exploitation.</p>
<h4>Pourquoi Linux ?</h4>
<p>Tous mes serveurs Vmware précédents utilisaient Windows XP ou Windows 2003. J&#8217;ai remarqué que les performances des serveurs virtuels avaient tendance a se dégrader tres vite. Je mets ce phénomène sur le compte des systèmes  de fichiers NTFS ou Fat32 qui ne sont sans doute pas idéals pour héberger les fichiers vmdk (disques virtuels) de Vmware. De son coté, les systèmes de fichiers Linux ne nécessitent pas de défragmentations régulières d&#8217;où moins d&#8217;opérations de maintenance futures.</p>
<h4>Pourquoi openSUSE ?</h4>
<p>J&#8217;utilise généralement Debian comme serveur Linux. Malheureusement, il m&#8217;a été impossible d&#8217;installer la derniere version stable (Lenny) avec le processeur core i7 et la carte mère ASUS P6T DELUXE V2 qui équipe mon serveur Vmware. J&#8217;ai donc essayé avec une distribution openSUSE 11.1 et là, aucun problème !</p>
<p>Je ne regrette pas du tout car je trouve cette distribution très agréable à utiliser avec un environnement graphique KDE.</p>
<h4>Pourquoi une distribution 64 bits ?</h4>
<p>Pour les performances bien sur, mais surtout pour la possibilité de disposer de plus de 3,5 Go de Ram et ainsi faire tourner un grand nombre de serveurs virtuels simultanément.</p>
<h3>Installation de Linux</h3>
<p>Je ne vais pas décrire l&#8217;installation de openSUSE car une fois la distribution au format DVD récupérée <a href="http://software.opensuse.org/" target="_blank">ici</a> et gravée, il suffit de démarrer le serveur avec le DVD dans le lecteur et d&#8217;enchainer les écrans de la procédure d&#8217;installation. Les seuls points délicats peuvent être le partitionnement du ou des disques durs et le choix entre utiliser une interface graphique (KDE ou GNOME) ou ne pas utiliser d&#8217;interface graphique. Personnellement, j&#8217;ai installé l&#8217;interface KDE, mais afin de rendre cet article indépendant des outils disponibles avec les interfaces graphiques, je ferai tout dans un terminal (ou console) en mode texte. Pour faciliter les futures installations de certains packages, j&#8217;installe l&#8217;outil zypper.</p>
<h3>Installation de Vmware server 2.0</h3>
<p>Il faut tout d&#8217;abord récupérer <a href="http://www.vmware.com/download/server/" target="_blank">ici</a> le fichier rpm d&#8217;installation pour un Linux 64 bits et la clé d&#8217;installation.</p>
<p>L&#8217;installation se déroule en 3 étapes :</p>
<ul>
<li>L&#8217;installation des prérequis</li>
<li>L&#8217;installation du package rpm</li>
<li>La configuration de Vmware</li>
</ul>
<p>Pour la configuration, c&#8217;est un peu plus compliquer car il est nécessaire d&#8217;installer certains pré-requis comme entre autres un compilateur,  l&#8217;outil make et les sources du kernel Linux. Voici la commande qui installe un ensemble minimale d&#8217;outils de développement :</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">zypper install autoconf automake binutils cpp gcc gcc<span style="color: #339933;">-</span>c<span style="color: #339933;">++</span> linux<span style="color: #339933;">-</span>headers<span style="color: #339933;">-</span>$<span style="color: #009900;">&#40;</span>uname <span style="color: #339933;">-</span>r<span style="color: #009900;">&#41;</span> make psmisc kernel<span style="color: #339933;">-</span>source kernel<span style="color: #339933;">-</span>sym</pre></div></div>

<p>Avec Debian, on ferait juste :</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">apt<span style="color: #339933;">-</span>get install build<span style="color: #339933;">-</span>essential linux<span style="color: #339933;">-</span>headers<span style="color: #339933;">-</span>$<span style="color: #009900;">&#40;</span>uname <span style="color: #339933;">-</span>r<span style="color: #009900;">&#41;</span></pre></div></div>

<p>L&#8217;installation du package rpm est tout ce qu&#8217;il y a de plus simple. Il suffit d&#8217;exécuter la commande suivante :</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">rpm <span style="color: #339933;">-</span>ivh VMware<span style="color: #339933;">-</span>server<span style="color: #339933;">-</span>2.0.1<span style="color: #339933;">-</span><span style="color: #0000dd;">156745</span>.<span style="color: #202020;">x86_64</span>.<span style="color: #202020;">rpm</span></pre></div></div>

<p>Lancer la configuration de Vmware et répondez aux questions :</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">/</span>usr<span style="color: #339933;">/</span>bin<span style="color: #339933;">/</span>vmware<span style="color: #339933;">-</span>config.<span style="color: #202020;">pl</span></pre></div></div>

<p>On répond toujours avec la réponse par défaut sauf pour :</p>
<p><em>Your kernel was built with &laquo;&nbsp;gcc&nbsp;&raquo; version &laquo;&nbsp;4.3.2&#8243;, while you are trying to use<br />
&laquo;&nbsp;/usr/bin/gcc&nbsp;&raquo; version &laquo;&nbsp;4.3&#8243;. This configuration is not recommended and VMware<br />
Server may crash if you&#8217;ll continue. Please try to use exactly same compiler as<br />
one used for building your kernel. Do you want to go with compiler<br />
&laquo;&nbsp;/usr/bin/gcc&nbsp;&raquo; version &laquo;&nbsp;4.3&#8243; anyway? [no]</em></p>
<p>=&gt; répondre &laquo;&nbsp;yes&nbsp;&raquo; !</p>
<p>Pour terminer l&#8217;installation, il faut éditer le fichier &laquo;&nbsp;/etc/sysconfig/boot&nbsp;&raquo; et modifier la ligne</p>
<p><span style="font-family: courier new,courier;">RUN_PARALLEL=&nbsp;&raquo;yes&nbsp;&raquo;</span></p>
<p>en</p>
<p><span style="font-family: courier new,courier;">RUN_PARALLEL=&nbsp;&raquo;no&nbsp;&raquo;</span></p>
<p>Pour démarrer le démon Vmware, la commande est :</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">/</span>etc<span style="color: #339933;">/</span>init.<span style="color: #202020;">d</span><span style="color: #339933;">/</span>vmware start</pre></div></div>

<p>La console d&#8217;administration de Vmware est disponible à l&#8217;adresse : https://:8333/</p>
<p>Avec Internet Explorer, il faut penser à ajouter cette url dans la zone intranet locale.</p>
<p>Voici quelques liens vers des articles qui m&#8217;ont bien aidés :</p>
<ul>
<li><a href="http://www.swerdna.net.au/linhowtovmwareserversuse.html" target="_blank">How To: Install VMware Server 2 in an openSUSE Host [plus enabling USB support]</a></li>
<li><a href="http://www.linewbie.com/2008/03/how-to-install-vmware-server-on-opensuse-linux-103.html" target="_blank">How To Install VMware Server On OpenSUSE Linux 10.3</a></li>
<li><a href="http://en.opensuse.org/Setting_up_VMware_on_SUSE_Linux" target="_blank">Setting up VMware on SUSE Linux</a></li>
</ul>
<h3>Installation des Vmware tools dans les machines virtuelles (guest)</h3>
<p>L&#8217;installation des Vmware tools dans les machines virtuelles est indispensable. Mise à part les performances qui seront optimisées, l&#8217;intérêt est de pouvoir utiliser l&#8217;outils <a href="http://www.vmware.com/support/ws5/doc/ws_learning_cli_vmrun.html" target="_blank">vmrun </a>depuis le serveur hôte afin de stopper proprement en mode &laquo;&nbsp;soft&nbsp;&raquo; les machines virtuelles.  Sans les Vmware tools, les machines virtuelles ne pourront être stoppées que brutalement sans arrêts préalables de leurs services (guest Windows) ou démons (guest Linux).</p>
<p>L&#8217;installation des Vmware tools se fait depuis la console d&#8217;administration Vmware, puis se termine dans la machine virtuelle. Si la machine virtuelle est sous Windows, il s&#8217;agit d&#8217;un setup standard et il faut juste enchainer les écrans. Si la machine virtuelle est sous Linux, la procédure est un peu plus complexe. Voici 2 articles qui expliquent la procédure  :</p>
<ul>
<li><a href="http://www.virtuatopia.com/index.php/Understanding_and_Installing_VMware_Tools#Installing_VMware_Tools_on_a_Linux_Guest" target="_blank">Understanding and Installing VMware Tools</a></li>
<li><a href="http://www.howtoforge.com/vmware_tools_on_linux" target="_blank">How To Set Up VMware Tools On Various Linux Distributions</a></li>
</ul>
<p>Voici dans mon cas, la procédure suivie pour installer les VMware Tools dans une distribution Debian Lenny.</p>
<p>1. Dans VMware Infrastructure Web Access, lancer l&#8217;installation des VMware Tools</p>
<p>2. Dans un terminal dans le serveur invité, lancer les commandes suivantes:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">sudo apt<span style="color: #339933;">-</span>get install autoconf automake binutils cpp gcc linux<span style="color: #339933;">-</span>headers<span style="color: #339933;">-</span>$<span style="color: #009900;">&#40;</span>uname    <span style="color: #339933;">-</span>r<span style="color: #009900;">&#41;</span> make psmisc
mount <span style="color: #339933;">/</span>media<span style="color: #339933;">/</span>cdrom
cp <span style="color: #339933;">/</span>media<span style="color: #339933;">/</span>cdrom<span style="color: #339933;">/</span>VMwareTools<span style="color: #339933;">-</span>7.7.5<span style="color: #339933;">-</span><span style="color: #0000dd;">156745</span>.<span style="color: #202020;">tar</span>.<span style="color: #202020;">gz</span> <span style="color: #339933;">/</span>tmp<span style="color: #339933;">/</span>.
<span style="color: #202020;">cd</span> <span style="color: #339933;">/</span>tmp<span style="color: #339933;">/</span>
tar xvfz VMwareTools<span style="color: #339933;">-</span>7.7.5<span style="color: #339933;">-</span><span style="color: #0000dd;">156745</span>.<span style="color: #202020;">tar</span>.<span style="color: #202020;">gz</span>
cd vmware<span style="color: #339933;">-</span>tools<span style="color: #339933;">-</span>distrib<span style="color: #339933;">/</span>
.<span style="color: #339933;">/</span>vmware<span style="color: #339933;">-</span>install.<span style="color: #202020;">pl</span></pre></div></div>

<p><span style="text-decoration: underline;">Note :</span> Parfois la commande <span style="font-family: courier new,courier;">mount /media/cdrom</span> retourne l&#8217;erreur &laquo;&nbsp;mount: special device /dev/hda does not exist&nbsp;&raquo;. Dans ce cas, essayer la commande suivante :<br />
<span style="font-family: courier new,courier;">mount /dev/cdrom /media/cdrom/</span></p>
<h3>Sauvegardes des machines virtuelles</h3>
<p>Il s&#8217;agit du point qui a été le plus compliqué à mettre en place. En Effet, je dispose de plusieurs datastores avec chacun plusieurs machines virtuelles démarrées ou non. Je voulais donc mettre en place une procédure de sauvegarde automatique de toutes les machines virtuelles par copie complète des fichiers (vmx, vmdk, &#8230;).</p>
<p>Il ne s&#8217;agit pas de sauvegarde à chaud pour les machines virtuelles démarrées mais la procédure de sauvegarde se charge de les éteindre avant la copie des fichiers et de les redémarrer après.</p>
<p>Il existe des scripts pour la sauvegarde à chaud par création de snapshot ou par exploitation de la technologie de gestion de volume <a href="http://fr.wikipedia.org/wiki/Gestion_par_volumes_logiques" target="_blank">LVM</a>, mais trop compliqués pour que je les adapte à mon besoin. Je suis donc parti d&#8217;un script disponible dans <a href="http://communities.vmware.com/message/1066034#1066034" target="_blank">les forums de discussion de la communauté Vmware</a>. Ce script montre comment utiliser la commande <a href="http://www.vmware.com/support/ws5/doc/ws_learning_cli_vmrun.html" target="_blank">vmrun</a> pour stopper et démarrer une machine virtuelle. Le problème de ce script est qu&#8217;il aurait redémarré toutes les machines virtuelles même celles qui étaient éteintes avant la procédure de sauvegarde. Mon script ne redémarre que les machines virtuelles qui étaient démarrées.</p>
<h4>Le script principal : backup-vmware-datastore.sh</h4>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#!/bin/sh</span>
&nbsp;
VMDS<span style="color: #339933;">=</span>$<span style="color:#800080;">1</span>
VMDS_PATH<span style="color: #339933;">=</span>$<span style="color:#800080;">2</span>
BACKUPDIR<span style="color: #339933;">=</span>$<span style="color:#800080;">3</span>
USER<span style="color: #339933;">=</span>$<span style="color:#800080;">4</span>
PASSWD<span style="color: #339933;">=</span>$<span style="color:#800080;">5</span>
&nbsp;
CURRENT_DIR<span style="color: #339933;">=</span>$<span style="color: #009900;">&#40;</span>pwd<span style="color: #009900;">&#41;</span>
cd $VMDS_PATH
&nbsp;
find . <span style="color: #339933;">-</span>type f <span style="color: #339933;">-</span>name <span style="color: #339933;">*</span>.<span style="color: #202020;">vmx</span> <span style="color: #339933;">-</span><span style="color: #000066;">printf</span> <span style="color: #ff0000;">'%pn'</span> <span style="color: #339933;">|</span> sed <span style="color: #ff0000;">'s/.// /'</span> <span style="color: #339933;">|</span> <span style="color: #b1b100;">while</span> read VMX
<span style="color: #b1b100;">do</span>
    echo <span style="color: #339933;">======================================</span>
    echo date
    echo <span style="color: #339933;">======================================</span>
    echo VMX<span style="color: #339933;">=</span>$VMX
&nbsp;
    VMDIR<span style="color: #339933;">=</span>$<span style="color: #009900;">&#40;</span>echo $VMX <span style="color: #339933;">|</span> sed <span style="color: #ff0000;">'s/[^/..]*..*$//'</span><span style="color: #009900;">&#41;</span>
    echo VMDIR<span style="color: #339933;">=</span>$VMDIR
&nbsp;
    VMNAME<span style="color: #339933;">=</span>$<span style="color: #009900;">&#40;</span>echo $VMDIR <span style="color: #339933;">|</span> sed <span style="color: #ff0000;">'s/^[^/.]*///'</span> <span style="color: #339933;">|</span> sed <span style="color: #ff0000;">'s//$//'</span><span style="color: #009900;">&#41;</span>
    echo VMNAME<span style="color: #339933;">=</span>$VMNAME
&nbsp;
    VMEM<span style="color: #339933;">=</span>$<span style="color: #009900;">&#40;</span>find $VMDS_PATH<span style="color: #339933;">/</span>$VMDIR <span style="color: #339933;">-</span>type f <span style="color: #339933;">-</span>name <span style="color: #339933;">*</span>.<span style="color: #202020;">vmem</span> <span style="color: #339933;">-</span><span style="color: #000066;">printf</span> <span style="color: #ff0000;">'%pn'</span><span style="color: #009900;">&#41;</span>
    echo VMEM<span style="color: #339933;">=</span>$VMEM
&nbsp;
    <span style="color: #339933;"># Stop guest if started</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#91;</span> <span style="color: #ff0000;">&quot;$VMEM&quot;</span> <span style="color: #339933;">!=</span> <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> then
        echo Stoping $VMDS $VMX ...
        <span style="color: #202020;">vmrun</span> <span style="color: #339933;">-</span>T server <span style="color: #339933;">-</span>u $USER <span style="color: #339933;">-</span>p $PASSWD <span style="color: #339933;">-</span>h https<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//127.0.0.1:8333/sdk stop &quot;$VMDS $VMX&quot; soft &amp;gt; /dev/null 2&amp;gt;&amp;amp;1</span>
        vmrun <span style="color: #339933;">-</span>T server <span style="color: #339933;">-</span>u $USER <span style="color: #339933;">-</span>p $PASSWD <span style="color: #339933;">-</span>h https<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//127.0.0.1:8333/sdk stop &quot;$VMDS $VMX&quot; hard &amp;gt; /dev/null 2&amp;gt;&amp;amp;1</span>
    fi
&nbsp;
    <span style="color: #339933;"># Backup guest</span>
    echo taring $BACKUPDIR<span style="color: #339933;">/</span>$VMDIR<span style="color: #339933;">/</span>$VMNAME.<span style="color: #202020;">tar</span> $VMDIR ...
    <span style="color: #202020;">mkdir</span> <span style="color: #339933;">-</span>p $BACKUPDIR<span style="color: #339933;">/</span>$VMDIR
    rm $BACKUPDIR<span style="color: #339933;">/</span>$VMDIR<span style="color: #339933;">/</span>$VMNAME<span style="color: #339933;">-</span>save.<span style="color: #202020;">tar</span> <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #339933;">/</span>dev<span style="color: #339933;">/</span><span style="color: #000000; font-weight: bold;">null</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span><span style="color: #0000dd;">1</span>
    mv $BACKUPDIR<span style="color: #339933;">/</span>$VMDIR<span style="color: #339933;">/</span>$VMNAME.<span style="color: #202020;">tar</span> $BACKUPDIR<span style="color: #339933;">/</span>$VMDIR<span style="color: #339933;">/</span>$VMNAME<span style="color: #339933;">-</span>save.<span style="color: #202020;">tar</span> <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #339933;">/</span>dev<span style="color: #339933;">/</span><span style="color: #000000; font-weight: bold;">null</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span><span style="color: #0000dd;">1</span>
    tar cf $BACKUPDIR<span style="color: #339933;">/</span>$VMDIR<span style="color: #339933;">/</span>$VMNAME.<span style="color: #202020;">tar</span> $VMDIR
&nbsp;
    <span style="color: #339933;"># Start guest if previously started</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#91;</span> <span style="color: #ff0000;">&quot;$VMEM&quot;</span> <span style="color: #339933;">!=</span> <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> then
        echo Starting $VMDS $VMX ...
        <span style="color: #202020;">vmrun</span> <span style="color: #339933;">-</span>T server <span style="color: #339933;">-</span>u $USER <span style="color: #339933;">-</span>p $PASSWD <span style="color: #339933;">-</span>h https<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//127.0.0.1:8333/sdk start &quot;$VMDS $VMX&quot; &amp;gt; /dev/null 2&amp;gt;&amp;amp;1</span>
    fi
done
&nbsp;
cd $CURRENT_DIR</pre></div></div>

<p>&nbsp;</p>
<h4>L&#8217;appel du script : dobackup.sh</h4>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#!/bin/sh</span>
cd <span style="color: #339933;">/</span>vmware
.<span style="color: #339933;">/</span>backup<span style="color: #339933;">-</span>vmware<span style="color: #339933;">-</span>datastore.<span style="color: #202020;">sh</span> <span style="color: #009900;">&#91;</span>Datastore_1<span style="color: #009900;">&#93;</span> <span style="color: #339933;">/</span>vmware<span style="color: #339933;">/</span>datastore_1 <span style="color: #339933;">/</span>backup<span style="color: #339933;">/</span>vmware<span style="color: #339933;">/</span>datastore_1 xxxx yyyy</pre></div></div>

<p>où &laquo;&nbsp;xxxx&nbsp;&raquo; est a remplacer par le login d&#8217;accès à la console Vmware et &laquo;&nbsp;yyyy&nbsp;&raquo; par son mot de passe.</p>
<p>Dans cet exemple,</p>
<p>&laquo;&nbsp;Datastore_1&#8243; est le nom du datastore</p>
<p>&laquo;&nbsp;/vmware/datastore_1&#8243; est la localisation du datastore</p>
<p>&laquo;&nbsp;/backup/vmware/datastore_1&#8243; est la destination de sauvegarde</p>
<p><strong><span style="text-decoration: underline;">Note :</span></strong> Ce script ne supporte pas les espaces dans les noms de répertoire et de fichier, il faut se limiter à l&#8217;alphabet, des chiffres et des &laquo;&nbsp;-&nbsp;&raquo; ou &laquo;&nbsp;_&nbsp;&raquo; (bien sur, je suis preneur de toutes améliorations dans ce domaine) <img src='http://www.eolya.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Voici quelques liens vers des articles qui m’ont bien aidés :</p>
<ul>
<li><a href="http://www.virtuatopia.com/index.php/How_to_Control_VMware_Virtual_Machines_from_the_Command-Line_using_vmrun" target="_blank">How to Control VMware Virtual Machines from the Command-Line using vmrun</a></li>
<li><a href="http://www.twobaldgeeks.com/blog/index.php/2007/08/06/vmware-how-do-i-love-thee-let-me-count-the-ways/" target="_blank">vmware-server VM backups </a></li>
</ul>
<h3>Réduction de la taille (shrink) des disques virtuels vmdk</h3>
<p>Les disques durs des machines virtuelles sont les fichiers <strong>vmdk</strong>. Si lors de la création d&#8217;un disque dur on indique que le fichier vmdk ne doit pas être pré-dimensionné à la taille totale du disque dur alors le fichier vmdk grossit au fur et à mesure de son utilisation et de la quantité de données qui y est stockée. Lorsque la quantité de données diminue la taille du fichier vmdk ne diminue pas.</p>
<p>Il est cependant possible grâce à l&#8217;utilitaire <strong>vmshrink </strong>disponible sur le site <a href="http://chitchat.at.infoseek.co.jp/vmware/index.html" target="_blank">VM Back</a> de réduire la taille du fichier vmdk à la taille des données qui y sont stockées. Cela peut permettre de réduire considérablement la taille des fichiers vmdk et donc de gagner de l&#8217;espace disque et du temps lors des sauvegardes. <a href="http://chitchat.at.infoseek.co.jp/vmware/vmtools.html" target="_blank">Cet utilitaire</a> s&#8217;exécute dans la machine virtuelle et est disponible sous forme de code source et également pre-compilé pour un certain nombre de système d&#8217;exploitation (Windows, Linux, FreeBSD,  NetBSD, OpenBSD, Solaris et Minix). La version pour Linux a été compilée sur une distribution <strong>Fedora Core 4</strong> mais a très bien fonctionnée pour moi avec un serveur virtuel <strong>Debian</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eolya.fr/2009/04/26/vmware-server-20-sur-hote-opensuse-111-64-bits/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Cooktop un éditeur XML gratuit sous Windows</title>
		<link>http://www.eolya.fr/2008/11/09/cooktop-un-editeur-xml-gratuit-sous-windows/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=cooktop-un-editeur-xml-gratuit-sous-windows</link>
		<comments>http://www.eolya.fr/2008/11/09/cooktop-un-editeur-xml-gratuit-sous-windows/#comments</comments>
		<pubDate>Sun, 09 Nov 2008 16:14:49 +0000</pubDate>
		<dc:creator>dominique</dc:creator>
				<category><![CDATA[Productivité]]></category>
		<category><![CDATA[Technique]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xpath]]></category>
		<category><![CDATA[xslt]]></category>

		<guid isPermaLink="false">http://www.zoonix.fr/?p=94</guid>
		<description><![CDATA[Il m&#8217;arrive parfois de devoir valider un fichier XML, débuguer une feuille de style XSLT ou tester une expression XPath. Pour toutes ces opérations, j&#8217;utilise l&#8217;éditeur XML Cooktop. Cet éditeur très complet est gratuit et fonctionne sous Windows. Concernant les transformation XSLT, il est possible de la faire fonctionner en association avec différents moteurs XSLT [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.zoonix.fr/uploads/2008/11/cooktop3.gif"><img class="alignleft size-medium wp-image-88" title="wp" src="http://www.zoonix.fr/uploads/2008/11/cooktop3.gif" alt="" /></a>Il m&#8217;arrive parfois de devoir valider un fichier XML, débuguer une feuille de style XSLT ou tester une expression XPath. Pour toutes ces opérations, j&#8217;utilise l&#8217;éditeur XML <a href="http://www.xmlcooktop.com/" target="_blank">Cooktop</a>. Cet éditeur très complet est gratuit et fonctionne sous Windows. Concernant les transformation XSLT, il est possible de la faire fonctionner en association avec différents moteurs XSLT (MSXML, Xalan, Saxon, .Net, &#8230;).</p>
<p>Voici une <a href="http://www.cavi.univ-paris3.fr/Ilpga/ilpga/tal/sitespp/cooktop-2002/sld001.htm" target="_blank">présentation en Français sous forme de diaporama</a> (j&#8217;ai hésité à mettre ce lien car les diapositives ne sont pas de très bonne qualité).</p>
<p>J&#8217;espère que cet outil vous sera aussi utile qu&#8217;à moi.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eolya.fr/2008/11/09/cooktop-un-editeur-xml-gratuit-sous-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Clipboard Magic porte bien son nom</title>
		<link>http://www.eolya.fr/2008/07/04/clipboard-magic-porte-bien-son-nom/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=clipboard-magic-porte-bien-son-nom</link>
		<comments>http://www.eolya.fr/2008/07/04/clipboard-magic-porte-bien-son-nom/#comments</comments>
		<pubDate>Fri, 04 Jul 2008 16:10:36 +0000</pubDate>
		<dc:creator>dominique</dc:creator>
				<category><![CDATA[Productivité]]></category>
		<category><![CDATA[Technique]]></category>
		<category><![CDATA[presse-papier]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://www.zoonix.fr/?p=45</guid>
		<description><![CDATA[Je voulais vous présenter un petit outils qui n&#8217;a l&#8217;air de rien mais qui me rend de grands services : Clipboard Magic ! Cet outil permet de conserver l&#8217;historique de ce que vous avez copié dans le presse-papier (ou clipboard). Pour moi, il répond à un besoin causé par l&#8217;utilisation de Vmware. J&#8217;ai remarqué que [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.zoonix.fr/uploads/2008/07/clipboard_logo.jpg"><img class="alignleft size-medium wp-image-46" title="clipboard_logo" src="http://www.zoonix.fr/uploads/2008/07/clipboard_logo.jpg" alt="" width="67" height="74" /></a>Je voulais vous présenter un petit outils qui n&#8217;a l&#8217;air de rien mais qui me rend de grands services : <a href="http://www.cybermatrix.com/clipboard_magic.html" target="_blank">Clipboard Magic !</a></p>
<p>Cet outil permet de conserver l&#8217;historique de ce que vous avez copié dans le presse-papier (ou clipboard). Pour moi, il répond à un besoin causé par l&#8217;utilisation de Vmware. J&#8217;ai remarqué que lorsque j&#8217;ai un serveur Windows lancé sous Vmware, son presse-papier est tout fou !<span id="more-45"></span> En fait, des anciens copier viennent écraser le dernier copier au point que je colle souvent quelque chose qui n&#8217;est pas ce que j&#8217;attend. Avec <strong>Clipboard magic</strong>, plus de problème, je visualise en permanence ce qui va être collé et le cas échéant je re-sélectionne dans son historique le bon élément.</p>
<p style="text-align: center;"><a href="http://www.zoonix.fr/uploads/2008/07/magic-clipboard.jpg"><img class="alignnone size-medium wp-image-47 aligncenter" title="magic-clipboard" src="http://www.zoonix.fr/uploads/2008/07/magic-clipboard.jpg" alt="" width="468" height="143" /></a></p>
<p style="text-align: left;">Les éléments du presse papier peuvent être supprimés, édités, sauvegardés dans un fichier et rechargés, &#8230;</p>
<p style="text-align: left;">Les options sont nombreuses.</p>
<p style="text-align: center;"><a href="http://www.zoonix.fr/uploads/2008/07/magic-clipboard-2.jpg"><img class="alignnone size-full wp-image-48 aligncenter" title="magic-clipboard-2" src="http://www.zoonix.fr/uploads/2008/07/magic-clipboard-2.jpg" alt="" width="438" height="294" /></a></p>
<p style="text-align: left;">A essayer !</p>
<p style="text-align: left;"> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.eolya.fr/2008/07/04/clipboard-magic-porte-bien-son-nom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

