53 votes

Erreurs Npm lors de l'installation de paquets sur un partage Windows

J'ai Ubuntu 12.10 qui tourne en tant qu'invité VMware sur mon hôte Windows 8.

J'ai partagé un dossier sur mon hôte Windows 8 et il est monté dans l'invité Ubuntu au démarrage en utilisant cette entrée dans fstab :

//myhost/work /work cifs credentials=/home/user/.smbcredentials,noserverino,nounix,uid=user,gid=user,file_mode=0777,dir_mode=0777 0 0 

Le partage fonctionne bien et peut être servi par un serveur web tel que nginx.

Cependant, il semble y avoir des problèmes lorsque j'installe des paquets node.js en utilisant npm, j'obtiens un tas d'erreurs comme celle-ci :

user@ubuntu:/work/test$ sudo npm install grunt
npm http GET https://registry.npmjs.org/grunt
npm http 304 https://registry.npmjs.org/grunt
...
npm ERR! error rolling back Error: ENOTEMPTY, rmdir '/work/test/node_modules/grunt/node_modules/lodash'
npm ERR! error rolling back  grunt@0.4.1 { [Error: ENOTEMPTY, rmdir '/work/test/node_modules/grunt/node_modules/lodash']
npm ERR! error rolling back   errno: 53,
npm ERR! error rolling back   code: 'ENOTEMPTY',
npm ERR! error rolling back   path: '/work/test/node_modules/grunt/node_modules/lodash' }
npm ERR! Error: UNKNOWN, symlink '../which/bin/which'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.5.0-26-generic
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "grunt"
npm ERR! cwd /work/test
npm ERR! node -v v0.10.0
npm ERR! npm -v 1.2.14
npm ERR! path ../which/bin/which
npm ERR! code UNKNOWN
npm ERR! errno -1
npm ERR! Error: ENOENT, chmod '/work/test/node_modules/grunt/node_modules/findup-sync/test/fixtures/aaa.txt'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.5.0-26-generic
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "grunt"
npm ERR! cwd /work/test
npm ERR! node -v v0.10.0
npm ERR! npm -v 1.2.14
npm ERR! path /work/test/node_modules/grunt/node_modules/findup-sync/test/fixtures/aaa.txt
npm ERR! fstream_path /work/test/node_modules/grunt/node_modules/findup-sync/test/fixtures/aaa.txt
npm ERR! fstream_type File
npm ERR! fstream_class FileWriter
npm ERR! fstream_finish_call chmod
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! fstream_stack /usr/lib/node_modules/npm/node_modules/fstream/lib/writer.js:305:19
npm ERR! fstream_stack Object.oncomplete (fs.js:93:15)
npm ERR! Error: ENOENT, lstat '/work/test/node_modules/grunt/node_modules/minimatch/test/basic.js'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.5.0-26-generic
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" "grunt"
npm ERR! cwd /work/test
npm ERR! node -v v0.10.0
npm ERR! npm -v 1.2.14
npm ERR! path /work/test/node_modules/grunt/node_modules/minimatch/test/basic.js
npm ERR! fstream_path /work/test/node_modules/grunt/node_modules/minimatch/test/basic.js
npm ERR! fstream_type File
npm ERR! fstream_class FileWriter
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! fstream_stack /usr/lib/node_modules/npm/node_modules/fstream/lib/writer.js:284:26
npm ERR! fstream_stack Object.oncomplete (fs.js:93:15)
npm ERR! Error: ENOENT, lstat '/work/test/node_modules/grunt/node_modules/glob/test/00-setup.js'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>
...
npm ERR! not ok code 0
user@ubuntu:/work/test$ 

Quelle pourrait être la cause de ce problème ? En ligne de commande, je peux chmod , rmdir entre autres choses en utilisant sudo sans aucun problème.

121voto

Chris Burgess Points 161

Courir avec --no-bin-links l'a réparé pour moi :

npm install --no-bin-links

--no-bin-links raconte npm pour ne pas créer de liens symboliques. Il n'existe pas (à ma connaissance) de moyen de traduire les liens symboliques vers un partage Windows.

6voto

WinEunuuchs2Unix Points 156

Comment autoriser la création de liens symboliques sous Windows cette page m'a beaucoup aidé et explique que cela se produit même si votre dossier partagé est accessible en écriture.

Pour résoudre ce problème, vous devez activer la fonctionnalité des liens symboliques dans VirtualBox.

Exécuter à l'invite cmd :

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

Vérifier ensuite par :

VBoxManage getextradata YOURVMNAME enumerate

Si votre utilisateur appartient au groupe Administrateurs, démarrez VirtualBox avec "Exécuter en tant qu'administrateur" !

Par défaut, la politique de sécurité de Windows 7 n'autorise pas la création de liens symboliques, car il s'agit d'une menace potentielle pour la sécurité. Exécutez "secpol.msc" et naviguez jusqu'à "Local Policies-User Rights Assignments" et ajoutez votre utilisateur à "Create symbolic links". Je n'ai pas essayé, mais il se peut qu'après cela, virtualbox puisse être exécuté en tant qu'utilisateur normal.

3voto

hao Points 141

D'accord avec lorem, mais ce n'est pas suffisant.

  1. exécuter Virtualbox "en tant qu'administrateur" sur Windows.

  2. s'assurer que vous avez exécuté : VBoxManage.exe setextradata YOUR_VM BoxInternal2/SharedFoldersEnableSymlinksCreate/YOUR_SHARED_FOLDER 1

Remplacez YOUR_VM et YOUR_SHARED_FOLDER par vos valeurs. Vous pouvez vérifier la valeur via : VBoxManage.exe getextradata boot2docker-vm enumerate

Il y a un bogue de virtualbox le suivi de cette question.

1voto

lorem monkey Points 111

Les versions les plus récentes de VirtualBox devraient autoriser les liens symboliques si vous démarrez VirtualBox en tant qu'administrateur (clic droit : Exécuter en tant qu'administrateur).

Il en va de même pour les boîtes vagrant : il suffit de lancer votre cmd.exe/PowerShell en tant qu'administrateur et vous êtes prêt à partir.

0voto

Chris B. Points 1

En ce problème npm @drmyersii a donné une excellente solution, je ne ferai qu'un copier-coller pour ne pas lier la réponse uniquement.

La véritable solution serait de configurer votre système de manière à permettre à les liens symboliques sur les hôtes Windows dans votre fichier Vagrant. Voici un exemple (en supposant que vous l'exécutez dans VirtualBox) :

config.vm.provider "virtualbox" do |v|
    v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant", "1"]
end

cela a très bien fonctionné pour moi et maintenant je peux utiliser gulp avec scotchbox .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X