新闻详情

新闻详情

首页 / 资讯中心 / 详情

用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)

发布时间:2026/9/27 3:35:28来源:尧图网络
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
(本文使用 AI 辅助创作)VirtualBox 是一个好用且开源的跨平台虚拟机软件, 支持在 GNU/Linux, Windows 等操作系统上运行虚拟机, 并且有方便操作的界面.类似的虚拟化软件比如 QEMU/KVM 只支持在 Linux 上运行, 而 VirtualBox 还支持 Windows, 这是一个明显的优点.本文给出自己从源代码编译 VirtualBox (在 ArchLinux 上运行) 的具体过程. 为了使编译尽量简单: (1) 借用 ArchLinux 官方的编译脚本 (类似 AUR). (2) 整个编译过程在容器(podman) 中进行.这里是 (希望消除 稀缺 的) 穷人小水滴, 专注于 穷人友好型 低成本技术. (本文为 98 号作品. )相关文章:《在 VirtualBox 虚拟机中安装 Fedora CoreOS 操作系统》 https://blog.csdn.net/secext2022/article/details/151294108《离线安装 ArchLinux 操作系统 (DVD 光盘)》 https://blog.csdn.net/secext2022/article/details/162372435《在容器 (podman) 中运行虚拟机 (QEMU/KVM, libvirt)》 https://blog.csdn.net/secext2022/article/details/141649543《Linux 内核 BUG: Android 手机 USB 网络共享 故障》 https://blog.csdn.net/secext2022/article/details/147196246《低功耗低成本 PC (可更换内存条) 推荐 (笔记本, 小主机)》 https://blog.csdn.net/secext2022/article/details/146135064参考资料:https://www.virtualbox.org/wiki/Downloadshttps://gitlab.archlinux.org/archlinux/packaging/packages/virtualboxhttps://wiki.archlinux.org/title/Arch_User_Repositoryhttps://wiki.archlinux.org/title/Podmanhttps://podman.io/https://aur.archlinux.org/https://github.com/fm-elpac/build-vbox-arch目录1 准备工作2 实际编译3 测试运行4 总结与展望附录 1 github actions 自动化编译1 准备工作首先, 安装所需软件, 比如:podman--versionpodmanversion6.1.2git--versiongitversion2.55.0下载 VirtualBox 编译脚本 (ArchLinux 官方的PKGBUILD):gitclone --single-branch--depth1https://gitlab.archlinux.org/archlinux/packaging/packages/virtualbox.git为了避免 每次编译重复下载VirtualBox 源代码, 我们提前下载源码包:mkdir-poutcdoutcurl-Ohttps://download.virtualbox.org/virtualbox/7.2.20/VirtualBox-7.2.20.tar.bz2提前拉取 ArchLinux (基础) 容器镜像:podmanpull library/archlinux:base-devel虽然, 在国内拉取容器镜像比较麻烦 (你懂得), 但是啊, 只要思想不滑坡, 办法总比困难多, 努努力还是可以做到的:podmanimages REPOSITORY TAG IMAGE ID CREATED SIZE localhost/archlinux base-devel 3ed18d5c7b243days ago967MB2 实际编译文件build-vbox-arch/build.sh:#!/usr/bin/env bash# build-vbox-arch/build.shset-euopipefail# PKGBUILDcp-r/build/virtualbox /build/tmp/virtualbox# 源码包cp/build/out/VirtualBox-7.2.20.tar.bz2 /build/tmp/virtualbox# TODO patch# DEBUGecho!!! /build/tmp/virtualbox/PKGBUILDcat/build/tmp/virtualbox/PKGBUILD# 修复 编译报错:# /build/tmp/virtualbox/src/VirtualBox-7.2.16/src/VBox/Runtime/common/misc/buildconfig.cpp:49:5: error: return-statement with no value, in function returning ‘uint32_t’ {aka ‘unsigned int’} [-fpermissive]# 49 | return IPRT_BLDCFG_SCM_REV;# | ^~~~~~# kmk: *** [/build/tmp/virtualbox/src/VirtualBox-7.2.16/kBuild/footer-pass2-compiling-targets.kmk:277: /build/tmp/virtualbox/src/VirtualBox-7.2.16/out/linux.amd64/release/obj/RuntimeBldProg/common/misc/buildconfig.o] Error 1rm-rf/build/tmp/virtualbox/.git# 开始编译echo!!! building .. .chown-Rbuilder:builder /build/tmp/virtualbox/subuilder-ccd /build/tmp/virtualbox/ makepkg -s --noconfirm# 编译结果cp/build/tmp/virtualbox/*.pkg.tar.zst /build/out文件build-vbox-arch/Dockerfile:# build-vbox-arch/Dockerfile FROM archlinux:base-devel WORKDIR /build # 国内镜像 RUN echo Server https://mirrors.pku.edu.cn/archlinux/\$repo/os/\$arch /etc/pacman.d/mirrorlist # 安装依赖 RUN pacman -Syu --noconfirm \ pacman -S --needed --noconfirm git # (archlinux) PKGBUILD # git clone --single-branch --depth1 https://gitlab.archlinux.org/archlinux/packaging/packages/virtualbox.git COPY virtualbox virtualbox # 安装 makedepends RUN bash -c source virtualbox/PKGBUILD pacman -S --needed --noconfirm ${makedepends[]} # 创建 编译用户 RUN useradd -m builder \ echo builder ALL(ALL) NOPASSWD: ALL /etc/sudoers.d/builder # 编译脚本 COPY build.sh . # 容器挂载目录 RUN chmod x build.sh \ mkdir -p /build/tmp \ mkdir -p /build/out ENTRYPOINT [/build/build.sh] # podman run --rm -v $PWD/tmp:/build/tmp -v $PWD/out:/build/out -v $PWD/build.sh:/build/build.sh build-vbox-1首先制作 基础容器镜像:podmanbuild-tbuild-vbox-1.这个容器镜像会打包编译所需的所有依赖:podmanimages REPOSITORY TAG IMAGE ID CREATED SIZE localhost/build-vbox-1 latest 489541af479245seconds ago2.26GB localhost/archlinux base-devel 3ed18d5c7b243days ago967MB然后开始 实际编译:podmanrun--rm-v$PWD/tmp:/build/tmp-v$PWD/out:/build/out-v$PWD/build.sh:/build/build.sh build-vbox-1硬件: 小主机 GMK M5 (CPU r7-5825u, 8 核 16 线程, 15W 功耗, 内存 DDR4-3200 双通道).16GB 内存 用于编译应该是够用的, 编译用时约 33 分钟, 总的磁盘占用约 8.7 GB.编译结果:cdoutls-l-rw-r--r--1s2 s2701961739月25日23:06 virtualbox-7.2.20-1-x86_64.pkg.tar.zst -rw-r--r--1s2 s22560730769月25日22:14 VirtualBox-7.2.20.tar.bz2 -rw-r--r--1s2 s23893650839月25日23:06 virtualbox-debug-7.2.20-1-x86_64.pkg.tar.zst -rw-r--r--1s2 s2453729月25日23:06 virtualbox-ext-vnc-7.2.20-1-x86_64.pkg.tar.zst -rw-r--r--1s2 s211016619月25日23:06 virtualbox-guest-utils-7.2.20-1-x86_64.pkg.tar.zst -rw-r--r--1s2 s25458979月25日23:06 virtualbox-guest-utils-nox-7.2.20-1-x86_64.pkg.tar.zst -rw-r--r--1s2 s221735049月25日23:06 virtualbox-host-dkms-7.2.20-1-x86_64.pkg.tar.zst -rw-r--r--1s2 s293606929月25日23:06 virtualbox-sdk-7.2.20-1-x86_64.pkg.tar.zst源码包 (VirtualBox-7.2.20.tar.bz2) 256MB, 编译出的主包 (virtualbox-7.2.20-1-x86_64.pkg.tar.zst) 70MB.3 测试运行安装软件包:sudopacman-Uvirtualbox-7.2.20-1-x86_64.pkg.tar.zst然后启动 VirtualBox:启动虚拟机:大成功 ! 撒花 ~~4 总结与展望借助 ArchLinux 官方的编译脚本, 以及容器, 从源代码编译 VirtualBox 还是比较容易的.如果想对 VirtualBox 做高级的自定义修改 (改代码), 那么编译出来是必备的前置条件.VirtualBox 的 Linux 版, 因为不涉及数字签名等复杂的东西, 编译相对比较简单. 而 Windows 版就麻烦多了, 不仅编译 (环境准备) 十分困难, 其 内核驱动 还涉及数字签名 (Oracle 官方发布的安装包有数字签名), 所以很不好弄. 技术问题 (具体如何编译) 还能想办法解决, 但数字签名是真的没有办法. 所以, 数字时代, 数字签名 即 权力 (狗头附录 1 github actions 自动化编译文件build-vbox-arch/.github/workflows/build.yml:# 手动运行: 编译name:Build VirtualBox (patched)on:workflow_dispatch:inputs:jobs:build:runs-on:ubuntu-lateststeps:-uses:actions/checkoutv7-run:git clone--single-branch--depth1 https://gitlab.archlinux.org/archlinux/packaging/packages/virtualbox.git-run:mkdir tmp out-run:docker build-t build-vbox-1 .-run:docker run--rm-v $PWD/tmp:/build/tmp-v $PWD/out:/build/out build-vbox-1-uses:actions/upload-artifactv7with:name:patched-virtualboxpath:out/*.pkg.tar.zst这个可以实现一键编译, 用时大约 34 分钟.本文使用 CC-BY-SA 4.0 许可发布.
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

FPGA进阶路线:从UART到PCIe,多Die与高速接口实战指南 2026/9/27 4:18:51

FPGA进阶路线:从UART到PCIe,多Die与高速接口实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
宁波seo快速排名哪家好?3家实战团队拆解,新手避坑指南 2026/9/27 4:18:51

宁波seo快速排名哪家好?3家实战团队拆解,新手避坑指南

宁波seo快速排名哪家好?3家实战团队拆解,新手避坑指南 很多宁波老板想给公司做个官网,心里最慌的就是: 自己完全不懂代码,怕被坑,又怕花钱做了个死站。…

阅读更多 →
Deep-Leafsnap实战:基于Python与Keras的植物叶片识别系统解析 2026/9/27 4:18:51

Deep-Leafsnap实战:基于Python与Keras的植物叶片识别系统解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
初入大学,及未来规划 2026/9/27 4:18:50

初入大学,及未来规划

作为初进大学的大一新生,在这开学的一周我真切的感受到了大学生活。与我想象的完全不同,大学是轻松的,因为自己自由的时间有很多,大学的生活也是不轻松的,因为想要提升自己需要自律。因此我写出一下规划。现在我已经C语…

阅读更多 →
工业云网站建设哪家好?不懂代码的老板看这篇省钱避坑 2026/9/27 4:18:44

工业云网站建设哪家好?不懂代码的老板看这篇省钱避坑

工业云网站建设哪家好?不懂代码的老板看这篇省钱避坑 想给工厂做个官网,但自己一行代码都不会写,这是很多制造业老板最头疼的事。找外包怕被坑,自己搞又搞不定,这时候问一句“工业云网站建设哪家好”就成了刚需。别急着找那些张口就要几万块的模板站,那…

阅读更多 →
ADS电感Q值仿真误差根源与精准建模七步法 2026/9/27 4:18:43

ADS电感Q值仿真误差根源与精准建模七步法

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉