it-swarm.com.de

Npm-Fehler beim Installieren von Paketen unter Windows Share

Ich habe Ubuntu 12.10 als VMware-Gast auf meinem Windows 8-Host.

Ich habe einen Ordner auf meinem Windows 8-Host freigegeben und dieser wird beim Start im Ubuntu-Gast mit diesem Eintrag in fstab bereitgestellt:

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

Die Freigabe funktioniert einwandfrei und kann von einem Webserver wie nginx bedient werden.

Es scheint jedoch Probleme zu geben, wenn ich node.js-Pakete mit npm installiere. Ich erhalte eine Reihe von Fehlern wie die folgende:

[email protected]:/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  [email protected] { [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!     <[email protected]>

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!     <[email protected]>

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!     <[email protected]>

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!     <[email protected]>
...
npm ERR! not ok code 0
[email protected]:/work/test$ 

Was könnte dieses Problem verursachen? Von der Kommandozeile aus kann ich chmod, rmdir unter anderem mit Sudo ohne Probleme.

52
F21

Laufen mit --no-bin-links hat das für mich behoben:

npm install --no-bin-links

--no-bin-links weist npm an, keine symbolischen Links zu erstellen. Meines Wissens gibt es keine Möglichkeit, Symlinks in eine Windows-Freigabe zu übersetzen.

117
F21

Wie man das Erstellen von Symlinks unter Windows zulässt diese Seite hat mir sehr geholfen, was erklärt, dass dies auch dann geschieht, wenn Ihr freigegebener Ordner beschreibbar ist.

Um dies zu beheben, müssen Sie die Symlinks-Funktion in VirtualBox aktivieren.

Führen Sie an der Eingabeaufforderung cmd aus:

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

Dann überprüfen Sie durch:

VBoxManage getextradata YOURVMNAME enumerate

Wenn Ihr Benutzer zur Gruppe Administratoren gehört, starten Sie VirtualBox mit "Als Administrator ausführen"!

Standardmäßig können in der Windows 7-Sicherheitsrichtlinie keine Symlinks erstellt werden, da dies eine potenzielle Sicherheitsbedrohung darstellt. Führen Sie "secpol.msc" aus und navigieren Sie zu "Zuweisung lokaler Richtlinien - Benutzerrechte". Fügen Sie Ihren Benutzer zu "Symbolische Links erstellen" hinzu. Ich habe das nicht ausprobiert, könnte es aber sein, dass die virtualbox danach als normaler Benutzer ausgeführt werden kann.

6
matiangul

Stimmen Sie mit Lorem überein, aber es ist nicht genug.

  1. führen Sie Virtualbox unter Windows als Administrator aus.

  2. stellen Sie sicher, dass Sie ausgeführt haben: VBoxManage.exe setextradata YOUR_VM BoxInternal2/SharedFoldersEnableSymlinksCreate/YOUR_SHARED_FOLDER 1

Ersetzen Sie YOUR_VM und YOUR_SHARED_FOLDER durch Ihre Werte. Sie können den Wert folgendermaßen überprüfen: VBoxManage.exe getextradata boot2docker-vm enumerate

Es gibt einen Virtualbox-Fehler das Verfolgen dieses Problems.

3
hao

Die neueren Versionen von VirtualBox sollten Symlinks zulassen, wenn Sie VirtualBox als Administrator starten (Rechtsklick: Als Administrator ausführen).

Gleiches gilt für Vagrant-Boxen: Führen Sie einfach Ihre cmd.exe/PowerShell als Administrator aus und Sie können loslegen.

1
lorem monkey

in diese Npm-Ausgabe @drmyersii geben eine großartige Lösung, ich werde nur kopieren und einfügen, um nicht nur die Antwort zu verknüpfen.

Die wirkliche Lösung hier wäre, Ihre Konfiguration so einzustellen, dass Symlinks auf Windows-Hosts in Ihrem Vagrantfile zugelassen werden. Hier ist ein Beispiel (unter der Annahme, dass Sie es in VirtualBox ausführen):

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

das hat bei mir super geklappt und jetzt kann ich schlucken mit scotchbox .

0
Edu Ruiz

Bei mir hat keine dieser Antworten funktioniert. Ich bin nicht sicher warum, aber ich glaube, es liegt daran, dass mein Anteil nfs ist. Daher konnte ich Symlinks nicht zulassen, selbst wenn ich als Administrator ausgeführt wurde und die setextradata-Einstellungen änderte. Ich habe mit gulp und einigen anderen Paketen gearbeitet, die anscheinend ProblemeBefolgung --no-bin-links haben. Es war STILL versucht, einige symbolische Verknüpfungen zu erstellen und offensichtlich fehlgeschlagen. Schließlich hat mich dieser Thread auf Github zu einer "Lösung" verleitet, so abgedreht es auch sein mag. Ich habe das Projekt "einfach" in meinem nicht freigegebenen Ordner installiert und als NODEPATH festgelegt.

export NODE_PATH=/home/vagrant/PROJECTNAME/node_modules

Der Vorbehalt betrifft den gesamten Server und den Arbeitsablauf beim Aktualisieren/Ändern der Verpackung.

0
Melissa