SuperAPI AI 工具集

packaging-binary-for-nix

设计与创作

查看项目

更新于 10-16 00:00

技能介绍

用途:把预编译二进制发行包(.deb、.rpm、.tar.gz、.zip)转换为 Nix 派生,适合打包闭源/专有软件,或修复 Electron/GUI 应用“library not found”错误。不适用于 nixpkgs 中已有的软件、源码包,AppImage 建议用 appimage-run 或解包后修补。

主要能力:用 stdenv.mkDerivation 从原始归档取源;用 autoPatchelfHook 自动修复库路径;按格式解包(.deb 用 ar x $src 与 tar xf data.tar.xz 并加 dpkg;.rpm 用 rpm2cpio $src | cpio -idmv 并加 rpm、cpio;.zip 加 unzip;.tar.gz 由 stdenv 自动识别);用 buildInputs 声明运行时库,nativeBuildInputs 放构建工具;用 makeWrapper/wrapProgram 设置 PATH、LD_LIBRARY_PATH 和环境变量;用 ldd 排查缺失库并映射到 Nix 包(如 libgtk-3.so.0→gtk3、libglib-2.0.so.0→glib、libpulse.so.0→libpulseaudio、libGL.so.1→mesa 或 libglvnd、libxkbcommon.so.0→libxkbcommon)。

使用方式:src 用相对路径 ./app-${version}.tar.gz 或 fetchurl 加 hash;在 unpackPhase 解包,installPhase 复制到 $out 并用 substituteInPlace 修正 desktop 文件路径;版本号用 ${version} 变量避免硬编码。对检测修改而拒绝运行的专有软件,可用 buildFHSEnv 或 steam-run 提供 FHS 环境。

限制:不要用已解压目录或绝对路径作 src,否则不可复现;库依赖应放 buildInputs 而非 nativeBuildInputs;FHS 方案闭包更大、可复现性较低。资料未提供具体收费、平台或效果信息。