踐)
簡(jiǎn)介VMwareTools-10.3.2-9925305.tar 是面向在 VMware 平臺(tái)上運(yùn)行 Ubuntu 及其他 Linux 發(fā)行版用戶的一套虛擬化增強(qiáng)工具集版本號(hào) 10.3.2、構(gòu)建編號(hào) 9925305主要用于解決虛擬機(jī)性能偏低、圖形顯示受限、鼠標(biāo)無(wú)法無(wú)縫切換以及宿主機(jī)與虛擬機(jī)之間文件交換不便等問(wèn)題適合具備一定 Linux 基礎(chǔ)、需要長(zhǎng)期在虛擬機(jī)中開(kāi)發(fā)或測(cè)試的運(yùn)維與開(kāi)發(fā)人員。壓縮包為 gz 格式共含 1491 個(gè)文件整體約 52.92MB其中以 798 個(gè) .o 目標(biāo)文件、123 個(gè) .so 動(dòng)態(tài)庫(kù)、115 個(gè) .properties 配置、112 個(gè) .symvers 符號(hào)版本文件為主另含 25 個(gè) .sh 安裝腳本、11 個(gè) .conf 配置及 4 個(gè) .pl 腳本覆蓋內(nèi)核模塊、圖形加速、共享文件夾與電源管理等組件。目前已有 1436 人學(xué)習(xí)下載。借助該工具讀者可完成內(nèi)核模塊編譯與安裝獲得磁盤網(wǎng)絡(luò) I/O 優(yōu)化、OpenGL 與 3D 圖形加速、剪貼板共享與拖放、鼠標(biāo)無(wú)縫集成及掛起恢復(fù)等能力使虛擬機(jī)體驗(yàn)接近物理機(jī)。1. VMwareTools-10.3.2-9925305.tar一個(gè)老版本安裝包為什么還在被反復(fù)搜索如果你在 Linux 虛擬機(jī)里折騰過(guò)共享文件夾、拖拽復(fù)制、分辨率自適應(yīng)大概率繞不開(kāi) VMwareTools-10.3.2-9925305.tar 這個(gè)文件名。它不是一個(gè)新東西10.3.2 屬于 VMware Tools 的經(jīng)典分支9925305 是構(gòu)建號(hào)。很多人第一次看到它是在 ESXi 或 Workstation 的虛擬機(jī)菜單里點(diǎn)了“安裝 VMware Tools”然后系統(tǒng)掛載出一個(gè)虛擬光驅(qū)里面躺著的就是類似名字的 tar.gz 包。問(wèn)題在于現(xiàn)代 Linux 發(fā)行版越來(lái)越不歡迎這個(gè) tar 包內(nèi)核頭文件缺失、Perl 腳本報(bào)錯(cuò)、systemd 服務(wù)起不來(lái)一套組合拳下來(lái)新手直接懵。這篇筆記就圍繞這個(gè) tar 包把“它是什么、為什么還在用、怎么裝、參數(shù)怎么調(diào)、坑在哪”一次講透。適合手里有老系統(tǒng)、內(nèi)網(wǎng)隔離環(huán)境、或者必須用官方 tar 包而不是 open-vm-tools 的運(yùn)維和開(kāi)發(fā)人員。2. 先搞懂 VMwareTools-10.3.2-9925305.tar 里到底裝了什么2.1 解壓后看到的目錄結(jié)構(gòu)不是隨便擺的把 tar 包解開(kāi)你會(huì)看到vmware-tools-distrib目錄里面有幾個(gè)關(guān)鍵部分bin放的是安裝和配置腳本lib是 Perl 模塊和 Python 腳本doc是說(shuō)明文檔etc是配置文件模板vgauth負(fù)責(zé)認(rèn)證FILES和INSTALL是純文本說(shuō)明。安裝入口是vmware-install.pl一個(gè) Perl 腳本。它做的事情包括編譯內(nèi)核模塊vmhgfs、vmmemctl、vmxnet3 等、安裝用戶態(tài)守護(hù)進(jìn)程 vmtoolsd、注冊(cè) systemd 或 init 腳本、配置分辨率自適應(yīng)和共享文件夾。10.3.2 這個(gè)版本對(duì)內(nèi)核 4.x 和早期 5.x 支持較好但到了 5.10 以上尤其是 Ubuntu 20.04、CentOS 8 之后官方 tar 包里的內(nèi)核模塊源碼經(jīng)常編譯不過(guò)。這就是為什么很多人搜這個(gè)包卻卡在make階段。2.2 為什么不用 open-vm-tools 而要用這個(gè) tar 包常見(jiàn)做法是優(yōu)先用發(fā)行版自帶的 open-vm-tools它由社區(qū)維護(hù)內(nèi)核模塊跟著發(fā)行版內(nèi)核走省心。但有些場(chǎng)景必須用官方 tar 包第一內(nèi)網(wǎng)離線環(huán)境yum 或 apt 源不可用只能手動(dòng)傳 tar 包第二老舊的定制內(nèi)核open-vm-tools 沒(méi)有對(duì)應(yīng)預(yù)編譯模塊第三需要特定版本的 vmtoolsd 行為比如某些監(jiān)控代理依賴舊版 API。我一般會(huì)先試 open-vm-tools實(shí)在不行再上這個(gè) tar 包。如果你手里正好是 10.3.2-9925305先確認(rèn)內(nèi)核版本uname -r。如果是 3.10 或 4.4 這類老內(nèi)核成功率很高如果是 5.15 以上建議直接找更新的 tar 包或者用 open-vm-tools。2.3 安裝前必須補(bǔ)齊的編譯依賴tar 包安裝不是解壓就完事它要現(xiàn)場(chǎng)編譯內(nèi)核模塊。所以目標(biāo)機(jī)器上必須有g(shù)cc、make、kernel-headers、kernel-devel版本必須和uname -r完全一致。在 CentOS/RHEL 上# 先確認(rèn)內(nèi)核版本 uname -r # 安裝對(duì)應(yīng)版本的 kernel-devel 和 kernel-headers sudo yum install -y gcc make kernel-devel-$(uname -r) kernel-headers-$(uname -r) perl在 Ubuntu/Debian 上sudo apt update sudo apt install -y build-essential linux-headers-$(uname -r) perl邏輯說(shuō)明kernel-devel提供內(nèi)核頭文件和編譯腳本gcc和make是編譯工具perl是運(yùn)行vmware-install.pl的解釋器。參數(shù)說(shuō)明$(uname -r)會(huì)自動(dòng)替換成當(dāng)前運(yùn)行的內(nèi)核版本避免裝錯(cuò)版本導(dǎo)致編譯失敗。如果 yum 或 apt 找不到對(duì)應(yīng)版本說(shuō)明內(nèi)核更新過(guò)但沒(méi)重啟或者源里沒(méi)有該版本需要先解決依賴。3. 用 vmware-install.pl 在 Linux 上跑通安裝的完整命令3.1 解壓與首次運(yùn)行默認(rèn)選項(xiàng)能不能一路回車把 tar 包傳到虛擬機(jī)里比如/tmp目錄cd /tmp tar -zxvf VMwareTools-10.3.2-9925305.tar.gz cd vmware-tools-distrib sudo ./vmware-install.pl運(yùn)行后會(huì)進(jìn)入交互式問(wèn)答。第一個(gè)問(wèn)題通常是“是否接受默認(rèn)路徑”直接回車。接著會(huì)問(wèn)“是否運(yùn)行 vmware-config-tools.pl”也回車。但注意如果內(nèi)核頭文件缺失腳本會(huì)在編譯階段報(bào)錯(cuò)提示找不到include/linux/version.h或類似信息。這時(shí)候不要反復(fù)回車先退出補(bǔ)依賴再重新運(yùn)行。我一般會(huì)加-d參數(shù)讓它用默認(rèn)值減少交互sudo ./vmware-install.pl -d-d表示全部使用默認(rèn)答案。但默認(rèn)答案不一定適合你的環(huán)境比如共享文件夾是否啟用、分辨率是否自動(dòng)調(diào)整默認(rèn)可能不開(kāi)啟。所以第一次裝建議手動(dòng)過(guò)一遍看清楚每個(gè)問(wèn)題。3.2 編譯失敗時(shí)看哪一行日志如果安裝過(guò)程中斷屏幕上會(huì)打印類似The path is not a valid path to the 5.15.0-91-generic kernel headers.或者make: *** [Makefile:xxx: vmhgfs.ko] Error 2這時(shí)候不要慌先看/var/log/vmware-installer.log或者安裝目錄下的vmware-tools-distrib/log。常見(jiàn)原因是內(nèi)核頭文件路徑不對(duì)或者 gcc 版本太新老代碼編譯不過(guò)。對(duì)于 10.3.2 這個(gè)版本如果內(nèi)核是 5.x可能需要打補(bǔ)丁。一個(gè)血淚經(jīng)驗(yàn)在 Ubuntu 20.04 上直接裝 10.3.2vmhgfs 模塊大概率編譯失敗因?yàn)閮?nèi)核 API 變了。解決辦法是換用 open-vm-tools或者找社區(qū)補(bǔ)丁。如果必須用這個(gè) tar 包可以嘗試只安裝用戶態(tài)組件跳過(guò)內(nèi)核模塊sudo ./vmware-install.pl -d --without-kernel-modules這樣 vmtoolsd 能跑起來(lái)但共享文件夾和內(nèi)存氣球功能會(huì)缺失。參數(shù)說(shuō)明--without-kernel-modules告訴安裝腳本不編譯內(nèi)核模塊適合內(nèi)核不兼容但只需要基礎(chǔ)通信的場(chǎng)景。3.3 安裝后驗(yàn)證 vmtoolsd 是否真的在工作裝完不代表能用。先看服務(wù)狀態(tài)systemctl status vmtoolsd如果顯示 active (running)說(shuō)明守護(hù)進(jìn)程起來(lái)了。再檢查版本vmware-toolbox-cmd -v應(yīng)該輸出類似10.3.2.9925305。然后測(cè)試共享文件夾在 VMware 設(shè)置里添加一個(gè)主機(jī)目錄勾選“總是啟用”在虛擬機(jī)里執(zhí)行vmware-hgfsclient如果能看到共享名說(shuō)明 vmhgfs 模塊加載成功。如果命令不存在或報(bào)錯(cuò)說(shuō)明內(nèi)核模塊沒(méi)編譯進(jìn)去。最后看分辨率能不能自適應(yīng)在虛擬機(jī)里調(diào)整窗口大小如果桌面分辨率跟著變說(shuō)明 vmtoolsd 的顯示驅(qū)動(dòng)在工作。這三步都過(guò)了才算真正裝好。4. 避坑VMwareTools-10.3.2-9925305.tar 安裝中最容易翻車的 5 個(gè)點(diǎn)4.1 現(xiàn)象安裝腳本卡在“正在編譯內(nèi)核模塊”不動(dòng)原因內(nèi)核頭文件版本和當(dāng)前內(nèi)核不匹配或者 gcc 版本過(guò)高導(dǎo)致編譯死循環(huán)。解決先用uname -r確認(rèn)內(nèi)核再檢查/usr/src/kernels/下有沒(méi)有對(duì)應(yīng)目錄。如果沒(méi)有安裝kernel-devel-$(uname -r)。如果 gcc 是 10 以上嘗試降級(jí)到 gcc 9 或 8或者給老代碼打補(bǔ)丁。另一個(gè)可能是磁盤空間不足df -h看一下/usr/src和/tmp的剩余空間。4.2 現(xiàn)象共享文件夾設(shè)置好了但 /mnt/hgfs 是空的原因vmhgfs 模塊沒(méi)有加載或者掛載點(diǎn)沒(méi)配置。解決先lsmod | grep vmhgfs如果沒(méi)有輸出手動(dòng)加載modprobe vmhgfs。如果加載失敗看dmesg | tail里的錯(cuò)誤。常見(jiàn)錯(cuò)誤是“Unknown symbol”或“Invalid module format”說(shuō)明模塊和內(nèi)核不兼容。這時(shí)候只能重新編譯或換 open-vm-tools。如果模塊加載了但目錄還是空檢查/etc/fstab里有沒(méi)有自動(dòng)掛載項(xiàng)或者手動(dòng)掛載vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other。4.3 現(xiàn)象分辨率不能自適應(yīng)桌面顯示很小或很大原因vmtoolsd 沒(méi)有正確識(shí)別顯示設(shè)備或者 Xorg 配置沒(méi)更新。解決先確認(rèn)vmware-toolbox-cmd -v有輸出。然后檢查/etc/X11/xorg.conf是否存在老版本 tar 包會(huì)生成這個(gè)文件但新發(fā)行版可能不需要。如果存在嘗試重命名后重啟顯示管理器sudo mv /etc/X11/xorg.conf /etc/X11/xorg.conf.bak然后sudo systemctl restart gdm或lightdm。另外確保虛擬機(jī)設(shè)置里“加速 3D 圖形”沒(méi)有強(qiáng)制開(kāi)啟有些老驅(qū)動(dòng)和 3D 加速?zèng)_突。4.4 現(xiàn)象安裝完重啟后網(wǎng)絡(luò)不通了原因tar 包會(huì)替換 vmxnet3 網(wǎng)卡驅(qū)動(dòng)如果編譯出的驅(qū)動(dòng)有問(wèn)題網(wǎng)卡就起不來(lái)。解決在虛擬機(jī)設(shè)置里把網(wǎng)卡類型臨時(shí)改成 e1000進(jìn)入系統(tǒng)后卸載 vmware-tools換 open-vm-tools?;蛘哂每煺栈貪L。血淚經(jīng)驗(yàn)裝這個(gè) tar 包之前一定打快照尤其是生產(chǎn)環(huán)境。如果已經(jīng)斷網(wǎng)嘗試在控制臺(tái)里sudo dhclient ens192手動(dòng)獲取 IP或者檢查/etc/sysconfig/network-scripts/下的網(wǎng)卡配置有沒(méi)有被改動(dòng)。4.5 現(xiàn)象卸載時(shí)提示“找不到安裝記錄”無(wú)法干凈卸載原因安裝腳本把記錄寫到了/etc/vmware-tools和/usr/lib/vmware-tools如果手動(dòng)刪過(guò)文件卸載程序就找不到。解決用vmware-install.pl -u嘗試卸載如果失敗手動(dòng)清理先停服務(wù)systemctl stop vmtoolsd然后刪除/usr/bin/vmware-*、/usr/lib/vmware-tools、/etc/vmware-tools最后rmmod相關(guān)模塊。注意不要?jiǎng)h掉 open-vm-tools 的文件兩者可能共存導(dǎo)致沖突。清理完重啟再裝 open-vm-tools 更穩(wěn)妥。5. 進(jìn)階只提取 tar 包里的 vmtoolsd 做最小化部署有時(shí)候你不需要完整安裝只想把 vmtoolsd 這個(gè)二進(jìn)制拿出來(lái)放到一個(gè)極簡(jiǎn)容器或 initramfs 里用來(lái)和宿主機(jī)通信。10.3.2 的 tar 包里vmware-tools-distrib/lib/bin64/下面有編譯好的 vmtoolsd但它是動(dòng)態(tài)鏈接的依賴libvmtools.so和系統(tǒng)庫(kù)。直接拷貝到別的機(jī)器可能跑不起來(lái)。我一般會(huì)這樣做先在相同發(fā)行版的機(jī)器上完整安裝一次然后用ldd看依賴ldd /usr/bin/vmtoolsd把依賴的庫(kù)和 vmtoolsd 一起打包放到目標(biāo)機(jī)器的/opt/vmware-tools/下寫一個(gè)簡(jiǎn)單的 systemd unit[Unit] DescriptionVMware Tools Daemon (minimal) Afternetwork.target [Service] ExecStart/opt/vmware-tools/vmtoolsd Restarton-failure [Install] WantedBymulti-user.target邏輯說(shuō)明ExecStart指向你拷貝過(guò)來(lái)的 vmtoolsd 路徑Restart保證崩潰后自動(dòng)拉起。參數(shù)說(shuō)明如果 vmtoolsd 需要配置文件默認(rèn)會(huì)讀/etc/vmware-tools/tools.conf沒(méi)有也能跑只是部分功能用不了。這種最小化部署適合只想要 IP 上報(bào)和優(yōu)雅關(guān)機(jī)功能的場(chǎng)景共享文件夾和分辨率自適應(yīng)就別指望了。驗(yàn)證方法啟動(dòng)服務(wù)后在宿主機(jī)上用vmware-toolbox-cmd stat sessionid看能不能拿到會(huì)話 ID能拿到就說(shuō)明通信正常。最后一個(gè)習(xí)慣每次裝完這個(gè) tar 包我都會(huì)把vmware-install.pl的交互答案記下來(lái)下次直接-d加一個(gè) answer file省得重復(fù)踩坑。老版本 tar 包就像一盒巧克力你永遠(yuǎn)不知道下一個(gè)內(nèi)核編譯錯(cuò)誤是什么。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取