Archives mensuelles : mai 2011

Configurer Apache et PHP-FPM sous Gentoo

Après avoir utilisé suEXEC et PHP en fast-CGI; je suis passé a PHP-FPM, maintenant supporté par les dernières versions de PHP. Il s’agit d’un gestionnaire de processus PHP similaire au fast-CGI, mais offrant plus de possibilités de configurations que suEXEC/fastCGI.

Avantages

Lancement de processus PHP avec des utilisateurs différents. Cette fonction est similaire à celle de suEXEC, mais d’une configuration beaucoup plus aisée (évitant notamment les problèmes de droits sur les wrappers CGI).
Définition de plusieurs pools de processus, avec des paramètres différents.
Le processus maître étant une instance de PHP lui-même, les caches d’op-code peuvent être partagés par les différents processus fils.

Installation de PHP-FPM

Il faut tout d’abord ajouter le use flag ‘fpm’ à PHP avant de le recompiler. Il est aussi nécessaire de réinsaller les modules PHP éventuellement utilisés :

# Update /etc/portage/packages.use to add fpm use flag
emerge php
emerge pecl-geoip xcache pecl-memcache suhosin -av

Afin qu’Apache puisse communiquer avec PHP-FPM, il lui faut un module fast CGI. Si mod_fastcgi ou mod_fcgid peuvent faire l’affaire, ils disposent de plus de fonctionnalités que nécessaire et sont donc plus compliqués à configurer. J’ai donc choisi mod_fastcgi_handler :

emerge www-apache/mod_fastcgi_handler -av

Il faut alors modifier le fichier ‘/etc/conf.d/apache2’ pour lui activer ce nouveau module en l’ajoutant à la liste des options APACHE2_OPTS : ‘-D FASTCGI_HANDLER’.

Configuration PHP-FPM

La configuration de la gestion des pools de processus de PHP-FPM est centralisée dans le fichier ‘/etc/php/fpm-php-5.3/php-fpm.conf’. On peut définir plusieurs pools, exécutant PHP avec des utilisateurs différents :

[poirsouille]
listen=/var/run/php-fpm/poirsouille.socket
user=poirsouille
group=poirsouille
pm = dynamic
pm.max_children = 50
pm.min_spare_servers = 5
pm.max_spare_servers = 35

Le mode ‘dynamic’ permet à PHP-FPM d’ajuster automatiquement le nombre d’instances du pool à la demande.
On choisira un socket différent pour chaque pool.

Configuration Apache

Il reste à indiquer à Apache quel script fast CGI utiliser pour traiter les fichiers PHP. J’ai pu remplacer ma configuration suEXEC/mod_fcgid par celle-ci :


        Use VH tech

        # Ancienne configuration
        #SuexecUserGroup poirsouille poirsouille
        #FCGIWrapper /home/poirsouille/public_html/cgi-bin/php-fcgi .php
    
        # PHP-FPM
        AddHandler fcgi:/var/run/php-fpm/poirsouille.socket .php

On peut ainsi utiliser des pools différents selon les répertoires/virtualhosts/etc.

Démarrage

PHP-FPM est un ervice à part, qu’il faut donc ajouter au démarrage du serveur :

rc-update add php-fpm default

On peut ensuite (re)lancer PHP-FPM et Apache :

/etc/init.d/php-fpm restart
/etc/init.d/apache2 restart

Après quelques visites sur les différents sites, on constate l’apparition des processus dans les différents pools :

web ~ # ps aux |grep php-fpm
1002      9224  0.0  2.5 254380 52212 ?        S    00:16   0:02 php-fpm: pool poirsouille
1002      9275  0.0  2.1 246340 43540 ?        S    00:16   0:02 php-fpm: pool poirsouille
1002      9276  0.0  2.2 245420 45980 ?        S    00:16   0:01 php-fpm: pool poirsouille
1002      9331  0.1  2.2 244392 45816 ?        S    00:16   0:04 php-fpm: pool poirsouille
1002      9332  0.0  4.8 286808 100444 ?       S    00:16   0:02 php-fpm: pool poirsouille
root     19808  0.0  0.2 235232  5168 ?        Ss   May27   0:02 php-fpm: master process (/etc/php/fpm-php5.3/php-fpm.conf)
apache   19809  0.0  0.5 238400 11112 ?        S    May27   0:00 php-fpm: pool apache
apache   19810  0.0  0.7 240260 16372 ?        S    May27   0:00 php-fpm: pool apache
apache   19811  0.0  0.5 240184 12172 ?        S    May27   0:00 php-fpm: pool apache
apache   19812  0.0  1.2 248308 26444 ?        S    May27   0:00 php-fpm: pool apache
apache   19813  0.0  0.5 239864 12068 ?        S    May27   0:00 php-fpm: pool apache
apache   19814  0.0  0.7 241912 14476 ?        S    May27   0:00 php-fpm: pool apache
apache   19815  0.0  0.8 241416 16864 ?        S    May27   0:00 php-fpm: pool apache
tibou    19819  0.0  1.2 243724 26372 ?        S    May27   0:00 php-fpm: pool tibou
tibou    19820  0.0  2.7 268464 56912 ?        S    May27   0:01 php-fpm: pool tibou

Nettoyage

Une fois le fonctionnement validé, il est possible de désinstaller les packages devenus inutiles :

emerge --depclean mod_fcgid
#Remove suexec flag and recompile apache.

Références

http://mattmcadoo.com/node/42
http://blog.myprod.net/2010/08/14/apache2-suexec-fastcgi-php-5-3-3-fpm-cache-opcode-apc/

Installation de mise à jour ESXi 4.1

La version gratuite d’ESXi ne propose malheureusement pas de mise à jour automatique (ce qui est assez regrettable lorsque toutes les distributions linux le proposent…). Il est donc nécessaire de les récupérer et installer à la main.
L’offre dedibox sur laquelle je viens de passer propose ESXi 4.1 U1 en installation automatique. Cependant des mises à jours sont déjà disponibles.

Récupération des mises à jour

La liste des patchs disponibles peut être consultée (par produit) sur le site de VMWare : http://www.vmware.com/patch/download/

Une fois l’URL récupérée, il faut utiliser la console de maintenance pour l’installer. Vu la bande passante disponible sur le serveur, il est plus rapide de la télécharger directement depuis celui-ci plutôt que de l’uploader via le vSphere client.

cd /vmfs/volumes/datastore1/
wget http://hostupdate.vmware.com/software/VUM/OFFLINE/release-276-20110420-682352/ESXi410-201104001.zip

Une fois le téléchargement terminé, il est possible de contrôler le contenu du patch :

/vmfs/volumes/4dd56b07-e972f1d9-f727-bc305bd712f3 # esxupdate info --bundle=ESXi410-201104001.zip
   ID           - ESXi410-201104401-SG
   Release Date - 2011-04-28T08:00:00
   Vendor       - VMware, Inc.
   Summary      - Updates Firmware
   Severity     - security
   Urgency      - critical
   Category     - securityfix
   Install Date -
   Description  - For more information, see http://kb.vmware.com/kb/1035108.
   KB URL       - http://kb.vmware.com/kb/1035108
   Contact      - http://www.vmware.com/support/contacts/
   Compliant    - False
   RebootRequired          - True
   HostdRestart            - False
   RequiresMaintenanceMode - True
   List of constituent VIBs:
      deb_vmware-esx-firmware_4.1.0-1.6.381591

   ID           - ESXi410-201104402-BG
   Release Date - 2011-04-28T08:00:00
   Vendor       - VMware, Inc.
   Summary      - Updates VMware Tools
   Severity     - critical
   Urgency      - important
   Category     - bugfix
   Install Date -
   Description  - For more information, see http://kb.vmware.com/kb/1035109.
   KB URL       - http://kb.vmware.com/kb/1035109
   Contact      - http://www.vmware.com/support/contacts/
   Compliant    - False
   RebootRequired          - False
   HostdRestart            - False
   RequiresMaintenanceMode - False
   List of constituent VIBs:
      deb_vmware-esx-tools-light_4.1.0-1.6.381591

Répertoires manquants

J’ai rencontré des erreurs lors de l’exécution de certaines commandes. Il semblerait que certains répertoires ne soient pas créés correctement :

/vmfs/volumes/4dd56b07-e972f1d9-f727-bc305bd712f3 # esxupdate info -m ESXi410-201104001.zip
Encountered error FileIOError:
The error data is:
   Filename    - /var/tmp/cache/metadata1592750352
   Message     - Cannot create dir /var/tmp/cache/metadata1592750352: [Errno 17]
                 File exists: '/var/tmp'
   Errno       - 10
   Description - Unable to create, write or read a file as expected.

Certains liens symboliques sont invalides. Ceci se corrige simplement :

mkdir -p  /tmp/scratch/var/tmp/cache

Mise à jour

Pour installer le patch, il est nécessaire de passer l’hôte en mode maintenance :

/vmfs/volumes/4dd2fb9a-6501f76c-4f41-000c29e4a056 # esxupdate update --bundle=ESXi410-201104001.zip
Encountered error MaintenanceModeError:
The error data is:
   Message     - The following VIBs require this host to be in maintenance mode:
                 deb_vmware-esx-firmware_4.1.0-1.6.381591. Please put the host
                 in maintenance mode to proceed.
   Errno       - 18
   Description - Maintenance mode is not enabled or could not be determined.

Ceci nécessite l’arrêt ou la suspension des machines virtuelles. Lors de mon premier essai, je les ai suspendues. Cependant, j’ai eu des problèmes de connectivité réseau au réveil. Je recommanderais donc des les stopper.
Le passage en mode maintenance s’effectue aisément avec le client vSphere, en choisissant l’option « entrer en mode maintenance » dans le menu contextuel de l’hôte.

On peut alors lancer la mise à jour dans la console de maintenance :

/vmfs/volumes/4dd2fb9a-6501f76c-4f41-000c29e4a056 # esxupdate update --bundle=ESXi410-201104001.zip
Unpacking deb_vmware-esx-tools-light_4.1.0-1.6.381591 ######################################################################### [100%]

Unpacking deb_vmware-esx-firmware_4.1.0-1.6.381591    ######################################################################### [100%]

Removing packages :vmware-esx-tools-light             ######################################################################### [100%]

Installing packages :deb_vmware-esx-firmware_4.1.0-.. ######################################################################### [100%]

Installing packages :deb_vmware-esx-tools-light_4.1.. ######################################################################### [100%]

The update completed successfully, but the system needs to be rebooted for the
changes to be effective.

Il ne reste alors plus qu’à redémarrer l’hôte, désactiver le mode maintenance et relancer les machines virtuelles.

Abonnement à la mailing list

Afin d’être prévenu de la sortie de nouvelles mises à jour, il est possible de s’inscrire à la mailing list de VMWare :
https://www.vmware.com/mysupport/subscription.portal

Références

http://blog.stephane-grillot.fr/?p=5