Erreur à l'installation de node-sass : mauvais "binding" ?

Le problème exposé dans ce sujet a été résolu.

Bonjour !

Je suis en train de me (re-)prendre la tête avec l’installation de dépendances Node.js, que je connais très peu — au plus je sais utiliser ce qui est utilisé par le projet.

Depuis une mise à jour du repository (remplacé ruby-sass par gulp-sass, mise à jour de Capistrano 1 vers 2), je n’arrive plus à installer les versions requises des dépendances, apparemment à cause de node-sass. Voici une partie des logs d’installation.

Extraits de log et de message d’erreur
$ npm install

> node-sass@4.9.0 install /var/www/a_project/node_modules/node-sass
> node scripts/install.js

fs.js:646
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                 ^

Error: EINVAL: invalid argument, open '/var/www/a_project/node_modules/node-sass/package.json'
    at Object.fs.openSync (fs.js:646:18)
    at Object.fs.readFileSync (fs.js:551:33)
    at Object.Module._extensions..json (module.js:669:20)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/var/www/a_project/node_modules/node-sass/lib/extensions.js:7:9)
    at Module._compile (module.js:652:30)
npm WARN rollback Rolling back glob@7.1.2 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/node-sass/node_modules/glob'
npm WARN rollback Rolling back minimatch@3.0.4 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/node-sass/node_modules/minimatch'
npm WARN rollback Rolling back get-caller-file@1.0.2 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/get-caller-file'
npm WARN rollback Rolling back mime-db@1.33.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/mime-db'
npm WARN rollback Rolling back mime-types@2.1.18 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/mime-types'
npm WARN rollback Rolling back globule@1.2.1 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/node-sass/node_modules/globule'
npm WARN rollback Rolling back hosted-git-info@2.6.1 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/hosted-git-info'
npm WARN rollback Rolling back ecc-jsbn@0.1.1 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/ecc-jsbn'
npm WARN rollback Rolling back gaze@1.1.3 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/node-sass/node_modules/gaze'
npm WARN rollback Rolling back lodash@4.17.10 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/node-sass/node_modules/lodash'
npm WARN rollback Rolling back commander@2.15.1 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/har-validator/node_modules/commander'
npm WARN rollback Rolling back node-sass@4.9.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/node-sass/node_modules/gaze'
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! node-sass@4.9.0 install: `node scripts/install.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the node-sass@4.9.0 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/vagrant/.npm/_logs/2018-07-30T13_40_30_657Z-debug.log

Dans le fichier de log mentionné à la fin de la commande ci-dessus, j’ai ceci (extrait) :

silly install node-sass@4.9.0
info lifecycle node-sass@4.9.0~install: node-sass@4.9.0
verbose lifecycle node-sass@4.9.0~install: unsafe-perm in lifecycle true
verbose lifecycle node-sass@4.9.0~install: PATH: /usr/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/var/www/a_project/node_modules/node-sass/node_modules/.bin:/var/www/a_project/node_modules/.bin:/usr/local/rvm/gems/ruby-2.4.1/bin:/usr/local/rvm/gems/ruby-2.4.1@global/bin:/usr/local/rvm/rubies/ruby-2.4.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin:/usr/local/rvm/bin:/home/vagrant/bin
verbose lifecycle node-sass@4.9.0~install: CWD: /var/www/a_project/node_modules/node-sass
silly lifecycle node-sass@4.9.0~install: Args: [ '-c', 'node scripts/install.js' ]
silly lifecycle node-sass@4.9.0~install: Returned: code: 1  signal: null
info lifecycle node-sass@4.9.0~install: Failed to exec install script
timing action:install Completed in 309ms
verbose unlock done using /home/vagrant/.npm/_locks/staging-7792380f2eb16a1b.lock for /var/www/a_project/node_modules/.staging
warn rollback Rolling back glob@7.1.2 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/node-sass/node_modules/glob'
warn rollback Rolling back minimatch@3.0.4 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/node-sass/node_modules/minimatch'
warn rollback Rolling back get-caller-file@1.0.2 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/get-caller-file'
warn rollback Rolling back mime-db@1.33.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/mime-db'
warn rollback Rolling back mime-types@2.1.18 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/mime-types'
warn rollback Rolling back globule@1.2.1 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/node-sass/node_modules/globule'
warn rollback Rolling back hosted-git-info@2.6.1 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/hosted-git-info'
warn rollback Rolling back ecc-jsbn@0.1.1 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/ecc-jsbn'
warn rollback Rolling back gaze@1.1.3 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/node-sass/node_modules/gaze'
warn rollback Rolling back lodash@4.17.10 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/node-sass/node_modules/lodash'
warn rollback Rolling back commander@2.15.1 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/har-validator/node_modules/commander'
warn rollback Rolling back node-sass@4.9.0 failed (this is probably harmless): ENOTEMPTY: directory not empty, rmdir '/var/www/a_project/node_modules/node-sass/node_modules/gaze'

Le truc, c’est que à part le fait qu’il y a apparemment un problème de permissions (alors que même avec node_modules de vidé, j’ai le même souci), je ne vois absolument pas ce qui gêne. Les dossiers sont créés avec les droits 777, apparemment. Qu’il émette un WARNING, j’aurais compris, mais si c’est à cause de ça qu’il ne veut pas installer node-sass alors qu’il n’a aucun souci pour les autres (sous-)dépendances, ça me dépasse…

Est-ce qu’un dev familier de l’outil pourrait m’aider ?

Merci d’avance  :)

+0 -0

Tu penses que deux patches de différence dans les versions de Node, ça peut poser problème à ce point ? Pour une raison qui m’échappe, impossible de provisionner ma vagrant (Ubuntu 16.04) avec une version 8.11.1 qui est celle de l’ordinateur source. J’ai systématiquement une 8.11.3, je vais voir pour désinstaller et réinstaller à la main.

J’aime bien les devs front quand ils te disent qu’ils ne font rien de technique, et je les retiens quand ils te disent "rien à installer sinon Vagrant et VirtualBox, après tu fais vagrant up et tu as tout", surtout quand après c’est "Ah mais oui, ça il faut installer à part"… Et le must, c’est "Ben je me souviens plus".

Edit

A la main, il ne me trouve même pas la version 8.11.3…

+0 -0

Normalement pour des patchs ça devrait pas trop poser de problème. Des versions mineures par contre oui, beaucoup trop souvent à mon goût.

Sinon essaie d’installer manuellement node-sass explicitement, avant le reste, voir ce qu’il dit (limite en global).


Je suis (principalement) dev front, t’imagines pas le temps que je passe à faire du Docker, du SSH et autres process pour que tout ce bordel fonctionne. 😁

Le hic, c’est que c’est déclaré comme une dépendance locale, et la recette capistrano tente de l’installer en local.

Et impossible d’installer node-sass globalement, que ce soit avec l’utilisateur vagrant (au temps pour moi, je peux installer globalement avec lui, mais comme mentionné dans la première phrase du message, ça ne résout pas le problème), avec sudo ou ayant fait sudo -su, même en tentant de re-provisionner : j’ai systématiquement des soucis de droits d’accès à un sous-dossier, comme si npm les créait sans se mettre les droits d’accès. J’ai bien l’impression que la distrib Vagrant de départ n’était pas terrible, mais j’y ai toute une partie serveur qui fonctionne bien après tout le temps que j’y ai passé…


Oh, je pense que j’imagine au moins un peu. Il m’a fallu plus d’un mois pour que ma vagrant depuis un .vagrantfile "prêt à l’emploi" soit fonctionnelle. Et après la mise à jour, « mais tu n’as qu’à faire bundle install, et tout ira bien ». Si ce n’est que je ne peux plus utiliser l’outil de déploiement depuis près de deux mois à cause de ce que "tout va bien", et que je ne vois pas en quoi mettre à jour les gems ruby allait installer node-sass pour le remplacer…

+0 -0

Après avoir creusé un peu plus, je finis par me dire que l’environnement que j’ai, même si à quelques numéros de patch près des outils c’est le même que celui de la personne qui a fait la mise à jour, ne contient pas certaines variables d’environnement qui doivent faire toute la différence.

Plus je me renseigne sur ce binding.open, et plus je me dis que la version de node-sass qui est tentée d’être installée (4.9.0) pourrait ne pas/plus être compatible avec la version de Node.js (node -v m’affiche v8.11.3). Une des alternative que je verrais, c’est que vu que j’utilise Vagrant sur une machine Windows avec un partage Samba, le temps que le fichier package.json soit créé et/ou rempli, l’installation tente déjà d’y accéder et n’y arrive justement pas — parce que le fichier, j’ai pu en voir le contenu à un moment, juste avant le rollback. La dernière serait que c’est l’OS de la vagrant qui n’est pas le même et que ça joue un quelconque rôle.

+0 -0

Je n’arrive pas vraiment à tracer l’erreur, tout ce que j’ai est cité dans le premier message. Ne connaissant pas ces outils, je ne sais pas s’il y a moyen d’avoir plus.

Au passage, histoire de développer le contexte :

  • je suis sur une machine Windows (10 pro x64), où je fais tourner le projet avec un WampServer, aucun souci connu à ce jour ;
  • j’ai une machine virtuelle Vagrant sous Ubuntu 16.04 (x64), sur laquelle j’ai un redis, un ElasticSearch et un RabbitMQ qui tournent, ainsi que les outils comme gulp et capistrano. Node.js est installé là-dessus.

Edit

Histoire de tester, j’ai fait en sorte de placer le package.json dont j’avais pu voir le contenu là où le chemin l’indiquait, et relancer l’installation. Et là, ça fonctionne. Je penche donc plus vers une histoire d’accès concourrant ou "trop précipité". Maintenant, comment régler le problème dans la recette capistrano…

+0 -0

Après tout ce temps, le problème est redevenu plus gênant, mais j’ai pu trouver une solution.

En me baladant par là-bas, j’ai trouvé le lien vers cet outil.

Cela ne me permet pas d’utiliser la recette de déploiement avec Capistrano 2 (historiquement avec rsync), mais ça tombe bien, on souhaite utiliser Capistrano 3 et tout faire en distant. Il ne resterait plus qu’à mettre à jour les versions de Node (4.2.6) et de npm (3.5.2) sur les serveurs.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte