我在 NixOS 上,试图将以下推导添加到nixpkgs
:
{ stdenv, lib, openjdk,typedbHome ? "~/.typedb_home", fetchzip}:
let
typedbVersion = "2.1.1";
typedbDirLinux = "typedb-all-linux-${typedbVersion}";
typedbDirMac = "typedb-all-mac-${typedbVersion}";
typedbDirWindows = "typedb-all-windows-${typedbVersion}";
typedbDir = if stdenv.hostPlatform.isWindows then typedbDirWindows
else if stdenv.isDarwin then typedbDirMac
else typedbDirLinux;
linuxSrc = builtins.fetchTarball {
url = "https://github.com/vaticle/typedb/releases/download/2.1.1/typedb-all-linux-2.1.1.tar.gz";
sha256 = "15nwm2dr68p67c2xcqigs66gd679j1zr72gqv7qxgvflwyvyz8fb";
};
windowsSrc = fetchzip {
url = "https://github.com/vaticle/typedb/releases/download/2.1.1/typedb-all-windows-2.1.1.zip";
sha256 = "0vd66gfshkg697z07nhy957mwqzlli4r4pmn67hx58n9mkg024kq";
};
macSrc = fetchzip {
url = "https://github.com/vaticle/typedb/releases/download/2.1.1/typedb-all-mac-2.1.1.zip";
sha256 = "16hlfy6kh2rnvcralz206q13mghb0rv8wazpg6q3h324p5rdys54";
};
srcFolder = if stdenv.hostPlatform.isWindows then windowsSrc
else if stdenv.isDarwin then macSrc
else linuxSrc ;
javaPatch = ''
20c20
< JAVA_BIN=java
---
> JAVA_BIN=${openjdk}/bin/java
'';
in
stdenv.mkDerivation rec {
pname = "typedb";
version = typedbVersion;
src = srcFolder;
phases = [ "installPhase" ];
buildDepends = [ openjdk ];
installPhase = ''
echo "here" # added for debugging
ls -lah # "
echo "--" # "
#patch before install
echo "${javaPatch}" > typedb_java.patch
patch ./${typedbDir}/typedb typedb_java.patch
mkdir $out
cp -r ./${typedbDir} $out
# add a wrapper script to $out that will move typedb to $typedb
# this is necessary because typedb needs a writable environment
echo "
# on the first start copy everything to typedbHome
if [ ! -f ${typedbHome}/typedb ]; then
mkdir -p ${typedbHome};
cp -r $out/${typedbDir}/* ${typedbHome};
# correct permissions so that typedb and the user can write there
chmod -R u+rw ${typedbHome}
chmod u+x ${typedbHome}/typedb
fi;
${typedbHome}/typedb \$@;
" > $out/typedb
chmod +x $out/typedb
'';
doCheck = true;
meta = with lib; {
description = "TypeDB is a distributed knowledge graph: a logical database to organise large and complex networks of data as one body of knowledge.";
longDescription = ''
TypeDB is a distributed knowledge graph: a logical database to organise large and complex networks of data as one body of knowledge.
TypeDB provides the knowledge engineering tools for developers to easily leverage the power of Knowledge Representation and Automated
Reasoning when building complex systems. Ultimately, TypeDB serves as the knowledge-base foundation for intelligent systems.
'';
homepage = "https://www.grakn.ai/";
license = licenses.gpl3Plus;
platforms = platforms.all;
maintainers = [ maintainers.haskie ];
};
}
我成功地在沙盒模式下构建并安装了它,同时对其进行了几次测试。然后如贡献指南中所述,我检查了所有依赖于更改的包仍然可以使用nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
(即使它是一个新包;我刚刚浏览了贡献指南列表)。这也很好。
但是,现在,当我尝试在沙盒模式下重建它时,构建失败并显示以下消息:
build --option build-use-sandbox true -A typedb
these derivations will be built:
/nix/store/0dr5r50fg66dhaa2mh2gh1dbzg7lbx8j-typedb-2.1.1.drv
building '/nix/store/0dr5r50fg66dhaa2mh2gh1dbzg7lbx8j-typedb-2.1.1.drv'...
installing
here
total 16K
drwx------ 2 nixbld nixbld 4.0K May 30 11:13 .
drwxr-x--- 9 nobody nixbld 4.0K May 30 11:13 ..
-rw-r--r-- 1 nixbld nixbld 5.9K May 30 11:13 env-vars
--
patching file ./typedb-all-linux-2.1.1/typedb
Hunk #1 FAILED at 20.
patch: **** Can't reopen file ./typedb-all-linux-2.1.1/typedb : No such file or directory
builder for '/nix/store/0dr5r50fg66dhaa2mh2gh1dbzg7lbx8j-typedb-2.1.1.drv' failed with exit code 2
error: build of '/nix/store/0dr5r50fg66dhaa2mh2gh1dbzg7lbx8j-typedb-2.1.1.drv' failed
似乎我需要的 zip 文件src
根本没有下载;这种行为的原因是什么,我该如何解决?
该构建之前工作过,所以我认为它可能与奇怪的缓存行为或类似的东西有关(但是使用沙盒模式应该正常规避)?
完整的回购可以在这里找到。我添加的包在pkgs/server/typedb
我试过了
- 使用和不使用沙盒模式进行构建,
nix-prefetch-url
- 在构建之前使用适当的 tarball,- 将 repo 重新克隆到不同的位置并使用沙盒模式从头开始构建它
- 确定是否有非垃圾收集的损坏的预加载 tarball(但是我没有找到任何(可能我寻找它们的方式不太正确))
这个问题也发布在reddit上,但我认为在这里可能更容易找到。
拉取请求草案可以在这里找到