我尝试使用Nix手册开始使用简单的Hello World derivation。 但是我不清楚如何构建它。
nix-build
吗?
没有必须修改全局(例如pkgs/top-level/all-packages.nix
)?pkgs/top-level/all-packages.nix
在哪里?答案 0 :(得分:3)
一种选择是克隆nixpkgs repository,然后构建该存储库中提供的hello包配方:
git clone https://github.com/NixOS/nixpkgs
cd nixpkgs
nix-build -A hello
这样做,您不必修改all-packages.nix
,因为它已经有hello
的条目。如果您确实要修改all-packages.nix
,可以在克隆的nixpkgs存储库中找到它。只需获取您克隆的存储库的路径(例如~/nixpkgs
)并添加pkgs/top-level/all-packages.nix
即可获得all-packages.nix
的路径。您可以在此处查看该文件的副本:
https://github.com/NixOS/nixpkgs/blob/master/pkgs/top-level/all-packages.nix
当您开始构建不属于nixpkgs的自己的软件时,您可能会选择在自己的存储库中编写自己的default.nix
文件并在其中放置一行来导入nixpkgs,使用{{ 1}}环境变量:
NIX_PATH
答案 1 :(得分:1)
请注意,我正在运行NixOs
,不确定我的答案是否适用于其他(非Linux)系统。
我是否可以从某处下载源文件,所以我不必逐行复制它们?
您可以浏览nixpkgs,所有源文件都在那里。
有没有办法
nix-build
无需修改全局内容(例如pkgs / top-level / all-packages.nix)?
David Grayson已经提供了很好的answer。
我很乐意添加一些信息。
nix-build
将在当前目录中查找default.nix
,并且构建结果将在当前工作目录中以符号链接命名为result
。
测试nix表达式是否可以构建的另一种方法是nix-shell
,它还在当前目录中查找default.nix
或shell.nix
。如果构建成功,您将获得shell提示,并提供您的软件包。
nix-build
和nix-shell
都有-I
参数,您可以指向任何nix
存储库,包括远程存储库。
例如,如果我使用nix-shell -I nixpkgs=https://github.com/NixOS/nixpkgs/archive/master.tar.gz -p hello
,nix
将下载binary cache
(如果存在)或使用当前hello
分支表达式构建master
并给我一个shell hello
可以使用。
$ nix-shell -I nixpkgs=https://github.com/NixOS/nixpkgs/archive/master.tar.gz -p hello
downloading ‘https://github.com/NixOS/nixpkgs/archive/master.tar.gz’... [12850/0 KiB, 1404.5 KiB/s]
unpacking ‘https://github.com/NixOS/nixpkgs/archive/master.tar.gz’...
these paths will be fetched (0.04 MiB download, 0.19 MiB unpacked):
/nix/store/s3vlmp0k8b07h0r81bn7lh24q2mqcai8-hello-2.10
fetching path ‘/nix/store/s3vlmp0k8b07h0r81bn7lh24q2mqcai8-hello-2.10’...
*** Downloading ‘https://cache.nixos.org/nar/1ax9cr6qqqqrb4pdm1mpqn7whm6alwp56dvsh5hpgs5g8rrpnjxd.nar.xz’ (signed by ‘cache.nixos.org-1’) to ‘/nix/store/s3vlmp0k8b07h0r81bn7lh24q2mqcai8-hello-2.10’...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 40364 100 40364 0 0 40364 0 0:00:01 0:00:01 --:--:-- 37099
[nix-shell:~]$ which hello
/nix/store/s3vlmp0k8b07h0r81bn7lh24q2mqcai8-hello-2.10/bin/hello
pkgs / top-level / all-packages.nix在哪里?
有NIX_PATH
环境变量。 nixpkgs
部分将指向您当前的存储库
$ echo $NIX_PATH
nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs:nixos-config=/etc/nixos/configuration.nix:/nix/var/nix/profiles/per-user/root/channels
我的all-packages.nix
位于/nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/pkgs/top-level/all-packages.nix