什么是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 並回車,就可以直接登錄虛擬機了。