Ce tutoriel va vous montrer comment installer le vieux PHP 5.3 sur le système d’exploitation Debian 11, pour des fins de compatibilité logicielle.
Après avoir sorti le tutoriel pour installer PHP 5.4 sous Debian 11, j’ai décidé de pousser le concept plus loin lorsque j’étais confronté à une situation où je dois migrer un très vieux site OsCommerce sur un système d’exploitation récent. Fort heureusement, j’ai pu reprendre une grande partie des résolutions de problème faites sur ce précédent article.
1. Installer OpenSSL 1.0.2u
Comme PHP 5.4, PHP 5.3 requiert une vieille version d’OpenSSL que nous allons compiler et installer de côté :
mkdir -p /usr/local/openssl-1.0.2u
wget -O /usr/local/src/openssl-1.0.2u.tar.gz https://www.openssl.org/source/openssl-1.0.2u.tar.gz
cd /usr/local/src/
tar -xf openssl-1.0.2u.tar.gz
rm -f openssl-1.0.2u.tar.gz
cd openssl-1.0.2u
./config shared --prefix=/usr/local/openssl-1.0.2u
make -j $(nproc)
make install
ln -s /usr/local/openssl-1.0.2u/lib /usr/local/openssl-1.0.2u/lib/x86_64-linux-gnu
wget -O /usr/local/openssl-1.0.2u/ssl/cert.pem "http://curl.haxx.se/ca/cacert.pem"
ln -s /usr/local/openssl-1.0.2u/lib/libcrypto.so.1.0.0 /usr/lib/x86_64-linux-gnu/
ln -s /usr/local/openssl-1.0.2u/lib/libssl.so.1.0.0 /usr/lib/x86_64-linux-gnu/
2. Installer cURL 7.82.0
Même chose pour cURL avec qui on a besoin d’une vieille version :
mkdir -p /usr/local/curl-7.82.0
wget -O /usr/local/src/curl-7.82.0.tar.gz https://curl.se/download/curl-7.82.0.tar.gz
cd /usr/local/src/
tar -xf curl-7.82.0.tar.gz
rm -f curl-7.82.0.tar.gz
cd curl-7.82.0
./configure --with-openssl=/usr/local/openssl-1.0.2u --prefix=/usr/local/curl-7.82.0
make -j $(nproc)
make install
Remarquez l’utilisation d’OpenSSL 1.0.2u lors de la compilation de cURL.
3. Compiler PHP 5.3 sur Debian 11
Déjà, il faut disposer des bonnes dépendances pour compiler PHP 5.3 :
apt-get install -y libfcgi-dev libfcgi0ldbl libmcrypt-dev libssl-dev libc-client2007e libc-client2007e-dev libpq-dev libxslt-dev libltdl-dev libmariadb-dev-compat libmariadb-dev
J’ignore si les paquetages libmariadb-dev-compat et libmariadb-dev peuvent être omis ou non, vu que, plus tard dans mes tests, j’ai décidé d’utiliser mysqlnd, le client natif de PHP pour MySQL. Techniquement, en utilisant mysqlnd, ces librairies sont inutiles. A tester.
Maintenant, il s’agit de télécharger et décompresser la dernière version de PHP 5.3 :
wget -O /usr/local/src/php-5.3.29.tar.gz https://www.php.net/distributions/php-5.3.29.tar.gz
cd /usr/local/src/
tar -xf php-5.3.29.tar.gz
rm -f php-5.3.29.tar.gz
cd php-5.3.29
A présent, il faut configurer la compilation :
./configure --prefix=/usr/local/php-5.3 --with-pdo-pgsql --with-zlib-dir --with-freetype-dir --enable-mbstring --with-libxml-dir=/usr --enable-soap --enable-calendar --with-curl=/usr/local/curl-7.82.0 --with-mcrypt --with-zlib --with-pgsql --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-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-jpeg-dir=/usr --with-png-dir=/usr --enable-gd-native-ttf --with-openssl=/usr/local/openssl-1.0.2u --with-fpm-user=www-data --with-fpm-group=www-data --with-libdir=/lib/x86_64-linux-gnu --enable-ftp --with-kerberos --with-gettext --with-xmlrpc --with-xsl --enable-fpm
–prefix me permet de définir le dossier sur lequel je vais installer PHP 5.3, –with-curl pour indiquer le chemin du cURL que je souhaite utiliser (celui qu’on a précédemment compilé), –with-openssl pour indiquer le chemin du OpenSSL que je souhaite utiliser (également celui précédemment compilé).
J’ai essayé de compiler avec les librairies MySQL fournis par MariaDB 10.5 sur le dépôt officiel de Debian mais je n’ai pas réussi, à cause de l’absence de certains fichiers headers, qui ont été présent auparavant sur les vieilles version de MySQL. Je ne me suis pas cassé la tête, j’ai activé l’utilisation du mysqlnd (MySQL Native Driver) de PHP en utilisant les options –with-mysql=mysqlnd –with-mysqli=mysqlnd –with-pdo-mysql=mysqlnd.
Enfin, on compile et installe :
make -j $(nproc)
make install
4. Configurer PHP 5.3
Déjà, initialisons les fichiers de configuration par les fichiers de configuration par défaut proposés :
cp /usr/local/src/php-5.3.29/php.ini-production /usr/local/php-5.3/lib/php.ini
cp /usr/local/php-5.3/etc/php-fpm.conf.default /usr/local/php-5.3/etc/php-fpm.conf
Ensuite, préparer le dossier qui va accueillir les pool PHP-FPM :
mkdir -p /usr/local/php-5.3/etc/php-fpm.d
Configurer le fichier PID du PHP-FPM :
sed -i "s|;pid\s=\srun/php-fpm.pid|pid = run/php-fpm.pid|g" /usr/local/php-5.3/etc/php-fpm.conf
Configurer le socket d’écoute et son utilisateur/groupe propriétaire :
sed -i "s|;listen\s=.|listen = /run/php/php5.4-fpm.sock|g" /usr/local/php-5.3/etc/php-fpm.conf
sed -i "s|;listen.owner\s=.|listen.owner = www-data|g" /usr/local/php-5.3/etc/php-fpm.conf
sed -i "s|;listen.group\s=.|listen.group = www-data|g" /usr/local/php-5.3/etc/php-fpm.conf
Enfin, il faut inclure les fichiers de configuration dans le dossier que nous avons créé prédécemment :
sed -i "s|;include\s=.|include=/usr/local/php-5.3/etc/php-fpm.d/.conf|g" /usr/local/php-5.3/etc/php-fpm.conf
Maintenant, il faut créer le service systemd correspondant à PHP-FPM :
cat < /lib/systemd/system/php5.3-fpm.service
[Unit]
Description=The PHP 5.3 FastCGI Process Manager
After=network.target
[Service]
Type=simple
PIDFile=/usr/local/php-5.3/var/run/php-fpm.pid
ExecStartPre=/bin/mkdir -p /run/php
ExecStart=/usr/local/php-5.3/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php-5.3/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
PermissionsStartOnly=true
[Install]
WantedBy=multi-user.target
EOF
Maintenant, il faut l’activer au démarrage et le lancer :
systemctl daemon-reload
systemctl enable --now php5.3-fpm.service
systemctl restart php5.3-fpm.service
Par pure caprice, je mets un lien symbolique dans /usr/bin afin de faciliter l’utilisation de PHP 5.3 en ligne de commande :
ln -s /usr/local/php-5.3/bin/php /usr/bin/php5.3
ln -s /usr/local/php-5.3/bin/php-cgi /usr/bin/php-cgi5.3
5. Ajouter PHP 5.3 sur ISPConfig
Si vous utilisez ISPConfig comme panneau de contrôle, alors vous pouvez ajouter cette installation dans ISPConfig grâce à la requête SQL suivante :
mysql --defaults-file=/etc/mysql/debian.cnf dbispconfig -e "INSERT INTO server_php (sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id, client_id, name, php_fastcgi_binary, php_fastcgi_ini_dir, php_fpm_init_script, php_fpm_ini_dir, php_fpm_pool_dir, active) VALUES (1, 1, 'ruid', 'ruid', '', 1, 0, 'PHP 5.3', 'php-cgi5.3', '/usr/local/php-5.3/lib/php.ini', 'php5.3-fpm', '/usr/local/php-5.3/lib/php.ini', '/usr/local/php-5.3/etc/php-fpm.d', 'y')"
Conclusion
Faire fonctionner PHP 5.3 sur un système d’exploitation aussi récent que Debian 11 n’est finalement pas si difficile qu’on pourrait le croire. Il faut juste mettre à disposition les bonnes versions des dépendances au compilateur. Mais planifiez quand même votre migration vers un PHP plus récent, avant que quelqu’un ne trouve une brèche sur votre site.
make -j $(nproc)
Error:
making all in crypto…
make[1] : on entre dans le répertoire « /usr/local/src/openssl-1.0.2u/crypto »
make[1]: *** Aucune règle pour fabriquer la cible « ../include/openssl/bio.h », nécessaire pour « cryptlib.o ». Arrêt.
make[1] : on quitte le répertoire « /usr/local/src/openssl-1.0.2u/crypto »
make: *** [Makefile:287: build_crypto] Error 1
A mon sens, s’il y a des choses manquantes durant la compilation, c’est que la configuration (effectué avec la commande juste avant) n’a pas pu se terminer correctement. Que retourne la précédente commande ?
Thanks a lot. This solution really works. And it helped me a lot!