标签: nix

何时以及如何使用default.nix,shell.nix和release.nix?

学习如何使用Nix包管理器时遇到的第一类Nix表达式之一是default.nix; 上精彩NixOS IRC频道我学到的存在shell.nix,并release.nix为好.

我得到的印象是-大概- default.nix是用来用nix-build的只是建立包,shell.nix与用于nix-shell制造与封装的交互环境和release.nix使用与nixops部署包.

由于这可能是不完整和部分不正确的,并且由于这似乎没有明确记录,我想要清楚准确地解释这些"标准文件"; 特别是,对于每种文件类型(以及我缺少的任何其他标准文件),我想知道:

  1. 这种文件的典型用例是什么?他们应该不能被用来做什么?
  2. 这种文件类型的结构通常如何?它的最低要求是什么?
  3. 你能否在其使用上下文中展示这样一个文件的范例,即使用说明并包含在shell中使用它或其他Nix表达式所需的代码行?

作为一个额外的奖励问题,我想知道在将软件包安装到NixOS模块时应该使用哪些标准文件(如果有的话)?怎么办?

nixos nix nixops

36
推荐指数
2
解决办法
5742
查看次数

如何让cabal和nix一起工作

据我所知,Nixcabal沙箱的替代品.我终于设法安装了Nix,但我仍然不明白它如何取代沙盒.

我知道你不需要使用Nix和封装版GHC的cabal; 但是如果你想发布一个软件包,你需要在某个时候用cabal打包它.因此,您需要能够在NIX中编写和测试您的cabal配置.你是怎样做的?

理想情况下,我想要一个类似于cabal沙箱但在NIX中"包含"的环境,这可能吗?事实上,我真正想要的是等效的嵌套沙箱 - 因为我通常使用由多个包组成的项目.

更新我当前的工作流程

目前我在2或3个独立项目(P1,P2,P3)上工作,每个项目由2或3个cabal模块/包组成,假设P1:L11,L12(库)和E11(可执行文件).E11取决于L12,它取决于L11.我主要是从库中拆分可执行文件,因为它们是私有的,并保存在私有git仓库中.

理论上,每个项目都可以拥有自己的沙箱(在其子模块之间共享).我尝试过(有一个L11 L12和E11的普通沙箱),但它很快就会烦人,因为如果修改L11,你就无法重建它,因为E11依赖它,所以我必须首先卸载E11重新编译L11.情况可能并非如此,但我遇到了类似的问题.如果我偶尔修改L11,这样会好的,但在实践中,我更改了E11.

由于共享沙箱不起作用,所以我回到了每个包解决方案的一个沙箱.它工作但不太理想.主要问题是如果我修改L11,我需要编译两次(一次在L11中,然后再在E11中).此外,每次我开始一个新的沙箱时,每个人都知道,我需要等待一段时间才能让所有包下载并重新编译.

因此,通过使用Nix,我正在努力为每个项目设置单独的cabal"环境",这解决了上述所有问题.

希望这更清楚.

haskell cabal nix

33
推荐指数
1
解决办法
4120
查看次数

如何在NixOS上使用新的haskell-ng基础架构?

如何使用新的haskell-ng基础架构在NixOS上设置简单的Haskell开发环境?

haskell ghc nixos nix

24
推荐指数
1
解决办法
2613
查看次数

Nix中的构建与运行时依赖关系

我刚刚开始接触Nix,如果我在文档中错过了我的问题的答案,那么道歉.

我想使用Nix来设置一个安全的生产机器,其中包含最少的库和可执行文件.我不希望出现任何编译器或其他构建工具,因为这些可能存在安全风险.

当我安装一些软件包时,它们似乎只依赖于最小的运行时依赖项集.例如,如果我安装,apache-tomcat-8.0.23那么我得到一个Java运行时(JRE)和包含Tomcat的预构建JAR文件.

另一方面,一些软件包似乎包含一个完整的构建工具链作为依赖项.以另一个基于Java的示例为例,当我安装spark-1.4.0Nix 时,请下载包含编译器的Java开发工具包(JDK),它还会提取Maven构建工具等.

所以,我的问题如下:

  1. Nix包是否在构建和运行时依赖关系之间做出了区分?
  2. 为什么有些软件包似乎依赖于构建工具而其他软件包只需要运行时?这完全取决于包作者如何包装应用程序?
  3. 如果一个软件包包含我不想要的构建依赖项,除了为同一个应用程序设计我自己的替代包装之外,我作为运营商可以做些什么吗?

非常感谢.

nixos nix nixpkgs

18
推荐指数
1
解决办法
1984
查看次数

nixos安装问题,“找不到命令:nix”

我删除了 /nix 并开始全新安装 nix,但是在安装 nix install nix (MACBook Pro M1 arm64 BigSur) 后 sh <(curl -L https://nixos.org/nix/install) 运行,$ nix但我得到了输出zsh: command not found: nix,同样,nix-shell/nix 卷也未创建,我也尝试了指令在https://docs.plutus-community.com/docs/setup/MacOS.html仍然是同样的问题

nixos nix

17
推荐指数
1
解决办法
9921
查看次数

在nixpkgs.fetchgit中sha256是什么意思?价值来自哪里?

我想从github添加一个包,就像下面的例子一样,但是我不知道在哪里可以获得任何给定github源所需的sha256哈希(如下所示).

有人可以解释一下sha256来自哪里,如何获得给定github代码库的sha256值?

       ghcjs-jquery = self.callPackage ({ mkDerivation, data-default, ghcjs-base, ghcjs-dom, text }:
          mkDerivation {
            pname = "ghcjs-jquery";
            version = "0.1.0.0";
            src = nixpkgs.fetchgit {
              url = git://github.com/ghcjs/ghcjs-jquery;
              rev = "c5eeeafcf81c0d3237b8b9fcb98c4b3633a1297f";
              sha256 = "3b2de54224963ee17857a9737b65d49edc423e06ad7e9c9b85d9f69ca923676a";
            };
            buildDepends = [
              data-default ghcjs-base ghcjs-dom text
            ];
            jailbreak = true;
            license = null;
          }
        ) {};
Run Code Online (Sandbox Code Playgroud)

https://github.com/ryantrinkle/try-reflex/blob/ghcjs-improved-base/default.nix#L49

ps,这是我在IRC上得到的答案:

joco42> what does this sha256 attribute mean in this nix expression ? https://github.com/ryantrinkle/try-reflex/blob/ghcjs-improved-base/default.nix#L49
8:24 PM <joco42> where does it come from ?
8:24 PM <pikajude> that's the …
Run Code Online (Sandbox Code Playgroud)

nix

16
推荐指数
1
解决办法
2602
查看次数

错误:在 Nix 搜索路径中找不到文件“nixpkgs”(使用 $NIX_PATH 或 -I 添加它)

我曾经sh <(curl -L https://nixos.org/nix/install) --daemon安装过 Nix。\n安装完成后运行nix-shell -p nix-info --run "nix-info -m"以验证安装。\n它返回以下错误

\n

输出

\n
warning: Nix search path entry \'/nix/var/nix/profiles/per-user/kana/channels\' does not exist, ignoring\nerror: file \'nixpkgs\' was not found in the Nix search path (add it using $NIX_PATH or -I)\n\n       at \xc2\xabstring\xc2\xbb:1:25:\n\n            1| {...}@args: with import <nixpkgs> args; (pkgs.runCommandCC or pkgs.runCommand) "shell" { buildInputs = [ (nix-info) ]; } ""\n             |                         ^\n(use \'--show-trace\' to show detailed location information)\n
Run Code Online (Sandbox Code Playgroud)\n

installation ubuntu nixos nix nixpkgs

16
推荐指数
2
解决办法
8145
查看次数

什么是nix-instantiate有用?什么是商店推导?

手册中写道:

命令nix-instantiate从(高级)Nix表达式生成存储派生.

但什么是商店派生?

手册中说明了以下关于商店派生的内容:

构建操作的描述.派生的结果是商店对象.通常使用派生原语在Nix表达式中指定派生.这些被转换为低级存储派生(由nix-env和nix-build隐式,或由nix-instantiate显式)

这对于nix-newbee来说有点难以理解,我发现通过谷歌搜索没有更多关于nix-instantiate和store派生的启发.我也问#nixos,我没有回答.

有人可以在一个简单的例子中解释一下商店派生是什么,它用于什么?

为什么要使用nix-instantiate生成商店派生?你能给出一个超级简单易懂的例子吗?

nixos nix

12
推荐指数
2
解决办法
1759
查看次数

nix路径类型何时进入nix存储区,何时不进入?

我已经在过去注意到nix,一个./myfile.txt路径类型似乎

  • 有时评价为/home/myuser/mydir/myfile.txt,和
  • 有时候/nix/store/55j24v9qwdarikv7kd3lc0pvxdr9r2y8-myfile.txt.

我想知道究竟何时发生这种情况.

这对于包含任何形式的秘密信息的文件尤为重要,因为/nix/store系统中的所有用户都可以读取所有文件.

(使用时nixops,为此目的有一个特殊的"键"功能,请参阅本手册中的管理键部分,但我认为这种路径到存储路径复制nix本身和如何发生的时间和方式仍然很重要.)

nixos nix

12
推荐指数
1
解决办法
892
查看次数

如何使用Nix来设置开发环境?

假设我需要PostgreSQL 9.6.3和Ruby 2.3.1以及其他各种工具.我找不到解释我需要做什么的教程.

从Nix手册中,我似乎需要编写一个Nix表达式来安装所需的依赖项,但我无法实现这一目标:

{ stdenv, fetchurl, perl }:

stdenv.mkDerivation {
  name = "hello-2.1.1";
  builder = ./builder.sh;
  src = fetchurl {
    url = ftp://ftp.nluug.nl/pub/gnu/hello/hello-2.1.1.tar.gz;
    md5 = "70c9ccf9fac07f762c24f2df2290784d";
  };
  inherit perl;
}
Run Code Online (Sandbox Code Playgroud)

到将安装正确的PostgreSQL和Ruby版本的表达式.我绝对不清楚在哪里放置安装PostgreSQL和Ruby的文件,或者如何在给定目录中运行单个文件.

有人可以提供指向这些教程的指针,还是指向正确的方向?

nix

12
推荐指数
1
解决办法
1981
查看次数

标签 统计

nix ×10

nixos ×7

haskell ×2

nixpkgs ×2

cabal ×1

ghc ×1

installation ×1

nixops ×1

ubuntu ×1