Homebrew : Corriger un problème de dépendances trop récentes
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.
- Homebrew - Gestionnaire de paquets
- Guetzli, une librairie d'encodage JPG optimisée
- Installer les commandes ecm et unecm sur macOS
- Homebrew : Recherche et commandes avancées
- Astuce macOS : Gérer les images disques au format bin/cue
- Plein phare sur une application Brew : youtube-dl
- Plein phare sur une application Brew : smartmontools
- Plein phare sur une application Brew : minidlna
- Brew et les paquets installés
- Plein phare sur une application Brew : unrar
- Plein phare sur une application Brew : glances
- Brew et les paquets à mettre à jour
- Plein phare sur une application Brew : watch
- Homebrew et la gestion de l'espace disque
- Plein phare sur une application Brew : ncdu
- Plein phare sur une application Brew : TestDisk
- Convertir une série d'images en GIF animé sur macOS
- Plein phare sur une application Brew : p7zip
- Plein phare sur une application Brew : Optimiser des PNGs avec ImageOptim
- Plein phare sur une application Brew : pstree
- Plein phare sur une application Brew : lsusb
- Plein phare sur une application Brew : rename
- Plein phare sur une application Homebrew : nmap
- Gérer les mises à jours des applications Homebrew sur 10.14 et inférieur.
- Gérer les mises à jours des applications Homebrew sur 10.14 et inférieur, partie 2.
- Plein phare sur une application Brew : yt-dlp
- Homebrew : Corriger un problème de dépendances trop récentes