
簡(jiǎn)介這套工具集由VMware官方提供是適用于Ubuntu及其他Linux發(fā)行版的VMware Tools 10.3.2安裝包構(gòu)建編號(hào)9925305面向在VMware Workstation/ESXi等平臺(tái)使用虛擬機(jī)的運(yùn)維人員與開(kāi)發(fā)者。安裝后可顯著提升虛擬硬件性能、圖形顯示、鼠標(biāo)切換與文件共享體驗(yàn)尤其適合需要改善虛擬機(jī)卡頓、分辨率異?;驘o(wú)法拖放文件的場(chǎng)景同時(shí)可解決時(shí)鐘漂移與電源聯(lián)動(dòng)問(wèn)題。壓縮包約52.92MB內(nèi)含1491個(gè)文件以.o目標(biāo)文件、.so動(dòng)態(tài)庫(kù)、.properties配置、.symvers符號(hào)表及shell腳本為主并包含vmware-tools-distrib目錄與vmware-install-tools.pl安裝腳本整體結(jié)構(gòu)完整便于直接部署。目前已有1433人學(xué)習(xí)下載。借助該工具包用戶可完成內(nèi)核模塊加載、3D圖形加速、共享剪貼板、拖放傳輸及電源聯(lián)動(dòng)等配置讓Ubuntu虛擬機(jī)獲得接近物理主機(jī)的操作體驗(yàn)。1. 先搞清楚手里這個(gè) tar 包到底是什么1.1 VMware Tools 10.3.2 解決了什么問(wèn)題拿到VMwareTools-10.3.2-9925305.tar這個(gè)名字第一反應(yīng)是這不就是一個(gè)壓縮包嗎解壓然后就裝唄。很多人會(huì)直接tar -zxvf結(jié)果報(bào)錯(cuò)然后開(kāi)始懷疑人生。這個(gè)文件其實(shí)是在 vSphere 或 Workstation 里給 Linux 虛擬機(jī)安裝 VMware Tools 用的標(biāo)準(zhǔn)安裝包里面的核心是vmware-tools-distrib目錄裝著安裝腳本、內(nèi)核模塊源碼、驅(qū)動(dòng)二進(jìn)制、以及一系列輔助工具。10.3.2 這個(gè)版本發(fā)布于 2020 年左右對(duì)應(yīng)的是當(dāng)時(shí)主流 ESXi 6.7/7.0 和 Workstation/Player 15.x。如果你手頭還有跑著老系統(tǒng)的虛擬機(jī)比如 CentOS 7、Ubuntu 18.04、Debian 9這個(gè)版本裝上去完全沒(méi)問(wèn)題。VMware Tools 干了什么表面看是讓虛擬機(jī)支持剪貼板互通、鼠標(biāo)無(wú)縫進(jìn)出、窗口分辨率自適應(yīng)、拖拽文件深層看是安裝了一套虛擬化驅(qū)動(dòng)包括網(wǎng)絡(luò)、顯示、鼠標(biāo)、內(nèi)存管理模塊這些模塊直接決定了虛擬機(jī)在宿主上的運(yùn)行效率和穩(wěn)定性。很多人覺(jué)得裝不裝無(wú)所謂直到發(fā)現(xiàn)拷貝大文件速度上不去、屏幕分辨率固定 800x600、vCenter 里看不到 IP 地址和資源狀態(tài)才意識(shí)到這東西還真不能少。1.2 為什么官方 Linux 版要打包成 tarWindows 版的 VMware Tools 是一個(gè).exe安裝程序雙擊就完事。Linux 世界不太一樣發(fā)行版太多依賴庫(kù)、內(nèi)核版本、包管理器千差萬(wàn)別官方直接給你一個(gè)通用的 tar 包讓你到目標(biāo)機(jī)器上去編譯、去適配。這個(gè) tar 包沒(méi)有用 gzip 二次壓縮后綴就是.tar說(shuō)明它只是歸檔不是壓縮包所以內(nèi)部文件結(jié)構(gòu)是完整的權(quán)限也保留了。因此解壓時(shí)必須保證當(dāng)前用戶有權(quán)限寫入目標(biāo)目錄并且不會(huì)丟失可執(zhí)行權(quán)限。我一般習(xí)慣用 root 執(zhí)行或者 sudo 解壓到/tmp或者/root。還有一個(gè)容易被忽略的點(diǎn)tar 包里的安裝腳本vmware-install.pl是 Perl 腳本依賴 Perl 解釋器和一堆編譯工具如果系統(tǒng)是精簡(jiǎn)安裝沒(méi)有裝perl、gcc、make、linux-headers就算解壓成功安裝也會(huì)卡在半路。這不是 tar 的鍋但很多人會(huì)誤以為是解壓或安裝包壞了其實(shí)宿主環(huán)境沒(méi)準(zhǔn)備好。2. 解壓 VMwareTools 之前這些 tar 命令容易踩坑2.1 看到 .tar 就加 -z這是最常見(jiàn)的翻車現(xiàn)場(chǎng)很多人在解壓時(shí)會(huì)順手打出tar -zxvf VMwareTools-10.3.2-9925305.tar結(jié)果終端直接輸出gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not recoverable: exiting now這個(gè)報(bào)錯(cuò)的含義很簡(jiǎn)單你告訴 tar 這是一個(gè) gzip 壓縮文件先解壓再解開(kāi)歸檔但文件本身只是普通歸檔沒(méi)有經(jīng)過(guò) gzip 壓縮gzip 程序讀到的頭不對(duì)于是罷工。正確的命令是tar -xvf VMwareTools-10.3.2-9925305.tar-z參數(shù)對(duì)應(yīng) gzip 壓縮-j對(duì)應(yīng) bzip2-J對(duì)應(yīng) xz。文件后綴名就是最直觀的信號(hào).tar用-xvf.tar.gz或.tgz用-zxvf.tar.xz用-Jxvf。我見(jiàn)過(guò)不少同事在批量安裝時(shí)因?yàn)閳D省事統(tǒng)一復(fù)制一條帶-z的命令結(jié)果在.tar文件上反復(fù)翻車。2.2 解壓前先看看包里面有什么拿到一個(gè)來(lái)路不明或者不熟悉的 tar 包最穩(wěn)妥的操作不是直接解壓而是先列出內(nèi)容清單tar -tf VMwareTools-10.3.2-9925305.tar-t是 list 模式只查看歸檔里的文件名和目錄結(jié)構(gòu)不會(huì)真正釋放文件。這樣你能立刻確認(rèn)是不是你要的那個(gè)安裝包、頂層目錄叫什么、體積大概多大。尤其是接手別人的服務(wù)器不確定這個(gè)包是不是帶惡意腳本先看內(nèi)容再?zèng)Q定解不解壓是個(gè)好習(xí)慣。VMware 官方包頂層目錄通常是vmware-tools-distrib/如果看到的是一個(gè)完全陌生的頂層目錄你就要警惕了。如果想解壓到指定目錄用-C參數(shù)tar -xvf VMwareTools-10.3.2-9925305.tar -C /tmp/這樣會(huì)把vmware-tools-distrib解壓到/tmp/vmware-tools-distrib而不是在當(dāng)前目錄里完全鋪開(kāi)。安裝完再清理也方便。2.3 理解 tar -zcvf、-zxvf、-tf 和管道玩法熱詞里出現(xiàn)了tar -zcvf和tar -zxvf這兩個(gè)是平時(shí)最常用的。-c是創(chuàng)建歸檔-v是顯示過(guò)程-f指定歸檔文件名。組合起來(lái)tar -zcvf backup.tar.gz /home/user/data/意思是把/home/user/data/目錄打成backup.tar.gz先歸檔再用 gzip 壓縮。-x是展開(kāi)-z先解壓再還原。而tar -tf只是查看不落地。還有一個(gè)容易被忽略的組合tar -xvf archive.tar -C /path和tar -cvf archive.tar file1 file2之間的靈活搭配。熱詞里還有tar|xargs常用于批量解壓多個(gè)包后對(duì)文件做后續(xù)處理ls *.tar | xargs -I {} tar -xf {}你也可以在解壓后直接管道處理比如把解壓日志通過(guò)grep過(guò)濾掉無(wú)用的權(quán)限告警。這個(gè)后面會(huì)專門講。3. 從 tar 包到能用的 VMware Tools完整安裝鏈路3.1 掛載 Tools 鏡像把 tar 包弄進(jìn)虛擬機(jī)在虛擬機(jī)管理界面里右鍵虛擬機(jī)選擇Install VMware Tools或者 Guest - Install/Upgrade VMware Tools這個(gè)操作會(huì)在虛擬光驅(qū)里掛載一個(gè)linux.iso或類似鏡像。然后進(jìn)到系統(tǒng)里mount /dev/cdrom /mnt cp /mnt/VMwareTools-10.3.2-9925305.tar /tmp/如果提示mount: no medium found說(shuō)明鏡像沒(méi)有掛載成功去 VM 設(shè)置里確認(rèn) CD/DVD 設(shè)備狀態(tài)或者執(zhí)行mount /dev/sr0 /mnt。有些系統(tǒng)把光驅(qū)識(shí)別成/dev/sr0而不一定是/dev/cdrom可以lsblk看一下。很多教程會(huì)建議直接在/mnt下解壓但我建議先復(fù)制到/tmp。因?yàn)榘惭b過(guò)程中會(huì)去讀解壓出來(lái)的文件如果光驅(qū)偶爾出現(xiàn) I/O 問(wèn)題安裝會(huì)中斷復(fù)制到本地磁盤更穩(wěn)。復(fù)制完記得umount /mnt把光驅(qū)釋放掉否則虛擬機(jī)的 CD/DVD 一直被占用。3.2 解壓和安裝腳本的兩種姿勢(shì)進(jìn)入/tmp后tar -xvf VMwareTools-10.3.2-9925305.tar cd vmware-tools-distrib/ ./vmware-install.pl腳本會(huì)逐個(gè)問(wèn)你安裝路徑、是否啟用某些特性一路回車就按默認(rèn)來(lái)。如果不想交互式回答可以加-d./vmware-install.pl -d-d是 default 模式所有選項(xiàng)都用默認(rèn)值。批量部署時(shí)非常有用。安裝過(guò)程會(huì)先編譯內(nèi)核模塊再安裝 vmware-tools-services、vmware-tools-daemon、vmware-toolbox-cmd 等組件。整個(gè)過(guò)程耗時(shí)取決于系統(tǒng)性能和是否有編譯緩存一般三到五分鐘。成功后腳本會(huì)提示Enjoy your vmware-tools這時(shí)最好reboot一次確保模塊正確加載。不要偷懶不重啟內(nèi)核模塊加載順序這個(gè)東西靠服務(wù) restart 有時(shí)候會(huì)漏。3.3 安裝依賴與內(nèi)核模塊編譯的細(xì)節(jié)這條鏈路最容易卡住的是編譯內(nèi)核模塊。vmware-install.pl 會(huì)把幾個(gè)內(nèi)核模塊——vmxnet3、vmw_balloon、vmw_vmci 等——針對(duì)當(dāng)前運(yùn)行的內(nèi)核重新編譯所以系統(tǒng)里必須存在gcc make perl linux-headers-$(uname -r)CentOS 系執(zhí)行yum install -y gcc make perl kernel-develUbuntu/Debian 系執(zhí)行apt-get install -y gcc make perl linux-headers-$(uname -r)有個(gè)坑值得單獨(dú)提如果你升級(jí)過(guò)內(nèi)核重啟進(jìn)了新內(nèi)核那/lib/modules/$(uname -r)/build指向的頭文件目錄必須和當(dāng)前內(nèi)核完全匹配。很多人的機(jī)器只裝了老版本的 kernel-devel新內(nèi)核編譯時(shí)提示找不到build目錄。解決辦法就是先確認(rèn)當(dāng)前內(nèi)核版本再裝對(duì)應(yīng)版本的 headers再重新跑安裝腳本。如果不想重新跑整個(gè)安裝可以只執(zhí)行vmware-config-tools.pl重新配置并編譯模塊。4. 安裝過(guò)程中最常見(jiàn)的報(bào)錯(cuò)與排查鏈路4.1 一次真實(shí)的編譯失敗排查我之前幫一臺(tái) CentOS 7.6 虛擬機(jī)裝 Tools執(zhí)行./vmware-install.pl -d之后屏幕滾了幾行長(zhǎng)日志最后報(bào)Failed to compile module vmw_balloon!粗看像是內(nèi)核模塊源碼有問(wèn)題但 VMware 官方包一般不會(huì)犯這種低級(jí)錯(cuò)誤。我先把日志里的錯(cuò)誤行抓出來(lái)tail -100 /tmp/vmware-root/vmware-install*.log看到關(guān)鍵提示gcc: error: unrecognized command-line option ‘-fno-stack-protector-strong’。這個(gè)選項(xiàng)太新了系統(tǒng)自帶的 GCC 4.8 不認(rèn)識(shí)。根本原因是 GCC 版本太老而模塊源碼用了新版編譯選項(xiàng)。解決辦法不是手動(dòng)改源碼而是把 GCC 升級(jí)到高版本或者用 devtoolset 套裝切換到新版 gcc。那次我裝了devtoolset-8然后用高版本 gcc 重新執(zhí)行vmware-config-tools.pl問(wèn)題消失。這類問(wèn)題給你的啟發(fā)是遇到編譯報(bào)錯(cuò)先看日志日志里往往直接寫了根因。別盲目搜網(wǎng)上復(fù)制粘貼的解決方案很多方案針對(duì)的是完全不同的內(nèi)核版本。4.2 幾個(gè)高頻報(bào)錯(cuò)的定位路徑報(bào)錯(cuò)信息根因解決辦法gzip: stdin: not in gzip format用-z解普通.tar包把-z去掉The path is not valid默認(rèn)安裝路徑下已有殘留或權(quán)限不足清理舊版本換 root 執(zhí)行Please re-run this program as root當(dāng)前用戶沒(méi)有 root 權(quán)限sudo 運(yùn)行Your kernel was built with gcc version X, but you are using gcc version Y內(nèi)核編譯工具鏈和當(dāng)前 gcc 不一致安裝匹配版本的 gcc 或用 CC 指定searching for a valid kernel header path... not found缺少 linux-headers安裝對(duì)應(yīng)版本 kernel-devel/headersUnable to restart vmware-tools-services服務(wù)腳本權(quán)限或 systemd 單元沖突查看服務(wù)狀態(tài)systemctl status vmware-tools注意第 1 個(gè)報(bào)錯(cuò)和第 5 個(gè)報(bào)錯(cuò)在不同階段出現(xiàn)但都常見(jiàn)。第 5 個(gè)報(bào)錯(cuò)很多人以為是 tar 包解壓不完整其實(shí)根本原因是uname -r對(duì)應(yīng)的 headers 沒(méi)裝。用ls /usr/src/kernels/看看到底有哪些內(nèi)核源碼然后對(duì)比一下當(dāng)前uname -r一目了然。4.3 日志文件和清理殘留VMware Tools 安裝日志默認(rèn)寫在/tmp/vmware-root/里面有vmware-install*.log和vmware-modconfig*.log。排查問(wèn)題第一件事就是看這些日志別靠猜。日志里會(huì)明確記錄每一步執(zhí)行結(jié)果包括 kernel header 探測(cè)、gcc 版本、編譯命令和失敗行。另外失敗的安裝會(huì)在系統(tǒng)里留下半成品。比如/usr/lib/vmware-tools、/etc/vmware-tools、/etc/init.d/vmware-tools等。重新安裝之前最好先把舊的卸載干凈vmware-install.pl -u如果卸載腳本也因?yàn)橐蕾噯?wèn)題跑不動(dòng)可以直接刪除關(guān)鍵目錄和/etc/vmware-tools下的配置文件再重新解壓安裝。但這種方式要謹(jǐn)慎別刪了系統(tǒng)自帶的庫(kù)。老手一般會(huì)先把/etc/vmware-tools備份再動(dòng)手清理。5. VMware Tools 裝完后怎么確認(rèn)它真的在工作5.1 常用驗(yàn)證命令清單安裝完并重啟后先跑幾個(gè)命令確認(rèn)狀態(tài)vmware-toolbox-cmd -v vmware-toolbox-cmd stat speed vmware-toolbox-cmd stat hosttime第一個(gè)命令輸出版本號(hào)比如10.3.2.9925305 (build-9925305)第二個(gè)命令查看虛擬網(wǎng)卡速度第三個(gè)命令和宿主機(jī)時(shí)間同步。如果第一個(gè)命令提示找不到多半是沒(méi)裝vmware-toolbox或者安裝時(shí)選擇了不裝該組件。還可以看看內(nèi)核模塊是否加載lsmod | grep vmw正常情況下能看到vmw_balloon、vmw_vmci、vmxnet3之類的模塊。記住如果你用的是較新內(nèi)核官方老版本 Tools 的模塊可能在新內(nèi)核里已經(jīng)合并加載情況可能不太一樣。此時(shí)用vmware-toolbox-cmd -v依然是最直接的驗(yàn)證方式。5.2 剪貼板、拖拽和分辨率自適應(yīng)的設(shè)置很多用戶裝完 Tools 發(fā)現(xiàn)剪貼板還是不互通原因在于虛擬機(jī)設(shè)置里沒(méi)開(kāi)啟對(duì)應(yīng)能力。在 Workstation 里VM Settings Options Guest Isolation要勾選 Enable copy and paste 和 Enable drag and drop。在 vCenter 里類似的 Guest Operating System Mismatch 或 Isolation 設(shè)置也要打開(kāi)。Tools 只是提供了底層接口配置不打開(kāi)就不會(huì)生效。分辨率自適應(yīng)這塊裝了 Tools 后宿主機(jī)窗口變化虛擬機(jī)分辨率應(yīng)能自動(dòng)匹配。如果不行檢查/etc/vmware-tools下的配置或者手動(dòng)執(zhí)行vmware-resolution-set 1920 10805.3 老機(jī)器和老版本的取舍要不要換 open-vm-tools聊完 10.3.2 的安裝得認(rèn)真說(shuō)一句大實(shí)話如果你用的 Linux 發(fā)行版是 CentOS 7、Ubuntu 16.04、Debian 8官方倉(cāng)庫(kù)里已經(jīng)有open-vm-tools大概率不需要再手動(dòng)解壓這個(gè) tar 包。open-vm-tools 是 VMware Tools 的開(kāi)源版本由 VMware 維護(hù)直接通過(guò)系統(tǒng)包管理器安裝和系統(tǒng)的整合度更好也不用手動(dòng)編譯內(nèi)核模塊。yum install -y open-vm-tools # 或 apt-get install -y open-vm-tools為什么還要保留這份 10.3.2 的 tar 包因?yàn)橛行┑缺R?、離線環(huán)境、特殊定制的舊內(nèi)核必須使用官方閉源或者特定版本驅(qū)動(dòng)的環(huán)境里tar 包安裝依然是兜底方案。兩種方式不要混裝先卸載其中一個(gè)再裝另一個(gè)否則vmware-toolbox-cmd和vmtoolsd的服務(wù)會(huì)互相沖突。我個(gè)人經(jīng)驗(yàn)是能用 open-vm-tools 就用 open-vm-toolstar 包只留給特殊場(chǎng)景。6. 順手把 tar 命令這幾招也記牢6.1 壓縮、解壓、排除、提取單文件因?yàn)檫@篇文章標(biāo)題就是 tar 包熱詞里也全是 tar 相關(guān)我順手把平時(shí)最高頻的幾個(gè)場(chǎng)景過(guò)一遍。創(chuàng)建 tar.gztar -zcvf project_backup.tar.gz /home/project/解壓到指定目錄tar -zxvf project_backup.tar.gz -C /tmp/restore/排除不需要的目錄比如 node_modules 和 .gittar -zcvf project_backup.tar.gz /home/project/ \ --exclude/home/project/node_modules \ --exclude/home/project/.git--exclude可以寫在 create 和 x 兩個(gè)模式中。解壓時(shí)排除特定文件用法類似tar -zxvf project_backup.tar.gz --exclude*.log -C /tmp/restore/只提取包里的單個(gè)文件tar -zxvf project_backup.tar.gz home/project/README.md注意這個(gè)路徑必須和壓縮包里的路徑一致必要的時(shí)候先tar -tf看路徑結(jié)構(gòu)。6.2 tar 配合 xargs 批量操作熱詞里有個(gè)tar|xargs實(shí)際場(chǎng)景非常常見(jiàn)你有一堆 tar 包想逐個(gè)解壓后進(jìn)入解壓目錄執(zhí)行某條命令。比如ls *.tar | xargs -I {} tar -xf {}更復(fù)雜的批量處理比如解壓所有 tar.gz 后刪除解壓目錄里的.class文件ls *.tar.gz | xargs -I {} sh -c tar -zxf {} find . -name *.class -deletexargs 的-I指定占位符這樣每次替換成實(shí)際文件名。要注意的是文件名如果帶空格最好用-print0配合x(chóng)args -0否則會(huì)按空格切分。不過(guò).tar包一般名字比較干凈這個(gè)坑遇到再說(shuō)。6.3 關(guān)于 tar 包安全性的幾個(gè)提醒最后提醒三件事。一不要盲目解壓來(lái)路不明的 tar 包。tar 包里的文件如果帶著../../tmp/xxx這種路徑解壓時(shí)會(huì)寫入你意想不到的位置這就是所謂的 tar 路徑穿越。解壓前先用tar -tf看一下是否有異常路徑。為了避免這類問(wèn)題也可以加參數(shù)tar -xzf archive.tar.gz --no-same-owner --no-same-permissions在共享環(huán)境中這能避免把別人包里的屬主和權(quán)限直接覆蓋到你的系統(tǒng)。二解壓時(shí)盡量使用-C指定目錄而不是在當(dāng)前目錄直接鋪開(kāi)。這樣清理時(shí)直接刪目錄就行不會(huì)污染你的工作目錄。我見(jiàn)過(guò)有人tar -xvf解壓后當(dāng)前目錄多出幾十個(gè)文件追悔莫及。三tar 包不是越新越好。VMware Tools 這種純 tar 歸檔20 MB 可能就是完整版但如果一個(gè)號(hào)稱是VMware Tools的 tar 包體積只有幾十 KB那你應(yīng)該警惕它是不是偽裝成安裝包的腳本。用tar -tf看目錄結(jié)構(gòu)、用file命令看文件類型兩步就能篩掉大部分異常。拿這個(gè) 10.3.2 的包多折騰幾次tar 命令基本就熟了大半。我自己踩過(guò)的最大教訓(xùn)就是別看見(jiàn).tar就加z也別在自己不熟悉的系統(tǒng)上一路回車裝完就跑安裝日志和版本驗(yàn)證這兩步永遠(yuǎn)省不得。本文還有配套的精品資源點(diǎn)擊獲取