kvm 系列 001-在 ubuntu 23.10 上安装 kvm
系统环境
- 系统版本:ubuntu 23.10 (Mantic Minotaur)
- 内核版本:6.5.0-9-generic #9-Ubuntu SMP PREEMPT_DYNAMIC Sat Oct 7 01:35:40 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
安装准备
网桥配置
1.安装网桥配置工具 briege-utils
:
1 | $ sudo apt install -y bridge-utils |
2.编辑网卡配置文件 /etc/netplan/01-network-manager-all.yaml
, 配置内容如下:
1 | $ sudo cat /etc/netplan/01-network-manager-all.yaml |
3.应用配置:
1 | $ sudo netplan apply |
如果执行过程报 /etc/netplan/01-network-manager-all.yaml
too open ,则执行:
1 | sudo chmod 0600 /etc/netplan/01-network-manager-all.yaml |
目录准备
1.在指定的目录(比如我这里在 /data/kvm)下创建 2 个目录,分别为 iso
和 storage
1 | $ sudo mkdir -p /data/kvm/{iso,storage} |
2.赋予创建的目录权限为当前用户:
1 | $ sudo chown -R ${USER}:${USER} /data/kvm |
安装KVM
1.执行安装命令:
1 | $ sudo apt install -y --no-install-recommends qemu-system libvirt-clients libvirt-daemon-system libvirt-daemon libguestfs-tools libosinfo-bin virtinst |
注意: 这里没有安装 virt-manager 图形管理程序
2.在 /etc/ 目录下创建 qemu 目录,并在该目录下创建 bridge.conf 文件,配置如下内容:
1 | $ sudo mkdir -p /etc/qemu |
3.防止安装虚拟机初始化时报:stderr=failed to create tun device: Operation not permitted : Transport endpoint is not connected ,修改文件 /usr/lib/qemu/qemu-bridge-helper
的权限为 4755:
1 | # 查看原有权限 |
安装虚拟机
本地文本模式安装: 参数 –graphics none
下载 iso 文件到服务器指定目录,然后使用 virt-install
命令开始安装虚拟机:
1 | $ virt-install \ |
注意: 针对 ubuntu 镜像 ubuntu 22.04.3-live-server-amd64.iso .可以参考: virt-install Couldn’t find kernel for install tree
- 如何确定
kernel=casper/vmlinuz,initrd=casper/initrd
? - 如果不指定
kernel=casper/vmlinuz,initrd=casper/initrd
参数,则在安装时会报Couldn’t find kernel for install tree
的错. 那么如何解决?
如下:
- 1.先挂在下载好的 iso 文件
sudo mount /data/kvm/iso/ubuntu-22.04.3-live-server-amd64.iso /mnt/
- 2.然后查看目录 casper
ls /mnt/casper/
, 确定能找到名为vmlinuz
和initrd
的文件
安装参数中的 --os-variant
值可以使用命令 osinfo-query os
进行获取
本地图形模式安装: 参数 –graphics vnc,port=5900,listen=0.0.0.0
1.先安装 tigervnc-viewer
或tightvnc-java
.这里建议大家使用 tigervnc-viewer
, 因为 tightvnc-java
还需要区配置 java 环境方可以正常使用!
1 | $ sudo apt install -y tigervnc-viewer |
2.执行安装命令:
1 | $ virt-install \ |
3.执行命令 ss -lntp
查看进程 qemu-system-x86
的监听端口:
1 | $ sudo ss -lntp |egrep qemu-system-x86 |
4.执行命令 vncviewer 127.0.0.1::5900
打开安装窗口(注意:这里的 127.0.0.1 是 kvm 宿主机 IP)
5.系统初次安装完成后,依旧使用命令 vncviewer 127.0.0.1::5900
连接虚拟机.待在虚拟机中配置完 IP 后,方可使用 SSH USER@IP 的方式连接虚拟机
说明:如果不清楚虚拟机使用的是哪个 vnc 端口,可以使用如下命令(前提条件是使用了 vnc 参数进行安装):
1 | $ virsh vncdisplay --domain vm002-ubuntu |
此时,我们也可以使用命令 vncviewer 127.0.0.1:0
来连接虚拟机 vm002-ubuntu
注意:这种方式安装的虚拟机,不能通过 virsh console –daemon VM-NAME 进行连接的.
网络图形模式安装: 参数 –graphics vnc,listen=0.0.0.0
这种方式安装不需要将 iso 文件下载到本地,直接通过 location
参数指向网络镜像安装主目录.执行安装命令:
1 | virt-install --name vm003-ubuntu \ |
然后使用 vncviewer HOST::PORT 打开 VNC 图形界面进行安装!
安装报错
错误一:stderr=failed to parse default acl file `/etc/qemu/bridge.conf’
执行安装命令报:
1 | leazhi@ubuntu2310:~$ virt-install --name ubuntu2204-001 --ram 2048 --disk path=/data/kvm/images/ubuntu2204-001.img,size=50 --vcpus 2 --os-variant ubuntu22.04 --network bridge=br0 --graphics none --console pty,target_type=serial --extra-args 'console=ttyS0,115200n8' --arch x86_64 --autostart --location /home/leazhi/Downloads/ubuntu-22.04.3-live-server-amd64\ \(1\).iso,kernel=casper/vmlinuz,initrd=casper/initrd |
解决方法:
1.在 /etc/ 目录下创建 qemu 目录:
1 | sudo mkdir /etc/qemu |
2.然后在创建的目录下新建 bridge.conf
文件,并加入如下内容:
1 | allow virbr0 |
错误二:stderr=failed to create tun device: Operation not permitted
执行安装命令报:
1 | leazhi@ubuntu2310:~$ virt-install --name ubuntu2204-001 --ram 2048 --disk path=/data/kvm/images/ubuntu2204-001.img,size=50 --vcpus 2 --os-variant ubuntu22.04 --network bridge=br0 --graphics none --console pty,target_type=serial --extra-args 'console=ttyS0,115200n8' --arch x86_64 --autostart --location /home/leazhi/Downloads/ubuntu-22.04.3-live-server-amd64\ \(1\).iso,kernel=casper/vmlinuz,initrd=casper/initrd |
解决方法:
1.先查看 /usr/lib/qemu/qemu-bridge-helper
权限:
1 | leazhi@ubuntu2310:~$ sudo ls -al /usr/lib/qemu/qemu-bridge-helper |
2.然后将该文件的权限修改为 4755:
1 | leazhi@ubuntu2310:~$ sudo chmod 4755 /usr/lib/qemu/qemu-bridge-helper |
3.再次执行安装命令即可!
安装完成后的操作
由于安装虚拟机使用了参数 --console pty,target_type=serial
,所以在安装重启完后,依旧是在虚拟机状态下,如果想退回到宿主机的终端下,则需要按键盘上的 ctrl + ]
键,如果想在终端中重新进入虚拟机,则有以下两种方式;
方式一:使用 virsh console 虚拟机名称
的方式
这种方式仅适用使用 virt-install –graphics none –console pty,target_type=serial –extra-args ‘console=ttyS0,115200n8’ … 的安装方式
1.查看宿主机有哪些虚拟机:
1 | leazhi@ubuntu2310:~$ virsh list |
2.然后执行 virsh console ubuntu2204-001
进入到虚拟机:
1 | leazhi@ubuntu2310:~$ virsh console ubuntu2204-001 |
方式二: 使用 vncviewer HOST::PORT 或者 vncviewer HOST:PORT
这种方式仅适用使用 virt-install –graphics vnc,port=5900,listen=0.0.0.0 … 的安装方式
1 | vncviewer 127.0.0.1::5900 |
或者:
1 | vncviewer 127.0.0.1:0 |
方式三:使用 SSH 方式连接
这种方式连接的话,需要事先知道虚拟机的IP 地址,然后使用 ssh username@ip
的方式连接