根文件系统
所有 BinaryBuilder.jl
构建所在的执行环境称为“根文件系统”或 RootFS。此 RootFS 由 Yggdrasil 中 0_Rootfs
目录 包含的构建器脚本构建的。 rootfs 镜像基于 alpine
docker 镜像,用于为我们支持的每个目标平台构建编译器。目标平台编译器工具链存储在 /opt/${triplet}
中,因此 64 位 Linux(使用 glibc
作为支持 libc
)编译器将在 /opt/x86_64-linux-gnu/bin
中找到。
每个编译器“分片”都是单独打包的,这样用户就不必为了构建单个平台而下载多 GB 的压缩包。有一个总的“根”分片,以及平台支持分片、GCC 分片、LLVM 分片、Rust 分片等...这些都嵌入在捆绑的 Artifacts.toml
文件,而 BinaryBuilder.jl
会按需下载它们,利用 Julia 1.3+ 的新 Pkg.Artifacts 系统。
每个分片都可以作为解压的目录树以及 .squashfs
图像使用。 .squashfs
图像占用的磁盘空间要少得多,但不幸的是,它们需要主机上的 root
权限,并且只能在 Linux 上运行。这有望在未来的 Linux 内核版本中得到修复,但如果您拥有 sudo 权限,通常需要使用 .squashfs
文件来节省网络带宽和磁盘空间。有关如何执行此操作的说明,请参阅 环境变量。
在 RootFS 映像中启动进程时,BinaryBuilder.jl
会设置一组环境变量以启用特定于目标的编译器工具链,以及其他细节。有关更多详细信息,请参阅 构建提示 文档页面,以及本仓库的 src/Runner.jl
文件。