Tous les konnectors KO suite à une mise à jour

Bonjour les nuages,

J’ai déjà évoqué rapidement mon problème sur IRC, mais @Clochix m’a suggéré de mettre un message ici pour voir si cela concerne quelqu’un autre.

Cette semaine j’ai mis à jour les paquets nodejs:amd64 (12.20.2-1nodesource1 vers 12.21.0-1nodesource1) et cozy-stack:amd64 (2:1.4.25-2 vers 2:1.4.26-1), et depuis aucun de mes konnectors ne fonctionne. A chaque fois qu’un konnecteur se lance, j’ai l’erreur suivante dans les logs :

Stderr: internal/modules/cjs/loader.js:818\n throw err ;\n ^\n\nError: Cannot find module '/usr/src/konnector'\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:815:15)\n at Function.Module._load (internal/modules/cjs/loader.js:667:27)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main .js:60:12)\n at internal/main/run_main_module.js:17:47 {\n code: 'MODULE_NOT_FOUND',\n requireStack: []\n}\n

Bien sûr je ne trouve pas ce fichier usr/src/konnector, que ce soit à la racine de mon disque (/usr/src/') ou dans le chroot de cozy (usr/share/cozy/chroot/usr/src/), mais je ne saurais dire s’il était présent avant.

Des idées ?

2 Likes

Idem sur une installation neuve

dpkg --list| grep node
ii libnode72:amd64 12.20.2~dfsg-2 amd64 evented I/O for V8 javascript - runtime library
ii nodejs 12.20.2~dfsg-2 amd64 evented I/O for V8 javascript - runtime executable

dpkg --list| grep cozy-sta
ii cozy-stack 2:1.4.26-1 amd64 Cozy: Simple, Versatile, Yours

Un retour sur nodejs 12.20.2-1nodesource1 ne résoud pas le problème, c’est plutôt du côté de cozy-stack qu’il faut regarder.

Je confirme qu’en revenant sur les versions données plus haut, nodejs:amd64 12.20.2-1nodesource1 et cozy-stack 1.4.25-2, ça fonctionne à nouveau.

On vient d’identifier le problème. Un correctif est sorti dans notre version 1.4.27.
Mettez à jour et tenez-nous au courant :blush:

2 Likes

Pour moi c’est résolu. Pas de problème avec la 1.4.27 et nodejs 15.11.0-1nodesource1

1 Like

J’ai crié victoire un peu vite, les connecteurs fortuneo (local) et free ont un comportement curieux.

Free ne se met plus à jour donne des erreurs telles que :

Mar 11 01:03:11 thishost cozy[3342]: time=“2021-03-11T01:03:11+01:00” level=error msg=“Cannot read property ‘location’ of undefined” domain=thishost job_id=960cc716a6e2381e22337e06d60146aa nspace=jobs slug=free worker_id=konnector/1
Mar 11 01:03:12 thishost cozy[3342]: time=“2021-03-11T01:03:12+01:00” level=error msg=“Stderr: (node:1) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.\n(Use nodejs --trace-deprecation ... to show where the warning was created)\n(node:1) [DEP0066] DeprecationWarning: OutgoingMessage.prototype._headers is deprecated\n” domain=thishost job_id=960cc716a6e2381e22337e06d60146aa nspace=jobs slug=free worker_id=konnector/1

(j’ai vérifié, aucun problème pour se connecter au site Espace abonné Freebox )

Pour fortuneo, il a cessé de se mettre à jour, affichait une erreur de connexion, et semble avoir repris l’acquisition des données :

Mar 11 01:06:14 thishost cozy[3342]: time=“2021-03-11T01:06:14+01:00” level=warning msg=“Failed to create global model:” domain=thishost. job_id=960cc716a6e2381e22337e06d60185f0 nspace=jobs slug=fortuneo worker_id=konnector/0
Mar 11 01:06:14 thishost cozy[3342]: time=“2021-03-11T01:06:14+01:00” level=warning msg="{“errors”:[{“status”:“404”,“title”:“Not Found”,“detail”:“wanted remote asset is not part of our asset list”,“source”:{}}]}" domain=thishost. job_id=960cc716a6e2381e22337e06d60185f0 nspace=jobs slug=fortuneo worker_id=konnector/0
[…]
Mar 11 01:09:39 thishost cozy[3342]: time=“2021-03-11T01:09:39+01:00” level=info msg=“Service success” domain=thishost exec_time=15.177233801s job_id=960cc716a6e2381e22337e06d60373f6 name=stats nspace=jobs slug=banks worker_id=service/2
Mar 11 01:10:10 thishost cozy[3342]: time=“2021-03-11T01:10:10+01:00” level=error msg=“Stderr: (node:1) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.\n(Use nodejs --trace-deprecation ... to show where the warning was created)\n” domain=thishost job_id=960cc716a6e2381e22337e06d60185f0 nspace=jobs slug=fortuneo worker_id=konnector/0

De mon côté tous les connecteurs sont revenus à la normale, même Free (Mobile et Fixe) et Fortuneo.

Les erreurs dont tu fais part sont “normales”, ou du moins j’ai les mêmes sans que ça n’affecte le bon fonctionnement des connecteurs :

  • DeprecationWarning: Buffer() is deprecated due to security and usability issues : ça ressemble à une lib nodejs qu’il ne faudrait plus utiliser.
  • Failed to create global model : c’est une histoire de modèle bancaire non géré en auto-hébergé (@orandin avait posé des questions là dessus il me semble).
  • {“errors”:[{“status”:“404”,“title”:“Not Found”,“detail”:“wanted remote asset is not part of our asset list”,“source”:{}}]} : je ne sais pas trop, mais j’ai la même.

Intéressant.

Le problème est persistant avec free (freebox uniquement ; free mobile fonctionne). En mode debug, on retrouve le “Cannot read property ‘location’ of undefined” de manière répétée au moment de l’échec. C’est peut-être sans rapport avec la mise-à-jour.

Hello,

En regardant le code du connecteur, on voit qu’il fait référence à plusieurs reprises au paramètre location des entêtes de réponse :

Ce qui m’ennuie un peu, c’est que je ne vois pas cette erreur sur notre infrastructure donc je ne sais pas trop si le souci est spécifique à ton compte Free ou à la configuration de ton serveur.
Je n’ai malheureusement pas plus de billes.

En testant sur mycozy.cloud, ça passe avec mon compte free. Donc le problème doit-être lié à ma configuration serveur.

Ce qui m’échappe, c’est quel aspect configuration serveur pourrait impacter ce paramètre location

Peut-être que tu peux essayer de faire tourner le connecteur en mode debug avec yarn standalone pour voir si tu as le même genre d’erreurs et essayer d’en apprendre un peu plus ?

Merci pour le conseil.
Ok, j’ai un peu regardé CLI - Cozy Developer Documentation et ai récupéré https://www.npmjs.com/package/cozy-jobs-cli
A ce stade, la marche à suivre n’est pas encore tout à fait claire pour moi (surtout que je n’ai pas trop envie de toucher au reste qui fonctionne et qui est plus essentiel que les factures freebox). Je vais continuer à regarder la doc et vérifier si je n’ai pas un problème de version de paquets installés (entre nodejs et le reste, vu les manips antérieures).

Tu auras un peu plus d’infos sur comment faire tourner un konnector en standalone dans la doc officielle : Basic structure - Cozy Developer Documentation

1 Like

Pas trop de succès dans les manips et j’ai un peu perdu le fil en m’occupant d’autres trucs.

Sur la page Espace abonné Freebox on a le js suivant qui est chargé https://subscribe.free.fr/login/js/vendor/jquery-3.4.1.min.js
Il comporte clairement le fameux “location”

Je pense que tu fais fausse route.
Le location auquel fait référence le message n’a rien à voir avec le contenu proprement dit du site.
Le connecteur fait des requêtes puis essaie d’accéder à l’entête Location de la réponse à la requête : res.header.location. Cannot read property 'location’ of undefined signifie de res.header n’est pas défini, donc probablement que la requête a échoué.

Est-ce que depuis la machine où s’exécute le connecteur, tu pourrais essayer de faire un : curl -i 'https://subscribe.free.fr/login/do_login.pl' --data-raw 'login=toto&pass=titi' pour voir si la requête passe ?

Ok, en faisant cette requête, c’est plus clair.

Dans le container dédié avec l’utilisateur cozy-stack (tout comme sur une autre machine du réseau avec un utilisateur non privilégié), ça me renvoie un :

HTTP/1.1 302 Found
Date: Mon, 29 Mar 2021 14:00:10 GMT
Server: Apache
Upgrade: h2
Connection: Upgrade
Location: https://adsl.free.fr/home.pl?id=26345270&idt=wLyffXF8aqj8PkEKZCl78ce2QW9lGWT8t3opU0QiS9lSdbL2Zeng0XpRdOLltyfc8KvZXymMCQ3Q2yIHZW3QUd
Strict-Transport-Security: max-age=31536000; includeSubdomains;
Transfer-Encoding: chunked
Content-Type: text/x-perl

Et le “location” du script, du coup, correspond à un lien direct vers une session valide, un Location au sens HTTP

Du coup, l’échec du connecteur n’est en tout cas pas un problème réseau.

Tu as bien la bonne redirection. Donc effectivement, je ne comprend pas pourquoi en Node ça ne passe pas :-S