PDOException / QueryException : could not find driver

Matériel: PC fixe
Version de YunoHost: 3.8.4.8
J’ai accès à mon serveur : complet
Êtes-vous dans un contexte particulier ou avez-vous effectué des modificiations particulières sur votre instance ? : non

Bonjour,

Pixelfed et framaform sont tombés en panne. Elles semblent avoir pour point commun. Framaforms me dit explicitement PDOException: could not find driver in lock_may_be_available() (line 167 of /var/www/framaforms/includes/lock.inc). et pixelfed me donne un message d’erreur similaire quand je lance “php artisan migrate”.

Quand je désinstalle framaforms, pixelfed se remet à fonctionner, et framaforms refonctionne à son tour quand je le réinstalle. Jusqu’à la fois suivante, où la panne revient de façon aléatoire.

J’imagine que c’est lié au fait que ces deux apps utilisent postgresql et php et ont donc besoin de php*-pgsql

Est-ce que tu peux regarder la sortie de

dpkg --list | grep php | grep pgsql

et

grep -nr "pgsql" /etc/php

(Eventuellement le log de déinstall de framaforms peut aider aussi)

Bon, je me suis trompé pour la désinstall, ça devait être une coïncidence.

rc php7.3-pgsql 7.3.18-1+0~20200515.59+debian9~1.gbp12fa4f amd64 PostgreSQL module for PHP

/etc/php/7.3/fpm/php.ini:928:;extension=pdo_pgsql
/etc/php/7.3/fpm/php.ini:930:;extension=pgsql
/etc/php/7.3/fpm/php.ini:1300:; http://php.net/pgsql.allow-persistent
/etc/php/7.3/fpm/php.ini:1301:pgsql.allow_persistent = On
/etc/php/7.3/fpm/php.ini:1305:; http://php.net/pgsql.auto-reset-persistent
/etc/php/7.3/fpm/php.ini:1306:pgsql.auto_reset_persistent = Off
/etc/php/7.3/fpm/php.ini:1309:; http://php.net/pgsql.max-persistent
/etc/php/7.3/fpm/php.ini:1310:pgsql.max_persistent = -1
/etc/php/7.3/fpm/php.ini:1313:; http://php.net/pgsql.max-links
/etc/php/7.3/fpm/php.ini:1314:pgsql.max_links = -1
/etc/php/7.3/fpm/php.ini:1318:; http://php.net/pgsql.ignore-notice
/etc/php/7.3/fpm/php.ini:1319:pgsql.ignore_notice = 0
/etc/php/7.3/fpm/php.ini:1322:; Unless pgsql.ignore_notice=0, module cannot log notice message.
/etc/php/7.3/fpm/php.ini:1323:; http://php.net/pgsql.log-notice
/etc/php/7.3/fpm/php.ini:1324:pgsql.log_notice = 0
/etc/php/7.3/mods-available/pgsql.ini:1:; configuration for php pgsql module
/etc/php/7.3/mods-available/pgsql.ini:3:extension=pgsql.so
/etc/php/7.3/mods-available/pdo_pgsql.ini:1:; configuration for php pgsql module
/etc/php/7.3/mods-available/pdo_pgsql.ini:3:extension=pdo_pgsql.so
/etc/php/7.3/cli/php.ini:928:;extension=pdo_pgsql
/etc/php/7.3/cli/php.ini:930:;extension=pgsql
/etc/php/7.3/cli/php.ini:1300:; http://php.net/pgsql.allow-persistent
/etc/php/7.3/cli/php.ini:1301:pgsql.allow_persistent = On
/etc/php/7.3/cli/php.ini:1305:; http://php.net/pgsql.auto-reset-persistent
/etc/php/7.3/cli/php.ini:1306:pgsql.auto_reset_persistent = Off
/etc/php/7.3/cli/php.ini:1309:; http://php.net/pgsql.max-persistent
/etc/php/7.3/cli/php.ini:1310:pgsql.max_persistent = -1
/etc/php/7.3/cli/php.ini:1313:; http://php.net/pgsql.max-links
/etc/php/7.3/cli/php.ini:1314:pgsql.max_links = -1
/etc/php/7.3/cli/php.ini:1318:; http://php.net/pgsql.ignore-notice
/etc/php/7.3/cli/php.ini:1319:pgsql.ignore_notice = 0
/etc/php/7.3/cli/php.ini:1322:; Unless pgsql.ignore_notice=0, module cannot log notice message.
/etc/php/7.3/cli/php.ini:1323:; http://php.net/pgsql.log-notice
/etc/php/7.3/cli/php.ini:1324:pgsql.log_notice = 0
/etc/php/7.0/fpm/php.ini:897:;extension=php_pdo_pgsql.dll
/etc/php/7.0/fpm/php.ini:899:;extension=php_pgsql.dll
/etc/php/7.0/fpm/php.ini:1284:; http://php.net/pgsql.allow-persistent
/etc/php/7.0/fpm/php.ini:1285:pgsql.allow_persistent = On
/etc/php/7.0/fpm/php.ini:1289:; http://php.net/pgsql.auto-reset-persistent
/etc/php/7.0/fpm/php.ini:1290:pgsql.auto_reset_persistent = Off
/etc/php/7.0/fpm/php.ini:1293:; http://php.net/pgsql.max-persistent
/etc/php/7.0/fpm/php.ini:1294:pgsql.max_persistent = -1
/etc/php/7.0/fpm/php.ini:1297:; http://php.net/pgsql.max-links
/etc/php/7.0/fpm/php.ini:1298:pgsql.max_links = -1
/etc/php/7.0/fpm/php.ini:1302:; http://php.net/pgsql.ignore-notice
/etc/php/7.0/fpm/php.ini:1303:pgsql.ignore_notice = 0
/etc/php/7.0/fpm/php.ini:1306:; Unless pgsql.ignore_notice=0, module cannot log notice message.
/etc/php/7.0/fpm/php.ini:1307:; http://php.net/pgsql.log-notice
/etc/php/7.0/fpm/php.ini:1308:pgsql.log_notice = 0
/etc/php/7.0/cli/php.ini:897:;extension=php_pdo_pgsql.dll
/etc/php/7.0/cli/php.ini:899:;extension=php_pgsql.dll
/etc/php/7.0/cli/php.ini:1284:; http://php.net/pgsql.allow-persistent
/etc/php/7.0/cli/php.ini:1285:pgsql.allow_persistent = On
/etc/php/7.0/cli/php.ini:1289:; http://php.net/pgsql.auto-reset-persistent
/etc/php/7.0/cli/php.ini:1290:pgsql.auto_reset_persistent = Off
/etc/php/7.0/cli/php.ini:1293:; http://php.net/pgsql.max-persistent
/etc/php/7.0/cli/php.ini:1294:pgsql.max_persistent = -1
/etc/php/7.0/cli/php.ini:1297:; http://php.net/pgsql.max-links
/etc/php/7.0/cli/php.ini:1298:pgsql.max_links = -1
/etc/php/7.0/cli/php.ini:1302:; http://php.net/pgsql.ignore-notice
/etc/php/7.0/cli/php.ini:1303:pgsql.ignore_notice = 0
/etc/php/7.0/cli/php.ini:1306:; Unless pgsql.ignore_notice=0, module cannot log notice message.
/etc/php/7.0/cli/php.ini:1307:; http://php.net/pgsql.log-notice
/etc/php/7.0/cli/php.ini:1308:pgsql.log_notice = 0
/etc/php/7.0/apache2/php.ini:897:;extension=php_pdo_pgsql.dll
/etc/php/7.0/apache2/php.ini:899:;extension=php_pgsql.dll
/etc/php/7.0/apache2/php.ini:1284:; http://php.net/pgsql.allow-persistent
/etc/php/7.0/apache2/php.ini:1285:pgsql.allow_persistent = On
/etc/php/7.0/apache2/php.ini:1289:; http://php.net/pgsql.auto-reset-persistent
/etc/php/7.0/apache2/php.ini:1290:pgsql.auto_reset_persistent = Off
/etc/php/7.0/apache2/php.ini:1293:; http://php.net/pgsql.max-persistent
/etc/php/7.0/apache2/php.ini:1294:pgsql.max_persistent = -1
/etc/php/7.0/apache2/php.ini:1297:; http://php.net/pgsql.max-links
/etc/php/7.0/apache2/php.ini:1298:pgsql.max_links = -1
/etc/php/7.0/apache2/php.ini:1302:; http://php.net/pgsql.ignore-notice
/etc/php/7.0/apache2/php.ini:1303:pgsql.ignore_notice = 0
/etc/php/7.0/apache2/php.ini:1306:; Unless pgsql.ignore_notice=0, module cannot log notice message.
/etc/php/7.0/apache2/php.ini:1307:; http://php.net/pgsql.log-notice
/etc/php/7.0/apache2/php.ini:1308:pgsql.log_notice = 0

EDIT: Pixelfed a récupéré quand, en se réinstallant, framaform a initialisé la base de donnée postgresql.

à toute fin utile, je donne son log d’install: https://paste.yunohost.org/raw/xewaxatero

Ou alors plutôt parce que du coup le paquet php7.3-pgsql a été installé pendant cette install (c’est apriori le fameux driver dont on parle)

Sauf que théoriquement il aurait déjà du être installé par pixelfed car il est aussi listé dans les dépendances ici https://github.com/YunoHost-Apps/pixelfed_ynh/blob/master/scripts/_common.sh#L10

Eventuellement on peut voir ça si on regarde le log d’install de pixelfed … Ou alors il s’est passé un truc entre temps et on devrait pouvoir le voir dans les logs d’apt (qui trainent dans /var/log/apt si je m’trompe pas)

Ce qui est bizarre, c’est que les apps fonctionnent la majorité du temps et cette panne survient de nulle-part. Comment un module peut-il disparaître de la sorte ?

Tu peux trouver les historiques d’apt liés à php7.3-pgsql avec :

for LOG in /var/log/apt/history*; do zgrep -C 3 "php7.3-pgsql" $LOG; done

Déjà on est pas sur que ce soit ça exactement, et le truc c’est qu’il faut arrêter avec cette idée que l’informatique “ça tombe en marche et ça continue de marcher pour toujours si on y touche pas”

On peut croire qu’on a “rien touché” alors qu’en fait on a fait pleins de trucs et qu’une bricole peut avoir une réaction en chaîne inattendue. Des fois une conf n’est pas bien propagée alors un truc continue de fonctionner, et puis un jour deux mois plus tard un “reload” propage le truc et ça casse et on comprends pas. Et puis même en admettant qu’on y touche pas, un serveur c’est un “écosystème vivant” et il se passe quand même des trucs en permanence. Il y a des cron job qui tourne, potentiellement des mise à jour automatique, de la RAM qui est utilisé alors un service crashe car plus de RAM, alors peut-être il est relancé automatiquement et que ça a des impacts.

Clairement c’est rageant parce que j’suis en train de dire que tout est mystique et pas formel, mais c’est en tout cas un peu le paradigme de l’administration système en l’état…

OK, je vois.

Le résultat des logs

Bon du coup ce qu’on voit c’est :

php7.3-pgsql a été :

  • (en oubliant les trucs d’avant fin mai)
  • installé le 2020-05-31 20:46:17
  • supprimé le 2020-06-02 02:02:57
  • installé le 2020-06-03 18:02:01
  • supprimé le 2020-06-11 17:10:57
  • installé le 2020-06-12 15:57:21

sauf que ça ne dit pas le contexte, donc il faudrait corréler ça aux logs d’install/remove des apps …

donc par exemple si on prends la suppression qui a eu lieu de 2020-06-11 (hier) vers 17:10:57, est-ce que tu peux trouver une opération qui aurait lieu au même moment dans les logs de yunohost ?

(Attention pour l’heure, des fois il y a un décalage de +/- une ou deux heure avec le fuseau horaire etc… donc ca peut etre aussi 15h10, 16h10, 18h10 ou 19h10)

J’ai jeté un oeil dans journalctl, mais il ne remonte pas assez loin.

Je sais juste que ça se débloque au moment où la sortie affiche “create database”. Mais je ne sais pas comment retrouver la commande précise qui a décoincé le bazar.

Uh beh je pensais plutôt aux logs dans Outils > Journaux dans la webadmin

J’y ai pensé aussi, mais je n’ai pas trouvé le log qui me permette de savoir précisément ce qui a relancé pixelfed, sachant que regarder le log d’installation de framaform ne m’en a pas appris davantage.

OK, je viens d’apprendre que framaforms était de “faible qualité”, donc c’est pas impossible qu’elle foute le dawa à cause de ça. Je vais la désinstaller et voir si le stuut avec pixelfed se reproduit.

EDI: c’était pas ça, pixelfed est à nouveau en panne. J’ai tenté de redémarrer postgresql, mais ça n’a pas marché.

Beh du coup je revérifierais que php-pgsql est installé avec

dpkg --list | grep php | grep pgsql

Et si c’est pas le cas c’est un bug …

Aucun résultat. C’est vraiment bizarre, parce que j’ai d’autres apps qui utilisent postgresql et qui fonctionnent bien.

root@stemy:~# dpkg --list | grep php | grep pgsql
root@stemy:~#

Oui mais peut-être pas des app php…

Est-ce que tu peux faire un

“apt show pixelfed-ynh-deps”

root@stemy:~# apt show pixelfed-ynh-deps
Package: pixelfed-ynh-deps
Version: 0.10.9~ynh2
Status: install ok installed
Priority: optional
Section: misc
Maintainer: root <root@yunohost.yunohost.org>
Installed-Size: 9,216 B
Depends: postgresql, redis-server, imagemagick, jpegoptim, optipng, pngquant, supervisor, php7.3-fpm, php7.3, php7.3-common
Download-Size: unknown
APT-Manual-Installed: yes
APT-Sources: /var/lib/dpkg/status
Description: Fake package for pixelfed (YunoHost app) dependencies
 This meta-package is only responsible of installing its dependencies.

Bon ben du coup les dépendances php qui devraient être dans Depends: ne sont pas là, c’est la cause du bug … j’ai tenté une install de mon côté et je reproduis le bug donc je vais creuser ce que les helpers font pour comprendre …

En attendant tu peux t’en sortir en installant manuellement php7.3-pgsql

En effet. Bizarrement, il n’était pas installé, et ça a tout débloqué.

Merci.