環境:
基於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 修改為自己設置的共享目錄名稱 master_default_1517988860839_41143,即下圖中我的共享目錄的名稱 home_gopath_src_。
所以正式命令如下:
VBoxManage setextradata master_default_1517988860839_41143 VBoxInternal2/SharedFoldersEnableSymlinksCreate/home_gopath_src_ 1
執行驗證就可以看到我們的設置的key/value 值信息:
C:\Windows\system32>VBoxManage getextradata master_default_1517988860839_41143 enumerate Key: GUI/LastCloseAction, Value: PowerOff Key: GUI/LastNormalWindowPosition, Value: 208,97,720,445 Key: GUI/RestrictedRuntimeDevicesMenuActions, Value: HardDrives Key: GUI/RestrictedRuntimeMachineMenuActions, Value: SaveState,PowerOff Key: GUI/StatusBar/IndicatorOrder, Value: HardDisks,OpticalDisks,FloppyDisks,Network,USB,SharedFolders,Display,VideoCapture,Features,Mouse,Keyboard Key: VBoxInternal2/SharedFoldersEnableSymlinksCreate/home_gopath_src_, Value: 1 Key: VBoxInternal2/SharedFoldersEnableSymlinksCreate/usr_share_nginx_html_, Value: 1 Key: VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant, Value: 1
說明已經設置成功了。
- 使用 vagrant up 啟動,繼續編譯
發現,編譯過程依然報最初的錯誤,想到我們之前使用管理員權限執行的命令,因此,我們執行vagrant命令的時候也嘗試使用管理員權限執行(使用管理員權限打開 cmd 即可,其余操作不變),OK,沒有問題,編譯成功。
PS.在這種情況下,要在 VBox 中查看虛擬機的運行情況,也需要使用使用管理員權限打開虛擬機,不然看到運行情況是停止狀態。
以上