用途:把预编译二进制发行包(.deb、.rpm、.tar.gz、.zip)转换为 Nix 派生,用于打包专有或闭源软件,以及修复 Electron/GUI 应用运行时的“library not found”问题。核心原则是始终从原始归档文件取源,不要使用已解压目录,以保证可复现性。
主要能力:提供 .deb 的核心打包模式(用 ar 与 tar 解包,配合 dpkg、autoPatchelfHook);.rpm 用 rpm2cpio | cpio 解包;.tar.gz 由 stdenv 自动识别;.zip 需在 nativeBuildInputs 加 unzip。依赖区分 nativeBuildInputs(构建期工具,如 dpkg、autoPatchelfHook、makeWrapper)与 buildInputs(运行期库,如 gtk3、glib、libpulseaudio)。给出常见库映射,例如 libgtk-3.so.0→gtk3、libglib-2.0.so.0→glib、libstdc++.so.6→stdenv.cc.cc.lib、libxkbcommon.so.0→libxkbcommon。
使用方式:按规则文件查阅,包括 essential-pattern、archive-formats、dependencies、source-files、common-mistakes、finding-libraries、quick-testing、troubleshooting-autoPatchelf、version-management、electron-apps、advanced-fhs-env、build-phases、wrapper-programs。用 ldd 查找缺失库,用 nix-shell -p steam-run 快速测试二进制,用 nix log 调试 autoPatchelf,用 nix-locate 搜索库,用 makeWrapper 生成包装脚本。
适用场景:转换二进制包、打包闭源软件、修复库路径。不适用于 nixpkgs 已有的软件、源码构建包,以及 AppImage(应使用 appimage-run 或解压后修补)。
限制:资料未提供具体版本兼容性、平台范围与收费信息;示例代码需按实际包调整,避免使用绝对路径,不要盲目堆叠库依赖。