Recherche de site Web

Comment compiler PHP7 à partir des sources sur Raspbian Jessie


Ce tutoriel explique comment compiler PHP7 à partir des sources et l'installer sur Raspbian Jessie OS. J'utilise le Pi 1 modèle B bas de gamme. La puissance de traitement du Pi 1 est insuffisante lorsqu'il s'agit de compiler un logiciel à partir des sources. Il a fallu environ 5 heures pour terminer la compilation de PHP7. Je suggère donc d'utiliser Pi 2 ou Pi3 si vous en avez un. Pi 2 a un processeur double cœur et Pi 3 a un processeur quadricœur.

Compiler PHP7 à partir des sources

Connectez-vous d’abord en SSH à votre Raspberry Pi si vous disposez d’une configuration sans tête. Téléchargez ensuite le code source PHP7 depuis le site officiel.

wget http://php.net/distributions/php-7.0.4.tar.gz

Extrayez l’archive tar.

tar xvf php-7.0.4.tar.gz

cd dans le répertoire nouvellement créé.

cd php-7.0.4/

Installez les dépendances.

sudo apt-get install libkrb5-devlibc-client2007e libc-client2007e-dev libcurl4-openssl-dev libbz2-dev libjpeg-dev libmcrypt-dev libxslt1-dev libxslt1.1 libpq-dev build-essential git make

Comme vous le savez peut-être déjà, nous devons exécuter un script configure pour configurer l'environnement de compilation. Mais avant cela, j'aimerais souligner deux erreurs que j'ai rencontrées lors de la phase de configuration et comment les résoudre.

Erreur n°1

configure: error: Cannot find imap library (libc-client.a). Please check your c-client installation.

Solution : créez un lien symbolique et réexécutez le script de configuration.

sudo mkdir /usr/c-client/
sudo ln -s /usr/lib/libc-client.a /usr/c-client/

Erreur n°2

error: Kerberos libraries not found.

Check the path given to --with-kerberos (if no path is given, searches in /usr/kerberos, /usr/local and /usr )

Solution : créez un lien symbolique et réexécutez le script de configuration.

sudo mkdir /usr/kerberos

sudo ln -s /usr/lib/arm-linux-gnueabihf/mit-krb5/* /usr/kerberos

Si vous souhaitez voir l'erreur par vous-même, vous pouvez maintenant exécuter le script de configuration ci-dessous. Si vous n'aimez pas voir les erreurs, créez les liens symboliques ci-dessus et exécutez le script de configuration ci-dessous.

Voici les arguments courants du script de configuration. Copiez le code suivant et collez-le dans le terminal Raspbian, puis appuyez sur Entrée pour démarrer la configuration.

./configure \
--prefix=/opt/php-7.0.4                      \
--with-config-file-path=/opt/php-7.0.4/etc   \
--with-zlib-dir                              \
--with-freetype-dir                          \
--enable-mbstring                            \
--with-libxml-dir=/usr                       \
--enable-soap                                \
--enable-calendar                            \
--with-curl                                  \
--with-mcrypt                                \
--with-zlib                                  \
--with-gd                                    \
--disable-rpath                              \
--enable-inline-optimization                 \
--with-bz2                                   \
--with-zlib                                  \
--enable-sockets                             \
--enable-sysvsem                             \
--enable-sysvshm                             \
--enable-pcntl                               \
--enable-mbregex                             \
--enable-exif                                \
--enable-bcmath                              \
--with-mhash                                 \
--enable-zip                                 \
--with-pcre-regex                            \
--with-pdo-mysql                             \
--with-mysqli                                \
--with-mysql-sock=/var/run/mysqld/mysqld.sock \
--with-jpeg-dir=/usr                         \
--with-png-dir=/usr                          \
--enable-gd-native-ttf                       \
--with-openssl                               \
--with-fpm-user=www-data                     \
--with-fpm-group=www-data                    \
--with-libdir=/usr/lib/arm-linux-gnueabihf          \
--enable-ftp                                 \
--with-imap                                  \
--with-imap-ssl                              \
--with-kerberos                              \
--with-gettext                               \
--with-xmlrpc                                \
--with-xsl                                   \
--enable-opcache                             \
--enable-fpm

Quand c’est fait, compilons PHP7 avec la commande make. utilisez l'option -j4 si votre Raspberry Pi dispose d'un processeur quadcore.

make   or     make -j4

Sur mon Raspberry Pi monocœur bas de gamme, ce processus de compilation a pris environ 5 heures. Un Pi 3 avec processeur quad-core prend beaucoup moins de temps.

Une fois la compilation terminée, installez PHP7.0.4 avec la commande suivante :

sudo make install

Une fois terminé, il vous indique où les choses sont installées. C'est une information très utile.

Comme vous pouvez le voir, le binaire PHP-FPM se trouve dans /opt/php-7.0.4/sbin/ et mon répertoire de configuration PHP-FPM est /opt/php-7.0.4. /etc/. Donc si je démarre php-fpm avec cette commande :

/opt/php-7.0.4/sbin/php-fpm

Un message d'erreur s'affiche m'indiquant que php-fpm.conf est introuvable.

Nous devons renommer deux fichiers de configuration.

sudo mv /opt/php-7.0.4/etc/php-fpm.conf.default /opt/php-7.0.4/etc/php-fpm.conf

sudo mv /opt/php-7.0.4/etc/php-fpm.d/www.conf.default /opt/php-7.0.4/etc/php-fpm.d/www.conf

Et copiez le fichier php.ini-production dans le dossier de configuration php-fpm.

sudo cp /home/pi/php-7.0.4/php.ini-production /opt/php-7.0.4/etc/

Maintenant, redémarrez php-fpm.

sudo /opt/php-7.0.4/sbin/php-fpm

Intégrer avec Nginx

Pour voir comment compiler Nginx à partir des sources sur Raspbian Jessie, consultez l'article suivant. Bien sûr, vous pouvez également installer nginx sur Raspbian Jessie à partir du référentiel de logiciels avec sudo apt-get install nginx.

Comment compiler Nginx à partir des sources et l'installer sur Raspbian Jessie

Dans votre bloc serveur Nginx, ajoutez ces lignes.

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
            root           /usr/share/nginx/html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

Le répertoire racine du document sur mon Raspbian Jessie est /usr/share/nginx/html. Vous devrez peut-être modifier le répertoire racine du document. Enregistrez et fermez le fichier. Rechargez Nginx.

sudo sysemctl reload nginx

Créez ensuite un fichier test.php dans le répertoire racine de votre document.

sudo nano /usr/share/nginx/html/test.php

Collez le code PHP suivant dans le fichier.

<?php

phpinfo();

?>

Enregistrez et fermez le fichier. Maintenant, dans la barre d'adresse de votre navigateur, tapez

ip-of-raspberrypi/test.php

Remplacez ip-of-raspberrypi par l'adresse IP réelle. Vous devriez voir toutes vos informations d’installation PHP. Si vous pouvez voir cette page, cela signifie que php-fpm fonctionne correctement avec Nginx.

Réglage fin

Activer le journal des erreurs

Modifier le fichier php-fpm.conf

sudo nano /opt/php-7.0.4/etc/php-fpm.conf

Recherchez la ligne suivante dans ce fichier.

;error_log = log/php-fpm.log

et changez-le comme suit :

error_log = /var/log/php-fpm.log

Nous pouvons donc maintenant vérifier le journal php-fpm dans le fichier /var/log/php-fpm.log.

Intégrer avec Systemd

Créez un fichier de service systemd pour php-fpm.

sudo nano /etc/systemd/system/php-fpm.service

Copiez et collez le texte suivant dans le fichier.

[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target

[Service]
Type=simple
PIDFile=/var/run/php-fpm.pid
ExecStart=/opt/php-7.0.4/sbin/php-fpm --nodaemonize --fpm-config /opt/php-7.0.4/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

Enregistrez et fermez le fichier. Maintenant, tuez le processus php-fpm en cours d'exécution et redémarrez-le avec systemctl.

sudo pkill php-fpm

sudo systemctl start php-fpm

Vérifier l'état

sudo systemctl status php-fpm

Activez le démarrage automatique de php-fpm lorsque le Raspberry Pi est allumé.

sudo systemctl enable php-fpm

Modifier le fichier www.conf

sudo nano /opt/php-7.0.4/etc/php-fpm.d/www.conf

Trouvez les deux lignes suivantes

;listen.owner = www-data
;listen.group = www-data
;listen.mode = 0660

Décommentez-les. Trouvez ensuite cette ligne.

listen = 127.0.0.1:9000

Changez-le en

listen = /var/run/php7-fpm.sock

Enregistrez le fichier. Modifiez maintenant votre fichier de configuration Nginx et changez la valeur de fastcgi_pass en /var/run/php7-fpm.sock

location ~ \.php$ {
            root           /usr/share/nginx/html;
            fastcgi_pass   unix:/var/run/php7-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

Enregistrez et fermez le fichier. Redémarrez ensuite Nginx et php-fpm.

sudo systemctl restart nginx

sudo systemclt restart php-fpm

Bravo! Vous avez compilé avec succès PHP7 et l'avez installé sur Raspbian Jessie. Nous avons également créé un fichier php-fpm.service et pouvons facilement gérer php-fpm avec Systemd.

Articles connexes