环境:

基于VBox 的 vagrant (centos版本)开发环境。

问题:

Virtualbox 虚拟机(centOS)中,在进行go程序编译的时候,需要设置一个链接符,然后得到了如下的错误:

ln: failed to create symbolic link ‘/home/gopath/src/k8s.io/kubernetes/_output/local/go/src/k8s.io/kubernetes’: Protocol error

查证:

经过排查,发现这是因为这 VirtualBox 从安全角度出发,限制了共享文件夹软链接的创建,从而导致了该问题的发生。因此我们解决问题的入口就要确定在如何解决共享文件夹可创建软链接权限的问题。

解决:

关闭VBox
将VBox的安装目录添加到环境变量 PATH 中,通常VirtualBox在安装时,一般会在环境变量中自动创建名为VBOX_MSI_INSTALL_PATH的系统变量,将此变量添加到系统环境变量PATH中即可。
在这里插入图片描述
在这里,我直接往PATH目录中添加安装目录了:

在这里插入图片描述
使用管理员权限打开cmd程序:

右键选择管理员权限即可。
运行如下命令:

VBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

PS:YOURVMNAME修改为自己虚拟机中linux系统的名称,即VirtualBox管理器左边列表中显示的虚拟机名称。YOURSHAREFOLDERNAME 修改为自己设置的共享目录名称 web-meiyou-wjt_default_1530530557254_91388,即下图中我的共享目录的名称 home_gopath_src_。

在这里插入图片描述
所以正式命令如下:

VBoxManage setextradata web-meiyou-wjt_default_1530530557254_91388 VBoxInternal2/SharedFoldersEnableSymlinksCreate/srv_www 1

执行验证就可以看到我们的设置的key/value 值信息:

复制代码

C:\Windows\system32>  VBoxManage getextradata web-meiyou-wjt_default_1530530557254_91388  enumerate

在这里插入图片描述

复制代码
说明已经设置成功了。

使用 vagrant up 启动,继续编译
发现,编译过程依然报最初的错误,想到我们之前使用管理员权限执行的命令,因此,我们执行vagrant命令的时候也尝试使用管理员权限执行(使用管理员权限打开 cmd 即可,其余操作不变),OK,没有问题,编译成功。

PS.在这种情况下,要在 VBox 中查看虚拟机的运行情况,也需要使用使用管理员权限打开虚拟机,不然看到运行情况是停止状态。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐