gpt4 book ai didi

nixos - 为什么 `nix-env -q` 找不到我安装的软件包? (NixOS channel 、配置文件和软件包)

转载 作者:行者123 更新时间:2023-12-04 17:43:34 25 4
gpt4 key购买 nike

我最近安装了 NixOS,最终得到了 3 个配置文件:

  • bruno(用户个人资料),
  • 默认(由 root 使用)和
  • 系统(由 NixOS 使用)。

  • 我发现为系统配置文件使用稳定 channel 和为我使用不稳定 channel (布鲁诺配置文件)很方便:
    ~> nix-channel --list
    unstable https://nixos.org/channels/nixos-unstable
    ~> sudo nix-channel --list
    nixos https://nixos.org/channels/nixos-17.09
    然后我通过 /etc/nixos/configuration.nix 声明性地安装了一些软件包。 :
    environment.systemPackages = with pkgs; [
    firefox
    chromium
    htop
    # ...
    ];
    还有一些命令式: nix-env --install firefox .
    现在列出我安装的软件包,我希望还能看到系统配置文件提供的软件包(因为它们在我的用户配置文件中可用):
    ~> htop --version
    htop 2.0.2 - (C) 2004-2016 Hisham Muhammad
    Released under the GNU GPL.

    ~> nix-env -q | grep htop
    ~> nix-env -q | grep firefox
    firefox-57.0
    仅列出 Firefox。让我们尝试使用根配置文件:
    ~> sudo nix-env -q | grep htop
    同样的事情,它实际上是完全空的。
    也许使用系统配置文件:
    ~> sudo nix-env -p /nix/var/nix/profiles/system -q
    依然没有。
    来自传统的包管理器(Debian、Red Hat),我发现 Nix 被定义为“纯粹的功能包管理器”似乎并没有提供一个通用的包查询工具 - nix-env在整个手册中都提到了,感觉就像 Debian apt的另一个自我。
    是否有这样的工具,或者这不是问题,也就是说,人们通常没有跨配置文件/环境存在的所有包的列表?

    最佳答案

    nix-env -q将只报告安装在命令式“环境”中的包,例如由 nix-env -i 创建的包.
    nix-env是一个用于命令式包管理的工具,它是在其他声明性和不可变 Nix 系统上的一个薄层。 profiles机制为可变性和 nix-env 提供了一种手段创建 manifest.nix在配置文件中记录环境中的包集。

    NixOS 系统仅使用 profiles但不提供 manifest.nix文件。这是有道理的,因为 NixOS 系统每次都是从头开始重建,这使得它具有很好的声明性。

    结果 nix-env无法查询 NixOS 配置文件。

    所以,nix-env -q查询您强制安装的用户包。 sudo nix-env -q显示那些由 root 强制安装的,不包括你的 NixOS 包,因为它们是你系统的一部分,声明性的。指点 nix-env -q -p在你的 NixOS 系统上给出一个空列表,因为它不是由 nix-env 创建的环境.

    您的用户可以使用系统命令的原因不是因为系统是用户配置文件中 (Nix) 环境的一部分,而是因为您的 (UNIX) 环境变量指向这两个配置文件。

    $ which firefox
    /home/user/.nix-profile/bin/firefox
    $ which cp
    /run/current-system/sw/bin/cp
    $ echo $PATH
    [...]

    要弄清楚系统上安装了什么,您可以运行以下命令:
  • nix-env -q找出在命令式用户环境中安装了什么。
  • nixos-option environment.systemPackages查询在构建和激活配置时将出现在/run/current-system/sw 中的包集。引用其文档,“这些包自动可供所有用户使用。”
  • nix-store -q --requisites /run/current-system ~/.nix-profile当前系统和您的用户配置文件的依赖项的组合关闭
  • nix-store -q --references /run/current-system当前系统的直接依赖

  • --query nix-store --help的部分更多选择。

    关于nixos - 为什么 `nix-env -q` 找不到我安装的软件包? (NixOS channel 、配置文件和软件包),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47953868/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com