在 NixOS 上运行未修补的动态二进制文件 [维护者 = @Mic92]
在 NixOS 上运行未修补的动态二进制文件。
虽然 nixpkgs 中的许多专有包已经进行了修补,
autoPatchelfHook 补丁, 有些情况下无法进行补丁:
虽然还有其他解决方案,如 buildFHSUserEnv,可以恢复常见 Linux 系统上的 Linux 文件层次结构(ld-linux-x86-64.so.2),但这些沙箱也有其自身的缺点:
通常,并非为 NixOS 创建的预编译二进制文件中都包含了所谓的链接加载器,在 Linux/x86_64 上,例如 glibc 中的 /lib64/ld-linux-x86-64.so.2。然而, NixOS 通常将其动态链接器存放在 Nix 存储库中的 glibc 包中,因此无法运行这些二进制文件。Nix-ld 为这些类型的二进制文件提供了一个中介层。它安装在其他 Linux 发行版安装其链接加载器的同一位置,即 /lib64/ld-linux-x86-64.so.2。然后,它根据环境变量 NIX_LD 中指定的内容加载实际的链接加载器。此外,它还接受来自 NIX_LD_LIBRARY_PATH 中的库查找路径的冒号分隔的路径。该环境变量在传递执行给实际的 ld 之前会被重写为 LD_LIBRARY_PATH。这允许您指定执行文件运行所需的其他库。
nix-ld 自 NixOS 22.05 起就成为 nixpkgs 的一部分。用户可以通过以下 nixos 设置来启用它:
暂无开放 Issues,或尚未同步最近议题。