Nix-LD 使用指南
nix-ldRun unpatched dynamic binaries on NixOS项目地址:https://gitcode.com/gh_mirrors/ni/nix-ld
项目介绍
Nix-LD 是一个由 Mic92 原创于2020年的项目,并在后续得到发展,特别是通过 Zhaofeng Li 的贡献,在2023年演进成了基于Rust的新项目 nix-ld-rs
,最终在2024年合并回了主项目。该项目设计用于NixOS环境,解决非NixOS二进制文件在该系统上的运行问题,尤其是解决动态链接的问题。通过设置特定的环境变量如 NIX_LD
和 NIX_LD_LIBRARY_PATH
,使得未经过Nix修改的可执行文件也能够在Nix环境下找到正确的库路径,而无需修改这些程序本身。
它遵循 MIT 许可证,强调安全性和易用性,同时也体现了Nix社区对保持环境纯净和隔离性的追求。
快速启动
要快速开始使用 nix-ld
,你需要在你的NixOS环境中配置必要的环境变量。以下是在一个基本的 nix-shell
环境中如何设置的例子:
with import <nixpkgs> {};
mkShell {
# 设置链接库路径
NIX_LD_LIBRARY_PATH = lib.makeLibraryPath [
stdenv.cc.cc openssl # 这里是示例库,根据实际需要添加
];
# 指定动态链接器的路径
NIX_LD = lib.fileContents "${stdenv.cc}/nix-support/dynamic-linker";
}
通过上述命令,你创建了一个能够运行依赖这些设置的可执行文件的环境。只需将此脚本保存为 .nix
文件并使用 nix-shell
执行,即可进入配置好的环境。
应用案例和最佳实践
在NixOS上运行外来软件
假设你想在NixOS上原封不动地运行一个没有为NixOS特别打包的应用。传统方法可能会因链接库找不到而失败。使用 nix-ld
,你可以通过设定环境变量确保该程序能找到Nix Store中的正确库版本,实现平滑运行,避免手动修改或重新编译。
自动化环境配置
对于多项目的开发环境,可以利用 nix-autobahn
或自定义脚本(如 nix-alien-ld
),自动化地生成包含正确 NIX_LD
和 NIX_LD_LIBRARY_PATH
的shell表达式,减少手工配置的繁琐工作。
典型生态项目
在Nix生态中,除了 nix-ld
之外,还有几个与之相关的项目值得一探:
- nix-autobahn: 提供了一种自动方式来生成运行外部程序所需的Nix Shell配置。
- nix-alien: 另一种策略,通过包装程序并在其中设置环境变量来使程序能在Nix环境中运行。
- nix-index: 帮助发现哪些NixOS构建需要特定的库,这在调试依赖关系时非常有用。
通过整合这些工具,开发者可以在NixOS环境中更加灵活和高效地管理复杂的依赖关系和执行环境,实现了非NixOS二进制与Nix环境的友好共存。
这个指南提供了开始使用 nix-ld
的基础,深入学习和更复杂的应用场景可能需要查阅官方文档和进一步的实践探索。
nix-ldRun unpatched dynamic binaries on NixOS项目地址:https://gitcode.com/gh_mirrors/ni/nix-ld