由淺入深CrosVM(一)—— 如何在Ubuntu中搭建CrosVM
什麼是CrosVM
CrosVM是Chrome作業系統中,用於建立虛擬機器的應用。是一個Rust編寫的輕量級的虛擬機器。亞馬遜的Firecracker從crosvm開始。藉助於CrosVM 使用者可以很容易的在ChromeOS中執行Linux、Android以及Windows應用程式。
CrosVM的原始碼是Google ChromeOS的一部分,但也可以獨立編譯使用。哎,還是那句話“不要問為什麼連線打不開”。還好github.com有好多CrosVM的映象,有需要的可以上去找下。
本文,我們著重描述下如何在Ubuntu 19.10中使用CrosVM建立一個Linux 虛擬機器。
環境準備
安裝minijail
這個是CrosVM 開啟feature ’sandbox‘時需要的,因為是預設開啟的,這裡就羅列一下。如果編譯有問題,或者很費勁,可以在執行crosvm的時候加上’–disable-sandbox’ 引數即可。
1
|
apt install build-essential libcap-dev libfdt-dev pkg-config python cargo repo
|
或者,如有有cros_sdk的話,在~/trunk/src/aosp/external/minijail
目錄中執行cargo build
同樣可以編譯得到庫檔案,然後可以複製到/usr/local/lib/下面就好。
編譯安裝CrosVM
1
|
mkdir crosvm
|
編譯虛擬機器的核心(Kernel)
1
|
git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
|
這裡是我自己配置的kernel config
下載並並且改名字為.config
然後編譯核心:
1
|
make olddefconfig
|
在核心根目錄中生成的vmlinux就是需要的核心檔案了(ELF 64-bit LSB executable)。
準備虛擬映象
1
|
# 建立一個空的image,大小是20G
|
對映象的一些修改:
1
|
sudo mount ubuntu19.10_rootfs.img rootfs/
|
建議嘗試啟動VM之前,在rootfs中安裝udev 和 systemd, 似乎debootstrap建立的rootfs並沒有自帶這兩個tool,需要自己安裝下,否則啟動的時候會遇到問題。
1
|
mount ubuntu19.10_rootfs.img rootfs/
|
注: 如果有同學玩過Qemu,那麼可以直接使用Qemu支援的raw或者qcow2格式的虛擬機器映象。
建立虛擬機器
1
|
sudo LD_LIBRARY_PATH=~/project/vm/minijail/ ./target/debug/crosvm run \
|
或者,CrosVM同樣支援帶有initrd的核心,如果編譯核心有困難或者比較“懶”的同學,可以直接把Ubuntu或者其他Linux發行版的核心拿來用下,啟動時可能會有少許問題,但或許可以起來嚐鮮一下虛擬機器:
1
|
sudo LD_LIBRARY_PATH=~/project/vm/minijail/ ./target/debug/crosvm run \
|
運氣好的話,在建立VM的終端裡面,應該可以看到Kernel啟動的log,最後停在登入提示符。輸入root 並回車,就可以直接登入虛擬機器了。