Fedora-Fr - Communauté francophone Fedora - Linux

Planet de Fedora-Fr : la communauté francophone autour de la distribution Linux Fedora

A propos

Cette page est actualisée toutes les heures.

Cette page est une sélection de blogs autour de Fedora. Fedora-Fr.org décline toute responsabilité au sujet des propos tenus par les auteurs des blogs de ce planet. Leurs propos sont leur entière responsabilité.

Le contenu de ce planet appartient à leurs auteurs respectifs. Merci de consulter leur blogs pour obtenir les licences respectives.

Mot-clefs : HowTo

Support des images HEIC / HEIF

Remi Collet

Le format d'image HEIF (High Efficiency Image File Format) est de plus utilisé, en particulier depuis iOS 11, il est donc intéressant de pouvoir traiter ces images.

1. Bibliothèque libheif

Cette bibliothèque fournit un encoder et un decodeur du format d'image au format ISO/IEC 23008-12:2017 HEIF.

Site : https://github.com/strukturag/libheif

Elle est disponible depuis le dépôt RPM Fusion qui fournit des paquets de qualité, suivant les même règles que Fedora, pour les logiciels incompatibles avec les dépôts officiels (algorithme sous brevet ou non libre).

2. ImageMagick

Site : https://imagemagick.org/

Cet outil support ce format, il est disponible dans le paquet optionnel ImageMagick6-heic (ou ImageMagick7-heic)

Exemple, utilisant mon dépôt et RPM Fusion :

$ sudo dnf install ImageMagick6 ImageMagick6-heic
$ convert Example1.heic Example1.jpg
$ eog Example1.jpg

3. libvips

Site : https://libvips.github.io/libvips/

Cet outil supporte ce format depuis sa version 8.8.0 publiée hier.

Le paquet vips-full a ce support activé.

Exemple :

sudo dnf install vips-full-tools
vips pngsave Example2.heic Example2.png

4. PHP avec l'extension imagick

Site : https://pecl.php.net/package/imagick

En utilisant les paquets php-pecl-imagick et ImageMagick6-heic

<?php
$imagick = new Imagick();
$imagick->readImage('Example3.heic');
$imagick->writeImage('Example3.jpg');

5. PHP avec l'extension vips

En utilisant les paquets php-pecl-vips et vips-full

<?php
$x = vips_image_new_from_file('Example4.heic');
vips_image_write_to_file($x['out'], 'Example4.jpg');

6. Conclusion

Ce format de fichier de plus en plus répandu est donc désormais parfaitement supporté, et simplement pour les utilisateurs de mon dépôt.

PHP 5.6 est mort

Remi Collet

Après PHP 7.0, et comme annoncé, PHP version 5.6.40 était la dernière version officielle de PHP 5.6

Ce qui signifie qu'après la publication des versions 7.2.15, et 7.3.2, quelques failles de sécurité publiques ne sont pas, et ne seront pas corrigées par le projet PHP.

Pour maintenir une installation sécurisée, la mise à jour vers une version maintenue est fortement conseillée :

  • PHP 7.2 est en mode maintenance active, et sera maitenu jusqu'en décembre 2019 (2020 pour la sécurité).
  • PHP 7.3 est en mode maintenance active, et sera maitenu jusqu'en décembre 2020 (2021 pour la sécurité).

Voir :

Cependant, compte tenu du nombre important de téléchargements par les utilisateurs de mon dépôt (>30%)  la version présente dans le dépôt remi pour Enterprise Linux (RHEL, CentOS...) et Fedora (Software Collections) est conservée et intègrera les derniers correctifs de sécurité.

Attention : il s'agit d'un action réalisée avec la meilleure volonté, en fonction de mon temps disponible, sans aucune garantie, afin de donner plus de temps aux utilisateurs pour migrer. Cela ne peut être que temporaire et la migration doit rester la priorité.

PHP avec le serveur d'applications NGINX unit

Remi Collet

Site officiel : NGINX Unit

Le dépôt officiel, pour RHEL et CentOS, fournit le module PHP pour la version officielle de PHP (5.3 / 5.4).

Mon dépôt fournit les différentes versions du module, en paquet de base (unit-php) et en Software Collection (php##-unit-php).

Voici un petit tutoriel de test, permettant de créer 1 applications PHP par version disponible.

 

1. Installation du dépôt officiel

Créer le fichier de configuration du dépôt (/etc/yum.repos.d/unit.repo):

[unit]
name=unit repo
baseurl=https://packages.nginx.org/unit/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

Actuellement, les paquets sont uniquement disponible pour CentOS / RHEL 6 et 7.

2. Installation du dépôt remi

# yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

3. Installation du serveur et des modules

Installation du seveur NGINX unit et des différents modules PHP. Le paquet unit-php fournissant le module pour le php par défaut du système.

# yum install unit unit-php php56-unit-php php71-unit-php php72-unit-php php73-unit-php

4. Configuration de test

4.1 Préparation de la configuration

Cette configuration de test crée un listener pour chaque version de PHP, écoutant sur un port différent (8300, 8356, ...) et une application servant le dossier habituel des applications web.

Télécharger le fichier unit.config :

{
        "applications": {
                "exphp": {
                        "type": "php",
                        "user": "nobody",
                        "processes": 2,
                        "root": "/var/www/html",
                        "index": "index.php"
                },
                "exphp56": {
                        "type": "php 5.6",
                        "user": "nobody",
                        "processes": 2,
                        "root": "/var/www/html",
                        "index": "index.php"
                },
                "exphp71": {
                        "type": "php 7.1",
                        "user": "nobody",
                        "processes": 2,
                        "root": "/var/www/html",
                        "index": "index.php"
                },
                "exphp72": {
                        "type": "php 7.2",
                        "user": "nobody",
                        "processes": 2,
                        "root": "/var/www/html",
                        "index": "index.php"
                },
                "exphp73": {
                        "type": "php 7.3",
                        "user": "nobody",
                        "processes": 2,
                        "root": "/var/www/html",
                        "index": "index.php"
                }
        },
        "listeners": {
                "*:8300": {
                        "application": "exphp"
                },
                "*:8356": {
                        "application": "exphp56"
                },
                "*:8371": {
                        "application": "exphp71"
                },
                "*:8372": {
                        "application": "exphp72"
                },
                "*:8373": {
                        "application": "exphp73"
                }
        }
}

4.2 Démarrage du service:

# systemctl start unit

4.3 Mise en place de la configuration

Le configuration se fait à travers d'une API REST :

# curl -X PUT --data-binary @unit.config --unix-socket /var/run/control.unit.sock :/config
{
    "success": "Reconfiguration done."
}

Et pour vérification de la configuration en place :

# curl --unix-socket /var/run/control.unit.sock :/

5 Utilisation

Il désormais possible d'accéder à l'application sur les nouveau ports :

  • http://localhost:8300/ pour le PHP par défaut
  • http://localhost:8356/ pour le PHP version 5.6
  • http://localhost:8372/ pour le PHP version 7.2
  • etc

La page phpinfo affichera alors les informations, à noter: dans ce cas, le Serveur API est unit.

6. Conclusion

Comme il s'agit d'un serveur applicatif, on le placera derrière un frontal web (Apache HHTP server ou NGINX).

Le projet semble intéressant, mais est encore assez jeune (la première version 1.2 disponible sur github date de Juin 2018); on verra l'accueil fait par les utilisateurs.

PHP 7.0 est mort

Remi Collet

Après PHP 5.5, et comme annoncé, PHP version 7.0.33 était la dernière version officielle de PHP 7.0

Ce qui signifie qu'après la publication des versions 7.1.26, 7.2.14 et 7.3.1, quelques failles de sécurité publiques ne sont pas, et ne seront pas corrigées par le projet PHP.

Pour maintenir une installation sécurisée, la mise à jour vers une version maintenue est fortement conseillée :

  • PHP 7.2 est en mode maintenance active, et sera maitenu jusqu'en décembre 2019 (2020).
  • PHP 7.3 est en mode maintenance active, et sera maitenu jusqu'en décembre 2020 (2021).

Voir :

Cependant, compte tenu du nombre important de téléchargements par les utilisateurs de mon dépôt (~10%)  la version présente dans le dépôt remi pour Enterprise Linux (RHEL, CentOS...) et Fedora (Software Collections) a été conservée et intègre les derniers correctifs de sécurité.

Attention : il s'agit d'un action réalisée avec la meilleure volonté, en fonction de mon temps disponible, sans aucune garantie, afin de donner plus de temps aux utilisateurs pour migrer. Cela ne peut être que temporaire et la migration doit rester la priorité.

La version 7.0.33-2 intègre les correctifs pour les bugs rétro-portés depuis la (prochaine) 7.1.26.

Paquets de base (php)

Software Collections (php55)

Installer PHP 7.3 sur CentOS, RHEL ou Fedora

Remi Collet

Voici un guide rapide pour mettre à jour le PHP fournit par Fedora, RHEL ou CentOS par la dernière version 7.3.

 

Configuration des dépôts:

Sur Fedora, les dépôts standards sont suffisant, sur Enterprise Linux (RHEL, CentOS) il est aussi nécessaire de configurer le dépôt Extra Packages for Enterprise Linux (EPEL), et sur RHEL d'activer le canal optional.

Fedora 29

wget http://rpms.remirepo.net/fedora/remi-release-29.rpm
dnf install remi-release-29.rpm

Fedora 28

wget http://rpms.remirepo.net/fedora/remi-release-28.rpm
dnf install remi-release-28.rpm

RHEL version 8.0 Beta

wget http://rpms.remirepo.net/enterprise/remi-release-8.rpm
rpm -Uvh remi-release-8.rpm

RHEL version 7.6

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm
subscription-manager repos --enable=rhel-7-server-optional-rpms

RHEL version 6.10

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
wget http://rpms.remirepo.net/enterprise/remi-release-6.rpm
rpm -Uvh remi-release-6.rpm epel-release-latest-6.noarch.rpm
rhn-channel --add --channel=rhel-$(uname -i)-server-optional-6

CentOS version 7.6

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm

CentOS version 6.10

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
wget http://rpms.remirepo.net/enterprise/remi-release-6.rpm
rpm -Uvh remi-release-6.rpm epel-release-latest-6.noarch.rpm

 

Utilisation du module php

Pour Fedora 29+ et RHEL-8 beta, il suffit d'utiliser le flux remi-7.3 du module php

dnf module install php:remi-7.3

 

Activation du dépôt remi-php73

Les paquets sont dans les dépôts remi-safe (activé par défaut) et remi-php73 qui n'est pas activé par défaut (choix de l'administrateur en fonction de la version de PHP souhaitée).

RHEL et CentOS

yum install yum-utils
yum-config-manager --enable remi-php73

Fedora

dnf install dnf-plugins-core
dnf config-manager --set-enabled remi-php73

 

Mise à jour de PHP

Par choix, les paquets ont le même nom que les paquets fournit par défaut avec le système, une simple mise à jour est donc suffisante :

yum update

Et c'est tout :)

$ php -v
PHP 7.3.0 (cli) (built: Dec  4 2018 16:12:20) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.0-dev, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.0, Copyright (c) 1999-2018, by Zend Technologies

 

Problèmes connus

La mise à jour peut échouer (c'est voulu) lorsque certaines extensions présentes ne sont pas encore compatibles avec PHP 7..3.

Voir la liste des compatibilité : PECL extensions RPM status

Si elles ne sont pas indispensables, vous pouvez les désinstaller avant la mise à  jour, sinon, il faudra patienter.

Attention : quelques extensions sont encore en phase de développement (xdebug...), mais il m'a semblé utile de les fournir afin de permettre la mise à jour au plus grand nombre, et aussi permettre leur test et des retours vers les auteurs.

 

Plus d'informations

Si vous souhaitez une installation en parallèle de la version par défaut de PHP, cela est possible en utilisant les paquets préfixés php73 Voir le billet PHP 7.3 en Software Collection.

Vous pouvez aussi utiliser le nouvel assistant de configuration.

Les paquets présents dans le dépôt ont été utilisés comme source pour Fedora 30 (la proposition de changement, a déjà été acceptée et est testable).

En fournissant une pile complète, environ 130 extensions disponibles, 5 versions de PHP, paquets de base et SCL, pour Fedora et Enterprise Linux, et avec 300 000 téléchargements par jour, le dépôt remi est devenu en 13 ans une référence pour les utilisateurs de PHP sur les distributions RPM, maintenu par un contributeur actif aux différents projets (Fedora, PHP, PECL...).

Et aussi :

Dépôt modulaire Remi

Remi Collet

Fedora 29, et bientôt RHEL / CentOS 8, peuvent utiliser les "modules", qui fonctionnent comme des dépôts supplémentaires, fournissant des versions alternatives des logiciels.

Lire : Introducing Application Streams in RHEL 8 (en anglais)

Mon dépôt supporte désormais ce fonctionnement (ainsi que l'ancien).

 

Après l'installation du paquet d'auto-configuration remi-release, le dépôt est automatique connu, mais aucun module n'est activé.

# dnf repolist
repo id                             repo name                                                           status
fedora                              Fedora 29 - x86_64                                                  58110
fedora-modular                      Fedora Modular 29 - x86_64                                              8
remi-modular                        Remi's Modular repository - Fedora 29 - x86_64                        268
updates                             Fedora 29 - x86_64 - Updates                                        12523
updates-modular                     Fedora Modular 29 - x86_64 - Updates                                    9

 

Vous pouvez lister les modules disponibles

# dnf module list
Remi's Modular repository - Fedora 29 - x86_64
Name             Stream         Profiles                       Summary                                       
remi-glpi        9.2            default [d]                    Free IT asset management software             
remi-glpi        9.3 [d][e]     default [d]                    Free IT asset management software             
remi-php         7.2            devel, minimal, default [d]    PHP scripting language                        
remi-php         7.3 [d][e]     devel, minimal, default [d]    PHP scripting language                       
...

Plutôt que d'activer les dépôts supplémentaires, vous pouvez désormais activer les modules dans les versions souhaitées.

Exemple: installer PHP 7.2

# dnf module install remi-php:7.2
Dependencies resolved.
==============================================================================================================
 Package                     Arch              Version                          Repository               Size
==============================================================================================================
Installing group/module packages:
 php-cli                     x86_64            7.2.12-1.fc29.remi               remi-modular            4.4 M
 php-fpm                     x86_64            7.2.12-1.fc29.remi               remi-modular            1.5 M
 php-mbstring                x86_64            7.2.12-1.fc29.remi               remi-modular            465 k
 php-xml                     x86_64            7.2.12-1.fc29.remi               remi-modular            165 k
Installing dependencies:
 nginx-filesystem            noarch            1:1.14.1-2.fc29                  updates                 9.9 k
 oniguruma                   x86_64            6.9.0-2.fc29                     fedora                  184 k
 php-common                  x86_64            7.2.12-1.fc29.remi               remi-modular            1.0 M
 php-json                    x86_64            7.2.12-1.fc29.remi               remi-modular             36 k
Installing module profiles:
 remi-php/default

Transaction Summary
==============================================================================================================
Install  8 Packages

 

Exemple: installer GLPI 9.2

# dnf module install remi-glpi:9.2
Dependencies resolved.
==============================================================================================================
 Package                                    Arch        Version                       Repository         Size
==============================================================================================================
Installing group/module packages:
 glpi                                       noarch      9.2.4-2.fc29.remi             remi-modular      8.7 M
Installing dependencies:
 php-PHPMailer                              noarch      5.2.27-1.fc29                 updates           136 k
...

Transaction Summary
==============================================================================================================
Install  42 Packages

 

Exemple: passer sur PHP 7.3

# dnf module install remi-php:7.3
Last metadata expiration check: 0:07:38 ago on Wed Nov 28 10:45:40 2018.
Dependencies resolved.
==============================================================================================================
 Package                  Arch              Version                             Repository               Size
==============================================================================================================
Upgrading:
 php-bcmath               x86_64            7.3.0~rc6-1.fc29.remi               remi-modular             43 k
 php-cli                  x86_64            7.3.0~rc6-1.fc29.remi               remi-modular            4.3 M
 php-common               x86_64            7.3.0~rc6-1.fc29.remi               remi-modular            1.0 M
 php-fpm                  x86_64            7.3.0~rc6-1.fc29.remi               remi-modular            1.5 M
 php-gd                   x86_64            7.3.0~rc6-1.fc29.remi               remi-modular             48 k
 php-imap                 x86_64            7.3.0~rc6-1.fc29.remi               remi-modular             57 k
 php-intl                 x86_64            7.3.0~rc6-1.fc29.remi               remi-modular            191 k
 php-json                 x86_64            7.3.0~rc6-1.fc29.remi               remi-modular             36 k
 php-ldap                 x86_64            7.3.0~rc6-1.fc29.remi               remi-modular             49 k
 php-mbstring             x86_64            7.3.0~rc6-1.fc29.remi               remi-modular            475 k
 php-mysqlnd              x86_64            7.3.0~rc6-1.fc29.remi               remi-modular            191 k
 php-opcache              x86_64            7.3.0~rc6-1.fc29.remi               remi-modular            276 k
 php-pdo                  x86_64            7.3.0~rc6-1.fc29.remi               remi-modular             90 k
 php-pecl-apcu            x86_64            5.1.14-1.fc29.remi.7.3              remi-modular             70 k
 php-process              x86_64            7.3.0~rc6-1.fc29.remi               remi-modular             48 k
 php-tidy                 x86_64            7.3.0~rc6-1.fc29.remi               remi-modular             36 k
 php-xml                  x86_64            7.3.0~rc6-1.fc29.remi               remi-modular            163 k
 php-xmlrpc               x86_64            7.3.0~rc6-1.fc29.remi               remi-modular             50 k
Switching module streams:
 remi-php                                   7.2 -> 7.3                                                       

Transaction Summary
==============================================================================================================
Upgrade  18 Packages

Exemple: passer sur GLPI 9.3

# dnf module install remi-glpi:9.3
Last metadata expiration check: 0:09:53 ago on Wed Nov 28 10:45:40 2018.
Dependencies resolved.
==============================================================================================================
 Package                                Arch           Version                     Repository            Size
==============================================================================================================
Upgrading:
 glpi                                   noarch         9.3.3-1.fc29.remi           remi-modular         9.8 M
Installing dependencies:
 php-elvanto-litemoji                   noarch         1.4.4-1.fc29                updates               25 k
 php-phpmailer6                         noarch         6.0.6-1.fc29                updates              134 k
 php-Monolog                            noarch         1.23.0-4.fc29               fedora                92 k
 php-PsrLog                             noarch         1.0.2-6.fc29                fedora                14 k
 php-zendframework-zend-console         noarch         2.7.0-4.fc29                fedora                43 k
Switching module streams:
 remi-glpi                                             9.2 -> 9.3                                            

Transaction Summary
==============================================================================================================
Install  5 Packages
Upgrade  1 Package

 

Conclusion:

Mon dépôt est donc prêt pour les utilisateurs préférant les modules et donc pour la prochaine version de RHEL / CentOS.

S'agissant d'une nouvelle fonctionnalité assez importante, je compte sur vos retours.

PHP sur RHEL-8

Remi Collet

RHEL-8 Beta est annoncée et est disponible au téléchargement pour ceux qui veulent l'essayer.

C'est l'occation de faire un petit zoom sur l'installation de PHP et le fonctionnement des modules.

1. Installation

L'image ISO est disponible pour tous, voir le fichier README.

N'oubliez pas d'activer les dépôts beta

# dnf repolist
repo id                               repo name                                                     status
rhel-8-for-x86_64-appstream-beta-rpms Red Hat Enterprise Linux 8 for x86_64 - AppStream Beta (RPMs) 4594
rhel-8-for-x86_64-baseos-beta-rpms    Red Hat Enterprise Linux 8 for x86_64 - BaseOS Beta (RPMs)    1686

2. Installation de PHP

PHP ne fait pas partie de BaseOS qui constitue le système de base, réduit au maximum, mais est disponible dans AppStream, c'est à dire en module.

# dnf module list
Red Hat Enterprise Linux 8 for x86_64 - AppStream Beta (RPMs)
php                  7.1          devel, minimal, defaul PHP scripting language                           
                                  t [d]                 
php                  7.2 [d]      devel, minimal, defaul PHP scripting language                           
                                  t [d]                  

On observe que les version 7.1 et 7.2 (défaut) sont disponible

Installation de la version 7.1

# dnf module install php:7.1
Dependencies resolved.
==========================================================================================================
 Package            Arch     Version                        Repository                               Size
==========================================================================================================
Installing group/module packages:
 php-cli            x86_64   7.1.20-2.el8+1700+11d526eb     rhel-8-for-x86_64-appstream-beta-rpms   2.9 M
 php-common         x86_64   7.1.20-2.el8+1700+11d526eb     rhel-8-for-x86_64-appstream-beta-rpms   624 k
 php-fpm            x86_64   7.1.20-2.el8+1700+11d526eb     rhel-8-for-x86_64-appstream-beta-rpms   1.5 M
 php-json           x86_64   7.1.20-2.el8+1700+11d526eb     rhel-8-for-x86_64-appstream-beta-rpms    70 k
 php-mbstring       x86_64   7.1.20-2.el8+1700+11d526eb     rhel-8-for-x86_64-appstream-beta-rpms   547 k
 php-xml            x86_64   7.1.20-2.el8+1700+11d526eb     rhel-8-for-x86_64-appstream-beta-rpms   187 k
Installing dependencies:
 httpd-filesystem   noarch   2.4.35-6.el8+2089+57a79027     rhel-8-for-x86_64-appstream-beta-rpms    32 k
 nginx-filesystem   noarch   1:1.14.0-3.el8+1631+ba902cf0   rhel-8-for-x86_64-appstream-beta-rpms    23 k
Installing module profiles:
 php/default                                                                                             
Enabling module streams:
 httpd                       2.4                                                                         
 nginx                       1.14                                                                        
 php                         7.1                                                                         

Transaction Summary
==========================================================================================================
Install  8 Packages

Total download size: 5.9 M
Installed size: 20 M
Is this ok [y/N]: y

On obtient :

# php -v
PHP 7.1.20 (cli) (built: Jul 19 2018 06:17:27) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

On peut aussi passer facilement en 7.2 :

# dnf module install php:7.2
Dependencies resolved.
==========================================================================================================
 Package         Arch      Version                         Repository                                Size
==========================================================================================================
Upgrading:
 php-cli         x86_64    7.2.11-1.el8+2002+9409c40c      rhel-8-for-x86_64-appstream-beta-rpms    3.1 M
 php-common      x86_64    7.2.11-1.el8+2002+9409c40c      rhel-8-for-x86_64-appstream-beta-rpms    653 k
 php-fpm         x86_64    7.2.11-1.el8+2002+9409c40c      rhel-8-for-x86_64-appstream-beta-rpms    1.6 M
 php-json        x86_64    7.2.11-1.el8+2002+9409c40c      rhel-8-for-x86_64-appstream-beta-rpms     73 k
 php-mbstring    x86_64    7.2.11-1.el8+2002+9409c40c      rhel-8-for-x86_64-appstream-beta-rpms    580 k
 php-xml         x86_64    7.2.11-1.el8+2002+9409c40c      rhel-8-for-x86_64-appstream-beta-rpms    188 k
Switching module streams:
 php                       7.1 -> 7.2                                                                    

Transaction Summary
==========================================================================================================
Upgrade  6 Packages

Total download size: 6.2 M
Is this ok [y/N]: y

Et on obtient :

# php -v
PHP 7.2.11 (cli) (built: Oct  9 2018 15:09:36) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

3. Utilisation en Web

3.1 avec Apache HTTP Server

Installation :

# dnf module install httpd

Activation des services :

# systemctl enable --now php-fpm
# systemctl enable --now httpd

Page de tests :

# echo '<?php phpinfo();' >/var/www/html/info.php

Et dans le navigateur http://localhost/info.php

3.2 avec nginx

Installation :

# dnf module install nginx

Activation des services :

# systemctl enable --now php-fpm
# systemctl enable --now nginx

Page de tests :

# echo '<?php phpinfo();' >/usr/share/nginx/html/info.php

Et dans le navigateur http://localhost/info.php

4. Conclusion

Les utilisateurs de Fedora ne seront pas surpris, car les travaux sur les paquets PHP réalisés depuis F19 bénéficient maintenant aux utilisateurs de RHEL :

  • php-fpm utiliser par défaut
  • httpd par défaut en MPM event, et php fonctionnant sans modification de configuration
  • nginx disponible, et php fonctionnant sans modification de configuration

L'utilisation des modules devraient aussi améliorer le simplicité d'utilisation et la flexibilité du choix des versions utilisées, et évidement on s'attend à avoir de nouvelles versions plus rapidement (e.g. php 7.3).

Certains (comme moi) regretteront l'abandon des SCL, et donc la possibilité d'installer plusieurs versions en parallèle (qui reste possible en utilisant les conteneurs).

 

Installer PHP 7.2 sur CentOS, RHEL ou Fedora

Remi Collet

Voici un guide rapide pour mettre à jour le PHP fournit par Fedora, RHEL ou CentOS par la dernière version 7.2.

 

Configuration des dépôts:

Sur Fedora, les dépôts standards sont suffisant, sur Enterprise Linux (RHEL, CentOS) il est aussi nécessaire de configurer le dépôt Extra Packages for Enterprise Linux (EPEL), et sur RHEL d'activer le canal optional.

Fedora 27

wget http://rpms.remirepo.net/fedora/remi-release-27.rpm
dnf install remi-release-27.rpm

Fedora 26

wget http://rpms.remirepo.net/fedora/remi-release-26.rpm
dnf install remi-release-26.rpm

RHEL version 7.4

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm
subscription-manager repos --enable=rhel-7-server-optional-rpms

RHEL version 6.9

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
wget http://rpms.remirepo.net/enterprise/remi-release-6.rpm
rpm -Uvh remi-release-6.rpm epel-release-latest-6.noarch.rpm
rhn-channel --add --channel=rhel-$(uname -i)-server-optional-6

CentOS version 7.4

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm

CentOS version 6.8

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
wget http://rpms.remirepo.net/enterprise/remi-release-6.rpm
rpm -Uvh remi-release-6.rpm epel-release-latest-6.noarch.rpm

 

Activation du dépôt remi-php72

Les paquets sont dans les dépôts remi-safe (activé par défaut) et remi-php72 qui n'est pas activé par défaut (choix de l'administrateur en fonction de la version de PHP souhaitée).

RHEL et CentOS

yum install yum-utils
yum-config-manager --enable remi-php72

Fedora

dnf install dnf-plugins-core
dnf config-manager --set-enabled remi-php72

 

Mise à jour de PHP

Par choix, les paquets ont le même nom que les paquets fournit par défaut avec le système, une simple mise à jour est donc suffisante :

yum update

Et c'est tout :)

$ php -v
PHP 7.2.0 (cli) (built: Nov 28 2017 10:27:47) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.2.0, Copyright (c) 1999-2017, by Zend Technologies
    with Xdebug v2.6.0alpha1, Copyright (c) 2002-2017, by Derick Rethans

 

Problèmes connus

La mise à jour peut échouer (c'est voulu) lorsque certaines extensions présentes ne sont pas encore compatibles avec PHP 7.

Voir la liste des compatibilité : PECL extensions RPM status

Si elles ne sont pas indispensables, vous pouvez les désinstaller avant la mise à  jour, sinon, il faudra patienter.

Attention : quelques extensions sont encore en phase de développement (xdebug...), mais il m'a semblait utile de les fournir afin de permettre la mise à jour au plus grand nombre, et aussi permettre leur test et des retours vers les auteurs.

 

Plus d'informations

Si vous souhaitez une installation en parallèle de la version par défaut de PHP, cela est possible en utilisant les paquets préfixés php72 Voir le billet PHP 7.2 en Software Collection.

Vous pouvez aussi utiliser le nouvel assistant de configuration.

Les paquets présents dans le dépôt seront utilisés comme source pour Fedora 28 (la proposition de changement, reportée pour F27, a déjà été acceptée).

En fournissant une pile complète, environ 150 extensions disponibles, 4 versions de PHP, paquets de base et SCL, pour Fedora et Enterprise Linux, et avec 200 000 téléchargements par jour, le dépôt remi est devenu en 12 ans une référence pour les utilisateurs de PHP sur les distributions RPM, maintenu par un contributeur actif aux différents projets (Fedora, PHP, PECL...).

Et aussi :

Astuces de configuration de PHP

Remi Collet

Traduction de l'article PHP Configuration Tips.

Cet article regroupe les informations actualisées qui ont été publiées ici au cours des dernières années.

RHEL 7 fournit le serveur HTTP Apache  version 2.4 et PHP version 5.4.

Le configuration la plus commune pour Apache et PHP utilise mod_php, mais présente quelques limites et inconvénients :

  • une seule versions de mod_php peut être utilisée
  • mod_php tourne dans le processus httpd, sans isolation
  • mod_php n'est supporté que pour le MPM prefork

Cet article explique comment déléguer l'exécution des scripts PHP à un service d'arrière plan utilisant le protocole  FastCGI, comment utiliser une version récente de PHP, comment utiliser plusieurs versions de PHP, et comment améliorer les performances d'Apache..

Le paquet du serveur HTTP d'apache disponible dans RHEL fournit l'ensemble des fonctionnalités nécessaires pour une telle configuration.

1. Basculer vers php-fpm

1.1. Supprimer mod_php

Il est conseillé de supprimer ou de désactiver mod_php afin de réduire la consommation mémoire de chaque processus httpd.

Vous pouvez soit déinstaller le paquet php, qui ne contient que ce module

yum remove php

ou simplement le désactiver en commentant la directive LoadModule directive dans le fichier /etc/httpd/conf.modules.d/10-php.conf.

# disabled # LoadModule php5_module modules/libphp5.so

1.2. Installer php-fpm

Vous pouvez maintenant installer php-fpm et activer son service

yum install php-fpm
systemctl start php-fpm
systemctl enable php-fpm

Remarque: le paquet php-fpm est disponible dans le canal optional, qui doit être activé.

Pour configurer l'exécution des scripts PHP, modifiez ou créez le fichier de configuration /etc/httpd/conf.d/php.conf :

Les lignes suivantes interdise l'accès aux fichiers .user.ini depuis les clients Web!

  <Files ".user.ini">
    Require all denied
  </Files>

Activation de la gestion du Multiviews par php:

  AddType text/html .php

Ajouter index.php à la liste des fichiers utilisés pour fournir le contenu d'un dossier :

  DirectoryIndex index.php

La ligne suivante active les entêtes d'autorisation :

  SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=

Rediriger l'exécution des scripts PHP vers le service FPM

  <FilesMatch \.php$>
    SetHandler "proxy:fcgi://127.0.0.1:9000"
  </FilesMatch>

Si des directives php_value sont présentes dans ce fichier, vous devez les supprimer, elles ne concernent que mod_php.

Vous pouvez maintenant redémarrer le serveur web et, avec une simple page de test

<?php phpinfo();

vérifier qui PHP est désormais exécuté à par le service FastCGI:

  PHP Version 5.4.16
  Server API= FPM/FastCGI

1.3. Réglages de PHP

Le fichier de configuration principal est /etc/php-fpm.conf, qui contient beaucoup de commentaires expliquant chaque option.

FPM pour exécuter plusieurs services (pool), chacun exécutant les scripts PHP avec des options pouvant être différentes, le fichier de configuration du service par défaut (www) est /etc/php-fpm.d/www.conf, qui contient aussi de nombreux commentaires.

1.3.1. php_value, php-flag

Les options de PHP peuvent être configurées en utilisant les directives php_value, php_admin_value, php_flag et php_admin_flag :

  • avec mod_php,  dans les fichiers de configuration d'Apache
  • avec FPM, dans les fichiers de configuration de chaque service (pool)

1.3.2. .htaccess

Les options peuvent, en plus, être définies pour un dossier spécifique :

  • avec mod_php, en utilisant un fichier .htaccess
  • avec FPM, en utulisation un fichier .user.ini (les mot clés php_* ne sont pas nécessaires).

1.3.3. Réglages des processus

FPM fonctionne en service et lance plusieurs processus pour gérer les différentes requêtes en parallèle, il existe plusieurs modes :

  • pm = ondemand, un processus est lancé uniquement lors d'une nouvelle connexion, et arrêté lorsqu'il n'y a pas d'activité, ce mode est  adapté pour les environnements de développement
  • pm = dynamic, un groupe de processus est toujours en fonctionnement, plus de processus seront démarrés en cas de besoin, ce mode adapté à la production
  • pm = static, un nombre fixe de processus est toujours présent, ce mode est adapté à la production et peut améliorer les performances

1.4. Réglages du Serveur HTTP Apache

1.4.1. Mode threadé

Par défaut, le serveur HTTP apache utilise un ensemble de processus pour gérer les requêtes entrantes (MPM prefork).

Comme nous n'utilisons plus mod_php, nous pouvons basculer sur un MPM threadé (worker or event), et c'est un ensemble de threads qui gérera les requêtes, réduisant le nombre de processus, la consommation mémoire, et améliorant les performances, en particulier lorsqu'il s'agit de servir de nombreux fichiers statiques.

Changer leMPM utilisé dans le fichier de configuration /etc/httpd/conf.modules.d/00-mpm.conf :

  # disabled # LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
  # disabled # LoadModule mpm_worker_module modules/mod_mpm_worker.so
  LoadModule mpm_event_module modules/mod_mpm_event.so

1.4.2. Unix Domain Socket

Par défaut, FPM écoute sur un socket réseau, mais il peut aussi utiliser un socket local (UDS), ce qui peut améliorer sensiblement les performances :

Dans la configuration du service (pool) FPM :

  listen = /run/php-fpm/www.sock
  listen.owner = apache
  listen.mode = 0660

Dans la configuration du serveur Apache :

  SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"

1.4.2. Séparation du frontal et des serveurs applicatifs

Par défaut, FPM écoute les requêtes entrantes sur un socket réseau local, il est évidement possible d'utiliser un serveur séparé, une machine virtuelle ou un containeur (une instance docker)

Dans le configuration du service (pool) FPM :

  listen = 10.0.0.2:9000
  listen.allowed_clients = 10.0.0.1

Dans la configuration du serveur Apache :

  SetHandler "proxy:fcgi://10.0.0.2:9000"

1.4.3 Plusieurs serveurs applicatifs

Pour traiter plus de requêtes simultanément, vous pouvez désirer répartir la charger entre plusieurs serveurs PHP, ce qui est très facile.

Exemple de configuration du serveur Apache avec 3 serveurs applicatifs :

  # Création du répartiteur de charge
  <Proxy balancer://phpfpmlb>
    BalancerMember fcgi://10.0.0.2:9000
    BalancerMember fcgi://10.0.0.3:9000
    BalancerMember fcgi://10.0.0.4:9000
  </Proxy>
  # Redirection de l'exécution des scripts PHP
  <FilesMatch \.php$>
    SetHandler "proxy:balancer://phpfpmlb"
 </FilesMatch>

2. Utilisation d'une version récente de PHP

RHEL fournit PHP version 5.4, qui était la version courante lors de la publication de RHEL-7, mais qui peut être trop ancienne pour des projets récents.

PHP version 5.6, 7.0 et 7.1 sont maintenant supportés sur RHEL, fournit dans le produit Red Hat Software Collections (RHSCL).

Dans l'example ci-dessous, nous utiliserons la version 7.0, mais s'applique à l'identique pour les autres versions.

2.1. Installation

Installation de la  Software Collection, après avoir activé le canal RHSCL:

  yum install rh-php70

Installation du service FPM service pour cette version:

  yum install rh-php70-php-fpm

Installation des extensions supplémentaires nécessaires :

  yum install rh-php70-php-mbstring rh-php70-php-pgsql rh-php70-php-opcache

Astuce : comparer la liste des extensions disponibles, pour s'assurer que tout ce qui est nécessaire est présent.

  php --modules | tee /tmp/54
  scl enable rh-php70 'php --modules' | tee /tmp/70
  diff /tmp/54 /tmp/70

Astuce : ne jamais se fier au nom des paquets, mais préférer le nom des extensions (e.g. php-mysqli ou rh-php70-php-simplexml), en effet la découpage des paquets peut changer entre les versions.

2.2. Utiliser une nouvelle version de PHP

Lorsqu'on utilise FPM, c'est aussi simple que darrêter l'ancien service et de démarrer le nouveau:

  systemctl stop  php-fpm
  systemctl start rh-php70-php-fpm

2.3. Paquet additionnels

Les Software Collections fournissent les même extensions que les paquets standard de RHEL.

Les utilisateurs sont habitués à trouver des extensions supplémentaires dans le dépôt EPEL, de la même manière, des extensions sont disponibles dans le dépôt communautaire centos-sclo-sclo, pour plus d'information, cherchez sclo-php sur le site https://www.softwarecollections.org/.

3. Utiliser plusieurs versions de PHP

Puisque l'exécution de PHP est redirigée version le service FastCGI service par la directive SetHandler, elle peut être définie pour chaque hôte virtuel, chaque projet ou chaque dossier.

Dans l'exemple ci-dessous, nous utiliserons PHP version 5.4 du système de base (pour des applications anciennes, qui a été configuré précédement)  et PHP version 7.1 simultanément.

3.1. Installation

Installation de la Software Collection, après avoir activé le canal RHSCL:

  yum install rh-php71 rh-php71-php-fpm rh-php71-php-mbstring rh-php71-php-opcache ...

Configuration de FPM pour écouter sur un port différent de celui utilisé par le service php-fpm service par défaut, dans le fichier /etc/opt/rh/rh-php71/php-fpm.d/www.conf.

  listen = 127.0.0.1:9071

Configurer SELinux pour ne pas bloquer ce port :

  semanage port -a -t http_port_t -p tcp 9071

Démarrer le service :

  systemctl start rh-php71-php-fpm

Il est désormais possible de choisir la version de PHP utilisée pour chaque dossier dans le fichier de configuration du serveur Apache :

Exemple:

  # Utiliser PHP 7.1 par défaut
  <FilesMatch \.php$>
    SetHandler "proxy:fcgi://127.0.0.1:9071"
  </FilesMatch>
  # Utiliser PHP 5.4 pour une ancienne application
  <Directory /var/www/html/old>
    <FilesMatch \.php$>
      SetHandler "proxy:fcgi://127.0.0.1:9000"
    </FilesMatch>
  </Directory>

4. Conclusion

J'espère que ce petit article a illustré les nombreux bénéfices de basculer sur FPM pour vos applications PHP:

  • isolation des processus entre le frontal web (httpd) et les serveurs applicatifs (fpm)
  • amélioration des performances
  • utilisation des versions modernes de PHP
  • utilisation de plusieurs versions de PHP

Red Hat va fournir PHP 7.1 pour RHEL (et CentOS)

Remi Collet

Annonce : Red Hat updates Python, PHP, Node.js, more; supports new arches et RHSCL 3.0 Beta Release Notes.

Que les accrocs de la stabilité se rassurent, PHP 5.3.3 reste la version standard fournit avec RHEL-6 et PHP 5.4.16 celle de RHEL-7.

Nous disposerons donc bientôt d'un moyen officiel et supporté d'installer PHP version 5.6, 7.0 ou 7.1, en parallèle  de la version système, sans affecter les composants standards. L'annonce prévoit un cycle de vie de 3 ans. La version fournit est la 7.1.8.

emblem-important-2-24.png Il s'agit pour l'instant uniquement d'une version Beta destinée à l'évaluation.

Pour plus d'informations sur l'installation et l'utilisation des SCL, vous pouvez consulter les autres billets déjà publiés à ce sujet :

emblem-notice-24.pngPour les utilisateurs des clones de RHEL (CentOS, Oracle, Scientific Linux, ...) vous pouvez utiliser le dépôt centos-sclo-rh-testing (maintenu par le SIG SCLo).

emblem-notice-24.pngPour ceux qui souhaitent plus d'extensions, vous pouvez utiliser la dépôt centos-sclo-sclo-testing.

En dehors de PHP, RHSCL 3.0 senrichit de plusieurs morceaux de choix, je retiendrais Mariadb 10.2, MongoDB 3.4 et PostgreSQL 9.6

Il me semble que c'est une excellent nouvelle qui devrait aider à l'adoption des versions récentes de PHP dans le monde de l'entreprise.

emblem-question-24.pngSi vous avez des questions, j'ai même ouvert un Forum dédié : About PHP SCL.