news 2026/4/14 18:03:41

Ubuntu 20.04裸机安装QEMU完整指南:从源码编译到虚拟机启动(解决依赖问题)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu 20.04裸机安装QEMU完整指南:从源码编译到虚拟机启动(解决依赖问题)

Ubuntu 20.04裸机源码编译QEMU实战:从依赖排查到性能调优全解析

在开源虚拟化领域,QEMU以其硬件级仿真能力和跨平台特性成为开发者构建异构环境的利器。不同于直接apt install的简易安装,从源码编译QEMU能获得最新功能支持与深度定制能力——无论是需要特定版本兼容KVM加速,还是计划修改源码进行二次开发,源码编译都是不可绕过的技术路径。本文将基于Ubuntu 20.04 LTS物理机环境,拆解从依赖库解决到内核模块优化的全流程实战细节,特别针对国内开发者常见的依赖下载失败、编译参数误配等痛点提供解决方案。

1. 环境准备与依赖治理

编译环境的质量直接决定后续流程的顺畅度。在Ubuntu 20.04裸机系统中,我们需要构建完整的开发工具链和QEMU专属依赖库。执行以下命令更新基础环境:

sudo apt update && sudo apt upgrade -y sudo apt install build-essential git libglib2.0-dev libfdt-dev \ libpixman-1-dev zlib1g-dev ninja-build -y

关键依赖库的作用解析:

依赖包功能缺失时的典型报错
libglib2.0-dev提供核心数据结构支持GLib version too old
libpixman-1-dev处理像素级图形操作pixman >= 0.21.8 not found
ninja-build替代make的编译系统ERROR: ninja not found

提示:若遇到Unable to fetch some archives错误,可尝试切换阿里云镜像源:

sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list

对于需要SPICE协议或USB重定向等扩展功能的用户,还需追加安装额外模块:

sudo apt install libspice-server-dev libusbredirparser-dev \ libcap-ng-dev libattr1-dev -y

2. 源码获取与编译参数优化

推荐通过Git获取最新稳定版源码(当前以QEMU 7.2.0为例):

git clone https://gitlab.com/qemu-project/qemu.git cd qemu && git checkout v7.2.0

配置阶段是性能调优的关键窗口。以下对比三种典型配置方案的差异:

# 基础配置(仅支持x86_64架构) ./configure --target-list=x86_64-softmmu # 性能优化配置(启用KVM加速与调试) ./configure --target-list=x86_64-softmmu,aarch64-softmmu \ --enable-kvm --enable-debug # 全功能定制配置(包含GUI和高级特性) ./configure --target-list=x86_64-softmmu \ --enable-sdl --enable-gtk --enable-virtfs \ --enable-tpm --enable-libiscsi

编译参数优化技巧:

  • 使用-j$(nproc)参数启动多核并行编译
  • 内存不足时可添加--disable-werror绕过警告阻断
  • 国内用户建议设置Git代理加速子模块下载:
    git config --global http.proxy http://your_proxy:port git submodule update --init --recursive

3. 内核模块加载与权限配置

成功编译后,需要确保KVM内核模块正确加载以启用硬件加速:

lsmod | grep kvm # 验证模块状态 sudo modprobe kvm_intel # Intel处理器专用 sudo modprobe kvm_amd # AMD处理器专用

永久生效配置需创建/etc/modules-load.d/kvm.conf文件:

kvm kvm_intel # 或kvm_amd

用户组权限是常见故障点,将当前用户加入kvm和libvirt组:

sudo usermod -aG kvm $(whoami) sudo usermod -aG libvirt $(whoami) newgrp kvm # 立即生效

注意:若遇到/dev/kvm permission denied错误,检查/dev/kvm的权限应为crw-rw-rw- 1 root kvm

4. 虚拟机创建与性能调优

使用编译好的QEMU创建典型Ubuntu虚拟机(以22.04为例):

./qemu-img create -f qcow2 ubuntu2204.qcow2 20G ./qemu-system-x86_64 -m 4096 -smp 4 \ -drive file=ubuntu2204.qcow2,if=virtio \ -cdrom ~/Downloads/ubuntu-22.04-live-server-amd64.iso \ -net nic -net user,hostfwd=tcp::2222-:22 \ -accel kvm -display gtk

关键参数性能影响对比:

参数默认值优化值性能提升方向
-smp1核物理核心数多任务处理能力
-m128M主机内存70%减少交换分区使用
if=idevirtio磁盘I/O吞吐量
-acceltcgkvm指令执行效率

高级网络配置示例(桥接模式):

# 创建虚拟网桥 sudo ip link add name br0 type bridge sudo ip link set eth0 master br0 # 启动时附加参数 -netdev bridge,br=br0,id=net0 \ -device virtio-net-pci,netdev=net0

5. 常见故障排查手册

案例1:GLib版本冲突

ERROR: glib-2.56 gthread-2.56 is required to compile QEMU

解决方案:

wget https://ftp.gnome.org/pub/GNOME/sources/glib/2.56/glib-2.56.4.tar.xz tar xvf glib-2.56.4.tar.xz && cd glib-2.56.4 ./configure --prefix=/usr/local/glib-2.56 make && sudo make install export PKG_CONFIG_PATH=/usr/local/glib-2.56/lib/pkgconfig:$PKG_CONFIG_PATH

案例2:VNC连接失败

Failed to start VNC server: Failed to bind to socket

解决方法:

  • 指定未被占用的端口号
    -vnc :5 -monitor stdio
  • 或改用UNIX socket模式
    -vnc unix:/tmp/qemu.sock

案例3:TPM模块初始化失败

Failed to initialize TPM device

需确保swtpm工具已安装:

sudo apt install swtpm swtpm-tools mkdir /tmp/tpmdir swtpm socket --tpmstate dir=/tmp/tpmdir \ --ctrl type=unixio,path=/tmp/tpmdir/swtpm-sock \ --tpm2 --log level=20

启动QEMU时附加参数:

-chardev socket,id=chrtpm,path=/tmp/tpmdir/swtpm-sock \ -tpmdev emulator,id=tpm0,chardev=chrtpm \ -device tpm-tis,tpmdev=tpm0

6. 生产环境部署建议

对于需要长期运行的虚拟机实例,推荐采用daemon模式启动并配合libvirt管理:

nohup ./qemu-system-x86_64 -daemonize \ -m 8192 -smp 8 -drive file=prod.qcow2,if=virtio \ -net nic,model=virtio -net tap,script=/etc/qemu-ifup \ -accel kvm -cpu host &

关键稳定性配置:

  • 使用-cpu host暴露全部CPU特性
  • 添加-enable-kvm-machine q35提升兼容性
  • 通过cgroups限制资源使用:
    cgcreate -g cpu,memory:/qemu_vm cgexec -g cpu,memory:/qemu_vm ./qemu-system-x86_64 ...

监控与维护命令:

virsh list --all # 查看虚拟机状态 qemu-img check prod.qcow2 # 磁盘镜像校验 virsh dumpxml vm_name # 导出配置文件
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 17:59:46

MogFace实战:如何用AI工具快速检测合影照片中的人脸数量?

MogFace实战:如何用AI工具快速检测合影照片中的人脸数量? 1. 引言:合影人数统计的痛点与解决方案 每次拍完集体照,你是否也遇到过这样的困扰:照片里到底有多少人?特别是当人数众多、排列不规则时&#xf…

作者头像 李华
网站建设 2026/4/14 17:58:58

Proxmox三节点集群实战部署

1. 为什么选择Proxmox三节点集群? 如果你正在寻找一个既稳定又灵活的企业级虚拟化方案,Proxmox VE绝对值得考虑。我最早接触Proxmox是在五年前,当时公司需要搭建一个内部开发测试环境,经过对比多个方案后,最终选择了P…

作者头像 李华
网站建设 2026/4/14 17:58:11

两个细则+晚高峰:风电预测偏差,正在被成倍放大扣分

2026年,“两个细则”真的变严了。如果你还以为偏差考核只是“象征性地扣点分”,那你的风电场可能正在经历一场看不见的扣分雪崩。进入2026年以来,随着《电力并网运行管理规定》和《电力辅助服务管理实施细则》在全国范围内的严格执行&#xf…

作者头像 李华
网站建设 2026/4/14 17:56:12

第11篇:从零搭建AUTOSAR开发环境:工具链选型与安装配置实战

为什么开发环境是AUTOSAR的第一道坎 很多工程师第一次接触AUTOSAR时,最直观的感受不是代码难写,而是“连环境都跑不起来”。AUTOSAR是一个极度依赖工具链的架构体系,传统的Makefile + GCC + JTAG三板斧在这里远远不够。你需要一套完整的商业工具或精心拼凑的开源方案,才能从…

作者头像 李华