換與 yml 模板實(shí)戰(zhàn))
EVE-NG 這個(gè)模擬器玩到一定階段遲早會(huì)撞上一堵墻官方鏡像包里沒有你手上那個(gè)特定版本的設(shè)備系統(tǒng)或者你壓根想跑一個(gè)自己定制過的 Linux、Windows。這時(shí)候擺在你面前的只有兩條路——要么到處求人分享一個(gè) eve-ng 鏡像要么自己動(dòng)手做一個(gè)。前者受制于人版本對(duì)不對(duì)、鏡像里干不干凈、有沒有被人塞過后門全憑運(yùn)氣后者聽起來(lái)很唬人實(shí)際上只要把 EVE-NG 對(duì)鏡像文件的那套命名規(guī)則和調(diào)用邏輯摸清楚剩下的基本就是qemu-img幾條命令加上一份幾十行的 yml 模板文件。我自己前后做過十幾個(gè)鏡像從最簡(jiǎn)單的 Ubuntu Server 到帶圖形界面的 Windows踩過的坑基本都能歸到命名沒對(duì)上和控制臺(tái)類型配錯(cuò)這兩類里。這篇文章面向的是已經(jīng)裝好 EVE-NG、能正常拉節(jié)點(diǎn)做實(shí)驗(yàn)但被官方鏡像不夠用卡住的人也適合想給自己的實(shí)驗(yàn)環(huán)境做一套精簡(jiǎn)私有鏡像庫(kù)的讀者。整套流程不依賴任何額外付費(fèi)工具一臺(tái)能跑 EVE-NG 的宿主機(jī)加一個(gè)原始 ISO 就夠了。1. 先搞懂 EVE-NG 鏡像到底是什么東西1.1 鏡像在系統(tǒng)里的物理形態(tài)很多人第一次聽到EVE-NG 鏡像會(huì)下意識(shí)以為它是個(gè)封裝好的、類似手機(jī)刷機(jī)包那樣的整體文件。不是的。EVE-NG 本質(zhì)上是一套跑在 Linux 上的 KVM/QEMU 前端它自己不產(chǎn)生任何虛擬化能力所有的虛擬設(shè)備其實(shí)都是 QEMU 進(jìn)程。所以所謂一個(gè) EVE-NG 鏡像拆開來(lái)看其實(shí)只有三樣?xùn)|西。第一樣是磁盤文件通常是 qcow2 格式里面裝著這臺(tái)設(shè)備的操作系統(tǒng)和配置第二樣是描述文件也就是模板 yml告訴 EVE-NG 這個(gè)設(shè)備該給多少內(nèi)存、幾個(gè)網(wǎng)卡、用什么控制臺(tái)、加哪些 QEMU 參數(shù)第三樣是圖標(biāo)文件純裝飾用讓拓?fù)鋱D上看起來(lái)不至于全是問號(hào)。這三樣?xùn)|西分別放在三個(gè)不同的目錄里彼此靠目錄名和文件名建立關(guān)聯(lián)。理解這一點(diǎn)特別關(guān)鍵因?yàn)楹竺婢懦傻溺R像不顯示啟動(dòng)黑屏問題根子都出在這個(gè)關(guān)聯(lián)沒對(duì)上。提示EVE-NG 本身不校驗(yàn)鏡像內(nèi)容的合法性它只按約定去某個(gè)路徑找某個(gè)文件名。這意味著自由度很高也意味著規(guī)則錯(cuò)了它不會(huì)給你任何有意義的報(bào)錯(cuò)只會(huì)靜默地起不來(lái)。1.2 目錄結(jié)構(gòu)與命名規(guī)則QEMU 類鏡像的存放根目錄固定是/opt/unetlab/addons/qemu/。在這個(gè)目錄下每一個(gè)子目錄代表一個(gè)可選鏡像目錄名就是你在拓?fù)淅锾砑庸?jié)點(diǎn)時(shí)下拉列表里看到的那個(gè)名字。所以linux-ubuntu-20.04這樣的目錄名既是路徑也是顯示名。目錄內(nèi)部的文件名是 EVE-NG 硬編碼的不能隨便改。不同文件名對(duì)應(yīng)不同的磁盤控制器和插槽位置下面這張表是我整理的核心對(duì)照關(guān)系建議直接存下來(lái)。文件名對(duì)應(yīng)控制器與位置典型使用場(chǎng)景virtioa.qcow2第一塊 virtio 磁盤Linux、大部分網(wǎng)絡(luò)設(shè)備系統(tǒng)virtiob.qcow2第二塊 virtio 磁盤需要獨(dú)立數(shù)據(jù)盤的場(chǎng)景sataa.qcow2第一塊 SATA 磁盤系統(tǒng)內(nèi)缺 virtio 驅(qū)動(dòng)時(shí)hda.qcow2第一塊 IDE 磁盤老系統(tǒng)、部分 Windows 版本cdrom.iso光驅(qū)從 ISO 安裝系統(tǒng)、放驅(qū)動(dòng)盤這里有個(gè)細(xì)節(jié)值得說清楚文件名里的a、b是插槽序號(hào)不是磁盤類型的一部分。virtioa和virtiob是兩塊不同的盤你可以同時(shí)放進(jìn)去EVE-NG 會(huì)按順序掛載。另外還有virtiosata.qcow2這種寫法在一些老模板里能見到那是歷史遺留新版本統(tǒng)一用上面的規(guī)則照著現(xiàn)有官方鏡像目錄 ls 一下就能對(duì)出來(lái)。1.3 自己做鏡像到底值不值先說結(jié)論值得而且比你想的省事。理由有三個(gè)。版本自主。官方鏡像庫(kù)更新的節(jié)奏永遠(yuǎn)慢于廠商發(fā)版尤其是一些小眾防火墻、老版本路由系統(tǒng)你需要的那個(gè)版本很可能永遠(yuǎn)不會(huì)有現(xiàn)成的。自己做一次以后所有版本都能自己搓。體積可控。官方發(fā)布的鏡像為了兼容各種場(chǎng)景往往塞了一堆你用不到的組件。你自己從最小化安裝開始做一個(gè) Linux 鏡像壓到 1GB 以內(nèi)很輕松宿主機(jī)磁盤能省出一大截。環(huán)境干凈。這一點(diǎn)做實(shí)驗(yàn)的人最有體會(huì)。別人分享的鏡像里可能殘留了舊配置、舊密碼、甚至一些你不想讓別人知道的默認(rèn)賬號(hào)。自己從 ISO 裝一遍root 密碼是什么、里面有什么服務(wù)全在你掌控之內(nèi)。2. 動(dòng)手之前的準(zhǔn)備工作2.1 環(huán)境與工具清單先把要用的東西列清楚缺一樣后面都會(huì)卡住。EVE-NG 宿主機(jī)已經(jīng)裝好并能正常啟動(dòng)節(jié)點(diǎn)SSH 能登錄。裸機(jī)安裝體驗(yàn)最好虛擬機(jī)上跑 EVE-NG 的話宿主必須開啟 CPU 虛擬化直通否則 QEMU 只能走軟件模擬慢到?jīng)]法用。qemu-img工具絕大多數(shù)發(fā)行版的qemu-utils包自帶一條apt install qemu-utils或者yum install qemu-img就搞定。驗(yàn)證方式是qemu-img --version能出版本號(hào)就行。原始素材一個(gè) ISO 安裝盤或者一份別人給的原生磁盤鏡像vmdk、img、vhd 都行。注意素材本身要是你自己合法持有的別拿帶商業(yè)授權(quán)的廠商鏡像到處傳自己實(shí)驗(yàn)室里用和對(duì)外分發(fā)是兩碼事。磁盤空間至少預(yù)留原始素材體積的三到五倍。qcow2 是稀疏格式轉(zhuǎn)換過程中會(huì)臨時(shí)占用額外空間空間不夠會(huì)轉(zhuǎn)一半失敗。注意所有涉及/opt/unetlab/的操作都要用 root 或者 sudo。普通用戶執(zhí)行qemu-img轉(zhuǎn)換轉(zhuǎn)出來(lái)的文件屬主不對(duì)EVE-NG 起節(jié)點(diǎn)時(shí)會(huì)直接報(bào)權(quán)限錯(cuò)誤而且這個(gè)錯(cuò)誤在界面上看不出來(lái)只能去翻日志。2.2 素材來(lái)源的取舍邏輯素材有兩大類選擇哪一類決定了完全不同的操作路徑。第一類是現(xiàn)成的磁盤鏡像比如某個(gè)設(shè)備廠商提供的虛擬化版本文件常見擴(kuò)展名是.vmdk、.ova、.img、.vhd。這類素材的好處是開箱即用系統(tǒng)已經(jīng)裝好了你只需要做格式轉(zhuǎn)換和參數(shù)適配。麻煩的地方在于磁盤控制器可能對(duì)不上需要改模板或者加驅(qū)動(dòng)。第二類是裸 ISO 安裝盤比如官方發(fā)布的各種系統(tǒng)安裝鏡像。這類素材的好處是絕對(duì)干凈、體積最小、你能完全控制安裝過程代價(jià)是要在 EVE-NG 里走一遍安裝流程多花二十分鐘到一小時(shí)。我做私有鏡像幾乎都用這條路因?yàn)檠b完之后系統(tǒng)的每一個(gè)組件我都心里有數(shù)。判斷標(biāo)準(zhǔn)其實(shí)很簡(jiǎn)單如果這個(gè)素材你能拿到已經(jīng)裝好的版本就優(yōu)先用現(xiàn)成的如果只有安裝盤那就老老實(shí)實(shí)裝一遍別去網(wǎng)上找來(lái)源不明的已裝好版本。2.3 控制器與網(wǎng)卡類型的選型邏輯這是新手最容易忽略、但直接影響成敗的一環(huán)。QEMU 給虛擬機(jī)提供磁盤和網(wǎng)卡有好幾種型號(hào)不同型號(hào)走不同的驅(qū)動(dòng)路徑性能差距能到兩三倍而老系統(tǒng)往往壓根沒有新驅(qū)動(dòng)的支持。磁盤控制器上virtio是性能最好的走的是半虛擬化路徑Linux 內(nèi)核從很早的版本就內(nèi)置了驅(qū)動(dòng)所以 Linux 類鏡像無(wú)腦選virtioa.qcow2。SATA 和 IDE 是模擬真實(shí)硬件性能差一截但勝在兼容性無(wú)敵老系統(tǒng)和不帶 virtio 驅(qū)動(dòng)的 Windows 用得上。網(wǎng)卡的情況類似。virtio-net同樣性能最好但 Windows 默認(rèn)不帶驅(qū)動(dòng)你得額外掛一個(gè)驅(qū)動(dòng) ISO 裝進(jìn)去。e1000是模擬 Intel 千兆網(wǎng)卡幾乎所有系統(tǒng)都自帶驅(qū)動(dòng)是拿不準(zhǔn)時(shí)的安全選擇。這個(gè)選擇最終落在模板的nic字段上2.3 節(jié)的結(jié)論是先求能跑起來(lái)再求跑得快把鏡像調(diào)通之后再回頭換 virtio 也不遲。3. 從原始素材到可用 qcow2 的轉(zhuǎn)換實(shí)操3.1 qemu-img 的探查與轉(zhuǎn)換命令拿到素材的第一件事不是轉(zhuǎn)換是看清楚它到底是什么。qemu-img info這條命令看著簡(jiǎn)單但它是排查問題的起點(diǎn)。qemu-img info source.vmdk輸出里有幾個(gè)字段要重點(diǎn)看file format是真實(shí)格式virtual size是這塊盤對(duì)外聲稱的容量disk size是實(shí)際占用空間backing file說明這個(gè)鏡像是增量盤還是獨(dú)立盤。如果出現(xiàn)了backing file說明你拿到的是個(gè)快照增量文件必須把它的父盤一起拿來(lái)才能轉(zhuǎn)換成功單獨(dú)轉(zhuǎn)出來(lái)的盤是壞的。確認(rèn)無(wú)誤之后就是轉(zhuǎn)換qemu-img convert -p -f vmdk -O qcow2 -o preallocationmetadata source.vmdk virtioa.qcow2參數(shù)逐個(gè)解釋一下因?yàn)檫@行命令里每個(gè)字都有用。-p是顯示進(jìn)度轉(zhuǎn)換大鏡像的時(shí)候不看進(jìn)度你會(huì)懷疑它是不是卡死了。-f vmdk是顯式指定源格式雖然qemu-img一般能自動(dòng)識(shí)別但顯式寫出來(lái)能避免識(shí)別錯(cuò)誤導(dǎo)致的詭異問題。-O qcow2是目標(biāo)格式EVE-NG 只認(rèn) qcow2。-o preallocationmetadata是預(yù)分配元數(shù)據(jù)好處是寫入性能更好壞處是占用空間會(huì)變大磁盤緊張的話可以去掉。如果源文件是 raw 格式的 img把-f vmdk換成-f raw就行如果是 vhd換成-f vpc。轉(zhuǎn)換完成后務(wù)必再跑一次qemu-img info virtioa.qcow2確認(rèn)結(jié)果格式那一行顯示qcow2才算成。3.2 磁盤擴(kuò)容與預(yù)分配官方鏡像經(jīng)常有個(gè)毛病系統(tǒng)裝的時(shí)候只給了 8GB 或者 10GB跑起來(lái)沒幾天就滿了。擴(kuò)容分兩步缺一不可新手最常犯的錯(cuò)就是只做了第一步。第一步在宿主機(jī)上擴(kuò) qcow2 文件的虛擬容量qemu-img resize virtioa.qcow2 20G注意20G是在原有基礎(chǔ)上增加 20G如果寫成20G就變成把總?cè)萘吭O(shè)成 20G盤里原來(lái)的數(shù)據(jù)一旦超過這個(gè)數(shù)就直接損壞了。這是我自己踩過的坑一條命令毀了一個(gè)裝了兩小時(shí)的鏡像后來(lái)所有 resize 操作我都會(huì)先qemu-img info看一眼當(dāng)前容量。第二步在 guest 系統(tǒng)內(nèi)部擴(kuò)分區(qū)和文件系統(tǒng)。只做第一步的話你啟動(dòng)系統(tǒng)會(huì)發(fā)現(xiàn)可用空間根本沒變因?yàn)槟阒皇墙o了虛擬機(jī)一塊更大的物理盤里面的分區(qū)表還是原來(lái)的。Linux 上大概是這樣growpart /dev/vda 1 resize2fs /dev/vda1 # ext4 文件系統(tǒng) xfs_growfs / # 或者 xfs 文件系統(tǒng)用這條Windows 上更直觀進(jìn)磁盤管理右鍵系統(tǒng)分區(qū)選擴(kuò)展卷一路下一步就行。提示擴(kuò)容操作必須在虛擬機(jī)全部關(guān)機(jī)、EVE-NG 里沒有任何節(jié)點(diǎn)引用這個(gè)鏡像的情況下執(zhí)行。鏡像正在被 QEMU 進(jìn)程占用時(shí) resize輕則失敗重則文件損壞。3.3 目錄創(chuàng)建、命名與權(quán)限修復(fù)轉(zhuǎn)換好的盤要放到正確的位置。假設(shè)我做的是一臺(tái) Ubuntu 20.04我會(huì)這樣建目錄mkdir -p /opt/unetlab/addons/qemu/linux-ubuntu-20.04 mv virtioa.qcow2 /opt/unetlab/addons/qemu/linux-ubuntu-20.04/目錄名的命名有幾個(gè)約定俗成的規(guī)矩不是強(qiáng)制但能省很多事。用全小寫、用連字符分隔別用空格和中文。前綴盡量和你要用的模板name字段保持一致比如模板里寫name: linux那目錄叫l(wèi)inux-xxx就能被識(shí)別到對(duì)不上的話節(jié)點(diǎn)添加界面的鏡像下拉列表里可能壓根看不到這個(gè)選項(xiàng)。這一點(diǎn)是 EVE-NG 的隱式約定官方文檔里寫得含糊但實(shí)際用起來(lái)就是這個(gè)規(guī)律。最后一步是權(quán)限修復(fù)這一步絕對(duì)不能省/opt/unetlab/wrappers/unl_wrapper -a fixpermissions這條命令會(huì)遍歷所有鏡像目錄把屬主和權(quán)限統(tǒng)一成 EVE-NG 期望的狀態(tài)。跑完之后你會(huì)看到一堆文件權(quán)限被改動(dòng)的輸出是正常的。跳過這一步的直接后果是節(jié)點(diǎn)能添加一點(diǎn)啟動(dòng)就轉(zhuǎn)圈然后失敗日志里寫著 permission denied。4. 從 ISO 做一個(gè)全新鏡像的完整流程4.1 準(zhǔn)備空盤和 ISO 文件這條路我從頭到尾走過好幾遍穩(wěn)定性最好。假設(shè)要做一臺(tái) Windows 10 實(shí)驗(yàn)機(jī)。先建目錄把安裝盤放進(jìn)去mkdir -p /opt/unetlab/addons/qemu/win-10 cp /path/to/win10.iso /opt/unetlab/addons/qemu/win-10/cdrom.iso注意文件名必須原樣叫cdrom.iso叫win10.isoEVE-NG 是不認(rèn)的。然后手工創(chuàng)建一塊空盤容量按你需要給cd /opt/unetlab/addons/qemu/win-10 qemu-img create -f qcow2 hda.qcow2 60G為什么 Windows 用hda.qcow2而不是virtioa.qcow2因?yàn)?Windows 原版安裝盤不帶 virtio 存儲(chǔ)驅(qū)動(dòng)如果你用 virtio 盤安裝程序走到選擇安裝位置那一步會(huì)告訴你找不到任何驅(qū)動(dòng)器。用 IDE 的hda就能繞過這個(gè)問題雖然性能差一點(diǎn)但對(duì)實(shí)驗(yàn)環(huán)境來(lái)說完全夠用。Linux 就沒這個(gè)顧慮直接建virtioa.qcow2即可沒必要浪費(fèi)一塊 IDE 盤位。4.2 在 EVE-NG 里走一遍安裝磁盤和 ISO 準(zhǔn)備好之后去 EVE-NG 界面里添加節(jié)點(diǎn)。這里有個(gè)技巧先拿一份現(xiàn)成的同類官方模板來(lái)改別從零手寫。比如做 Windows 就找官方的 Windows 模板復(fù)制一份改個(gè) name 和 icon這套做法能規(guī)避掉大量字段拼寫錯(cuò)誤。節(jié)點(diǎn)起來(lái)之后會(huì)通過 VNC 連上控制臺(tái)Windows 必須用 VNC 控制臺(tái)因?yàn)榘惭b界面是圖形化的telnet 看不到。第一次啟動(dòng)要走啟動(dòng)順序確保它從光驅(qū)引導(dǎo)。安裝過程跟在物理機(jī)上沒有區(qū)別分區(qū)、裝系統(tǒng)、裝驅(qū)動(dòng)、設(shè)密碼一步步來(lái)。裝完 Windows 之后強(qiáng)烈建議裝一個(gè)虛擬化增強(qiáng)驅(qū)動(dòng)把網(wǎng)卡換成 virtio 型號(hào)網(wǎng)絡(luò)吞吐能提升明顯。Linux 這邊有個(gè)特有的坑要處理如果你想讓節(jié)點(diǎn)用 telnet 控制臺(tái)而不是 VNC必須在系統(tǒng)內(nèi)部把串口控制臺(tái)打開否則連上去就是黑屏。具體是兩步。先改 GRUB 內(nèi)核參數(shù)在GRUB_CMDLINE_LINUX里加上consolettyS0,115200n8然后update-grub。再啟用串口終端服務(wù)systemctl enable serial-gettyttyS0.service systemctl start serial-gettyttyS0.service這兩步做完EVE-NG 的 telnet 控制臺(tái)才能真正接管登錄提示符會(huì)出現(xiàn)在 telnet 里。這是幾乎所有Linux 鏡像 telnet 黑屏問題的根因官方文檔里往往一筆帶過。4.3 安裝完成后的收尾工作系統(tǒng)裝完、配置調(diào)好之后有幾個(gè)收尾動(dòng)作我每次都做。關(guān)機(jī)。讓 guest 系統(tǒng)正常關(guān)機(jī)不要直接強(qiáng)行關(guān)節(jié)點(diǎn)否則文件系統(tǒng)可能沒同步完qcow2 里會(huì)留下不一致狀態(tài)。清理。把系統(tǒng)里的臨時(shí)文件、安裝日志、緩存、測(cè)試賬號(hào)全刪掉把機(jī)器名、主機(jī)記錄清干凈。這一步是為了做出來(lái)的鏡像足夠干凈也為了體積小。改啟動(dòng)順序。安裝階段模板里的qemu_options一般帶著-boot orderdc意思是優(yōu)先從光驅(qū)啟動(dòng)。裝完之后要改成-boot orderc讓系統(tǒng)從硬盤啟動(dòng)。不改的話每次開機(jī)它都先去讀光驅(qū)如果cdrom.iso還在你會(huì)莫名其妙又進(jìn)一次安裝界面。改完之后如果你不需要光驅(qū)了可以把cdrom.iso刪掉但要注意有些設(shè)備的模板會(huì)檢查這個(gè)文件是否存在刪之前最好確認(rèn)一下模板里沒有依賴它。最后再跑一次fixpermissions然后就可以在拓?fù)淅镎接眠@個(gè)鏡像了。5. 給自己的鏡像配一份模板和圖標(biāo)5.1 yml 模板字段逐個(gè)拆解模板文件放在/opt/unetlab/html/templates/下面很多版本還會(huì)細(xì)分成intel/和amd/兩個(gè)子目錄。這個(gè)分類是為了適配不同 CPU 平臺(tái)的 QEMU 參數(shù)穩(wěn)妥做法是兩個(gè)目錄各放一份相同的文件省得以后換平臺(tái)時(shí)抓瞎。一份典型的模板長(zhǎng)這樣type: qemu name: win-10 description: Windows 10 Custom icon: win.png cpulimit: 1 cpu: 2 ram: 4096 ethernet: 4 console: vnc nic: e1000 shutdown: 1 qemu_options: -machine typepc,accelkvm -vga std -usbdevice tablet -boot orderc字段的含義值得一個(gè)個(gè)說清楚因?yàn)楦腻e(cuò)一個(gè)就起不來(lái)。type固定 qemu告訴 EVE-NG 這是個(gè) QEMU 類設(shè)備。name是模板名和鏡像目錄名的前綴最好對(duì)應(yīng)。icon是圖標(biāo)文件名放在圖標(biāo)目錄里。cpulimit是 CPU 時(shí)間片的限制比例0 到 1 之間一般填 1 表示不限制。cpu是分配幾個(gè)虛擬核心。ram單位是 MB這個(gè)字段最容易填錯(cuò)填 4096 是 4GB填 4 就變成 4MB系統(tǒng)根本起不來(lái)。ethernet是最大網(wǎng)卡槽位數(shù)決定了拓?fù)淅镞@個(gè)節(jié)點(diǎn)最多能連幾根線。console選vnc或者telnet這是圖形系統(tǒng)和無(wú)頭系統(tǒng)的分水嶺。nic是默認(rèn)網(wǎng)卡型號(hào)。qemu_options是直接透?jìng)鹘o QEMU 的原始參數(shù)威力最大也最容易出事。注意qemu_options里不要瞎加參數(shù)。EVE-NG 自己會(huì)在啟動(dòng)時(shí)注入一批必要參數(shù)你手寫的如果和它沖突QEMU 會(huì)直接拒絕啟動(dòng)報(bào)錯(cuò)信息還非常隱晦。最安全的做法是把同類型官方模板的這行參數(shù)原樣抄過來(lái)只改-boot order這種明確的開關(guān)。5.2 參數(shù)取值怎么算才合理模板參數(shù)不是拍腦袋填的它直接決定你的宿主機(jī)能同時(shí)開多少個(gè)節(jié)點(diǎn)。這個(gè)賬要算清楚。內(nèi)存是最硬的約束。假設(shè)宿主機(jī) 64GBEVE-NG 自身和系統(tǒng)開銷吃掉 4GB剩 60GB 可用。如果每個(gè)節(jié)點(diǎn)給 4GB理論上能開 15 個(gè)但實(shí)際留 20% 余量比較穩(wěn)也就是同時(shí)跑 12 個(gè)左右。這就是為什么做鏡像時(shí)要克制能給小內(nèi)存的別給大內(nèi)存。Linux 服務(wù)器類鏡像給 512MB 到 1024MB 就夠了Windows 桌面系統(tǒng)最少 4096MB 才能跑得動(dòng)。CPU 核心數(shù)上實(shí)驗(yàn)環(huán)境的設(shè)備絕大多數(shù)時(shí)間都是空閑的cpu: 1完全夠用cpulimit: 1不限制時(shí)間片。給太多核心除了讓調(diào)度器更累以外沒有實(shí)際收益。網(wǎng)卡數(shù)ethernet按需要給。做基礎(chǔ)路由實(shí)驗(yàn) 4 個(gè)口夠用做較復(fù)雜的拓?fù)浣o 8 個(gè)。這個(gè)值給小了后面拓?fù)淅锵攵噙B一根線都連不上改模板又得重啟節(jié)點(diǎn)所以寧可稍微給大一點(diǎn)。控制臺(tái)類型的選擇有個(gè)簡(jiǎn)單判斷法系統(tǒng)裝完之后你需要看到圖形界面嗎。需要用vnc只需要命令行用telnet。telnet 的優(yōu)勢(shì)是拓?fù)淅稂c(diǎn)一下就能進(jìn)命令行、復(fù)制粘貼方便、還能在無(wú)圖形界面下工作所以 Linux 和網(wǎng)絡(luò)設(shè)備系統(tǒng)一律優(yōu)先 telnet。5.3 圖標(biāo)與模板落盤圖標(biāo)文件放在/opt/unetlab/html/images/icons/。格式用 PNG尺寸別太大64×64 到 128×128 就很好看太大反而在拓?fù)淅镲@得突兀。文件名要和模板里的icon字段完全一致包括大小寫。模板文件放好之后在 EVE-NG 界面里刷新一下頁(yè)面新建節(jié)點(diǎn)的時(shí)候就能在下拉列表里看到你自定義的模板和鏡像了。如果看不到先檢查三件事模板文件的擴(kuò)展名是不是.yml、YAML 縮進(jìn)是不是用空格而不是 Tab、鏡像目錄名的前綴和模板name對(duì)不對(duì)得上。這三條覆蓋了我遇到過的絕大多數(shù)模板不顯示問題。6. 常見問題與排查實(shí)錄6.1 啟動(dòng)類故障速查表下面這張表是我把自己和同事遇到過的問題歸了一遍之后的總結(jié)基本上照著查能解決八成故障?,F(xiàn)象最可能的原因處理動(dòng)作鏡像下拉列表里找不到目錄名前綴與模板 name 不匹配、權(quán)限不對(duì)改名對(duì)齊前綴重跑 fixpermissions節(jié)點(diǎn)一點(diǎn)啟動(dòng)就轉(zhuǎn)圈后失敗文件屬主錯(cuò)誤用 root 執(zhí)行 fixpermissions控制臺(tái)黑屏無(wú)輸出console 類型與系統(tǒng)實(shí)際配置矛盾Windows 用 vncLinux 用 telnet 需先配串口終端提示找不到可啟動(dòng)設(shè)備磁盤文件名不對(duì)、啟動(dòng)順序錯(cuò)核對(duì)virtioa/hda命名改-boot order安裝時(shí)找不到硬盤Windows 裝到 virtio 盤上換成hda.qcow2或加載 virtio 驅(qū)動(dòng)系統(tǒng)里容量沒變大只擴(kuò)了 qcow2 沒擴(kuò)分區(qū)進(jìn) guest 用 growpart 或磁盤管理擴(kuò)卷運(yùn)行極慢、卡頓KVM 沒啟用走了軟件模擬檢查宿主虛擬化支持確認(rèn)accelkvm生效6.2 網(wǎng)絡(luò)不通的排查順序網(wǎng)絡(luò)問題看著玄學(xué)其實(shí)排查順序是固定的從下往上捋一遍基本都能定位。先確認(rèn)拓?fù)淅锏木€拉了沒有。這話聽起來(lái)像廢話但我確實(shí)在排查了半小時(shí)之后發(fā)現(xiàn)自己忘了連線。EVE-NG 的節(jié)點(diǎn)之間不連線就是物理隔離什么配置都不會(huì)通。再確認(rèn)接口名和 IP 配置對(duì)上了沒有。EVE-NG 分配的網(wǎng)卡順序和拓?fù)淅锏倪B線順序是對(duì)應(yīng)的但如果你在設(shè)備里改過接口命名規(guī)則對(duì)應(yīng)關(guān)系就亂了。進(jìn)去ip link看一眼別憑記憶。然后確認(rèn)網(wǎng)卡型號(hào)的驅(qū)動(dòng)裝沒裝。Windows 用 virtio 網(wǎng)卡但沒裝驅(qū)動(dòng)設(shè)備管理器里會(huì)是一個(gè)黃色感嘆號(hào)接口壓根不存在。這種情況換 e1000 最快。最后看二層配置。同一網(wǎng)段內(nèi)不通先看 VLAN 劃分再看 STP 是不是把某條鏈路給阻塞了。這一步是很多明明配置都對(duì)卻不通的真正原因。6.3 幾個(gè)我實(shí)際踩過的坑別在鏡像里留 DHCP 自動(dòng)獲取。EVE-NG 本身不提供 DHCP 服務(wù)節(jié)點(diǎn)起來(lái)之后你要是配了自動(dòng)獲取它會(huì)一直發(fā)請(qǐng)求然后等超時(shí)啟動(dòng)過程能慢上好幾分鐘。做鏡像的時(shí)候就把網(wǎng)絡(luò)配成靜態(tài)或者干脆在模板說明里寫清楚。轉(zhuǎn)換大鏡像時(shí)別中途打斷。qemu-img convert沒有斷點(diǎn)續(xù)傳CtrlC 之后得到一個(gè)半成品qemu-img info看容量是對(duì)的但啟動(dòng)起來(lái)會(huì)各種詭異錯(cuò)誤。我現(xiàn)在的習(xí)慣是轉(zhuǎn)換大文件都用screen或者nohup掛著跑避免 SSH 斷線把它帶停。模板文件的兩個(gè)目錄都要放。我遇到過好幾次在intel/目錄里加了模板界面上死活不顯示后來(lái)發(fā)現(xiàn)當(dāng)前環(huán)境走的是amd/目錄。兩個(gè)都放一份成本幾乎為零省心。做完鏡像先自己完整跑一遍開關(guān)機(jī)。關(guān)機(jī)再開機(jī)看看配置有沒有丟、啟動(dòng)順序?qū)Σ粚?duì)、網(wǎng)卡數(shù)量是不是和模板一致。這一步花五分鐘能避免后面實(shí)驗(yàn)做到一半環(huán)境崩掉重來(lái)。我吃過不止一次這個(gè)虧——安裝完直接就開始搭拓?fù)渑艿揭话氚l(fā)現(xiàn)重啟后網(wǎng)卡全亂了前面的實(shí)驗(yàn)白做。最后分享一個(gè)我最近在用的思路把做好的鏡像目錄整個(gè)打包備份一份換宿主機(jī)或者重裝 EVE-NG 的時(shí)候直接解壓回去再跑一次 fixpermissions 就能用。整套鏡像庫(kù)的遷移時(shí)間從半天壓縮到十分鐘比什么導(dǎo)出導(dǎo)入工具都靠譜。