【发布时间】:2018-05-09 05:39:45
【问题描述】:
我刚刚开始在 OSX 上使用 Nix 包管理器,我正在尝试为 pass 二进制文件 (https://www.passwordstore.org) 创建我的第一个包 - Nixpkgs 存储库中没有该包。
我正在尝试指定运行时依赖项 (getopt),但是在使用二进制文件时这似乎不可用。
这是我的包的 default.nix:
{ pkgs ? import <nixpkgs> {} }:
with pkgs;
let
version = "1.7.1";
in {
pass = stdenv.mkDerivation rec {
name = "pass-${version}";
src = fetchurl {
url = "https://git.zx2c4.com/password-store/snapshot/password-store-1.7.1.tar.xz";
sha256 = "0scqkpll2q8jhzcgcsh9kqz0gwdpvynivqjmmbzax2irjfaiklpn";
};
buildInputs = [ stdenv makeWrapper];
installPhase = ''
make install PREFIX=$out/artifact
makeWrapper $out/artifact/bin/pass $out/bin/pass \
--set PATH ${stdenv.lib.makeBinPath [ getopt ]}
'';
meta = {
homepage = "https://www.passwordstore.org";
description = "The standard unix password manager";
license = stdenv.lib.licenses.gpl2Plus;
};
};
}
我可以成功构建这个包 (nix-build --show-trace) 并安装它 (nix-env -i ./result)。
列出我的包的运行时依赖项显示getopt 列出:
nix-store -qR $(which pass)
...
/nix/store/c5swmygzc0kmvpq6cfkvwm2yz1k57kqy-getopt-1.1.4
但是,当我开始使用二进制文件 (pass init my-key) 时,我收到以下错误:
/nix/store/...-pass-1.7.1/artifact/bin/pass: line 302:
/usr/local/bin/getopt: No such file or directory
谁能告诉我我做错了什么?
谢谢
【问题讨论】:
-
密码存储似乎对某些路径进行了硬编码。您可能需要修补这些。
-
您可能应该省略 .../artifact,因为生态系统的其他部分会假定二进制文件位于
/bin,而不是 /artifact/bin。 (可能不是您的问题的原因) -
有趣的事实:您可以取消引用 URL。
-
谢谢罗伯特,我已经修改了我的包,以便包装器位于
result/bin- 但结果是相同的。当我查看pass源时,我看不到getopt的任何明显硬编码路径。当您建议修补路径时,您指的是在config.nix文件中使用packageOverrides吗?