Text

Wordpress et PHP 5.3

Après plusieurs tentatives d’installation (ou de migration) de Wordpress sous un serveur PHP 5.3, je viens enfin de trouver la solution à ce qui semble être une incompatibilité due à une configuration non explicite de php.

L’erreur est simple, vous affichez votre site/blog sous wordpress et celui ci vous hurle dessus que les fonction strtotime() et date() ne peut répondre à au système car le timezone n’a pas été défini dans php.

Reste donc a aller faire un tour dans votre php.ini, a rechercher “date.timezone = ” et à plus préciser “Europe/Paris” (oui ici on est en France monsieur!) en prenant soin de décommenter la ligne (retirez le “;”)

Bon maintenant que j’ai downgrader mes serveurs en 5.2.10 je vais pouvoir remonter sur une 5.3!

Text

Uffie - Pop the Glock

EDIT Clip Officiel:

Uffie Pop The Glock from Uffie on Vimeo.

Autre version:

Tags: Musique
Text

Partager une librairie PHP entre plusieurs sites

Sur un serveur en production, il peut nous arriver d’avoir plusieurs sites qui utilisent le même framework, ou le même fichier de configuration. De la même manière, les framework, comme dans mon cas Zend Framework, évoluent très rapidement et il peux être utile de gérer plusieurs versions sur le même serveur. Dans tous les cas, cette manipulation vous fera économiser de la place et facilitera vos mises à jours.

Commençons alors par placer dans un répertoire le ou les framework ainsi que les versions qui nous intéressent et incluons ce répertoire dans la configuration de php (votre fichier php.ini). Recherchez la ligne contenant la directive “include_path”. Celle si est commentée par défaut à l’aide d’un point-virgule (;). Elle décrit les différents répertoires contenant des fichiers sur lesquels nous voulons faire des include(). Décommentez alors la ligne en supprimant le point-virgule et adapter la description du chemin en fonction de l’endroit où vous avez placer vos librairies. Dans mon cas, cela donne:

include_path = “.:/var/www/library”

Pensez à conserver le “.” dans la liste des chemins à inclure afin de pouvoir inclure un fichier localement dans vos différentes applications php et redémarrez votre serveur http.

Dans le cas où nous avons plusieurs versions, il peut aussi être intéressant de simplifier le chemin d’accès à la dernière version stable. On peux alors utilise de manière toute simple utiliser les liens virtuels unix:

$ ln -s Zend_1.9.2 Zend

Pensez également à régler vos droits sur vos librairies:

# chown -R www-data:www-data /var/www/library

Enfin, voyons comment nous allons pouvoir utiliser cette librairie partagée coté applications. Je reprend alors mon exemple de Zend et le fichier bootstrap dans lequel nous avions l’habitude de re-écrire le path d’include de php (ici Zend se trouvais dans le ./library et ./application/models/ contient les modèles de notre application MVC):

set_include_path(‘.’ . PATH_SEPARATOR . ‘./library’ . PATH_SEPARATOR . ‘./application/models/’ . PATH_SEPARATOR . get_include_path());

Le path contenant le Zend Framework étant maintenant inclue par le “get_include_path()” nous pouvons supprimer le ./library des répertoires inclus.

Ensuite nous appelions notre framework avec la ligne:

require_once ‘Zend/Loader/Autoloader.php’;

Si vous avez suivit toutes les indications précédente et que vous laissez la ligne telle quelle, le site chargera ici la version courante de Zend Framework que j’ai décrit tout à l’heure par le lien logique unix. C’est ici que ça deviens intéressant et que nous pouvons préciser la version de Zend à utiliser.

Selon la manière donc vous avez nommé vos répertoires (dans mon cas Zend_x.y.z ou x.y.z correspond à la version du framework), vous pouvez alors appeler par exemple une version 1.6.2 de Zend dans une ancienne application.

require_once ‘Zend_1.6.2/Loader/Autoloader.php’;

Libre à vous d’adapter tout cela à vos propres conventions de nommage et de rangement.

Text

Configuration d’Exim pour l’envoi externe

La plupart des applications web que nous pouvons être amené à déployer sur un serveur web utilise des fonctions d’envoi de mails.

Afin de gérer soit même les files d’attentes, il peut alors être utile d’héberger soit même un serveur SMTP directement sur la machine qui héberge l’application. Nous allons donc voir comment configurer simplement Exim pour l’envoi de mails vers les domaines externes. Nous utiliserons une distribution Debian stable.

Commençons par installer Exim:

aptitude install exim4

Exim va alors s’installer avec une configuration de base que nous allons modifier avec l’assistant fourni par exim4-config:

dpkg-reconfigure exim4-config

Le premier écran vous expliquera le rôle de cet utilitaire, validez avec “Ok” pour passer à l’écran suivant.

Sur celui si, choisissez “Distribution direct par SMTP (site internet)”.

Ensuite sur l’écran suivant entrez le nom tel que vous l’avez défini dans votre configuration ou tel qu’il a été défini par votre hébergeur.

Deux écran plus loin, l’assistant va vous demander sur quelle adresse il va devoir accepter le courrier. Puisque nous sommes parti sur une configuration simple où le serveur d’applications (php par exemple) se trouve sur la même machine, nous utiliseront donc l’adresse 127.0.0.1 pour limiter les connections au serveur avec lui-même.

L’écran suivant nous demande alors de préciser sur quel autre nom le serveur doit accepter les mails. Nous pouvons ici lui repriser le nom DNS de notre machine.

Vient ensuite, la question des domaines à relayer. Nous l’avons déjà vu, nous n’acceptons les mails entrant que sur l’adresse de localhost: 127.0.0.1. Nous pouvons donc autoriser le transfert vers tous les domaines afin que les mails puissent sortir. Remplissez donc ce champ avec une étoile “*”.

Laissez la liste des machines à relayer vide car nous souhaitons que le serveur transmette lui même les mails sortants.

Deux écran plus loin, répondez “Non” à la proposition de minimiser les requêtes DNS, laissez la distribution du courrier au “format mbox dans /var/mail” et ne séparez pas la configuration dans plusieurs fichiers.

L’assistant va se fermer et va redémarrer Exim et vous pourrez tester sans problème le bon fonctionnement de votre MTA par exemple avec la fonction mail() de PHP.

Text

NSlookup et Dig: surveillez vous mises à jours DNS

Lors de l’achat d’un nom de domaine chez un registar, celui ci fourni généralement des services d’hébergement, de mails, mais aussi les services DNS liés à la gestion de ce domaine. On peux alors modifier directement sa configuration DNS dans l’interface mis à disposition par l’hébergeur et cette configuration sera alors répliquée sur les différents serveurs DNS desservant votre nom de domaine.

Nous allons voir ici comment contrôler la mise en applications de vos modifications via 2 outils en lignes de commande: NSLookup (présent sur tous systèmes) et Dig (présent de base sous Linux et Mac OS X, une version cygwin existe pour Windows).

Prenons un exemple concret, je viens de migrer mon blog sur un nouveau serveur et je souhaite que l’adresse “blog.lelevier.fr” pointe bien sur ce nouveau serveur. J’ai fait les modifications nécessaire dans l’interface de mon registar et je connaît l’adresse ip ou le nom de mon nouveau serveur.

Commençons par NSLookup avec une requête simple:

23:03: tibo@Boudallu ~ % nslookup blog.lelevier.fr Server: 192.168.1.1 Address: 192.168.1.1#53 Non-authoritative answer: blog.lelevier.fr canonical name = rps.lelevier.fr. Name: rps.lelevier.fr Address: 87.98.170.232

Ici c’est mon serveur DNS local qui me répond (192.168.1.1) et bien qu’il n’ai pas autorité sur le domaine (il ne le gère pas directement) il me répond que “blog.lelevier.fr” est un Alias de “rps.lelevier.fr” défini par l’adresse “87.98.170.232” qui est justement mon serveur.

Même si le résultat est ici concluant nous allons partir sur le cas où la modification n’a pas encore été répliquée sur notre serveur local. Regardons alors directement sur les serveur DNS de notre registar pour voir si les modifications ont était prise en compte sur ces derniers. Commençons par trouver l’adresse ou le nom des serveurs DNS faisant autorité sur notre domaine avec Dig:

23:04: tibo@Boudallu ~ % dig NS lelevier.fr ; «» DiG 9.4.3-P3 «» NS lelevier.fr ;; global options: printcmd ;; Got answer: ;; -»HEADER«- opcode: QUERY, status: NOERROR, id: 64451 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2 ;; QUESTION SECTION: ;lelevier.fr. IN NS ;; ANSWER SECTION: lelevier.fr. 86400 IN NS dns11.ovh.net. lelevier.fr. 86400 IN NS ns11.ovh.net. ;; ADDITIONAL SECTION: dns11.ovh.net. 86371 IN A 213.251.188.130 ns11.ovh.net. 86371 IN A 213.251.128.130 ;; Query time: 54 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: Wed Aug 19 00:06:38 2009 ;; MSG SIZE rcvd: 107

Nous pouvons lire ici dans la zone “ANSWER SECTION” que notre domaine est gérer par les serveur “dns11.ovh.net” et “ns11.ovh.net”. Retournons alors maintenant sur NSLookup pour vérifier l’état de la résolution sur un serveur précis. Lançez NSLookup sans argument avec la commande “NSLookup”, spécifiez le serveur DNS avec l’option “server” suivit du nom ou de l’ip d’un des serveur trouvé au dessus, et enfin entrez le nom DNS que vous souhaitez résoudre:

23:06: tibo@Boudallu ~ % nslookup > server dns11.ovh.net Default server: dns11.ovh.net Address: 213.251.188.130#53 > blog.lelevier.fr Server: dns11.ovh.net Address: 213.251.188.130#53 blog.lelevier.fr canonical name = rps.lelevier.fr. Name: rps.lelevier.fr Address: 87.98.170.232 >

On peut alors lire ici que le serveur en question redirige encore une fois “blog.lelevier.fr” vers l’hôte “rps.lelevier.fr” dont l’adresse est “87.98.170.232”. On pourra alors vérifier sur le second serveur DNS que les informations concordent et en conclure l’état de notre modification et sa prise en compte par notre registar.

A noté cependant qu’il faut généralement entre 4h et 48h pour que la modification soit répliquée.

Text

True Blood saison 2

Depuis quelques semaines maintenant la saison 2 de True Blood est diffusé tout les dimanches soir (heure US) sur HBO.

Même si l’histoire stagne un peux au début de la saison, une fois les nouveaux personnages en place, l’intrigue reprendre de plus belles (épisode 6/7).

Le 31 Juillet dernier, HBO à annoncé officiellement la 3ème saison qui sera diffusée en 2010.

En attendant, prochain épisode dans la nuit de dimanche prochain!

Text

BIRDY NAM NAM - THE PARACHUTE ENDING

Text

Préparer Debian Lenny pour Zimbra

Zimbra 5  ne supporte actuellement pas la nouvelle version stable de Debian : Lenny (alias 5.0)

Avec Debian, il reste cependant facile de “mixer” les sources afin de faire concorder les version de package présentes sur différentes branches de la distribution.

Le premier problème va alors venir du fichier /etc/debian_version qui nous dit clairement que nous sommes sur une version 5.0. Commençons alors par remplacer le 5 par un 4 dans ce fichier afin de laisser penser à Zimbra qu’il se trouve sur une machine sous Debian Etch.

Ensuite, nous allons avoir besoin d’une ancienne version de perl (5.8) uniquement disponible sous Etch.

Pour celà nous devons ajouter les sources de Etch dans la liste des sources de notre serveur pour la faire correspondre à quelque chose dans ce genre (les serveurs peuvent biensur être différents):

deb http://ftp2.fr.debian.org/debian/ etch main deb-src http://ftp2.fr.debian.org/debian/ etch main deb http://security.debian.org/ etch/updates main deb-src http://security.debian.org/ etch/updates main deb http://ftp2.fr.debian.org/debian/ lenny main deb-src http://ftp2.fr.debian.org/debian/ lenny main deb http://security.debian.org/ lenny/updates main deb-src http://security.debian.org/ lenny/updates main deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main

Nous devons ensuite mettre à jour la liste des sources:

# aptitude update

Et nous pouvons enfin installer perl 5.8:

# aptitude install perl=5.8.8-7etch6

Nous pouvons maintenant supprimer exim

# aptitude remove exim4

et installer les packages requis

# aptitude install  sudo fetchmail openssl libltdl3 libgmp3c2 libexpat1

Enfin vérifiez que le nom plainement qualifié du serveur pointe vers son IP réel et non pas sur 127.0.0.1 dans le fichier /etc/hosts et récuperez la dernière version de Zimbra 5 sur le site de Zimbra pour l’installer.

Text

Migration du Blog

Ceci est le nouvel emplacement de mon blog.

Celui ci n’est plus hebergé sur blogspot comme le fut l’ancien mais sur une plateforme wordpress herbergé sur un serveur privé.

Merci donc de prendre en compte cette nouvelle adresse: blog.lelevier.fr

Tags: Divers
Text

Installation de mod_python pour Apache sous Mac OS X

Bataille d’une soirée, j’ai passé pas mal de temps avant de réussir à faire redémarré mon Apache avec le chargement du module python.

L’erreur est pourtant simple:

mod_python.so: mach-o, but wrong architecture

Curieusement, il m’a alors fallu compiler un mod_python compatible avec toutes les architectures suportées par OS X (alors que je n’ai que des machines intel…)

Attention, pré-requis: vous devez avoir “gcc” et “make” installé sur votre machine. Si ce n’est pas le cas, installez les xcodestools.

Voici alors comment précéder:

-Tout d’abord, récupérez les dernières sources de mod_python sur le site du projet apache Actuellement, la dernière version étant la 3.3.1, l’url compléte des sources sera: http://www.apache.org/dist/httpd/modpython/mod_python-3.3.1.tgz (utilisez wget si vous l’avez installé!)

-Ouvrez un terminal est localisez l’endroit où ses sources ont été téléchargées (certainemant dans ~/Downloads)

-Décompressez l’archive:

% tar xvf mod_python-X.Y.Z.tgz

(notez que le X.Y.Z correspond à votre version) et entrez dans le dossier:

% cd mod_python-X.Y.Z

-Commençons par configurer les sources en précisant l’emplacement d’apxs

% ./configure —with-apxs=/usr/sbin/apxs

Laissons la machine mouliner et si tout ce passe bien elle devrai nous créer les bons Makefile.

C’est là que ça se complique puisque nous allons modifier directement le Makefile pour lui préciser les architectures à utiliser:

-Ouvrez donc le fichier src/MakeFile avec votre éditeur de text favori (vi est le mien!)

-Reperez la ligne LDFLAGS et ajoutez en fin de ligne:

-arch x86_64 -arch ppc -arch i386

Pour obtenir quelque chose du genre:

LDFLAGS= -Wl,-framework,Python -u _PyMac_Error -framework Python -Wl,-F. -arch x86_64 -arch ppc -arch i386

-Interessez vous maintenant à la ligne CFLAGS et ajoutez lui, en fin de ligne encore une fois:

-arch x86_64 -arch ppc -arch i386

Vous obtiendrez alors quelque chose qui ressemblera à ceci:

CFLAGS=$(OPT) $(INCLUDES) -arch x86_64 -arch ppc -arch i386

-Enfin dans la section “mod_python.so: $(SRCS)” (un peu plus bas), ajoutez les options:

-Wc,”-arch x86_64” -Wc,”-arch ppc” -Wc,”-arch i386”

après l’option -c de la ligne

$(APXS) $(INCLUDES) -c $(SRCS) $(LDFLAGS) $(LIBS)

pour obtenir un résultat proche de celui-ci:

$(APXS) $(INCLUDES) -c -Wc,”-arch x86_64” -Wc,”-arch ppc” -Wc,”-arch i386” $(SRCS) $(LDFLAGS) $(LIBS)

-Enregistrez vous modifications et quittez l’éditeur de texte pour revenir dans le dossier principal des sources.

Passons maintenant à la compilation de ce fameu module:

-Un petit

make

suvit d’un

sudo make install

devrai faire apparaitre un module nommé “mod_python.so” dans le dossier /usr/libexec/apache2

-Pour plus d’information sur notre module:

% file mod_python.so mod_python.so: Mach-O universal binary with 3 architectures mod_python.so (for architecture x86_64): Mach-O 64-bit bundle x86_64 mod_python.so (for architecture ppc7400): Mach-O bundle ppc mod_python.so (for architecture i386): Mach-O bundle i386

Enfin pour finir, activons le module dans Apache et voyons le résultat:

-Editez le fichier /etc/apache2/httpd.conf avec les droits administrateur et ajoutez la ligne

LoadModule python_module libexec/apache2/mod_python.so

(proprement parmi les autres LoadModule)

-Enfin pour tester le tout, ajoutez ces lignes à la toute fin du fichier:

<Location /mpinfo> SetHandler mod_python PythonInterpreter main_interpreter PythonHandler mod_python.testhandler </Location>

-Sauvegardez les modification, quittez l’éditeur de texte et relancez apache:

apachectl -k restart

Le final: Connectez vous maintenant à l’adresse http://localhost/mpinfo et vous remarquerez que votre serveur fonctionne bien avec les extensions python :)