懒猫NIX指北:懒猫微服实现异地共享builder

零风

发布于3天前
该用户没有个性签名

NIX 让我的软件构建支持了可复现性,清晰可读的依赖以及很多好处,顺带一提现在nix的包早已经超过 arch

image.png

nix 好处非常多,但是软件编译大的批爆的风扇声音这个无论是aur 还是其他 nix 的都很难避免,本身我非常心疼电脑,因为 nix 构建和存储太离谱了,基本上写两个软件就是几百g , 加上 rust 语言编写的程序编译本就是对机器的折磨。

另外一个让我蛋疼的一点,一台机器上编译成功了的应用要在另外一台机器上使用,总是不可避免再次编译打包,我佛,t苦逼轻薄本只能说这辈子有了。

https://appstore.lazycat.cloud/#/shop/detail/cloud.lazycat.lightos.entry

懒猫微服 lightos 非常好用,加上他本身就支持无感的内网穿透,随手测试了一下差不多轻松跑满带宽,本地局域网更不用说。配置完成,即便我在异地,我的非常多设备都可以同时使用一个缓存,一个 builder ,这几乎帮我节省了大部分无意义的时间,也不用担心像平台跑路那种情况。

Nix 远程构建(或称分布式构建)的核心原理是利用 SSH 协议将构建任务的安全外包与分发。

远程机不需要重新下载或猜测依赖,它只需要接收本地缺少的特定哈希路径。
本地和远程机器都认同相同的 /nix/store/<hash>-name。

nix remote build 强大到就像你在 aur 下一个git 包 然后自动编译成二进制传给你,这种完全本地机器友善方式

这边的话我采用的是 nixos 官方推荐的远程构建器的配置,配置完成后就可以极大减轻笔记本的 cpu 内存 负载

配置 SSH 免密登录

需要配置本机 root 能远程登陆 lightos builder

[root@nixos:~]# ssh-keygen 

生成公钥

[root@nixos:~]# ssh-copy-id -p 144 tux@lzcos.heiyu.space
# 将公钥发送给remote build

配置远程机器(Worker)

设置 remote builder 用户拥有 构建的权限,这边的话我的默认账户是 tux ,我设置的tux

# in /etc/nix/nix.conf

trusted-users = root tux

重启远程机器的 Nix 守护进程:

sudo systemctl restart nix-daemon

配置本地机器(Host)

如果你用的是 nix 的话,你则需要配置

在本地机器编辑或创建 /etc/nix/machines 文件,定义你的远程构建机:

# 格式: SSH-URI 系统架构 密钥路径 最大并行任务数 权重 支持的特性
ssh://nix-worker@remote-server-ip x86_64-linux /root/.ssh/id_remotebuild 4 1 big-parallel,kvm

参数说明:

  • x86_64-linux远程机的架构(如果是 M 系列 Mac 发起,远程是 Linux,这里写 Linux 的架构)。
  • 4允许同时在该机器上运行的最大构建任务数。
  • 1权重(Speed Factor),数值越高,Nix 越倾向于优先使用它。
  • big-parallel表明该机器适合编译大型项目(如 GCC、WebKit)。

在本地机器的 /etc/nix/nix.conf 中启用该机器文件:

builders = @/etc/nix/machines
 # 如果希望本地即使能编译,也优先切到远程(或者本地架构不匹配时强制走远程) 
builders-use-substitutes = true

重启本地机器的 Nix 守护进程:

sudo systemctl restart nix-daemon

如果你用的是 nixos 的话,你则需要配置

  # ── Remote Builder ──
  nix.distributedBuilds = true;
  nix.buildMachines = [{
    hostName = "lzcos.heiyu.space";
    system = "x86_64-linux";
    maxJobs = 4;
    speedFactor = 2;
    sshUser = "tux";
    supportedFeatures = [ "kvm" "big-parallel" ];
  }];
  nix.extraOptions = ''
    builders-use-substitutes = true
  '';
  nixpkgs.config.allowUnfree = true;

  services.
lazycat-cloud-client = {
    enable = true;
  };

配置完成执行 build 操作应该会默认到 rmote 上编译

1781489197075772505.png

1781489208364190427.png

本地笔记本几乎不会执行编译任务,温度非常低。即便在异地也能利用家中的懒猫构建

评论

0

暂无评论

说点什么呢~
收藏
1
0
0