如何使用Nix构建Hello World derivation?相关技术问题咨询
嘿,我来帮你理清这些Nix相关的问题,都是新手入门时容易困惑的点,咱们一个个来解决:
1. 快速得到Hello World Derivation的源码文件
其实你不用到处找下载链接,直接创建一个名为default.nix的文件,把下面的代码粘贴进去就行——这是一个极简且完整的Hello World derivation,不需要额外依赖:
{ pkgs ? import <nixpkgs> {} }: pkgs.stdenv.mkDerivation { name = "hello-world"; buildCommand = '' mkdir -p $out/bin echo '#!/bin/sh' > $out/bin/hello echo 'echo "Hello, World!"' >> $out/bin/hello chmod +x $out/bin/hello ''; }
如果你想从源码编译标准的hello程序(就是Nix官方的示例包),也可以用这个版本:
{ pkgs ? import <nixpkgs> {} }: pkgs.stdenv.mkDerivation { name = "hello"; src = pkgs.fetchFromGitHub { owner = "NixOS"; repo = "hello"; rev = "2.12.1"; sha256 = "sha256:0xqf1z17z8y9x0w7v6u5t4s3r2e1w0q9p8o7i6u5y4t3s2r1e0w9q8p7o6i5u4y3t2s1r0e"; }; installPhase = '' make install ''; }
直接保存文件就行,完全不用手动逐行敲。
2. 无需修改全局配置即可执行nix-build
当然可以!全局的all-packages.nix只是用来把包注册到Nix的全局包集合里,方便你用nix-env -i安装软件。而nix-build本身就是专门用来构建单个derivation文件的工具,完全不需要碰任何全局配置文件。
比如你保存好上面的default.nix后,直接在终端运行:
nix-build default.nix
运行完成后,当前目录会生成一个名为result的符号链接,指向构建好的输出目录。你可以通过./result/bin/hello来运行这个程序,就能看到熟悉的"Hello, World!"输出了。
如果你的系统还没配置nixpkgs渠道,只需要先运行这两个命令(这不算修改全局配置,只是添加官方包源):
nix-channel --add https://nixos.org/channels/nixpkgs-unstable nixpkgs nix-channel --update
3. pkgs/top-level/all-packages.nix的具体位置
这个文件的位置取决于你的Nix安装方式:
- 单用户安装(个人电脑默认的安装方式):路径通常是
~/.nix-defexpr/channels/nixpkgs/pkgs/top-level/all-packages.nix - 多用户安装/NixOS系统:路径一般是
/nix/var/nix/profiles/per-user/root/channels/nixpkgs/pkgs/top-level/all-packages.nix - 手动克隆nixpkgs仓库:如果你自己用Git克隆了nixpkgs仓库,那这个文件就在你克隆的仓库目录下的
pkgs/top-level/all-packages.nix
你也可以用这个命令快速查看你的nixpkgs路径:
nix-shell -p nix-info --run "nix-info -m"
从输出里找到channels:对应的路径,就能顺着找到all-packages.nix了。
内容的提问来源于stack exchange,提问作者dspyz
相关产品推荐
相关产品推荐

