<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
	<title>Flox-arts.net - Développement &amp; Ingénierie</title>
	<link>http://www.flox-arts.net/</link>
	<language>fr</language>
	<description>Florent Monthel, auto-entrepreneur</description>
<atom:link xmlns:atom="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://www.flox-arts.net/feed.php" />
	<lastBuildDate>Mon, 17 Jan 2011 23:52:00 +0100</lastBuildDate>
	<generator>PluXml</generator>
	<item>
		<title>Python 2.6 sur Debian Lenny</title> 
		<link>http://www.flox-arts.net/article28/python-2-6-sur-debian-lenny</link>
		<guid>http://www.flox-arts.net/article28/python-2-6-sur-debian-lenny</guid>
		<description>&lt;p&gt;La distribution &lt;strong&gt;Debian Lenny 5.0.7&lt;/strong&gt; propose sur les dépôts officiels la version &lt;strong&gt;2.5 de Python&lt;/strong&gt; et il s&#039;avère qu&#039;elle devient obsolète.&lt;/p&gt;
&lt;p style=&quot;text-align:center;&quot;&gt;&lt;img src=&quot;http://www.flox-arts.net/data/images/python-logo.gif&quot; alt=&quot;python&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Dans &lt;a href=&quot;http://www.flox-arts.net/article27/cluster-opensvc-sur-cloud-gandi&quot;&gt;mon précédent article sur OpenSVC&lt;/a&gt;, je propose l&#039;installation de la version &lt;strong&gt;Python 2.6&lt;/strong&gt; via une mise à jour de &lt;strong&gt;/etc/apt/sources.list&lt;/strong&gt; ce qui n&#039;est pas le plus propre. Voici une autre méthode.&lt;/p&gt;
&lt;p&gt;Nous allons compiler Python depuis les sources :&lt;/p&gt;
&lt;pre&gt;
apt-get install build-essential libssl-dev
cd /tmp
wget http://www.python.org/ftp/python/2.6.6/Python-2.6.6.tar.bz2
tar xvjf Python-2.6.6.tar.bz2
cd Python-2.6.6
./configure --prefix=/usr/local/python2.6 --with-threads --enable-shared
make
make install
&lt;/pre&gt;
&lt;p&gt;Nous allons désormais mettre à jour le système pour utiliser cette version :&lt;/p&gt;
&lt;pre&gt;
cd /usr/bin/
rm -f python
ln -s /usr/local/python2.6/bin/python python2.6
ln -s python2.6 python
ln -s /usr/local/python2.6/lib/libpython2.6.so.1.0 /usr/lib/
ln -s /usr/local/python2.6/lib/libpython2.6.so /usr/
&lt;/pre&gt;
&lt;p&gt;Facile non ?&lt;/p&gt;</description>
		<pubDate>Mon, 17 Jan 2011 23:52:00 +0100</pubDate>
		<dc:creator>Florent MONTHEL</dc:creator>
	</item>
	<item>
		<title>Cluster OpenSVC sur Cloud Gandi</title> 
		<link>http://www.flox-arts.net/article27/cluster-opensvc-sur-cloud-gandi</link>
		<guid>http://www.flox-arts.net/article27/cluster-opensvc-sur-cloud-gandi</guid>
		<description>&lt;p&gt;&lt;a href=&quot;http://www.opensvc.com&quot;&gt;OpenSVC&lt;/a&gt; est un nouveau logiciel libre français, qui fournit une solution de haute disponibilité (HA) pour &lt;strong&gt;les services critiques&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.opensvc.com&quot;&gt;OpenSVC&lt;/a&gt; permet le pilotage de ressources (IP, volume de disques, systèmes de fichiers, synchronisations, lanceurs d’applications) et la reprise de vos services en minimisant le temps d’interruption grâce au mécanisme de &lt;strong&gt;bascule automatique entre noeuds&lt;/strong&gt;.&lt;/p&gt;

&lt;p style=&quot;text-align:center;&quot;&gt;&lt;img src=&quot;http://www.flox-arts.net/data/images/gandi-opensvc-6.jpg&quot; alt=&quot;gandi opensvc&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quel est le rapport avec Gandi ?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gandi.net/hebergement&quot;&gt;Gandi&lt;/a&gt; nous propose un hébergement de serveur sur &lt;strong&gt;infrastructure Cloud&lt;/strong&gt; avec la possibilité d&#039;ajouter des ressources à la demande (IPs, disques, RAM, etc).&lt;br/&gt;
Depuis le début octobre, ils ont lancés une API afin de manipuler ces ressources en automatique (XML-RPC).&lt;/p&gt;
&lt;div class=&quot;info-box&quot;&gt;&lt;p&gt;L&#039;API va nous servir à contrôler l&#039;attribution des ressources de service à tel ou tel noeud.&lt;/p&gt;&lt;/div&gt;&lt;h3&gt;Cahier des charges&lt;/h3&gt;

&lt;p&gt;Nous avons besoin de créer un service applicatif qui sera complètement étanche vis à vis du serveur physique.&lt;br/&gt;
&lt;p&gt;Ce service pourra donc &lt;strong&gt;basculer d&#039;une machine à l&#039;autre&lt;/strong&gt; sans impact fort côté &quot;client&quot; (migration, cluster, etc).&lt;/p&gt;

&lt;p&gt;Nous avons donc besoin :&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;d&#039;une adresse IP de service dédiée&lt;/li&gt;
	&lt;li&gt;d&#039;un disque dédié de 1Go&lt;/li&gt;
	&lt;li&gt;d&#039;un nom de service = &lt;strong&gt;flatstapp01.flox-arts.net&lt;/strong&gt; (fla = trigramme Flox-arts.net; tst comme test; app01 comme nom d&#039;application)&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;info-box&quot;&gt;&lt;p&gt;Un service MySQL pourrait s&#039;appeler &lt;strong&gt;flaprdsql02.flox-arts.net&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;

&lt;h3&gt;Préparation côté OpenSVC&lt;/h3&gt;

&lt;p&gt;Il faut créer un compte via &lt;a href=&quot;https://collector.opensvc.com/init/default/user/register&quot;&gt;cette page OpenSVC&lt;/a&gt;.&lt;br/&gt;
&lt;p&gt;Une fois cette étape faite, il vous faut envoyer un mail à &lt;strong&gt;support[@]opensvc.com&lt;/strong&gt; afin de leur demander d&#039;attacher votre compte à votre nom de domaine.&lt;br/&gt;
Pour ma part, mon compte est attaché au nom de domaine &lt;strong&gt;flox-arts.net&lt;/strong&gt;.&lt;br/&gt;
De ce fait, tous les services, noeuds que vous allez créer avec votre nom de domaine vont remonter dans &lt;a href=&quot;https://collector.opensvc.com&quot;&gt;le collecteur OpenSVC&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Préparation de la VM Gandi (Cloud)&lt;/h3&gt;

&lt;p&gt;Pour notre test, une machine 1 part suffit largement. La première étape constitue donc à créer cette VM :&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;1 part Gandi&lt;/li&gt;
	&lt;li&gt;Mode expert&lt;/li&gt;
	&lt;li&gt;Image Debian 5 - 32 bits&lt;/li&gt;
	&lt;li&gt;Un hostname bien défini =&gt; ici c&#039;est &lt;strong&gt;&quot;athena&quot;&lt;/strong&gt;&lt;/li&gt;
	&lt;li&gt;le reste, c&#039;est selon votre convenance&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;warning-box&quot;&gt;&lt;p&gt;Ne pas prendre l&#039;image &lt;strong&gt;Debian 5 - 64 bits&lt;/strong&gt;, un bug existe&lt;/p&gt;&lt;/div&gt;

&lt;p style=&quot;text-align:center;&quot;&gt;&lt;img src=&quot;http://www.flox-arts.net/data/images/gandi-opensvc-1.jpg&quot; alt=&quot;gandi opensvc&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Pendant la création de la VM je vous invite à mettre à jour votre entrée DNS, ici j&#039;ai fait pointer l&#039;adresse &lt;strong&gt;IP 92.243.14.166 avec athena.flox-arts.net&lt;/strong&gt; :&lt;/p&gt;

&lt;p style=&quot;text-align:center;&quot;&gt;&lt;img src=&quot;http://www.flox-arts.net/data/images/gandi-opensvc-2.jpg&quot; alt=&quot;gandi opensvc&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ne pas oublier de mettre à jour le reverse de &lt;strong&gt;l&#039;IP 92.243.14.166&lt;/strong&gt; :&lt;/p&gt;

&lt;p style=&quot;text-align:center;&quot;&gt;&lt;img src=&quot;http://www.flox-arts.net/data/images/gandi-opensvc-3.jpg&quot; alt=&quot;gandi opensvc&quot; /&gt;&lt;/p&gt;

&lt;h3&gt;Préparation des ressources Gandi dédiées au service&lt;/h3&gt;

&lt;p&gt;Créons un disque de donnée de 1G que l&#039;on appellera &lt;strong&gt;flatstapp01&lt;/strong&gt; :&lt;/p&gt;

&lt;p style=&quot;text-align:center;&quot;&gt;&lt;img src=&quot;http://www.flox-arts.net/data/images/gandi-opensvc-4.jpg&quot; alt=&quot;gandi opensvc&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Il faut également créer une IP dédiée (reverse DNS &lt;strong&gt;flatstapp01.flox-arts.net&lt;/strong&gt;) donc mettre à jour le fichier de zone du domaine &lt;strong&gt;flox-arts.net&lt;/strong&gt; dans mon cas :&lt;/p&gt;

&lt;p style=&quot;text-align:center;&quot;&gt;&lt;img src=&quot;http://www.flox-arts.net/data/images/gandi-opensvc-5.jpg&quot; alt=&quot;gandi opensvc&quot; /&gt;&lt;/p&gt;

&lt;div class=&quot;info-box&quot;&gt;&lt;p&gt;Ici j&#039;ai fait pointer l&#039;IP 95.142.170.211 avec flatstapp01.flox-arts.net&lt;/p&gt;&lt;/div&gt;

&lt;h3&gt;Configuration de notre VM Gandi pour OpenSVC&lt;/h3&gt;

&lt;p&gt;On met à jour notre OS :&lt;/p&gt;

&lt;pre&gt;
apt-get update
apt-get upgrade
&lt;/pre&gt;

&lt;h4&gt;Clef publique SSH&lt;/h4&gt;

&lt;p&gt;Je vous conseille de configurer depuis votre poste d&#039;administration l&#039;authentification en root par &lt;strong&gt;clef publique&lt;/strong&gt; pour que ça soit plus commode :&lt;/p&gt;

&lt;pre&gt;
yoshi:~ fmonthel$ ssh root@athena
Flox-art.net - Ceci est un systeme prive
Seul les utilisateurs possedant un compte ont le droit de s&#039;authentifier
Linux athena 2.6.18-xenU #1 SMP Tue Nov 24 18:35:42 CET 2009 i686

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
athena:~#
&lt;/pre&gt;

&lt;h4&gt;Python 2.6&lt;/h4&gt;

&lt;p&gt;&lt;a href=&quot;http://www.opensvc.com&quot;&gt;OpenSVC&lt;/a&gt; a besoin de Python 2.6 pour fonctionner. Par défaut sur une Debian 5 c&#039;est Python 2.5 qui est installé.&lt;br/&gt;
On va ajouter des dépôts dans le fichier &lt;strong&gt;/etc/apt/sources.list&lt;/strong&gt; pour qu&#039;il ressemble à ça :&lt;/p&gt;

&lt;pre&gt;
deb http://mirrors.gandi.net/debian lenny main contrib non-free
deb http://mirrors.gandi.net/gandi/debian lenny main
deb http://security.debian.org/ lenny/updates main contrib non-free
# Apt source for python 2.6
deb http://http.us.debian.org/debian stable main contrib non-free
deb http://ftp.uk.debian.org/debian unstable main
&lt;/pre&gt;

&lt;p&gt;On met à jour apt et on installe Python 2.6 :&lt;/p&gt;

&lt;pre&gt;
apt-get update
apt-get install python2.6
&lt;/pre&gt;

&lt;p&gt;On repositionne ensuite nos dépôts dans &lt;strong&gt;/etc/apt/source.list&lt;/strong&gt; suivi d&#039;un petit apt-get update :&lt;/p&gt;

&lt;pre&gt;
deb http://mirrors.gandi.net/debian lenny main contrib non-free
deb http://mirrors.gandi.net/gandi/debian lenny main
deb http://security.debian.org/ lenny/updates main contrib non-free
&lt;/pre&gt;

&lt;h4&gt;Mise à l&#039;heure du système&lt;/h4&gt;

&lt;p&gt;Il est primordial que votre serveur soit à l&#039;heure pour que les remontées dans &lt;strong&gt;le collecteur OpenSVC soient correctes&lt;/strong&gt; :&lt;/p&gt;

&lt;pre&gt;
apt-get install ntpdate
ntpdate ntp.gandi.net
&lt;/pre&gt;

&lt;p&gt;Mise à jour de la timezone dans le fichier &lt;strong&gt;/etc/timezone&lt;/strong&gt; :&lt;/p&gt;

&lt;pre&gt;
Europe/Paris
&lt;/pre&gt;

&lt;div class=&quot;note-box&quot;&gt;&lt;p&gt;On peut automatiser la mise à jour régulière de l&#039;heure du système en crontab par exemple (etc/crontab)&lt;/p&gt;&lt;/div&gt;

&lt;h3&gt;Installation d&#039;OpenSVC sur notre VM Gandi&lt;/h3&gt;

&lt;p&gt;Vous pouvez suivre la &lt;a href=&quot;http://www.opensvc.com/init/default/doc_node_install&quot;&gt;documentation officielle&lt;/a&gt;, je détaille ci-dessous l&#039;essentiel pour une VM Gandi.&lt;/p&gt;

&lt;p&gt;On télécharge et installe le dernier &lt;strong&gt;repository OpenSVC&lt;/strong&gt; :&lt;/p&gt;

&lt;pre&gt;
cd /tmp
wget http://repo.opensvc.com/deb/opensvc-1.0-101008.1159.noarch.deb
dpkg -i opensvc-1.0-101008.1159.noarch.deb
&lt;/pre&gt;

&lt;p&gt;Voilà OpenSVC est installé dans le répertoire &lt;strong&gt;/opt/opensvc&lt;/strong&gt;.&lt;/p&gt;


&lt;h3&gt;Configuration d&#039;OpenSVC sur notre VM Gandi&lt;/h3&gt;

&lt;p&gt;Il faut définir le type de serveur que nous avons installé.&lt;br/&gt;
Un serveur peut être enregistré comme noeud &lt;strong&gt;PRD ou DEV&lt;/strong&gt;, ici nous choisirons DEV (fichier &lt;strong&gt;/opt/opensvc/var/host_mode&lt;/strong&gt;) :&lt;/p&gt;

&lt;pre&gt;
athena:/tmp# more /opt/opensvc/var/host_mode
DEV
&lt;/pre&gt;

&lt;p&gt;Afin que la remontée d&#039;information dans le collecteur OpenSVC se passe bien, il faut que le nom generic &lt;strong&gt;dbopensvc pointe vers collector.opensvc.com&lt;/strong&gt;.&lt;br/&gt;
On ajoute donc cette entrée dans le fichier &lt;strong&gt;/etc/hosts&lt;/strong&gt; :&lt;/p&gt;

&lt;pre&gt;
# Collecteur OpenSVC
188.165.36.82   collector.opensvc.com   dbopensvc
&lt;/pre&gt;

&lt;p&gt;&lt;a href=&quot;http://www.opensvc.com&quot;&gt;OpenSVC&lt;/a&gt; a besoin que la commande hostname retourne le FQDN (afin de lier votre serveur à votre compte OpenSVC).&lt;/p&gt;
&lt;p&gt;Pratique, Gandi propose cette option dans le fichier &lt;strong&gt;/etc/default/gandi&lt;/strong&gt; :&lt;/p&gt;

&lt;pre&gt;
athena:~# more /etc/default/gandi | grep HOSTNAME
HOSTNAME_TYPE=full
athena:~# reboot
&lt;/pre&gt;

&lt;div class=&quot;info-box&quot;&gt;&lt;p&gt;Le hostname sera le reverse DNS de l&#039;interface VM (eth0)&lt;/p&gt;&lt;/div&gt;

&lt;h3&gt;Création du service OpenSVC sur notre VM Gandi&lt;/h3&gt;

&lt;p&gt;On est prêt à créer notre service &lt;strong&gt;flatstapp01.flox-arts.net&lt;/strong&gt;, vous pouvez suivre &lt;a href=&quot;http://www.opensvc.com/init/default/doc_service_install&quot;&gt;la documentation officielle&lt;/a&gt;.&lt;br/&gt;
On se place dans le répertoire de configuration des services :&lt;/p&gt;

&lt;pre&gt;
cd /opt/opensvc/etc
&lt;/pre&gt;

&lt;p&gt;Ce lien symbolique permet de passer toutes les commandes relatives au service :&lt;/p&gt;

&lt;pre&gt;
ln -s ../bin/svcmgr flatstapp01.flox-arts.net
&lt;/pre&gt;

&lt;p&gt;Ce lien symbolique est essentiel pour démarrer les applications de notre service :&lt;/p&gt;

&lt;pre&gt;
ln -s /srv/flatstapp01/etc/init.d flatstapp01.flox-arts.net.d
&lt;/pre&gt;

&lt;p&gt;On va créer le fichier de configuration &lt;strong&gt;/opt/opensvc/etc/flatstapp01.flox-arts.net.env&lt;/strong&gt; :&lt;/p&gt;

&lt;pre&gt;
[default]
app = FLA
comment = FLA APP TST service 
mode = hosted
service_type = TST
nodes =  athena.flox-arts.net
autostart_node = athena.flox-arts.net
[ip#1]
ipname = flatstapp01.flox-arts.net
ipdev = eth1
pre_start = /opt/opensvc/extern/ip-action.py --action attach --ip 95.142.170.211
pre_stop = /opt/opensvc/extern/ip-action.py --action detach --ip 95.142.170.211
[fs#1]
dev = /dev/xvdb
mnt = /srv/flatstapp01
type = ext3
pre_start = /opt/opensvc/extern/disk-action.py --action attach --disk flatstapp01
pre_stop = /opt/opensvc/extern/disk-action.py --action detach --disk flatstapp01
&lt;/pre&gt;

&lt;div class=&quot;warning-box&quot;&gt;&lt;p&gt;Il faut bien sûr l&#039;adapter à votre configuration (IP, FS, etc)&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;Comme vous pouvez le remarquer on utilise les options &lt;strong&gt;pre_start&lt;/strong&gt; et &lt;strong&gt;pre_stop&lt;/strong&gt; de la section IP et FS pour exécuter un script python.&lt;br/&gt;
Ces scripts s&#039;occupent d&#039;attacher ou détacher les ressources du service &lt;a href=&quot;http://doc.rpc.gandi.net&quot;&gt;via l&#039;API Gandi&lt;/a&gt; :&lt;/p&gt;

&lt;pre&gt;
cd /tmp
wget http://download.flox-arts.net/opensvc-gandi.tar.gz
tar -xvzf opensvc-gandi.tar.gz
mv opensvc-gandi /opt/opensvc/extern
chmod -R 700 /opt/opensvc/extern
&lt;/pre&gt;

&lt;div class=&quot;warning-box&quot;&gt;&lt;p&gt;Il vous faut éditer les 2 scripts python pour y renseigner &lt;a href=&quot;https://www.gandi.net/admin/api_key&quot;&gt;votre clef API Gandi&lt;/a&gt; (ligne 35)&lt;/p&gt;&lt;/div&gt;

&lt;h3&gt;Bouquet final, le démarrage de notre service OpenSVC&lt;/h3&gt;

&lt;p&gt;Voilà votre &quot;enveloppe&quot; de service est prête, vous pouvez suivre ces quelques &quot;best practices&quot; :&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;/srv/flatstapp01/data&lt;/strong&gt; =&gt; stockage des données de votre service (datafiles MySQL par exemple)&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;/srv/flatstapp01/tools&lt;/strong&gt; =&gt; binaires des applications de votre services (binaire MySQL par exemple)&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;/srv/flatstapp01/etc/init.d&lt;/strong&gt; =&gt; scripts de démarrage/arrêt des applications de votre service (SysV style)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Allez on démarre notre service minime (IP + FS) :&lt;/p&gt;

&lt;pre&gt;
athena:/# /opt/opensvc/etc/flatstapp01.flox-arts.net start
2010-11-21 19:35:26,838 - FLATSTAPP01.FLOX-ARTS.NET.IP#1 - INFO - /opt/opensvc/extern/ip-action.py --action attach --ip 95.142.170.211
2010-11-21 19:35:51,738 - FLATSTAPP01.FLOX-ARTS.NET.IP#1 - INFO - 95.142.170.211 is already up on eth1
2010-11-21 19:35:51,751 - FLATSTAPP01.FLOX-ARTS.NET.FS#1 - INFO - /opt/opensvc/extern/disk-action.py --action attach --disk flatstapp01
2010-11-21 19:36:31,335 - FLATSTAPP01.FLOX-ARTS.NET.FS#1 - INFO - fs(/dev/xvdb /srv/flatstapp01) is already mounted
&lt;/pre&gt;

&lt;p&gt;On vérifie le statut :&lt;/p&gt;

&lt;pre&gt;
athena:/# /opt/opensvc/etc/flatstapp01.flox-arts.net print_status
rid      status   label
---      ------   -----
fs#1     up       /dev/xvdb@/srv/flatstapp01
ip#1     up       flatstapp01.flox-arts.net@eth1
sync#i0  n/a      rsync svc config to drpnodes, nodes
                  # no destination nodes
sync#i1  n/a      rsync system files to drpnodes
                  # no destination nodes
app      n/a      app
                  # no startup script
overall  up
&lt;/pre&gt;

&lt;p&gt;Et on vérifie que ça remonte bien via &lt;a href=&quot;https://collector.opensvc.com/init/default/svcmon&quot;&gt;le collecteur OpenSVC&lt;/a&gt; :&lt;/p&gt;

&lt;p style=&quot;text-align:center;&quot;&gt;&lt;img src=&quot;http://www.flox-arts.net/data/images/gandi-opensvc-6.jpg&quot; alt=&quot;gandi opensvc&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Tutoriel terminé, plus d&#039;informations via :&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;OpenSVC via &lt;a href=&quot;http://www.opensvc.com&quot;&gt;http://www.opensvc.com&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Gandi hébergement via &lt;a href=&quot;http://www.gandi.net/hebergement&quot;&gt;http://www.gandi.net/hebergement&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
		<pubDate>Sun, 21 Nov 2010 21:30:00 +0100</pubDate>
		<dc:creator>Florent MONTHEL</dc:creator>
	</item>
	<item>
		<title>Nouveau site PluXml.org !</title> 
		<link>http://www.flox-arts.net/article26/nouveau-site-pluxml-org</link>
		<guid>http://www.flox-arts.net/article26/nouveau-site-pluxml-org</guid>
		<description>&lt;p class=&quot;center&quot;&gt;&lt;img src=&quot;http://www.flox-arts.net/data/images/pluxml-org-v2.png&quot; alt=&quot;pluxml.org v2&quot;/&gt;&lt;/p&gt;
&lt;p&gt;Nous avons décidé de donner un coup de jeune au site &lt;a href=&quot;http://pluxml.org&quot;&gt;PluXml.org&lt;/a&gt; qui n&#039;avait pas évolué depuis la naissance de projet en 2006.&lt;br/&gt;
C&#039;est chose faite avec ce design de notre graphiste &lt;a href=&quot;http://pluxml.org/?categorie3/a-propos-de-pluxml&quot;&gt;Ti_Pierre&lt;/a&gt; et ce logo de SapinTremblant et NS-shnalla du &lt;a href=&quot;http://forum.pluxml.org&quot;&gt;forum&lt;/a&gt;. Merci à eux !&lt;/p&gt;
&lt;p&gt;Un wiki digne de ce nom est maintenant accessible à l&#039;adresse &lt;a href=&quot;http://wiki.pluxml.org&quot;&gt;wiki.pluxml.org&lt;/a&gt; et vous pouvez avec votre compte &lt;a href=&quot;http://pluxml.org&quot;&gt;PluXml&lt;/a&gt; créer et éditer de nouvelles pages.&lt;/p&gt;
&lt;p&gt;Pour le reste, un forum sous &lt;a href=&quot;http://fluxbb.org&quot;&gt;FluxBB&lt;/a&gt; et le reste ... sous Pluxml Blog bien sûr !&lt;/p&gt;
&lt;p&gt;Article original : &lt;a href=&quot;http://pluxml.org/?article20/nouveau-site-pluxml-org&quot;&gt;http://pluxml.org/?article20/nouveau-site-pluxml-org&lt;/a&gt;&lt;/p&gt;</description>
		<pubDate>Fri, 20 Mar 2009 00:00:00 +0100</pubDate>
		<dc:creator>Florent MONTHEL</dc:creator>
	</item>
	<item>
		<title>Le projet de script Pluxml</title> 
		<link>http://www.flox-arts.net/article23/le-projet-de-script-pluxml</link>
		<guid>http://www.flox-arts.net/article23/le-projet-de-script-pluxml</guid>
		<description>&lt;p&gt;&lt;a href=&quot;http://pluxml.org&quot; title=&quot;Pluxml&quot;&gt;Pluxml&lt;/a&gt; est un script pour créer un site ou un blog, nul besoin de connaissance en programmation ni besoin d&#039;une base de données sur son hébergement, un environnement php classique lui suffit. Pluxml se veut léger et facile d&#039;utilisation grâce à une interface d&#039;administration simple et le stockage de vos écrits dans des fichiers &lt;acronym title=&quot;Extensible Markup Language&quot;&gt;Xml&lt;/acronym&gt; facilement transportables.&lt;/p&gt;
&lt;p&gt;Le créateur &lt;strong&gt;Skyline&lt;/strong&gt; a malheureusement plus beaucoup le temps de maintenir ce script et je suis donc chargé de reprendre ce projet fort intéressant.&lt;/p&gt;
&lt;p style=&quot;text-align:center;&quot;&gt;&lt;img src=&quot;http://www.flox-arts.net/data/images/sign_pluxml.jpg&quot; alt=&quot;pluxml&quot; /&gt;&lt;/p&gt;
&lt;p&gt;La version &lt;strong&gt;blog beta 4&lt;/strong&gt;, sur laquelle je travaille, sera d&#039;ailleurs :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;plus rapide&lt;/li&gt;
&lt;li&gt;plus fonctionnelle&lt;/li&gt;
&lt;li&gt;plus accessible&lt;/li&gt;
&lt;li&gt;respectueuse de l&#039;esprit initial du script&lt;/li&gt;
&lt;/ul&gt;</description>
		<pubDate>Sun, 27 Jul 2008 13:36:00 +0200</pubDate>
		<dc:creator>Florent MONTHEL</dc:creator>
	</item>
	<item>
		<title>Internet-creation.fr devient Flox-arts.net !</title> 
		<link>http://www.flox-arts.net/article22/internet-creation-fr-devient-flox-arts-net</link>
		<guid>http://www.flox-arts.net/article22/internet-creation-fr-devient-flox-arts-net</guid>
		<description>&lt;p&gt;Blasé par le nom de domaine Internet-creation.fr, je l&#039;ai changé récemment pour &lt;a href=&quot;http://www.flox-arts.net&quot;&gt;Flox-arts.net&lt;/a&gt;; un petit clin d&#039;oeil à mon papa ;)&lt;/p&gt;
&lt;p style=&quot;text-align:center;&quot;&gt;&lt;img src=&quot;http://www.flox-arts.net/data/images/logo.jpeg&quot; alt=&quot;Flox-arts.net&quot; /&gt;&lt;/p&gt;</description>
		<pubDate>Sun, 27 Jul 2008 13:19:00 +0200</pubDate>
		<dc:creator>Florent MONTHEL</dc:creator>
	</item>
	<item>
		<title>Pluxml - Gestion des liens et des utilisateurs</title> 
		<link>http://www.flox-arts.net/article8/gestion-des-liens-et-des-utilisateurs</link>
		<guid>http://www.flox-arts.net/article8/gestion-des-liens-et-des-utilisateurs</guid>
		<description>&lt;p&gt;J&#039;ai developpé sous Pluxml, CMS blog et basé uniquement sur des fichiers XML, des modules qui permettent :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la gestion des liens externes = &lt;a href=&quot;http://forum.pluxml.org/viewtopic.php?id=460&quot;&gt;topic ici&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;la gestion des utilisateurs (avec plusieurs niveaux) = &lt;a href=&quot;http://forum.pluxml.org/viewtopic.php?id=529&quot;&gt;topic ici&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ces deux modules sont inspirés des fonctions de Pluxml et respectent donc &quot;la politique&quot; de ce script léger et rapide&lt;br /&gt;
Une petite modification cependant dans la stratégie des variables de sessions de l&#039;administration pour le module &quot;utilisateurs&quot;&lt;/p&gt;&lt;pre&gt;
// Fonction d&#039;édition des liens externes
function editLiens($content){

	$content = unslash($content);
	$xml = &quot;&lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;ISO-8859-1\&quot;?&gt;\n&lt;document&gt;\n&quot;;

	foreach($content as $lien_num =&gt; $lien_name){
		if(is_numeric($lien_num) &amp; trim($lien_name) != &#039;&#039;){
			$lien_ord = trim($content[$lien_num.&#039;_ord&#039;]);
			$lien_url = trim($content[$lien_num.&#039;_url&#039;]);
			$xml .= &quot;\t&lt;lien number=\&quot;&quot;.$lien_num.&quot;\&quot; ordre=\&quot;&quot;.$lien_ord.&quot;\&quot; url=\&quot;&quot;.$lien_url.&quot;\&quot;&gt;&quot;.amp($lien_name).&quot;&lt;/lien&gt;\n&quot;;
		}
	}
	$xml .= &quot;&lt;/document&gt;&quot;;
	if(write($xml, PLX_DOC.$this-&gt;config[&#039;liens&#039;])){
		return &#039;Liens modifiées&#039;;
	}else{
		return &#039;Erreur dans la modification du fichier &#039;.PLX_DOC.$this-&gt;config[&#039;liens&#039;];
	}
}
&lt;/pre&gt;
&lt;pre&gt;
// Fonction qui parse le fichier des utilisateurs et qui retourne un tableau
function getUsers($url_file){
	$data = implode(&quot;&quot;,file($url_file));
	$parser = xml_parser_create(&#039;ISO-8859-1&#039;);
	xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
	xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0);
	xml_parse_into_struct($parser,$data,$valeurs,$index_tags);
	xml_parser_free($parser);

	if(isset($index_tags[&#039;user&#039;])){
		for($i=0;$i &lt; count($index_tags[&#039;user&#039;]);$i++) {
			$array[$valeurs[$index_tags[&#039;user&#039;][$i]][&#039;attributes&#039;][&#039;number&#039;]][&#039;login&#039;]
			= $valeurs[$index_tags[&#039;user&#039;][$i]][&#039;attributes&#039;][&#039;login&#039;];
			$array[$valeurs[$index_tags[&#039;user&#039;][$i]][&#039;attributes&#039;][&#039;number&#039;]][&#039;type&#039;]
			= $valeurs[$index_tags[&#039;user&#039;][$i]][&#039;attributes&#039;][&#039;type&#039;];
			$array[$valeurs[$index_tags[&#039;user&#039;][$i]][&#039;attributes&#039;][&#039;number&#039;]][&#039;actif&#039;]
			= $valeurs[$index_tags[&#039;user&#039;][$i]][&#039;attributes&#039;][&#039;actif&#039;];
			$array[$valeurs[$index_tags[&#039;user&#039;][$i]][&#039;attributes&#039;][&#039;number&#039;]][&#039;pwd&#039;]
			= $valeurs[$index_tags[&#039;user&#039;][$i]][&#039;value&#039;];
		}
	return $array;
	}
}
&lt;/pre&gt;</description>
		<pubDate>Tue, 01 May 2007 12:55:00 +0200</pubDate>
		<dc:creator>Florent MONTHEL</dc:creator>
	</item>
</channel>
</rss>
