本以為裝個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共享文件夾終於完成。