NixOS:安装非 nix 软件包?

Pet*_*sen 5 linux nixos

目前我开始使用 NixOS,除了我想安装一些不在存储库中的软件包外,它运行良好。

我遇到的第一个包是 Cryptomator ( https://cryptomator.org )

我试图做的是遵循本教程:http : //anderspapitto.com/posts/2015-02-28-deb-installation-nixos.html

但我无法让它工作......这是我尝试过的:

  • 首先,我创建了 3 个文件(如教程中所述):
    • builder.sh(教程中的原样)
    • fhs-env.nix(也按原样)
    • full-cryptomator.nix(来源如下)
    • 哑cryptomator.nix(下面列出的来源)

full-cryptomator.nix

let nixpkgs = import <nixpkgs> {};
    stdenv = nixpkgs.stdenv;
in rec {
  dumb-cryptomator = stdenv.mkDerivation {
    name = "dumb-cryptomator";
    builder = ./builder.sh;
    dpkg = nixpkgs.dpkg;
    src = nixpkgs.fetchurl {
      url = "https://bintray.com/cryptomator/cryptomator-deb/download_file?file_path=cryptomator-1.2.3-amd64.deb";
      sha256 = "f611dfd77f68ddd4b7322b1668829add987c5f8e0fcd639211b46969f1eb8ef3";
    };
  };
  full-cryptomator = nixpkgs.buildFHSUserEnv {
    name = "full-cryptomator";
    targetPkgs = pkgs: [ dumb-cryptomator ];
    multiPkgs = pkgs: [ pkgs.dpkg ];
    runScript = "Cryptomator";
  };
}
Run Code Online (Sandbox Code Playgroud)

哑cryptomator.nix

let nixpkgs = import <nixpkgs> {};
    stdenv = nixpkgs.stdenv;
in rec {
  dumb-cryptomator = stdenv.mkDerivation {
    name = "dumb-cryptomator";
    builder = ./builder.sh;
    dpkg = nixpkgs.dpkg;
    src = nixpkgs.fetchurl {
      url = "https://bintray.com/cryptomator/cryptomator-deb/download_file?file_path=cryptomator-1.2.3-amd64.deb";
      sha256 = "f611dfd77f68ddd4b7322b1668829add987c5f8e0fcd639211b46969f1eb8ef3";
    };
  };
}
Run Code Online (Sandbox Code Playgroud)

然后我运行:

  • nix-build -A fhsEnv fhs-env.nix
  • nix-build -A dumb-cryptomator dumb-cryptomator.nix
  • nix-build -A full-cryptomator full-cryptomator.nix

最后一次构建完成后,我的目录中没有完整的 cryptomator 安装(至少 /opt/Cryptomator 应该在那里):

[peter@peter-laptop:~/Downloads/cryptomator]$ ls /nix/store/6prdbjgidgqaqfnvmkrhnj8xp28z8dxw-full-cryptomator
bin
Run Code Online (Sandbox Code Playgroud)

有没有人在使第三方软件包工作方面有更多经验?谢谢!

dan*_*bst 5

至少你应该改变\n \n runScript = "Cryptomator";\n\n到\n\n runScript = "${dumb-cryptomator}/Cryptomator/Cryptomator";\n

\n\n
\n\n

调试此类问题很容易。当你运行时nix-build -A full-cryptomator full-cryptomator.nix,一个符号链接result,会创建

\n\n

\n $ ./result/bin/full-cryptomator\n /nix/store/7nc1j85m67kjd1y1fnk6xg5b7w7a1jjd-full-cryptomator-init: line 11: exec: Cryptomator: not found\n

\n\n

哎呀!为什么?让我们看看提到的文件:

\n\n
$ cat /nix/store/7nc1j85m67kjd1y1fnk6xg5b7w7a1jjd-full-cryptomator-init\n#! /nix/store/wsz11sx18n85if6gp50m870rypgavwpd-bash-4.4-p12/bin/bash\nfor i in /nix/store/ss4j5rr2ilh878m1g5c76njcmvmrszja-full-cryptomator-fhs/* /host/*; do\n  path="/${i##*/}"\n  [ -e "$path" ] || /nix/store/sxzm5kva1gb0hxm60xvr45m3c5l84xlz-coreutils-8.27/bin/ln -s "$i" "$path"\ndone\n\n[ -d "$1" ] && [ -r "$1" ] && cd "$1"\nshift\n\nsource /etc/profile\nexec Cryptomator "$@"\n
Run Code Online (Sandbox Code Playgroud)\n\n

看起来它无法Cryptomator在当前路径中归档可执行文件。当我们检查实际情况时dumb-cryptomator,我们看到

\n\n
$ tree /nix/store/m31pyd1hgpa9v8gnxrjijd1v3n8vxggj-dumb-cryptomator | grep -i crypto\n/nix/store/m31pyd1hgpa9v8gnxrjijd1v3n8vxggj-dumb-cryptomator\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Cryptomator\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cryptolib-1.0.7.jar\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Cryptomator-1.2.3.jar\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Cryptomator.cfg\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 filesystem-crypto-1.2.3.jar\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Cryptomator\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Cryptomator.desktop\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cryptomator.org-Cryptomator-MimeInfo.xml\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Cryptomator.png\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,它不属于标准bin文件夹。由于我们不想过多地弄乱软件包,因此我们通过使用提供完整路径${dumb-cryptomator}字符串插值来提供完整路径。

\n\n

(这是 Nix 中最常用的功能之一,${dumb-cryptomator}已扩展为/nix/store/m31pyd1hgpa9v8gnxrjijd1v3n8vxggj-dumb-cryptomator在构建过程中

\n