У меня Ubuntu 12.10 работает в качестве гостя VMware на моем хосте Windows 8.
У меня есть общая папка на моем хосте Windows 8, и она запускается в гостевой системе Ubuntu при запуске, используя следующую запись в fstab
:
//myhost/work /work cifs credentials=/home/user/.smbcredentials,noserverino,nounix,uid=user,gid=user,file_mode=0777,dir_mode=0777 0 0
. веб-сервером, таким как nginx.
Однако, кажется, что при установке пакетов node.js с использованием npm возникают проблемы, и я получаю кучу таких ошибок:
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$
Что может быть причиной этой проблемы? Из командной строки я могу chmod
, rmdir
среди прочего использовать sudo без каких-либо проблем.
Как разрешить создание символических ссылок в Windows , эта страница мне очень помогла, что объясняет, что это происходит, даже если ваша общая папка доступна для записи.
Чтобы исправить это, вам нужно включить функцию символических ссылок в VirtualBox.
Запустите команду cmd:
VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1
Затем проверьте:
VBoxManage getextradata YOURVMNAME enumerate
Если ваш пользователь входит в группу администраторов, запустите VirtualBox с помощью «Запуск от имени администратора»!
По умолчанию политика безопасности Windows 7 не позволяет создавать символические ссылки, поскольку это потенциальная угроза безопасности. Запустите «secpol.msc» и перейдите к «Локальные политики-Назначения прав пользователя» и добавьте своего пользователя в «Создание символических ссылок». Я не пробовал этого, но могло случиться так, что после того, как тот виртуальный ящик мог быть запущен как обычный пользователь. BLOCKQUOTE>
Запуск с --no-bin-links
исправил это для меня:
npm install --no-bin-links
--no-bin-links
говорит npm
не создавать никаких символических ссылок. Насколько мне известно, не существует способа перевода символических ссылок в общий ресурс Windows.
В более новых версиях VirtualBox должны быть разрешены символические ссылки, если вы запускаете VirtualBox от имени администратора (щелкните правой кнопкой мыши: «Запуск от имени администратора»).
То же самое относится и к бродячим коробкам: просто запустите cmd.exe / PowerShell от имени администратора, и все готово.
Для меня ни один из этих ответов не сработал. Я не уверен, почему, но я верю, что это потому, что моя доля NFS. Поэтому я не мог разрешить использовать символические ссылки даже при запуске от имени администратора и изменении настроек setextradata. Я работал с gulp и некоторыми другими пакетами, у которых, похоже, есть проблемы , подчиняющиеся --no-bin-links. Это все еще пытался создать несколько символических ссылок и, очевидно, потерпел неудачу. Наконец, эта тема на Github подтолкнула меня к «решению», каким бы хакерским оно ни было. Я «просто» установил проект в свою папку без общего доступа и установил его как NODEPATH.
export NODE_PATH=/home/vagrant/PROJECTNAME/node_modules
Предостережение заключается в том, что это повлияет на весь сервер и рабочий процесс обновления / изменения упаковки.
Согласитесь с Лоремом, но этого недостаточно.
запускать Virtualbox «как администратор» в Windows.
убедитесь, что вы выполнили: VBoxManage.exe setextradata YOUR_VM BoxInternal2/SharedFoldersEnableSymlinksCreate/YOUR_SHARED_FOLDER 1
Замените YOUR_VM и YOUR_SHARED_FOLDER вашими значениями. Вы можете проверить значение с помощью: VBoxManage.exe getextradata boot2docker-vm enumerate
Существует ошибка виртуальной коробки , отслеживающая эту проблему.
в этот выпуск npm @drmyersii дает отличное решение, я буду только копировать и вставлять, чтобы не связать только ответ.
Реальным решением здесь было бы установить вашу конфигурацию, чтобы разрешить символические ссылки на хосты Windows в вашем Vagrantfile. Вот пример (при условии, что вы запускаете его в VirtualBox):
blockquote>config.vm.provider "virtualbox" do |v| v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant", "1"] end
это отлично сработало для меня, и теперь я могу использовать gulp с scotchbox .