构建说明

    要运行Darling,您必须使用64位x86 Linux发行版。Darling不能在32位x86系统上使用,甚至不能运行32位应用程序。

    依赖项

    要编译Darling,需要Clang;至少需要Clang 11。您可以通过编辑Toolchain.cmake来强制使用特定版本的Clang(如果系统上安装了它)。

    还需要至少4GB的RAM进行构建。使用交换空间可能有助于减少内存使用,但可能会显着减慢构建速度。

    需要Linux 5.0或更高版本。

    Debian 10/11

    1. sudo apt install cmake clang-6.0 bison flex xz-utils libfuse-dev libudev-dev pkg-config \
    2. libc6-dev-i386 libcap2-bin git git-lfs libglu1-mesa-dev libcairo2-dev \
    3. libgl1-mesa-dev libtiff5-dev libfreetype6-dev libxml2-dev libegl1-mesa-dev libfontconfig1-dev \
    4. libbsd-dev libxrandr-dev libxcursor-dev libgif-dev libpulse-dev libavformat-dev libavcodec-dev \
    5. libswresample-dev libdbus-1-dev libxkbfile-dev libssl-dev llvm-dev

    Debian 12

    1. sudo apt install cmake clang bison flex xz-utils libfuse-dev libudev-dev pkg-config \
    2. libc6-dev-i386 libcap2-bin git git-lfs libglu1-mesa-dev libcairo2-dev \
    3. libgl1-mesa-dev libtiff5-dev libfreetype6-dev libxml2-dev libegl1-mesa-dev libfontconfig1-dev \
    4. libbsd-dev libxrandr-dev libxcursor-dev libgif-dev libpulse-dev libavformat-dev libavcodec-dev \
    5. libswresample-dev libdbus-1-dev libxkbfile-dev libssl-dev llvm-dev

    Debian Testing

    1. sudo apt install cmake clang-9 bison flex xz-utils libfuse-dev libudev-dev pkg-config \
    2. libc6-dev-i386 libcap2-bin git git-lfs libglu1-mesa-dev libcairo2-dev \
    3. libgl1-mesa-dev libtiff5-dev libfreetype6-dev libxml2-dev libegl1-mesa-dev libfontconfig1-dev \
    4. libbsd-dev libxrandr-dev libxcursor-dev libgif-dev libpulse-dev libavformat-dev libavcodec-dev \
    5. libswresample-dev libdbus-1-dev libxkbfile-dev libssl-dev llvm-dev

    Ubuntu 20.04:

    1. sudo apt install cmake clang-12 bison flex libfuse-dev libudev-dev pkg-config libc6-dev-i386 \
    2. gcc-multilib libcairo2-dev libgl1-mesa-dev libglu1-mesa-dev libtiff5-dev \
    3. libfreetype6-dev git git-lfs libelf-dev libxml2-dev libegl1-mesa-dev libfontconfig1-dev \
    4. libbsd-dev libxrandr-dev libxcursor-dev libgif-dev libavutil-dev libpulse-dev \
    5. libavformat-dev libavcodec-dev libswresample-dev libdbus-1-dev libxkbfile-dev \
    6. libssl-dev llvm-distutils

    Ubuntu 22.04:

    1. sudo apt install cmake automake clang-15 bison flex libfuse-dev libudev-dev pkg-config libc6-dev-i386 \
    2. gcc-multilib libcairo2-dev libgl1-mesa-dev curl libglu1-mesa-dev libtiff5-dev \
    3. libfreetype6-dev git git-lfs libelf-dev libxml2-dev libegl1-mesa-dev libfontconfig1-dev \
    4. libbsd-dev libxrandr-dev libxcursor-dev libgif-dev libavutil-dev libpulse-dev \
    5. libavformat-dev libavcodec-dev libswresample-dev libdbus-1-dev libxkbfile-dev \
    6. libssl-dev libstdc++-12-dev

    Arch Linux & Manjaro:

    安装依赖项:

    1. sudo pacman -S --needed make cmake clang flex bison icu fuse gcc-multilib \
    2. lib32-gcc-libs pkg-config fontconfig cairo libtiff mesa glu llvm libbsd libxkbfile \
    3. libxcursor libxext libxkbcommon libxrandr ffmpeg git git-lfs

    Fedora and CentOS

    1. sudo dnf install make cmake clang bison dbus-devel flex glibc-devel.i686 fuse-devel \
    2. systemd-devel elfutils-libelf-devel cairo-devel freetype-devel.{x86_64,i686} \
    3. libjpeg-turbo-devel.{x86_64,i686} fontconfig-devel.{x86_64,i686} libglvnd-devel.{x86_64,i686} \
    4. mesa-libGL-devel.{x86_64,i686} mesa-libEGL-devel.{x86_64,i686} mesa-libGLU-devel.{x86_64,i686} \
    5. libtiff-devel libxml2-devel libbsd-devel git git-lfs libXcursor-devel \
    6. libXrandr-devel giflib-devel pulseaudio-libs-devel libxkbfile-devel \
    7. openssl-devel llvm libcap-devel libavcodec-free-devel libavformat-free-devel

    OpenSUSE Tumbleweed

    需要仅使用64位组件

    构建Darling。请参见Build Options以获取说明。

    1. sudo zypper install make cmake-full clang10 bison flex python-base glibc fuse-devel \
    2. libsystemd0 libelf1 cairo-devel libfreetype6 libjpeg-turbo libfontconfig1 libglvnd \
    3. Mesa-libGL-devel Mesa-libEGL-devel libGLU1 libxml2-tools libbsd-devel git git-lfs \
    4. libXcursor-devel giflib-devel ffmpeg-4 ffmpeg-4-libavcodec-devel \
    5. ffmpeg-4-libavformat-devel libpulse-devel pulseaudio-utils libxkbfile-devel openssl \
    6. llvm libcap-progs libtiff-devel libjpeg8-devel libXrandr-devel dbus-1-devel glu-devel \
    7. ffmpeg-4-libswresample-devel

    Alpine Linux

    确保启用community存储库。Alpine还不支持32位构建,因此请确保禁用它。

    1. sudo apk add cmake clang bison flex xz fuse-dev pkgconfig libcap git git-lfs \
    2. python3 glu-dev cairo-dev mesa-dev tiff-dev freetype-dev libxml2-dev fontconfig-dev \
    3. libbsd-dev libxrandr-dev libxcursor-dev giflib-dev pulseaudio-dev ffmpeg-dev dbus-dev \
    4. libxkbfile-dev openssl-dev libexecinfo-dev make gcc g++ xdg-user-dirs

    这些是在Alpine上构建和运行Darling所需的最低要求。当然,如果您想运行GUI应用程序,您还需要一个桌面环境。

    获取源代码

    Darling使用git-lfs。如果需要,请按照官方说明进行设置。

    由于Darling广泛使用Git子模块,因此您不能使用普通的git clone。请像这样克隆:

    1. git clone --recursive https://github.com/darlinghq/darling.git

    注意:源代码树需要多达5GB的磁盘空间!

    更新源代码

    如果您已经克隆了Darling并希望获取最新更改,请在源根目录执行以下操作:

    1. git lfs install
    2. git pull
    3. git submodule update --init --recursive

    构建

    Darling的构建系统是CMake。默认情况下,CMake生成Makefiles。

    注意:构建可能需要高达16GB的磁盘空间!然后,Darling的安装本身最多占用1GB。

    构建和安装

    现在让我们构建Darling:

    1. # 进入克隆的源代码目录
    2. cd darling
    3. # 删除之前安装的Darling
    4. tools/uninstall
    5. # 创建构建目录
    6. mkdir build && cd build
    7. # 配置构建
    8. cmake ..
    9. # 构建和安装Darling
    10. make
    11. sudo make install

    构建选项

    禁用32位库

    Darling通常会构建所有库的32位和64位版本,以使32位程序在Darling下运行。但是,这意味着Darling还需要某些本机库的32位版本。如果您无法设置多库环境,或者只想构建64位组件,请在配置时使用-DTARGET_i386=OFF来禁用32位组件的构建。

    并行构建

    另一种加速构建的方法是使用多个作业运行make。为此,请运行make -j8,其中8是您选择的当前作业数。通常,避免运行超过机器CPU核心数量两倍的作业。

    “统一”JavaScriptCore构建

    如果您仍然想构建JavaScriptCore并且有一些可用的RAM,JavaScriptCore还支持一种称为“统一构建”的构建模式。这种构建模式可以将JSC的构建时间减半,但代价是导致略高的RAM使用率。在Darling中,可以通过在配置构建时添加-DJSC_UNIFIED_BUILD=ON来启用此构建模式。

    Ninja构建系统

    作为make的替代方案,ninja默认支持并行处理,并具有更好的进度指示器。

    按照正常的构建说明进行,直到达到cmake ..步骤。将其替换为cmake .. -GNinja。现在,您可以使用ninja而不是make进行构建。

    Ninja无法链接libcsu

    如果您使用Ninja,库“libcsu”可能无法链接。解决方案是删除位于“./src/external/csu/libcsu.a”的库,然后重试。有关更多信息,请参见此问题

    调试构建

    默认情况下,CMake设置了一个非调试、非发布的构建。如果运行LLDB并遇到指示缺少调试符号的消息,请确保您正在进行调试构建。为此,请使用-DCMAKE_BUILD_TYPE=Debug

    单元测试

    Darling有一些有限的单元测试。这些默认情况下不会构建,但可以使用-DENABLE_TESTS=1启用。然后,这些测试将安装到Darling容器内的/usr/libexec目录中。

    额外的非标准二进制文件

    Darling尽可能坚持标准的macOS安装。但是,如果您想构建和安装一些其他软件包(例如GNU tar),您可以添加-DADDITIONAL_PACKAGES=ON

    自定义安装前缀

    要将Darling安装在自定义目录中,请使用CMAKE_INSTALL_PREFIX CMake选项。但是,Darling安装不是可移植的,因为安装前缀硬编码到darling可执行文件中。这是有意的。如果您移动了Darling安装,您将收到以下错误消息:

    1. Cannot mount overlay: No such file or directory
    2. Cannot open mnt namespace file: No such file or directory

    如果您希望正确移动Darling安装,唯一受支持的选项是卸载当前的Darling安装,然后使用不同的安装前缀重新构建Darling。

    手动设置CMAKE_C_COMPILER和CMAKE_CXX_COMPILER

    如果CMAKE_C_COMPILER和CMAKE_CXX_COMPILER尚未设置,配置脚本将尝试定位clang/clang++。

    通常,您无需担心设置这些变量。尽管如此,您可以在配置构建时添加-DCMAKE_C_COMPILER="/absolute/path/to/clang"-DCMAKE_CXX_COMPILER="/absolute/path/to/clang++",以强制配置脚本使用特定的clang编译器。

    仅构建特定组件

    默认情况下,几乎构建了Darling的所有组件,类似于完整的macOS安装。但是,您还可以选择仅使用CMake中的COMPONENTS配置选项构建Darling的某些组件。这是要构建的组件的逗号分隔列表。默认情况下,COMPONENTS设置为stock(其中包括各种其他组件)。目前已识别以下组件:

    基本组件

    • core - 构建darlingserver、mldr、launchd和libSystem(以及一些主机端可执行文件)。这是运行Darling下的可执行文件所需的最小目标集。请注意,大多数可执行文件依赖于各种其他程序和系统服务,这些服务不由此组件提供;这将仅支持极简的可执行文件(例如“Hello world”可执行文件)。
    • system - 包括core和进入shell所需的一切(包括一个shell:bash和zsh),并执行基本系统功能(即基本的系统守护程序)。 脚本运行时 - 请注意,您可能还希望将这些与system一起使用,但这不是绝对必需的
    • python - 包括core和Python 2.7运行时和标准库,以及需要Python的其他程序。
    • ruby - 包括core和Ruby 2.6运行时和标准库,以及需要Ruby的其他程序。
    • perl - 包括core和Perl 5.18和5.28运行时和标准库,以及需要Perl的其他程序。 CLI组件
    • cli - 包括system和大多数独立的命令行程序(即不需要额外运行时或复杂框架/库的程序)。 请注意,这不包括Vim;这是因为Vim依赖于AppKit和CoreServices(这被认为是GUI组件)。但是,cli_dev组件包括这些框架,因此它还包括Vim。
    • cli_dev - 包括cli、python、ruby和perl,以及通常被视为GUI目标的一些其他目标。这些额外的目标对Xcode CLI工具的某些部分是必要的。如果您想在命令行上使用Xcode构建和开发软件,并且不需要/不想要完整的GUI安装,则这是您想要的组件。
    • cli_extra - 包括cli和在标准macOS安装上未安装的一些其他程序(例如GNU tar)。 GUI组件 - 请注意,这些组件中没有一个包括cli或任何其他与CLI相关的组件。一些应用程序可能依赖于某些CLI程序或脚本运行时的可用性,因此您可能还需要自己包括cli、python、ruby等。
    • gui - 包括system和运行基本Cocoa、Metal和OpenGL应用程序所需的一切。请注意,这仅包括GUI应用程序所需的最小内容;大多数应用程序还将需要其他框架(例如音频、视频、位置等)。
    • gui_frameworks - 包括gui和由Cocoa应用程序依赖的许多与GUI相关的框架。请注意,此组件仅包括非存根框架。
    • gui_stubs - 包括gui_frameworks和许多带存根的与GUI相关的框架。 重型框架 - 这些是可以显著减缓构建和/或在安装后占用大量空间但对于绝大多数程序而言是不必要的框架。
    • jsc - JavaScriptCore - 这是用于执行JavaScript代码的大型框架,主要用于Web浏览器。这通常会使构建延迟额外的30分钟到1小时。
    • webkit - WebKit - 这是另一个大型框架,仅用于Web浏览器(嵌入式或其他

    )。 伞形组件 - 这些是仅包含其他组件的组件,旨在方便选择常见构建的大片组件。

    • stock - 包括cli、python、ruby、perl和gui_stubs(这些隐含地包括core、system、gui和gui_frameworks)。这是标准构建所选择的默认组件,旨在匹配默认与标准macOS安装一起包含的软件。
    • all - 包括所有其他组件。换句话说,这包括stock、jsc、webkit和cli_extra。

    已知问题

    BackBox 如果您的发行版是Backbox,并且在构建过程中遇到问题,请尝试以下命令:

    1. sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-6.0 600
    2. sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-6.0 600

    SELinux 在SELinux上,启动Darling时可能会看到以下错误:

    1. Cannot open mnt namespace file: No such file or directory

    要解决此问题,请尝试以下命令:setsebool -P mmap_low_allowed 1

    损坏的符号链接 Darling在很大程度上依赖符号链接。在支持此功能的文件系统上构建Darling非常重要。

    如果您尽管在支持符号链接的文件系统上下载和构建Darling,仍然遇到问题,请检查您的git配置,确保您没有故意禁用它(例如,core.symlinks=false)。

    文件系统支持 Darling使用overlayfs在macOS样式的根文件系统之上实现前缀。虽然overlayfs对较低的(只读的)文件系统(其中包含您的/usr目录)不太挑剔,但对于较高的文件系统(除非您覆盖DPREFIX环境变量,否则为您的主目录)有更严格的要求。

    引用内核文档:

    较低的文件系统可以是Linux支持的任何文件系统,也不需要是可写的。较低的文件系统甚至可以是另一个overlayfs。较高的文件系统通常将是可写的,如果是可写的,它必须支持创建trusted.*扩展属性,并且必须在readdir响应中提供有效的d_type,因此NFS不适用。

    除了不支持NFS之外,已知ZFS和eCryptfs加密存储也无法工作。

    如果尝试使用不受支持的文件系统,将打印以下错误:

    1. Cannot mount overlay: Invalid argument