Ubuntu大约是自Ubuntu 7.04(或者7.10?)开始引入虚拟化技术叫做KVM,KVM是Kernel-based Virtual Machine,其实和Ubuntu不相干,这是Linux内核级支持的虚拟化技术,只是恰好Ubuntu 7.04所用的Linux内核正好支持KVM。在Ubuntu下,众所周知的桌面虚拟机有VMware和VirtualBox,其实还有选择就是KVM,只要你的CPU支持CPU硬件虚拟化技术就可以使用KVM。市场上AMD的大多数主流桌面CPU如AMD Athlon64×2 4000+或更高级别的产品都是支持AMD-V的,而Intel的可能有部分产品不支持虚拟化技术(Intel VT),所以我们需要用命令来检查所用的CPU是否支持虚拟化,这是使用KVM虚拟化技术的前提:
$cat /proc/cpuinfo
我的是AMD Turion64×2 TL-56的,显示结果如下:
processor : 0
vendor_id : AuthenticAMD
cpu family : 15
model : 72
model name : AMD Turion(tm) 64 X2
stepping : 2
cpu MHz : 800.000
cache size : 512 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy
bogomips : 1607.28
clflush size : 64
power management: ts fid vid ttp tm stc
重点就在于flags这里中的众多支持指令集和技术中要能找到svm(AMD的)和vmx(Intel的),当然为了节省眼力眼神,可以使用UNIX中的匹配文本命令egrep来帮忙:
$egrep ‘(svm|vmx)’ /proc/cpuinfo
如果屏幕返回结果,要么是svm,要么是vmx,那么就是支持虚拟化技术的CPU,否则没戏。
确定了CPU是支持硬件虚拟化技术的就可以接下来准备安装KVM的内核和管理平台了。在这里所用到的Ubuntu版本是8.10为例,特此说明。
$sudo apt-get install ubuntu-virt-server ubuntu-virt-mgmt
安装这两个包会分别安装kvm,libvirt-bin,openssh-server,virt-manager,python-vm-builder,virt-viewer这些包,显而易见一个是安装虚拟化技术所需要用到的内核而另外一个则是管理虚拟化技术的平台。
安装好之后接下来需要把当前用户加入虚拟化技术所用的用户组中,我的用户名是shixinyu,命令格式为:
$sudo adduser shixinyu libvirtd
如果你的用户名是别的,就替换掉上面命令中的shixinyu即可。接下来配置虚拟机中的网络,一般情况下网桥就可以满足虚拟机中的网络需求,所以接下来配置网络:
$sudo apt-get install bridge-utils
$sudo invoke-rc.d networking stop
$sudo nano /etc/network/interfaces
原来的文本内容可能只有下面部分:
auto loiface lo inet loopback
需要添加的内容根据你的网络情况而定,如果你的网络只需要从DHCP服务器中获得IP和服务,那么则在原有文本内容下添加一部分内容变成下面内容:
auto loiface lo inet loopbackauto eth0iface eth0 inet manualauto br0iface br0 inet dhcp bridge_ports eth0 bridge_fd 9 bridge_hello 2 bridge_maxage 12 bridge_stp off
可以看到配置文件中bridge_prots后是宿机网卡,由这个参数决定桥接哪个实际网卡和虚拟机网卡。如果你的网络需要手动指定IP,那么配置文件应该如下配置:
auto loiface lo inet loopbackauto eth0iface eth0 inet manualauto br0iface br0 inet static address 192.168.0.10 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 gateway 192.168.0.1 bridge_ports eth0 bridge_fd 9 bridge_hello 2 bridge_maxage 12 bridge_stp off
具体如何来设定IP和网关,可以参考我的一篇Post:[笔记]Ubuntu简单网络配置,配置完毕之后重启Ubuntu网络组件:
$sudo /etc/init.d/networking restart
现在要配置虚拟机配置模板来告诉虚拟机哪个虚拟网卡是桥接的,修改模板:
$sudo nano /etc/vmbuilder/libvirt/libvirtxml.tmpl
看到的原来的内容应该是如下面所示的:
把source network的赋值改为'br0',即变成下面内容:
到这里,给KVM虚拟机的网络就配置好了,这篇笔记就到此结束了。下一篇将准备来安装一个虚拟机操作系统,装一个Windows XP作为Ubuntu虚拟化实践。
