系统环境

  • 系统版本: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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$ sudo cat /etc/netplan/01-network-manager-all.yaml
# This file is generated from information provided by the datasource. Changes
# to it will not persist across an instance reboot. To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
eno2: # 物理网卡
dhcp4: false
dhcp6: false
bridges:
br0:
interfaces:
- eno2 # 桥街到物理网卡
addresses:
- 192.168.3.120/24
gateway4: 192.168.3.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
macaddress: e8:9c:25:74:46:a5 # 物理网卡对应的 MAC 地址
parameters:
stp: true
forward-delay: 4
version: 2
wifis: {}

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 个目录,分别为 isostorage

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
2
3
$ sudo mkdir -p /etc/qemu

$ echo -e 'allow virbr0\nallow all' | sudo tee -a /etc/qemu/bridge.conf

3.防止安装虚拟机初始化时报:stderr=failed to create tun device: Operation not permitted : Transport endpoint is not connected ,修改文件 /usr/lib/qemu/qemu-bridge-helper 的权限为 4755:

1
2
3
4
5
# 查看原有权限
$ sudo ls -al /usr/lib/qemu/qemu-bridge-helper

# 修改权限
$ sudo chmod 4755 /usr/lib/qemu/qemu-bridge-helper

安装虚拟机

本地文本模式安装: 参数 –graphics none

下载 iso 文件到服务器指定目录,然后使用 virt-install 命令开始安装虚拟机:

1
2
3
4
5
6
7
8
9
10
11
12
13
$ virt-install \
--name vm001-ubuntu22 \
--ram 8192 \
--disk path=/data/kvm/storage/vm001-ubuntu22.qcow2,size=50 \
--vcpus 4 \
--os-variant ubuntu22.04 \
--network bridge=br0 \
--graphics none \
--console pty,target_type=serial \
--extra-args 'console=ttyS0,115200n8' \
--arch x86_64 \
--autostart \
--location /data/kvm/iso/ubuntu-22.04.3-live-server-amd64.iso,kernel=casper/vmlinuz,initrd=casper/initrd

注意: 针对 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/, 确定能找到名为 vmlinuzinitrd 的文件

安装参数中的 --os-variant 值可以使用命令 osinfo-query os 进行获取

本地图形模式安装: 参数 –graphics vnc,port=5900,listen=0.0.0.0

1.先安装 tigervnc-viewertightvnc-java.这里建议大家使用 tigervnc-viewer, 因为 tightvnc-java 还需要区配置 java 环境方可以正常使用!

1
$ sudo apt install -y tigervnc-viewer 

2.执行安装命令:

1
2
3
4
5
6
7
8
9
$ virt-install \
--name vm002-ubuntu \
--ram 8192 --vcpus 4 \
--disk path=/data/kvm/storage/vm002-ubuntu.qcow2,format=qcow2,size=50 \
--os-variant ubuntu22.04 \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole \
--location /data/kvm/iso/ubuntu-22.04.3-live-server-amd64.iso,kernel=casper/vmlinuz,initrd=casper/initrd

3.执行命令 ss -lntp 查看进程 qemu-system-x86 的监听端口:

1
2
$ sudo ss -lntp |egrep qemu-system-x86
LISTEN 0 1 0.0.0.0:5900 0.0.0.0:* users:(("qemu-system-x86",pid=12945,fd=25))

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
2
$ virsh vncdisplay --domain vm002-ubuntu 
:0 # 这里的 :0 表示 5900; 以此类推, :1 表示 5901

此时,我们也可以使用命令 vncviewer 127.0.0.1:0 来连接虚拟机 vm002-ubuntu

注意:这种方式安装的虚拟机,不能通过 virsh console –daemon VM-NAME 进行连接的.

openstack 文档

网络图形模式安装: 参数 –graphics vnc,listen=0.0.0.0

这种方式安装不需要将 iso 文件下载到本地,直接通过 location 参数指向网络镜像安装主目录.执行安装命令:

1
2
3
4
5
6
7
8
9
10
11
virt-install --name vm003-ubuntu \
--ram 8192 \
--disk path=/data/kvm/storage/vm003-ubuntu.qcow2,size=50 \
--vcpus 4 \
--os-variant ubuntu22.04 \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole \
--arch x86_64 \
--autostart \
--location 'https://mirror.tuna.tsinghua.edu.cn/ubuntu/dists/focal/main/installer-amd64/'

然后使用 vncviewer HOST::PORT 打开 VNC 图形界面进行安装!

安装报错

错误一:stderr=failed to parse default acl file `/etc/qemu/bridge.conf’

执行安装命令报:

1
2
3
4
5
6
7
8
9
10
11
12
13
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

开始安装......
正在检索 ' vmlinuz' | 0 B 00:00:00 ...
正在检索 ' initrd' | 0 B 00:00:00 ...
正在分配 'ubuntu2204-001.img' | 0 B 00:00:00 ...
正在删除磁盘 'ubuntu2204-001.img' | 0 B 00:00:00
ERROR /usr/lib/qemu/qemu-bridge-helper --use-vnet --br=br0 --fd=32: failed to communicate with bridge helper: stderr=failed to parse default acl file `/etc/qemu/bridge.conf'
: Transport endpoint is not connected
域安装似乎没有成功。
如果是这样,则可以通过运行以下命令来重新启动域:
virsh --connect qemu:///session start ubuntu2204-001
否则请重新开始安装。

解决方法:

1.在 /etc/ 目录下创建 qemu 目录:

1
sudo mkdir /etc/qemu

2.然后在创建的目录下新建 bridge.conf 文件,并加入如下内容:

1
2
allow virbr0
allow all

错误二:stderr=failed to create tun device: Operation not permitted

执行安装命令报:

1
2
3
4
5
6
7
8
9
10
11
12
13
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

开始安装......
正在检索 ' vmlinuz' | 0 B 00:00:00 ...
正在检索 ' initrd' | 0 B 00:00:00 ...
正在分配 'ubuntu2204-001.img' | 0 B 00:00:00 ...
正在删除磁盘 'ubuntu2204-001.img' | 0 B 00:00:00
ERROR /usr/lib/qemu/qemu-bridge-helper --use-vnet --br=br0 --fd=32: failed to communicate with bridge helper: stderr=failed to create tun device: Operation not permitted
: Transport endpoint is not connected
域安装似乎没有成功。
如果是这样,则可以通过运行以下命令来重新启动域:
virsh --connect qemu:///session start ubuntu2204-001
否则请重新开始安装。

解决方法:

1.先查看 /usr/lib/qemu/qemu-bridge-helper 权限:

1
2
leazhi@ubuntu2310:~$ sudo ls -al /usr/lib/qemu/qemu-bridge-helper 
-rwxr-xr-x 1 root root 696392 10月 4 06:13 /usr/lib/qemu/qemu-bridge-helper

2.然后将该文件的权限修改为 4755:

1
2
3
leazhi@ubuntu2310:~$ sudo chmod 4755 /usr/lib/qemu/qemu-bridge-helper 
leazhi@ubuntu2310:~$ sudo ls -al /usr/lib/qemu/qemu-bridge-helper
-rwsr-xr-x 1 root root 696392 10月 4 06:13 /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
2
3
4
leazhi@ubuntu2310:~$ virsh list
Id Name State
--------------------------------
4 ubuntu2204-001 running

2.然后执行 virsh console ubuntu2204-001 进入到虚拟机:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
leazhi@ubuntu2310:~$ virsh console ubuntu2204-001 
Connected to domain 'ubuntu2204-001'
Escape character is ^] (Ctrl + ]) # 断开连接按 ctrl + ],继续进入按 回车键

ubuntu2204-001 login: root
Password:

Login incorrect
ubuntu2204-001 login: ubuntu
Password:
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-87-generic x86_64)

* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage

System information as of Tue Oct 24 03:31:34 AM UTC 2023

System load: 0.02685546875 Processes: 130
Usage of /: 20.6% of 23.45GB Users logged in: 0
Memory usage: 10% IPv4 address for enp1s0: 192.168.3.139
Swap usage: 0%

Expanded Security Maintenance for Applications is not enabled.

27 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status



The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@ubuntu2204-001:~$ # 断开虚拟机连接
leazhi@ubuntu2310:~$

方式二: 使用 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 的方式连接