BLFS QEMU
QEMU 是x86硬件提供了虚拟化扩展(Intel VT / AMD-V)的完全虚拟化解决方案。
依赖
必须:
建议:
alsa-lib
考虑到我使用的虚拟机主要用于服务器,对音频没有需求,所以不安装这个ALSA库dtc
Device Tree Compiler,用于设备树源代码和二进制文件,例如 libfdt 以二进制格式读取和操作设备树,不确定是否需要,暂时不安装libslirp
用于虚拟机,容器和相关工具的用户模式网络库,感觉有用,且只依赖 glibsdl2
Simple DirectMedia Layer Version 2: 跨平台用于编写多媒体软件,暂不安装
备注
我只依赖编译安装了 libslirp
,不过实践验证使用并没有问题。包括VNC桌面也能够正常使用,见 在QEMU中运行debian
内核
以下内核配置需要激活以支持虚拟化
[*] Virtualization ---> [VIRTUALIZATION]
<*/M> Kernel-based Virtual Machine (KVM) support [KVM]
# Enable the option for your CPU:
< /*/M> KVM for Intel (and compatible) processors support [KVM_INTEL]
< /*/M> KVM for AMD processors support [KVM_AMD]
[*] Networking support ---> [NET]
Networking options --->
<*/M> 802.1d Ethernet Bridging [BRIDGE]
Device Drivers --->
[*] Network device support ---> [NETDEVICES]
[*] Network core driver support [NET_CORE]
<*/M> Universal TUN/TAP device driver support [TUN]
编译内核
#编译内核映像和模块
make
#安装内核模块
make modules_install
# 复制编译好的内核
cp -iv arch/x86/boot/bzImage /boot/vmlinuz-6.10.5-lfs-12.2
# System.map 是内核符号文件,它将内核 API 的每个函数入口点和运行时数据结构映射到它们的地址。它被用于调查分析内核可能出现的问题。
cp -iv System.map /boot/System.map-6.10.5
# 内核配置文件 .config 由上述的 make menuconfig 步骤生成,包含编译好的内核的所有配置选项。最好能将它保留下来以供日后参考
cp -iv .config /boot/config-6.10.5
# 安装 Linux 内核文档
cp -r Documentation -T /usr/share/doc/linux-6.10.5
安装
cd /sources
qemu_VERSION=9.0.2
tar xf qemu-${qemu_VERSION}.tar.xz
cd qemu-${qemu_VERSION}
# 添加用户组名
usermod -a -G kvm admin
# qemu可以运行不同平台,当使用 --target-list 并使用逗号分隔的列表,则可以构建多个目标平台
if [ $(uname -m) = i686 ]; then
QEMU_ARCH=i386-softmmu
else
QEMU_ARCH=x86_64-softmmu
fi
mkdir -vp build &&
cd build &&
# BLFS手册配置
# disable-pa表示关闭PalseAudio sound支持
#../configure --prefix=/usr \
# --sysconfdir=/etc \
# --localstatedir=/var \
# --target-list=$QEMU_ARCH \
# --audio-drv-list=alsa \
# --disable-pa \
# --enable-slirp \
# --docdir=/usr/share/doc/qemu-${qemu_VERSION} &&
# 我没有启用alsa,所以关闭支持;也关闭docs
../configure --prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var \
--target-list=$QEMU_ARCH \
--disable-pa \
--enable-slirp \
--disable-docs &&
unset QEMU_ARCH &&
make
make install
#修订helper脚本属主,这个脚本将被 "bridge" 网络设备使用
chgrp kvm /usr/libexec/qemu-bridge-helper &&
chmod 4750 /usr/libexec/qemu-bridge-helper
# 为方便使用构建软链接
ln -sv qemu-system-`uname -m` /usr/bin/qemu
BLFS qemu使用bridge网络
案例采用 在QEMU中运行debian :
qemu-system-x86_64 \
-nodefaults \
-enable-kvm \
-cpu host,kvm=off \
-m 8G \
-smp cores=4 \
-boot order=c,once=d,menu=on \
-drive file=/sources/images/debian.qcow,if=virtio \
-cdrom /sources/debian-cd_current_amd64_iso-dvd_debian-12.9.0-amd64-DVD-1.iso \
-net nic,model=virtio,macaddr=52:54:00:00:00:01 -net bridge,br=br0 \
-nographic \
-vga none \
-serial mon:stdio \
-name "debian"
添加qemu ACL配置
警告
必须步骤
在BLFS的qemu章节,最后一段配置我最初忽略了,实际上和 bridge配置 br0 有一个对应的 qemu
配置 /etc/qemu/bridge.conf
通过以下命令构建:
br0
对应配置指示qemu使用install -vdm 755 /etc/qemu &&
echo allow br0 > /etc/qemu/bridge.conf
如果没有这个 /etc/qemu/bridge.conf
配置文件,那么在执行 qemu-system-x86_64 ... -net nic,model=virtio,macaddr=52:54:00:00:00:01 -net bridge,br=br0 ...
会提示报错:
/etc/qemu/bridge.conf
配置导致使用bridge的qemu命令报错failed to parse default acl file `/etc/qemu/bridge.conf'
qemu-system-x86_64: -net bridge,br=br0: bridge helper failed
加载tun内核模块
使用 bridge 网络时,需要访问 /dev/net/tun
设备,如果内核没有加载这个模块,会提示错误:
tun
模块,则提示错误failed to open /dev/net/tun: No such file or directory
qemu-system-x86_64: -net bridge,br=br0: bridge helper failed
手工加载模块:
tun
模块modprobe tun
配置启动加载模块:
tun
模块配置文件install -v -m755 -d /etc/modprobe.d
cat > /etc/modprobe.d/tun.conf << "EOF"
# Begin /etc/modprobe.d/tun.conf
tun
# End /etc/modprobe.d/tun.conf
EOF
BLFS qemu使用
在QEMU中运行debian 常规安装
在QEMU中运行GPU passthrough的Debian 支持UEFI模式并使用
vfio-pci
实现GPU passthrough