使用VMware11設置CentOS共享文件夾


本以為裝個tomcat很容易,但是沒想到還是遇到了很多的問題,特此寫下這篇筆記,為其他有需求的同學提供一些參考。

系統環境:Windows7 + VMWare 11.0准備工具:CentOS 7安裝iso文件, apache tomcat以及JDK

操作步驟:

 

一、使用VMware安裝好CentOS系統

  這一步不作詳細敘述了,因為對大多數人來說太簡單。

二、設置共享文件夾

  由於在離線狀態下安裝,所以一些工具需要從宿主機的共享文件夾里復制到虛擬機里來,我采用的是設置共享文件夾的方式,不知道其他同學有沒有更好的方式。但就是在設置這個共享文件夾的時候出了很多的問題。

  我在安裝系統的時候,系統是默認自動安裝好VMtool的,但是不知道是什么原因,在我建立共享文件夾后,在/mnt/hgfs下沒有我存好的文件。於是我在網上查找了原因,有網友說是因為gcc版本需要升級,但是我這是離線安裝,gcc版本升級實在是不太好辦。於是我另想辦法,決定重新安裝vmtools。在vmware選項里選擇重新安裝vmtools,然后進行了以下步驟

  1.mount /dev/cdrom /mnt/cdrom將vmtools掛載到cdrom文件夾

  2.將cdrom中的VMTool的tar文件拷貝到本地磁盤,然后用tar -zxf VMTool 進行解壓

  3.解壓之后運行其中的.pl文件

  4.出現一些需要確認的問題,一路Enter

  5.這時候問題來了,突然提示HgfsWbRequestWait函數里有一個wait_on_bit函數報錯,具體的提示內容我沒有拷貝下來。然后提示你如果繼續請按Enter鍵,之后安裝完畢。看了一下hgfs文件夾,依然空空如也。

  6.用百度搜索了一些解決辦法,基本判定是vmtool的源代碼文件出了問題。這個文件的位置在之前解壓出來的vmware-tools-distrib/lib/modules/source目錄下的Page.c文件。

  7.引用CSDN的博主kyolong的文章,鏈接——http://blog.csdn.net/a39206821/article/details/54313326

  文中提到:

  

通過查看后發現因為centos 7的Linux內核用的3.10版本,在函數 wait_on_bit_io()中有三個參數,而vmtool的代碼在內核3.19后才用3個參數的wait_on_bit_io()函數,代碼如下

 1639 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) 1640 return wait_on_bit_io(&req->wb_flags, 1641 PG_BUSY, 1642 TASK_UNINTERRUPTIBLE); 1643 #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13) 1644 return wait_on_bit(&req->wb_flags, 1645 PG_BUSY, 1646 #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0) 1647 HgfsWbRequestWaitUninterruptible, 1648 #endif 1649 TASK_UNINTERRUPTIBLE); 1650 #else

 

個人推測,在其他linux版本中可能也會出現類是的問題,只要看看報錯源碼,如果是由於#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0),這種判斷造成的報錯,只要把宏改成當前的版本號,一般都能解決問題.

vmware-tools-distrib/lib/modules/source的目錄下有不少tar文件,我是根據報錯的提示
“/tmp/modconfig-71euqe/vmhgfs-only/page.c:1649:23: error: too many arguments to function ‘wait_on_bit’” 一個個去解壓了找的

解壓指令
tar xf vmhgfs.tar

修改目錄下的page文件的1639行

 1639 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)

改為如下↓

 1639 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)

解壓后修改完成打包指令
tar cf vmhgfs.tar vmhgfs-only

然后執行vmware-install.pl 問題解決

 

我按照這位博主的方法找到了這個文件,發現第1639行並不是文中的代碼,而是一串長長的注釋。於是我估計是版本的問題,我查了一下我使用的centos以及vmware的版本號,

uname -r 得到centos內核版本是3.10.0-514.e17.x86_64

cat /etc/redhat-release ,系統版本是 CentOS Linux release 7.3.1611 (Core)

Vmware版本是11.0.0 build-2305329

我又根據提示找到這個函數HgfsWbRequestWait

發現其實問題出在這

HgfsWbRequestWait(HgfsWbPage *req) // IN: request of page data to write
{
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
    return wait_on_bit(&req->wb_flags,PG_BUSY,
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0)
                                     HgfsWbRequestWaitUninterruptible,
#endif
                                     TASK_UNINTERRUPTIBLE);
#else
    wait_event(req->wb_quque,
                    !test_bit(PG_BUSY, &req->wb_flags));
    return 0;
#endif
}

在第1619行,我把

#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
    return wait_on_bit(&req->wb_flags,PG_BUSY, #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0) HgfsWbRequestWaitUninterruptible, #endif

改成了
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
    return wait_on_bit(&req->wb_flags,PG_BUSY, HgfsWbRequestWaitUninterruptibl
             TASK_UNINTERRUPTIBLE);

是的,我把這個大於3.17.0的版本判斷去掉了。因為我實在不理解為什么還要設置版本上限。

OK,打包壓縮包,重新安裝vmtool,沒有再出現這個提示,再看看/mnt/hgfs文件夾,發現里面已經有內容了。至此,用vmware共享文件夾終於完成。





 
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM