如何从 Cachix 取得已编译好的 native Emacs 二进制文件?

刚刚看到 nix-community/emacs-overlay@pr#32 已经可以编译 native-comp 了。并且每日编译的二进制放在 Cachix 托管 ( https://github.com/nix-community/infra#hosts ):

This machine is perfect for running heavy builds.

  • Provider: Hetzner
  • CPU: AMD Ryzen 7 1700X Eight-Core Processor
  • RAM: 64GB

All the builds on this machine are pushed to https://nix-community.cachix.org/

Thanks to Cachix for sponsoring our binary cache!

但是不太明白 Cachix 怎么用的:

1. Install Nix

$ bash <(curl -L https://nixos.org/nix/install)

2. Install Cachix client

$ nix-env -iA cachix -f https://cachix.org/api/v1/install

3. Start using the binary cache

$ cachix use nix-community
$ nix-build
copying path '/nix/store/n1gwpmvmcgsbnr0a8ncflhvc59db775h-myproject-1.0.0' from 'https://nix-community.cachix.org'
...

第 3. 步的 build 感觉有点困惑,这个动作不像是要取回二进制文件?

应该如何从 Cachix 取得二进制文件,以避免在本机 build ?

1赞

应该可以这么安装:

  1. 添加 emacs-overlay 的 channel
nix-channel --add https://hydra.nix-community.org/jobset/emacs-overlay/unstable/channel/latest emacs
nix-channel --update
  1. 安装并使用 cachix 添加缓存仓库
  1. 最后安装 emacsGcc
nix-env -Ai emacs.emacsGcc
  1. 参考
    https://nix-community.org/#binary-cache
    https://hydra.nix-community.org/jobset/emacs-overlay/unstable/channel/latest https://app.cachix.org/cache/nix-community

  2. ps: 正在尝试中,因为网速问题卡在了

copying path ‘/nix/store/0bf8l70dbqci8h7ay70a820ag9asq8p4-emacs-gcc-20200719.0’ from ‘https://nix-community.cachix.org’…

nixos好玩吗?有什么优势?

我自己现在可以来回答一下这个问题了。

cachix 示范的第 3 步的确指向不明确,给初次接触的用户造成一些困扰。

其实只要 cachix use <repo> 之后,无论 build 还是安装,只要引用到 <repo> 里的内容,就都会尝试去 cachix 上搜索/下载,示范这么写就无歧义了:

nix-env -iA emacs-25-2 -f https://github.com/purcell/nix-emacs-ci/archive/master.tar.gz

但 cachix 不可能知道项目的细节,所以它只能提供一个模凌两可的示范代码。

一个可能导致二进制无法下载的原因是:上传内容不完整。每次 nix-env -i xxx 的时候,依然在本机编译。

我在 https://github.com/twlz0ne/nix-gccemacs-sierra 就遇到了,刚开始的 .travis.yml 是随便抄了一份,但似乎 cachix push <repo> --watch-store& 监测上传内容不完整,即使末尾 sleep 等待 10 秒:

  script:
    - nix-env -iA cachix -f https://cachix.org/api/v1/install
    - cachix use gccemacs-sierra
    - if [ -n "$CACHIX_SIGNING_KEY" ]; then cachix push gccemacs-sierra --watch-store; fi &
-   - nix-build -A emacsGccSierra
-   - sleep 10 # to allow cachix finish uploading
+   - nix-build -A emacsGccSierra | cachix push gccemacs-sierra

后来改成两次 push,才终于正常。再执行 nix-env -i xxx 就能看到从 cachix 下载了。

1赞