QEMU ELI5 — 第 8 部分,实践和示例

admin 2024年5月20日23:06:59评论7 views字数 7032阅读23分26秒阅读模式

QEMU ELI5 — 第 8 部分,实践和示例

QEMU 但适合初学者 |第 8 部分 — 实践和示例

将这一切结合在一起

消化 QEMU 所提供的所有内容可能具有挑战性。不要害怕。使用越多,感觉越舒服。要知道,我们所经历的信息是很多的。如果你已经走到了这一步,请拍拍自己的后背!花点时间熟悉QEMU。当你准备好了,继续阅读。

如果您阅读本文并认为我在某处犯了错误,或者您希望我触及特定主题,请这样做。欢迎任何类型的反馈(好的或坏的)!

现在,可能很难确切地知道从哪里开始。我们如何真正开始使用 QEMU?这就是你现在可能遇到的问题。让我们一起回答这个问题以及更多问题。

linux

QEMU ELI5 — 第 8 部分,实践和示例

  • QEMU ELI5 — 第 8 部分,实践和示例

  • QEMU ELI5 — 第 8 部分,实践和示例

  • windows

  • QEMU ELI5 — 第 8 部分,实践和示例

  • windows()

  • QEMU ELI5 — 第 8 部分,实践和示例

  • USB()

  • QEMU ELI5 — 第 8 部分,实践和示例

  • ()

  • QEMU ELI5 — 第 8 部分,实践和示例

  • ios

  • QEMU ELI5 — 第 8 部分,实践和示例

  • windbg

  • QEMU ELI5 — 第 8 部分,实践和示例

  • ()

  • QEMU ELI5 — 第 8 部分,实践和示例QEMU ELI5 — 第 8 部分,实践和示例QEMU ELI5 — 第 8 部分,实践和示例

  • QEMU ELI5 — 第 8 部分,实践和示例

  • QEMU ELI5 — 第 8 部分,实践和示例

  • QEMU ELI5 — 第 8 部分,实践和示例

如何实际使用QEMU?

简单的答案:转到此存储库的文件夹并开始使用那里的脚本。/Machines

长答案:首先问问自己:“我真的需要 QEMU 还是简单的 VM?根据答案,要么使用 VM(例如 VirtualBox),要么开始配置 QEMU 机器。让我解释一下其余的。

自检

QEMU 很酷,是完成工作的好工具。但是,它不是一个简单快速的虚拟机。不要误会我的意思,如果您配置,它可以是 VM。但是你花在这件事上的时间还不如花在做其他事情上,比如真正把事情做好。所以,问问自己“我真的需要使用 QEMU 吗?

提醒一下,QEMU 是学习新事物的绝佳工具。因此,上述问题不适用于冒险家 ❤

设计

现在,在那次无聊的 AF 谈话之后,让我们开始工作吧。在配置部分,我们已经看到 QEMU 有很多选项需要配置。这很棒。这意味着您可以拥有满足您大部分(如果不是全部)需求的机器。

在您立即开始使用 QEMU 之前,请考虑并设计您希望您的机器成为什么样子。我在这里只能提供一些指导,而不是要遵循的实际步骤。考虑这些事情(按顺序):

  • 操作系统/内核:您要使用哪个操作系统?(例如 GNU/Linux、Windows、你自己的?!

  • 要模拟的系统:您需要哪种系统?(例如 i368、x86_64、ARM、AARC64、PowerPC)

  • 机器类型: 您的目标机器是什么?(例如 Raspi3、virt、q35、pc、custom)

  • 要使用的 CPU:是否要覆盖计算机的 CPU?(例如 host、EPYC、Skylake、Cortex-A72)

  • 核心数: 您需要多少个 CPU 内核?(例如 2、4、8)

  • 内存大小:要分配的内存量。(例如 512MiB、4GiB、16GiB)

  • 要使用的设备:I/O、显示、存储等(例如 virtio-kbd、qxl-vga、nvme)

  • 网络需求:您的网络需求是什么?(例如简单的互联网接入、自定义 VLAN)

虽然上面的列表并没有涵盖所有内容,但它是开始设计 QEMU 机器的好方法。请记住,QEMU 是一种工具(也是学习新事物的好方法)。所以,决定你的需求,然后开始设计!

这些是我在使用 QEMU 做某事之前通常遵循的步骤。这完全是个人的,您可能会遵循不同的方法>.<

配置

在考虑了您想要从 QEMU 机器中获得什么之后,您只需运行一系列 和 即可启动您的 QEMU 机器。但是,我和许多其他人强烈建议您创建启动脚本。它不需要是异国情调和“专业”的东西。只需在那里写下您的命令并从终端启动它。commandsarguments

启动脚本

我听到你问:“争论太多了。我应该先写哪一个?问题是,这并不重要。您可以指定最后一个或第一个。QEMU不在乎。但!我建议你先输入最一般的,最后输入其他的。让我给你一个示例脚本。-cpu

#/usr/bin/env bash

qemu-system-x86_64 -machine virt -cpu virt -m 4G -device usb-kbd -device usb-mouse

您可以看到我首先指定了该选项,因为它是一个更通用的选项。然后,我指定要使用的 size 和 s 等内容。我建议你也这样做,因为它更直观、更易于理解。-machine-memory-device

一个更好的方法是定义 shell 变量。与其把所有东西都塞进一个巨大的命令中,不如使用变量。下面是一个示例。

#/usr/bin/env bash

MACHINE="-machine virt"
CPU="-cpu virt"
MEMORY="-m 4G"
DEVICES="-device usb-kbd -device usb-mouse"
qemu-system-x86_64 ${MACHINE} ${CPU} ${MEMORY} ${DEVICES} $*

看到我在变量中定义了所有内容。这样,我就可以定义一个新的或更改我的大小,而无需修改 giant-ass launch 命令。请注意,最后一个参数是一个特殊的 shell 变量,它将所有命令行参数作为单个字符串传递给 QEMU。(例如,在 中,将计算为-device-m$*./launch_qemu.sh <args>$*<args>)

同样,这是我配置 QEMU 并创建启动脚本时所做的。这是个人的,您可能想使用其他东西。完全没关系!尽情狂欢。

我希望您使用启动脚本和 shell 变量的原因是这样的。请看下面的命令:

#/usr/bin/env bash

/Applications/UTM.app/Contents/XPCServices/QEMUHelper.xpc/Contents/MacOS/QEMULauncher.app/Contents/MacOS/QEMULauncher /Applications/UTM.app/Contents/Frameworks/qemu-aarch64-softmmu.framework/Versions/A/qemu-aarch64-softmmu -L /Applications/UTM.app/Contents/Resources/qemu -S -qmp tcp:127.0.0.1:4000,server,nowait -nodefaults -vga none -spice unix=on,addr=/Users/BestUserNameLeft/Library/Group Containers/WDNLXAD4W8.com.utmapp.UTM/C6D43025-8BF5-4B87-A5F5-A8155C6B9DBE.spice,disable-ticketing=on,image-compression=off,playback-compression=off,streaming-video=off,gl=off
-device virtio-ramfb -cpu host -smp cpus=4,sockets=1,cores=4,threads=1
-machine virt, -accel hvf -accel tcg,thread=multi,tb-size=1536 -drive if=pflash,format=raw,unit=0,file=/Applications/UTM.app/Contents/Resources/qemu/edk2-aarch64-code.fd,readonly=on -drive if=pflash,unit=1,file=/Users/BestUserNameLeft/Library/Containers/com.utmapp.UTM/Data/Documents/Windows.utm/Images/efi_vars.fd
-boot menu=on -m 6144 -device intel-hda -device hda-duplex -name Windows -device nec-usb-xhci,id=usb-bus -device usb-tablet,bus=usb-bus.0 -device usb-mouse,bus=usb-bus.0
-device usb-kbd,bus=usb-bus.0 -device qemu-xhci,id=usb-controller-0 -chardev spicevmc,name=usbredir,id=usbredirchardev0 -device usb-redir,chardev=usbredirchardev0,id=usbredirdev0,bus=usb-controller-0.0 -chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1,bus=usb-controller-0.0 -chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2,bus=usb-controller-0.0 -device nvme,drive=drive0,serial=drive0,bootindex=0
-drive if=none,media=disk,id=drive0,file=/Users/BestUserNameLeft/Library/Containers/com.utmapp.UTM/Data/Documents/Windows.utm/Images/windows-11-arm64.qcow2,discard=unmap,detect-zeroes=unmap -device usb-storage,drive=cdrom0,removable=true,bootindex=1,bus=usb-bus.0 -drive if=none,media=cdrom,id=cdrom0 -device virtio-net-pci,mac=9E:E1:25:9D:E7:99,netdev=net0 -netdev vmnet-bridged,id=net0,ifname=en0 -device virtio-serial -device virtserialport,chardev=vdagent,name=com.redhat.spice.0 -
chardev spicevmc,id=vdagent,debug=0,name=vdagent -device virtserialport,chardev=charchannel1,id=channel1,name=org.spice-space.webdav.0 -chardev spiceport,name=org.spice-space.webdav.0,id=charchannel1 -uuid C6D43025-8BF5-4B87-A5F5-A8155C6B9DBE -rtc base=localtime -device virtio-rng-pci

这太疯狂了吧?!这是 UTM 使用的默认 QEMU 命令。它看起来很复杂,很难理解。是的,它是有效的,因为它是单行的。但是,人类很难理解和改变某些东西。这就是为什么你,希望是一个人,需要有一个易于理解的启动脚本。

顺便说一句,UTM是一件了不起的事情。您可以使用它非常轻松地创建纯 QEMU 机器。这是了解 QEMU 机器如何配置复杂的好方法!

至于你,我创建了一些我个人使用的示例启动脚本。查看文件夹以探索它们!有一个供您用作快速入门。反馈总是不胜感激💚!/MachinesREADME

快捷方式和键绑定

QEMU 定义了一些快捷方式来控制来宾计算机。以下是我发现的一些有用的方法。

当使用显示窗口启动时,QEMU 会在任务栏上提供一些基本控件。请务必检查一下。

  • 释放鼠标(仅显示): GNU/Linux & Windows:, macOS:CTRL + ALT + Gcontrol + option + G

  • 切换到访客(仅限显示): GNU/Linux & Windows:, macOS:CTRL + ALT + 1control + option + 1

  • 切换到 QEMU 显示器(仅显示):GNU/Linux & Windows:, macOS:CTRL + ALT + 2control + option + 2

  • 在访客和QEMU监视器之间切换(仅限):所有系统:然后-nographicCTRL + AC

  • 端接机器(仅限): 所有系统:然后-nographicCTRL + AX

QEMU Monitor 是 QEMU 提供的一项了不起的功能。这是一个面向开发人员的高级主题。出于这个原因,我不会在这里解释。也许在这条路上我会......如果您真的很好奇,请查看官方文档 QEMU Monitor

VM-1 示例:ArchLinux

ArxhLinux 是一个简单而轻量级的 Linux 发行版,它遵循其软件包的滚动发布模型。1. 官方 wiki 有一个很棒的安装指南,我建议任何有兴趣的人至少查看一下。

我将解释如何在我的 ArchLinux 主机 (/w) 上构建一个非常简单的 QEMU ArxhLinux x86_64 虚拟机。这不是一个循序渐进的教程,您可以随时偏离。Intel i5 6600K

这台机器可以作为 基本的 shell 脚本找到。/Machines

步骤 1 — 获取安装映像

“最佳”的地方是 Arch Linux 的下载页面。

或者使用:wget

$ wget https://geo.mirror.pkgbuild.com/iso/2023.06.01/archlinux-2023.06.01-x86_64.iso

第 2 步 — 设计 QEMU 机器

以下是我决定使用的基本机器规格:

  • 机器q35

  • 处理器host

  • vCORE:2

  • 加速器KVM

  • 内存4G

  • UEFI/BIOSedk2

  • 输入/Ousb-ehci, usb-kbd, usb-mouse

  • 网络(前端):virtio-net-device

  • 网络(后端):user

  • 存储nvme

  • 显示:,virtio-gpu

  • 声音:和intel-hdahda-duplex

  • 驱动器-1:(用于安装映像)cdrom

  • 驱动器 2:大小(用于存储)qcow232Gnvme

第 3 步 — 启动机器

为了简化起见,我将定义一些路径变量。和 是 UEFI 固件和变量文件。(例如)。这是您从步骤 1 获取的安装映像。是您使用 创建的磁盘映像。在运行以下命令之前,不要忘记定义这些变量。EFI_FLASH_PATHEFI_VARS_PATH/usr/share/edk2-ovmf/x64/QEMU.fdISO_PATHDISK_PATHqemu-img

运行以下命令(如果不想显示,则追加):-nographic

$ qemu-system-x86_64 -machine q35 -cpu host -smp 2 -accel kvm -m 4G -drive if=pflash,format=raw,readonly=on,file=${EFI_FLASH_PATH} -drive if=pflash,format=raw,file=${EFI_VARS_PATH} -device usb-ehci -device usb-kbd -device usb-mouse -device virtio-net-device,netdev=net0 -netdev user,id=net0 -device nvme,drive=hd0,serial=super-fast-boi -device virtio-gpu,xres=1280,yres=720 -device intel-hda -drive id=cd0,media=cdrom,file=${ISO_PATH} -drive id=hd0,if=none,format=qcow2,file=${DISK_PATH}

QEMU ELI5 — 第 8 部分,实践和示例

常见问题1: 无法访问 KVM 内核模块:没有这样的文件或目录

当您的主机未加载 KVM 内核模块时,会出现此错误。这有多种原因:

  • a) Linux 内核不是用 KVM 构建的。

  • b) 或未在 UEFI 设置中启用。Intel VT-xAMD-V

  • c) 您的 CPU 不支持硬件虚拟化。

要解决此问题,请参阅硬件加速(可选)。

常见问题2: 显示 UEFI shell 而不是 OS/引导加载程序

首次启动固件设置的 QEMU 计算机时,设置可能不正确。这可能会导致您可能不需要的引导顺序(例如,OS/Bootloader 无法启动)。要正确设置 UEFI 固件设置,请在第一个启动屏幕(又名 TianaCore 屏幕)期间按下。或者,如果使用该选项,则键入到 UEFI shell。EDK2ESCexit-nographic

QEMU ELI5 — 第 8 部分,实践和示例

在 UEFI 固件设置屏幕上,您可以自定义启动顺序或直接启动驱动器。随意探索设置,您可能会发现一些对您有用的东西。

VM-2 示例:macOS

创建 QEMU macOS 客户机有点棘手。我远不足以实现它。还有法律依据,因为 Apple VM 仅在 Parallels 和 XCode 虚拟机上受支持。2 因此,我不会亲自解释如何做到这一点。虽然,这样做是很有可能的。

查看 Dhiru Kholia 令人惊叹的 GitHub 存储库.

https://github.com/kholia/OSX-KVM

了解如何使用 KVM 在 QEMU 上运行 macOS。这是一部有趣的作品。

原文始发于微信公众号(安全狗的自我修养):QEMU ELI5 — 第 8 部分,实践和示例

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月20日23:06:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   QEMU ELI5 — 第 8 部分,实践和示例https://cn-sec.com/archives/2757548.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息