瀏覽量:56次
為什么要折騰 KVM 虛擬機(jī)
最近因?yàn)楣镜氖虑?,沒有太多時(shí)間進(jìn)行寫作,就用一篇技術(shù)類的文章來湊數(shù)吧。
事情是這樣的,我們公司有一個(gè)小東西是基于嵌入式的系統(tǒng)開發(fā)的,不屬于 Android 也不屬于 iOS 平臺(tái)。嗯,這意味著什么呢?這意味著開發(fā)這個(gè)小東西的語言是 C 語言,而不是 Java, Objective-C 抑或是 Swift。所以我們需要一個(gè) Cross Compiler,也就是俗稱的交叉編譯環(huán)境來編譯這個(gè)代碼。
其實(shí) Xcode 編譯出來的 iOS App 也屬于交叉編譯的范疇。
然而,這個(gè)交叉編譯環(huán)境竟然只有 Windows 平臺(tái)的!其實(shí),好像除了 GCC 之外,好用的交叉編譯環(huán)境都是 Windows 下面的。估計(jì)很多玩嵌入式的同學(xué)應(yīng)該都知道,現(xiàn)在業(yè)內(nèi)用得比較多的也就是 Keil 和 IAR 系列了。而及其不幸的是,兩者都是 Windows 特供的,沒有 macOS 或 Linux 版本。
為什么 Windows 會(huì)讓我這么得不爽呢?因?yàn)槠匠榱烁玫奶岣吖ぷ餍?,除了不得不使用的行業(yè)應(yīng)用軟件必須要跑在 Windows 下的時(shí)候,我們只用 Mac 不用 Windows。所以,我們基本上沒有閑置和富裕的 Windows 主機(jī),不!是壓根就沒有,沒有什么「基本沒有」一說。
而在服務(wù)器端,更不要跟我說什么 Windows Server 云云的。作為一個(gè) macOS 和 Ubuntu 的腦殘用戶,我是不可能在 Bare metal 上跑一個(gè) Windows Server 的。服務(wù)器我們只跑 Linux,別的沒興趣。
那么問題來了,我們有一套自動(dòng)化編譯系統(tǒng),也就是大家所熟知的 CI 體系 (Continuous integration),用的是 Atlassian 的全家桶:Bitbucket、Bamboo、JIRA 還有 Confluence 什么的,全部跑在 Linux 平臺(tái)的 Docker 虛擬化容器中。
現(xiàn)在我們想把這個(gè)小東西也自動(dòng)化編譯器來,以便更好地把人力釋放出來,也方便未來跟蹤和管理每一次 Release 的內(nèi)容。而第一個(gè)要解決的問題就是:我們沒有 Windows 的服務(wù)器。
既然現(xiàn)在虛擬化這么流行,那么我們就利用現(xiàn)有的 Ubuntu 服務(wù)器虛擬化一個(gè) Windows 好啦,走起!
啥是 KVM
KVM 的全稱是:Kernel-based Virtual Machine,簡單一句話概括,就是一個(gè)基于 Linux 內(nèi)核的虛擬化管理系統(tǒng)。
從 Linux 內(nèi)核 版本開始就已經(jīng)集成了該功能。簡單理解 Docker 是在應(yīng)用層的虛擬化,而 KVM 是在系統(tǒng)層的虛擬化。
區(qū)別就是,Docker 虛擬化的內(nèi)容,必須跟 Host 主機(jī)共享內(nèi)核,也就意味著只能跑 Linux 類系統(tǒng)。
而 KVM 是整個(gè)主機(jī)虛擬,所以可以安裝不同的操作系統(tǒng),而不局限于 Linux 本身。等我過段時(shí)間抽風(fēng)的時(shí)候,看看能不能在 Ubuntu 上虛擬化個(gè) macOS 出來。這樣就不用單獨(dú)再弄個(gè) Mac 主機(jī)來自動(dòng)化編譯 iOS App 了。
安裝 KVM
我這里使用的是 Ubuntu LTS 版本,考慮長期使用和穩(wěn)定性,基本上只選 LTS 版本,其他版本差別也不太大,參考著做就好了。
首先是安裝 KVM 相關(guān)的包文件,因?yàn)槲业姆?wù)器都是命令行,沒有安裝 X 桌面,所以我加了 --no-install-recommends 參數(shù)。不然的話它會(huì)安裝 virt-viewer 之類的包,而它們的依賴關(guān)系中又有 X11 和很多圖形圖像庫,而這些都用不上。但是如果你開啟了桌面系統(tǒng),那么也可以不加該參數(shù)。
$ sudo apt-get install --no-install-recommends qemu-kvm qemu-utils libvirt-bin virtinst cpu-checker
讓我們來驗(yàn)證一下是不是一切 OK
$ kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used
很好,一切順利,我們?cè)賮砼獋€(gè)橋接網(wǎng)絡(luò)。其實(shí)這個(gè)也不是必須的,看你的使用場(chǎng)景。
KVM 會(huì)自己創(chuàng)建一個(gè) virbr0 的橋接網(wǎng)絡(luò),但是這個(gè)是一個(gè) NAT 的網(wǎng)絡(luò),沒有辦法跟局域網(wǎng)內(nèi)的其他主機(jī)進(jìn)行通信,所以還是別偷懶,自己建一個(gè)橋接網(wǎng)絡(luò)吧。
參考配置如下:
$ cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/*
# The loopback network interface
auto lo
iface lo inet loopback
# The bridged network interface
auto br0
iface br0 inet static
address
netmask
gateway
dns-nameservers
bridge_ports enp9s0
bridge_stop off
bridge_fd 0
bridge_maxwait 0
重啟網(wǎng)絡(luò),并驗(yàn)證一下橋接狀態(tài):
$ sudo systemctl restart networking
$ sudo brctl show
bridge name bridge id STP enabled interfaces
br0 no enp9s0
virbr0 yes virbr0-nic
OK,一切正常,可以開始創(chuàng)建虛擬主機(jī)了。
創(chuàng)建虛擬主機(jī)
KVM 只是完成了第一步,我們還需要?jiǎng)?chuàng)建虛擬主機(jī)才可以繼續(xù)往下走。
在開始之前,我們要準(zhǔn)備好幾個(gè)東西:
安裝鏡像
ISO 和軟盤鏡像
客戶端(macOS 自帶)
我這里使用的是 Virtio 版本。操作系統(tǒng)版本是:Ubuntu LTS。
一切準(zhǔn)備就緒,使用 virt-install 命令來幫助創(chuàng)建虛擬機(jī):
virt-install \
--name win10 \
--memory 2048 \
--vcpus sockets=1,cores=1,threads=2 \
--cdrom=/path/to/ \
--os-variant= \
--disk /path/to/win10/,bus=virtio,size=40 \
--disk /path/to/virtio/,device=floppy \
--network bridge=br0,model=virtio \
--graphics vnc,password=Passw0rd,port=5910 \
--hvm \
--virt-type kvm
基本上配置信息都在上面了,虛擬信息機(jī)配置如下:
2G 內(nèi)存
1 個(gè) CPU,1 個(gè)核,2 個(gè)線程
1 個(gè) CDROM(Windows 安裝光盤)
40G 硬盤(系統(tǒng)盤)
1 個(gè)軟驅(qū)(Virtio 驅(qū)動(dòng))
在 5910 端口開放一個(gè) VNC 遠(yuǎn)程桌面
如果你的命令輸入的正確,應(yīng)該會(huì)得到類似的反饋信息:
Starting install...
Creating domain...
Domain installation still in progress. Waiting for installation to complete.
簡單來說,就是虛擬機(jī)已經(jīng)創(chuàng)建好了,但是因?yàn)闆]有圖像界面,所以沒有辦法下一步了。當(dāng)我們連接了 VNC 以后,就可以繼續(xù)往下走了。這個(gè)提示只會(huì)出現(xiàn)一次,安裝好系統(tǒng)以后,不會(huì)出現(xiàn)這個(gè)啟動(dòng)等待的情況。
安裝 Windows 10
雖然我們?cè)趧?chuàng)建虛擬機(jī)的時(shí)候,指明了使用 5910 端口來提供 VNC 遠(yuǎn)程桌面。但是這個(gè)端口是不能直接訪問的,因?yàn)樗J(rèn)綁定在 上,也就是只有本地才能訪問。我們需要先把遠(yuǎn)程的本地端口,映射成本地的端口。
ssh -L 5910::5910 server
然后在 macOS 下,? + Space 呼叫出 Spotlight,然后輸入:
Windows 系統(tǒng)了,如果不能識(shí)別硬盤,需要手動(dòng)加載一下驅(qū)動(dòng),選擇 A 盤和對(duì)應(yīng)的 Windows 目錄就可以了。同樣的,如果網(wǎng)卡沒有驅(qū)動(dòng),也是如法炮制。
附安裝完成的屏幕截圖一張:
[聲明]本網(wǎng)轉(zhuǎn)載網(wǎng)絡(luò)媒體稿件是為了傳播更多的信息,此類稿件不代表本網(wǎng)觀點(diǎn),本網(wǎng)不承擔(dān)此類稿件侵權(quán)行為的連帶責(zé)任。故此,如果您發(fā)現(xiàn)本網(wǎng)站的內(nèi)容侵犯了您的版權(quán),請(qǐng)您的相關(guān)內(nèi)容發(fā)至此郵箱【779898168@qq.com】,我們?cè)诖_認(rèn)后,會(huì)立即刪除,保證您的版權(quán)。
官網(wǎng)優(yōu)化
整站優(yōu)化
渠道代理
400-655-5776