我正在使用 Nix 在资源有限的共享主机上安装我家下的软件包(因此没有二进制软件包)。我正在尝试安装 git-annex。在构建其依赖项之一 haskell-lens 时,单元测试消耗了太多内存,以至于它们被杀死并且安装失败。
有没有办法跳过单元测试来安装软件包?我查看了 Cabal builder,haskell-packages.nix在我看来,您可以通过设置enableCheckPhase为 false来禁用测试。我在 中尝试了以下操作~/.nixpkgs/config.nix,但测试仍在运行:
{
packageOverrides = pkgs: with pkgs; {
# ...other customizations...
haskellPackages = haskellPackages.override {
extension = self : super : {
self.lens = self.disableTest self.lens;
};
};
};
}
Run Code Online (Sandbox Code Playgroud) 我想添加与awscli命令完成相关的功能。
在我的特殊情况下,我需要从 获取脚本/nix/store/hvx7xqvjz7r08nsb9kssh1d9s302v3sp-awscli-1.16.106/share/zsh/site-functions/aws_zsh_completer.sh。
如何获取/nix/store/hvx7xqvjz7r08nsb9kssh1d9s302v3sp-awscli-1.16.106包 ( awscli) 的存储路径 ( )?因为我不认为硬编码这个参考是理想的。
我在 Ubuntu 上使用Nix来获得一些软件包的更现代版本,其中之一是 git。当我运行时nix-env -u,会发生以下情况:
% nix-env -u --dry-run '*'
(dry run; not doing anything)
upgrading `git-1.8.5.4' to `git-1.9.0-full'
Run Code Online (Sandbox Code Playgroud)
这不是我想要的 - 我更喜欢普通版本git-1.9.0而不是-full版本。我知道我可以使用 手动升级到普通版本nix-env -i git-1.9.0,但是有没有办法nix-env -u做我想做的事?
目前我使用:
find /nix/store/* -maxdepth 1 | xargs -L <N> nix-copy-closure --sign --gzip --use-substitutes --to <remote machine>
哪里N有一些合理的数字,不会使xargs.
在两台跑步机上执行此操作是否有更惯用的方法?
编辑:
上述方法的优点:
--use-substitues这将使远程机器首先从二进制缓存下载,然后再发送机器。这在将文件从我的笔记本电脑发送到删除服务器的常见情况下非常有用,与我的笔记本电脑相比,远程服务器的带宽通常是 nix 二进制缓存的 100 倍nix-copy-closure 通过 ssh 复制,以便对传输进行加密。当我使用 nix 安装 GUI 应用程序时,我看到桌面文件在~/.nix-profile目录中结束,例如:
~/.nix-profile/share/applications/firefox.desktop
但是,我的桌面希望文件在其中/user/share/applications,以便能够为它们创建桌面图标。
有什么方法可以告诉 nix 将桌面文件符号链接到,/user/share/applications这样我就不必手动执行了吗?
谢谢
假设我曾经nix-env在 Ubuntu 主机上安装使用 SystemD 的软件包。需要做什么才能让 Ubuntu 的 SystemD 知道来自 Nix 包的 SystemD 模块?
让我们尝试为Apache Kafka包查找 Nix 安装的.service文件,并从 符号链接它们。/lib/systemd/system/
nix-env -i apache-kafka
sudo systemctl start apache-kafka # Failed to start apache-kafka.service: Unit apache-kafka.service not found.
sudo updatedb && locate apache-kafka.service # No dice
locate kafka | grep service # Just a bunch of `.nix` files
Run Code Online (Sandbox Code Playgroud)
在这里,我根据 Nix包定义中的服务配置名称猜测服务名称。我找不到任何描述该配置如何以及在何处成为 SystemD 服务文件的文档。
当这不起作用时,我开始真正挖掘,假设 Nix 一定在某个地方创建了这个服务文件。但是现在,我开始怀疑它是否存在。那么,Nix 包管理器安装的 SystemD 模块是否应该在 NixOS 之外工作,如果是这样,我们如何使它们工作?
我如何获得有关 nix 包的更多详细信息,例如验证它实际上是我认为的那样。
在 Debian 中,我会使用apt-cache show; 但是我如何获得 nix 的类似信息?显示任意包的派生的命令就足够了,因为我可能可以使用该src行来查找托管该项目的网站。
似乎我的主机文件 ( /etc/hosts) 指向/nix/store/gds7bha3bx0a22pnzw93pgf0666anpyr-etc-hosts并且是只读的。
我打算怎么修改这个文件?
我在 XUbuntu 20.04 上安装了 Nix 包管理器。它添加了一项nix-daemon服务。我想nix-daemon在启动时启动该服务。如果我键入以下命令,该服务将运行并正常工作,直到我停止机器,但重新启动后该服务不会运行,我需要再次运行这些命令。
systemd 似乎禁用了该服务或忘记了它已启用。我如何告诉 systemd 启用该服务并使其保持启用状态?
\n$ sudo systemctl status nix-daemon\nUnit nix-daemon.service could not be found.\nRun Code Online (Sandbox Code Playgroud)\n$ sudo systemctl enable nix-daemon\nRun Code Online (Sandbox Code Playgroud)\n$ sudo systemctl status nix-daemon\n\xe2\x97\x8f nix-daemon.service - Nix Daemon\n Loaded: loaded (/nix/store/4vz8sh9ngx34ivi0bw5hlycxdhvy5hvz-nix-2.3.7/lib/systemd/system/nix-daemon.service; enabled; vendor preset: enabled)\n Drop-In: /etc/systemd/system/nix-daemon.service.d\n \xe2\x94\x94\xe2\x94\x80override.conf\n Active: inactive (dead)\nTriggeredBy: \xe2\x97\x8f nix-daemon.socket\nRun Code Online (Sandbox Code Playgroud)\n$ sudo service nix-daemon start\n\xe2\x97\x8f nix-daemon.service - Nix Daemon\n Loaded: loaded (/nix/store/4vz8sh9ngx34ivi0bw5hlycxdhvy5hvz-nix-2.3.7/lib/systemd/system/nix-daemon.service; enabled; vendor preset: enabled)\n Drop-In: /etc/systemd/system/nix-daemon.service.d\n \xe2\x94\x94\xe2\x94\x80override.conf\n Active: active (running) …Run Code Online (Sandbox Code Playgroud) 每当我为 nix 包管理器(例如 nix-channel --update)运行命令时,我都会收到以下警告:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = "",
LC_ALL = "en_US.UTF-8",
LC_CTYPE = "en_US.UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
Run Code Online (Sandbox Code Playgroud)
我怀疑它与 nix 有某种关系,因为其他 perl 脚本没有显示这种行为(我尝试perl -e exit过使用 WWW::Curl 的东西)。
更改区域设置确实反映在警告的输出中,但警告仍然显示在我能想到的每个配置中。
操作系统是 openSUSE。
我能做什么?