在 Apple Silicon 上用 KVM 构建隔离的 WeKan 测试环境:Fedora Asahi Remix 完整指南

在 Apple Silicon 上用 KVM 构建隔离的 WeKan 测试环境:Fedora Asahi Remix 完整指南 在 Apple Silicon 上用 KVM 构建隔离的 WeKan 测试环境Fedora Asahi Remix 完整指南【免费下载链接】wekanThe Open Source kanban, built with Meteor. GitHub issues/PRs are only for FLOSS Developers, not for support, support is at https://wekan.fi/commercial-support/ . PR source translation to imports/i18n/data/en.i18n.json, other translations at https://app.transifex.com/wekan/wekan项目地址: https://gitcode.com/GitHub_Trending/we/wekan本文基于仓库 docs/Security/Sandboxes/KVM/AsahiFedora/README.md 及其配套的install.sh、start.sh、stop.sh脚本讲解如何在 Fedora Asahi RemixARM64 / Apple Silicon上创建一台专用的 KVM 虚拟机用于隔离运行 WeKan 与 FerretDB 的完整测试栈。读完本文你将掌握KVM 可用性检查、一键创建与安装 ARM64 虚拟机、安全优雅的启停流程、客户机内的测试栈配置以及从仓库源码层面理解这套隔离边界的原理与取舍。为什么测试需要一个真正的虚拟机边界WeKan 是使用 Meteor 构建的开源看板应用其测试体系包含 Playwright 浏览器测试、数据库一致性conformance测试和 FerretDB 兼容性测试。完整的测试栈会引入 Docker、浏览器、数据库、源码目录与开发凭据这些组件如果散落在宿主机上会显著扩大攻击面。仓库 docs/Security/Sandboxes/vscodium/README.md 描述的 VSCodium Flatpak 沙箱、Toolbox、Distrobox、开发容器等方案都刻意与宿主共享了一部分资源。而本文的 KVM 虚拟机方案是更强的隔离边界——这台 VM不共享任何宿主目录不转发 SSH agent不挂载 Docker socket不启用剪贴板通道不直通 USB 设备不接入桥接网络bridged network。即即使客户机中的测试代码或恶意输入被攻破也不会直接触及宿主机的文件、凭据或容器守护进程。主机要求与 KVM 可用性检查在动手安装任何东西之前先确认宿主机满足条件Fedora Asahi Remix 运行在 ARM64 Apple Silicon 设备上硬件虚拟化以/dev/kvm形式暴露建议至少 16 GiB 宿主内存与 120 GiB 空闲存储准备一份 Fedora ARM64aarch64Server 或 Workstation 安装 ISO。执行以下命令检查架构与 KVM 设备uname -m test -r /dev/kvm echo KVM is available架构必须是aarch64。不要使用 x86-64 的 ISO那样 QEMU 只能通过软件模拟 x86-64 CPU而不是使用 KVM 加速性能会大幅下降。这一检查在install.sh中也有硬性校验——脚本会直接拒绝在非 ARM64 宿主机或无/dev/kvm的环境下继续执行见 install.sh 第 20–21 行的fail分支。创建并安装虚拟机install.sh 逐段解析从 Fedora 官方渠道下载一份当前的 ARM64 ISO校验其公开校验和checksum然后把 ISO 的本地路径传给install.shcd /home/user/repos/wekan/docs/Security/Sandboxes/KVM/AsahiFedora ./install.sh /path/to/Fedora-Server-dvd-aarch64.iso注意仓库中的实际脚本位于 docs/Security/Sandboxes/KVM/AsahiFedora/install.shREADME.md中的路径是示例性的克隆位置请以你实际 clone 仓库的路径为准。脚本在宿主机上做了什么安装虚拟化软件包sudo dnf install -y virtualization edk2-aarch64 libvirt-client libvirt-daemon-kvm virt-install virt-manager。其中edk2-aarch64提供 ARM64 UEFI 固件virt-install是创建虚拟机的核心工具。启用 libvirt优先启用libvirtd.service若该服务不存在则回退启用virtqemud.socket与virtnetworkd.socket这是较新 Fedora 上的模块化 daemon 布局。防覆盖保护如果同名 VM、磁盘镜像或暂存的 ISO 已存在脚本直接报错退出绝不覆盖已有资源。创建默认 NAT 网络若 libvirt 的default网络不存在脚本会生成一份 XML 并net-define网络为 NAT 转发模式桥接virbr0DHCP 范围192.168.122.2–192.168.122.254然后设置自启动并启动它。暂存 ISO系统级 libvirt 的 QEMU 进程通常无法穿越用户家目录且 SELinux 期望虚拟机镜像位于 libvirt 镜像目录之下。因此脚本用sudo install -o qemu -g qemu -m 0644把 ISO 复制到/var/lib/libvirt/images/并执行restorecon修正 SELinux 标签——这样既满足边界要求又不必削弱 SELinux 策略。调用 virt-install 定义虚拟机。默认资源配置install.sh中由环境变量定义的默认值如下资源默认值vCPU6 个 KVM 加速的 ARM64 vCPUhost-passthroughCPU 模型内存12 GiBVM_MEMORY_MIB12288磁盘100 GiB 稀疏 qcow2位于/var/lib/libvirt/images/wekan-asahi-test.qcow2固件ARM64 UEFI--boot uefi网络libvirt 仅 NAT 的default网络virtio 网卡显示仅本地的 SPICE 控制台--graphics spice,listennonevirtio 显卡主机集成无共享目录、无 agent、无 Docker socket、无 USB、无剪贴板通道按宿主机规格调整资源宿主机偏小或偏大时可以在安装前通过环境变量覆盖尺寸VM_CPUS4 VM_MEMORY_MIB8192 VM_DISK_GIB80 \ ./install.sh /path/to/Fedora-Server-dvd-aarch64.iso脚本会对这三个变量做正整数校验正则^[1-9][0-9]*$传非法值会直接报错。此外VM_NAME默认wekan-asahi-test与LIBVIRT_URI默认qemu:///system也可通过环境变量覆盖。virt-install 的关键参数与安装收尾脚本最终执行的virt-install命令值得逐项理解sudo virt-install \ --connect qemu:///system \ --name wekan-asahi-test \ --virt-type kvm \ --arch aarch64 \ --machine virt \ --cpu host-passthrough \ --vcpus 6 \ --memory 12288 \ --boot uefi \ --disk path/var/lib/libvirt/images/wekan-asahi-test.qcow2,size100,formatqcow2,busvirtio,cachenone,discardunmap \ --network networkdefault,modelvirtio \ --graphics spice,listennone \ --video virtio \ --rng /dev/urandom \ --cdrom /var/lib/libvirt/images/wekan-asahi-test-install.iso \ --noautoconsole \ --wait-1 \ --noreboot要点--cpu host-passthrough将宿主机 CPU 特性直接暴露给客户机是 ARM64 上性能最优的选择--disk ... discardunmap启用稀疏磁盘的 TRIM 透传配合稀疏 qcow2 节省宿主磁盘空间--rng /dev/urandom为客户机提供硬件随机数源--noreboot安装完成后客户机关机而非重启让脚本有机会清理安装介质。Fedora 图形化安装器会在virt-manager中打开。安装期间请创建一个普通的非 root 用户如果不需要无人值守的 VM 重启建议开启磁盘加密。VM 安装结束会关机。如果 Fedora 安装器没有自动移除虚拟安装介质脚本会在安装完成后通过virsh domblklist找到 CDROM 设备、用detach-disk --config分离它并删除暂存的 ISO 副本见 install.sh 第 105–111 行确保之后启动只从客户机自己的磁盘引导。注意安装器拒绝覆盖已存在的 VM 或磁盘。在创建新 VM 前必须有意识地删除或重命名旧 VM。启动与停止start.sh / stop.sh启动已安装的 VM 并打开本地控制台./start.shstart.sh 的逻辑很简洁先确认 VM 存在dominfo再检查domstate只有非running状态才执行virsh start随后若有virt-manager则后台打开该域的--show-domain-console。请求客户机操作系统优雅关机./stop.shstop.sh 的设计体现了对数据安全的重视默认最多等待120 秒STOP_TIMEOUT_SECONDS可调绝不调用virsh destroy——那等同于直接拔电源可能损坏客户机内的数据库或文件系统超时后仅输出错误并提示用virt-manager检查客户机由人工决定是否有理由强制断电脚本自身拒绝代为强制关机。三个脚本都接受VM_NAME环境变量以管理不同名称的 VMVM_NAMEwekan-test-2 ./start.sh配置客户机把整个测试栈关在 VM 内虚拟机安装完成后把所有测试依赖都保留在客户机内更新 Fedora安装 Git、编译器、无 root 的 Docker 或 Podman以及浏览器运行时依赖将 WeKan clone 到客户机自己的虚拟磁盘上安装仓库本地化的 Node.js、Meteor 与 Go 工具链其细节在 VSCodium 沙箱文档 中有完整说明包括从.tools/目录引导与 Dockerfile 版本匹配的 Node/Meteor 工具链、构建 FerretDB 及 WeKan bundle 的方法在客户机内运行 WeKan、数据库一致性测试与 FerretDB 测试在依赖升级或恶意输入安全测试之前创建一个干净的 libvirt 快照以便随时回滚到已知良好状态。关于凭据隔离文档有明确纪律不要转发宿主的SSH_AUTH_SOCK、GPG agent、Docker socket、家目录或源码检出若客户机需要访问 GitHub请在客户机内使用单独的、受限的凭据优先在客户机内提交、再从受信任的宿主检出处人工推送。隔离注意事项边界如何生效NAT 网络让客户机能下载依赖同时不会把客户机服务直接暴露在宿主网络上。除非确实需要入站 LAN 访问否则不要改成桥接接口。SPICE 显示通过 libvirt 可用但没有挂载 SPICE agent 通道因此剪贴板与文件共享均未配置——这正是隔离的一部分而非缺失功能。libvirt 在服务账号下运行 QEMUFedora 的 SELinux 会对 VM 资源施加sVirt标签形成额外的强制访问控制层。客户机内的 rootless 容器可以降低容器守护进程的权限但KVM 边界仍是主要的隔离层rootless 只是纵深防御。内存红线分配给 VM 的内存若显著超过宿主内存的 60%–70%浏览器测试与 Go 编译峰值期间宿主和客户机都会变得不可靠。与仓库其他沙箱方案的关系在仓库的 docs/Security/Sandboxes 目录下KVM 方案还有面向 Ubuntu Asahi 的姊妹文档 AsahiUbuntu/README.md其安装脚本与资源默认值几乎一致区别在于 Ubuntu 使用qemu-efi-aarch64提供 UEFI、libvirt 应用 AppArmor 而非 SELinux。而 vscodium/README.md 描述的 Flatpak 沙箱方案隔离强度弱于 KVM它需要显式允许~/.meteor、Playwright 浏览器缓存等其价值在于轻量与快速适合日常编辑与快速迭代。仓库的测试体系为这套 VM 边界提供了明确的使用场景佐证数据库一致性测试脚本 releases/db-conformance.sh 会为每个后端逐一启动数据库容器、运行全新构建的 FerretDB、跑完整查询目录并比较各后端回答——这类测试涉及多个容器与数据库正适合在 KVM 客户机内整体隔离运行tests/dbConformance 目录中的cases.cjs、compare.cjs、run.cjs实现了查询目录与结果比对逻辑Playwright UI 测试tests/playwright依赖mongosh播种数据、需要WRITABLE_PATH可写目录这些浏览器与数据库依赖同样应封闭在 VM 内。结语在 Fedora Asahi Remix 上通过 KVM 运行专用 ARM64 虚拟机为 WeKan / FerretDB 测试栈提供了一个零共享的强隔离边界不共享宿主目录、SSH agent、Docker socket、剪贴板、USB 或桥接网络。配套的install.sh、start.sh、stop.sh三个脚本把检查、创建、启停、清理全部自动化并内置了防覆盖、非破坏性关机、SELinux 标签修复等细节。这套方案与仓库现有的 VSCodium Flatpak 沙箱互为补充日常开发用轻量沙箱涉及 Docker、浏览器、数据库与恶意输入的安全测试则交给 KVM 客户机——这正是用更薄的宿主暴露面换取更强的隔离保证。【免费下载链接】wekanThe Open Source kanban, built with Meteor. GitHub issues/PRs are only for FLOSS Developers, not for support, support is at https://wekan.fi/commercial-support/ . PR source translation to imports/i18n/data/en.i18n.json, other translations at https://app.transifex.com/wekan/wekan项目地址: https://gitcode.com/GitHub_Trending/we/wekan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考