宿主机环境为ubuntu-20.04桌面版。
新版ubuntu直接使用apt安装即可,无需手动编译qemu。
sudo apt-get install qemu
sudo apt-get install qemu-system
安装3个软件包libvirt0、libvirt-daemon、libvirt-daemon-system
安装命令
sudo apt-get install 包的名称
如果不安装libvirt-daemon-system,会有如下错误,尽管安装了libvirt-daemon后/usr/sbin下已经有libvirtd。
通过apt list --installed |grep libvirt,可以查看安装的libvirt相关的包。
使用的镜像为ubuntu-20.04.2-live-server-amd64.iso,复制下载链接使用迅雷下载速度会很快哦。值得一说,虚拟机是服务器版的系统,而宿主机是桌面版的。
qemu-img主要使用raw和qcow2两种格式的磁盘,磁盘的大小需考虑系统的大小,这里分了30G。
qemu-img create -f raw ubuntu.img 30G
格式化磁盘如下,也可以使用mkfs.ext4。
mkfs -t ext4 ubuntu.img
virsh通过xml定义虚拟机,这里给出一种方案,相对来说还是比较简洁的。模拟器使用的是qemu-system-x86_64,有很多其他文章使用qemu-kvm,具体的目录得看安装在哪里。graphics的配置是为了提供vnc访问,这样可以登录到虚拟机。在首次安装时,,意思是从光盘启动。前面创建的磁盘还是空的,没有装系统,所以要从光盘启动安装系统。当系统安装完成后,同时注释光盘对应的磁盘描述。
<domain type='kvm'>
<name>ubuntu-20.04</name>
<memory unit='GiB'>4</memory>
<currentMemory unit='GiB'>4</currentMemory>
<vcpu>2</vcpu>
<os>
<type arch='x86_64' machine='pc-i440fx-4.2'>hvm</type>
<boot dev='hd'/>
<boot dev='cdrom'/>//在找不到硬盘启动时选择该项,也就是在第一次安装时使用该项
<bootmenu enable='no'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='localtime'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/home/pl/vm/ubuntu-20.04_disk/ubuntu.img'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
<!-- <disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<source file='/home/pl/vm/ubuntu-20.04_disk/ubuntu-20.04.2-live-server-amd64.iso'/>
<target dev='hdc' bus='ide'/>
<readonly/>
</disk> --> //仅在安装系统时使用,这里<!-- -->是xml文件特有的多行注释
<graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0' keymap='en-us'>
<listen type='address' address='0.0.0.0'/>
</graphics>//为了登录到虚拟机
</devices>
</domain>
使用xml文件创建虚拟机,如下即可。
virsh define *.xml
然后,启动虚拟机。启动虚拟机用的是xml中描述的虚拟机的名称,启动成功会有提示。
virsh start ubuntu-20.04
如果要修改xml配置,那么就要先关闭虚拟机。然而,如果配置文件没有配置graphics,vnc通信没有建立,也没有其它可替代的通信方式,或者启动panic,virsh shutdown根本就不能关闭虚拟机,这时要找到虚拟机相关的进程kill强制结束才能关闭。
virsh shutdown ubuntu-20.04
使用vnc连接虚拟机。那么宿主机要安装vnc连接的程序,这里安装的gvncviewer。ubuntu20的apt-get没有vncviewer了,所以换成gvncviewer。查看虚拟机vnc端口,virsh vncdisplay ubuntu-20.04,说明使用端口0。
使用vnc即可连接虚拟机,进入的页面正好是ubuntu安装的引导界面,安装即可。安装完成之后,要拔除cdrom,可是这里cdrom是虚拟的。直接shutdown虚拟机,修改xml为硬盘启动,再启动虚拟机即可。
gvncviewer 127.0.0.1:0
虚拟机配置网络的方式主要有两种,一种是桥接,一种是NAT接口。桥接方式虚拟机可以配置ip,外部网络可以访问虚拟机网络,虚拟机也可以共享主机物理网卡,这种方式可以用于登录虚拟机也可以访问外网。另外一种是NAT接口,虚拟机可以访问主机可以访问的外部网络。在主机xml文件中的配置方式如下:
<!--桥接方式-->
<interface type='bridge'>
<mac address='fa:92:01:33:d4:fa'/> //不能和主机mac地址相同
<source bridge='virbr0'/> //主机中使用ifconfig查看
<target dev='vnet0'/> //同一网桥下相同,可以不设置
<alias name='net0'/> //别名,同一网桥下相同,可以不设置
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> //注意slot值唯一,slot值会决定虚拟机网卡名称
</interface>
<!--NAT方式,一般不需要使用该方式-->
<interface type='network'> //基于虚拟局域网的网络
<mac address='52:54:00:52:70:9a'/> //主机中使用virsh net-dumpxml default可以查看
<source network='default'/> //默认是nat方式
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> //注意slot值
</interface>
虚拟机网络配置,ubuntu18开始ubuntu系列使用netplan进行网络配置。相应的配置文件为*.yaml,不同环境有所差别。使用命令:netplan apply可以让配置生效。
*.yaml的配置如下,ens3是网卡名称,在虚拟机上使用ifconfig或者ip link可以查看。注意对于virsh控制的虚拟机,地址一般都是192.168.122.?,其中?表示可选。而网关地址必须是virsh net-dumpxml default中显示的ip地址。
network:
ethernets:
ens3:
addresses: [192.168.122.11/24]
gateway4: 192.168.122.1
nameservers:
addresses: [8.8.8.8]
version: 2
让ubuntu中的apt能使用正确的源可以使用如下配置:
/etc/apt/source.list
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal universe
deb http://mirrors.aliyun.com/ubuntu/ focal-updates universe
deb http://mirrors.aliyun.com/ubuntu/ focal multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal-security universe
deb http://mirrors.aliyun.com/ubuntu/ focal-security multiverse
如果需要配置代理可以在apt.conf中配置。