VirtualBox

Linux 构建说明

尽管我们不偏爱任何发行版,但我们仅使用特定的发行版进行构建。这些发行版包括 Debian、Ubuntu 和 Oracle Linux。不过,对于其他发行版来说,情况应该不会有太大不同。如果您想为其他发行版提供具体的构建说明(特别是软件包名称),请联系VirtualBox 团队

增强功能

这些说明还将构建 Guest Additions(仅限 Linux 部分),并且针对您的主机系统正在使用的位数。要仅构建 Additions(这需要少得多的依赖项,尽管遗憾的是 configure 不知道这一点),请将 make 文件参数 VBOX_ONLY_ADDITIONS=1 添加到 kmk 命令行。要创建 Additions 磁盘映像安装程序,请在命令行上使用 packing 进行第二次 kmk 运行。要在 64 位主机上进行 32 位构建,请添加参数 KBUILD_TARGET_ARCH=x86。输出将保存到文件夹 out/linux.*/*/bin/additions 中。构建的 Additions 通常无法在比其构建时所用系统更旧的系统上运行(例如,在 Ubuntu 16.10 上构建可能会导致 Ubuntu 14.04 客户机出现问题)。请在chroot 环境中或目标虚拟机上进行构建以解决此问题。

VirtualBox 7.x 的先决条件

您需要

  • GCC 13 或更高版本 推荐使用 GCC 13。
  • Linux 内核头文件(用于当前引导的内核)
  • IASL(Intel ACPI 编译器)
  • Yasm 1.3 或更高版本 (yasm, Yasm 模块化汇编器项目)
  • xsltproc (libxslt, XML 样式表处理器)
  • libxml2(VBox 版本 >= 1.6 所需,XML 文件处理)
  • libxslt1(VBox 版本 >= 1.6 所需,XML 文件转换)
  • libXcursor(在客户机中支持彩色鼠标指针所需)
  • libxinerama
  • librandr
  • Qt 6
  • libIDL
  • libSDL (SDL 前端)
  • ALSA (音频后端)
  • PulseAudio (音频后端)
  • libhal (检测主机软盘/DVD)
  • libcap (用于 NAT 中 ICMP 套接字的 CAP_NET_RAW)
  • libdevmapper
  • libpam0g(用于 Guest Additions 的 PAM 支持,VBox 版本 >= 3.2 所需)
  • python-dev (Python 绑定)
  • gsoap (webservice API,版本 2.8.50 或更高)
  • Java SE 6 JDK (Java API 绑定,包括 webservice 和 XPCOM)
  • Xmu (用于 OpenGL)
  • Mesa (用于 OpenGL)
  • glslangValidator (用于 3D 加速)
  • cURL (版本 7.16.1 或更高,VBox 版本 >= 3.0 所需)
  • Java JDK (生成 Java 绑定所需)
  • makeself (用于创建通用安装程序包,VBox 版本 >= 4.0 所需)
  • pdflatex (通常由 texlive-latex-base 提供)
  • ia32-libslib32z1(编译 32 位 Guest Additions 所需的各种库,较新版本的 Debian/Ubuntu 使用 lib32z1
  • libc6-dev-i386 (libc6 i386 开发头文件)
  • lib32gcc1 (i386 的 gcc 支持,较新版本的 Debian/Ubuntu 使用 lib32gcc-s1)
  • gcc-multilib (i386 的 gcc 支持)
  • lib32stdc++6 (i386 的 libstdc++)
  • g++-multilib (i386 的 g++ 支持)

在基于 Debian 的系统上,以下命令应该可以安装所需的软件包

apt-get install --no-install-recommends acpica-tools chrpath doxygen g++-multilib libasound2-dev libcap-dev \
        libcurl4-openssl-dev libdevmapper-dev libidl-dev libopus-dev libpam0g-dev \
        libpng-dev libpulse-dev qt6-base-dev qt6-help-dev qt6-l10n-tools libsdl1.2-dev libsdl-ttf2.0-dev \
        libssl-dev libvpx-dev libxcursor-dev libxinerama-dev libxml2-dev libxml2-utils \
        libxmu-dev libxrandr-dev linux-source make nasm python3-dev python-dev \
        texlive texlive-fonts-extra texlive-latex-extra unzip xsltproc \
        default-jdk libstdc++5 libxslt1-dev linux-kernel-headers makeself \
        mesa-common-dev subversion yasm zlib1g-dev glslang-tools \
        libc6-dev-i386 lib32z1 lib32gcc-s1 lib32stdc++6 linux-headers-generic
  • 针对 python 编程
    apt-get install pylint python3-psycopg2 python3-willow  python-psycopg2 python-pil
    

在 Fedora 上(在 pre-37 rawhide 上测试),以下操作应该可行

yum install gcc-c++ subversion subversion-gnome kernel-devel which tar gzip bzip2 \
    doxygen mscgen wine-core \
    glibc-devel libcap-devel libcurl-devel libIDL-devel \
    libstdc++-static libxslt-devel libvpx-devel libXmu-devel \
    pam-devel pulseaudio-libs-devel python-devel qt5-qtbase-devel qt5-qtbase-gui qt5-qtx11extras-devel \
    qt5-qttools-devel libXrender-devel libXinerama-devel libXcursor-devel rpm-build SDL_ttf-devel \
    SDL-static device-mapper-devel glibc-static zlib-static \
    glibc-devel.i686 libstdc++.i686 alsa-lib-devel pulseaudio-libs-devel \
    texlive texlive-latex texlive-latex-bin texlive-ec \
    texlive-collection-fontsrecommended texlive-pdftex-def texlive-fancybox texlive-tabulary \
    libpng-devel openssl-devel acpica-tools opus opus-devel java-1.8.0-openjdk-devel glslang

要获取 Fedora 中缺失的 beramono.sty LaTeX 样式(感谢 Perry

cd /usr/share/texmf/tex/latex/
mkdir bera
cd bera/
wget http://www.tug.org/texlive/devsrc/Master/texmf-dist/tex/latex/bera/beramono.sty
texhash

在 Gentoo 上,以下操作应该可行(抱歉,并非完全最新)

emerge -av sys-devel/bin86 sys-devel/dev86 sys-power/iasl libxslt xerces-c \
           xalan-c libXcursor dev-qt/qtgui:5.6 libIDL libsdl hal alsa-lib pulseaudio \
           app-cdr/cdrtools app-arch/makeself sys-fs/lvm2 dev-util/glslang

在 Arch Linux 上,请尝试以下操作

# 64-bit:
pacman -S --needed binutils bison flex pkg-config multilib-devel wget yasm nasm \
                   libidl2 linux-headers texlive-most sdl sdl_ttf \
                   lib32-glibc lib32-libstdc++5 lib32-gcc-libs gcc-multilib qt5 \
                   glslang

64 位二进制文件的特殊调整

64 位主机上构建仍然需要 32 位库和构建工具,因为作为构建过程一部分的 Guest Additions 是 32 位的。请注意,在 64 位 Ubuntu 系统上,某些共享库的链接缺失。这可以通过以下方式修复:

ln -s libX11.so.6    /usr/lib32/libX11.so 
ln -s libXTrap.so.6  /usr/lib32/libXTrap.so 
ln -s libXt.so.6     /usr/lib32/libXt.so 
ln -s libXtst.so.6   /usr/lib32/libXtst.so
ln -s libXmu.so.6    /usr/lib32/libXmu.so
ln -s libXext.so.6   /usr/lib32/libXext.so

构建 VirtualBox

  1. 进入源代码的根目录并执行 configure 脚本
    ./configure --disable-hardening
    
    如果它找到了所需的一切,它将创建一个名为“AutoConfig.kmk”的文件,其中包含您系统上各种工具的路径。此外,它还将创建一个名为 env.sh 的环境设置脚本。此步骤只需执行一次(如果您的构建工具设置发生更改,您可能需要重复此步骤,但请记住这两个输出文件都将被覆盖)。

开关 --disable-hardening 不应用于构建用于再分发或生产使用的软件包。

  1. 每当您想构建 VirtualBox 时,您都必须打开一个 shell 并加载生成的环境设置脚本 'env.sh',即执行:
    source ./env.sh
    
  1. 要构建发布包,请键入:
    kmk all
    
    这会在 out/linux.x86/release/bin/ 中生成所需的二进制文件。如果您想构建调试版本,请输入:
    kmk BUILD_TYPE=debug
    
    如果您有多个 CPU 核心,kmk 将自动进行并行构建。
  1. bin/ 目录运行加固构建将不起作用,因为所有加固的二进制文件都明确链接到 /opt/VirtualBox 中的库(固定路径)。

为分发构建 VirtualBox 软件包

在创建用于再分发的软件包时,切勿禁用加固(请参阅上一节)。

为了更符合 LSB 规范,请更改 VirtualBox 二进制文件用于查找其组件的默认路径。将以下构建变量添加到 LocalConfig.kmk

VBOX_PATH_APP_PRIVATE_ARCH := /usr/lib/virtualbox
这是应用程序的私有目录,与架构相关。
VBOX_PATH_SHARED_LIBS := $(VBOX_PATH_APP_PRIVATE_ARCH)
放置共享库的位置,通常与私有路径相同,因为 VirtualBox 共享库通常不被任何其他应用程序使用。
VBOX_WITH_ORIGIN :=
禁用 RPATH=$ORIGIN 并使用固定的 RUNPATH
VBOX_WITH_RUNPATH := $(VBOX_PATH_APP_PRIVATE_ARCH)
RUNPATH 设置为可以找到我们共享库的目录。
VBOX_PATH_APP_PRIVATE := /usr/share/virtualbox
这是应用程序的私有目录,与架构无关。
VBOX_PATH_APP_DOCS := /usr/share/doc/virtualbox
设置包含文档的目录。文件 VirtualBox.chmUserManual.pdf 将在此目录中搜索。
VBOX_WITH_TESTCASES :=
不构建测试用例以节省编译时间。
VBOX_WITH_TESTSUITE :=
不构建测试套件以节省编译时间。

运行您的构建

如果构建未加固,您可以直接从构建目标目录(out/linux.x86/release/bin/)运行 VirtualBox。但首先,您必须构建并安装 VirtualBox 内核模块,其源代码将已复制到构建目标目录。

因此,请执行以下操作:

cd out/linux.x86/release/bin/src
make
sudo make install
cd ..

然后它应该已经安装到您的模块目录中,您可以使用 modprobe vboxdrv 加载它。请确保您拥有对 /dev/vboxdrv 的读写权限。

最后,您可以启动其中一个前端,例如:

./VirtualBox
上次修改 84 分钟前 上次修改时间:2025 年 7 月 23 日下午 06:08:23
注意: 查看 TracWiki 获取使用维基的帮助。

© 2025 Oracle 支持 隐私 / 请勿出售我的信息 使用条款 商标政策 自动化访问礼仪