NixOS 的网络问题
NixOS 的网络问题
国内用户在使用 NixOS 时会存在一些网络问题,一是 NixOS 高度依赖 GitHub 作为 channel/flake 数据源——在国内访问 GitHub 相当的慢,二是 NixOS 官方的包缓存服务器在国内访问速度较慢。
为了解决这些问题,你可以使用国内的镜像源,或者使用代理工具来加速访问。
这里我先介绍几个比较简单的配置方法。
1. 使用国内的 Nix 包缓存服务器
首先,在执行后面给出的任何 nix
相关命令时,你都可以通过 --option
选项来指定镜像源,例如:
# 使用上海交通大学的镜像源
# 官方文档: https://mirror.sjtu.edu.cn/docs/nix-channels/store
nixos-rebuild switch --option substituters "https://mirror.sjtu.edu.cn/nix-channels/store"
# 使用中国科学技术大学的镜像源
# 官方文档: https://mirrors.ustc.edu.cn/help/nix-channels.html
nixos-rebuild switch --option substituters "https://mirrors.ustc.edu.cn/nix-channels/store"
# 使用清华大学的镜像源
# 官方文档: https://mirrors.tuna.tsinghua.edu.cn/help/nix-channels/
nixos-rebuild switch --option substituters "https://mirrors.tuna.tsinghua.edu.cn/nix-channels/store"
# 其他 nix 命令同样可以使用 --option 选项,例如 nix shell
nix shell nixpkgs#cowsay --option substituters "https://mirrors.tuna.tsinghua.edu.cn/nix-channels/store"
你可以自己测试下上述几个镜像源的速度,选速度最快的一个。
2. 使用国内镜像地址加速 Flakes Inputs 的下载
如果你想使用 Flakes,但访问 GitHub 速度太慢,你可以使用国内的镜像地址来加速。
但需要注意的是,这种方式下无法锁定 nixpkgs 版本,也就失去了 Flakes 锁定依赖版本的优势。
示例如下,主要是将 nixpkgs.url
替换成国内镜像源的 nixexprs.tar.xz
文件的路径:
{
inputs = {
# nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.11";
nixpkgs.url = "https://mirrors.ustc.edu.cn/nix-channels/nixos-23.11/nixexprs.tar.xz";
# nixpkgs.url = "https://mirrors.tuna.tsinghua.edu.cn/nix-channels/nixpkgs-23.11/nixexprs.tar.xz";
};
outputs = inputs@{ self, nixpkgs, ... }: {
nixosConfigurations.my-nixos = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
./configuration.nix
];
};
};
}
3. 使用代理工具加速访问 Channels 跟 Flake Inputs
对于 Flake Inputs 跟 Channels 的加速访问,这个就需要使用代理工具加速访问。
优先推荐使用旁路网关(软路由)或者 TUN 方式的全局网络加速方案,这是最省心的方式。
如果你只有 HTTP 代理,可以通过如下命令设置代理环境变量,实现使用 socks5/http 代理加速 nix 的网络访问:
sudo mkdir /run/systemd/system/nix-daemon.service.d/
cat << EOF >/run/systemd/system/nix-daemon.service.d/override.conf
[Service]
Environment="https_proxy=socks5h://localhost:7891"
EOF
sudo systemctl daemon-reload
sudo systemctl restart nix-daemon
但请注意,系统重启后 /run/
目录下的内容会被清空,所以每次重启后都需要重新执行上述命令!
如果你希望永久设置代理,建议将上述命令保存为 shell 脚本,在每次启动系统时运行一下。或者也可以使用旁路网关或 TUN 等全局代理方案。
更详细的说明与其他用法介绍,请移步添加自定义缓存服务器,注意这部分内容可能需要一定的 NixOS 使用经验才能理解。
GitHub 报 HTTP 403 错误
注意:使用一些商用代理或公共代理时你可能会遇到 GitHub 下载时报 HTTP 403 错误(nixos-and-flakes-book/issues/74),可尝试通过更换代理服务器或者设置 access-tokens 来解决。