学习如何使用Nix包管理器时遇到的第一类Nix表达式之一是default.nix; 上精彩NixOS IRC频道我学到的存在shell.nix,并release.nix为好.
我得到的印象是-大概- default.nix是用来用nix-build的只是建立包,shell.nix与用于nix-shell制造与封装的交互环境和release.nix使用与nixops部署包.
由于这可能是不完整和部分不正确的,并且由于这似乎没有明确记录,我想要清楚准确地解释这些"标准文件"; 特别是,对于每种文件类型(以及我缺少的任何其他标准文件),我想知道:
作为一个额外的奖励问题,我想知道在将软件包安装到NixOS模块时应该使用哪些标准文件(如果有的话)?怎么办?
如何使用新的haskell-ng基础架构在NixOS上设置简单的Haskell开发环境?
nixos.org上的一个顶级项目是Disnix,"Nix的分布式部署扩展".另一个项目是NixOps,"用于在网络或云中部署NixOS机器的工具".
该功能设置声音非常相似.他们是竞争对手,还是另一个的继承者,还是他们解决了不同的问题?如果他们似乎是"竞争对手",那么差异是什么,我应该使用哪些?
编辑:如果有任何迹象,NixOps似乎正在积极开发中,但我无法看到Disnix最后一次工作.
我刚刚开始接触Nix,如果我在文档中错过了我的问题的答案,那么道歉.
我想使用Nix来设置一个安全的生产机器,其中包含最少的库和可执行文件.我不希望出现任何编译器或其他构建工具,因为这些可能存在安全风险.
当我安装一些软件包时,它们似乎只依赖于最小的运行时依赖项集.例如,如果我安装,apache-tomcat-8.0.23那么我得到一个Java运行时(JRE)和包含Tomcat的预构建JAR文件.
另一方面,一些软件包似乎包含一个完整的构建工具链作为依赖项.以另一个基于Java的示例为例,当我安装spark-1.4.0Nix 时,请下载包含编译器的Java开发工具包(JDK),它还会提取Maven构建工具等.
所以,我的问题如下:
非常感谢.
我删除了 /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仍然是同样的问题
我曾经sh <(curl -L https://nixos.org/nix/install) --daemon安装过 Nix。\n安装完成后运行nix-shell -p nix-info --run "nix-info -m"以验证安装。\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)\nRun Code Online (Sandbox Code Playgroud)\n 如何确保我在系统nixos安装上安装的所有软件包(即/etc/nixos/configuration.nix我安装的软件包中使用的软件包sudo nixos-rebuild switch)使用的是nixos/nixpkgs的最新(不稳定)版本?
我试图在Haskell开发环境中使用hoogle,就像O'Charles的wiki所描述的那样:
我已经修改shell.nix如下使用hoogleLocal,但它似乎没有为我安装hoogle二进制文件.
let
pkgs = import <nixpkgs> {};
# I'm attempting to use hoogle here, but it is not working.
haskellPackages =
let callPackage = pkgs.lib.callPackageWith haskellPackages;
in pkgs.recurseIntoAttrs (pkgs.haskellPackages.override {
extension = self: super: {
thiscurrentpackage = self.callPackage ./. {};
hoogleLocal = pkgs.haskellPackages.hoogleLocal.override {
packages = self.thiscurrentpackage;
};
};
});
in pkgs.myEnvFun {
name = haskellPackages.thiscurrentpackage.name;
buildInputs = [
(haskellPackages.ghcWithPackages (hs: ([
hs.cabalInstall
hs.ghcMod
hs.yesodBin
# This doesn't appear to install the hoogle …Run Code Online (Sandbox Code Playgroud) 我已经在过去注意到nix,一个./myfile.txt路径类型似乎
/home/myuser/mydir/myfile.txt,和/nix/store/55j24v9qwdarikv7kd3lc0pvxdr9r2y8-myfile.txt.我想知道究竟何时发生这种情况.
这对于包含任何形式的秘密信息的文件尤为重要,因为/nix/store系统中的所有用户都可以读取所有文件.
(使用时nixops,为此目的有一个特殊的"键"功能,请参阅本手册中的管理键部分,但我认为这种路径到存储路径复制nix本身和如何发生的时间和方式仍然很重要.)