【发布时间】:2018-07-17 02:24:29
【问题描述】:
我正在尝试构建基于 Freemind 的 Freeplane 派生,请参阅:https://github.com/razvan-panda/nixpkgs/blob/freeplane/pkgs/applications/misc/freeplane/default.nix
{ stdenv, fetchurl, jdk, jre, gradle }:
stdenv.mkDerivation rec {
name = "freeplane-${version}";
version = "1.6.13";
src = fetchurl {
url = "mirror://sourceforge/project/freeplane/freeplane%20stable/freeplane_src-${version}.tar.gz";
sha256 = "0aabn6lqh2fdgdnfjg3j1rjq0bn4d1947l6ar2fycpj3jy9g3ccp";
};
buildInputs = [ jdk gradle ];
buildPhase = "gradle dist";
installPhase = ''
mkdir -p $out/{bin,nix-support}
cp -r ../bin/dist $out/nix-support
sed -i 's/which/type -p/' $out/nix-support/dist/freeplane.sh
cat >$out/bin/freeplane <<EOF
#! /bin/sh
JAVA_HOME=${jre} $out/nix-support/dist/freeplane.sh
EOF
chmod +x $out/{bin/freeplane,nix-support/dist/freeplane.sh}
'';
meta = with stdenv.lib; {
description = "Mind-mapping software";
homepage = https://www.freeplane.org/wiki/index.php/Home;
license = licenses.gpl2Plus;
platforms = platforms.linux;
};
}
在 gradle 构建步骤中,它会抛出以下错误:
建筑路径 '/nix/store/9dc1x2aya5p8xj4lq9jl0xjnf08n7g6l-freeplane-1.6.13' 解包源 解包源存档 /nix/store/c0j5hgpfs0agh3xdnpx4qjy82aqkiidv-freeplane_src-1.6.13.tar.gz 源根是 freeplane-1.6.13 将 SOURCE_DATE_EPOCH 设置为时间戳 1517769626 文件 freeplane-1.6.13/gitinfo.txt 补丁源 没有配置配置脚本,什么都不做构建
FAILURE:构建失败并出现异常。
出了什么问题:无法为 Linux amd64 加载本机库“libnative-platform.so”。
尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。 “/nix/store/id4vfk3r6fd4zpyb15dq9xfghf342qaa-freeplane-1.6.13.drv”的构建器 失败,退出代码 1 错误:构建 '/nix/store/id4vfk3r6fd4zpyb15dq9xfghf342qaa-freeplane-1.6.13.drv' 失败
从终端运行gradle dist 工作正常。我猜测可能是全局安装的 Nix 软件包之一提供了该问题的修复,并且它们在构建过程中不可见。
我搜索了很多,但找不到任何可行的解决方案。例如,删除 ~/.gradle 文件夹没有帮助。
更新
要重现 git clone https://github.com/razvan-panda/nixpkgs 的问题,请检查 freeplane 分支并在存储库的根目录中运行 nix-build -A freeplane。
【问题讨论】:
-
这似乎是 gradle 如何打包和/或修补的问题。最小示例:
NIX_PATH=nixpkgs=$HOME/nixpkgs nix-build --expr 'with import <nixpkgs> {}; stdenv.mkDerivation { src = ./empty-directory; name = "foo"; buildInputs = [gradle]; buildPhase = "gradle --stacktrace"; } ' -
@RobertHensing 我不明白为什么
gradle dist在从终端运行时工作得很好。我应该在 Nixpkgs 存储库上创建一个关于此的问题吗? -
它甚至可以在不如
nix-build沙箱干净的“纯”nix-shell(s/nix-build/nix-shell --pure) 中工作。例如$HOME在nix-shell --pure中可用,但在这种情况下这似乎不是问题,所以我不知道缺少什么。这应该可行,因此报告问题是适当的。