Admin/Dev

21
Mars
2023

Homebrew : Corriger un problème de dépendances trop récentes

Publié par sky

Récemment, le service httpd disponible avec Homebrew refusait de démarrer. Il s'affiche en erreur dans la liste des services brew

Name     Status     User File
dbus     none            
httpd    error  256 sky  ~/Library/LaunchAgents/homebrew.mxcl.httpd.plist
mariadb  started    sky  ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist
minidlna none            
netdata  none            
php      none            
php@7.4  none            
unbound  none          

et pour une fois, ce n'était de sa faute. Au démarrage, j'avais l'erreur suivante

httpd: Syntax error on line 184 of /usr/local/etc/httpd/httpd.conf: Cannot load /usr/local/opt/php/lib/httpd/modules/libphp.so

Je continue donc mon investigation vers PHP qui semble être le fautif tout désigné. En lançant la commande

php

j'obtiens

dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicudata.71.dylib
  Referenced from: /usr/local/bin/php
  Reason: image not found
zsh: abort      php

Ce qui n'est pas absolument pas la réponse souhaitée. Mais, cela donne une indication sur la suite de la recherche. Regardons ce que l'on trouve dans le dossier indiqué dans l'erreur

ls -l /usr/local/opt/icu4c/lib/

le résultat obtenu est

drwxr-xr-x  6 sky  staff       192 13 fév 08:34 icu
-r--r--r--  1 sky  staff  31256672 13 fév 08:34 libicudata.72.1.dylib
lrwxr-xr-x  1 sky  staff        21 13 fév 08:34 libicudata.72.dylib -> libicudata.72.1.dylib
-r--r--r--  1 sky  staff  31252672 13 fév 08:34 libicudata.a
lrwxr-xr-x  1 sky  staff        21 13 fév 08:34 libicudata.dylib -> libicudata.72.1.dylib
-r--r--r--  1 sky  staff   2747056 13 fév 08:34 libicui18n.72.1.dylib
lrwxr-xr-x  1 sky  staff        21 13 fév 08:34 libicui18n.72.dylib -> libicui18n.72.1.dylib
-r--r--r--  1 sky  staff   5031080 13 fév 08:34 libicui18n.a
lrwxr-xr-x  1 sky  staff        21 13 fév 08:34 libicui18n.dylib -> libicui18n.72.1.dylib
-r--r--r--  1 sky  staff     61136 13 fév 08:34 libicuio.72.1.dylib
lrwxr-xr-x  1 sky  staff        19 13 fév 08:34 libicuio.72.dylib -> libicuio.72.1.dylib
-r--r--r--  1 sky  staff     68848 13 fév 08:34 libicuio.a
lrwxr-xr-x  1 sky  staff        19 13 fév 08:34 libicuio.dylib -> libicuio.72.1.dylib
-r--r--r--  1 sky  staff     67124 13 fév 08:34 libicutest.72.1.dylib
lrwxr-xr-x  1 sky  staff        21 13 fév 08:34 libicutest.72.dylib -> libicutest.72.1.dylib
-r--r--r--  1 sky  staff     79712 13 fév 08:34 libicutest.a
lrwxr-xr-x  1 sky  staff        21 13 fév 08:34 libicutest.dylib -> libicutest.72.1.dylib
-r--r--r--  1 sky  staff    199384 13 fév 08:34 libicutu.72.1.dylib
lrwxr-xr-x  1 sky  staff        19 13 fév 08:34 libicutu.72.dylib -> libicutu.72.1.dylib
-r--r--r--  1 sky  staff    268376 13 fév 08:34 libicutu.a
lrwxr-xr-x  1 sky  staff        19 13 fév 08:34 libicutu.dylib -> libicutu.72.1.dylib
-r--r--r--  1 sky  staff   1699616 13 fév 08:34 libicuuc.72.1.dylib
lrwxr-xr-x  1 sky  staff        19 13 fév 08:34 libicuuc.72.dylib -> libicuuc.72.1.dylib
-r--r--r--  1 sky  staff   2702928 13 fév 08:34 libicuuc.a
lrwxr-xr-x  1 sky  staff        19 13 fév 08:34 libicuuc.dylib -> libicuuc.72.1.dylib
drwxr-xr-x  5 sky  staff       160 13 fév 08:34 pkgconfig

On peut voir qu'en effet, il n'y a aucune trace de libicudata.71.dylib. Bizarrement, dans PHP semble être indiquée une version spécifique des librairies icu4c plutôt que d'utiliser la dernière.

Or, avec Homebrew, et les mises à jour semi-automatique des paquets, le paquet de icu4c a été mis à jour, et c'est donc la version 72, voir 72.1 qui désormais disponible. La version 71 a été supprimée.

Ma première tentative a été de faire un alias, pour tenter de faire croire à PHP que la librairie est bien présente.

cd /usr/local/opt/icu4c/lib/
ln -s libicudata.72.1.dylib libicudata.71.dylib

Ce subterfuge aurait pu fonctionner, malheureusement, cette fois ci, ce ne fut pas le cas.
PHP renvoie l'erreur

dyld: Symbol not found: __ZNK6icu_718Calendar3getE19UCalendarDateFieldsR10UErrorCode
  Referenced from: /usr/local/bin/php
  Expected in: /usr/local/opt/icu4c/lib/libicui18n.71.dylib
 in /usr/local/bin/php
zsh: abort      php

Après quelques heures de réflexion, ma seconde option fut de retrouver et réinstaller la version 71 de PHP. Pour cela, j'ai ouvert le dossier d'installation de la librairie dans Finder

open /usr/local/Cellar/icu4c/

Puis, à l'aide de TimeMachine, j'ai remonté le temps pour retrouver le dossier 71 et le remettre à côté de la version actuelle. Je n'ai pas trouvé la version 71, par contre, j'ai trouvé la version 71.1 qui devrait faire l'affaire.

Une fois le dossier en place, il suffit simplement de remettre des liens dans le dossier dans lequel PHP recherche la librairie

cd /usr/local/opt/icu4c/lib/
ln -s /usr/local/Cellar/icu4c/71.1/lib/*71.dylib ./

Il suffit de redémarrer le service httpd

brew services restart httpd

puis de lister les services

brew services list

pour voir que désormais tout fonctionne correctement

Name     Status  User File
dbus     none         
httpd    started sky  ~/Library/LaunchAgents/homebrew.mxcl.httpd.plist
mariadb  started sky  ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist
minidlna none         
netdata  none         
php      none         
php@7.4  none         
unbound  none         

Et voilà, le service web est de nouveau pleinement fonctionnel.

 
Sommaire de la série
 
 
Commentaires
Commentaire de matks le 11 Octobre 2023 à 10:34

Merci beaucoup pour ce petit article, il aide à y voir plus clair ;)

 
Commentaire de sky le 11 Octobre 2023 à 10:43

De rien matks ! Ravi que cela t'ait été utile.

 

 

Poster un commentaire
En postant sur skymac.org, je m'engage à être courtois et à ce que mon message soit pertinent avec le sujet de l'article.
En outre, j'accepte, sans condition, que mon message soit refusé et supprimé si ces règles ne sont pas appliquées.
Ouvrir le panneau de gestion des cookies
Fermer le panneau
Ce site utilise des cookies pour assurer son bon fonctionnement. Il utilise aussi des cookies issues de services tiers permettant de proposer des fonctionnalités avancées. À tout moment, vous pouvez choisir quels services vous souhaitez activer ou refuser, afin de retirer votre consentement quant à l'utilisation des cookies.
 
Personnalisation des services
Vous êtes libre de choisir quels services vous souhaitez activer. En autorisant ces services tiers, vous acceptez le dépôt et la lecture de cookies et l'utilisation de technologies de suivi nécessaires à leur bon fonctionnement. En retirant votre consentement pour certains de ces services, certaines fonctionnalités du site peuvent ne plus fonctionner.
Navigation du site  En savoir plus
Le site écrit un cookie de session permettant son bon fonctionnement et aidant à la navigation. Il ne peut être désactivé.
Utilisation : 1 cookie, enregistre l'identifiant de la session.
Durée de vie : Le cookie est présent pendant toute la session sur le site. Il devient obsolète après 24 minutes d'inactivité.
Obligatoire
Popup Média
Afficher des vidéos depuis Yoube ou Dailymotion.
 
Tout accepter Tout refuser Gérer