0

我在 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上,但我认为在这里可能更容易找到。

拉取请求草案可以在这里找到

4

0 回答 0