QEMU

来自 Alpine Linux
(重定向自 Qemu)

QEMU 是一个通用的开源机器模拟器和虚拟化器。

QEMU 可以通过几种不同的方式使用。最常见的是系统模拟,它提供了一个完整机器(CPU、内存和模拟设备)的虚拟模型来运行 guest OS。在这种模式下,CPU 可以完全模拟,或者它可以利用硬件虚拟化技术与 hypervisor(例如 KVMXen 或其他框架)一起工作,以允许 guest OS 直接在主机 CPU 上运行。

第二种支持的 QEMU 使用方式是用户模式模拟,其中 QEMU 可以在一个 CPU 上启动为另一个 CPU 编译的进程。在这种模式下,CPU 始终是模拟的,并且 QEMU 能够虚拟化或模拟 x86、x86_64、PowerPC、ARM 和 S390 guest OS。

在 QEMU 中安装 Alpine Linux

开始之前

  • 下载 最新的 Alpine 镜像
  • 在您的系统上安装 QEMU(例如 Ubuntu 上使用 sudo apt install qemu,Fedora 上使用 yum -y install qemu

如果您正在使用 Alpine Linux,您可以安装

# apk add qemu qemu-img qemu-system-x86_64 qemu-ui-gtk

创建虚拟机

如果您想安装 Alpine Linux,请创建一个磁盘镜像。

qemu-img create -f qcow2 alpine.qcow2 8G

以下命令使用 Alpine ISO 镜像作为 CDROM、默认网络配置、512MB RAM、在上一步中创建的磁盘镜像以及 CDROM 作为启动设备来启动 QEMU。

qemu-system-x86_64 -m 512 -nic user -boot d -cdrom alpine-standard-3.21.3-x86_64.iso -hda alpine.qcow2 -display gtk -enable-kvm

提示: 如果您的硬件不支持,请删除 -enable-kvm 选项。

root 身份登录(无密码)并运行

setup-alpine

按照 setup-alpine 安装步骤 进行操作。

运行 poweroff 关闭机器。

启动虚拟机

安装后,可以从磁盘镜像 (-boot c) 启动 QEMU,无需 CDROM。

qemu-system-x86_64 -m 512 -nic user -hda alpine.qcow2

Live 模式

要仅在无盘模式下试用 Alpine Linux,可以使用 qemu 启动 .iso 文件,而无需虚拟 HDD 镜像或进一步配置。

qemu-system-x86_64 -m 512 -nic user -boot d -cdrom alpine-3.21.3-x86_64.iso --accel kvm

让 .iso 镜像加载 apkovl

这通过在 /media 下挂载持久性文件系统并选择它来存储 apkovlapkcache 来实现。

准备带有虚拟驱动器的 KVM

mkdir -p /media/usb/images qemu-img create -f raw /media/usb/images/mykvm.config 32M qemu-system-x86_64 -enable-kvm -m 384 \ -name mykvm \ -cdrom /media/usb/images/alpine-3.21.3-x86_64.iso \ -drive file=/media/usb/images/mykvm.config,if=virtio \ -net lan \ -boot d &

在 KVM 内部(运行 Alpine Linux)

fdisk /dev/vda  #creating a partition
mkdosfs /dev/vda1
mkdir -p /media/vda1
echo "/dev/vda1 /media/vda1 vfat rw 0 0" >> /etc/fstab
mount -a
setup-alpine  # (select vda1 for saving configs)
lbu commit

下一次重启然后加载在 /dev/vda1 上找到的生成的 apkovl 和 apkcache -- 完全从 RAM 运行,基于最新的官方 ISO。

高级网络配置

为了使网络正确运行,您可以使用 tun/tap 接口,它会变成一个真实的接口。关键是在正确的虚拟 vlan 和正确的 ifup 脚本上定义虚拟网络接口。

您需要在命令行界面上使用 2 个 net 命令,一个用于主机

-net tap,vlan=[somenumber],ifname=[host if],script=[some script]

一个用于 guest

-net nic,vlan=[samenumber]

因此,要在连接到物理主机上的 tap0 的 qemu 虚拟系统上拥有单个 NIC

qemu -net tap,vlan=0,ifname=tap0,script=./qemu-ifup -net nic,vlan0 \
    -boot d -cdrom alpine*.iso}}


要创建具有多个 nic 的 qemu guest,只需重复 -net 命令

qemu -net tap,vlan=0,ifname=tap0,script=./qemu-ifup -net nic,vlan0 \
      -net tap,vlan=0,ifname=tap1,script=./qemu-ifup -net nic,vlan0 \
      -net tap,vlan=0,ifname=tap2,script=./qemu-ifup -net nic,vlan0 \
      -boot d -cdrom alpine*.iso}}

现在您的 alpine guest 将有 3 个 NIC,分别映射到 tap0、tap1 和 tap2。

实际发生的情况是您正在有效地创建一个点对点隧道,物理 tap0 设备是一个端点,虚拟机的 eth0 是隧道的另一个端点。

因此您需要为隧道的两侧分配 IP 地址。 qemu-ifup 脚本就是为主机执行此操作的脚本。这是一个例子

#!/bin/sh
case $1 in
      tun0 | tap0 )
              sudo /sbin/ip addr add 192.168.1.100/24 dev $1
              sudo /sbin/ip link set $1 up
              ;;
      tap1 | tun1 )
              sudo /sbin/ip addr add 192.168.2.100/24 dev $1
              sudo /sbin/ip link set $1 up
              ;;
      tap2 | tun2 )
              sudo /sbin/ip addr add 192.168.3.100/24 dev $1
              sudo /sbin/ip link set $1 up
              ;;
      esac

在您的 alpinebox 中,创建一个如下所示的 interfaces 文件

iface eth0 inet static
      address 192.168.1.1
      netmask 255.255.255.0
      gateway 192.168.1.100

iface eth1 inet static
      address 192.168.2.1
      netmask 255.255.255.0

iface eth0 inet static
      address 192.168.3.1
      netmask 255.255.255.0

如果在您的主机上,您现在为 tap0 添加一个 MASQUERADE 规则到您主机的默认 nic,并且您打开主机上的 ip_forward,您现在可以从您的 qemu guest 中进行 svn 更新、浏览、运行 transmission 等操作。

在 QEMU 中使用 Xorg

Alpine 3.17 及更旧版本中 QEMU 内 Xorg 所需的视频驱动程序是 xf86-video-modesetting。在较新版本的 alpine 中,驱动程序会自动作为 setup-xorg-base 的一部分拉取。

提示: 可能对于 KVM/Qemu guest,您想使用 qxl 视频和显示 Spice。为此,请在 guest 上安装 xf86-video-qxl 并在主机上运行 Spice 客户端

如果您决定在 KVM/Qemu guest 上使用 qxl 视频,请将此配置添加到 /etc/X11/xorg.conf

内容 /etc/X11/xorg.conf

Section "Device" Identifier "qxl" Driver "qxl" Option "ENABLE_SURFACES" "False" EndSection

在 Alpine Linux 上使用 KVM/QEMU 运行 guest OS

安装

# apk add qemu-system-x86_64 qemu-modules libvirt libvirt-qemu

注意: 还要安装 virt-manager 以获得 KVM/QEMU gui

tun 添加到 /etc/modules

# echo tun >> /etc/modules

现在启动 tun

# modprobe tun

将您的用户添加到 kvmqemu

# addgroup <username> kvm

# adduser <username> qemu

注销以使组更改生效

添加服务

# rc-update add libvirtd

# rc-update add libvirt-guests

现在启动服务

# rc-service libvirtd start

# rc-service libvirt-guests start

如果您有兴趣使用桥接网络(以便可以从外部轻松访问 guest 机器),请参阅 Bridge

故障排除

qemu-system-x86_64: warning: hub 0 with no nics

发出命令 qemu-system-x86_64 -net user 可能会生成上述错误消息,并且即使您的主机操作系统中有可用的互联网连接,您也无法在 guest OS 中使用网络。这通常是由于 QEMU 缺少对 usb 无线网络适配器等硬件的支持。使用选项 qemu-system-x86_64 -net nic,model=virtio -net user 来解决上述错误。请注意,-net user 选项使用 NAT 为 guest OS 提供基本网络访问。

参见

Qemu 官方 wiki Qemu 入门