
nix-alien终极指南 - 在Nix/NixOS上运行未修改二进制文件的完整解决方案【免费下载链接】nix-alienRun unpatched binaries on Nix/NixOS项目地址: https://gitcode.com/gh_mirrors/ni/nix-aliennix-alien是一款专为Nix/NixOS系统设计的实用工具它能够帮助用户轻松运行那些未经过Nix修改的二进制文件解决在Nix系统中常见的依赖缺失问题让用户在Nix/NixOS上使用各类二进制应用更加便捷。为什么需要nix-alien在Nix/NixOS系统中当你尝试运行一个未经过Nix修改的二进制文件时是否经常遇到类似这样的错误$ ./myapp bash: ./myapp: No such file or directory这通常是由于二进制文件依赖的共享库在NixOS系统中找不到导致的。而nix-alien的出现就是为了解决这个困扰众多Nix/NixOS用户的问题。它能够自动下载并配置运行二进制文件所需的依赖让你无需手动处理复杂的依赖关系。nix-alien的核心功能nix-alien提供了多个实用命令满足不同场景下的需求nix-alien在包含所有必要共享依赖的FHS shell中运行二进制文件。只需简单输入nix-alien myapp就能让你的二进制文件顺利运行。nix-alien-ld生成一个设置了NIX_LD_LIBRARY_PATH的shell配合nix-ld使用。使用方法为nix-alien-ld myapp。nix-alien-find-libs列出二进制文件所需的所有库。通过nix-alien-find-libs myapp命令即可查看。快速开始无需安装即可体验如果你使用的是支持Flakes的Nix系统无需安装nix-alien直接运行以下命令即可体验$ nix --extra-experimental-features nix-command flakes run github:thiagokokada/nix-alien -- ~/myapp提示如果你在非NixOS系统上尝试运行OpenGL二进制文件例如Blender可以将上述命令用nixGL包装$ nix --extra-experimental-features nix-command flakes run --impure github:guibou/nixGL --override-input nixpkgs nixpkgs/nixos-unstable -- nix run github:thiagokokada/nix-alien -- blender详细使用方法基本运行一旦在系统中安装了nix-alien运行二进制文件变得非常简单$ nix-alien ~/myappnix-alien会在FHSUserEnv中运行指定的二进制文件并包含所有共享库依赖。生成的default.nix文件会保存到$XDG_CACHE_HOME/nix-alien/path-uuid/fhs-env/default.nix以加快下次评估速度。缓存基于二进制文件的绝对路径。如果需要传递参数给应用程序可以这样做$ nix-alien ~/myapp -- --foo bar使用nix-ld如果你正在使用nix-ld可以使用nix-alien-ld命令$ nix-alien-ld -- ~/myapp这将生成一个设置了NIX_LD_LIBRARY_PATH和NIX_LD的包装二进制文件。生成的default.nix文件会保存到$XDG_CACHE_HOME/nix-alien/path-uuid/nix-ld/default.nix。查找库如果你想使用基于fzf的菜单查找库用于脚本可以运行$ nix-alien-find-libs ~/myapp这会在标准输出上打印找到的库。信息性消息会打印到标准错误因此如果需要可以轻松将它们重定向到/dev/null。你也可以使用--json标志将结果打印为JSON。其他选项每个程序都有一些其他选项可以使用--help标志查看。例如对于nix-alienusage: nix-alien [-h] [--version] [-l LIBRARY] [-p PACKAGE] [-c CANDIDATE] [-r] [-d PATH] [-P] [-E] [-s] [-f] program ...在NixOS上安装nix-alien常规安装你可以将以下内容添加到/etc/nixos/nix-alien.nix文件中{ ... }: let nix-alien-pkgs import ( builtins.fetchTarball https://github.com/thiagokokada/nix-alien/tarball/master ) { }; in { environment.systemPackages with nix-alien-pkgs; [ nix-alien ]; # 可选但这是nix-alien-ld命令所需的 programs.nix-ld.enable true; }然后将其添加到/etc/nixos/configuration.nix文件的imports部分。使用Flakes安装如果你使用带有Flakes的NixOS可以在NixOS配置中添加类似以下内容将nix-alien安装到系统PATH中{ description nix-alien-on-nixos; inputs.nixpkgs.url github:NixOS/nixpkgs; inputs.nix-alien.url github:thiagokokada/nix-alien; outputs { self, nixpkgs, nix-alien }: { nixosConfigurations.nix-alien-desktop nixpkgs.lib.nixosSystem rec { system x86_64-linux; # 或 aarch64-linux specialArgs { inherit self system; }; modules [ ({ self, system, ... }: { environment.systemPackages with self.inputs.nix-alien.packages.${system}; [ nix-alien ]; # 可选nix-alien-ld所需 programs.nix-ld.enable true; }) ]; }; }; }在Home-Manager中安装常规安装你可以将以下内容添加到Home-Manager配置文件中{ ... }: let nix-alien-pkgs import ( builtins.fetchTarball https://github.com/thiagokokada/nix-alien/tarball/master ) { }; in { # ... home.packages with nix-alien-pkgs; [ nix-alien ]; }使用Flakes安装如果你使用带有Flakes的Home-Manager可以使用{ description nix-alien-on-home-manager; inputs.nixpkgs.url github:NixOS/nixpkgs; inputs.home-manager.url github:nix-community/home-manager; inputs.nix-alien.url github:thiagokokada/nix-alien; outputs { self, nixpkgs, home-manager, nix-alien }: let system x86_64-linux; # 或 aarch64-linux pkgs import nixpkgs { inherit system; }; in { homeConfigurations.nix-alien-home home-manager.lib.homeManagerConfiguration rec { inherit pkgs; extraSpecialArgs { inherit self system; }; modules [ ({ self, system, ... }: { home.packages with self.inputs.nix-alien.packages.${system}; [ nix-alien ]; }) ]; }; }; }开发指南在非Flakes系统上你可以使用nix-shell启动开发shell。在启用Flakes的系统上你可以使用nix develop。如果你安装了nix-direnv仓库中有一个.envrc文件配置为自动启动启用Flakes的设置。只需在该仓库中运行direnv allow即可。局限性动态加载共享库的二进制文件例如使用dlopen可能无法与此脚本一起使用。但是可以使用--additional-libs/-l或--additional-packages/-p标志来解决此问题。第一个可以这样使用$ nix-alien -l libGL.so.1 -l libz.so.1 ~/myapp这将以与在二进制文件中找到的其他库类似的方式使用nix-locate进行搜索。第二个可以这样使用$ nix-alien -p libGL -p zlib ~/myapp直接将包添加到default.nix文件中。警告-p标志没有验证因此如果包不存在你可能会收到“undefied variable”错误。技术原理nix-alien通过使用ldd实际上是pylddwrap枚举ELF头中的共享库依赖项然后在nixpkgs中搜索等效库来实现其功能。这是通过本地查询nix-locate完成的。为了解决可能的冲突需要人工干预但多亏了fzf和pyfzf通过显示交互式列表使这变得容易。总结nix-alien是Nix/NixOS用户运行未修改二进制文件的终极解决方案。它简化了依赖管理让用户能够轻松地在Nix系统上使用各种二进制应用程序。无论你是Nix新手还是有经验的用户nix-alien都能为你节省大量处理依赖问题的时间和精力。如果你想尝试使用nix-alien可以通过以下命令克隆仓库git clone https://gitcode.com/gh_mirrors/ni/nix-alien开始体验在Nix/NixOS上无缝运行未修改二进制文件的乐趣吧【免费下载链接】nix-alienRun unpatched binaries on Nix/NixOS项目地址: https://gitcode.com/gh_mirrors/ni/nix-alien创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考