此目录在一次性 Ubuntu QEMU 客户机内构建并运行一个 Ubuntu Docker 容器。PoC 会被复制到客户机中,绝不会由宿主机脚本执行。
qemu-imgcurlxorrisoVM_PAYLOAD_CONSOLE=1 时需要 socat可用时使用 KVM;否则 QEMU 回退到 TCG。
UBUNTU_VERSION=26.04 \
VM_EXPECTED_KERNEL=7.0.0-31-generic \
./vm/build_image.sh
构建器会下载所选 Ubuntu 发行版的 cloud image,对照 Ubuntu 发布的 SHA256SUMS 进行校验,安装软件包更新和 Docker,拉取匹配的 Ubuntu 容器镜像,并写入 vm/ubuntu-<version>.qcow2。
默认 URL 固定为 2026 年 9 月 16 日可用的最新官方发行镜像:
2026091120260823设置 UBUNTU_RELEASE_URL、UBUNTU_IMAGE_URL 或 UBUNTU_SUMS_URL 以使用其他发行版。
生成的 qcow2 镜像和 SSH 密钥是本地产物,已被 Git 忽略。私钥保持 0600 权限。
UBUNTU_VERSION=26.04 \
VM_EXPECTED_KERNEL=7.0.0-31-generic \
./vm/run_container.sh ./path/to/binary [arguments...]
每次运行都会创建一个临时 qcow2 覆盖层,启动客户机,通过 SSH 复制二进制文件,并在禁用网络的全新容器中启动它。参数、标准流和退出状态都会被转发。
有用的覆盖选项:
VM_CPUS=4 VM_MEMORY_MB=4096 ./vm/run_container.sh ./binary
VM_SSH_PORT=2223 ./vm/run_container.sh ./binary
KEEP_VM_RUN_DIR=1 ./vm/run_container.sh ./binary
KEEP_VM_RUN_DIR=1 会将覆盖层和日志保留在 /tmp/ubuntu-container.* 下。每次调用执行一次虚拟机启动和一次载荷尝试。对于显式使用客户机第二个串口的载荷,请设置 VM_PAYLOAD_CONSOLE=1。