我的 Windows 8 主机上已将 Ubuntu 12.10 作为 VMware 客户机运行。
我已经在 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 等网络服务器提供服务。
但是,当我使用 npm 安装 node.js 包时似乎出现问题,出现一堆如下错误:
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 [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
user@ubuntu:/work/test$
什么原因导致了这个问题?从命令行,我可以chmod
使用rmdir
sudo 等,没有任何问题。
答案1
运行并--no-bin-links
修复了这个问题:
npm install --no-bin-links
--no-bin-links
告诉npm
不要创建任何符号链接。
有时,对于某些即使使用该--no-bin-links
指令也会创建符号链接的软件包,或者在使用该指令导致其他错误的情况下,您可以使用以下命令从显示错误的软件包中删除符号链接:
npm unlink <package>
绝对没有办法将符号链接转换为 Windows 共享。
答案2
如何允许在 Windows 上创建符号链接这一页对我帮助很大,这解释了即使你的共享文件夹是可写的,也会发生这种情况。
要修复此问题,您需要在 VirtualBox 中启用符号链接功能。
在 cmd 提示符下运行:
VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1
然后通过以下方式验证:
VBoxManage getextradata YOURVMNAME enumerate
如果您的用户属于管理员组,则使用“以管理员身份运行”启动 VirtualBox!
默认情况下,Windows 7 安全策略不允许创建符号链接,因为这是一个潜在的安全威胁。运行“secpol.msc”并导航到“本地策略-用户权限分配”,然后将您的用户添加到“创建符号链接”。我没有尝试过,但之后 virtualbox 可能会以普通用户身份运行。
答案3
同意lorem,但是这还不够。
在 Windows 上以管理员身份运行 Virtualbox。
确保你执行了:
VBoxManage.exe setextradata YOUR_VM BoxInternal2/SharedFoldersEnableSymlinksCreate/YOUR_SHARED_FOLDER 1
将 YOUR_VM 和 YOUR_SHARED_FOLDER 替换为您的值。您可以通过以下方式检查值:VBoxManage.exe getextradata boot2docker-vm enumerate
有一个虚拟机错误跟踪此问题。